Подключение счётчиков воды Элехант к умному дому OpenHAB

6 лет жизни в доме пролетели незаметно и вот пришло время доверять или менять счётчик воды. Поясню, что у меня в доме городской водопровод и канализация, соответственно мне выставляют счета за воду, а объём водоотведения (канализации) считатют равным потреблению воды и так как цены ижевского водоканала растут в последние годы весьма заметно, то я решил воспользоваться вариантом с установкой дополнительного счётчика на воду для полива, которая не учитывается при определении платы за канализацию. Некоторые ради экономии делают отдельные скважины для полива, но я применил передовые технологии полива для сокращения расхода воды именно на полив, да и сам полив у меня регулируется умным домом, так что, потребляемые объёмы невелики (да участок у меня небольшой). Но у меня есть увлажнитель и он распыляет по дому около кубометра воды за сутки и вода эта не попадает в канализацию, а выводится вытяжной вентиляцией на улицу. Фактически я именно ради того что бы не оплачивать канализацию за те объёмы воды, что уходят в воздух и решил поменять схему включения и установить дополнительный счётчик. Водоканал объяснил мне по телефону какая должна быть схема установки счётчиков. Сантехники перепаяли мне трубы изрядно и поставили новые счётчики.

То была присказка, а вот теперь перейду к интересному. 6 лет назад я изучал счётчики и цена на счётчики с выдачей конкретных цифр была заоблачной. Альтернатива была в счётчиках, которые выдавали импульсы. К ним ставился контроллер, который их читал и передавал дальше в умный дом для отображения. Такая система у меня была реализована, но она имела недостатки в лице энергозависимости и необходимости вносить коррекцию в случае если водой пользовались при отсутствии электричества. Но годы прошли и появились бюджетные счётчики которые имеют беспроводной интерфейс BLE который широко распространён среди гаджетов для умного дома. Он отличается от Zigbee простотой реализации и становится всё более популярен. В частности Xiaomi раньше использовавший Zigbee теперь выпускает новые модели устройств с BLE. Ну вот в поисках счётчиков умных в этом году я наткнулся на счётчики Элехант, которые стоят как импульсные счётчики, но при этом данные выдают именно через BLE. Так что я их заказал в Ozon и 4 дня дней забрал в в ближайшем «продуктовом магазине типа Перкрёсток» (там у нас выдача Ozon и постамат Халва куда DPD привозит посылки с Aliexpress). Счётчики стоили по 1 320₽ при том, что цена простейшего счётчика ~600₽, а цена импульсных счётчиков заметно дороже Элехантна.

16067f28bd3d59c006f72210ba2e70e8.jpg

Счётчики выглядят прикольно, так как у них вместо циферок QR-код для скачивания приложения и номер самого счётчика, а показаний на нём самом посмотреть нельзя! При этом заявлено, что батарейки хватает на 6 лет и в ходе проведения поверки каждые 6 лет нужно менять батарейку. Данные в BLE. Данные в BLE они выдают в поле «manufacturer», то есть данные производителя без расшифровки и разбивки на поля. Я написал в техподдержку производителя с вопросом, а нет ли документации по поводу того, что они вещают в эфир. На что мне ответили — «это коммерческая тайна», что было ожидаемо и предельно глупо, конечно, так как поиск выдал, ещё до того как я задал вопрос, несколько реализаций извлечения этих самых данных. Наиболее интересным вариантов и понятным мне оказалась вот эта статья. Оттуда я взял тестовый скрипт и расположение полей, а дальше переписал преобразования в удобном виде прямо в OpenHAB.

Для того что бы получить данные из BLE и отправить их в MQTT и через него в OpenHAB я использую шлюз LUMI европейской версии от Xiaomi с прошивкой OpenWrt где включен BLE (по умолчанию он не используется и интерфейс неактивен). Сразу скажу, что Xiaomi не использует этот интерфейс и предлагает покупать новые модели шлюзов для новых датчиков!!! Такой вот маркетинг!!! Так что, если кто там рассказывает сказки про замедление iPhone лучше почувствуйте как китайцы просто тупо предлагают менять железку из-за того, что софт не хотят исправить свой. Короме самого OpenWrt на шлюз установлен пакет EspruinoHub и Zigbee2MQTT, конечно. Первый отправляет всё полученное из BLE на MQTT брокер и обратно, а второй так же связывает Zigbee в обе стороны.

Получив такую информацию я завожу в OpenHAB счётчик как вещь (thing) и прописываю каналы, которые все кроме уровня сигнала обрабатывают топик ble/advertise/b0:01:02:00: bc: f6/manufacturer/ffff, но для обработки применяют разные скрипты для получения разной информации или информации в разных форматах.

Для получения значения потребления воды в десятых долях литра я используют входное преобразование (Incoming Volume Transformation) JS: elehant_vol_cl.js прямо в расширенных настройках канала. Сам скрипт лежит в каталоге transform и представляет собой простенькую процедуру на JavaScript:

(function (i) { var str=i.replace (/»/g,'');
return parseInt ((str.substr (24,2)+str.substr (22,2)+str.substr (20,2)+str.substr (18,2)),16) })(input)

для работы скрипта ему нужна локальная переменная и при её определении обрезаются пробелы, если они вдруг окажутся в выдаче. Формируется строка в правильной последовательности и она преобразовывается из шестнадцатеричной системы в десятичную. Так как в сбытовую компанию сдаются показания в кубометрах, то рядом лежит скрипт где возвращается результат деления на 10000 этого целого.

Для однозначности идентификации счётчиков полезно получать их номера непосредственно с них и это делается вот таким скриптом:

(function (i) { var str=i.replace (/»/g,'');
return parseInt ((str.substr (16,2)+str.substr (14,2)+str.substr (12,2)),16);
})(input)

всё то же что в первом, но другие символы из строки используются.

PS: так как я не осилил этот клон WP, то оригинал тут https://ae11.me/archives/8332

PS: описанное решение совершенно автономно (OpenHAB крутится на Raspbery), но при этом управляемо как через VPN, так и через облачное решение OpenHAB (оно отличается тем, что вы можете развернуть его на своём сервер где угодно) и и лично я использую интеграцию как с HomeKit и Siri, так и с KNX который про интернет совсем ничего не знает… работает отлично! Самый частый сценарий — нажать на часах кнопку открыть калитку когда подъехал к дому, а закрываю калитку нажатием на KNX- панель около входя, которая так же термостат и датчик температуры, состоит как болт от «чугунного моста» (ну KNX от такой, но красиво и надёжно пока блок питания не сдох, конечно)…

© Habrahabr.ru