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.