Serie: Previsione Meteo con Home Assistant - Parte 3 di 4
Previsione Meteo in Home Assistant: Template Sensor e Automazioni BarometricheSerie Completa
- Fondamenti del Trend Barometrico: Teoria meteorologica e standard WMO
- Sensori SQL per Dati Storici: Recupero automatico di pressioni passate
- Template Sensor e Automazioni ← Sei qui
- 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
- Prevenzione sprechi: Evita irrigazione se pioggia imminente
- Interruzione dinamica: Ferma irrigazione in corso se situazione cambia
- Fallback intelligente: Disabilita temporaneamente se condizioni avverse persistenti
- 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
- Organizzazione File: Usa packages per raggruppare logicamente tutto il codice barometrico
- Naming Convention Consistente: Usa prefissi coerenti (sensor.tendenza_*, sensor.pressione_*, binary_sensor.allerta_*, automation.barometric_*)
- Logging e Debugging: Aggiungi logging dettagliato durante lo sviluppo
- Backup e Versioning: Prima di modifiche significative, backup configuration files e usa Git se possibile
- 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)
- Implementa i sensori trend 3h e 1h
- Configura il binary sensor allerta tempesta
- 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
- Fondamenti del Trend Barometrico: Teoria meteorologica e standard WMO
- Sensori SQL per Dati Storici: Recupero automatico di pressioni passate
- Template Sensor e Automazioni ← Sei qui
- 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: