Энергия, которая переживает перезапуск Home Assistant: почему статистика теряет часы и как заполняется пробел

  • Проверено на прошивке v1.2.1
  • Начало работы

Home Assistant отключается на двадцать минут — обновление, перезагрузка, отключение питания. Он возвращается, и на панели Energy либо дыра там, где был вечер, либо всплеск в час возвращения, которым никто не пользовался.

Эта картина знакома настолько, что её узнают по одной строке:

«Это просто добавляет всю энергию, которую вы пропустили, к часу, когда систему снова включили.» — anon11644107, Home Assistant forum thread 965144

И вторая картина, когда перезапускается устройство:

«Из-за этого наши Shelly 3EMs перезагружаются, а затем HA записывает крупный пик в 1000-ах кВт·ч потребления.» — msa, тема 479362

Почему это происходит и почему это не ваша настройка

Два механизма, оба обычные.

Счётчик догоняет всё сразу. Ваш счётчик продолжал считать, пока Home Assistant его не слушал. Когда Home Assistant возвращается и снова читает показания, вся разница приходит одним отсчётом и попадает в час перезапуска, потому что именно тогда он был записан. Энергия настоящая. Час — нет.

Или счётчик идёт назад. Устройство, которое потеряло питание, может вернуться с нуля. Накопительный датчик воспринимает это как сброс счётчика, и дальше либо пропадает накопленная сумма, либо появляется выдуманная:

«Из-за этого ваша энергия переходит с 4445 кВт·ч на 0 кВт·ч» — anon11644107, тема 386521

«всякий раз, когда датчик пропадал и возвращался, его значение прибавлялось к utility meter» — TimoVerbrugghe, тема 1010856

Ни то ни другое не является ошибкой вашей установки, и именно поэтому это стоит стольких вечеров: вы ищете неисправность там, где её нет. Home Assistant хранит энергию как почасовую долгосрочную статистику, а накопительный счётчик, который сбрасывается, в эту модель плохо вписывается. Обе стороны по отдельности разумны.

Ручная правка работает, но не закрепляется

Ответ, который люди передают друг другу, — Developer Tools → Statistics, где можно исправить строку, или прямая правка таблицы статистики. Это действительно работает, в своих пределах: можно поправить неверный час, но нельзя создать часы, которые никогда не были записаны. И это не масштабируется до размера настоящего пробела:

«У меня 2-дневный пробел в статистике энергии, потому что мой инвертор был офлайн.» — ConfusedTA, тема 803010

«Об этом много говорили, и я тоже с этим сталкивался, не находя простого обходного пути.» — VaReTaS, тема 803010

«Хотел бы как-то привести это в норму. Но я даже не могу понять, с чего начать.» — 104mapo, тема 965144

Два дня — это примерно пятьдесят строк. Три недели — около пятисот. А правка устраняет симптом, а не причину, так что следующий перезапуск начинает работу заново.

Что меняется, когда запись живёт на счётчике

Дыра существует, потому что единственная копия записи находилась в Home Assistant, а Home Assistant не работал.

Хаб RBgrid ведёт собственную книгу: он измеряет, закрывает каждый 15-минутный период, оценивает его по цене, действующей в этот момент, и записывает результат в свою флэш-память. Ничто из этого не зависит от того, работает ли Home Assistant. Когда записью занимается хаб, перезапуск Home Assistant — это перерыв в просмотре, а не в измерении.

Каждый сохранённый час также несёт собственную пометку о качестве, поэтому необычная запись об этом говорит, а не выглядит обычной. Час, в котором поглощена энергия после перерыва в измерении, помечается как покрывающий перерыв в работе, и страница «История» показывает эту пометку рядом с цифрой — число не подаётся тихо так, будто ничего не произошло.

Речь о записи хаба, а не о Home Assistant. Ничто здесь не меняет то, что Home Assistant хранит и как он это хранит. Следующий раздел — о части, которая действительно доходит до Home Assistant.

Почасовой импорт и настройка, которая определяет, что вы видите

