Boas.
Mais uma vez agradeço a tua integração, que tenho como base para algumas coisas (antes usava scrape)
Não sei qual a base de funcionamento, mas estava aqui a tentar implementar a média mensal (tenho 2 hipoteses, ou desde o início do mês até ao fim do mês, ou dos últimos 30 dias (que no fundo acho que é melhor e dá mais versatilidade).
Tentei fazer através de um template trigger, mas infelizmente, e pelo que já li, não é possível em templates de yaml guardar uma lista como estado para um sensor, acaba por ser guardado como string, o que é muito estranho mas já vi explicações no fórum (https://community.home-assistant.io/t/list-of-mappings-in-a-template-sensor-attribute-templates/227821/2). Explico:
Fiz este teste para guardar uma lista de valores, só para ver como se comportava:
- platform: template
- trigger:
- platform: time_pattern
hours: 00
minutes: 00
seconds: 15
sensor:
- name: "omie_historico_spot_media_30d"
unique_id: historico_omie_spot_30d
# unit_of_measurement: 'EUR/kWh'
## {{ [0.0964,0.04994,0.07878,0.1009,0.11523,0.11354,0.09947,0.07827,0.03549,0.02177,0.05086,0.06688,0.0389,0.05254,0.07557,0.08662,0.10105,0.09844,0.10475,0.05986,0.0624,0.01617,0.03399,0.072,0.072,0.072,0.072,0.072,0.072,0.072] }}
## {{ [(states('sensor.omie_spot_price_pt')|float/1000)|round(4)] + states('sensor.omie_historico_spot_media_30d')[:-1] }}
state: >-
{{ [0.0964,0.04994,0.07878,0.1009,0.11523,0.11354,0.09947,0.07827,0.03549,0.02177,0.05086,0.06688,0.0389,0.05254,0.07557,0.08662,0.10105,0.09844,0.10475,0.05986,0.0624,0.01617,0.03399,0.072,0.072,0.072,0.072,0.072,0.072,0.072] }}
Até parece que funciona:
Mas de facto, apesar do template de teste dizer que retorna uma lista (acima), retorna uma string:
(se tento sacar o rimeiro elemento da lista, o primeiro elemento da string é o ‘[’ que me retorna correctamente, se interpretado como string, mas erradamente se fosse uma lista).
Portanto a minha ideia fica aqui um pouco “bloqueada”. Está também explicado no posta acima que isto é possível, quase com o mesmo código, em python. Sinceramente, não sei como lá chegar.
A minha ideia depois seria, no início de cada dia, adicionar o valor da media desse dia à lista (que se sabe no dia anterior), tirando o mais antigo da lista (expliquei acima como estava a pensar fazer):
{%- set lista_anterior = [0,1,2,3,4,5,6,7,8,9,10] -%}
{%- set novo_valor = 5.44 %}
{%- set listafinal = [novo_valor] + lista_anterior[:-1] %}
{{lista_final}}
ou simplesmente, e aplicando o teu sensor:
{{ (state_attr('sensor.omie_spot_price_pt','day_average')/1000) + states(this.entity_id)[:-1]}}
Pelo que venho aqui perguntar se, da mesma forma que consegues obter os dados diários, também conseguirias obter uma média diária?
Hipóteses:
- Indo buscar, de alguma forma o valor ao site, como fazes para os valores diários (não sei fazer)
- Guardando os últimos 30 valores num atributo, de forma que expliquei ou parecida (também não sei fazer). Esta última abordagem permitiria calcular por 30 dias ou até ao dia que se quisesse (por exemplo, se estamos a dia 24, depois seria só calcular a média dos primeiros 24 valores).
- Usar os dados do HA de "long-term-statistics? Como??? Não sei… Li algures “If you want to retrieve the LTS values from the database for use with other cards you will have to create an SQL sensor.”. Já tentei e não consigo, se houvesse esta hipótese também não era mau…
EDIT: já consigo obter a média total por SQL:
SELECT mean
FROM "statistics"
WHERE metadata_id = (SELECT id FROM "statistics_meta" WHERE statistic_id = 'sensor.omie_spot_price_pt')
Alguém ajuda a limitar isto a 30 dias?
Obrigado mais uma vez e, olha, se conseguires, muito bem , se não terei de arranjar outra forma. Não queria adicionar mais base de dados nenhuma ao HA, mas não excluo a hipotese.