ERSE - Contabilizar os custos com Energia Elétrica (Versão Janeiro 2021)

Alguém consegue ajudar-me?

Se a variável fonte é de facto já um valor acumulado (sempre crescente), então não é preciso definir o delta_values=true e tudo funciona normalmente.

Atrás eu testei um código onde se usava os utility_meters com delta_values=true porque a variável de energia de entrada não representava um acumulado, e então reparei nesta situação.

Certo, o que dizes faz sentido. O delta_values é para ser usado apenas nos utility_meters que recebem o “sensor.last_15min_period_consumo_energy” (ou excedente), que esse não representam um acumulado, pois fazem reset de 15 em 15 minutos.

Delta values: Enable this if the source values are delta values since the last reading instead of absolute values. When this option is enabled, each new value received will be added as-is to the utility meter instead of adding the difference between the new value and previous value.

Ou seja, a cada 15min um novo valor é recebido pelo utility_meter, que efectivamente “é adicionado directamente”, em vez de ser a adicionada a diferença entre novo valor e o anterior (sem o delta_values).
Como o sensor last_15min_period_consumo_energy tem efectivamente o valor consumido de energia no útlimo período, penso fazer sentido adicionar esse valor no utility_meter com delta_value: true.

Os meus sensores:
image
image

Por acaso reparei que tenho períodos com consumos iguais de seguida, e são contabilizados à mesma no sensor abaixo, @Jorge_Estima.

Posso estar a ver isto completamente mal, e agradeço a insistência e vou analisar. Talvez precise rever tudo desde o início, mas até agora parece-me estar a funcionar.

Tens aí 3 periodos com duas contagens seguidas e iguais: 5:30 e 5:45; 7:45 e 8:00; 8:30 e 8:45

Vendo o que sai o sensor abaixo do consumo diário P15min, ele não incrementa nestes periodos, comprovando aquilo que eu disse.

Por isso, eu diria que não está a funcionar corretamente…

1 Curtiu

É pá, tens razão! Obrigado! Isto é então um bug do utility_metter, parece-me. @dgomes , tu que tens mais experiência nisto, o que achas? Submeto um bug report?

se o saldo de energia a cada 15m consecutivos tem o mesmo valor, a variação é zero e portanto, o utility meter não vai contabilizar essa energia, o que está incorreto.

Isto não é correcto, o delta_values pega no valor qualquer que ele seja (mesmo que seja igual ao anterior) e soma. Não ha comparação com valores anteriores ou ignores. No entanto… é preciso que o valor seja publicado pois é isso que despoleta o utility_meter

Quanto muito pode haver uma race condition, daí ser importante usar o last_period

Estou a usar o last_period, e de facto ele não está a somar quando há 2 valores consecutivos iguais… Dá por favor uma olhada aos meus gráficos acima e aos timings que o @Jorge_Estima referiu.

Podes partilhar o yaml dos vários utility_meters usados?

O gráfico do meio é de um template certo ? acho que o problema será dele que não gera um update para fazer trigger do proximo utility_meter…

Maneira de contornar é transforma-lo em trigger based https://www.home-assistant.io/integrations/template/#trigger-based-template-binary-sensors-buttons-numbers-selects-and-sensors

O que tenho, referente ao caso dos gráficos (por sequência):

utility_meter:
  p15min_energy_consumo_rede:
    source: sensor.energia_rede
    cron: "*/15 * * * *"
sensor:
  - platform: template
    sensors:   
      last_15min_period_consumo_energy:
        unique_id: last_15min_period_consumo_energy
        friendly_name: Consumo Rede Últimos 15min
        # device_class: energy
        unit_of_measurement: kWh
        value_template: >-
          {% set consumo = state_attr('sensor.p15min_energy_consumo_rede','last_period')|float(default=0) %}
          {% set excedente = state_attr('sensor.p15min_energy_excedente_rede','last_period')|float(default=0) %}
          {{ (consumo - excedente) if (consumo > excedente) else 0 }}
utility_meter:
  daily_energy_consumo_rede_15min:
    source: sensor.last_15min_period_consumo_energy
    cycle: daily
    tariffs:
      - Fora de Vazio
      - Vazio
sensor:
  - platform: template
    sensors:   
      daily_energy_consumo_rede_15min_soma:
        unique_id: daily_energy_consumo_rede_15min_soma
        friendly_name: Consumo Rede Diário P15min
        # device_class: energy
        unit_of_measurement: kWh
        value_template: >-
          {% if is_number(states('sensor.daily_energy_consumo_rede_15min_fora_de_vazio')) and is_number(states('sensor.daily_energy_consumo_rede_15min_vazio')) %}
            {{ states('sensor.daily_energy_consumo_rede_15min_fora_de_vazio')|float(default=0) + states('sensor.daily_energy_consumo_rede_15min_vazio')|float(default=0) }}
          {% else %}
            None
          {% endif %}

Estou a perceber o que dizes, é o próprio template que, como acaba por ter um valor igual, não gera actualização no utility_meter.
O ideial seria então que o trigger fosse o update do utility meter p15min_energy_consumo_rede, mais especificamente do seu atributo last_reset.


Isto é possível? Ou estavas a pensar em algo com time_pattern? Se for essa a última escolha, será algo parecido a isto?

template:
  - trigger:
    - platform: time_pattern
      minutes: '/15'
      seconds: 1   ### NOTA: não sei se isto funciona!!!!
    sensor:
      - unique_id: last_15min_period_consumo_energy
        name: Consumo Rede Últimos 15min
        unit_of_measurement: kWh
        state: >-
          {% set consumo = state_attr('sensor.p15min_energy_consumo_rede','last_period')|float(default=0) %}
          {% set excedente = state_attr('sensor.p15min_energy_excedente_rede','last_period')|float(default=0) %}
          {{ (consumo - excedente) if (consumo > excedente) else 0 }}

