Temperatura max e min com data/hora

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?

1 Curtiu

Copyright © 2017-. Todos os direitos reservados
CPHA.pt - info@cpha.pt


FAQ | Termos de Serviço/Regras | Política de Privacidade