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

Acabei de modificar o custo do consumo líquido do bihorário da Coopérnico para reportar o trihorário utilizando o seguinte:

    {% set TAR_vazio = -118.5 -%}
    {% set TAR_ponta = -001.8 -%}
    {% set TAR_cheias = -106.9 -%}
    {% if is_state('sensor.edp_6_9_kva_tri_horaria_ciclo_diario', 'Vazio') %}
        {% set TAR = TAR_vazio %}
    {% elif is_state('sensor.edp_6_9_kva_tri_horaria_ciclo_diario', 'Ponta') %}
        {% set TAR = TAR_ponta %}
    {% elif is_state('sensor.edp_6_9_kva_tri_horaria_ciclo_diario', 'Cheias') %}
        {% set TAR = TAR_cheias %}         
    {% endif %}

Há alguma razão para não utilizar as variáveis de integração da ERSE?

Sim, é simplesmente para não obrigar à instalação do ERSE. A única dependência são os sensores do OMIE.

1 Curtiu

@luuuis com a ajuda do @bbaixo aqui fica:

Caso queiras tirar alguma ideia para uma nova versao da integração.
PS: Fórmula para luzboa

[{"id":"675b83a0c191fba5","type":"change","z":"cd967ef81c14b84f","name":"","rules":[{"t":"set","p":"url","pt":"msg","to":"https://cpha.cpha.teste:8123/api/states/sensor.omie_spot_price_pt","tot":"str"},{"t":"set","p":"headers[\"content-type\"]","pt":"msg","to":"application/json","tot":"str"},{"t":"set","p":"headers[\"Authorization\"]","pt":"msg","to":"Bearer eyJhbGciOiJIUxxxxxxxxInR5cCI6IkpXVCJ9.eyJpc3MiOiIzODQxNjAzYWEyYjQ0NGI2OWNlMzUxxxxxxjRkYjZhOCIsImlhdCI6MTY4NTQ4Mzk0MSwiZXhwIjoyMDAwODQzOTQxfQ.cA78Vllxxxxx-sf6qfLUGWF3LS_VHSUw4KEF3L9k","tot":"str"},{"t":"set","p":"payload","pt":"msg","to":"data","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":680,"y":420,"wires":[["b5762c1dfccd4bc6"]]},{"id":"b5762c1dfccd4bc6","type":"http request","z":"cd967ef81c14b84f","name":"POST","method":"POST","ret":"txt","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":830,"y":420,"wires":[[]]},{"id":"e2e3fc27b68310b1","type":"change","z":"cd967ef81c14b84f","name":"Cálculo","rules":[{"t":"set","p":"data.attributes.valor_kWh","pt":"msg","to":"$number(payload) / 1000 * 1.183 + 0.01002 - 0.0958","tot":"jsonata"},{"t":"set","p":"data.attributes.valor_kWh","pt":"msg","to":"$round(data.attributes.valor_kWh * 1000) / 1000","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":460,"y":420,"wires":[["675b83a0c191fba5"]]},{"id":"bc87f03c36bac20b","type":"inject","z":"cd967ef81c14b84f","name":"hora em hora","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"3600","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":100,"y":420,"wires":[["d4875669ad0eb51f"]]},{"id":"d4875669ad0eb51f","type":"api-current-state","z":"cd967ef81c14b84f","name":"Spot Price PT","server":"cd683d65.68ba9","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.omie_spot_price_pt","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":280,"y":420,"wires":[["e2e3fc27b68310b1"]]},{"id":"cd683d65.68ba9","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"30","areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true}]
1 Curtiu

Agradeço o feedback :+1:

Boa tarde,

Em relação às horas em que o preço é negativo, como são faturadas? A custo zero ou negativo?

Obrigado.

1 Curtiu

Corresponde a um crédito no teu saldo, já houve quem tenha recebido nota de crédito ao fim do mês.

1 Curtiu

Obrigado @luuuis ,

Era o meu entendimento!
É que na minha primeira fatura veio um valor 55% mais alto que a expectativa.

Tenho que refazer os calculos.

Bom dia a todos!

Por problemas de comunicação entre Coopérnico e E-Redes, as minhas primeiras 2 faturas vieram com preço médio e não de acordo com diagrama de cargas. Confirmei com eles e estou a aguardar a correção.

Recomendo que se os valores não estiverem de acordo com o expectável, contactem para confirmarem esta situação.

Parabéns ao @luuuis e aos restantes pela evolução da Integração.

E como é que reparaste nisso? Só pela diferença do preço por kWh relativamente ao esperado?

Sim. O HA dava-me um valor perto dos -0,01 €/KWh. Logo na primeira fatura recebi a 0,03€/KWh, liguei e confirmaram-me o que referi. Entretanto recebi a 2ª fatura ainda sem ser de acordo com o diagrama de cargas.

Disseram que reuniram com a E-Redes e esperam ter tudo normalizado em breve…

Boa tarde @luuuis ,

Para efeitos de cálculo dos tarifários, esta tabela da ERSE devia ser considerada.
Estou com dúvidas de qual a coluna a aplicar.

Já agora, em relação à Luzboa, aparentemente o SAJ atual é 6,5.

Mais uma vez, obrigado pela partilha do projeto.

Acabei de refazer o modelo trihorario sem a dependência da integração com a ERSE. Se os três modelos forem carregados, pode comparar visualmente os gráficos dos sensores:

  - 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_fora_vazio = -84.2 -%}
            
            {% 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 TAR = TAR_vazio if h.hour < 8 or h.hour > 21 else TAR_fora_vazio -%}
            
              {% 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_fora_vazio = -84.2 -%}

            {% 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 TAR = TAR_vazio if h.hour < 8 or h.hour > 21 else TAR_fora_vazio -%}

              {% 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) }}

Para electricidade em residências será o valor BT (Baixa Tensão) que importa.

@JeffersM porreiro, posso incluir esse sensor no Wiki?

Sim, pode.

Não sei porque é que o formato não foi publicado correctamente neste fórum. Usei ‘’’’ antes e depois do código.

Acabei de mudar da EDP e inscrevi-me na Coopérnico. Mas quando consulto a minha conta e-Redes, aparece Ezurimbol . Alguma ideia de como é que isto funciona? Com a EDP, eu podia enviar leituras para ter uma estimativa do valor da factura do mês. Sabem se isso é possível com a Coopérnico?

EZURIMBOL é o operador, a Coopérnico é um intermediário. No portal da Coopérnico dá para submeter leituras mas como nunca usei não sei se dá uma estimativa como dá a EDP.

1 Curtiu
  1. É preciso usar ` (plicas/backtick) em vez de " (aspas).
  2. A Coopérnico trabalha com a EZURIMBOL para estes contratos, é normal.
  3. Deve conceder permissão à E-Redes para partilhar os diagramas de carga com a Coopérnico (ver instruções em baixo). Caso contrário será usada uma estimativa de diagrama de carga para a leitura feita pela E-Redes (nota: quem tem UPAC não pode enviar leituras).
Instruções acesso diagrama de cargas

Caso ainda não o tenha efetuado, de forma a permitir a faturação com os seus consumos reais horários, por favor autorize o acesso ao seu diagrama de carga (curvas de consumo), no Balcão Digital da E-Redes. Após entrar na sua área de cliente, selecione “Os meus locais” - “Dados do Local” - “Dar acesso a dados” e selecionar opção “Comercializador - Acesso aos Dados de Energia”. No fim, selecionar o(os) local(ais) pretendidos, confirmar o consentimento e carregar em “Submeter”.

1 Curtiu

Obrigado. Autorizei o fornecedor a aceder aos diagramas de carga. O próximo passo é instalar um contador no inversor para actualizar o certificado DGEG para injectar na rede e poder vender o excedente.

Acabei de reparar que, no código que forneci, nunca adicionei a TAR cheias e a TAR de ponta às partes today_hours e tomorrow_hours do código. Para que servem essas partes, se não utilizei essa funcionalidade?

OK, agora percebo onde é que o today_hours e o tomorrow_hours são utilizados no ApexCharts. O que mais me interessava era o preço PM actual.

Também servem (e até é mais interessante) para programar consumos futuros tais como resistências de aquecimento de águas, aquecedores, piscinas, etc.

1 Curtiu

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


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