Será algo parecido a isto? Se calhar até era melhor aguardar +1s (00min01s,15min01s, etc…), é possível isso no time_pattern? Não estou habituado a usar e não sei muito bem a sintaxe…
O ideal seria mesmo actualizar com a actualização do last_update do sensor de origem (apesar de serem neste caso 2), mas isso ainda não descobri como fazer…
Obrigado mais uma vez pela ajuda, @dgomes!

Estava a propor o uso do trigger sim, e nao faço ideia se esse syntax funciona (mas apostava que não)

Bem, funcionar funciona, e faz o update de 15 em 15 minutos (deslocado +1seg) como esperado, com a configuração acima. Substituí os meus antigos sensores por estes com trigger para testar.

Agora se vai funcionar para o utility_meter com 2 valores consecutivos iguais é que já não sei. Estou a trabalhar com sensores de excedente e consumo complementares; de facto um deles actualizou, mas o outro que está a 0 acusa o último update há 42min atrás :confused:. Mesmo com valores iguais devia acusar tempo diferente de update…

Duvido que vá triggar update com valores iguais, mas terei de esperar até acontecer para analisar.
Estou quase no limite para lhe acrescentar um valor random negligenciável ( entre 0,0000 e 0,0001) só para ter update, mas é ridículo…
Substituir
{{ (consumo - excedente) if (consumo > excedente) else 0 }}
por
{{ (consumo - excedente + (range(0,99)|random/100000000)) if (consumo > excedente) else 0 }}
Não é correcto, mas é capaz de funcionar, e depois então arredondar o resultado, que normalmente só tem 2 casas decimais. É uma solução quer para a opção do trigger, quer para a do template, mas mais para a do trigger.

Já agora, eu estou a postar isto aqui neste post na esperança de talvez isto entrar dentro da integração, ou talvez noutra à parte, não sei. Se não fôr o sítio adequado, muda-se. Obrigado!

Bem, a solução do trigger tem o mesmo efeito, já tive 2 períodos de consumo igual e o comportamento é o mesmo, não se consegue que a entidade actualize com valores consecutivos iguais.

Nos periodos das [19:00 - 19:15] [19:15 / 19:30] o consumo foi o mesmo.

O sensor com trigger acusa o mesmo valor, mas não tem “ponto” novo no gráfico às 19:30, e a propriedade “last_updated” já estava com mais de 15minutos.

E não houve soma de consumo:

Acho que vou voltar ao que tinha antes e optar pela situação do random_number. Acho que vai funcionar. É uma pena…

@Jorge_Estima, agradeço mais uma vez a tua observação, e confirmo que adicionando um número aleatório negligenciável resolve o problema.

Senso assim, faço a reformulação do sensore que antes escrevi, substituindo o que tenha em template, tal como o @dgomes sugeriu, por um com trigger (todos os outros mantêm-se):

template:
  - trigger:
    - platform: time_pattern
      minutes: '/15'
      seconds: 1
    sensor:
      - name: last_15min_period_consumo_energy
        unit_of_measurement: kWh
        state: >-
          {% set consumo = state_attr('sensor.p15min_energy_consumo_rede','last_period')|float(default=0) %}
          {% set excedente = state_attr('sensor.p15min_energy_excedente_rede','last_period')|float(default=0) %}
          {# (consumo - excedente) if (consumo > excedente) else 0 #}
          {{ (consumo - excedente + (range(0,99)|random/100000000)) if (consumo > excedente) else 0 }}

Resultados (Neste caso estou a usar um igual, mas para o excedente, onde tive 2 valores de seguida iguais, às 11:15 e às 11:30):


Por exemplo, às 12:00 e 12:15 também tive valores iguais, mas já aparece um ponto de actualização no gráfico:



e o acumulado diário, sempre crescente, confirma:

Fica assim por enquanto. :slight_smile:

EDIT:
Resolvi evitar ainda a remota possibilidade de haver 2 números aleatórios iguais de seguida, e passei a usar o [resto da divisão por 2] do valor dos minutos (última linha do sensor).

{{ consumo - excedente + ((now().minute%2)/1000000000) if (consumo > excedente) else 0 }}

Estou super intrigado. Acabei de receber mais uma fatura da EDP Comercial. Vendo os consumos normais (sem saldo de 15m) no HA, para o periodo Março-Abril teria consumido 67 kWh.

Indo à página da e-Redes, nas leituras de consumo do contador, tive um consumo de 69 kWh, parecido com o que me dá o HA com o Shelly EM.

Agora na fatura apenas tenho um consumo de 47 kWh!!!

Mesmo com esta questão do saldo a cada 15m, já reparei que a diferença não é muita, seria meia duzia kwh ao fim do mês.

Como é que a e-Redes está de facto a fornecer leituras ou a fazer os cálculos para dar um valor tão baixo, de 69 normais para 47 kWh supostamente média de 15m???

Alguma ajuda? Já alguém verificou isto?

Tens painéis fotovoltaicos?

Sim, tenho paineis com bateria

Se for necessário, disponibilizo o excel da E-redes com os consumos/produção a cada 15m

Gostava que me dessem uma ajuda, gostaria de poder calcular o total do vazio+fora de vazio, como consigo fazer? No fundo gostaria de obter o total (SOMA) dos valores totais diário, semanal e mensal.

Screenshot_20220502-093606_Home Assistant


Copyright © 2017-2021. Todos os direitos reservados
CPHA.pt - info@cpha.pt


FAQ | Termos de Serviço/Regras | Política de Privacidade