Obrigado!
Opá… já começa a aborrecer esta história de termos de estar sempre a repetir os sensores para as várias médias. Ainda vou ter de implementar nativamente as médias na integração como têm vindo a pedir.
Obrigado!
Opá… já começa a aborrecer esta história de termos de estar sempre a repetir os sensores para as várias médias. Ainda vou ter de implementar nativamente as médias na integração como têm vindo a pedir.
Devia ser só mudar o nome do sensor no SQL que partilhei acima. Mas como tem estado a 0. Não o fiz ainda.
Não conheço muito de integrações, nem da API do HA. Mas se conseguires fazer a query pelo recorder / long term statistics / algo na API do HA, e expor como um sensor seria o melhor. Ainda vamos descobrir os múltiplos sabores de SQL neste tópico.
Não vi a API do OMIE, mas se der para fazer query para o mês também seria de considerar.
O chato destes sensores SQL, é que uns usam SQLite outros usam Maria, outros PostgreSQL e por ai fora. Eu não lido com SQL há anos, andei aqui á marrada até conseguir alguma coisa. Mas compreendo que nem todos tenham pachorra para isso. Se o SQL ao menos fosse um único para qualquer engine era mais fácil de gerir.
Parabéns @luuuis pelo execelente trabalho com a integração OMIE no Home Assistant.
Partindo da excelente iniciativa do @beloso, e como também utilizo MariaDB fui tentar escavar um pouco e cheguei ao seguinte código, agradeço desde já a quem o queira melhorar, mas penso que o resultado final vai de encontro ao pretendido:
sql:
- name: omie_spot_pt_30_day_rolling_average
unique_id: omie_spot_pt_30_day_rolling_average
query: |-
SELECT FROM_UNIXTIME(stats.thirty_days) AS window_start,
FROM_UNIXTIME(stats.start_of_day) AS window_end,
FROM_UNIXTIME(MIN(start_ts)) AS oldest_measurement,
FROM_UNIXTIME(MAX(start_ts)) AS newest_measurement,
COUNT(*) AS measurement_count,
ROUND(AVG(s.mean), 2) AS mean
FROM statistics s
JOIN statistics_meta m ON s.metadata_id = m.id
CROSS JOIN (
SELECT UNIX_TIMESTAMP(CURDATE() - INTERVAL 30 DAY) AS thirty_days,
UNIX_TIMESTAMP(CURDATE()) AS start_of_day
) AS stats
WHERE statistic_id = 'sensor.omie_spot_price_pt'
AND start_ts >= stats.thirty_days
AND start_ts < stats.start_of_day
column: 'mean'
unit_of_measurement: 'EUR/MWh'
Resultado:
PS: Editei o código para ficar similar aos anteriores
Fiz atualização para a v1.0.0 e fiquei com alguns sensores indisponíveis. Será que me falta fazer mais alguma coisa?
É difícil ajudar só com essa informação.
Os atributos dos sensores mudaram na v1, se os usas nos teus template vais ter de actualizar (conforme os exemplos no wiki).
Foi falta de leitura já estive a ver no teu github.
Assim que poder já vou ver se consigo alterar.
Obrigado
Tenho exatamente esta necessidade para calcular o valor em bihorario. Tenho o ciclo semanal, ou seja, ao fim-de-semana as médias são diferentes. Alguma sugestão de alteração para o ciclo semanal?
Podes usar a integração ERSE e no teu template consultas qual o período actual do utility meter controlado pelo ERSE para depois usar a fórmula correspondente.
ja agora, alguem a usar a integracao da ERSE e a utilizar Luzboa Indexado?
visto que o valor de custo de energia muda, alguma maneira de termos a Omie a popular os custos para a da ERSE?
Bom dia @luuuis , comecei a notar que com a integração OMIE, e usando o teu query SQL (com SQLite), tanto o código omie_spot_pt_month_to_date como o omie_spot_pt_30d deixaram de actualizar a média. Fiz um query à mão e notei que a última medição para fazer a média estava com dia 8 de Maio às 9am. Fazes ideia do que possa ser o problema, e mais alguém tem este problema?
Obrigado!
Não precisavas de correr à mão pois essa info está nos atributos do sensor.
A única coisa que me ocorre é que as estatísticas não estão a ser devidamente gravada desde o dia 8. Terá sido nessa data que actualizaste?
A v1 acarreta uma alteração da unidade dos sensores de EUR/MWh
para €/MWh
e isso deve estar a interferir. Experimenta ir aos Dev Tools e ver se está lá algum erro relativo às unidades, se estiver (vai estar) podes corrigir a unidade das estatísticas com um clique nessa mesma página. Depois reporta aqui sff.
Obrigado @luuuis acho que acertaste em cheio. Vejo que está em EUR/MWh, mas não detecta como erro. Sabes como posso alterar?
Coisa estranha. Os valores do sensor já estão em €/MWh
? E na tabela statistics
qual é o último valor para esse sensor? (aqui sim com SQL manual).
É preciso ver se as statistics estão a ser gravadas e caso não deves ver se não tens erros relativos a isso.
Possivelmente fui pelo caminho mais longo… mas alterei manualmente no statistics_meta a unidade para €/MWh (usando o BD Browser), e já me apareceu depois o fix no Dev Tools Stats, e agora aparece-me bem.
Tenho de ver no entanto se ele actualiza a base de dados, imagino que só depois da meia-noite.
Deixo apenas o update que quando os dados actualizaram às 11pm, as médias voltatam a funcionar. Por isso o @luuuis acertou em cheio que foi a BD a fazer confusão entre os EUR e €, após o upgrade para a v1.
Obrigado @luuuis
boas a todos,
ando aqui numa batalha com os meus graficos sem perceber que raio está a falhar para nao mostrarem os dados.
type: custom:apexcharts-card
card_mod:
style: |
ha-card {
width: 450px;
border: none;
background: transparent
}
experimental:
color_threshold: true
show:
last_updated: true
header:
title: Today's hourly values
standard_format: false
show: true
show_states: true
colorize_states: true
update_interval: 30m
now:
show: true
span:
start: day
graph_span: 24h
all_series_config:
stroke_width: 1
type: line
curve: stepline
group_by:
func: avg
duration: 1h
show:
extremas: true
legend_value: false
series:
- entity: sensor.omie_spot_price_pt
name: Hourly price
float_precision: 2
- entity: sensor.omie_adjustment_price_pt
name: Hourly adjustment
float_precision: 2
yaxis:
- id: price
align_to: 10
apex_config:
legend:
show: false
2º
type: custom:apexcharts-card
card_mod:
style: |
ha-card {
width: 450px;
border: none;
background: transparent
}
experimental:
color_threshold: true
show:
last_updated: true
header:
title: Today's daily average
standard_format: false
show: true
show_states: true
colorize_states: true
update_interval: 30m
now:
show: true
span:
start: day
graph_span: 24h
all_series_config:
stroke_width: 1
type: line
curve: stepline
group_by:
func: avg
duration: 1h
series:
- entity: sensor.omie_spot_price_pt
attribute: day_average
name: Daily price
float_precision: 2
- entity: sensor.omie_adjustment_price_pt
attribute: day_average
name: Daily adjustment
float_precision: 2
yaxis:
- id: price
align_to: 10
apex_config:
legend:
show: false
3º
type: custom:apexcharts-card
card_mod:
style: |
ha-card {
width: 450px;
border: none;
background: transparent
}
experimental:
color_threshold: true
show:
last_updated: true
header:
title: Month to date Values
standard_format: false
show: true
show_states: true
colorize_states: true
update_interval: 30m
span:
start: month
graph_span: 24h
series:
- entity: sensor.omie_spot_pt_month_to_date
resultados de um dos sensores (2º grafico)
Olá @tretabyte , no 2º talvez seja o atributo que julgo ter mudado de nome na V1.
Experimenta alterar as tuas “series” para:
series:
quanto ao 3º, podes partilhar o teu código actual SQL que colocaste para calcular o month to date? Imagino que estejas a usar a SQLite?
era isto mesmo! eu sabia que me tinha falhado alguma coisa algures, obrigado!
quanto ao sql, estou a usar mariaDB e vou buscar aqui:
sql:
- name: omie_spot_pt_month_to_date
unique_id: omie_spot_pt_month_to_date
query: |-
SELECT FROM_UNIXTIME(stats.start_billing_ts) AS window_start,
FROM_UNIXTIME(stats.start_of_day_ts) AS window_end,
FROM_UNIXTIME(MIN(start_ts)) AS oldest_measurement,
FROM_UNIXTIME(MAX(start_ts)) AS newest_measurement,
COUNT(*) AS measurement_count,
ROUND(AVG(s.mean), 2) AS mean
FROM statistics s
JOIN statistics_meta m ON s.metadata_id = m.id
CROSS JOIN (
SELECT UNIX_TIMESTAMP(CASE
WHEN DAY(NOW()) > billing_offset
THEN CONCAT_WS('-', YEAR(NOW()), MONTH(NOW()), billing_offset)
ELSE CONCAT_WS('-', YEAR(NOW() - INTERVAL 1 MONTH), MONTH(NOW() - INTERVAL 1 MONTH), billing_offset)
END) AS start_billing_ts,
UNIX_TIMESTAMP(CURDATE()) AS start_of_day_ts
FROM (
-- ⚠️ ADJUST HERE AS NECESSARY (e.g. 20 to start billing cycle at midnight on day 21):
SELECT 20 AS billing_offset
) cfg
) AS stats
WHERE statistic_id = 'sensor.omie_spot_price_pt'
AND start_ts >= stats.start_billing_ts
AND start_ts < stats.start_of_day_ts;
column: "mean"
unit_of_measurement: "€/MWh"
Óptimo que o 2º gráfico ficou resolvido. Quando ao SQL em MariaDB é “over my head”. Talvez o @Peter consiga ajudar já que fez a adaptação do 30 Day Rolling Average para MariaDB?
Viva @tretabyte,
No terceiro gráfico, experimenta trocar o “span” para o seguinte:
De:
span:
start: month
Para:
span:
start: day
Deves ficar com um gráfico similar a este:
Copyright © 2017-2021. Todos os direitos reservados
CPHA.pt - info@cpha.pt