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:
-
Sull'hub: una regola chiamata
Boiler, tipo cheapest periods of a daily window, 8 periodi, dalle 22:00 alle 06:00,consecutiveattivo. -
In Home Assistant: un'automazione attivata dal topic MQTT
rbgrid/<mac>/price(oppure, nella build ESPHome, dall'entità propria dell'hub). -
La sua condizione legge la voce chiamata
Boilerinwindows[]. 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.