Заметка между делом.
Давно уже мигрировал код модуля контроля параметров сети главного щитка на базу 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 на один контроллер.