Заметка между делом.
Давно уже мигрировал код модуля контроля параметров сети главного щитка на базу ESP Home. В основном все работает, но какое-то время назад добавлял «красивости» — хотелось регистрацию максимальных значений мощности по каждой из фаз, суточный объем потребленной энергии и тому подобное.
Сначала использовал
filters:
- max:
window_size: XXX
send_every: 1
send_first_at: 1
с большим значением XXX, чтобы покрыть примерно сутки. Подробности не помню, но работало совсем плохо. Решил пойти по принципу, использующемуся в RRD — подробные значения в одном кольце, менее подробные — в другом, еще менее подробные — в третьем. Добавил отдельные шаблоны «Максимум за минуту», «Максимум за час», «Максимум за сутки» с публикацией значений из «младшего» шаблона в «старший».
Вроде даже как-то работало, местами (см. ниже) даже получше, но столкнулся с интересным поведением системы в целом — перезапуски через примерно одинаковые промежутки:
Что интересно, как видно из графика — не всегда. Иногда работало долго. Но явно происходило какое-то переполнение, вызывавшее перезапуск контроллера. Понятное дело, что нормально статистика за час или сутки в итоге не накапливалась.
Так или иначе, избавление от таких фильтров нормализовало работу. Перевел на более простой механизм: сравнение текущего значения с сохраненным в переменную, если больше — обновляем переменную. В полночь сбрасываем значение. Да, не «скользящее окно», но мне достаточно.
Из минусов — ESP8266 уже не особо справляется с таким — видел ругань на нехватку памяти для генерации JSON’а (или как-то так) при обращении на веб-интерфейс. Не знаю, повлияло то, что начал использовать web_server v3 (скорее всего) или что-то другое. Но в 3-й версии удобная группировка значений:
В идеале бы использовать ESP32, но пока не знаю, исправили ли там работу с software serial или нет — без этого не смогу подключить несколько PZEM-004 на один контроллер.