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

Muito obrigado, Luís!

Não seria possível inserir um offset para quem tem uma comercializadora que usa como hora 1 a das 23h, poder optar? Sei que varia de comercializador, mas a variação é só entre duas possibilidades…

Up and running!!

Obrigado…novamente!

1 Curtiu

É uma hipótese… ainda estou a matutar sobre a melhor forma de lidar com isso.

Se precisares de ajuda ou beta testers avisa!

Já agora, alguem já tentou fazer um sensor para calcular o valor do kwḣ em bi-horario para a Luzboa? Estou no vai-não-vai para mudar para o mercado indexado mas gosto de ter tudo controlado no HA.

A coopernico pelos vistos pede uns 60€ logo à cabeça (quotas) pelo que não vou para esse. Já a Luzboa faz a média do preço OMIE no período faturado o que significa que nunca vamos conseguir ter um valor real mas dava para ir fazendo uma estimativa…infelizmente não estou a atinar com a formula!

Não são quotas, são participações que são devolvidas caso se deixe de ser cooperante. É um bocado como ser accionista.

Já viste os exemplos no Wiki? Está lá a fórmula da Coopérnico, é uma questão de adaptar. Desde que os consumos não variam excessivamente de um dia para outro ao fim do mês vai dar um valor próximo do real.

Sim, tenho isto:

sensor:
    - unique_id: luzboa_spot_price_simples
      unit_of_measurement: 'EUR/kWh'
      state_class: measurement
      state: >
        {% set PMD = state_attr('sensor.omie_spot_price_pt', 'day_average')|float -%}
        {% set MIBEL = state_attr('sensor.omie_adjustment_price_pt', 'day_average')|float -%}
        {% set Desvios = 0 -%}
        {% set SAJ = 0.004 -%}
        {% set PFC = ((PMD+MIBEL)/1000) + Desvios + SAJ -%}
        {% set ER = 1 -%}
        {% set FA = 1.02 -%}
        {% set PT = 0.1507 -%}
        {% set CG = 0.005 -%}
        {% set TEPAi = -0.09580 -%}
        
        {{( (ER*PFC*(1+PT))*FA+(ER*CG)+(ER*TEPAi) ) | round(4) }}
      attributes:
        friendly_name: "Luzboa €/kWh em simples"
        formula: "(ER*PFC*(1+PT))*FA+(ER*CG)+)ER*TEPAi)"
        PMD: state_attr('sensor.omie_spot_price_pt', 'day_average')|float -%}
        MIBEL: state_attr('sensor.omie_adjustment_price_pt', 'day_average')|float -%}
        Desvios: {{ 0 | float }}
        SAJ: {{ 0.004 | float }}
        FA: {{ 1.02 | float  }}
        PT: {{ 0.1507 | float }}
        CG: {{ 0.005 | float }}
        TEPAi: {{ -0.09580 | float }}
    - unique_id: luzboa_spot_price_bihorario
      unit_of_measurement: 'EUR/kWh'
      state_class: measurement
      state: >
        {% set PMD = state_attr('sensor.omie_spot_price_pt', 'day_average')|float -%}
        {% set MIBEL = state_attr('sensor.omie_adjustment_price_pt', 'day_average')|float -%}
        {% set Desvios = 0 -%}
        {% set SAJ = 0.004 -%}
        {% set PFC = ((PMD+MIBEL)/1000) + Desvios + SAJ -%}
        {% set ER = 1 -%}
        {% set FA = 1.02 -%}
        {% set PT = 0.1507 -%}
        {% set CG = 0.005 -%}

        {% set TAR_vazio = -118.5/1000 -%}
        {% set TAR_fora_vazio = -84.2/1000 -%}
        {% set TEPAi = TAR_vazio if now().hour < 8 or now().hour > 21 else TAR_fora_vazio -%}
                
        {{( (ER*PFC*(1+PT))*FA+(ER*CG)+(ER*TEPAi) ) | round(4) }}
      attributes:
        friendly_name: "Luzboa €/kWh em Bihorario"
        formula: "(ER*PFC*(1+PT))*FA+(ER*CG)+)ER*TEPAi)"
        PH: {{ states('sensor.omie_spot_price_pt') | float }}
        MIBEL: {{ states('sensor.omie_adjustment_price_pt') | float }}
        Desvios: {{ 0 | float }}
        SAJ: {{ 0.004 | float }}
        FA: {{ 1.02 | float  }}
        PT: {{ 0.1507 | float }}
        CG: {{ 0.005 | float }}
        TEPAi: >
          {% set TAR_vazio = -118.5/1000 -%}
          {% set TAR_fora_vazio = -84.2/1000 -%}
          {% set TEPAi = TAR_vazio if now().hour < 8 or now().hour > 21 else TAR_fora_vazio -%}
          {{ TEPAi }}

