ElectricityMeter-ABC-DIY предназначен для дистанционного мониторинга многотарифных трехфазных счетчиков с последующей передачей показаний в Home Assistant.Включает в себя схему оптопорта и Zigbee модуль ZTU от компани Tuya
Repository electricity_meter_abc_zrd
ElectricityMeter-ABC-DIY рассчитан на взаимодействие через оптопорт с техфазными многотарифными электросчетчиками:
ElectricityMeter-ABC-DIY посылает команды электросчетчику и принимает ответы от него. В настоящий момент устройство может прочитать
Zigbee - удерживать кнопку более 5 секунд (зеленый светодиод должен начать моргать с частотой раз в секунду). Время присоединения к сети - полторы минуты (или пока моргает светодиод).ElectricityMeter-ABC-DIY - нажать кнопку три раза подряд.ElectricityMeter-ABC-DIY питается от источника постоянного тока напряжением 5 вольт через разъем USB Type-C и является роутером.ElectricityMeter-ABC-DIY поддерживает обновление через OTA (при обновлении рекоммендуется выбрать счетчик No Device).В проекте используется Zigbee модуль ZTU от компании Tuya на чипе TLSR8258F1KET32.

Схема
ElectricityMeter-ABC-DIY состоит из двух частей. Основной, на которой расположены оптопорт, usb разъем и питание. И модуль zigbee с датчиком температуры. Так сделано для универсальности. К оптопорту можно подключить практически что угодно (модуль на другом чипе, UART-USB преобразователь и т.д.).
Схема zigbee на модуле ZTU.
Плата
Плата основной части (низ).
Плата zigbee части на модуле ZTU (верх).
Плата zigbee части на модуле ZTU (низ).
На гребенку выведены следующие пины модуля
Ссылки на проект в easyeda
Корпус
Корпус напечатан на 3D принтере.


Готовое устройство


Скачиваем проект
Если скачали архивом, разворачиваем в какой-нибудь временной директории. Далее запускаем Eclipse. В левом верхнем углу нажимаем File, в развернувшемся меню выбираем Import

Далее выбираем Existing Project into Workspace и жмем Next.

В открывшемся окне по очереди выбираем
Browse - находим директорию, куда скачали и развернули проект.Projects: на появившемся проекте.Copy projects into workspaceFinish
Все, проект у нас в Эклипсе.
Далее нужен компилятор и кое-какие утилиты. Компилятор можно скачать у Telink’a. Установщик поставит IDE (правленый Эклипс) и компилятор с утилитами. Но мне такой винегрет не нравится, поэтому я пользуюсь обычным Эклипсом и makefile. Так же компилятор есть у Ai-Thinker. Там есть под Windows и под Linux. Так же советую скачать git bash for windows. Это позволит писать makefiles, которые будут прекрасно работать и под Windows и под Linux практически без редактирования. Еще понадобится Python, но я думаю, это не проблема. Не забудьте отредактировать в makefile и bootloader.makefile пути к компилятору, если он у вас лежит в другом месте.

Итак, компиляцию начинаем с bootloader. Собираем и прошиваем (как и чем шить чуть ниже). Если модуль пустой, то после прошивки bootloader'a модуль просто начнет моргать светодиодом. Это нормально.

Далее компилируем уже саму прошивку и прошиваем.

Если все прошло без ошибок, то модуль запустится и начнет работу.
И последнее - проект сделан таким образом, что его можно вообще собрать без IDE, обычнам make в командной строке.

Вопрос - как залить прошивку в модуль. Есть несколько вариантов. Самый простой, это приобрести у Telink их фирменный программатор.

Но он неоправдано дорого стоит. Есть другой, более бюджетный вариант. Заказываем модуль TB-04 или TB-03 от Ai-Thinker. Почему-то у самого производителя TB-04 не числится. Но на aliexpress их полно. В них применен TLSR8253. Паяем перемычку согласно фото.

