EOL для прошивок измерителей сети

На волне увлечения ESP Home и Home Assistant решил мигрировать используемые измерители для главного щитка и на инверторах солнечных панелей с самописных прошивок на ESP Home.

В принципе, мои вполне успешно работали все это время, но возможность унификации и простоты доработок тоже полезна. Из минусов в моих прошивках:

  • Запрос данных в реальном времени. Как плюс – получаем данные непосредственно в момент запроса – так и минус (даже несколько): задержка при получении ответа, активное запрашивание данных может подвесить контроллер, необходимость дополнительной обвязки кода для исключения ситуаций “пустых” данных при проблемах с коммуникацией с PZEM. И так далее.
  • Доработки. Да, прошивка небольшая, но спустя пару лет мне снова надо вникать сначала в С, потом в прошивку, потом искать, как сделать то, что мне надо. С ESP Home как-то проще в этом плане.
  • Интеграция. Да, у меня получение данных и их обработка – исключительно дергая wget’ом HTTP-страничку измерителя. Дальше – запихивание результата в RRD-базу или скриптовая обработка.

Хотя в целом – все решаемо, конечно. Но направление уже выбрал.

Одна из проблем, которую требовалось решить – без ошибок обновить прошивку по воздуху с той, которую сгенерировал Arduino IDE на то, что выдает ESP Home. Для теста сначала сделал макет с копией прошивки контроллера одного из измерителей. Скопировал команды, которые используются для заливки обновления в Arduino IDE; подготовил бинарник для ручной заливки в ESP Home, а потом скормил его подопытному контроллеру той командой, которую получил из IDE:

/home/rain/.arduino15/packages/esp8266/tools/python3/3.7.2-post1/python3 /home/rain/.arduino15/packages/esp8266/hardware/esp8266/2.7.4/tools/espota.py -i 192.168.1.246 -p 8266 --auth=PASSWORD -f /home/rain/downloads/gridstat.bin

На макете все сходу успешно завелось. Так как в ESP Home обычно включаю веб-интерфейс и там есть возможность залить свой бинарник, то процедура обратима. Достаточно сделать экспорт бинарника в Arduino IDE (Sketch -> Export compiled binary), а потом загрузить его в веб-интерфейсе прошивки от ESP Home.

На реальном модуле почему-то OTA не работал в принципе – причем, как раз на нужном мне в данный момент; все остальные светились “в сети”. Уже пробовал и перезагружать модуль – ничего. В итоге просто поменял контроллер на заранее прошитый – благо, только там у меня использовался ESP01 и устройство было разобрано. Написал и протестировал скрипты-обвязку для того, чтобы собираемая ранее статистика собиралась в том же виде, что и раньше. Так как модуль обслуживал только один измеритель, то в новой прошивке реализовал работу только с ним одним (хотя в моей собственной есть возможность подключения 3 PZEM на ESP01)

Потом принялся за остальные измерители и главный щиток. Там все пошло проще, обновления без проблем разворачивались. Запустил в том числе присутствующий в главном щитке термодатчик на DS18B20 с питанием от свободного пина микроконтроллера. Итоговый конфиг выглядит так:

Конфиг-прошивка

Поначалу замечал ругань на несовпадение CRC у modbus на некоторых измерителях, но сейчас вроде такого нет.

На сейчас вроде все успешно работает; добавил множество новых датчиков в Home Assistant – теперь там есть графики выработки и потребления.

А код своих прошивок останется в качестве практического материала.

Добавить комментарий