community italiana di domotica personale
 
Previsioni meteo orarie sulla domotica Home Assistant (via Met.no o altri servizi analoghi)

Previsioni meteo orarie sulla domotica Home Assistant (via Met.no o altri servizi analoghi)

Scopi della guida:
  • Aggiungere dei sensori di previsione meteo su base oraria
  • Livello di difficoltà: basso
  • Categoria d’integrazione: Cloud Polling
Concetti affrontati:
  • Configurazione software
Componenti software utilizzate:
Prerequisiti:
Dispositivi fisici utilizzati:
GUIDA INDICATA A UTENTI CON ISTALLAZIONE:
Ambienti Home Assistant HassOS-Supervised-Core
NOTE E DISCLAIMER
  • qualsiasi eventuale modifica agli impianti domestici dev'essere progettata e realizzata SOLO da personale qualificato;
  • qualsiasi modifica non prevista attuata in proprio è a propria responsabilità personale nonché a proprio rischio e pericolo (i contenuti della presenta pagina hanno infatti puro scopo didattico) e fa decadere garanzia, omologazioni e certificazioni di qualità; dei dispositivi interessati;
  • tutte le tecniche descritte si intendono applicate a software e firmware aggiornati alle ultime versioni disponibili;
  • gli articoli di inDomus sono totalmente indipendenti e non sponsorizzati. Se mai questo cambiasse, verrà segnalato chiaramente sulle pagine oggetto di sponsorizzazione;
  • questa pagina è materialmente scritta e manutenuta da più individui: non ci si aspetti né si pretenda un supporto personale. In caso di difficoltà, chiedere supporto alla community sul nostro forum o sulla nostra chat;
  • se hai bisogno di orientarti, c'è la mappa.
Revisione guida: 1.2

Met.no - Logo

Abstract

Meteorologisk institutt (Met.no) è un servizio metereologico gratuito il quale, quando integrato presso Home Assistant, permette di dotarsi di entità di tipo “Weather” contenenti le condizioni meteo attuali nonché (di base) le previsioni del tempo su base giornaliera.

In realtà, tale servizio (ma anche altri, analoghi) consente di estrarre anche previsioni metereologiche orarie. Per farlo è necessario evocare un servizio esplicito il quale, indicando l’entità principale di tipo Weather, consenta di estrarre un payload contenente le informazioni relative alle 24 ore seguenti, suddivise per ora.

In questa guida vedremo come estrarre le informazioni e come dotarsi di sensori template il quali provvedano a loro volta ad estrarre informazioni specifiche da tale interrogazione.

Si parte

Servizio meteo

Assumiamo che il servizio meteo configurato sia il già citato Met.no, quello che di default si trova configurato sull’HUB. Tale servizio genera un’entità chiamata weather.forecast_casa (o .forecast_home, in base alla ligua impostata), la quale contiene le condizioni meteo attuali e quelle relative ai giorni seguenti. Laddove ovviamente non sia configurato, la cosa va fatta presso Impostazioni” > “Dispositivi e servizi.

N.b. Le indicazioni della presente guida si applicano sostanzialmente a tutte le entità weather.* generate dalle più disparate integrazioni di questo tipo, purché supportino il servizio che tra poco andremo a descrivere.

Interrogare l’entità

Assumedo che l’entità si chiami effettivamente weather.forecast_casa, (basta verificarlo nella lista delle entità), recarsi presso il motore servizi (Strumenti per gli sviluppatori” > “Azioni) e inserire il seguente codice:

action: weather.get_forecasts
data:
  type: hourly
target:
  entity_id: weather.forecast_home
response_variable: hourly

cliccando su “CHIAMA SERVIZIO“, il responso dovrebbe essere una lista come segue:

weather.forecast_casa:
  forecast:
  - condition: partlycloudy
    datetime: "1980-01-01T00:00:00+00:00"
    wind_bearing: 34.4
    cloud_coverage: 25.8
    temperature: 9.4
    wind_speed: 10.8
    precipitation: 0
    humidity: 93
  - condition: partlycloudy
    datetime: "1980-01-01T01:00:00+00:00"
    wind_bearing: 1.2
    cloud_coverage: 0.1
    temperature: 10.4
    wind_speed: 20.4
    precipitation: 0
    humidity: 61
  - condition: partlycloudy
    datetime: "1980-01-01T02:00:00+00:00"
    wind_bearing: 3.9
    cloud_coverage: 0.1
    temperature: 10.6
    wind_speed: 22.8
    precipitation: 0
    humidity: 59
