Sapere quando l'energia costa meno, in tempo per usarla

Puoi consultare i prezzi di ieri su qualsiasi schermata. Più difficile è sapere, in questo momento, se questo periodo di 15 minuti è uno di quelli convenienti, e avere qualcosa che ci reagisca senza dover scrivere a mano un confronto dei prezzi e riscriverlo ogni volta che cambia la tua tariffa.

L'hub fa il confronto. Calcola quali periodi sono quelli convenienti secondo le regole che imposti e pubblica un messaggio breve che dice cosa è aperto adesso e cosa si apre dopo. Qualcos'altro legge quel messaggio e agisce.

⚠️ L'hub non commuta nulla. Non c'è un relè su di esso, né un'impostazione che lo faccia accendere o spegnere qualcosa. Calcola le finestre e le pubblica. La decisione e la commutazione spettano a chi legge la notifica — un'automazione di Home Assistant, un diverter, un caricatore che si iscrive direttamente a MQTT. Se cercavi un dispositivo che controlla un carico in base al prezzo, questo non è quel dispositivo.


Non è solo per i prezzi dinamici

Le regole lavorano sul prezzo di acquisto tutto incluso di ogni periodo di 15 minuti: il prezzo dinamico quando ne copre il periodo, altrimenti la tariffa della fascia del tuo piano con i relativi oneri. Quindi anche un hub su un semplice piano a fasce orarie ottiene finestre convenienti: seguono semplicemente le tue fasce, e gli oneri di rete per fascia entrano nel confronto come tutto il resto.

Ciò significa che questa pagina vale la pena di leggerla che tu usi o meno i prezzi dinamici. Ciò che cambia con un prezzo di mercato è quanto si spostano i periodi convenienti da un giorno all'altro; il meccanismo è lo stesso.

Le regole richiedono che l'orologio dell'hub sia impostato, e usano il fuso orario dell'hub per stabilire cosa significano "un giorno" e "07:00" — vedi Time.


Tre tipi di regola

Fino a otto regole, ciascuna con un nome che scegli tu, e ciascuna attivabile e disattivabile da sola. Un nome può contenere al massimo 23 byte come lo memorizza l'hub — l'app lo dice chiaramente, e una lettera cirillica ne conta due.

Price below a level

L'app la chiama Price below a level. Indichi un prezzo al di sotto o pari al quale la finestra si apre, e un prezzo al di sopra o pari al quale si chiude — la finestra è un segnale, e che cosa farne resta a chi la legge.

Parametro
on_below attiva finché il prezzo di acquisto tutto incluso è pari o inferiore a questo valore
off_above resta attiva finché il prezzo non raggiunge questo valore; deve essere pari o superiore a on_below

I due livelli esistono perché un prezzo che oscilla attorno a un numero non faccia accendere e spegnere la finestra a ogni periodo. Se li imposti uguali ottieni esattamente questa oscillazione, quindi lascia un margine.

Use it when la tua soglia è assoluta: "esegui finché l'elettricità costa meno di 10 centesimi, qualunque sia l'ora."

Cheapest periods in a time span

L'app la chiama Cheapest periods in a time span — «for a load that can run any time in a span, such as a water heater». Indichi un numero di periodi di 15 minuti e le ore entro cui cercarli.

Parametro
periods da 1 a 96, ciascuno di 15 minuti
from_h, to_h la finestra giornaliera, in ore locali; to_h pari o precedente a from_h attraversa la mezzanotte, e ore uguali significano le 24 ore intere
consecutive se attivo, i periodi devono formare un unico blocco continuo

Use it when ciò che conosci è la durata del funzionamento: "i quattro periodi di 15 minuti più economici tra le 22:00 e le 06:00." Con consecutive attivo ottieni un'ora continua invece di quattro periodi sparsi — che è quello che ti serve per tutto ciò che non sopporta di essere interrotto.

Cheapest periods before a time

L'app la chiama Cheapest periods before a time — «for a load that must be done by a time, such as an EV by 07:00». Stessa idea di prima, ancorata all'ora entro cui deve essere completata.

Parametro
periods da 1 a 96
deadline_h l'ora locale entro cui deve essere completato
consecutive come sopra

Ogni giorno l'hub considera le 24 ore che terminano a quell'ora e sceglie i periodi più economici al loro interno.

Use it when la scadenza è il vincolo reale: "dagli due ore di funzionamento prima delle 07:00, e scegli per farlo le due ore più economiche della notte."

Una regola viene rifiutata invece di essere ridotta in silenzio se non può essere soddisfatta — chiedere più periodi di quelli che la finestra contiene restituisce un messaggio che indica il campo sbagliato. È voluto: una finestra accorciata in silenzio per adattarsi sarebbe una regola diversa da quella che hai scritto.


Due flag, per quando non ti serve una finestra

Accanto alle regole, due livelli semplici:

Flag Vero mentre
Buy is cheap below il prezzo di acquisto adesso è pari o inferiore al livello che hai impostato
Sell is low below il prezzo di vendita adesso è pari o inferiore al livello che hai impostato — l'energia esportata vale poco, o nulla

Se non imposti un livello, il suo flag resta falso. Questi non sono finestre: non c'è isteresi né pianificazione anticipata, solo una dichiarazione sul prezzo del momento. Il flag di vendita è quello da osservare su un impianto con generazione: è il segnale di convenienza per usare la tua energia invece di esportarla.


Cosa viene pubblicato

Un messaggio, sotto il kilobyte, su rbgrid/<mac>/price — retained, così chiunque si connetta più tardi riceve subito lo stato attuale. Inoltre è disponibile su GET /api/v1/signal, e nella build ESPHome tramite rbgrid_cmd.

