Спросите Home Assistant, в какие часы завтра электричество будет дешевле всего, и вы окажетесь там, куда не планировали: интеграция-планировщик, шаблонный сенсор с макросом, отсортированный список часов и автоматизация, которая сравнивает текущий час с результатом. Это работает, и люди годами поддерживают именно такую схему. Но это много движущихся частей ради вопроса с однословным ответом — сейчас хорошее время?
Хаб отвечает на этот вопрос сам. Он знает цены на каждый 15-минутный период, поэтому может вычислить, какие периоды дешёвые, и публикует результат как окно: открыто оно или закрыто, до какого времени и когда начнётся следующее.
Чего он не делает, так это не действует по нему. Это уже ваша часть.
Что такое окно
Вы описываете правило; хаб проверяет его по ценам, которые у него есть.
| Правило | Что это значит | Когда использовать |
|---|---|---|
| Цена ниже уровня | открыто, пока цена покупки «всё включено» — рыночная цена с комиссиями, налогами и НДС вашего договора уже внутри (из чего она складывается) — не выше вашего уровня; закрывается снова выше второго, более высокого уровня | порог абсолютный: «пока электричество дешевле 10 центов, когда бы это ни случилось» |
| Самые дешёвые периоды в промежутке времени | открыто на n самых дешёвых периодов внутри промежутка, который вы задаёте | нужны n периодов, и не важно когда, в пределах части дня |
| Самые дешёвые периоды до времени | открыто на n самых дешёвых периодов между сейчас и сроком | что-то нужно сделать к 07:00, и вы хотите самый дешёвый способ успеть |
Два уровня в первом правиле, а не один, — не придирка: цена, которая колеблется около одного числа, заставляла бы окно мигать каждый период. Оставьте себе зазор.
Рядом с правилами есть два простых флага — покупка дешёвая ниже и продажа низкая ниже. Они говорят о цене прямо сейчас, без планирования и без гистерезиса. Флаг продажи полезнее на объекте с генерацией: это сигнал, что ваша собственная энергия стоит дороже, если её потратить самим, а не отдать в сеть.
Лимит — восемь правил. Девятое отклоняется, а не молча отбрасывается.
Читайте состояние, а не сообщение
Это единственный совет, от которого зависит, будет ли ваша автоматизация работать.
Состояние окна публикуется заново на каждой границе 15-минутного периода и сразу, когда что-то меняется: окно открылось или закрылось, пришли новые цены, правило изменили. Это состояние, а не объявление.
Поэтому опирайтесь на текущее значение. Автоматизация, которая считает каждую публикацию событием, срабатывает снова и снова на протяжении длинного окна и пропускает переход, который случился, пока она перезапускалась. Автоматизация, которая спрашивает «открыто ли это окно?», права в любой момент, в том числе в момент возвращения.
Чтение из Home Assistant: два пути, как это написано сейчас
Здесь честный ответ зависит от того, как вы запускаете хаб.
На собственном пути хаба, по MQTT, состояние приходит как сохранённое (retained) сообщение в rbgrid/<mac>/price — меньше килобайта, по одной записи на правило: его имя, открыто ли оно, до какого времени и когда начнётся в следующий раз. Важно слово «сохранённое»: всё, что подключится позже, сразу получит текущее состояние, так что перезапуск вам ничего не стоит. Сообщение в JSON, поэтому обычная схема — MQTT-сенсор с шаблоном, который вытаскивает нужное правило; в справке хаба есть worked example именно этого, с названиями полей.
На пути ESPHome окна тоже сущности: один бинарный сенсор на каждое правило на устройстве хаба. Он в состоянии on, пока окно открыто, и содержит, когда оно закроется и когда начнётся следующее. Рядом стоят флаг цена дешёвая, флаг цена продажи низкая и сенсор ранга для текущего периода. Они обновляются каждую минуту и сразу после каждого ценового события хаба.
Значит, автоматизация — это одно условие состояния по одной сущности, на любом пути. Про ранг, поскольку он есть в обоих местах: он показывает, где текущий период стоит среди периодов сегодняшнего дня, которые известны, — 1 означает самый дешёвый, а знаменатель — сколько периодов с ценами хаб знает на данный момент.
⚠️ Если ваша интеграция старее этой, окна не являются сущностями, и состояние нужно запрашивать — через действие, которое возвращает ту же структуру, что несёт MQTT-сообщение. Рецепт для этого — шаблонный сенсор на триггере, и он по-прежнему работает; просто он больше не нужен. Обновите интеграцию, и шаг исчезнет.
Одна оговорка, которую стоит помнить: сенсоры по правилам проверены в тесте, а не наблюдались в открытии на живом хабе, потому что стенд выключили до того, как подошло окно. Соответствие проверено; сама картина пока не зафиксирована.
Что сводится к автоматизации
Обвязка отличается, как сказано выше. Логика — нет, и когда состояние оказывается там, где его видит ваша автоматизация, она занимает три строки:
- Открыто ли окно
Boiler? — спрашиваете состояние. - Да → ваша автоматизация включает выключатель бойлера.
- Нет → ваша автоматизация выключает его.
Каждое решение после шага 1 принимает Home Assistant. Хаб дал один булев признак и причину для него.
Открытия и закрытия записываются и в собственный журнал хаба, так что потом можно прочитать, что произошло, пока вы не смотрели:
price: window 'Boiler' on until <time>
price: window 'Boiler' off, next <time>
Единственный готовый блюпринт и для чего он
Интеграция поставляется с двумя блюпринтами. Первый, RBgrid — notify on hub events, делает то, что говорит название: уведомляет. Его список типов событий по умолчанию охватывает события оборудования и соединения — обратный поток, модуль пропал или вернулся, узел офлайн или онлайн, зависшая шина, прошивка, сбои.
Ценовых событий в этом списке по умолчанию нет. Вы можете добавить тип price сами, и тогда придут уведомления об окнах — вместе со всеми остальными ценовыми событиями, включая каждую успешную загрузку, потому что у них один тип и разделить их нельзя.
Второй, RBgrid — cheap window turns a switch on and off, принимает сенсор окна и выключатель, лампу, вентилятор или входной булев флаг, с опцией инверсии. Здесь важно быть точным, потому что это то же ограничение, что и везде в этой статье: автоматизация переключает; хаб сообщает. Блюпринт — заранее подготовленная автоматизация, а не возможность счётчика.
Чего хаб не делает никогда
- Он ничего не переключает. На нём нет реле и нет настройки, которая что-либо включает.
- Он не планирует за вас сверх правила. Правило — это описание того, какие периоды подходят; хаб применяет его и сообщает, каков ответ.
- Окон на стороне продажи нет. Окна используют цену покупки «всё включено». Для экспорта сигналом служит флаг продажа низкая.
- Ничего не происходит без установленных часов. Правила описывают часы и дни; хаб, который не синхронизировал свои часы, не может их расставить.
Когда окно не открылось, а вы ждали
- Проверьте, что цены пришли — и прочитайте следующий абзац, потому что это самая частая причина. Правилу о самых дешёвых периодах промежутка нужны цены за этот промежуток. Журнал хаба говорит, что было сохранено и когда.
- Проверьте два уровня. Равные уровни заставляют окно мигать; слишком широкий зазор держит его закрытым.
- Проверьте часы. См. выше — это тихая причина.
- Проверьте, какую цену использовал период. Если источник отказал и ваш план покрыл период вместо него, окно оценивалось по тарифу плана — это другое число. Журнал называет источник для каждого периода.
Ночные цены на завтра пришли поздно
Этому нужен отдельный абзац, потому что он порождает окно, которое выглядит неправильным, но таковым не является.
Хаб не ждёт цены и не пропускает часы, на которые у него нет рыночной цены. Он ранжирует каждый период окна по той цене, которую взял бы за этот период — сначала рыночный источник, затем ваш запасной, затем тарифная зона плана с её комиссиями и НДС. Потом он непрерывно пересматривает решение, поэтому когда цены приходят, окно переезжает на часы, которые действительно самые дешёвые среди ещё предстоящих.
Из этого следуют два последствия, и оба — честное поведение, а не сбой:
- окно может открыться там, где вы не ждали — вечером, если сегодняшние рыночные цены там оказались ниже тарифа плана, или ночью по тарифу плана, когда ничего другого не известно;
- окно может идти короче, чем вы просили. Уже прошедший выбор не отменяется; если новый набор самых дешёвых включает периоды, которые уже прошли, они засчитываются как выбранные и больше не могут сработать, а хаб не добирает ночь дополнительными периодами. Следующий день — в норме.
Если цены не придут вообще, всё ранжируется по тарифу плана, и окно ложится на самые дешёвые периоды плана — обычно на ночную зону, если она в плане есть.
Во всех этих случаях окно открылось правильно для данных, которые были у хаба в тот момент. Журнал событий показывает каждое перемещение, а колонка источника в журнале цен показывает, какие периоды оценены по плану, а не по рынку.
Где читать дальше
- Price notifications and cheap windows — полный справочник: каждый параметр, публикуемые поля и рабочий пример.
- Where your price comes from — как период получает свою цену.
- Events — журнал хаба, включая строки об окнах выше.
- Два способа запустить RBgrid — выбор пути, от которого зависит последняя треть этой статьи.