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:
- En el hub: una regla llamada
Boiler, de tipo cheapest periods of a daily window, 8 periodos, de 22:00 a 06:00, conconsecutiveactivado. - 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). - Su condición lee la entrada llamada
Boilerenwindows[]. 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.