Saber cuándo la energía es más barata, a tiempo para usarla

Puede consultar los precios de ayer en cualquier pantalla. Lo difícil es saber, ahora mismo, si este periodo de 15 minutos es uno de los baratos, y tener algo que actúe en consecuencia sin que usted tenga que escribir a mano una comparación de precios y rehacerla cada vez que cambie su tarifa.

El hub hace la comparación. Calcula qué periodos son los baratos según las reglas que usted define, y publica un mensaje breve que indica qué está abierto ahora y qué se abre después. Otro sistema lee ese mensaje y actúa.

⚠️ El hub no conmuta nada. No tiene relé ni ningún ajuste que lo haga encender o apagar algo. Calcula las ventanas y las publica. La decisión y la conmutación corresponden a quien lea la notificación: una automatización de Home Assistant, un desviador, un cargador que se suscriba a MQTT por sí mismo. Si buscaba un dispositivo que controle una carga según el precio, este no es ese dispositivo.


No solo para precios dinámicos

Las reglas funcionan sobre el precio de compra all-in de cada periodo de 15 minutos: el precio dinámico cuando hay uno que cubre ese periodo, y si no, la tarifa de zona de su plan con sus cargos. Así, un hub con un plan horario sencillo también obtiene ventanas baratas: simplemente siguen sus propias zonas, y los peajes de red por franja horaria cuentan en la comparación como todo lo demás.

Esto significa que esta página merece la pena leerla tanto si usa precios dinámicos como si no. Lo que cambia con un precio de mercado es cuánto se desplazan los periodos baratos de un día a otro; el mecanismo es el mismo.

Las reglas necesitan que el reloj del hub esté ajustado, y usan la zona horaria propia del hub para decidir qué significan «un día» y «07:00» — véase Time.


Tres tipos de regla

Hasta ocho reglas, cada una con un nombre que usted elige, y cada una activable y desactivable por separado. Un nombre tiene como máximo 23 bytes tal como lo guarda el hub: la aplicación lo indica claramente, y una letra cirílica cuenta como dos.

Precio por debajo de un nivel

La aplicación la llama Price below a level. Usted indica un precio igual o inferior al cual la ventana se abre, y un precio igual o superior al cual se cierra. La ventana es una señal, y lo que se haga con ella lo decide quien la lea.

Parameter
on_below activa mientras el precio de compra all-in esté igual o por debajo de este valor
off_above permanece activa hasta que el precio alcance este valor; debe ser igual o superior a on_below

Los dos niveles existen para que un precio que oscile alrededor de una cifra no haga que la ventana parpadee de encendido a apagado en cada periodo. Si los iguala, obtendrá exactamente ese parpadeo, así que deje un margen entre ellos.

Úselo cuando su umbral sea absoluto: «funcionar mientras la electricidad esté por debajo de 10 céntimos, siempre que eso ocurra».

Periodos más baratos en un intervalo de tiempo

La aplicación la llama Cheapest periods in a time span — «for a load that can run any time in a span, such as a water heater». Usted indica un número de periodos de 15 minutos y las horas en las que buscar.

Parameter
periods de 1 a 96, cada uno de 15 minutos
from_h, to_h la ventana diaria, en horas locales; si to_h es igual o anterior a from_h, cruza la medianoche, y las mismas horas significan las 24 horas completas
consecutive si está activado, los periodos deben formar un bloque ininterrumpido

Úselo cuando lo que usted conoce es el tiempo de funcionamiento necesario: «los cuatro periodos de 15 minutos más baratos entre las 22:00 y las 06:00». Con consecutive activado obtiene una hora seguida en lugar de cuatro periodos dispersos, que es lo que conviene a cualquier carga a la que moleste que la interrumpan.

Periodos más baratos antes de una hora

La aplicación la llama Cheapest periods before a time — «for a load that must be done by a time, such as an EV by 07:00». Misma idea que la anterior, anclada a la hora en que debe terminar.

Parameter
periods de 1 a 96
deadline_h la hora local en que debe estar terminado
consecutive como arriba

Cada día, el hub mira las 24 horas que terminan en esa hora y elige los periodos más baratos de ellas.

Úselo cuando el plazo sea la limitación real: «dele dos horas de funcionamiento antes de las 07:00, y elija para ello las dos horas más baratas de la noche».

Una regla se rechaza en lugar de recortarse en silencio si no puede cumplirse: pedir más periodos de los que caben en la ventana devuelve un error que nombra el campo incorrecto. Es intencionado: una ventana acortada en silencio para encajar sería otra regla distinta de la que usted escribió.


Dos indicadores, para cuando no necesita una ventana

Junto a las reglas, dos niveles sencillos:

Indicador Verdadero mientras
Buy is cheap below el precio de compra actual está igual o por debajo del nivel que usted fijó
Sell is low below el precio de venta actual está igual o por debajo del nivel que usted fijó — la exportación vale poco, o nada

Si deja un nivel sin fijar, su indicador permanece en falso. Estos no son ventanas: no hay histéresis ni previsión, solo una afirmación sobre el precio en este momento. El indicador de venta es el que hay que vigilar en una instalación con generación: es la señal de precio bajo para usar su propia energía en lugar de exportarla.


Qué se publica

Un único mensaje, de menos de un kilobyte, en rbgrid/<mac>/price — retenido, de modo que cualquier cliente que se conecte después recibe enseguida el estado actual. También en GET /api/v1/signal, y en la versión ESPHome a través de rbgrid_cmd.

