Notifiche visive basate sul clima (o altro) con Nanoleaf e Home Assistant

SCOPI DEL PROGETTO:
  • Automatizzare il comportamento dei pannelli luminosi Nanoleaf in base al clima esterno (o altre condizioni specifiche)
  • Livello di difficoltà: medio/basso
  • Costo: in base al pannello Nanoleaf in uso
CONCETTI AFFRONTATI:
COMPONENTI SOFTWARE UTILIZZATE:
  • Home Assistant configurato e funzionante (ver. >0.67)
  • Componente Home Assistant “Nanoleaf Light Panel
  • Una piattaforma Home Assistant per l’integrazione delle condizioni meteo (in questo progetto, “DarkSky“, ma va bene una qualunque che fornisca queste informazioni)
DISPOSITIVI FISICI UTILIZZATI:
PROGETTO MAGGIORMENTE INDICATO PER:

Tutti gli ambienti

Note e disclaimer
  • qualsiasi modifica all'impianto elettrico dev'essere effettuata da personale qualificato
  • qualsiasi modifica attuata in proprio è a propria responsabilità personale nonché a proprio rischio e pericolo (la presente guida ha puro scopo didattico)
  • qualsiasi modifica attuata in proprio a un dispositivo ne fa decadere la garanzia.
Revisione progetto: 1.1

Abstract

I pannelli luminosi componibili Nanoleaf (i recenti Canvas, ma anche il precedente modello Aurora) sono ormai noti per essere una soluzione d’arredamento molto apprezzata sia in termini funzionali (ovvero allo scopo di illuminare) che in termini squisitamente estetici.

Nanoleaf AuroraTra le varie funzionalità consentite dai pannelli e dalla loro applicazione di gestione e controllo (disponibile per iOS e Android) c’è quella “colore“, la quale permette di utilizzare schemi iridescenti predefiniti (o personalizzati, realizzati da zero). Queste impostazioni visualizzano delle animazioni di colore anche molto diverse tra loro non solo in termini di interazione di colore, ma anche in termini di velocità, di effetto di transizione e altri parametri.

L’app Nanoleaf presenta di per sé un certo numero di schemi predefiniti, insieme il quale può essere ampliato sia definendo schemi personali sia scaricando nuovi schemi dal database collaborativo degli utenti Nanoleaf di tutto il mondo.

Dopo aver avuto modo di recensire Nanoleaf Canvas e avergli dedicato una guida per l’integrazione su Home Assistant, inDomus si è chiesta quali potrebbero essere le funzionalità accessorie date dall’uso combinato di tali pannelli con il noto HUB personale.

La risposta (o almeno, una delle possibili) è il presente progetto, il quale illustrerà come fare in modo di attivare specifici schemi colore Nanoleaf in base alle condizioni meteo (o alle previsioni, perché no) della location in cui si trova installato oppure in base a specifici stati della propria domotica, a mo’ di “pannello di controllo” (la rilevazione di un allarme, lo stato di un sensore e molto altro). Una cosa un po’ più elaborata di questo altro progetto basato solo su LED semplici, insomma.

Qual è il limite?
Come al solito, la fantasia.

Si parte

Logica del progetto

Innanzitutto ci doteremo di informazioni elementari relative al clima della location in cui sono installati Home Assistant e il pannello/i Nanoleaf. A partire da queste informazioni definiremo poi un’automazione la quale all’atto dell’accensione dell’entità “Light” che rappresenta il pannello Nanoleaf provveda ad applicagli l’effetto visivo voluto. sfruttando i parametri di servizio caratteristici di questo tipo di entità.

Applicando la medesima logica, suggeriremo delle automazioni che, a fronte del presentarsi di una data condizione (eg. superamento di una soglia, o altri stati di determinate entità) accenda il pannello impostando uno specifico effetto visivo.

Assunzioni

Per la realizzazione del presente progetto si assume che:

Condizioni meteo attuali

Come anticipato, ciò di cui abbiamo bisogno è una fonte di informazioni relative allo stato attuale delle condizioni meteo della nostra zona.