No entanto, não estou certo se a formula está ou não bem aplicada.

No caso do bi-horario tenho a certeza que está mal. Assumo que eles fazem a média do calor horário dentro de cada período para obter o vazio/fora. Portanto eu preciso de fazer a média do valor horário entre as 22-8 (no caso de bi-horario diario) mas não estou bem a ver como fazer isso já que “o dia muda”. Sugestões?

Estou como tu, contratei uma empresa para vir instalar paineis solares no meu prédio pra meu uso exclusivo, e pretendo mudar para um mercado indexado, uma vez que vou tendo tempo para ir analisando o mercado, e saber quando terei que saltar fora.
Contudo, acho que me vou manter com uma tarifa simples e nao bi-horária porque acho que não faz sentido para mim, uma vez que os equipamentos mais gulosos vao funcionar no horario em que os paineis vão produzir.
Mas, não sei se está a faltar alguma coisa na minha linha de pensamento, as vezes poderei estar errado.
Estou com ideias, de criar um evento no discord um dia destes para falar por voz e ficar registado para consulta posterior no youtube, algo sobre este tema, que considero deveras importante para a comunidade, seria interessante tu @luuuis participares e falares um pouco do trabalho que tens desenvolvido para a comunidade no qual te agradecemos e muito. Caso haja realmente interesse , em marcarmos um dia/noite falem comigo e farei acontecer.

Na minha opinião, se concentrares os consumos nos horários certos (entre as 10h e as 18h, mais coisa menos coisa, depende dos dias), compensa os 60€. Com a ajuda desta excelente integração, o meu saldo dos últimos 30 dias está a negativo. Pessoalmente também gosto que os valores das perdas e CGS sejam fixos, permite ter um melhor controlo.

Por outro lado, na próxima assembleia da Coopérnico, dia 22, uma das propostas em cima da mesa é um cooperante poder indicar até 3 NIFs de pessoas singulares, os quais podem aderir a fornecimento de energia elétrica sem se tornarem cooperantes. Pelo que, arranjas um ou dois amigos e dividem o custo das participações, se de facto os 60€ te estão a impedir de aderir. É só uma ideia…

2 Curtiram

Boa, vamos aguardar por novos desenvolvimentos.

No meu caso, com carro electrico, o meu consumo é uns 80% fora do vazio

Lá está. Tirando o início da manhã e o final da tarde, os preços têm estado mais baixos durante o dia, nas horas “cheias”. Eu cá tenho recebido por carregar o meu carro :metal:

1 Curtiu

Acho que o correcto para a média diária seria fazer a média do vazio do dia, que compreende os períodos entre as 00:00-07:59 e as 22:00-23:59. Os períodos do dia seguinte entram na média do dia seguinte.

Mas também estou a assumir, o melhor seria não assumir nada e esclarecer com a Luzboa.

O que interessa mais não é o consumo absoluto mas o que se compra à rede, o que depende da produção dos painéis. Eu também comecei no simples e só mais tarde após ter tido oportunidade de analisar um ano de consumos.

Autorizaste o acesso da Coopérnico ao diagrama de cargas para que eles consigam cobrar o valor horário do kWh?

1 Curtiu