Campo Qué le indica
period_from, period_until el periodo de 15 minutos al que se refiere
buy, sell, currency el precio actual
price_state, provenance el estado del precio dinámico, y de dónde procede este precio: su fuente, el respaldo, un envío desde Home Assistant, la media horaria o su plan
rank_buy, rank_sell la posición de este periodo en su día local, siendo 1 el más barato; 0 significa que aún no se conoce
periods_today cuántos periodos de hoy se conocen — el denominador de esa posición
windows[] una entrada por cada regla activada: su nombre, si está activa, hasta cuándo y cuándo empieza la siguiente
buy_cheap, sell_low los dos indicadores
ts, v cuándo se construyó el mensaje, y su versión de esquema

Es un estado, no un evento

La notificación se vuelve a publicar en cada límite de periodo de 15 minutos, e inmediatamente cada vez que algo cambia: una ventana que se abre o se cierra, llegada de precios nuevos, una regla o un nivel editado.

Construya su automatización sobre el valor actual, no sobre la llegada de un mensaje. Un consumidor que trate cada publicación como un evento se disparará repetidamente durante una ventana larga y no detectará un cambio que ocurrió mientras estaba desconectado. Un consumidor que lee windows[].active y actúa según lo que indica es correcto en todo momento, incluido el momento en que se reconecta, que es para lo que sirve retained.

Las aperturas y los cierres también se escriben en el registro propio del hub, donde puede consultarlos después en Events:

price: window 'Boiler' on until <time>
price: window 'Boiler' off, next <time>

El ejemplo, dibujado con honestidad

Una caldera que funciona durante las dos horas más baratas de la noche:

  1. En el hub: una regla llamada Boiler, de tipo cheapest periods of a daily window, 8 periodos, de 22:00 a 06:00, con consecutive activado.
  2. En Home Assistant: una automatización disparada por el tema MQTT rbgrid/<mac>/price (o, en la versión ESPHome, por la entidad propia del hub).
  3. Su condición lee la entrada llamada Boiler en windows[]. Activa — Home Assistant enciende el interruptor de la caldera. No activa — lo apaga.

Toda decisión de esa lista tras el paso 1 corresponde a Home Assistant. El hub aporta una sola frase: este periodo está dentro de la ventana que ha descrito. Un desviador o un cargador que se suscriba al tema por sí mismo funciona igual, y la división es la misma: el hub afirma un hecho sobre el precio, y el otro dispositivo decide qué hacer al respecto.

Lo que también significa que el hub no puede ser el motivo de que algo no se ejecutara. Si la automatización no se disparó, lo primero que hay que leer es la notificación: indica lo que el hub creía, y eso se puede comprobar.


Lo que no hace

  • Ningún tipo de conmutación por parte del hub. Este es todo el diseño, no un hueco pendiente de cubrir.
  • Ocho reglas. Una novena se rechaza, no se descarta en silencio.
  • Ninguna ventana en el lado de venta. Las ventanas usan el precio de compra all-in; para la exportación use el indicador sell is low.
  • Nada ocurre sin un reloj ajustado. Las reglas describen horas y días, y un hub que no ha sincronizado su reloj no puede ubicarlas.

Cuando no hace lo que esperaba: qué comprobar

Una ventana nunca se abre. Lea la propia notificación: windows[] incluye next_start para cada regla activada. Si next_start está presente, la regla funciona y usted se ha adelantado. Si la regla no aparece en la lista, está desactivada.

Una ventana se abre a una hora distinta cada día, y yo esperaba una fija. Es una regla de periodos más baratos que hace su trabajo: los periodos baratos se desplazan cuando se mueven los precios. Si quiere las mismas horas cada día, lo que necesita es una zona en su plan, no una ventana.

La ventana parpadea entre encendida y apagada. Una regla de precio por debajo de un nivel con sus dos niveles demasiado juntos, y un precio situado entre ellos. Amplíe la distancia entre el encendido y el apagado.

Mi regla fue rechazada al guardarla. La respuesta nombra el campo. Las dos causas habituales: más periodos de los que la ventana puede contener, o un precio de apagado inferior al precio de encendido.

Las ventanas ignoran el precio dinámico y siguen mi plan. Siguen el precio de compra all-in de cada periodo, que recurre al plan siempre que ningún precio dinámico cubra ese periodo. Compruebe el campo provenance de la notificación: plan ahí significa que no había ningún precio de mercado vigente para ese periodo — véase Where your price comes from.

rank_buy es 0. La posición aún no tiene denominador: los precios de hoy no se conocen del todo. Se completa a medida que llegan los precios.

Mi automatización se dispara una y otra vez durante una misma ventana. Se dispara con el mensaje en lugar de leer el estado. La notificación se vuelve a publicar cada 15 minutos por diseño; condicione la automatización a windows[].active.

Mi automatización no detectó una ventana que el registro indica como abierta. El consumidor estaba desconectado en el momento de la transición y espera un evento que ya ocurrió. Lea el mensaje retenido al conectarse: para eso se retiene.

Las horas están desfasadas por un desplazamiento fijo. Las reglas usan la zona horaria propia del hub, no la de su teléfono ni la de Home Assistant. Compruebe Time.

Quiero que la ventana tenga también en cuenta mi cargo por potencia contratada. No lo hace: las ventanas se refieren al precio por kilovatio-hora. La importación máxima de un ciclo de facturación se mide por separado y no se valora en ningún cálculo: véase Import peaks.

⚠️ Para cualquier trabajo dentro de un cuadro eléctrico, llame a un electricista cualificado.