Olá a todos, como tenho sensores de temperatura no exterior, seria interessante saber quis os extremos do ano, do mês ou desde que tenho registos… No entanto, não vejo maneira simples de o fazer no HA.
Com um statistic card é fácil mostrar o valor do sensor para o período que quisermos, mas ficamos sem saber quando ocorreu.
Por enquanto, só consegui usando sql, tendo criado um package sql_extremos.yaml com o seguinte:
sql:
- name: "Temp Maxima Anual"
db_url: !secret mariadb_url
query: >
SELECT ROUND(s.max, 2) as state, s.start_ts as data_ts
FROM statistics s
JOIN statistics_meta m ON s.metadata_id = m.id
WHERE m.statistic_id = 'sensor.temperatura_exterior'
AND s.start_ts >= UNIX_TIMESTAMP(DATE_FORMAT(NOW() ,'%Y-01-01'))
ORDER BY s.max DESC
LIMIT 1;
column: "state"
unit_of_measurement: "°C"
- name: "Temp Minima Anual"
db_url: !secret mariadb_url
query: >
SELECT ROUND(s.max, 2) as state, s.start_ts as data_ts
FROM statistics s
JOIN statistics_meta m ON s.metadata_id = m.id
WHERE m.statistic_id = 'sensor.temperatura_exterior'
AND s.start_ts >= UNIX_TIMESTAMP(DATE_FORMAT(NOW() ,'%Y-01-01'))
ORDER BY s.max ASC
LIMIT 1;
column: "state"
unit_of_measurement: "°C"
- name: "Temp Maxima Global"
db_url: !secret mariadb_url
query: >
SELECT ROUND(s.max, 2) as state, s.start_ts as data_ts
FROM statistics s
JOIN statistics_meta m ON s.metadata_id = m.id
WHERE m.statistic_id = 'sensor.temperatura_exterior'
ORDER BY s.max DESC
LIMIT 1;
column: "state"
unit_of_measurement: "°C"
- name: "Temp Minima Global"
db_url: !secret mariadb_url
query: >
SELECT ROUND(s.max, 2) as state, s.start_ts as data_ts
FROM statistics s
JOIN statistics_meta m ON s.metadata_id = m.id
WHERE m.statistic_id = 'sensor.temperatura_exterior'
ORDER BY s.max ASC
LIMIT 1;
column: "state"
unit_of_measurement: "°C"
template:
- sensor:
- name: "Data Hora Maxima Anual"
state: >
{% set ts = state_attr('sensor.temp_maxima_anual', 'data_ts') %}
{{ ts | timestamp_custom('%d/%m/%Y às %H:%M') if ts else 'Sem dados' }}
- name: "Data Hora Minima Anual"
state: >
{% set ts = state_attr('sensor.temp_minima_anual', 'data_ts') %}
{{ ts | timestamp_custom('%d/%m/%Y às %H:%M') if ts else 'Sem dados' }}
- name: "Data Hora Maxima Global"
state: >
{% set ts = state_attr('sensor.temp_maxima_global', 'data_ts') %}
{{ ts | timestamp_custom('%d/%m/%Y às %H:%M') if ts else 'Sem dados' }}
- name: "Data Hora Minima Global"
state: >
{% set ts = state_attr('sensor.temp_minima_global', 'data_ts') %}
{{ ts | timestamp_custom('%d/%m/%Y às %H:%M') if ts else 'Sem dados' }}
E mostro os resultados num Mushroom Card:
type: custom:mushroom-template-card
primary: "Máxima: {{ states('sensor.temp_maxima_anual') | float | round(2) }}°C"
secondary: "Ocorreu em: {{ states('sensor.data_hora_maxima_anual') }}"
icon: mdi:thermometer-chevron-up
entity: sensor.temp_maxima_anual
tap_action:
action: more-info
color: red
features_position: bottom
grid_options:
columns: 12
rows: 1
Resultado:
Será mesmo a única maneira de o conseguir?
Já alguém o fez de outra maneira mais simples?