Recentemente aderi à Coopérnico no tarifário horário indexado versão Bi-Horária.
Para tentar ter um gráfico com os valores da Coopérnico no horário português, fiz este template.

      - unique_id: omie_horario_portugues
        unit_of_measurement: "EUR/MWh"
        state_class: measurement
        state: >
          {{ state_attr('sensor.omie_spot_price_pt', 'day_hours') [now().hour+1]|float }}
        attributes:
          friendly_name: "OMIE com correção fuso horário"
          day_hours: >
            [
            {{ state_attr('sensor.omie_spot_price_pt', 'day_hours') [1] }},
            {{ state_attr('sensor.omie_spot_price_pt', 'day_hours') [2] }},
            {{ state_attr('sensor.omie_spot_price_pt', 'day_hours') [3] }},
            {{ state_attr('sensor.omie_spot_price_pt', 'day_hours') [4] }},
            {{ state_attr('sensor.omie_spot_price_pt', 'day_hours') [5] }},
            {{ state_attr('sensor.omie_spot_price_pt', 'day_hours') [6] }},
            {{ state_attr('sensor.omie_spot_price_pt', 'day_hours') [7] }},
            {{ state_attr('sensor.omie_spot_price_pt', 'day_hours') [8] }},
            {{ state_attr('sensor.omie_spot_price_pt', 'day_hours') [9] }},
            {{ state_attr('sensor.omie_spot_price_pt', 'day_hours') [10] }},
            {{ state_attr('sensor.omie_spot_price_pt', 'day_hours') [11] }},
            {{ state_attr('sensor.omie_spot_price_pt', 'day_hours') [12] }},
            {{ state_attr('sensor.omie_spot_price_pt', 'day_hours') [13] }},
            {{ state_attr('sensor.omie_spot_price_pt', 'day_hours') [14] }},
            {{ state_attr('sensor.omie_spot_price_pt', 'day_hours') [15] }},
            {{ state_attr('sensor.omie_spot_price_pt', 'day_hours') [16] }},
            {{ state_attr('sensor.omie_spot_price_pt', 'day_hours') [17] }},
            {{ state_attr('sensor.omie_spot_price_pt', 'day_hours') [18] }},
            {{ state_attr('sensor.omie_spot_price_pt', 'day_hours') [19] }},
            {{ state_attr('sensor.omie_spot_price_pt', 'day_hours') [20] }},
            {{ state_attr('sensor.omie_spot_price_pt', 'day_hours') [21] }},
            {{ state_attr('sensor.omie_spot_price_pt', 'day_hours') [22] }},
            {{ state_attr('sensor.omie_spot_price_pt', 'day_hours') [23] }},
            {% if now().hour <= 13 %}
              {{ state_attr('sensor.omie_spot_price_pt', 'day_hours') [23] }},
            {% else %} {{ state_attr('sensor.omie_spot_price_pt_tomorrow', 'day_hours') [0] }}
            {% endif %}
            ]

Os gráficos ficam muito diferentes:
Sem correção horária:
image

E o mesmo no horário Português:
image

Mas parece-me que está correto: A TAR aplica-se no horário português ao valor do OMIE no horário espanhol…

Sim, autorizei logo no primeiro dia. A primeira fatura virá nos próximos dias, aí vou confirmar se está tudo correto na minha lógica.

Na verdade, já pensei em desligar os meus painéis em determinados dias. Estão-me a tirar consumo à rede…
Com a recente flutuação dos preços ao longo do dia, os preços têm estado mais baixos durante o dia, por isso não vejo vantagem no bi-horário, ou está-me a falhar alguma coisa?

Sim, concordo. No seu devido tempo tenciono corrigir a integração com o valor correcto consoante o horário CET.

Desse modo quem estiver na Luzboa ou outro comercializador que faça uma interpretação incorrecta dos preços horários terá que se amanhar com truques como esse template sensor (ou outro que publico no Wiki).

Humm, eu gostava de acreditar que esta integração ajuda na descarbonização da rede eléctrica ao incentivar o desvio de consumos para períodos de menor preço / maior produção através de renováveis.

