Это странная статья, где не будет практически ничего ни о Flutter, ни о датчиках уровня топлива. Просто описание ма-а-а-а-аленького opensource проекта который может быть интересен интеграторам оборудования спутникового контроля транспорта (в скобках напишу ещё аббревиатуру “ГЛОНАСС” на которую у нас, интеграторов, срабатывает внутренний триггер).
А если конкретнее, то приложение для тех кто начал работать с BLE датчиками. Возможно оно сможет немного упростить вам жизнь. Всё бесплатно и доступно на GitHub.
C чего всё началось
В жизни каждого интегратора наступает момент, когда ты придерживался одного производителя оборудования, а потом два раза моргнул, а вокруг уже зоопарк устройств с разными фамилиями!
В “нормальной жизни” я занимаюсь спутниковым мониторингом транспорта и в очередной раз подобное случилось и с датчиками уровня топлива… А когда регулярно сталкиваешься с разным оборудованием, то всегда хочется его как-то упорядочить, классифицировать и сравнить. И для этого как нельзя лучше подходит маленькое хобби связанное с программированием.
Современный тренд у производителей датчиков уровня топлива - беспроводные датчики работающие по протоколу BLE, что расшифровывается как bluetooth low energy. Что это значит на практике?
Что такое BLE датчик
Чуть-чуть занудства и теории. Очень просто и в двух словах, BLE это когда датчик просто периодически отправляет в эфир посылки со своими данными, а спутниковый трекер или любое другое устройство их “слышит” и отправляет в систему мониторинга.
Такой ненапряжный способ работы позволяет датчику несколько лет автономно жить на одной батарее без какого-либо внешнего питания. Технически это именно односторонняя связь, а не классический bluetooth, когда с датчиком устанавливается двустороннее соединение. “Classic bluetooth” очень сильно расходует батарею устройства и прожить несколько лет без новой батарейки оно точно не сможет.
Оборудование для прототипа
Звучит шикарно и соблазнительно, не правда ли? Не надо тянуть никаких проводов, знай меняй батарейки раз в три года. Но честно говоря я очень скептически отношусь к подобным беспроводным устройствам и консервативно считаю провода самым надежным способом передачи информации.
Поэтому просто чтобы потрогать руками новинку, купил парочку беспроводных датчиков Казанского производителя Эскорт, а потом и менеджеры Тамбовской Миэлта бесплатно прислали свой датчик FANTOM для тестов.
А так как иногда пишу для коллег и клиентов небольшие статьи-сравнения оборудования, для очередной статьи просто напрашивалась “битва беспроводных ДУТов”! Логично было бы поставить датчики рядом в одинаковых условиях и посмотреть как они будут работать.
Но как проще всего снимать с них показания? Подключать к трекеру нет смысла, ведь датчикам абсолютно все равно, кто именно их “слушает”. Для сравнения и обзора удобней всего считывать показания смартфоном, это быстро и наглядно.
А здесь и вылезла небольшая проблемка. В этой статье аккуратно обойду конкретику “у кого как”, но, например, чтобы просто добраться до показаний датчика в приложение “одного из производителей” надо пройти несколько экранов, что не очень удобно. А потом ещё и сама программа перестала запускаться на моём айфоне. Проблема как-то сама собой починилась, но что называется “ложечки нашлись, а осадочек остался”.
В итоге приложение начало писаться само собой :-)
Формулируем цели
Идея примитивна, цели элементарны. Хотелось сделать приложение для смартфона которое будет собирать и показывать данные со всех доступных BLE датчиков уровня топлива. Это будет удобно и для контроля работоспособности, и, например, для проверки состояния батарей датчиков.
И ещё, маленьким бонусом, добавил возможность запомнить датчика под своим удобным именем. Например, идешь по гаражу и сразу видишь какие датчики активны и их показания: “трактор 1234вр” или “зеленый МАЗ”.
Если вам всё ещё интересно, то посмотрите как это работает на видео:
Добавление новых датчиков
Все исходники доступны на GitHub, и если вы захотите добавить какие-то дополнительные датчики то это очень легко сделать. Или пришлите данные мне на почту и по возможности я помогу их интегрировать.
Лишний раз извинюсь за то, что я инженер, а не программист. Программирование в моем случае это хобби и возможность делать для себя нехватающие простенькие инструменты. Код и архитектура могут быть не самыми красивыми, так что вся критика и хейт принимается. Я стараюсь расти над собой! :-)
Что делать, если вы хотите добавить новый датчик?
По большому счету нам не нужна никакая документация, всё можно легко найти в самом пакете данных полученных с датчика. А ещё, возможно, не будет никаких претензий со стороны производителей. Шутка.
Запускаем Android Studio, создаем новый Flutter проект, для удобства можно использовать оригинальный пример от flutter_blue, и смотрим какие данные прилетают с датчика.
У нас будет набор байт примерно такой формы:
[1, 155, 12, 35, 246, 134, 106, 142, 0, 0, 0, 128]
И это всё! Как видите вообще никаких рокет сайнс тут нет и близко.
Собираем несколько пакетов, сравниваем с данными в родном приложении датчика и определяемся в каком байте какое значение.
Например, в данном случае, 35 это напряжение батареи в 3.5 вольта.
Температура “-10” (это значение 246, с учетом переполнения регистра).
А вот значения уровня топлива тут двухбайтные, причем идут в обратном порядке (142*256 + 106 = 36458).
Собственно дальше углубляться в дебри нет смысла. Скажу только, что разгадывать датчики довольно просто и интересно, и не за горами час когда производители и интеграторы начнут защищать эти данные дополнительным кодированием. Но сейчас мы в самом начале пути.
Используя уже готовые шаблоны в программе можно быстро скомпоновать новые датчики из тех параметров которые в них присутствуют. Тип датчика в данном случае, мы, простые сельские пацаны, определяем просто по префиксу названия.
Думаю, что тренд BLE датчиков сейчас коснется не только области ГЛОНАСС мониторинга транспорта. Если у вас есть идеи того, какие датчики можно добавить, то добро пожаловать ко мне на GitHub.
Для удобства, у себя на сайте я выложил описание уже добавленных датчиков со списком тех параметров, которые есть в BLE пакете. На текущий момент это три попавших мне физически в руки датчика, Escort TL (датчик температуры), Escort TD (датчик уровня топлива) и Mielta Fantom (тоже датчик уровня, но другого производителя).
Почему я начал это делать? В первую очередь для своего же удобства. Набор данных передаваемых различными датчиками различается, так что понимание того, что именно передается через BLE, может помочь подобрать оборудование под конкретный проект.
Поясню, что имею в виду. Например, у Миэлты, мы можем увидеть следующее: абсолютное значение уровня топлива (в условных попугаях), процент топлива от полного бака, температуру датчика и угол его наклона.
Тогда как у Эскорта в списке параметров нет угла наклона, но зато кроме значения топлива “в попугаях”, сразу передаётся уровень топлива в литрах (разумеется в память датчика придётся внести калибровочную таблицу). И точность показаний температуры у него хуже (не исключаю, что это проблема только конкретных датчиков, которые у меня есть).
Готовое приложение можно скачать в AppStore и GooglePlay.
Буду рад вашим замечаниям и комментариям!