De onde vem o seu preço
O seu fornecedor cobra um preço diferente a cada 15 minutos, e a maioria dos monitores de energia valoriza tudo a uma tarifa fixa. Cada valor de custo que mostram é então uma estimativa — não errada por pouco, mas construída sobre um número que nunca foi o seu preço. Se o seu contrato segue o mercado, o único custo que vale a pena ler é aquele que usou o preço do período em que a energia foi medida.
É disto que trata esta página: de onde o hub tira esse preço, o que lhe faz, e como ver qual o preço que usou. O que o ecrã mostra, e o que fazer quando um valor parece errado, está em Dynamic prices.
⚠️ O hub valoriza a energia. Não liga nem desliga nada. Não há aqui qualquer controlo de cargas: nem relé, nem carregador, nem inversor, nem automatismo de "hora mais barata" no dispositivo. Se quer que algo funcione quando a energia está barata, o hub publica uma notificação e o Home Assistant age sobre ela — ver Cheap windows and the price notification.
A versão curta
- Os preços dinâmicos estão desativados por predefinição. Com eles desativados, a sua tarifa valoriza cada período, exatamente como antes.
- Com eles ativados, cada período de 15 minutos recebe o seu preço da sua fonte principal; se essa fonte não tiver preço para o período, da sua fonte de reserva; se nenhuma tiver, da sua tarifa.
- O hub regista qual das três foi usada, para cada período, e guarda esse registo durante 40 dias.
- A sua tarifa continua a contar: é a alternativa, fornece os impostos e o IVA acrescentados a um preço de mercado, e a sua moeda é a moeda do dinheiro.
A cadeia, por ordem
Para cada período de 15 minutos, o hub determina um único preço:
| fonte | o que significa | |
|---|---|---|
| 1 | Principal | o fornecedor que escolheu, para a sua zona |
| 2 | Reserva | opcional, e tem de ser um fornecedor diferente; usado apenas nos períodos que o principal não cobre |
| 3 | A sua tarifa | a taxa da zona em vigor nesse período — ver Tariffs |
Nada aqui é uma mistura: um período, um preço, uma fonte. A fonte fica guardada com o período, pelo que um valor que leia na semana seguinte continua a poder ser rastreado até à origem do seu preço.
Porque vale a pena definir uma reserva
Um mercado day-ahead publica o dia seguinte uma vez por dia. Se essa publicação atrasar, se a obtenção falhar, ou se a sua zona faltar numa resposta, o principal simplesmente não tem preço para esses períodos. Sem reserva, a tarifa entra em cena — o que está correto, mas é um preço diferente, e os seus custos nesse intervalo não baterão certo com o mercado. Uma reserva de um segundo fornecedor que cubra a mesma zona mantém o preço de mercado em vigor.
Nem todas as zonas têm uma segunda fonte. Doze áreas são cobertas por duas ou mais fontes da lista abaixo: SE1-4 e NO1-5 (Nord Pool junto da fonte nacional), DK1-2 e NL (Energy-Charts junto de uma segunda), sendo que SE4 e NO2 são cobertas três vezes. Para AT, BE, CH, CZ, DE-LU, EE, FI, FR, HU, IT-North, LT, LV, PL, SI e as regiões do Reino Unido não há aqui um segundo fornecedor — por isso, ou um envio do Home Assistant serve de reserva, ou esses períodos recorrem à taxa da zona na tarifa.
As fontes
| Fonte | Tipo | Resolução | Áreas | Moeda |
|---|---|---|---|---|
| Energy-Charts (Fraunhofer ISE) | spot | 15 minutes | AT, BE, CH, CZ, DE-LU, DK1, DK2, FR, HU, IT-North, NL, NO2, PL, SE4, SI | EUR |
| Nord Pool (unofficial data portal) | spot | 15 minutes | SE1–4, NO1–5, DK1–2, FI, EE, LV, LT | the area's: SEK, NOK, DKK or EUR |
| Elpriset just nu (SE) | spot | 15 minutes | SE1–4 | SEK |
| Hva koster strømmen (NO) | spot | 1 hour | NO1–5 | NOK |
| EnergyZero (NL) | all-in | 15 minutes | NL | EUR |
| Octopus Agile (UK) | all-in | 30 minutes | the 14 GSP regions, A–P | GBP |
| Home Assistant | you choose: spot or all-in | whatever is pushed | — | your plan's |
Nenhuma fonte precisa de token ou de conta nesta versão.
A resolução não é o passo de faturação. Um preço de 30 minutos ou horário aplica-se a cada período de 15 minutos dentro dele, pelo que os seus custos continuam a ser calculados por período de 15 minutos — quatro deles simplesmente partilham um preço. O passo em que é faturado é uma definição à parte; ver Bill at the hourly mean.
Spot ou all-in é o que mais importa acertar, e é explicado abaixo, porque errar aqui é a forma mais comum de um valor de custo sair demasiado alto.
⚠️ A moeda não é convertida. O hub não converte SEK em EUR. Uma zona cuja moeda difira da moeda da sua tarifa é recusada ao guardar (o campo devolve um erro), e uma fonte noutra moeda é ignorada em vez de ser aproximada. Nord Pool SE3 precisa de uma tarifa em SEK; Energy-Charts DE-LU precisa de uma tarifa em EUR. Defina primeiro a moeda da sua tarifa e depois escolha uma zona que lhe corresponda.
A atribuição é mostrada, e isso é intencional
Cada fonte traz a menção que a sua própria licença exige — por exemplo Bundesnetzagentur | SMARD.de /
Energy-Charts (CC BY 4.0) — e o hub mostra-a na página Prices. Não é decoração: é a condição em que os dados podem ser usados, e diz-lhe o que está a ver. O Energy-Charts só é servido para as zonas publicadas sob CC BY 4.0.
O Nord Pool é acedido através de um portal de dados não oficial, e o hub diz isso onde nomeia a fonte. Não existe um acordo de serviço por trás: pode mudar ou parar sem aviso. Use-o com conhecimento de causa, e dê-lhe uma reserva sempre que exista: SE1-4, NO1-5 e DK1-2 também são cobertas por outra fonte desta lista, mas para FI, EE, LV e LT o Nord Pool é a única; aí, um envio do Home Assistant é a única reserva disponível.
O que o seu contrato faz ao preço
Um preço de mercado não é aquilo que paga. Os dois tipos de fonte diferem na parte do resto que já está incluída no número.
Uma fonte spot: o preço é o início da cadeia
buy = ( spot × factor
+ markup
[ + your plan's zone rate, if "zones stack" is on ]
+ your plan's per-kWh energy tax
+ grid fee
+ renewable levy )
× ( 1 + your plan's VAT )
factor e markup são os termos do seu contrato: um multiplicador e um acréscimo por kWh. Tudo o resto vem da tarifa que já introduziu em Tariffs, e é por isso que a tarifa continua a importar quando o preço é dinâmico.
Intervalos aceites, e um valor fora deles é recusado em vez de ser limitado: factor de 0 a 10, markup de −100 a 100.
Uma fonte all-in: o preço é a cadeia inteira
buy = the provider's price
Nada da tarifa é acrescentado — nem imposto, nem taxa de rede, nem encargo, nem IVA.
⚠️ Este é o mecanismo que evita o erro de custo mais comum. Um preço all-in já contém os impostos e o IVA. Se fosse passado pela fórmula spot, cada um deles seria somado uma segunda vez e os seus custos sairiam visivelmente demasiado altos. A EnergyZero e a Octopus Agile estão marcadas como all-in por esse motivo — o hub define a classe de um fornecedor de rede, e não você; vê-a na lista de fornecedores como · all-in e na linha da fórmula. O único sítio onde a classe é uma escolha sua é o Home Assistant, onde você indica que tipo está a enviar. Se os seus custos parecerem inflacionados e o preço em si parecer correto, esta é a primeira coisa a ler.
O Home Assistant como fonte
O Home Assistant — ou qualquer cliente — pode enviar preços para o hub em vez de o hub os obter: até 200 períodos de cada vez, guardados no armazenamento próprio do hub. Você indica se o que envia é um preço spot ou um preço all-in, e a partir daí é tratado exatamente como um fornecedor desse tipo. Este é o caminho para um fornecedor para o qual o hub não tem fonte, ou para um preço que calcula você mesmo.
Na build ESPHome, o Home Assistant aparece entre as fontes desde o início; no firmware autónomo, aparece na lista assim que chegar um envio. Em qualquer caso, os preços dinâmicos ficam desativados até os ligar, e a fonte é sua para escolher — o Home Assistant é uma opção na lista, e não a que já vem escolhida.
Tudo nesta página é verdadeiro para ambas as builds: o hub ESPHome executa o mesmo núcleo e o mesmo obtentor, com os mesmos fornecedores, o mesmo calendário e a mesma cadeia de alternativas. Só muda onde se define — na build ESPHome isso é o painel RBgrid no Home Assistant, e não a aplicação web.
O lado da venda
A energia exportada é valorizada à parte, e nunca pelo mesmo número da importação. Três modos:
| Modo | O preço de venda é |
|---|---|
| From the provider (default) | o preço de exportação da própria fonte, quando existe, senão a taxa de venda da zona na sua tarifa |
| From the tariff plan | a taxa de venda da zona na sua tarifa |
| Market price × factor − fee | spot × export factor − export fee |
O fator de exportação aceita de 0 a 10, a taxa de exportação de −100 a 100 (k_sell e a taxa de injeção na API). Nenhum imposto ou IVA é aplicado ao lado da venda.
O valor da exportação nunca é subtraído ao seu custo. A energia importada e o seu custo, a energia exportada e o seu valor, lado a lado — ver Economics. Um preço dinâmico muda os números, não essa regra.
Faturar pela média horária: quando o seu contrato liquida por hora
Alguns contratos seguem o mercado mas liquidam por hora, mesmo quando o mercado publica a cada 15 minutos. Ative Bill at the hourly mean e cada período de 15 minutos de uma hora é faturado pela média dos preços dessa hora.
Isto é uma propriedade do seu contrato, e não da sua fonte. Uma fonte de 15 minutos com liquidação horária precisa desta opção ativa; uma fonte horária não precisa dela de todo, porque os seus quatro períodos já partilham um preço. Ativá-la "porque o meu fornecedor é horário" não altera nada; deixá-la desativada quando o seu contrato é horário faz com que cada período difira ligeiramente da aritmética do seu fornecedor.
Os períodos faturados desta forma são marcados como hourly_mean no registo de preços, para os poder distinguir depois.
Preços negativos, e limites mínimos
Quando o mercado fica negativo, o hub mantém o preço negativo e regista um custo negativo para esse período. Essa é a leitura honesta: nesses períodos, consumir energia credita-o num contrato que segue o mercado.
Se o seu contrato não transmite os preços negativos, defina um limite mínimo: Lowest buy price e Lowest sell price (de −100 a 100, ou none; floor_buy e floor_sell na API). Quando desligado, cada um mostra «None: negative prices pass through». O limite é aplicado por último, depois de tudo o resto.
Com os preços dinâmicos desativados, as taxas da tarifa nunca descem abaixo de zero, exatamente como antes. Os limites existem porque um preço de mercado pode fazê-lo, e o seu contrato pode não o permitir.
Quando os preços chegam
- Os preços de hoje são obtidos assim que o dia não estiver totalmente coberto.
- Os de amanhã são obtidos a partir das 11:00 UTC, quando começa a publicação day-ahead; a aplicação apresenta-o da forma como o leitor o vive — «they usually arrive after 13:00 CET».
- Se uma obtenção falhar, ou se os de amanhã ainda não estiverem disponíveis, o hub tenta de novo a cada 15 minutos até às 15:00 UTC, e depois de hora a hora. Após as 15:00 UTC, a página também o diz claramente: o estado passa a «Tomorrow's prices not in yet».
Por isso, uma segunda metade do gráfico vazia antes do meio-dia é normal, e não uma avaria: amanhã ainda não existe.
Os dois resultados são escritos no registo do hub, e pode lê-los em Events:
price: state A -> B (source …)
FAIL price: <provider> <zone> fetch failed (<reason>), retry in N min
O motivo é um de fetch_failed, http_status, parse, auth, no_data_for_zone ou rate_limited — e qual deles é decide o que fazer (ver abaixo). O estado em tempo real e até onde os preços são conhecidos estão na página Prices, e na API como price_state e valid_until.
O registo: qual o preço usado, para cada período
O preço aplicado a cada período de 15 minutos é registado com a sua fonte, e guardado durante 40 dias — incluindo quando os preços dinâmicos estão desativados, caso em que a entrada simplesmente indica plan. Pode descarregá-lo em CSV a partir da página Prices.
prov |
origem do preço |
|---|---|
source |
a sua fonte principal |
backup |
a sua fonte de reserva |
ha_push |
enviado pelo Home Assistant ou por outro cliente |
hourly_mean |
a média dessa hora, segundo a definição do seu contrato |
plan |
a taxa da zona na sua tarifa |
🔑 É isto que torna um valor de custo verificável, e não apenas credível. Um monitor que lhe mostra um custo pede que acredite nele. Um monitor que lhe mostra o preço que usou, por período, e de onde veio esse preço, está a entregar-lhe a aritmética — e 40 dias chegam para resolver uma discussão com a fatura mensal na mão.
Os próprios registos do histórico não mudam de formato: o dinheiro é calculado com o preço de cada período, e tudo o que já lê o histórico ou o CSV do hub não precisa de alterações.
Onde o preço aparece noutros sítios
- Dynamic prices — o ecrã: preço agora, hoje e amanhã, a sua fonte e fórmula, janelas baratas, picos, o registo.
- Why this hour costs what it costs — a cadeia completa desde a energia até ao dinheiro, agora com um preço de mercado nela.
- Cheap windows and the price notification — o que o hub publica para que outra coisa possa atuar sobre um intervalo barato.
- Import peaks — a maior importação de 15 minutos e horária de um ciclo de faturação. Medido com ou sem preços dinâmicos.
- Home Assistant e MQTT — a telemetria em tempo real transporta o estado, a fonte em uso, até onde os preços são conhecidos, e a taxa de compra e de venda atual; ver MQTT broker.
Se estiver na v1.2.0, atualize
As notas de versão do próprio hub trazem uma recomendação, e vale a pena cumpri-la em vez de a ler por alto: atualize a partir da v1.2.0 se usar preços dinâmicos.
Na v1.2.0 os períodos de preço obtidos eram guardados no pequeno armazenamento de definições do hub — o mesmo que guarda a hora em curso e as âncoras de energia. Com os preços dinâmicos ativados, os preços podiam enchê-lo, e então um reinício podia perder parte da hora que estava a ser medida. O hub indica isso quando acontece: o registo do hub mostra FAIL hour persist …: ESP_ERR_NVS_NOT_ENOUGH_SPACE.
A v1.2.1 move os períodos de preço para o sistema de ficheiros do hub e liberta esse espaço no primeiro arranque, registando price: stores moved from NVS to the file system. Nada do que o leitor faz muda, e nada nesta página se lê de forma diferente em nenhuma das versões — mas a falha acima deixa de ser possível.
As regras das janelas baratas e os valores dos picos de importação são pequenos e continuam no armazenamento de definições em ambas as versões: «the price stores moved» não significa que tudo o que está relacionado com preços tenha sido movido.
O que não faz
Dito de forma clara, porque cada um destes pontos é algo que um leitor poderia razoavelmente esperar:
- Sem Tibber, sem Amber. Não implementados. Se o seu fornecedor for um deles, envie o preço a partir do Home Assistant.
- Sem conversão de moeda. A moeda da sua tarifa e a moeda da sua zona têm de ser a mesma.
- Sem acordo de serviço por trás do Nord Pool. O endpoint é um portal de dados não oficial e pode mudar sem aviso.
- Sem controlo de cargas. O hub mede e valoriza; não liga nem desliga nada. A notificação é o ponto de passagem.
- Sem faturação de potência contratada. Os picos são medidos, não valorizados nos seus custos.
Quando o valor está errado: o que verificar
Os meus custos estão muito altos, e o preço em si parece correto. A sua fonte é all-in mas está a ser tratada como spot, por isso os impostos e o IVA da tarifa são somados a um preço que já os continha. Para um fornecedor de rede, a classe é do hub, e não sua: leia-a na lista de fornecedores, onde uma fonte all-in aparece com · all-in, e na linha da fórmula. Para o Home Assistant a classe é sua — verifique What Home Assistant sends.
Os meus custos parecem baixos demais, ou o preço é mais baixo do que o da aplicação do meu fornecedor.
O inverso: um preço spot sem termos contratuais por trás. Verifique se factor e markup correspondem ao seu contrato, e se a tarifa a que pertencem inclui o seu imposto sobre a energia, a taxa de rede, o encargo e o IVA. Um preço spot isolado é um número grossista, e não um número de retalho.
Metade do gráfico está vazia.
Se for antes do meio da tarde, os preços de amanhã ainda não saíram — o hub começa a pedir às 11:00 UTC e normalmente chegam depois das 13:00 CET. Se for depois disso, procure em Events uma linha FAIL price: e leia o seu motivo.
FAIL price: … no_data_for_zone.
O fornecedor respondeu, mas não para a sua zona. Ou a zona não consta da lista dessa fonte, ou a fonte deixou de a servir. Mude a zona, ou mude a fonte.
FAIL price: … parse ou http_status, repetidamente.
A fonte mudou ou está em baixo. Este é o caso para o qual existe uma fonte de reserva; defina uma de outro fornecedor que cubra a mesma zona — se a lista tiver uma para a sua zona; ver Why a backup is worth setting acima.
FAIL price: … rate_limited.
Chegaram demasiados pedidos ao fornecedor a partir do seu endereço. O hub recua por si próprio — a cada 15 minutos até às 15:00 UTC, e depois de hora a hora —, por isso isto desaparece sozinho. Se persistir durante um dia, algo mais na sua rede está a consultar o mesmo endpoint.
Guardei uma zona e foi recusada. A moeda da zona não corresponde à moeda da sua tarifa, e o hub não converte. Defina a moeda da tarifa como a do seu mercado, e depois guarde a zona.
O preço está certo, mas os custos continuam a ser calculados pela minha tarifa.
Veja o registo de preços desses períodos: uma entrada plan significa que nem a fonte principal nem a de reserva os cobriram. Ou os preços ainda não tinham chegado para esse intervalo, ou os preços dinâmicos estavam desativados nessa altura — a definição aplica-se a partir do momento em que é guardada, e a energia já medida mantém o preço com que foi calculada.
Os meus números diferem dos do meu fornecedor por uma diferença pequena e constante. Verifique a hourly mean em relação ao seu contrato: se a liquidação é por hora e o hub está a valorizar por período de 15 minutos, cada hora ficará ligeiramente errada nos dois sentidos. Ative-a e o hub valoriza cada período da hora pela média dessa hora.
Um período custou menos do que zero.
O preço de mercado era negativo e o seu contrato transmite isso, por isso o hub registou um custo negativo. Se o seu contrato não o transmitir, defina floor_buy como o preço mais baixo que realmente lhe podem cobrar.
Alterei a fonte e os custos antigos não mudaram. Nunca mudam. Um período é valorizado uma vez, com o preço em vigor quando foi medido, e o valor fica — ver Why this hour costs what it costs. Alterar uma fonte muda o que acontece a seguir.
⚠️ Para qualquer trabalho no interior de um quadro elétrico, contacte um eletricista qualificado.