E não que, pelo contrário, conduzisse ao desligar de produção de fontes de energia renováveis. :slight_smile:

E podes acreditar. Principalmente estando, como dizes, o menor preço diretamente relacionado com a maior produção através de renováveis.
Ainda não tive coragem de os desligar devido a essa mesma razão.
Também podemos aderir ao tarifário GO (com Garantias de Origem 100% renováveis). Mais 0,015€/KWh (já com os 15%de perdas) e a menor ou maior quantidade de energia que vamos consumir da rede, é também proveniente de origens renováveis…

Como é que tem funcionado esse sensor? Estava agora a mexer com isto e esta parte está-me a fazer impressão:

{% if now().hour <= 13 %}
  {{ state_attr('sensor.omie_spot_price_pt', 'day_hours') [23] }},
{% else %}
  {{ state_attr('sensor.omie_spot_price_pt_tomorrow', 'day_hours') [0] }}
{% endif %}

Não é pela implementação em si, que consigo fazer, mas a confusão que isto vai causar aos utilizadores. Por exemplo:

  • o preço que vigora entre as 23 e 00 só se sabe depois das 13 de cada dia, o que dificulta o planeamento,
  • pela mesma razão a média do dia só se sabe depois das 13 de cada dia,
  • a média do dia não vai bater certo com o que mostra o OMIE, que mostra a média para o mercado português durante as horas do dia espanhol,
  • se pelo contrário continuar a expor a média OMIE, não vai bater certo com a média real calculada a partir dos valores horários.

Isto é quase motivo para um gajo começar a arrancar cabelos… :dizzy_face:

Ufa, essas questões são mesmo chatas de conciliar! No meu caso, que é horário, não uso a média do dia, pelo que a solução funciona bem! Ao repetir o valor da hora anterior, no gráfico vai ficar muito aproximada e às 13h já mostra o valor correto.

Em relação às médias, a Coopérnico usa a média diária baseada na hora espanhola ou portuguesa? Se for a portuguesa, a média tem mesmo de ser diferente da do site. Se for a espanhola, se calhar não seria de calcular a hora no HASS, mas antes ir buscar o valor diretamente ao site…

O sensor OMIE funciona muito bem, e eu adaptei conforme as sugestões no Wiki. E se houvesse essa adaptação apenas nos códigos do Wiki, e cada um escolhia o código consoante a sua operadora? Ou então, os sensores já embutidos na integração, e cada um usava o sensor correto?

Mas é um quebra-cabeças!!

De arrancar os cabelos…de facto!

Eu cá não tinha ido tão longe como o João e só criei template para o state. Para o gráfico fiz uma espécie de offset setHours(hour, -60, 0, 0)) e a última hora aparecia sempre igual à penúltima. Obrigado João!

Para um tarifário que utilize o preço médio diário, nunca vai ser possível durante as primeiras 13 horas do dia saber a que preço se está a trabalhar. A não ser que a operadora utilize para média o valor do site, apesar de trabalhar com o horário espanhol (o que não me faz muito sentido).

Para o utilizador, talvez seja mais simples ter entidades distintas e com a média real calculada a partir dos valores horários. Ainda que, independentemente de ser com entidades ou sensores colocados no wiki, o utilizador deve saber que não vai bater certo com o OMIE.

Ou então, para evitares uns cabelos brancos precoces, atualizas todas as entidades e mudas o nome da integração para: Integração “OMIE/Coopérnico: Tarifário Horário” :joy:

1 Curtiu

Alguem dispostos a olhar para a logica deste template sff?

Teoricamente vai retornar os valores praticados pela LuzBoa em Simples e Bihorario:

