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

Acabei de adicionar o TAR cheias e o TAR de ponta às partes today_hours e tomorrow_hours do código e corrigi uma gralha onde tinha escrito Tar_ponta em vez de TAR_ponta. Ainda não estou a utilizar o ApexCharts, pelo que não testei essa parte do código. E acabei de encontrar e acrescentar dois “}” em falta neste post.
Podes experimentar este código e, se gostares, adicioná-lo à Wiki. Podes fazer as alterações que quiseres.


template:
  - binary_sensor:
    - name: "Is DST"
      state: "{{ now().timetuple().tm_isdst == True }}"
 
  - sensor:        
    - unique_id: coopernico_spot_price_trihorario
      unit_of_measurement: '€/MWh'
      state_class: measurement
      state: >
        {% set PM = states('sensor.omie_spot_price_pt')|float -%}
        {% set MAJ = states('sensor.omie_adjustment_price_pt')|float -%}
        {% set CGS = 4 -%}
        {% set k = 10 -%}
        {% set FP = 0.15 -%}
        {% set TAR_vazio = -118.5 -%}
        {% set TAR_ponta = -001.8 -%}
        {% set TAR_cheias = -106.9 -%}

        {% set t = now().hour + (now().minute/60) | round(2) %}
          {% if t < 8 or t >= 22 %}
            {% set TAR = TAR_vazio %}
          {% else %}       
            {% if "Is DST" == False %}
              {% set TAR = TAR_ponta if (t >= 9 and t < 10.5) or (t >= 18 and t < 20.5) else TAR_cheias -%}
            {% else %}   
              {% set TAR = TAR_ponta if (t >= 10.5 and t < 13) or (t >= 19.5 and t < 21) else TAR_cheias -%}        
            {% endif %}
          {% endif %}

        {{ ((PM + CGS + k)*(1 + FP) + MAJ + TAR) | round(2) }}
        
      attributes:
        friendly_name: "Coopérnico Base (tarifário tri-horário)"
        formula: "(PM+CGS+K)*(1+FP)+MIBEL+TAR"
        PM: "{{ states('sensor.omie_spot_price_pt')|float }}"
        MIBEL: "{{ states('sensor.omie_adjustment_price_pt')|float }}"
        CGS: "{{ 4 | float }}"
        k: "{{ 10 | float }}"
        FP: "{{ 0.15 | float  }}"
        TAR_vazio: "{{ TAR_vazio | float }}"
        TAR_ponta: "{{ TAR_ponta | float }}"
        TAR_cheias: "{{ TAR_cheias | float }}"
        TAR: "{{ TAR | float }}"
        
        today_hours: >
            {% set CGS = 4 -%}
            {% set k = 10 -%}
            {% set FP = 0.15 -%}
            {% set TAR_vazio = -118.5 -%}
            {% set TAR_ponta = -001.8 -%}
            {% set TAR_cheias = -106.9 -%}
                        
            {% set ns = namespace(hourly_data=[]) %}
            {% for h, PM in state_attr('sensor.omie_spot_price_pt', 'today_hours').items() -%}
              {% set MAJ = state_attr('sensor.omie_adjustment_price_pt', 'today_hours')[h] -%}
              {% set t = now().hour + (now().minute/60) | round(2) %}
                {% if t < 8 or t >= 22 %}
                  {% set TAR = TAR_vazio %}
                {% else %}       
                  {% if "Is DST" == False %}
                    {% set TAR = TAR_ponta if (t >= 9 and t < 10.5) or (t >= 18 and t < 20.5) else TAR_cheias -%}
                  {% else %}   
                    {% set TAR = TAR_ponta if (t >= 10.5 and t < 13) or (t >= 19.5 and t < 21) else TAR_cheias -%}        
                  {% endif %}
                {% endif %}              
            
              {% if PM == None or MAJ == None %}
                {% set price=PM %}
              {% else %}
                {% set price=((PM + CGS + k)*(1 + FP) + MAJ + TAR) | round(2) %}
              {% endif %}
              {% set ns.hourly_data=ns.hourly_data + [(h.isoformat(), price)] %}
            {% endfor -%}
            {{ dict(ns.hourly_data) }}
        tomorrow_hours: >
            {% set CGS = 4 -%}
            {% set k = 10 -%}
            {% set FP = 0.15 -%}
            {% set TAR_vazio = -118.5 -%}
            {% set TAR_ponta = -001.8 -%}
            {% set TAR_cheias = -106.9 -%}
            
            {% set ns = namespace(hourly_data=[]) %}
            {% for h, PM in state_attr('sensor.omie_spot_price_pt', 'tomorrow_hours').items() -%}
              {% set MAJ = state_attr('sensor.omie_adjustment_price_pt', 'tomorrow_hours')[h] -%}
              {% set t = now().hour + (now().minute/60) | round(2) %}
                {% if t < 8 or t >= 22 %}
                  {% set TAR = TAR_vazio %}
                {% else %}       
                  {% if "Is DST" == False %}
                    {% set TAR = TAR_ponta if (t >= 9 and t < 10.5) or (t >= 18 and t < 20.5) else TAR_cheias -%}
                  {% else %}   
                    {% set TAR = TAR_ponta if (t >= 10.5 and t < 13) or (t >= 19.5 and t < 21) else TAR_cheias -%}        
                  {% endif %}
                {% endif %}

              {% if PM == None or MAJ == None %}
                {% set price=PM %}
              {% else %}
                {% set price=((PM + CGS + k)*(1 + FP) + MAJ + TAR) | round(2) %}
              {% endif %}
              {% set ns.hourly_data=ns.hourly_data + [(h.isoformat(), price)] %}
            {% endfor -%}
            {{ dict(ns.hourly_data) }}