Com’è noto, ‘integrazione con la piattaforma “Dark Sky” consente di dotarci delle condizioni meteo – nonché previsionali – a partire da una specifica latitudine/longitudine rappresentate la posizione geografica del nostro ambiente domotico.

Tra le tante entità generate da tale integrazione ne esiste una particolarmente utile a questo progetto, quella che appunto riporta quasi in tempo reale le condizioni meteorologiche. Tale entità è di tipo “Weather” e cambia nome in base alla configurazione dell’integrazione.
Basta cercare nella lista entità di Home Assistant per trovarla facilmente:

Home Assistant - Dark Sky - Weather Summary

Assumeremo, per il presente progetto, che l’entità clima a nostra disposizione si chiami “weather.casamia“.
Inoltre, utilizzeremo (opzionalmente) anceh il sensore “sensor.casamia_cloud_coverage“, un’altra entità sempre generata dall’integrazione Dask Sky la quale fornisce l’indicatore percentuale di copertura del cielo.

Le condizioni meteo censite possono essere:

  • sunny (soleggiato)
  • clear-night (notte serena)
  • rainy (piovoso)
  • snowy (nevoso)
  • snowy-rainy (nevischio)
  • windy (ventoso)
  • fog (nebbioso)
  • cloudy (nuvoloso)
  • hail (grandine)
  • lightning (fulminazione)
  • partly-cloud (parzialmente nuvoloso)

Quel che faremo è definire un’entità template che – a partire dalle condizioni di cui sopra – definisca in sé il nome di un profilo “color” presente sull’app Nanoleaf, per poi usarla in fase di definizione dell’automazione che auto-regolerà il pannello Nanoleaf.

N.b. Come detto nell’abstract, l’utilizzo della piattaforma Dark Sky non è obbligatoria: è sufficiente una qualunque altra piattaforma meteo, purché fornisca le informazioni di cui sopra.

Nanoleaf

A questo punto è necessario recarsi presso l’app mobile Nanoleaf e identificare quali siano gli schemi “coloreda applicare in base alle varie condizioni meteo (come e quando lo vedremo successivamente).

Laddove gli schemi colore presenti non siano adatti, è sufficiente cliccare su “Scopri” in basso a sinistra ed effettuare una ricerca sul database collaborativo Nanoleaf e aggiungere alla nostra lista quelli che più ci interessano e ci aggradano.

Nanoleaf App 3

inDomus ha identificato una serie di schemi colore (che riporteremo nell’esempio a seguire) ideali per “mappare” le condizioni meteo esterne. Quel che è importante sapere è che, una volta definito l’elenco degli schema colore, è necessario riportarli in configurazione avendo ben cura di riportarne i nome per come sono scritti sull’app, pena il mancato funzionamento dell’automatismo che definiremo.

Nell’immagine sopra, per esempio, uno schema colore si chiama “Falling Whites”.
Riportando in configurazione il nome:

  • falling whites – non funziona
  • Falling whites – non funziona
  • falling Whites – non funziona
  • Falling Whites – FUNZIONA

Quindi sarà il caso di riportare in configurazione i nomi scritti in modo corretto.

Alcuni schemi interessanti trovati da inDomus:

Condizione meteoNome schema colore presso l’app Nanoleaf
SoleggiatoSunny
Notte serenaStarry Night
PiovosoRain
Nevoso/NevischioSnow Day
VentosoWindy Ocean
Fog*Solid*
Nuvoloso/Parzialmente nuvolosoCloudy
HailRain Shower
FulminazioneLightning

Definizione sensore

Come detto, definiremo un sensore template al fine di definire automaticamente, al variare delle condizioni, il profilo corretto da applicare al pannello. Questa scelta è volta a concentrale le logiche di scelta del profilo colore su di esso, così da potere utilizzarne l’output in qualunque automazione/script/scena

Aggiungeremo quindi alla configurazione di Home Assistant un sensore così definito:

