Tutorial Sensori

Previsione Meteo in Home Assistant: Template Sensor e Automazioni Barometriche

avatar di max novadi

Max Novadi

Pubblicato 14 Ottobre 2025

Schermo Pc con sensori Barometrici vari

Serie: Previsione Meteo con Home Assistant - Parte 3 di 4

Previsione Meteo in Home Assistant: Template Sensor e Automazioni Barometriche

Serie Completa

  1. Fondamenti del Trend Barometrico: Teoria meteorologica e standard WMO
  2. Sensori SQL per Dati Storici: Recupero automatico di pressioni passate
  3. Template Sensor e Automazioni ← Sei qui
  4. Integrazione AI con Google Gemini: Trasforma Home Assistant in Stazione Meteo Ai

Introduzione

Dopo aver esplorato i fondamenti teorici del trend barometrico nella prima parte della serie e implementato i sensori SQL per il recupero dei dati storici nella seconda, è giunto il momento di mettere in pratica queste conoscenze attraverso template sensor avanzati e automazioni intelligenti.

In questo articolo approfondiremo la creazione di sensori template che calcolano automaticamente le tendenze barometriche seguendo gli standard WMO (World Meteorological Organization), implementeremo sistemi di allerta meteo e svilupperemo automazioni pratiche che rendono la vostra casa intelligente realmente reattiva alle condizioni atmosferiche.

L'approccio presentato consente di trasformare dati grezzi di pressione atmosferica in informazioni actionable, permettendo a Home Assistant di anticipare cambiamenti meteorologici e reagire di conseguenza, migliorando comfort, sicurezza ed efficienza energetica della vostra abitazione.

Obiettivi e Prerequisiti

Cosa Imparerai

Al termine di questo articolo sarai in grado di:

  • Creare template sensor avanzati per il calcolo dei trend barometrici
  • Implementare la classificazione WMO delle variazioni di pressione
  • Calcolare l'accelerazione barometrica per previsioni più precise
  • Sviluppare automazioni weather-aware per dispositivi smart
  • Progettare dashboard informative per il monitoraggio meteo
  • Gestire correttamente errori e fallback nei template

Prerequisiti Tecnici

Conoscenze richieste

  • Familiarità con la configurazione YAML di Home Assistant
  • Comprensione base dei Jinja2 template
  • Conoscenze acquisite negli articoli precedenti della serie

Setup necessario

  • Home Assistant Core 2023.1 o successivo
  • Sensori SQL storici implementati (vedi Articolo 2)
  • Sensore di pressione atmosferica configurato
  • Recorder configurato con retention minima di 24 ore

Dispositivi opzionali per automazioni

  • Finestre/tende motorizzate
  • Sistema di irrigazione smart
  • Dispositivi di notifica (mobile, speaker, ecc.)

Difficoltà

Intermedio-Avanzato

Tempo implementazione

45-60 minuti

Tempo lettura

~15 minuti

Architettura dei Template Sensor

Panoramica del Sistema

Il sistema di analisi barometrica che andremo a costruire si articola su tre livelli gerarchici:

Livello 1 - Dati Storici

Già implementato nell'Articolo 2. Sensori SQL che recuperano valori di pressione a 1h, 2h, 3h nel passato. Forniscono la base temporale per i calcoli.

Livello 2 - Calcolo Trend

Focus di questa sezione. Template sensor che calcolano le variazioni di pressione, classificazione secondo standard WMO, calcolo dell'accelerazione barometrica.

Livello 3 - Interpretazione e Azione

Sensori binari di allerta, generazione previsioni human-readable, trigger per automazioni.

Questa architettura modulare garantisce manutenibilità, debugging facilitato e possibilità di estensione futura.

Vantaggi dell'Approccio Template

L'utilizzo di template sensor offre diversi vantaggi rispetto a soluzioni alternative:

Performance: I template vengono valutati on-demand o al cambiamento delle entità tracciate, minimizzando il carico computazionale rispetto a polling continui.

Flessibilità: La logica Jinja2 permette condizionali complesse, calcoli matematici avanzati e formattazione personalizzata senza necessità di componenti custom.

Manutenibilità: Tutto il codice risiede nella configurazione YAML, facilitando versioning, backup e modifiche senza restart completi del sistema.

Debugging: Gli attributi dei sensori possono includere valori intermedi e diagnostici, semplificando l'identificazione di problemi.

Template Sensor: Tendenza Barometrica 3 Ore

Implementazione Base

Il sensore di tendenza barometrica a 3 ore rappresenta il core del sistema predittivo. Secondo gli standard WMO, un intervallo di 3 ore offre il miglior compromesso tra reattività e stabilità delle previsioni.

# configuration.yaml o packages/barometric_trend.yaml

template:
  - sensor:
      # ========================================
      # TENDENZA BAROMETRICA 3H (Standard WMO)
      # ========================================
      - name: "Tendenza Barometrica 3h"
        unique_id: barometric_trend_3h
        unit_of_measurement: "hPa"
        device_class: atmospheric_pressure
        state_class: measurement
        state: >
          {% set current = states('sensor.pressione_attuale') | float(0) %}
          {% set h3_ago = states('sensor.pressione_3h_fa') | float(0) %}
          {% if current > 0 and h3_ago > 0 %}
            {{ (current - h3_ago) | round(2) }}
          {% else %}
            {{ states('sensor.tendenza_barometrica_3h') }}
          {% endif %}