isto ja é oficial?
se sim é preciso reconfigurar os templates (atualizar a formula)

Verifico que a componente PM do preço é actualizada cerca de 2 segundos após a hora, enquanto a componente TAR é actualizada à hora ou meia hora. Isto leva a que o gráfico do sensor seja ultrapassado ou subestimado. Para compensar esta situação, adicionei um atraso à actualização da TAR no meu modelo de sensor. Não fiz a actualização na parte do ApexChart do modelo, uma vez que ainda não o estou a utilizar e não sei se causaria algum problema com esse gráfico.

código para tri-horário:

        {% set D = (1.9/3600) | round(5) %}
        {% set t = now().hour + (now().minute/60 + now().second/3600 - D) | round(5) %}
        {% if t < 8 or t >= 22 %}
            {% set TAR = TAR_vazio %}
        {% else %}       
          {% if "Is DST" == False %}
            {% set TAR = TAR_ponta if (t >= 9 and t < 10.5) or (t >= 18 and t < 20.5) else TAR_cheias -%}
          {% else %}   
            {% set TAR = TAR_ponta if (t >= 10.5 and t < 13) or (t >= 19.5 and t < 21) else TAR_cheias -%}        
          {% endif %}
        {% endif %}

O desfasamento da hora é propositado para não estarem todos os nossos Home Assistants a aceder ao OMIE exactamente no mesmo momento.

O valor do desfasamento (entre 0 e 3 segundos) é escolhido cada vez que a integração arranca portanto o teu 1.9 não vai condizer com o desfasamento da próxima vez que reiniciares o Home Assistant.

Acho que se pode melhorar isto porque o desfasamento só é necessário no momento em que se vai ler os dados do dia seguinte, geralmente pelas 13:30, mas até agora ainda não incomodou ninguém. :slight_smile:

Alguém com possibilidade de dar uma ajuda com REPSOL, bi-horário semanal?

sim está no simulador deles no site

@luuuis acho que o valor retirado que esta a ser retirado do site da OMIE é da previsão, devido a necessidade da rede (variação de consumo) o preço também varia. Para quem quer utilizar a integração para calcular valores do consumo o preço medio ao fim de cada hora deve ser a ponderada para calcular custos de consumo.

https://www.omie.es/pt/market-results/daily/continuous-intradaily-market/price-per-contract

@Jack_Santoro antes de mais bem vindo ao fórum e obrigado por vires dar o teu contributo. :slight_smile:

Eu já tinha lido sobre o mercado intradiário, cheguei até a fazer uma cábula para o caso de querer incorporar essa informação mas na altura não cheguei a perceber se no final de contas as diferenças de preço seriam significativas para o que se quer aqui, que é ter uma estimativa dos custos finais.

Os dados que agora estás a realçar parece que são do mercado intradiário contínuo. Esses dados (da média ponderada) podem ser usados tal e qual ou é necessária alguma transformação? Por exemplo, combinar com os resultados das outras sessões (diário e intradiário).

@luuuis Obrigado e parabéns pela integração que ajuda muita gente com eu. Acho que o valor “casado” da oferta e procura é a media ponderada sem necessidade de ajuste, pelo o que li parece ser o valor final para Portugal (é necessário selecionar PT), o mercado intradiário contínuo tem em conta a limitação da interligação. Podemos ter o preço MWh superior a Espanha porque não temos capacidade nas interligações para importar, uma situação que pode obrigar aumentar a produção de origem térmico (gás) e não importar produção solar que deve resultar num preço MWh superior.

Cumps

Para quem ainda não tiver conhecimento…

Novas TAR a partir de 1 de Julho

image

Isto é um aumento gigante, ou estou a ver mal?

Pois, na Tarifa Simples são 0,0837€ / KWh de diferença…

@Thy_Hunter falta aí um 0 nas casas decimais. Mas sim, é brutal o aumento.

Pois falta! :grimacing:

Corrigido

Actualizei os templates para as novas TAR de 1 de Julho. Avisem se me escapou alguma coisa.

1 Curtiu

Obrigado @luuuis

Esses templates estão onde?
Só achei isto: https://gist.github.com/luuuis/ee29115f4f48719bb355eea0c8a86efb

Nas Wiki:

Obrigado @jsantosdias

Bom trabalho @luuuis !

Falta acrescentar um logo em https://github.com/home-assistant/brands :wink:

2 Curtiram

Atualizei o HA para a versão 2023.9.0 e a integração OMIE está com erros.

Mais alguém?


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


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