sensor:
  - platform: template
    sensors:
      nanoleaf_weather_based_effect:
        friendly_name: "Effetto luminoso Naoleaf su base clima"
        value_template: >-
          {% if is_state("weather.casamia","sunny") %}
          Sunny
          {% elif is_state("weather.casamia","clear-night") %}
          Starry Night
          {% elif is_state("weather.casamia","rainy") %}
          Rain
          {% elif is_state("weather.casamia","snowy") %}
          Snow Day
          {% elif is_state("weather.casamia","snowy-rainy") %}
          Snow Day
          {% elif is_state("weather.casamia","windy") %}
          Windy Ocean
          {% elif is_state("weather.casamia","fog") %}
          *Solid*
          {% elif is_state("weather.casamia","cloudy") %}
          Clouds
          {% elif is_state("weather.casamia","hail") %}
          Rain Shower
          {% elif is_state("weather.casamia","lightning") %}
          Lightning
          {% elif is_state("weather.casamia","partlycloudy") %}
            {% if is_state("sun.sun","above_horizon") %}
              {% if states("sensor.casamia_cloud_coverage")|int < 40 %}
              Sunny
              {%- else -%}
              Cloudy day
              {% endif %}
            {%- else -%}
            Starry Night
            {% endif %}
          {% else %}
          Falling Whites
          {% endif %}

Il sensore che abbiamo definito (chiamato “sensor.nanoleaf_weather_based_effect“) conterrà nel proprio stato una stringa rappresentante il nome di uno dei profili colore precedentemente identificati in base al variare delle condizioni meteo. Questo valore varierà automaticamente al variare dello stato del sensore “weather.casamia“.

Va da sé che ovviamente lo schema proposto sia altamente personalizzabile, sia nelle logiche di applicazione dello schema colore sia negli schemi di colore scelti.

Nella parte finale è stato introdotta un’eccezione: è stato infatti notato come Dask Sky tenda a comunicare condizione di “parzialmente nuvoloso” anche con una bassa presenza di nubi. In caso la condizione comunicata sia “partly-cloudy” ma la copertura di nubi sia inferiore al 40%, il template sensor utilizza il profilo colore dedicato alle giornate soleggiate. Inoltre, dopo il tramonto applica sempre lo stesso profilo (“Starry Night“).

Usando le previsioni

Nessuno ci obbliga ad utilizzare necessariamente le condizioni meteo attuali. La volontà infatti potrebbe essere quella di visualizzare sul pannello non tanto le condizioni attuali quanto le previsioni meteo a 12-24 ore. Bene: per far ciò sarà sufficiente – al posto di “weather.casamia” – utilizzare un’altra entità che fornisca la previsione piuttosto che la condizione attuale.

Rimanendo nel solco dell’implementazione di “Dark Sky”, un’entità utile potrebbe essere il sensore che termina col suffisso “_hourly_summary“: partendo dagli stati da lui forniti (attenzione, questi sono erogati nella lingua in cui è impostato il proprio Home Assistant e non necessariamente in inglese), basterebbe personalizzare il sensore di cui sopra in modo adeguato, per esempio:

sensor:
  - platform: template
    sensors:
      nanoleaf_weather_based_effect:
        friendly_name: "Effetto luminoso Naoleaf su base clima"
        value_template: >-
          {% if is_state("sensor.casamia_hourly_summary","Soleggiato") %}
          Sunny
          {% elif is_state("sensor.casamia_hourly_summary","Venticello") %}
          Windy
          {% elif is_state("sensor.casamia_hourly_summary","Piovoso") %}
          Rain
          {% else %}
          Falling Whites
          {% endif %}

Automazione

A questo punto è necessario definire l’automazione che provvederà alla gestione automatica nell’applicazione dell’effetto luminoso al pannello.

La cosa più semplice e intuitiva è quella di definirne una la quale, all’accensione del pannello, provveda ad applicare lo schema colore coerente col clima, a partire dal valore dello stato del sensore “sensor.nanoleaf_weather_based_effect” il quale, come speigato, provvede da sé a valorizzarsi.