Analisi del codice

Il template calcola la differenza tra la pressione corrente e quella di 3 ore fa. La condizione if gestisce casi edge in cui i sensori potrebbero restituire valori nulli o non validi, mantenendo l'ultimo valore noto invece di generare errori.

La funzione float(0) converte stringhe in numeri decimali, usando 0 come default in caso di fallimento della conversione. Questo approccio defensive programming previene exception che causerebbero il crash del sensore.

Il round(2) limita la precisione a due decimali, sufficiente per scopi meteorologici e per ridurre il rumore da fluttuazioni minime.

Attributi Avanzati: Classificazione WMO

Gli attributi del sensore arricchiscono il valore numerico con informazioni qualitative e previsioni:

        attributes:
          classificazione: >
            {% set trend = states('sensor.tendenza_barometrica_3h') | float(0) %}
            {% if trend > 6 %}Aumento molto rapido
            {% elif trend > 3.5 %}Aumento rapido
            {% elif trend > 1.5 %}Aumento moderato
            {% elif trend > 0.1 %}Aumento lento
            {% elif trend > -0.1 %}Stabile
            {% elif trend > -1.5 %}Calo lento
            {% elif trend > -3.5 %}Calo moderato
            {% elif trend > -6 %}Calo rapido
            {% else %}Calo molto rapido
            {% endif %}
          
          previsione_tempo: >
            {% set trend = states('sensor.tendenza_barometrica_3h') | float(0) %}
            {% set current = states('sensor.pressione_attuale') | float(1013) %}
            {% if trend > 6 %}
              Miglioramento marcato. Possibili venti forti. Cielo sereno nelle prossime 6-12 ore.
            {% elif trend > 3.5 %}
              Rapido miglioramento. Schiarite entro 6 ore. Possibile ventilazione sostenuta.
            {% elif trend > 1.5 %}
              Miglioramento graduale. Tempo stabile nelle prossime 12-24 ore.
            {% elif trend > -1.5 %}
              Condizioni stabili. Nessun cambiamento significativo previsto.
            {% elif trend > -3.5 %}
              Possibile peggioramento entro 12-24 ore. Monitorare l'evoluzione.
            {% elif trend > -6 %}
              Probabile arrivo precipitazioni entro 6-12 ore. Preparare precauzioni.
            {% else %}
              ALLERTA: Possibile tempesta o forte perturbazione imminente (3-6 ore).
            {% endif %}
          
          codice_wmo: >
            {% set trend = states('sensor.tendenza_barometrica_3h') | float(0) %}
            {% set current = states('sensor.pressione_attuale') | float(0) %}
            {% set h3_ago = states('sensor.pressione_3h_fa') | float(0) %}
            {% if current > h3_ago %}
              {% if trend > 3.5 %}3
              {% elif trend > 1.5 %}2
              {% else %}1
              {% endif %}
            {% elif current == h3_ago %}4
            {% else %}
              {% if trend < -6 %}8
              {% elif trend < -3.5 %}7
              {% else %}6
              {% endif %}
            {% endif %}
          
          affidabilita: >
            {% set current = states('sensor.pressione_attuale') | float(0) %}
            {% set h3_ago = states('sensor.pressione_3h_fa') | float(0) %}
            {% if current == 0 or h3_ago == 0 %}Dati non disponibili
            {% elif (now() - states.sensor.pressione_3h_fa.last_updated).seconds > 14400 %}Dati storici obsoleti
            {% else %}Affidabile
            {% endif %}

Dettagli implementativi

  • classificazione: Traduce il valore numerico in una descrizione testuale secondo la scala WMO
  • previsione_tempo: Genera previsioni contestualizzate basate sia sul trend che sulla pressione assoluta
  • codice_wmo: Implementa il sistema di codifica numerica WMO (codici 1-8) per compatibilità con standard internazionali
  • affidabilita: Valuta la qualità dei dati, segnalando problemi con i sensori sottostanti

L'attributo affidabilita è particolarmente importante: verifica che i sensori storici forniscano dati recenti e validi. Se il sensore pressione_3h_fa non si aggiorna da più di 4 ore (14400 secondi), qualcosa non funziona nella catena di acquisizione dati.

Template Sensor: Tendenza Barometrica 1 Ora

Rationale e Utilizzo

Mentre il sensore a 3 ore fornisce previsioni stabili e affidabili, un sensore a 1 ora offre maggiore reattività per situazioni rapidamente evolutive. È particolarmente utile per:

  • Allerte vento forte: Variazioni rapide spesso precedono raffiche intense
  • Situazioni convettive: Temporali estivi possono svilupparsi in meno di 2 ore
  • Fine-tuning automazioni: Trigger più granulari per azioni immediate

Implementazione

      - name: "Tendenza Barometrica 1h"
        unique_id: barometric_trend_1h
        unit_of_measurement: "hPa/h"
        device_class: atmospheric_pressure
        state_class: measurement
        state: >
          {% set current = states('sensor.pressione_attuale') | float(0) %}
          {% set h1_ago = states('sensor.pressione_1h_fa') | float(0) %}
          {% if current > 0 and h1_ago > 0 %}
            {{ (current - h1_ago) | round(2) }}
          {% else %}
            {{ states('sensor.tendenza_barometrica_1h') }}
          {% endif %}
        attributes:
          tasso_orario: >
            {{ states('sensor.tendenza_barometrica_1h') | float(0) | round(1) }}
          
          previsione_vento: >
            {% set rate = states('sensor.tendenza_barometrica_1h') | float(0) | abs %}
            {% if rate >= 3 %}
              ALLERTA: Possibile burrasca oltre Forza 8 Beaufort (>75 km/h)
            {% elif rate >= 2 %}
              ATTENZIONE: Vento forte probabile, Forza 7-8 Beaufort (50-75 km/h)
            {% elif rate >= 1 %}
              Vento moderato previsto, Forza 6 Beaufort (40-50 km/h)
            {% elif rate >= 0.5 %}
              Possibile ventilazione leggera, Forza 4-5 Beaufort
            {% else %}
              Vento assente o debole
            {% endif %}
          
          urgenza_azione: >
            {% set rate = states('sensor.tendenza_barometrica_1h') | float(0) | abs %}
            {% if rate >= 3 %}Immediata (entro 30 min)
            {% elif rate >= 2 %}Alta (entro 1 ora)
            {% elif rate >= 1 %}Media (entro 2-3 ore)
            {% else %}Bassa (monitoraggio)
            {% endif %}

Note implementative

L'unità di misura diventa hPa/h per enfatizzare che si tratta di una variazione oraria, non trihoraria. Questo aiuta a distinguere i due sensori nei log e nelle dashboard.

L'attributo previsione_vento si basa sul principio meteorologico che variazioni rapide di pressione generano gradienti baroclinici, causando vento. La correlazione non è perfetta (dipende anche da geografia, stagione, umidità) ma rappresenta una buona euristica.

L'attributo urgenza_azione fornisce una guida temporale per le automazioni: quanto velocemente reagire al trend rilevato.

Sensore Avanzato: Accelerazione Barometrica

Concetto Meteorologico

L'accelerazione barometrica misura quanto velocemente sta cambiando il trend stesso. Non è semplicemente la variazione di pressione, ma la variazione della variazione - matematicamente, la derivata seconda.

Interpretazione fisica

  • Accelerazione negativa: Il calo di pressione sta accelerando → il maltempo sta peggiorando più rapidamente
  • Accelerazione positiva: L'aumento di pressione sta accelerando → il miglioramento sta procedendo più rapidamente
  • Accelerazione vicina a zero: Il trend è costante → situazione prevedibile

Questo parametro è particolarmente utile per identificare "gomiti" nelle curve di pressione, spesso associati a fronti meteorologici.

Implementazione Matematica

      - name: "Accelerazione Barometrica"
        unique_id: barometric_acceleration
        unit_of_measurement: "hPa/h²"
        state_class: measurement
        state: >
          {% set current = states('sensor.pressione_attuale') | float(0) %}
          {% set h1 = states('sensor.pressione_1h_fa') | float(0) %}
          {% set h2 = states('sensor.pressione_2h_fa') | float(0) %}
          {% if current > 0 and h1 > 0 and h2 > 0 %}
            {% set cambio_recente = current - h1 %}
            {% set cambio_precedente = h1 - h2 %}
            {{ (cambio_recente - cambio_precedente) | round(3) }}
          {% else %}
            {{ states('sensor.accelerazione_barometrica') }}
          {% endif %}
        attributes:
          status_trend: >
            {% set accel = states('sensor.accelerazione_barometrica') | float(0) %}
            {% if accel < -2 %}Peggioramento in rapida accelerazione
            {% elif accel < -0.5 %}Peggioramento graduale
            {% elif accel > 2 %}Miglioramento in rapida accelerazione
            {% elif accel > 0.5 %}Miglioramento graduale
            {% else %}Trend stabile
            {% endif %}
          
          interpretazione: >
            {% set accel = states('sensor.accelerazione_barometrica') | float(0) %}
            {% if accel | abs > 2 %}
              Il cambiamento meteo sta accelerando significativamente. 
              Monitorare attentamente l'evoluzione nelle prossime ore.
            {% elif accel | abs > 0.5 %}
              Cambiamento meteo in corso con trend regolare.
            {% else %}
              Situazione stabile senza accelerazioni significative.
            {% endif %}
          
          grafico_trend: >
            {% set t3h = states('sensor.tendenza_barometrica_3h') | float(0) %}
            {% set t1h = states('sensor.tendenza_barometrica_1h') | float(0) %}
            {% set accel = states('sensor.accelerazione_barometrica') | float(0) %}
            Trend 3h: {{ t3h | round(1) }} hPa | 
            Trend 1h: {{ t1h | round(1) }} hPa/h | 
            Accel: {{ accel | round(2) }} hPa/h²

Spiegazione del calcolo

Accelerazione = (Δ recente) - (Δ precedente)