sensor:
    - unique_id: luzboa_spot_price_simples
      unit_of_measurement: 'EUR/kWh'
      state_class: measurement
      state: >
        {% set PMD = state_attr('sensor.omie_spot_price_pt', 'day_average')|float -%}
        {% set MIBEL = state_attr('sensor.omie_adjustment_price_pt', 'day_average')|float -%}
        {% set Desvios = 0 -%}
        {% set SAJ = 0.004 -%}
        {% set PFC = ((PMD+MIBEL)/1000) + Desvios + SAJ -%}
        {% set ER = 1 -%}
        {% set FA = 1.02 -%}
        {% set PT = 0.1507 -%}
        {% set CG = 0.005 -%}
        {% set TEPAi = -0.09580 -%}
        
        {{( (ER*PFC*(1+PT))*FA+(ER*CG)+(ER*TEPAi) ) | round(4) }}
      attributes:
        friendly_name: "Luzboa €/kWh em simples"
        formula: "(ER*PFC*(1+PT))*FA+(ER*CG)+)ER*TEPAi)"
        PMD: state_attr('sensor.omie_spot_price_pt', 'day_average')|float -%}
        MIBEL: state_attr('sensor.omie_adjustment_price_pt', 'day_average')|float -%}
        Desvios: {{ 0 | float }}
        SAJ: {{ 0.004 | float }}
        FA: {{ 1.02 | float  }}
        PT: {{ 0.1507 | float }}
        CG: {{ 0.005 | float }}
        TEPAi: {{ -0.09580 | float }}
    - unique_id: luzboa_spot_price_bihorario_diario
      unit_of_measurement: 'EUR/kWh'
      state_class: measurement
      state: >
        {% set PMD_v = (state_attr('sensor.omie_spot_price_pt', 'day_hours')[0:7]+state_attr('sensor.omie_spot_price_pt', 'day_hours')[22:23]) | average %}
        {% set PMD_fv = (state_attr('sensor.omie_spot_price_pt', 'day_hours')[8:21]) | average %}
        {% set PMD = PMD_v if now().hour < 8 or now().hour > 21 else PMD_fv -%}
        {% set MIBEL = state_attr('sensor.omie_adjustment_price_pt', 'day_average')|float -%}
        {% set Desvios = 0 -%}
        {% set SAJ = 0.004 -%}
        {% set PFC = ((PMD+MIBEL)/1000) + Desvios + SAJ -%}
        {% set ER = 1 -%}
        {% set FA = 1.02 -%}
        {% set PT = 0.1507 -%}
        {% set CG = 0.005 -%}
        {% set TAR_vazio = -118.5/1000 -%}
        {% set TAR_fora_vazio = -84.2/1000 -%}
        {% set TEPAi = TAR_vazio if now().hour < 8 or now().hour > 21 else TAR_fora_vazio -%}
        {{( (ER*PFC*(1+PT))*FA+(ER*CG)+(ER*TEPAi) ) | round(4) }}
      attributes:
        friendly_name: "Luzboa €/kWh em Bihorario Diario"
        formula: "(ER*PFC*(1+PT))*FA+(ER*CG)+)ER*TEPAi)"
        PH: {{ states('sensor.omie_spot_price_pt') | float }}
        MIBEL: {{ states('sensor.omie_adjustment_price_pt') | float }}
        Desvios: {{ 0 | float }}
        SAJ: {{ 0.004 | float }}
        FA: {{ 1.02 | float  }}
        PT: {{ 0.1507 | float }}
        CG: {{ 0.005 | float }}
        PMD_v: {{ (((state_attr('sensor.omie_spot_price_pt', 'day_hours')[:7]+state_attr('sensor.omie_spot_price_pt', 'day_hours')[22:23]) | average )/1000 | float) | round(4)}}
        PMD_fv: {{ (((state_attr('sensor.omie_spot_price_pt', 'day_hours')[8:21]) | average )/1000 | float) | round(4)}}
        TEPAi: >
          {% set TAR_vazio = -118.5/1000 -%}
          {% set TAR_fora_vazio = -84.2/1000 -%}
          {% set TEPAi = TAR_vazio if now().hour < 8 or now().hour > 21 else TAR_fora_vazio -%}
          {{ TEPAi }}
              
        
1 Curtiu

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


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