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