= (P_ora - P_1h_fa) - (P_1h_fa - P_2h_fa)

= P_ora - 2×P_1h_fa + P_2h_fa

Questo è l'equivalente discreto della derivata seconda in calcolo differenziale.

Sensori di Visualizzazione e Dashboard

Indicatore Visivo del Trend

Per dashboard intuitive, è utile avere rappresentazioni grafiche immediate:

      - name: "Trend Barometrico Visivo"
        unique_id: barometric_trend_visual
        state: >
          {% set trend_3h = states('sensor.tendenza_barometrica_3h') | float(0) %}
          {% if trend_3h > 3.5 %}⬆️⬆️
          {% elif trend_3h > 1.5 %}⬆️
          {% elif trend_3h > 0.1 %}↗️
          {% elif trend_3h > -0.1 %}➡️
          {% elif trend_3h > -1.5 %}↘️
          {% elif trend_3h > -3.5 %}⬇️
          {% else %}⬇️⬇️
          {% endif %}
        attributes:
          barra_grafica: >
            {% set trend_3h = states('sensor.tendenza_barometrica_3h') | float(0) %}
            {% set bars = ((trend_3h / 2) | round(0) | int) %}
            {% if bars > 0 %}
              {{ '▮' * bars }} ↑ ({{ trend_3h | round(1) }} hPa)
            {% elif bars < 0 %}
              {{ '▮' * (bars | abs) }} ↓ ({{ trend_3h | round(1) }} hPa)
            {% else %}
              ━ ({{ trend_3h | round(1) }} hPa)
            {% endif %}
          
          colore_suggerito: >
            {% set trend_3h = states('sensor.tendenza_barometrica_3h') | float(0) %}
            {% if trend_3h > 3.5 %}green
            {% elif trend_3h > 1.5 %}lightgreen
            {% elif trend_3h < -3.5 %}red
            {% elif trend_3h < -1.5 %}orange
            {% else %}gray
            {% endif %}

Questo sensore può essere utilizzato in Markdown card o custom cards per visualizzazioni immediate senza bisogno di grafici complessi.

Sensori Binari di Allerta

Rilevamento Rischio Tempesta

I binary sensor sono ideali per trigger di automazioni perché hanno stati chiari (on/off) e generano eventi su cambiamento stato:

  - binary_sensor:
      - name: "Allerta Tempesta Barometrica"
        unique_id: storm_alert_barometric
        device_class: safety
        state: >
          {% set trend_3h = states('sensor.tendenza_barometrica_3h') | float(0) %}
          {% set trend_1h = states('sensor.tendenza_barometrica_1h') | float(0) %}
          {% set accel = states('sensor.accelerazione_barometrica') | float(0) %}
          {{ trend_3h < -6 or trend_1h < -3 or accel < -2 }}
        attributes:
          livello_allerta: >
            {% set trend_3h = states('sensor.tendenza_barometrica_3h') | float(0) %}
            {% if trend_3h < -8 %}Critico
            {% elif trend_3h < -6 %}Alto
            {% elif trend_3h < -4 %}Medio
            {% else %}Basso
            {% endif %}
          
          probabilita_tempesta: >
            {% set trend_3h = states('sensor.tendenza_barometrica_3h') | float(0) %}
            {% if trend_3h < -8 %}Molto alta (>90%)
            {% elif trend_3h < -6 %}Alta (70-90%)
            {% elif trend_3h < -4 %}Media (40-70%)
            {% else %}Bassa (<40%)
            {% endif %}
          
          tempo_previsto_arrivo: >
            {% set trend_1h = states('sensor.tendenza_barometrica_1h') | float(0) %}
            {% if trend_1h < -3 %}Entro 1-3 ore
            {% elif trend_1h < -2 %}Entro 3-6 ore
            {% elif trend_1h < -1 %}Entro 6-12 ore
            {% else %}Oltre 12 ore
            {% endif %}
          
          azioni_consigliate: >
            {% set trend_3h = states('sensor.tendenza_barometrica_3h') | float(0) %}
            {% if trend_3h < -6 %}
              Chiudere finestre e tende. Mettere in sicurezza oggetti esterni. 
              Disabilitare irrigazione. Attivare modalità protezione.
            {% elif trend_3h < -4 %}
              Preparare chiusura finestre. Verificare tende. Monitorare evoluzione.
            {% else %}
              Monitoraggio standard.
            {% endif %}

Design pattern

Il binary sensor combina tre parametri (trend 3h, trend 1h, accelerazione) con logica OR per massimizzare la sensibilità: basta che uno superi la soglia critica per attivare l'allerta.

Gli attributi forniscono un "piano d'azione" completo: non solo "c'è un problema" ma anche "quanto è grave", "quando arriverà" e "cosa fare".

Automazioni Pratiche

Automazione 1: Protezione Tempesta Automatica

Questa automazione mette in sicurezza la casa all'avvicinarsi di maltempo severo:

automation:
  - alias: "Protezione Automatica Pre-Tempesta"
    id: auto_storm_protection
    description: "Chiude finestre e tende quando rilevato rischio tempesta"
    
    trigger:
      - platform: state
        entity_id: binary_sensor.allerta_tempesta_barometrica
        to: "on"
        for:
          minutes: 5  # Evita falsi positivi da spike temporanei
    
    condition:
      - condition: or
        conditions:
          # Scenario 1: Tendenza critica
          - condition: numeric_state
            entity_id: sensor.tendenza_barometrica_3h
            below: -6
          
          # Scenario 2: Accelerazione preoccupante
          - condition: numeric_state
            entity_id: sensor.accelerazione_barometrica
            below: -2
    
    action:
      # Step 1: Notifica precoce
      - service: notify.mobile_app
        data:
          title: "ALLERTA METEO - Azione Automatica Attivata"
          message: >
            Rilevato rapido calo pressione: {{ states('sensor.tendenza_barometrica_3h') }} hPa/3h.
            Attivazione protezione automatica in corso...
          data:
            priority: high
            ttl: 0
            channel: meteo_alerts
            actions:
              - action: "CANCEL_PROTECTION"
                title: "Annulla Protezione"
              - action: "FORCE_PROTECTION"
                title: "Esegui Subito"
      
      # Step 2: Attendi conferma o timeout (2 minuti)
      - wait_for_trigger:
          - platform: event
            event_type: mobile_app_notification_action
            event_data:
              action: "CANCEL_PROTECTION"
        timeout:
          minutes: 2
        continue_on_timeout: true
      
      # Step 3: Se non cancellato, procedi
      - condition: template
        value_template: "{{ wait.trigger == none }}"
      
      # Step 4: Chiudi tutte le finestre motorizzate
      - service: cover.close_cover
        target:
          entity_id:
            - cover.finestra_soggiorno
            - cover.finestra_camera
            - cover.finestra_studio
      
      # Step 5: Ritira tende esterne
      - service: cover.close_cover
        target:
          entity_id: cover.tende_esterne
      
      # Step 6: Disabilita irrigazione programmata
      - service: switch.turn_off
        target:
          entity_id: switch.irrigazione_automatica
      
      # Step 7: Imposta modalità casa "Protezione Meteo"
      - service: input_select.select_option
        target:
          entity_id: input_select.house_mode
        data:
          option: "Protezione Meteo"
      
      # Step 8: Notifica completamento
      - service: notify.mobile_app
        data:
          title: "Protezione Meteo Attivata"
          message: >
            Casa messa in sicurezza:
            - Finestre chiuse: {{ expand('group.finestre_motorizzate') | selectattr('state','eq','closed') | list | count }}
            - Tende ritirate: OK
            - Irrigazione: Disabilitata
            Trend: {{ states('sensor.tendenza_barometrica_3h') }} hPa/3h
      
      # Step 9: Log per debugging
      - service: logbook.log
        data:
          name: "Protezione Tempesta"
          message: >
            Attivata protezione automatica. Trend: {{ states('sensor.tendenza_barometrica_3h') }} hPa/3h. 
            Accelerazione: {{ states('sensor.accelerazione_barometrica') }} hPa/h².

Analisi dell'automazione

  • Trigger con for: Evita attivazioni da spike momentanei richiedendo che lo stato persista per 5 minuti
  • Notifica con azioni: Dà all'utente 2 minuti per annullare se sa che è un falso positivo
  • Logica di conferma: Procede solo se non riceve cancellazione
  • Azioni graduate: Sequenza logica dalle più urgenti (finestre) alle meno critiche (mode switch)
  • Feedback multipli: Notifiche pre/post azione + log permanente

Automazione 2: Gestione Intelligente Irrigazione

L'irrigazione è uno degli use case più pratici per l'analisi barometrica:

  - alias: "Gestione Irrigazione Weather-Aware"
    id: smart_irrigation_management
    description: "Ottimizza irrigazione basata su previsioni barometriche"
    
    trigger:
      # Trigger 1: Ora programmata standard
      - platform: time
        at: "06:00:00"
        id: "scheduled"
      
      # Trigger 2: Rilevamento pioggia imminente (prevenzione)
      - platform: numeric_state
        entity_id: sensor.tendenza_barometrica_3h
        below: -4
        id: "rain_approaching"
    
    action:
      - choose:
          # SCENARIO 1: Orario programmato
          - conditions:
              - condition: trigger
                id: "scheduled"
            sequence:
              # Valuta se procedere o saltare
              - choose:
                  # Caso A: Pioggia imminente - SALTA
                  - conditions:
                      - condition: numeric_state
                        entity_id: sensor.tendenza_barometrica_3h
                        below: -3.5
                    sequence:
                      - service: notify.telegram
                        data:
                          message: >
                            Irrigazione saltata (06:00): pioggia prevista entro 6-12h 
                            (trend: {{ states('sensor.tendenza_barometrica_3h') }} hPa/3h).
                      
                      - service: logbook.log
                        data:
                          name: "Irrigazione Intelligente"
                          message: "Sessione saltata - pioggia imminente rilevata da trend barometrico"
                  
                  # Caso B: Condizioni normali - PROCEDI
                  - conditions:
                      - condition: numeric_state
                        entity_id: sensor.tendenza_barometrica_3h
                        above: -3.5
                        below: 3.5
                    sequence:
                      - service: switch.turn_on
                        target:
                          entity_id: switch.irrigazione_zona_prato
                      
                      - delay:
                          minutes: 20
                      
                      - service: switch.turn_off
                        target:
                          entity_id: switch.irrigazione_zona_prato
                      
                      - service: notify.telegram
                        data:
                          message: >
                            Irrigazione completata (20 min). 
                            Condizioni: Stabili ({{ states('sensor.tendenza_barometrica_3h') }} hPa/3h)
          
          # SCENARIO 2: Pioggia imminente rilevata
          - conditions:
              - condition: trigger
                id: "rain_approaching"
            sequence:
              # Se irrigazione attiva, fermala immediatamente
              - service: switch.turn_off
                target:
                  entity_id:
                    - switch.irrigazione_zona_prato
                    - switch.irrigazione_zona_aiuole
                    - switch.irrigazione_automatica
              
              # Notifica urgente
              - service: notify.mobile_app
                data:
                  title: "Irrigazione Fermata"
                  message: >
                    Rilevato rapido calo pressione ({{ states('sensor.tendenza_barometrica_3h') }} hPa/3h). 
                    Pioggia probabile entro 6-12 ore. Irrigazione disabilitata preventivamente.
                  data:
                    priority: high
              
              # Disabilita programmazione per 24h
              - service: automation.turn_off
                target:
                  entity_id: automation.gestione_irrigazione_weather_aware
              
              - delay:
                  hours: 24
              
              - service: automation.turn_on
                target:
                  entity_id: automation.gestione_irrigazione_weather_aware

