Когда энергия дешевле — вовремя, чтобы её использовать
Цены за любой период вы можете посмотреть на любом экране. Сложнее понять, прямо сейчас, входит ли этот 15-минутный период в число дешёвых, и заставить что-то на это реагировать — без ручного сравнения цен и без переписывания его каждый раз, когда меняется тариф.
Хаб делает сравнение. Он определяет, какие периоды дешёвые, по правилам, которые вы задаёте, и публикует одно небольшое сообщение: что открыто сейчас и что откроется следующим. Что-то другое читает это сообщение и действует.
⚠️ Хаб ничего не переключает. На нём нет реле и нет настройки, которая заставила бы его что-то включать или выключать. Он вычисляет окна и публикует их. Решение и переключение принадлежат тому, что читает уведомление: автоматизации Home Assistant, диверсору или зарядному устройству, которое само подписано на MQTT. Если вы искали устройство, которое управляет нагрузкой по цене, — это не оно.
Это не только для динамических цен
Правила работают с полной ценой покупки каждого 15-минутного периода: динамической ценой, если она покрывает этот период, а иначе — ставкой зоны вашего тарифа с учётом всех сборов. Поэтому хаб на обычном тарифе с разным временем суток тоже получает дешёвые окна — они просто следуют вашим зонам, а сетевые сборы по времени суток учитываются в сравнении наравне со всем остальным.
Поэтому эта страница полезна, независимо от того, используете вы динамические цены или нет. Рыночная цена меняет то, насколько дешёвые периоды смещаются от дня ко дню; сам механизм один и тот же.
Правилам нужны установленные часы хаба: они используют часовой пояс самого хаба, чтобы определить, что такое «день» и «07:00». См. Время.
Три вида правил
До восьми правил, у каждого есть название, которое вы выбираете, и каждое включается и выключается отдельно. Название хранится на хабе не длиннее 23 байт — приложение прямо об этом говорит, а русская буква занимает два байта.
Цена ниже уровня
Приложение называет его «Цена ниже уровня». Вы задаёте цену, при которой или ниже которой окно открывается, и цену, при которой или выше которой оно закрывается. Окно — это сигнал, а что с ним делать, решает то, что его читает.
| Параметр | |
|---|---|
on_below |
активно, пока полная цена покупки не выше этого значения |
off_above |
остаётся активным, пока цена не достигнет этого значения; должно быть не ниже on_below |
Два уровня нужны для того, чтобы цена, которая колеблется около одного числа, не заставляла окно мигать каждый период. Если их сделать равными, мигание и будет, поэтому оставьте зазор.
Используйте, когда порог абсолютный: «работать, пока электричество дешевле 10 центов, когда бы это ни случилось».
Самые дешёвые периоды в интервале
Приложение называет его «Самые дешёвые периоды в интервале» — «для нагрузки, которая может работать в любое время интервала, например водонагревателя». Вы задаёте количество 15-минутных периодов и часы, в которых их искать.
| Параметр | |
|---|---|
periods |
от 1 до 96, каждый по 15 минут |
from_h, to_h |
ежедневный интервал в местных часах; если to_h не позже from_h, интервал переходит через полночь, а равные часы означают все 24 часа |
consecutive |
если включено, периоды должны идти одним непрерывным блоком |
Используйте, когда известно, сколько нужно работать: «четыре самых дешёвых 15-минутных периода между 22:00 и 06:00». Если consecutive включено, вы получаете один непрерывный час вместо четырёх разрозненных периодов — это то, что нужно для всего, что не любит прерываний.
Самые дешёвые периоды до времени
Приложение называет его «Самые дешёвые периоды до времени» — «для нагрузки, которая должна быть выполнена к определённому времени, например электромобиля к 07:00». Та же идея, что и выше, но привязанная к часу, к которому нагрузка должна закончиться.
| Параметр | |
|---|---|
periods |
от 1 до 96 |
deadline_h |
местный час, к которому нагрузка должна быть выполнена |
consecutive |
как выше |
Каждый день хаб смотрит на 24 часа, заканчивающиеся в этот час, и выбирает в них самые дешёвые периоды.
Используйте, когда настоящее ограничение — срок: «дайте ей два часа работы до 07:00 и выберите для этого два самых дешёвых часа ночью».
Если правило нельзя выполнить, оно отклоняется, а не тихо урезается: запрос большего числа периодов, чем вмещает интервал, возвращает ответ с указанием неверного поля. Это сделано намеренно: окно, молча укороченное, чтобы влезть, было бы другим правилом, чем то, что вы написали.
Два флага, если окно не нужно
Помимо правил есть два простых уровня:
| Флаг | Истинен, пока |
|---|---|
| «Сейчас дёшево» ниже | текущая цена покупки не выше заданного вами уровня |
| «Низкая цена продажи» ниже | текущая цена продажи не выше заданного вами уровня — отдача стоит мало или ничего |
Если уровень не задан, его флаг остаётся ложным. Это не окна: здесь нет гистерезиса и нет заглядывания вперёд, только утверждение о цене прямо сейчас. Флаг продажи стоит отслеживать там, где есть собственная генерация: это сигнал, что выгоднее потребить свою энергию, чем отдать её в сеть.
Что публикуется
Одно сообщение, меньше килобайта, в топик rbgrid/<mac>/price — retained, то есть сохраняемое брокером, поэтому всё, что подключится позже, сразу получит текущее состояние. Также оно доступно по GET /api/v1/signal и в сборке ESPHome через rbgrid_cmd.
| Поле | Что сообщает |
|---|---|
period_from, period_until |
15-минутный период, к которому относится сообщение |
buy, sell, currency |
текущие цены покупки и продажи, валюта |
price_state, provenance |
состояние динамической цены и откуда взята цена: ваш источник, запасной, передача из Home Assistant, среднее за час или ваш план |
rank_buy, rank_sell |
место этого периода в местном дне: 1 — самый дешёвый; 0 — ещё не известно |
periods_today |
сколько периодов сегодня известны — знаменатель для этого места |
windows[] |
одна запись на каждое включённое правило: его название, активно ли оно, до какого времени и когда начнётся в следующий раз |
buy_cheap, sell_low |
два флага |
ts, v |
когда сформировано сообщение и версия его схемы |
Это состояние, а не событие
Уведомление публикуется заново на каждой границе 15-минутного периода, а также сразу при любом изменении: открытии или закрытии окна, поступлении новых цен, изменении правила или уровня.
Стройте автоматизацию на текущем значении, а не на приходе сообщения. Получатель, который воспринимает каждую публикацию как событие, будет срабатывать много раз в течение длинного окна и пропустит переход, который случился, пока он был офлайн. Получатель, который читает windows[].active и действует по тому, что там написано, прав в каждый момент, в том числе в момент переподключения — для этого и нужен retained.
Открытия и закрытия также записываются в журнал самого хаба, где их можно прочитать позже в События:
price: window 'Boiler' on until <time>
price: window 'Boiler' off, next <time>
Пример, нарисованный честно
Бойлер, который работает в два самых дешёвых часа ночи:
- На хабе: правило с названием
Boiler, вид «Самые дешёвые периоды в интервале», 8 периодов, с 22:00 до 06:00,consecutiveвключено. - В Home Assistant: автоматизация, которая запускается по топику MQTT
rbgrid/<mac>/price(или, в сборке ESPHome, по собственной сущности хаба). - Её условие читает запись
Boilerвwindows[]. Активно — Home Assistant включает выключатель бойлера. Не активно — выключает.
Каждое решение в этом списке после шага 1 принимает Home Assistant. Хаб добавил одно утверждение: этот период входит в описанное вами окно. Диверсор или зарядное устройство, которое подписано на топик само, работает так же, и разделение то же: хаб констатирует факт о цене, а другое устройство решает, что с ним делать.
Из этого следует и то, что хаб не может быть причиной того, что что-то не запустилось. Если автоматизация не сработала, сначала читайте уведомление: оно говорит, что хаб считал верным, и это можно проверить.
Чего он не делает
- Хаб не переключает ничего. Это и есть вся конструкция, а не пробел, который ждёт заполнения.
- Восемь правил. Девятое отклоняется, а не молча отбрасывается.
- Окон для продажи нет. Окна используют полную цену покупки; для отдачи используйте флаг «Низкая цена продажи» ниже.
- Без установленных часов ничего не работает. Правила описывают часы и дни, а хаб, который не синхронизировал часы, не может их разместить.
Если работает не так, как ожидалось: что проверить
Окно никогда не открывается.
Прочитайте само уведомление: в windows[] для каждого включённого правила есть next_start. Если next_start есть, правило работает, и вы просто раньше времени. Если правила нет в списке, оно выключено.
Окно каждый день открывается в другое время, а я ждал фиксированного. Это правило «самых дешёвых периодов» работает как задумано: дешёвые периоды смещаются, когда смещаются цены. Если нужны одни и те же часы каждый день, вам нужна зона в вашем плане, а не окно.
Окно мигает. Правило «ниже уровня» с двумя слишком близкими уровнями и ценой между ними. Увеличьте зазор между включением и выключением.
Правило не сохранилось — его отклонили. В ответе назван поле. Обычные две причины: периодов больше, чем может вместить окно, или цена выключения ниже цены включения.
Окна игнорируют динамическую цену и следуют плану.
Они следуют полной цене покупки каждого периода, которая переходит к плану, когда ни одна динамическая цена не покрывает этот период. Проверьте поле provenance в уведомлении: plan там означает, что для этого периода не действовала рыночная цена — см. Откуда берётся ваша цена.
rank_buy равен 0.
У места пока нет знаменателя: сегодняшние цены известны не полностью. Значение заполнится по мере поступления цен.
Автоматизация срабатывает снова и снова в течение одного окна.
Она срабатывает на сообщение, а не читает состояние. Уведомление публикуется каждые 15 минут по замыслу; поставьте условие автоматизации на windows[].active.
Автоматизация пропустила окно, которое, по журналу, открылось. Получатель был офлайн в момент перехода и ждёт событие, которое уже произошло. Читайте сохранённое сообщение при подключении — для этого оно и сохраняется.
Часы сдвинуты на постоянное смещение. Правила используют часовой пояс самого хаба, а не телефона или Home Assistant. Проверьте Время.
Я хочу, чтобы окно учитывало и мою плату за мощность. Не учитывает — окна относятся к цене за кВт·ч. Наибольшее потребление за расчётный период измеряется отдельно и ни во что не переводится в деньги: см. Пики потребления.
⚠️ Для любых работ внутри электрощитка вызывайте квалифицированного электрика.