Сразу хочу выразить благодарность Виктору pvvx за его работу ATC_MiThermomete. Это мне помогло разобраться в нюансах программирования BLE на TLSR8253 (хотя не факт, что я написал полностью правильный код :)). Ну и еще он отвечал на мои глупые вопросы на форуме. Спасибо.
А также моему сыну Алексею, который помог мне со стилями в html, чтобы все выглядело так, как я хотел. Спасибо.
Описание
- Рассчитано на два счетчика воды.
- Не работает с системой namur, только замыкание-размыкание (сухой контакт).
- Ведет подсчет замыканий-размыканий, увеличивая каждый раз количество литров на заданное значение от 1 до 10 литров (по умолчанию 10 литров на один импульс).
- Сохраняет показания в энергонезависимой памяти модуля.
- Передает показания по Bluetooth LE в рекламном пакете в формате BTHome V2.0.
- Данные датчиков в пакете могут быть зашифрованы AES-CCM.
- Первоначальная настройка происходит через WEB-интерфейс.
- Соединиться с модулем можно только с того устройства, с которого производили первое соединение. Первый раз соединиться можно с любого устройства. Чтобы сбросить whitelist, нужно замкнуть контакт SWS на землю более, чем на 5 секунд (или через WEB-интерфейс, если первоначальное устройство соединения доступно).
Железо
Выбор пал на недорогой модуль от Ai-Thinker TB-04 (чуть больше 120 рублей)
Испытывалось все на вот таком модуле от Ai-Thinker TB-04-KIT
Чтобы в этот модуль залить прошивку нужно 2-ю ножку микросхемы CH340 соединить с выводом SWS.
Саму программу заливки можно скачать у pvvx - TlsrComProg. Спасибо ему еще раз. По большому счету нужны всего два файла TlsrComProg.py и floader.bin
Корпус
Решение самодостаточного модуля было подсмотрено в проекте waterius. Чтобы не изобретать, куда это потом все прятать, берем, так называемый, Battery Holder Box на 3 батарейки АА. Переделываем на 2 батарейки и получаем питание 3 вольта и один сегмент под плату.
Плата
Изначально была одна версия платы. На испытательном варианте все работало нормально. Но в реальных условиях выяснилось, что иногда при срабатывании одного счетчика, например горячей воды, автоматом увеличивается и счетчик холодной. Было предположение, что происходит наводка из-за длинных проводов. В результате родился второй вариант платы. Но проблема осталась и со второй версией платы. Ошибка была все-таки в коде.
В общем есть два варианта платы. Выбирайте любой. Все работает.
Готовое устройство
Софт
Прошивку нужно залить в модуль с помощью github.com/pvvx/TLSRPGM или github.com/pvvx/TlsrComProg825x. Это уж как кому нравится. Затем соедиться с ним через Web-интерфейс и настроить начальные данные - количество литров горячей воды, количество литров холодной воды и количество литров на один импульс (смотрите документацию на ваш счетчик). А также обновить прошивку "по воздуху". Если нужно шифрование передаваеммых данных, вводим ключ длиной 16 байт, например '231d39c1d7cc1ab1aee224cd096db932', и отправляем его, нажав на кнопку 'Set BindKey'.
Первое соединение происходит достаточно быстро, потому что период обнаружения выбран малый, 250 мсек. После первого соединение этот период увеличивается до 2.5 секунд для экономии батарейки. Потому на последующие соединения, если таковые будут нужны, понадобится больше времени (не пугайтесь, все работает).
Вроде все. Будут вопросы, задавайте, если смогу, отвечу.
Скриншот из Home Assistant
Пример автоматизации для Home Assistant
История версий
- 1.0 - Начало.
- 1.1 - Добавлена возможность обновления по OTA.
- 1.2-1.6 - Эксперименты с изменениями версий для конфигурирования через web-интерфейс. Добавления нотификаций.
- 1.7 - Добавлена возможность отображать отладочную информацию с модуля в web-интерфейсе при конфигурации.
- 1.8 - Добавлена возможность сбросить whitelist через замыкание SWS на землю на время более 5 секунд.
- 1.9 - Изменен формат сообщений согласно новой спецификации BTHome V2.0. Добавлена возможность шифровать данные датчиков AES CCM.
- 2.0 - Устранена проблема с подсчетом импульсов.
- 2.1 - Устранена проблема с подсчетом импульсов (иногда происходили пропуски в подсчете замыканий).