Queres partilhar o teu card q está impecável?
Claro que sim!
Vou estar fora até domingo e isto no telemóvel não dá jeito nenhum.
Quando estiver na minha workstation, faço isso.
Segundo a Coopérnico “A hora apresentada nos gráficos do site do OMIE corresponde ao horário espanhol, sendo que a hora 1 diz respeito ao período das 23:00 às 23:59 hora portuguesa”.
Lá vou eu ter de actualizar isto.
O meu excedente na Energia Simples tem sido pago pelo horário português.
Ou seja, ao valor de Portugal da hora 1, corresponde o excedente (se houvesse) das 00:00 às 00:59 da hora Portuguesa.
Indo para uma hora em que efetivamente há excedente, ao valor de Portugal da hora 12, corresponde o excedente das 11:00 às 11:59 da hora Portuguesa.
Depois de ver esta tua mensagem, fui reconfirmar, e simulei o meu excedente com esse critério da Coopérnico, e os meus valores a receber subiriam e deixavam de corresponder aos que me foram faturados.
Parece-me que cada empresa tem a sua interpretação no que diz respeito ao fuso horario dos valores… (o que não deveria de acontecer)
Ja varri o site de ponta a ponta a tentar identificar o verdadeira periodo que é indicado pela entidade que gere a coisa (OMIE e ERSE) mas… para variar não se encontra nada concreto que não seja prontamente contradito 2 clicks depois.
É um bocado isso. Também tenho pensado em como implementar e chego à conclusão que ia resultar tanto em dores de cabeça para mim, ao implementar e calcular as médias no sensor tendo em conta este aspecto, como para os utilizadores, pois as médias e isso não iriam bater certo com o que está no OMIE.
Se calhar por essa razão e pela diferença ser diminuta (então se forem médias diárias ou mensais) o melhor é deixar como está.
pode-se sempre tentar fazre uma levantamento das empresas e calculos e adicionas uma variavel adicional na configuracao, se for empresa X o fuso horario é A, se for empresa Y escolhe o B.
é so mais trabalho para o teu lado mas se fores um mega perfeccionista…
Só fará diferença a compra ou vende com base horária.
No meu caso vendo com base horária, mas a interpretação que a empresa faz é a mesma que a minha, por isso tudo ok.
Peço desculpa pela demora.
Aqui vai o cartão, mas tem em atenção que eu de facto não percebo muito disto e ando numa de tentativa/erro, pelo que o código não estará certamente “limpo”.
Já agora, aceito e agradeço algumas dicas.
type: custom:button-card
styles:
card:
- height: 750px
- width: 550px
- background: transparent
- border: none
- border-radius: 10px
grid:
- position: relative
custom_fields:
spot_d:
- position: absolute
- top: 5%
- left: 30%
amanha:
- position: absolute
- top: 45%
- left: 75%
media_d:
- position: absolute
- top: 45%
- left: 10%
delta:
- position: absolute
- left: 75%
- top: 40%
hourly:
- position: absolute
- top: 65%
- left: 2%
custom_fields:
spot_d:
card:
type: custom:button-card
entity: sensor.omie_spot_price_pt
show_units: false
show_icon: false
name: SPOT
label: €/MWh
show_label: true
show_state: true
styles:
card:
- background: transparent
- border-radius: 50%
- aspect-ratio: 1/1
- height: 250px
- border: none
- box-shadow: |
[[[
var prec=states['sensor.omie_spot_price_pt'].state
if (prec >= 180) return '0px 0px 60px green';
else if (prec >= 140) return '0px 0px 60px #FFFF00';
else if (prec >= 100) return '0px 0px 60px #FFC000';
else if (prec >= 60) return '0px 0px 60px #FA7000';
else return '0px 0px 60px rgb(247,13,26)';
]]]
state:
- padding-top: 40px
- font-size: 36px
name:
- padding-top: 85px
- font-size: 46px
- color: |
[[[
var prec=states['sensor.omie_spot_price_pt'].state
if (prec >= 180) return 'green';
else if (prec >= 140) return '#FFFF00';
else if (prec >= 100) return '#FFC000';
else if (prec >= 60) return '#FA7000';
else return 'rgb(247,13,26)';
]]]
label:
- font-size: 15px
- padding-top: 0px
amanha:
card:
type: custom:button-card
position: absolute
entity: sensor.omie_spot_price_pt.attributes.day_average
attribute: day_average
label: |
[[[
return states['sensor.omie_spot_price_pt_tomorrow'].attributes.day_average
]]]
show_units: false
show_icon: false
name: AMANHÃ
show_label: true
show_state: false
styles:
card:
- background: transparent
- border-radius: 50%
- aspect-ratio: 1/1
- height: 100px
- border: none
- box-shadow: |
[[[
var prec=states['sensor.omie_spot_price_pt'].state
if (prec >= 180) return '0px 0px 10px green';
else if (prec >= 140) return '0px 0px 10px #FFFF00';
else if (prec >= 100) return '0px 0px 10px #FFC000';
else if (prec >= 60) return '0px 0px 10px #FA7000';
else return '0px 0px 10px rgb(247,13,26)';
]]]
- animation: |
[[[
var ajusteam=states['sensor.omie_adjustment_price_pt_tomorrow'].attributes.day_average
if (ajusteam > 0) return 'blink 2s infinite';
else return 'none'
]]]
name:
- padding-bottom: 6px
- padding-right: 2px
- font-size: 18px
- color: |
[[[
var prec=states['sensor.omie_spot_price_pt'].state
if (prec >= 180) return 'green';
else if (prec >= 140) return '#FFFF00';
else if (prec >= 100) return '#FFC000';
else if (prec >= 60) return '#FA7000';
else return 'rgb(247,13,26)';
]]]
label:
- font-size: 18px
- padding-top: px
- position: absolute
- bottom: 54%
grid:
- position: relative
custom_fields:
unit:
- position: absolute
- top: 73%
- left: 30.5%
- font-size: 11px
custom_fields:
unit: €/MWh
media_d:
card:
type: custom:button-card
position: absolute
entity: sensor.omie_spot_price_pt.attributes.day_average
attribute: day_average
label: |
[[[
return states['sensor.omie_spot_price_pt'].attributes.day_average
]]]
show_units: false
show_icon: false
name: MÉDIA
show_label: true
show_state: false
styles:
card:
- background: transparent
- border-radius: 50%
- aspect-ratio: 1/1
- height: 100px
- border: none
- box-shadow: |
[[[
var prec=states['sensor.omie_spot_price_pt'].state
if (prec >= 180) return '0px 0px 10px green';
else if (prec >= 140) return '0px 0px 10px #FFFF00';
else if (prec >= 100) return '0px 0px 10px #FFC000';
else if (prec >= 60) return '0px 0px 10px #FA7000';
else return '0px 0px 10px rgb(247,13,26)';
]]]
- animation: |
[[[
var ajuste=states['sensor.omie_adjustment_price_pt'].attributes.day_average
if (ajuste > 0) return 'blink 2s ease-in-out infinite';
else return 'none'
]]]
name:
- padding-bottom: 6px
- font-size: 18px
- color: |
[[[
var prec=states['sensor.omie_spot_price_pt'].state
if (prec >= 180) return 'green';
else if (prec >= 140) return '#FFFF00';
else if (prec >= 100) return '#FFC000';
else if (prec >= 60) return '#FA7000';
else return 'rgb(247,13,26)';
]]]
label:
- font-size: 18px
- padding-top: px
- position: absolute
- bottom: 54%
grid:
- position: relative
custom_fields:
unit:
- position: absolute
- top: 73%
- left: 31%
- font-size: 11px
custom_fields:
unit: €/MWh
delta:
card:
type: custom:button-card
layout: icon_state
entity: sensor.omie_delta
show_name: false
show_state: true
icon: |
[[[
var delta=states['sensor.omie_delta'].state;
if (delta <0) return 'mdi:arrow-down-bold-outline';
if (delta >0) return 'mdi:arrow-up-bold-outline';
else return 'mdi:arrow-right-bold-outline'
]]]
styles:
card:
- border: none
- background: transparent
- width: 90px
state:
- font-size: 14px
icon:
- color: |
[[[
var delta=states['sensor.omie_delta'].state;
if (delta <0) return 'rgb(247,13,26)';
if (delta >0) return 'green';
else return 'orange';
]]]
- aspect-ratio: 1/1
- width: 25px
- padding-bottom: 2px
hourly:
card:
type: custom:apexcharts-card
card_mod:
style: |
ha-card {
width: 550px;
border: none;
background: transparent
}
update_interval: 10m
now:
show: true
span:
end: day
graph_span: 24h
series:
- entity: sensor.omie_spot_price_pt
name: Hourly price
yaxis_id: price
stroke_width: 1
type: column
color: '#FA7000'
group_by:
func: last
duration: 1h
show:
extremas: true
legend_value: true
data_generator: >
return ((hs) => hs.map((price, hour) => [ new Date(new
Date().setHours(hour, 0, 0, 0)), price
]))(entity.attributes.day_hours)
- entity: sensor.2_2_2_geral_channel_1_energy_returned
name: Injeção
yaxis_id: injeção
type: line
stroke_width: 3
group_by:
fill: zero
func: diff
duration: 1h
start_with_last: false
color: green
yaxis:
- id: injeção
max: 9
opposite: true
show: true
decimals: 2
apex_config:
forceNiceScale: 'yes'
labels:
show: true
style:
colors: '#ffffff'
fontSize: 10px
offsetX: 0
offsetY: 0
axisBorder:
show: false
color: '#78909C'
- id: price
show: true
decimals: 1
apex_config:
forceNiceScale: 'yes'
labels:
show: true
formatter: |
EVAL:function(value) {
let text = parseFloat(value).toFixed(2);
let result = "€" +text.replace(".", ",");
return result;
}
style:
colors: '#ffffff'
fontSize: 10px
offsetX: 0
offsetY: 0
axisBorder:
show: false
color: '#78909C'
apex_config:
tooltip:
enabled: true
shared: true
followCursor: false
intersect: false
inverseOrder: false
fillSeriesColor: true
theme: false
onDatasetHover:
highlightDataSeries: false
x:
show: false
legend:
show: false
position: top
annotations:
position: back
chart:
height: 250
type: bar
grid:
show: true
strokeDashArray: '0'
borderColor: '#666666'
Assinei contrato de fornecimento de energia elétrica na passada sexta-feira com a Copérnico e não fazia ideia disso, o que faz até alguma diferença visto que há horários em que o consumo, num contrato indexado, fica a negativo com as Tarifas de Acesso às Redes. Ou seja, estão a pagar-me para eu consumir.
Alguém me sabe dizer como posso chamar o último valor do ‘sensor.omie_spot_price_pt’ para criar sensores template?
Até já tinha criado automações para ligar A/C e aquecimento de águas!
Estava bem enganado!!
Obrigado!
Viva,
Impecável, obg.
Que sensor é este: sensor.omie_delta ?
E este sensor - sensor.2_2_2_geral_channel_1_energy_returned - tb é teu de produção de energia, certo?
obg
Boas
sensor.omie_delta criei, para apresentar a variação da média diária.
sensor:
- platform: template
sensors:
omie_delta:
friendly_name: 'Variação Omie'
value_template: "{{ (((state_attr('sensor.omie_spot_price_pt_tomorrow', 'day_average') / state_attr('sensor.omie_spot_price_pt', 'day_average')) -1) * 100) | round(2) }}"
unit_of_measurement: '%'
o ‘sensor.2_2_2_geral_channel_1_energy_returned’ foi criado pelo shelly, mede a injeção na rede.
Desculpem chatear, mas quando faço paste do código, aparece a informação: “Custom element doesn’t exist: button-card.” O que me falta?
Temo que estejamos a ir um pouco off-topic!
Ainda assim, tens a integração do custom button card instalada?https://github.com/custom-cards/button-card
Não, deve ser isso! Muito obrigado e obrigado pelo cartão! Muito fixe!
Deves agradecer é a quem desenvolveu a integração do OMIE (luuuis). Está EXCELENTE!
De resto, aprendes a brincar com o ‘button-card’ e o limite é (quase) a imaginação!
Sim, sem dúvida, a integração está TOP! E depois o trabalho de equipa complementa! Muito obrigado à comunidade!
Peço desculpa por abusar, mas este código é para colocar no configuration.yaml?
Sim, podes colocar no configuration.yaml.
Alguém tem interesse em ter sensores para os outros dados do mercado Spot, como por exemplo fluxos de energia entre PT e ES, total de energia comercializado?