Integração OMIE: preços horários, diários, mecanismo de ajuste

Obrigado @beloso , vou partilhar no Wiki.

@tretabyte em primeiro lugar garantir que corres a versão 1.0.0 pois os gráficos que estão no Wiki trabalham os atributos novos nessa versão. Em segundo lugar verificar que o atributo tomorrow_hours contem de facto preenchido os valores futuros.

Alguém já criou os templates para compra de energia à Luzboa que queira “doar” ao Wiki?

1 Curtiu

sim estou a correr a versao 1.0.0 mas pelo que vejo os valores de Tomorrow não estão a ser puxados por algum estranho motivo.

Fui ver e também me aconteceu no ambiente de testes (mas não no outro). Vou investigar.

Hoje também me aconteceu ao final do dia, mas com as atualizações e o respetivo reinício, ficou novamente normal…

Templates Luzboa que uso:

Custo kWh/dia:

---
sensor:
  - name: Luzboa Daily Spot Cost
    unit_of_measurement: €/kWh
    state_class: measurement
    state: |-
      {% set PMD = state_attr(this.entity_id, 'PMD') | float(default=0) -%}
      {% set MIBEL = state_attr(this.entity_id, 'MIBEL') | float(default=0) -%}
      {% set Desvios = state_attr(this.entity_id, 'Desvios') | float(default=0) -%}
      {% set SAJ = state_attr(this.entity_id, 'SAJ') | float(default=0) -%}
      {% set PFC = ((PMD+MIBEL)/1000) + Desvios + SAJ -%}
      {% set FA = state_attr(this.entity_id, 'FA') | float(default=0) -%}
      {% set PT = state_attr(this.entity_id, 'PT') | float(default=0) -%}
      {% set CG = state_attr(this.entity_id, 'CG') | float(default=0) -%}
      {% set TEPAi = state_attr(this.entity_id, 'TEPAi') | float(default=0) -%}
      
      {{( (PFC*(1+PT))*FA+(CG)+(TEPAi) ) | round(4) }}
    attributes:
      friendly_name: "Luzboa €/kWh"
      formula: (ER*PFC*(1+PT)*FA)+(ER*CG)+(ER*TEPAi)
      PMD: "{{ state_attr('sensor.omie_spot_price_pt', 'today_average') | float(default=0) }}"
      MIBEL: "{{ state_attr('sensor.omie_adjustment_price_pt', 'today_average') | float(default=0) }}"
      Desvios: "{{ 0 | round(4) }}"
      SAJ: "{{ 0.004 | round(4) }}"
      FA: "{{ 1.02 | round(4) }}"
      PT: "{{ 0.1507 | round(4) }}"
      CG: "{{ 0.005 | round(4) }}"
      TEPAi: "{{ -0.09580 | round(4) }}"

Luzboa custo médio mensal, usa o SQL do month to date, o que partilhei acima, para tentar estimar o custo kWh total do mês.

---
sensor:
  - name: Luzboa Average Monthly Cost
    unit_of_measurement: €/kWh
    state_class: measurement
    state: |-
      {% set PMD = state_attr(this.entity_id, 'PMD') | float(default=0) -%}
      {% set MIBEL = state_attr(this.entity_id, 'MIBEL') | float(default=0) -%}
      {% set Desvios = state_attr(this.entity_id, 'Desvios') | float(default=0) -%}
      {% set SAJ = state_attr(this.entity_id, 'SAJ') | float(default=0) -%}
      {% set PFC = ((PMD+MIBEL)/1000) + Desvios + SAJ -%}
      {% set FA = state_attr(this.entity_id, 'FA') | float(default=0) -%}
      {% set PT = state_attr(this.entity_id, 'PT') | float(default=0) -%}
      {% set CG = state_attr(this.entity_id, 'CG') | float(default=0) -%}
      {% set TEPAi = state_attr(this.entity_id, 'TEPAi') | float(default=0) -%}
      
      {{( (PFC*(1+PT))*FA+(CG)+(TEPAi) ) | round(4) }}
    attributes:
      friendly_name: "Luzboa €/kWh"
      formula: (ER*PFC*(1+PT)*FA)+(ER*CG)+(ER*TEPAi)
      PMD: "{{ states('sensor.omie_pt_spot_price_month_to_date_average') | float(default=0) }}"
      MIBEL: "{{ state_attr('sensor.omie_adjustment_price_pt', 'today_average') | float(default=0) }}"
      Desvios: "{{ 0 | round(4) }}"
      SAJ: "{{ 0.004 | round(4) }}"
      FA: "{{ 1.02 | round(4) }}"
      PT: "{{ 0.1507 | round(4) }}"
      CG: "{{ 0.005 | round(4) }}"
      TEPAi: "{{ -0.09580 | round(4) }}"

Basei-me nuns templates partilhados acima, só adaptei para a versão 1.0.0 e o meu template SQL
(Acho que devia usar um SQL para o MIBEL, mas lá chegarei).

4 Curtiram

Obrigado! :pray:

Opá… já começa a aborrecer esta história de termos de estar sempre a repetir os sensores para as várias médias. Ainda vou ter de implementar nativamente as médias na integração como têm vindo a pedir. :slight_smile:

Devia ser só mudar o nome do sensor no SQL que partilhei acima. Mas como tem estado a 0. Não o fiz ainda.

Não conheço muito de integrações, nem da API do HA. Mas se conseguires fazer a query pelo recorder / long term statistics / algo na API do HA, e expor como um sensor seria o melhor. Ainda vamos descobrir os múltiplos sabores de SQL neste tópico.

Não vi a API do OMIE, mas se der para fazer query para o mês também seria de considerar.

O chato destes sensores SQL, é que uns usam SQLite outros usam Maria, outros PostgreSQL e por ai fora. Eu não lido com SQL há anos, andei aqui á marrada até conseguir alguma coisa. Mas compreendo que nem todos tenham pachorra para isso. Se o SQL ao menos fosse um único para qualquer engine era mais fácil de gerir.

Parabéns @luuuis pelo execelente trabalho com a integração OMIE no Home Assistant.

Partindo da excelente iniciativa do @beloso, e como também utilizo MariaDB fui tentar escavar um pouco e cheguei ao seguinte código, agradeço desde já a quem o queira melhorar, mas penso que o resultado final vai de encontro ao pretendido:

sql:
  - name: omie_spot_pt_30_day_rolling_average
    unique_id: omie_spot_pt_30_day_rolling_average
    query: |-
      SELECT FROM_UNIXTIME(stats.thirty_days) AS window_start,
            FROM_UNIXTIME(stats.start_of_day) AS window_end,
            FROM_UNIXTIME(MIN(start_ts)) AS oldest_measurement,
            FROM_UNIXTIME(MAX(start_ts)) AS newest_measurement,
            COUNT(*) AS measurement_count,
            ROUND(AVG(s.mean), 2) AS mean
      FROM statistics s 
      JOIN statistics_meta m ON s.metadata_id = m.id
      CROSS JOIN (
          SELECT UNIX_TIMESTAMP(CURDATE() - INTERVAL 30 DAY) AS thirty_days,
                 UNIX_TIMESTAMP(CURDATE()) AS start_of_day
      ) AS stats
      WHERE  statistic_id = 'sensor.omie_spot_price_pt'
      AND  start_ts >= stats.thirty_days
      AND  start_ts < stats.start_of_day
    column: 'mean'
    unit_of_measurement: 'EUR/MWh'

Resultado:
Screenshot_1

PS: Editei o código para ficar similar aos anteriores

Fiz atualização para a v1.0.0 e fiquei com alguns sensores indisponíveis. Será que me falta fazer mais alguma coisa?

É difícil ajudar só com essa informação.

Os atributos dos sensores mudaram na v1, se os usas nos teus template vais ter de actualizar (conforme os exemplos no wiki).

Foi falta de leitura :joy: já estive a ver no teu github.
Assim que poder já vou ver se consigo alterar.
Obrigado

Tenho exatamente esta necessidade para calcular o valor em bihorario. Tenho o ciclo semanal, ou seja, ao fim-de-semana as médias são diferentes. Alguma sugestão de alteração para o ciclo semanal?

Podes usar a integração ERSE e no teu template consultas qual o período actual do utility meter controlado pelo ERSE para depois usar a fórmula correspondente.

ja agora, alguem a usar a integracao da ERSE e a utilizar Luzboa Indexado?
visto que o valor de custo de energia muda, alguma maneira de termos a Omie a popular os custos para a da ERSE?

Bom dia @luuuis , comecei a notar que com a integração OMIE, e usando o teu query SQL (com SQLite), tanto o código omie_spot_pt_month_to_date como o omie_spot_pt_30d deixaram de actualizar a média. Fiz um query à mão e notei que a última medição para fazer a média estava com dia 8 de Maio às 9am. Fazes ideia do que possa ser o problema, e mais alguém tem este problema?

Obrigado!

Não precisavas de correr à mão pois essa info está nos atributos do sensor. :slight_smile:

A única coisa que me ocorre é que as estatísticas não estão a ser devidamente gravada desde o dia 8. Terá sido nessa data que actualizaste?

A v1 acarreta uma alteração da unidade dos sensores de EUR/MWh para €/MWh e isso deve estar a interferir. Experimenta ir aos Dev Tools e ver se está lá algum erro relativo às unidades, se estiver (vai estar) podes corrigir a unidade das estatísticas com um clique nessa mesma página. Depois reporta aqui sff.

Open your Home Assistant instance and show your statistics developer tools.

Obrigado @luuuis acho que acertaste em cheio. Vejo que está em EUR/MWh, mas não detecta como erro. Sabes como posso alterar?

Coisa estranha. Os valores do sensor já estão em €/MWh? E na tabela statistics qual é o último valor para esse sensor? (aqui sim com SQL manual).

É preciso ver se as statistics estão a ser gravadas e caso não deves ver se não tens erros relativos a isso.

Possivelmente fui pelo caminho mais longo… mas alterei manualmente no statistics_meta a unidade para €/MWh (usando o BD Browser), e já me apareceu depois o fix no Dev Tools Stats, e agora aparece-me bem.
Tenho de ver no entanto se ele actualiza a base de dados, imagino que só depois da meia-noite.


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


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