Campo Cosa indica
period_from, period_until il periodo di 15 minuti a cui si riferisce
buy, sell, currency il prezzo adesso
price_state, provenance lo stato del prezzo dinamico, e da dove arriva questo prezzo: la tua fonte, il backup, un invio da Home Assistant, la media oraria, o il tuo piano
rank_buy, rank_sell la posizione di questo periodo nella sua giornata locale, 1 è il più economico; 0 significa non ancora noto
periods_today quanti periodi di oggi sono noti — il denominatore di quella posizione
windows[] una voce per ogni regola attiva: il suo nome, se è attiva, fino a quando, e quando inizierà la prossima volta
buy_cheap, sell_low i due flag
ts, v quando il messaggio è stato costruito, e la sua versione dello schema

È uno stato, non un evento

La notifica viene ripubblicata a ogni confine di 15 minuti, e immediatamente ogni volta che cambia qualcosa: una finestra che si apre o si chiude, nuovi prezzi in arrivo, una regola o un livello modificato.

Costruisci la tua automazione sul valore attuale, non sull'arrivo di un messaggio. Un consumatore che tratta ogni pubblicazione come un evento si attiverà più volte durante una finestra lunga e perderà una transizione avvenuta mentre era offline. Un consumatore che legge windows[].active e agisce su ciò che dice è corretto in ogni momento, incluso il momento in cui si riconnette — ed è a questo che serve retained.

Aperture e chiusure vengono anche scritte nel registro dell'hub, dove puoi leggerle in seguito in Events:

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

L'esempio, presentato onestamente

Una caldaia che funziona nelle due ore più economiche della notte:

  1. Sull'hub: una regola chiamata Boiler, tipo cheapest periods of a daily window, 8 periodi, dalle 22:00 alle 06:00, consecutive attivo.

  2. In Home Assistant: un'automazione attivata dal topic MQTT rbgrid/<mac>/price (oppure, nella build ESPHome, dall'entità propria dell'hub).

  3. La sua condizione legge la voce chiamata Boiler in windows[]. Attiva — Home Assistant accende l'interruttore della caldaia. Non attiva — lo spegne.

Ogni decisione in questo elenco dopo il passo 1 è di Home Assistant. L'hub ha contribuito con una sola frase: questo periodo rientra nella finestra che hai descritto. Un diverter o un caricatore che si iscrive al topic da solo funziona allo stesso modo, e la divisione è la stessa: l'hub dichiara un fatto sul prezzo, l'altro dispositivo decide cosa farne.

Ciò significa anche che l'hub non può essere la causa per cui qualcosa non è stato eseguito. Se l'automazione non è scattata, la prima cosa da leggere è la notifica — dice cosa credeva l'hub, ed è verificabile.


Cosa non fa

  • No switching of any kind by the hub. Questo è l'intero disegno, non una lacuna in attesa di essere colmata.
  • Eight rules. Una nona viene rifiutata, non scartata in silenzio.
  • No windows on the sell side. Le finestre usano il prezzo di acquisto tutto incluso; per l'esportazione usa il flag sell is low.

  • Nothing happens without a set clock. Le regole descrivono ore e giorni, e un hub il cui orologio non è sincronizzato non può collocarle.


Quando non fa ciò che ti aspettavi: cosa controllare

Una finestra non si apre mai. Leggi la notifica stessa — windows[] riporta next_start per ogni regola attiva. Se next_start è presente, la regola funziona e sei in anticipo. Se la regola manca dall'elenco, è disattivata.

Una finestra si apre a un orario diverso ogni giorno, e mi aspettavo un orario fisso. È una regola di periodi più economici che fa il suo lavoro: i periodi convenienti si spostano quando i prezzi si spostano. Se vuoi le stesse ore ogni giorno, ti serve una fascia nel tuo piano, non una finestra.

La finestra si accende e si spegne in continuazione. Una regola di prezzo al di sotto di una soglia con i due livelli troppo vicini, e un prezzo che cade tra di essi. Allarga il margine tra accensione e spegnimento.

La mia regola è stata rifiutata al salvataggio. La risposta indica il campo. Le due cause più comuni: più periodi di quelli che la finestra può contenere, oppure un prezzo di spegnimento inferiore al prezzo di accensione.

Le finestre ignorano il prezzo dinamico e seguono invece il mio piano. Seguono il prezzo di acquisto tutto incluso di ogni periodo, che ricade sul piano ogni volta che nessun prezzo dinamico copre quel periodo. Controlla il campo provenance nella notifica: plan lì significa che nessun prezzo di mercato era in vigore per quel periodo — vedi Where your price comes from.

rank_buy è 0. La posizione non ha ancora un denominatore: i prezzi di oggi non sono ancora completi. Si riempie man mano che arrivano i prezzi.

La mia automazione si attiva più volte durante una stessa finestra. Si attiva sul messaggio invece di leggere lo stato. La notifica viene ripubblicata ogni 15 minuti per progetto; condiziona l'automazione su windows[].active.

La mia automazione ha perso una finestra che il registro dice essersi aperta. Il consumatore era offline al momento della transizione e attende un evento già avvenuto. Leggi il messaggio retained al momento della connessione — è per questo che è retained.

Gli orari sono sbagliati di uno scarto fisso. Le regole usano il fuso orario dell'hub, non quello del telefono o di Home Assistant. Controlla Time.

Vorrei che la finestra tenesse conto anche della mia quota di potenza. Non lo fa — le finestre riguardano il prezzo per kilowattora. Il picco di prelievo di un ciclo di fatturazione viene misurato separatamente e non è prezzato in nessuna voce: vedi Import peaks.

⚠️ Per qualsiasi intervento all'interno di un quadro elettrico, rivolgiti a un elettricista qualificato.