L’automazione è dunque così facilmente realizzata:

automation:
- alias: "Impostazione Nanoleaf su base clima"
  trigger:
    platform: state
    entity_id: light.nanoleaf
    to: 'on'
  condition: []
  action:
    service: light.turn_on
    entity_id: light.nanoleaf
    data_template:
      effect: '{{ states.sensor.nanoleaf_weather_based_effect.state }}'

Il trigger è ovviamente il cambio di stato del pannello ad “acceso” (“on“), non è presente alcuna condition (ma ovviamente questo può essere oggetto di personalizzazione) mentre l’action prevede l’utilizzo del servizio light.turn_on il quale non tanto necessario all’accensione del pannello – che acceso lo è già – ma bensì all’applicazione dell’effetto colore derivato dal sensore template precedentemente definito (ultima riga).

La cosa interessante è che l’automazione viene eseguita ogni qual volta il pannello viene acceso non solo da Home Assistant, ma anche dalla sua app o addirittura manualmente. Il perché è semplice: l’integrazione Nanoleaf fa sì che Home Assistant conosca stato e cambio di stato del pannello, quindi qualunque sia il metodo d’accensione, l’automazione viene sempre eseguita.

Uso come mezzo di notifica

Al di là di impostare automaticamente uno schema colore a fronte delle condizioni meteo, un pannello Nanoleaf può essere anche utilizzato come strumento per notificare determinati eventi relativi alla propria domotica personale.

Dato che, come spiegato, è possibile realizzare degli schemi personali propri (a tinta unita, lampeggianti, iridescenti ecc.), è facilmente pensabile di fare in modo che il pannello si accenda e visualizzi il suddetto schema colore a fronte del presentarsi di una data situazione.

Ipotizziamo dunque, a mo’ d’esempio, di aver integrato a Home Assistant dei sensori di allagamento (entità “binary_sensor.water_leak_sensor“), un’elettrovalvola per interrompere l’afflusso d’acqua centrale (entità “switch.ACQUA“) e di voler definire un’automazione che

  • interrompa l’afflusso d’acqua;
  • accenda il pannello Nanoleaf sullo schema colore “Allagamento” (ipotizziamo sia rosso, tinta unita).

L’automazione potrebbe essere la seguente:

automation:
- alias: "Allagamento "
  trigger:
    platform: state
    entity_id: binary_sensor.water_leak_sensor
    from: 'off'
    to: 'on'
  condition: []
  action:
    - service: switch.turn_off
      entity_id: switch.ACQUA
    - service: light.turn_on
      entity_id: light.nanoleaf
      data_template:
        effect: 'Allagamento'

In presenza dell’automazione che imposta il pannello, alla sua accensione, allo schema “colore” relativo al clima (“automation.impostazione_nanoleaf_su_base_clima“), sarà ovviamente necessario disattivarla temporaneamente all’esecuzione della stessa, altrimenti le due automazioni confliggerebbero tra loro.

La risultante automazione quindi sarà:

automation:
- alias: "Allagamento "
  trigger:
    platform: state
    entity_id: binary_sensor.water_leak_sensor
    from: 'off'
    to: 'on'
  condition: []
  action:
    - service: homeassistant.turn_off
      entity_id: automation.impostazione_nanoleaf_su_base_clima
    - service: switch.turn_off
      entity_id: switch.ACQUA
    - service: light.turn_on
      entity_id: light.nanoleaf
      data_template:
        effect: 'Allagamento'
    - delay:
        seconds: 3
    - service: homeassistant.turn_on
      entity_id: automation.impostazione_nanoleaf_su_base_clima

In evidenza le righe aggiunte le quali provvedono a stoppare l’automazione “clima”, attendono tre secondi e poi la riattivano.


Home Assistant Official LogoATTENZIONE: ricorda che sul nostro community FORUM c'è una sezione ad hoc dedica a Home Assistant, per qualsiasi dubbio, domanda, informazione nel merito specifico di queste componenti.

🔻 Clicca QUI per commentare l'articolo. 🔻