.
.
.
#eccetera, per 24 entry

Questo è il payload di cui parlavamo all’inzio della guida.
Se tale payload è disponibile, allora è possibile estrarre le informazioni in modo da canalizzarle in un sensore ad hoc.

Vetrina - Offerte del giorno

Definire un sensore

Se le informazioni sono disponibili è dunque possibile estrarle e trattarle all’interno di un sensore.

Ipotizziamo per esempio di desiderare un sensore che contenga la velocità del vento stimata a +12 ore; questo magari per innescare delle automazioni che avvisino l’utente di chiudere le tende da esterno (o farlo automaticamente, in caso siano domotizzate e integrate all’HUB).

Ci serve dunque un sensore template, il quale, una volta all’ora, si aggiorni automaticamente evocando il servizio di cui sopra.

Definiamolo modificando la configurazione YAML dell’HUB con il seguente codice:

template:
  - trigger:
      - platform: time_pattern
        hours: /1
      - platform: homeassistant
        event: start
    action:
      - action: weather.get_forecasts
        data:
          type: hourly
        target:
          entity_id: weather.forecast_casa
        response_variable: hourly
    sensor:
      - name: "velocità vento 12h"
        unit_of_measurement: "m/s"
        state: "{{ hourly['weather.forecast_casa'].forecast[11].wind_speed|float(default=0) }}"

una volta riavviato l’HUB, il sensore sensor.velocita_vento_12h verrà generato.

Analizziamo ora in dettaglio il codice che lo definisce.

Trigger

Il trigger è il seguente:

      - platform: time_pattern
        hours: /1
      - platform: homeassistant
        event: start

il quale si innesca una volta all’ora, ciclicamente, oppure all’avvio di Home Assistant.

N.b. Attenzione: l’innesco temporale una volta all’ora sottostà a determinati aspetti, da conoscere. Alla luce di tali aspetti, una volta definito il sensore esso viene aggiornato automaticamente per la prima volta solo al primo cambio di ora.

Action

L’action è presto spiegata: non fa altro che evocare il servizio weather.get_forecasts associandolo all’entità weather.home:

      - action: weather.get_forecasts
        data:
          type: hourly
        target:
          entity_id: weather.forecast_casa
        response_variable: hourly 

Sensor

Infine, vediamo com’è definito il sensore:

      - name: "outdoor 12h wind speed"
        unit_of_measurement: "m/s"
        state: "{{ hourly['weather.forecast_casa'].forecast[11].wind_speed|float(default=0) }}" 

la chiave sta nella parte evidenziata, la quale va ad attingere dall’array che arriva come payload dall’interrogazione del servizio (vedi sopra).

Dato che ci interessa la previsione a +12 ore, indichiamo innanzitutto 11 come subset dell’array da estrarre (la numerazione parte da 0, ecco perché 11 e non 12).

La struttura dei dati è la seguente:

hourly
- forecast [X]
  - attributo

dato che ci interessa “wind_speed” (ovvero la velocità del vento), usiamo:

hourly['weather.forecast_casa'].forecast[11].wind_speed

che formattiamo come float con un default a 0:

hourly['weather.forecast_casa'].forecast[11].wind_speed|float(default=0)

e voilà, la magia è fatta.

Conclusioni

Il limite, come sempre, è la fantasia.

A partire dagli attributi presenti nel payload, è possibile definire più sensori liberamente ultilizzabili su Home Assistant per automazioni e script; si raccomanda di non ridurre il periodo di aggiornamento sotto l’ora, in quanto può innescare il ban da parte di Met.no per eccessive richieste da parte della vostra istanza, oltre a essere inutile (i dati, comunque, si aggiornano una volta all’ora).

⚠️ Se di Home Assistant ne sai poco ma sei interessato a capirne di più, ti suggeriamo di partire da qui.

Questa pagina è redatta, manutenuta e aggiornata dallo staff di inDomus, un gruppo di persone molto diverse tra loro che trovi, per domande e supporto, sul forum e sulla chat del sito. Alcuni link sono taggati in qualità di affiliati Amazon e riceviamo un compenso dagli acquisti idonei, utile al sostenimento del sito, ma le nostre recensioni sono tutte indipendenti e non sponsorizzate. Se ti sei perso, a tua disposizione c'è la mappa.