Vantaggi di questo approccio

  1. Prevenzione sprechi: Evita irrigazione se pioggia imminente
  2. Interruzione dinamica: Ferma irrigazione in corso se situazione cambia
  3. Fallback intelligente: Disabilita temporaneamente se condizioni avverse persistenti
  4. Notifiche contestuali: Informa l'utente delle decisioni prese dal sistema

Automazione 3: Notifiche Graduate per Cambiamenti Meteo

Non sempre serve un'azione automatica immediata. Spesso è più appropriato informare l'utente e lasciare decidere:

  - alias: "Notifiche Cambiamenti Meteo Graduali"
    id: graduated_weather_notifications
    description: "Sistema di notifiche stratificate per diverse severità meteo"
    mode: queued  # Permette notifiche multiple in coda
    
    trigger:
      # Trigger per diversi livelli di severità
      - platform: numeric_state
        entity_id: sensor.tendenza_barometrica_3h
        below: -1.5
        above: -3.5
        id: "minor_drop"
      
      - platform: numeric_state
        entity_id: sensor.tendenza_barometrica_3h
        below: -3.5
        above: -6
        id: "moderate_drop"
      
      - platform: numeric_state
        entity_id: sensor.tendenza_barometrica_3h
        below: -6
        id: "severe_drop"
      
      - platform: numeric_state
        entity_id: sensor.tendenza_barometrica_3h
        above: 3.5
        id: "rapid_rise"
    
    action:
      - choose:
          # Calo minore
          - conditions:
              - condition: trigger
                id: "minor_drop"
            sequence:
              - service: notify.telegram
                data:
                  message: >
                    Cambio meteo in corso: pressione in lento calo 
                    ({{ states('sensor.tendenza_barometrica_3h') | round(1) }} hPa/3h). 
                    {{ state_attr('sensor.tendenza_barometrica_3h', 'previsione_tempo') }}
          
          # Calo moderato
          - conditions:
              - condition: trigger
                id: "moderate_drop"
            sequence:
              - service: notify.mobile_app
                data:
                  title: "Peggioramento Meteo Previsto"
                  message: >
                    Pressione in calo moderato ({{ states('sensor.tendenza_barometrica_3h') }} hPa/3h). 
                    Precipitazioni probabili entro 12-24 ore. 
                    Considera di preparare precauzioni.
                  data:
                    priority: normal
                    tag: weather_moderate
          
          # Calo severo
          - conditions:
              - condition: trigger
                id: "severe_drop"
            sequence:
              - service: notify.mobile_app
                data:
                  title: "ALLERTA METEO SEVERO"
                  message: >
                    ATTENZIONE: Pressione in rapido calo ({{ states('sensor.tendenza_barometrica_3h') }} hPa/3h).
                    {{ state_attr('binary_sensor.allerta_tempesta_barometrica', 'azioni_consigliate') }}
                    Tempo stimato arrivo: {{ state_attr('binary_sensor.allerta_tempesta_barometrica', 'tempo_previsto_arrivo') }}
                  data:
                    priority: high
                    ttl: 0
                    tag: weather_severe
                    color: red
                    actions:
                      - action: "ACTIVATE_PROTECTION"
                        title: "Attiva Protezione"
                      - action: "VIEW_DETAILS"
                        title: "Dettagli"
              
              # Annuncio vocale se speaker disponibili
              - service: tts.google_translate_say
                data:
                  entity_id: media_player.google_home_soggiorno
                  message: >
                    Attenzione. Rilevato rapido calo della pressione atmosferica. 
                    Possibile tempesta in arrivo nelle prossime ore. 
                    Si consiglia di verificare finestre e oggetti esterni.
          
          # Aumento rapido
          - conditions:
              - condition: trigger
                id: "rapid_rise"
            sequence:
              - service: notify.telegram
                data:
                  message: >
                    Rapido miglioramento meteo! Pressione in aumento 
                    ({{ states('sensor.tendenza_barometrica_3h') }} hPa/3h). 
                    Schiarite previste nelle prossime ore. 
                    {% if now().hour < 18 %}Buona giornata all'aperto!{% endif %}

Filosofia delle notifiche

  • Stratificazione: Canali diversi per urgenza diversa (Telegram per info, push per urgenze)
  • Tagging: Permette di sostituire notifiche vecchie invece di accumularle
  • Azioni contestuali: Ogni notifica offre azioni pertinenti alla situazione
  • Multimodalità: Usa anche TTS per situazioni critiche quando l'utente potrebbe non vedere il telefono

Dashboard Completa

Una dashboard ben progettata è essenziale per visualizzare e comprendere i dati barometrici. Ecco una configurazione completa usando diverse card:

La dashboard seguente include card per overview, grafici storici, dettagli sensori, diagnostica, automazioni e statistiche. Configurabile tramite ui-lovelace.yaml o direttamente dall'interfaccia UI.

# ui-lovelace.yaml o tramite UI

views:
  - title: Meteo Barometrico
    icon: mdi:gauge
    path: barometric-weather
    badges: []
    cards:
      # CARD 1: Overview Principale
      - type: vertical-stack
        cards:
          # Intestazione con stato attuale
          - type: markdown
            content: >
              ## Analisi Barometrica

              **Pressione Attuale**: {{ states('sensor.pressione_attuale') }} hPa

              **Trend 3h**: {{ states('sensor.trend_barometrico_visivo') }} 
              {{ states('sensor.tendenza_barometrica_3h') }} hPa/3h

              **Previsione**: {{ state_attr('sensor.tendenza_barometrica_3h', 'previsione_tempo') }}

              ---

              {% if is_state('binary_sensor.allerta_tempesta_barometrica', 'on') %}
              ### ALLERTA ATTIVA
              **Livello**: {{ state_attr('binary_sensor.allerta_tempesta_barometrica', 'livello_allerta') }}

              **Azioni**: {{ state_attr('binary_sensor.allerta_tempesta_barometrica', 'azioni_consigliate') }}
              {% endif %}
          
          # Gauge visivi
          - type: horizontal-stack
            cards:
              - type: gauge
                entity: sensor.pressione_attuale
                name: Pressione
                min: 980
                max: 1040
                severity:
                  green: 1013
                  yellow: 1000
                  red: 990
              
              - type: gauge
                entity: sensor.tendenza_barometrica_3h
                name: Trend 3h
                min: -10
                max: 10
                severity:
                  green: 0
                  yellow: 3
                  red: 6
              
              - type: gauge
                entity: sensor.accelerazione_barometrica
                name: Accelerazione
                min: -5
                max: 5

Per implementazioni avanzate, considera l'utilizzo di custom card come ApexCharts per grafici interattivi, Mini Graph Card per visualizzazioni leggere, o Statistics Graph per analisi temporali.

Troubleshooting e Best Practices

Problemi Comuni e Soluzioni

Problema 1: Sensori Storici Restituiscono "unknown" o "unavailable"

Sintomo: I sensori trend mostrano valori zero o non si aggiornano.

Causa: I sensori SQL storici non recuperano dati, solitamente per database recorder non configurato correttamente, entità pressione non inclusa nel recorder, o retention period troppo breve.

# configuration.yaml

recorder:
  db_url: !secret db_url  # O SQLite di default
  purge_keep_days: 7  # Almeno 3+ giorni
  include:
    entities:
      - sensor.pressione_attuale  # DEVE essere incluso

Dopo la modifica, attendi almeno 3 ore prima che i sensori SQL popolino dati storici sufficienti.

Problema 2: Template Sensor con Errori "float() could not convert"

Sintomo: Log error ripetuti tipo: Template variable error: 'float' could not convert string to float: 'unknown'

Causa: Il sensore sorgente è temporaneamente indisponibile e il template tenta conversioni su stringhe non numeriche.

# SBAGLIATO
state: "{{ states('sensor.pressione_attuale') | float }}"

# CORRETTO
state: >
  {% set current = states('sensor.pressione_attuale') | float(0) %}
  {% if current > 0 %}
    {{ current }}
  {% else %}
    {{ states('sensor.tendenza_barometrica_3h') }}
  {% endif %}

Problema 3: Automazioni che si Triggherano Troppo Spesso

Sintomo: Notifiche multiple o azioni ripetute per lo stesso evento meteo.

Causa: Piccole fluttuazioni di pressione causano attraversamenti ripetuti delle soglie di trigger.

Soluzione: Usa for duration nei trigger e mode: single nelle automazioni.

Best Practices di Configurazione

  1. Organizzazione File: Usa packages per raggruppare logicamente tutto il codice barometrico
  2. Naming Convention Consistente: Usa prefissi coerenti (sensor.tendenza_*, sensor.pressione_*, binary_sensor.allerta_*, automation.barometric_*)
  3. Logging e Debugging: Aggiungi logging dettagliato durante lo sviluppo
  4. Backup e Versioning: Prima di modifiche significative, backup configuration files e usa Git se possibile
  5. Testing Graduale: Non attivare tutte le automazioni insieme, inizia con una sola e testa per alcuni giorni

Monitoraggio Performance e Salute del Sistema

Sensore di Health Check

Crea un sensore che valuta la "salute" del sistema barometrico:

template:
  - sensor:
      - name: "Barometric System Health"
        unique_id: barometric_health
        state: >
          {% set issues = namespace(count=0, list=[]) %}
          
          {# Check 1: Sensore pressione attivo #}
          {% if states('sensor.pressione_attuale') in ['unknown', 'unavailable'] %}
            {% set issues.count = issues.count + 1 %}
            {% set issues.list = issues.list + ['Sensore pressione offline'] %}
          {% endif %}
          
          {# Check 2: Sensori storici popolati #}
          {% if states('sensor.pressione_1h_fa') in ['unknown', 'unavailable'] %}
            {% set issues.count = issues.count + 1 %}
            {% set issues.list = issues.list + ['Sensore 1h storico vuoto'] %}
          {% endif %}
          
          {# Check 3: Template sensor funzionanti #}
          {% if states('sensor.tendenza_barometrica_3h') in ['unknown', 'unavailable'] %}
            {% set issues.count = issues.count + 1 %}
            {% set issues.list = issues.list + ['Tendenza 3h non calcolata'] %}
          {% endif %}
          
          {# Check 4: Dati recenti (meno di 10 min fa) #}
          {% if (now() - states.sensor.pressione_attuale.last_updated).seconds > 600 %}
            {% set issues.count = issues.count + 1 %}
            {% set issues.list = issues.list + ['Dati pressione obsoleti'] %}
          {% endif %}
          
          {% if issues.count == 0 %}Healthy
          {% elif issues.count <= 2 %}Degraded
          {% else %}Critical
          {% endif %}
        attributes:
          issues_count: >
            {{ issues.count }}
          issues_list: >
            {{ issues.list | join(', ') }}
          last_check: "{{ now().isoformat() }}"

Crea poi un'automazione che notifica se il sistema entra in stato degraded/critical per identificare rapidamente problemi nella catena di acquisizione dati.

Conclusioni e Prossimi Passi

In questo articolo abbiamo costruito un sistema completo di analisi barometrica per Home Assistant con template sensor avanzati, binary sensor di allerta e automazioni pratiche per protezione tempesta e irrigazione intelligente. Il sistema implementa gli standard WMO per la classificazione dei trend e fornisce dashboard intuitive per il monitoraggio real-time.

Implementazione Rapida

Setup minimo (30 minuti)

  1. Implementa i sensori trend 3h e 1h
  2. Configura il binary sensor allerta tempesta
  3. Crea una automazione di notifica base

Testing (1-2 settimane)

  • Monitora la correlazione tra previsioni e meteo reale
  • Aggiusta le soglie per la tua zona geografica
  • Verifica assenza di falsi positivi

Espansione graduale

  • Aggiungi automazioni per dispositivi smart (finestre, irrigazione)
  • Implementa la dashboard completa
  • Integra con altri sistemi domotici

Prossimo Articolo

Nel quarto articolo della serie esploreremo l'integrazione con Google Gemini AI per analisi barometrica contestuale, generazione dinamica di sensori e automazioni AI-driven con reasoning avanzato. L'approccio AI complementerà il sistema template aggiungendo comprensione contestuale, spiegazioni human-friendly e adattamento alle condizioni locali.

Riferimenti e Risorse

Documentazione

Tool Utili

  • Template Editor in Developer Tools per test real-time
  • YAML Validator per verifica sintassi
  • HACS per card dashboard custom

Community

Serie Completa

  1. Fondamenti del Trend Barometrico: Teoria meteorologica e standard WMO
  2. Sensori SQL per Dati Storici: Recupero automatico di pressioni passate
  3. Template Sensor e Automazioni ← Sei qui
  4. Integrazione AI con Google Gemini: Trasforma Home Assistant in Stazione Meteo Ai

Metadati Articolo

Categoria:

Domotica - Home Assistant - Sensori Avanzati

Livello di difficoltà:

Intermedio

Tempo di lettura stimato:

15 minuti

Data ultimo aggiornamento:

Ottobre 2025

Versione di Home Assistant:

Testato con 2024.10.x

Compatibilità:

Home Assistant 2022.10 e successive

Tag:

Home Assistant SQL Sensors Pressione Barometrica Trend Meteo Domotica Tutorial Database Recorder Sensori Storici
avatar di max novadi

Max Novadi

Blog writer specializzato in tecnologia e domotica.

Max si occupa di tendenze tecnologiche da oltre un decennio, con un'attenzione particolare alle automazioni domestiche e alla smart home, ambiti che ha approfondito in particolare con Home Assistant. Si interessa anche di intelligenza artificiale e delle sue applicazioni nella tecnologia consumer.

Nuki Home Assistant Works with HA Smart Lock Matter Thread Domotica