Saber quando a energia está mais barata, a tempo de a usar
Pode ler os preços de ontem em qualquer ecrã. O difícil é saber, neste momento, se este período de 15 minutos é um dos baratos — e ter algo que atue sobre isso sem que tenha de escrever uma comparação de preços à mão e reescrevê-la sempre que a sua tarifa muda.
O hub faz a comparação. Calcula quais os períodos baratos segundo as regras que definiu e publica uma mensagem pequena a dizer o que está aberto agora e o que abre a seguir. Outra coisa lê essa mensagem e atua.
⚠️ O hub não comuta nada. Não tem relé, nem qualquer definição que o faça ligar ou desligar seja o que for. Calcula janelas e publica-as. A decisão e a comutação pertencem ao que lê a notificação — uma automação do Home Assistant, um divisor de excedente, um carregador que subscreve o MQTT por si próprio. Se procurava um dispositivo que controle uma carga pelo preço, não é este.
Não é só para preços dinâmicos
As regras funcionam sobre o preço de compra tudo incluído de cada período de 15 minutos: o preço dinâmico, quando existe um para esse período, e caso contrário a taxa da zona do seu plano, com os respetivos encargos. Por isso, um hub num plano horário simples também recebe janelas baratas — simplesmente seguem as suas próprias zonas, e as tarifas de rede horárias contam para a comparação como tudo o resto.
Isto significa que esta página vale a pena ser lida quer use ou não preços dinâmicos. O que muda com um preço de mercado é o quanto os períodos baratos se deslocam de dia para dia; o mecanismo é o mesmo.
As regras precisam de o relógio do hub estar definido, e usam o fuso horário do próprio hub para decidir o que significam "um dia" e "07:00" — ver Hora.
Três tipos de regra
Até oito regras, cada uma com um nome que escolhe, e cada uma pode ser ativada e desativada individualmente. Um nome tem no máximo 23 bytes tal como o hub o guarda — a aplicação diz isto claramente, e uma letra cirílica conta como dois.
Preço abaixo de um nível
A aplicação chama-lhe Price below a level. Indica um preço igual ou inferior ao qual a janela abre, e um preço igual ou superior ao qual fecha — a janela é um sinal, e o que fazer com ele continua a cargo do que o lê.
| Parâmetro | |
|---|---|
on_below |
ativa enquanto o preço de compra tudo incluído estiver igual ou abaixo deste valor |
off_above |
mantém-se ativa até o preço atingir este valor; tem de ser igual ou superior a on_below |
Os dois níveis existem para que um preço que oscile em torno de um número não faça a janela piscar ligada e desligada a cada período. Se os definir iguais, obtém exatamente esse piscar, por isso deixe uma diferença entre eles.
Use quando o seu limiar é absoluto: "funcionar enquanto a eletricidade estiver abaixo de 10 cêntimos, sempre que isso acontecer."
Períodos mais baratos num intervalo de tempo
A aplicação chama-lhe Cheapest periods in a time span — «para uma carga que pode funcionar em qualquer altura de um intervalo, como um termoacumulador». Indica um número de períodos de 15 minutos e as horas dentro das quais procurar.
| Parâmetro | |
|---|---|
periods |
de 1 a 96, cada um de 15 minutos |
from_h, to_h |
a janela diária, em horas locais; to_h igual ou anterior a from_h atravessa a meia-noite, e horas iguais significam as 24 horas inteiras |
consecutive |
quando ativo, os períodos têm de formar um bloco contínuo |
Use quando o que conhece é a quantidade de tempo de funcionamento: "os quatro períodos de 15
minutos mais baratos entre as 22:00 e as 06:00." Com consecutive ativo obtém uma hora contínua em
vez de quatro períodos dispersos — o que é o desejável para tudo o que não gosta de ser interrompido.
Períodos mais baratos antes de uma hora
A aplicação chama-lhe Cheapest periods before a time — «para uma carga que tem de estar concluída até uma hora, como um VE às 07:00». A ideia é a mesma que a anterior, ancorada na hora até à qual tem de terminar.
| Parâmetro | |
|---|---|
periods |
de 1 a 96 |
deadline_h |
a hora local até à qual tem de estar concluída |
consecutive |
como acima |
O hub olha para as 24 horas que terminam nessa hora, todos os dias, e escolhe nelas os períodos mais baratos.
Use quando o prazo é a restrição real: "dê-lhe duas horas de funcionamento antes das 07:00, e escolha as duas horas mais baratas da noite para o fazer."
Uma regra é recusada em vez de ser cortada em silêncio se não puder ser cumprida — pedir mais períodos do que a janela contém devolve a indicação do campo errado. Isto é deliberado: uma janela silenciosamente encurtada para caber seria uma regra diferente da que escreveu.
Duas bandeiras, para quando não precisa de uma janela
Além das regras, dois níveis simples:
| Bandeira | Verdadeira enquanto |
|---|---|
| Buy is cheap below | o preço de compra agora estiver igual ou abaixo do nível que definiu |
| Sell is low below | o preço de venda agora estiver igual ou abaixo do nível que definiu — a exportação vale pouco, ou nada |
Se deixar um nível por definir, a respetiva bandeira fica falsa. Estas não são janelas: não há histerese nem planeamento antecipado, apenas uma afirmação sobre o preço neste momento. A bandeira de venda é a que deve vigiar numa instalação com produção: é o sinal de barato para usar a sua própria energia em vez de a exportar.
O que é publicado
Uma mensagem, com menos de um quilobyte, em rbgrid/<mac>/price — retida, para que quem se
ligar mais tarde ainda receba o estado atual de imediato. Também em GET /api/v1/signal, e na versão
ESPHome através de rbgrid_cmd.
| Campo | O que lhe diz |
|---|---|
period_from, period_until |
o período de 15 minutos a que isto se refere |
buy, sell, currency |
o preço agora |
price_state, provenance |
o estado do preço dinâmico, e de onde vem este preço: o seu fornecedor, a reserva, um envio do Home Assistant, a média horária ou o seu plano |
rank_buy, rank_sell |
a posição deste período no seu dia local, sendo 1 o mais barato; 0 significa que ainda não se sabe |
periods_today |
quantos períodos de hoje são conhecidos — o denominador dessa posição |
windows[] |
uma entrada por regra ativada: o nome, se está ativa, até quando, e quando volta a começar |
buy_cheap, sell_low |
as duas bandeiras |
ts, v |
quando a mensagem foi construída, e a versão do seu esquema |
É um estado, não um evento
A notificação é republicada a cada limite de 15 minutos, e de imediato sempre que algo muda — uma janela a abrir ou a fechar, novos preços a chegar, uma regra ou um nível editado.
Construa a sua automação sobre o valor atual, e não sobre a chegada de uma mensagem. Um consumidor
que trate cada publicação como um evento vai disparar repetidamente ao longo de uma janela longa e
vai perder uma transição que ocorreu enquanto estava offline. Um consumidor que lê windows[].active e
atua sobre o que lá está está certo em cada momento, incluindo no momento em que volta a ligar-se — que
é para isso que serve retained.
As aberturas e os fechos são também escritos no registo do próprio hub, onde pode lê-los depois em Eventos:
price: window 'Boiler' on until <time>
price: window 'Boiler' off, next <time>
O exemplo, desenhado com honestidade
Uma caldeira que funciona nas duas horas mais baratas da noite:
-
No hub: uma regra com o nome
Boiler, do tipo cheapest periods of a daily window, 8 períodos, das 22:00 às 06:00, comconsecutiveativo. -
No Home Assistant: uma automação disparada pelo tópico MQTT
rbgrid/<mac>/price(ou, na versão ESPHome, pela entidade do próprio hub). -
A sua condição lê a entrada chamada
Boileremwindows[]. Ativa — o Home Assistant liga o interruptor da caldeira. Não ativa — desliga-o.
Cada decisão desta lista depois do passo 1 é do Home Assistant. O hub contribuiu com uma frase: este período está na janela que descreveu. Um divisor ou um carregador que subscreva o tópico por si próprio funciona da mesma maneira, e a divisão é a mesma: o hub afirma um facto sobre o preço, e o outro dispositivo decide o que fazer com ele.
O que também significa que o hub não pode ser a razão para algo não ter funcionado. Se a automação não disparou, a notificação é a primeira coisa a ler — diz o que o hub acreditava, e isso pode ser verificado.
O que não faz
-
Nenhuma comutação de qualquer tipo pelo hub. Este é todo o desenho, não uma lacuna à espera de ser preenchida.
-
Oito regras. Uma nona é recusada, não descartada em silêncio.
-
Sem janelas no lado da venda. As janelas usam o preço de compra tudo incluído; para a exportação use a bandeira sell is low.
-
Nada acontece sem um relógio definido. As regras descrevem horas e dias, e um hub que não sincronizou o relógio não as consegue situar.
Quando não faz o que esperava: o que verificar
Uma janela nunca abre.
Leia a própria notificação — windows[] traz next_start para cada regra ativada. Se next_start
estiver lá, a regra está a funcionar e está adiantado. Se a regra não estiver na lista, está desativada.
Uma janela abre a uma hora diferente todos os dias, e eu esperava uma hora fixa. É uma regra de períodos mais baratos a fazer o seu trabalho: os períodos baratos deslocam-se quando os preços se deslocam. Se quiser as mesmas horas todos os dias, precisa de uma zona no seu plano, e não de uma janela.
A janela pisca ligada e desligada. Uma regra de preço abaixo de um valor com os dois níveis demasiado próximos, e um preço entre eles. Aumente a diferença entre o ligar e o desligar.
A minha regra foi recusada quando a guardei. A resposta indica o campo. Os dois habituais: mais períodos do que a janela consegue conter, ou um preço de desligar abaixo do preço de ligar.
As janelas ignoram o preço dinâmico e seguem o meu plano.
Seguem o preço de compra tudo incluído de cada período, que recorre ao plano sempre que nenhum preço
dinâmico cobre esse período. Verifique o campo provenance na notificação: plan aí significa que
nenhum preço de mercado estava em vigor para esse período — ver De onde vem o seu preço.
rank_buy é 0.
A posição ainda não tem denominador: os preços de hoje ainda não são totalmente conhecidos. Vai sendo
preenchida à medida que os preços chegam.
A minha automação dispara vezes sem conta durante a mesma janela.
Está a disparar na mensagem em vez de ler o estado. A notificação é republicada a cada 15 minutos,
por desenho; condicione a automação a windows[].active.
A minha automação falhou uma janela que o registo diz que abriu. O consumidor estava offline na transição e está à espera de um evento que já aconteceu. Leia a mensagem retida ao ligar-se — é para isso que serve ser retida.
As horas estão erradas por um desvio fixo. As regras usam o fuso horário do próprio hub, e não o do seu telemóvel ou do Home Assistant. Verifique Hora.
Quero que a janela tenha também em conta a minha tarifa de potência. Não tem — as janelas tratam do preço por quilowatt-hora. A importação mais alta de um ciclo de faturação é medida em separado e não entra em preço nenhum: ver Picos de importação.
⚠️ Para qualquer trabalho dentro de um quadro elétrico, chame um eletricista qualificado.