Интеграция RBgrid относится к одному из двух способов работы хаба: хаб, прошитый как устройство ESPHome. Если ваш хаб работает на автономной прошивке и подключается к Home Assistant по MQTT, импортировать нечего включать, а переход между ними — это перепрошивка, а не настройка, поэтому выбор делается в начале, а не переключается потом.

На этом маршруте книга хаба не остаётся в хабе. Каждый час интеграция запрашивает её и записывает в долгосрочную статистику самого Home Assistant как второй набор строк, рядом с теми, что Home Assistant уже ведёт для ваших живых датчиков, — одна строка на час, с энергией и стоимостью, которые хаб записал за этот час, а не за час, когда пришло показание. Импорт продолжается с того места, где остановился, поэтому пауза в несколько дней заполняется час за часом, а не сваливается в одну точку. Первый импорт, которому не от чего продолжаться, идёт назад: до 30 дней почасовой книги хаба попадают в статистику за один проход. С этим связаны два ограничения, и оба важнее самой цифры: часы, которые хаб провёл без питания, в его книге отсутствуют, поэтому заполнить их нечем; и импорт добавляет собственные строки, не трогая ваши уже существующие.

Импорт выполняется сам, раз в час. Кнопка Import into HA statistics на вкладке History панели запускает тот же проход немедленно — это один механизм с ручным запуском, а не два. В выборщиках самого Home Assistant — в настройках источников панели Energy, в карточке статистики — строки появляются под именами вроде RBgrid Hub Main energy in и … cost. Импортированный час может появиться с энергией, но без стоимости, и получить стоимость при следующем проходе; это значит, что на момент импорта тарифный план ещё не задал денежную единицу, а не то, что деньги пропали.

⚠️ По умолчанию панель Energy эти строки не показывает. Мастер настройки интеграции подключает панель к живым счётчикам, а на них перезапуск по-прежнему даёт знакомый скачок в час, когда Home Assistant вернулся. Импортированные строки, в которых нет дыры, доступны в настройках источников панели Energy — их нужно выбрать.

Поэтому здесь три разные вещи, и их смешение — причина, по которой люди разочаровываются:

Есть дыра после перезапуска?
Собственная запись хаба Нет — он никогда не прекращал измерять
Импортированные строки статистики в Home Assistant Нет — это почасовая копия этой записи
Живые счётчики, которые панель использует по умолчанию Да — тот же скачок в час, когда HA вернулся

На маршруте MQTT импорта нет вовсе: хаб публикует живые значения, а статистика Home Assistant ведёт себя так, как всегда. Собственная запись хаба при этом цела, и это по-прежнему место, куда стоит смотреть, когда цифра вызывает сомнения.

Как проверить, а не верить на слово

  • В хабе: откройте страницу «История» хаба за интересующий день. Час, в котором поглощена энергия после перерыва, говорит об этом в своей пометке о качестве, так что вы отличите странно выглядящий час от неверного.
  • В Home Assistant: сравните источник живых счётчиков с импортированными строками RBgrid Hub … за тот же день. Если они различаются, разница и есть пробел — а импортированные строки те, в которых часы стоят на своих местах.
  • По счёту: журнал применённых цен хаба хранит 40 дней в CSV, по одной строке на каждый закрытый 15-минутный период, с указанием источника каждой цены.

Чего это не делает

  • Не исправляет существующую историю Home Assistant. Строки, которые уже были неверными, остаются неверными; импорт добавляет свои строки из собственной книги хаба и не переписывает ваши.
  • Не меняет источник панели по умолчанию. Этот выбор остаётся за вами, в настройках панели Energy, и эта статья не предсказывает, что он изменится.
  • Не даёт Home Assistant 15-минутного разрешения. Периоды хаба принадлежат хабу; то, что доходит до Home Assistant, — почасовое, как и всегда.
  • Не останавливает выпадение ваших датчиков. Оно убирает последствие для записи, а не причину в вашей сети.

Где читать дальше

Цитаты приведены из публичных тем форума Home Assistant и GitHub issues, с авторами и номерами тем, чтобы вы могли прочитать каждую тему целиком.