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

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.

Deixo apenas o update que quando os dados actualizaram às 11pm, as médias voltatam a funcionar. Por isso o @luuuis acertou em cheio que foi a BD a fazer confusão entre os EUR e €, após o upgrade para a v1.
Obrigado @luuuis

boas a todos,

ando aqui numa batalha com os meus graficos sem perceber que raio está a falhar para nao mostrarem os dados.


tenho esses 3 graficos, como vêm o 2º e 3º nao mostram (nem nunca mostraram) resultados e não consigo perceber porquê.
Não existe assim tanta diferença entre o 1º e o 2º mas não consigo meter dados a mostrar nunca no 2º.
aqui vai o codigo de cada:
btw a maioria foi copy/paste da wiki do @luuuis, se eu clickar nos nomes ele mostra-me os dados do sensor e os valores (inclusive com historico) mas o grafico está SEMPRE em loading…

type: custom:apexcharts-card
card_mod:
  style: |
    ha-card {
      width: 450px;
      border: none;
      background: transparent
    }
experimental:
  color_threshold: true
show:
  last_updated: true
header:
  title: Today's hourly values
  standard_format: false
  show: true
  show_states: true
  colorize_states: true
update_interval: 30m
now:
  show: true
span:
  start: day
graph_span: 24h
all_series_config:
  stroke_width: 1
  type: line
  curve: stepline
  group_by:
    func: avg
    duration: 1h
  show:
    extremas: true
    legend_value: false
series:
  - entity: sensor.omie_spot_price_pt
    name: Hourly price
    float_precision: 2
  - entity: sensor.omie_adjustment_price_pt
    name: Hourly adjustment
    float_precision: 2
yaxis:
  - id: price
    align_to: 10
apex_config:
  legend:
    show: false

type: custom:apexcharts-card
card_mod:
  style: |
    ha-card {
      width: 450px;
      border: none;
      background: transparent
    }
experimental:
  color_threshold: true
show:
  last_updated: true
header:
  title: Today's daily average
  standard_format: false
  show: true
  show_states: true
  colorize_states: true
update_interval: 30m
now:
  show: true
span:
  start: day
graph_span: 24h
all_series_config:
  stroke_width: 1
  type: line
  curve: stepline
  group_by:
    func: avg
    duration: 1h
series:
  - entity: sensor.omie_spot_price_pt
    attribute: day_average
    name: Daily price
    float_precision: 2
  - entity: sensor.omie_adjustment_price_pt
    attribute: day_average
    name: Daily adjustment
    float_precision: 2
yaxis:
  - id: price
    align_to: 10
apex_config:
  legend:
    show: false

type: custom:apexcharts-card
card_mod:
  style: |
    ha-card {
      width: 450px;
      border: none;
      background: transparent
    }
experimental:
  color_threshold: true
show:
  last_updated: true
header:
  title: Month to date Values
  standard_format: false
  show: true
  show_states: true
  colorize_states: true
update_interval: 30m
span:
  start: month
graph_span: 24h
series:
  - entity: sensor.omie_spot_pt_month_to_date

resultados de um dos sensores (2º grafico)

Olá @tretabyte , no 2º talvez seja o atributo que julgo ter mudado de nome na V1.
Experimenta alterar as tuas “series” para:
series:

  • entity: sensor.omie_spot_price_pt
    attribute: OMIE_today_average
    name: Daily price
    float_precision: 2
  • entity: sensor.omie_adjustment_price_pt
    attribute: OMIE_today_average
    name: Daily adjustment
    float_precision: 2

quanto ao 3º, podes partilhar o teu código actual SQL que colocaste para calcular o month to date? Imagino que estejas a usar a SQLite?

era isto mesmo! eu sabia que me tinha falhado alguma coisa algures, obrigado!

quanto ao sql, estou a usar mariaDB e vou buscar aqui:

sql:
  - name: omie_spot_pt_month_to_date
    unique_id: omie_spot_pt_month_to_date
    query: |-
      SELECT FROM_UNIXTIME(stats.start_billing_ts) AS window_start,
            FROM_UNIXTIME(stats.start_of_day_ts) 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(CASE 
                                WHEN DAY(NOW()) > billing_offset 
                                THEN CONCAT_WS('-', YEAR(NOW()), MONTH(NOW()), billing_offset) 
                                ELSE CONCAT_WS('-', YEAR(NOW() - INTERVAL 1 MONTH), MONTH(NOW() - INTERVAL 1 MONTH), billing_offset) 
                                END) AS start_billing_ts,
                UNIX_TIMESTAMP(CURDATE()) AS start_of_day_ts
          FROM (
              -- ⚠️ ADJUST HERE AS NECESSARY (e.g. 20 to start billing cycle at midnight on day 21):
              SELECT 20 AS billing_offset
              ) cfg
      ) AS stats
      WHERE statistic_id = 'sensor.omie_spot_price_pt' 
      AND start_ts >= stats.start_billing_ts 
      AND start_ts < stats.start_of_day_ts;
    column: "mean"
    unit_of_measurement: "€/MWh"

Óptimo que o 2º gráfico ficou resolvido. Quando ao SQL em MariaDB é “over my head”. Talvez o @Peter consiga ajudar já que fez a adaptação do 30 Day Rolling Average para MariaDB?

1 Curtiu

Viva @tretabyte,
No terceiro gráfico, experimenta trocar o “span” para o seguinte:
De:

span:
  start: month

Para:

span:
  start: day

Deves ficar com um gráfico similar a este:

image


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


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