И заливаем прошивку вот отсюда
Все, у нас есть недорогой программатор, который может загружать прошивки через SWS в модули от Telink’a. Пин D4 (SWM) программатора нужно соединить с пином SWS программируемого модуля, не забыть объединить земли и подкинуть питание на оба модуля.
Сама программа-прошивальщик лежит тут
Устройство является роутером, питается от сети ~200 вольт и никогда не спит.
По умолчанию считывание показаний с электросчетчика происходит один раз в минуту. Изменить в большую сторону можно через интерфейс zigbee2mqtt во вкладке Exposes (подробней о настройках чуть ниже).
Reporting
Устройство высылает 19 “явных” отчетов. И 8 “скрытых” из интерфеса пользователя.
Явные отчеты
Настроить периоды отправки отчетов, если не устроят по умолчанию, можно в интерфейсе zigbee2mqtt во вкладке reporting(подробней о настройках чуть ниже).
Скрытые отчеты
Настроить периоды отправки “скрытых” отчетов нельзя. Они отпраляются принудительно перед одноименным значением. Например, изменилось напряжение сети. Перед отправкой отчета со значением напражения сети принудительно высылаются два отчета - множитель и делитель напряжения сети. И т.д. Связано с тем, что правильное значение высчитывается в конверторе и множитель и делитель должны быть уже определены до получения значения. В обычном варианте иногда отчеты по множителю или делителю приходили позже значения. В данной схеме с принудительными отчетами множитель и делитель всегда приходят раньше значения.
Светодиодная индикация режимов модуля
Красный светодиод сигнализирует о присутствии питания на модуле. Ну и косвенно говорит нам, что программа запустилась и работает. Зеленый светодиод служит для информирования о режимах работы модуля.
Память модуля, прошивка (firmware) и где хранится конфиг
Согласно спецификации на чип TLSR8258F1KAT32 при использовании bootloader'a память распределена следующим образом
0x00000 Bootloader
0x08000 Firmware
0x77000 OTA Image
0xE6000 NV
0xFC000 U_Cfg_Info
0xFE000 F_Cfg_Info
0xFF000 MAC address
0x100000 End Flash
bootloader ничего не умеет, кроме, как запускать прошивку с адреса 0x8000 и копировать прошивку из области загрузки в область старта при обновлении через ОТА (при обновлении рекомендуется выбрать счетчик No Device).
В конфиге сохраняютстя только настройки модуля. Конфиг записывается в NV (0xE6000) в модуле ZTU. Используется модуль NV_MODULE_APP с номером NV_ITEM_APP_USER_CFG (для понимания смотрите app_cfg.h и tl_zigbee_sdk/proj/drivers/drv_nv.h)
В электросчетчиках используются разные протоколы обмена. Дополнительную информацию смотрите в разделе по конкретному электросчетчику.
В конфиг zigbee2mqtt configuration.yaml добавлять ничего не нужно. А конвертор electricity_meter_abc.js кладем в директорию external_converters, которую нужно создать в корне zigbee2mqtt.
Перегружаем zigbee2mqtt. Проверяем его лог, что он запустился и нормально работает.
Первоначальная настройка происходит через web-интерфейс zigbee2mqtt. Для начала нужно убедиться, что устройство в сети.

Если во вкладке devices его нет, нужно на ElectricityMeter-ABC-DIY нажать кнопку и удерживать нажатой не менее 5 секунд, пока не заморгает зеленый светодиод. Итак убедились, что устройство в сети, можно переходить к настройкам. Переходим к вкладке exposes устройства.

Видим, что в ячейке Device model preset выставлен счетчик No Device, т.е. никакой счетчик не выбран, считывание данных не происходит. Выбираем нужный счетчик из предложенных. По умолчанию период опроса счетчика - 1 минута. Если нужно больше (максимальное значение 255 минут), меняем настройку Device measurement preset.

Счетчик общается по протоколу СПОДЭС.
В настоящий момент устройство может прочитать из счетчика:
У этого счетчика нет команды запроса ресурса батареи. Поэтому оставшийся ресурс вычисляется между текущей датой прибора, датой производства.
Если счетчик выбран и устройство примагничено к окошку оптопорта счетчика, то в exposes web-интерфейса zigbee2mqtt получим примерно такую картинку.

Если данные не считываются, есть несколько причин.
ElectricityMeter-ABC-DIY на счетчике - USB разъемом вниз
В результате вы получите примерно вот такую картинку.

Связаться со мной можно в Telegram.
UNSIGNED32 для тарифов.Power.