Integrare Shelly Dimmer / Dimmer SL a Home Assistant via MQTT

8 minuti di lettura
●  Resta aggiornato con il nostro canale e con la nostra newsletter settimanale!  ●
Scopi della guida:
  • Integrare l’attuatore Shelly Dimmer / Dimmer SL all’HUB di domotica personale Home Assistant (come singolo interruttore a regolazione d’intensità e sensore di assorbimento/consumo)
  • Livello di difficoltà: bassa
  • Categoria d’integrazione: Local Push
Concetti affrontati:
  • Configurazione software
Componenti software utilizzate:
Prerequisiti:
  • Home Assistant configurato e funzionante
  • Componente/i Shelly da integrare già configurato/i in Wi-Fi
Dispositivi fisici utilizzati:
GUIDA maggiormente indicatA per:

Tutti gli ambienti

Note e disclaimer
  • qualsiasi eventuale modifica agli impianti domestici dev'essere progettata ed realizzata SOLO da personale qualificato;
  • qualsiasi modifica attuata in proprio è a propria responsabilità personale nonché a proprio rischio e pericolo (i contenuti della presenta pagina hanno puro scopo didattico);
  • qualsiasi modifica attuata in proprio a un dispositivo ne fa decadere garanzia, omologazioni e certificazioni di qualità.
Revisione guida: 1.2

Shelly Dimmer - Home Assistant

Abstract

Uno dei grandi vantaggi della linea Shelly (rispetto per esempio alla diretta rivale, la ITEAD Sonoff, o altre analoghe) è quella di installare sui propri componenti di firmware in grado di offrire supporto allo standard MQTT.

MQTT (Message Queue Telemetry Transport) è uno standard particolarmente apprezzato in domotica personale per prestazioni e semplicità; la sua adozione consente di integrare con estrema facilità (e nel modo preferibile, il Local Push) qualunque componente che lo utilizzi con i più svariati ambienti operativi quali, in domotica, gli HUB personali.

Home Assistant è uno degli HUB personali con i quali è più semplice far dialogare i componenti Shelly sfruttando il protocollo MQTT: in questa guida vedremo come predisporre le funzionalità dello Shelly Dimmer / Dimmer SL (da qui in poi lo chiameremo genericamente “Shelly Dimmer”) e come configurare Home Assistant affinché lo integri in tutte le sue possibili funzioni.

N.b. Sebbene esistano componenti aggiuntivi per integrare “facilmente” i componenti della linea Shelly, la metodologia MQTT qui descritta rimane quella più comprovatamente sicura, efficiente e dai risultati più certi nel tempo – nonché quella che consigliamo caldamente di adottare. In alternativa, è possibile utilizzare il componente ShellyForHASS (vedi guida).

Assunti

Per l’implementazione della presente guida è necessario che sulla propria rete sia presente un broker MQTT; in primis però è importante capire come MQTT funzioni; per far questo, è importante la lettura di questa scheda scritta appositamente per capire il ruolo del broker MQTT all’interno della propria rete – a prescindere dai componenti che supportino MQTT presenti nel proprio ambiente.

Per dotarsi di  un broker e per attivare le funzioni client MQTT su Home Assistant si rimanda a questa guida.

Si assume inoltre che lo/gli Shelly in questione siano già stati installati e poi configurati presso l’app Shelly Cloud (per Android e iOS) e quindi siano già parte della propria rete domestica.

Si parte

Modalità LAN e MQTT

La prima cosa da fare è connettere il nostro Shelly al broker MQTT presente sulla nostra rete (must-have indicato negli assunti). Per farlo è necessario attivare la modalità LAN disponibile sul firmware dell’unità, fornire le coordinate del broker (e gli eventuali username e password di autenticazione).

Per effettuare la configurazione è necessario utilizzare un qualsiasi browser tramite il quale collegarsi all’interfaccia web offerta dall’attuatore. Non è possibile effettuare questa configurazione tramite app mobile, e il perché è semplice: alcune impostazioni (tipo questa) sull’app semplicemente non figurano.

Avremo dunque bisogno dell’indirizzo IP a cui collegarci: lo si potrà trovare facilmente tramite l’interfaccia web del proprio modem/router oppure con un qualsiasi tool di scansione reti (eg. Fing). Se l’IP assegnato sarà (per esempio) il 192.168.1.100, l’interfaccia web alla quale collegarsi sarà disponibile all’indirizzo http://192.168.1.100.

Una volta connessi apparirà un’interfaccia estremamente elementare. Tappare sulla voce “Internet & Security“:

Shelly Cloud - Intenet e security

Entrare poi nella sezione “Advanced – Developer Settings“.
La schermata che segue consente di inserire username, password e indirizzo (e porta) del proprio broker MQTT:

Shelly - Configurazione MQTT

Per quanto riguarda l’indirizzo e porta del server, esso deve essere espresso in termini di IP:PORTA (eg. 192.168.1.100:1883). La porta standard del broker MQTT è 1883 (a meno che non l’abbiate modificata).

Il resto va impostato come da configurazione (raccomandiamo la retain non abilitata e la QoS a 0 oppure a 1 (addirittura 2, in caso di specifiche necessità).

Cliccare poi su “Use Custom MQTT Prefix” per definire il “nome” MQTT dell’attuatore:

Shelly - MQTT - Custom MQTT Prefix

La scelta del nome è personale; si tratta di un passaggio cardine rispetto alla configurazione che effettueremo, successivamente, su Home Assistant.

Una volta completata la configurazione, cliccare su “SAVE“.

N.b. Attivare MQTT – quindi la cosiddetta modalità “LAN” di fatto disconnette il componente dal cloud Shelly, il che non consentirà più di controllare l’unità via app (da remoto, perché localmente continuerà a funzionare). Tale comportamento è più normale: il controllo remoto sarà garantito attraverso Home Assistant e non più dall’app Shelly Cloud.

Modalità d’uso dello Shelly

Prima di passare a Home Assistant, alcune considerazioni lato Shelly sono doverose.

Trattandosi di un attuatore a singolo canale regolabile, esso viene tipicamente utilizzato per controllare un punto luce dimmerabile (anche se può essere usato come solo interruttore acceso/spento): va da sé che la prima integrazione da realizzare sia questa, ovvero dotarsi di uno “Switch” per attivare/disattivare tale punto luce e regolarne l’intensità. Per la precisione utilizzeremo una piattaforma figlia del componente “Light“, ovvero “MQTT Light”, la quale consente di definire entità di tipo “Light” tramite protocollo MQTT.

Secondariamente ma cosa non meno importante, lo Shelly Dimmer è anche un rilevatore di assorbimento elettrico: integrare queste metriche permette di definire:

  • un sensore di assorbimento istantaneo, espresso in Watt;
  • un contatore di consumo giornaliero, espresso in kWh/giorno;
  • un contatore di consumo mensile, espresso in kWh/mese;

inoltre, l’assorbimento può essere utilizzato come strumento per dedurre lo stato di un elettrodomestico.
Infine, l’unità Shelly Dimmer è dotata di un sensore di temperatura e uno di surriscaldamento, entrambi integrabili così da conoscere la temperatura istantanea dall’interno dell’unità ed eventuali pericolosi stati di surriscaldamento.

Nei paragrafi che seguono scopriremo come integrare via MQTT tutti questi diversi elementi.

Home Assistant

Vediamo ora come provvedere all’integrazione dell’attuatore, ipotizzando l’uso come punto regolabile, nonché come sensori di diversa natura sopra descritti.

Punto luce regolabile

Ipotizziamo di aver collegato un punto luce al singolo canale d’uscita dello Shelly Dimmer e un pulsante/interruttore murale per controllarne l’accensione e lo spegnimento (dove la regolazione d’intensità venga effettuata solo via domotica); uno schema elettrico analogo al seguente (o similari), per capirci:

Shelly Dimmer - schema di connessione - 1

L’obiettivo dell’integrazione dev’essere dunque quello di dotarsi, presso Home Assistant, di una entità “Light” la quale non solo agisca sullo Shelly in modo da poter attivare e regolare il canale, ma anche da visualizzarne lo stato operativo aggiornato (acceso/spento) in caso di variazione effettuata tramite i pulsanti/interruttori murali.

Allo scopo utilizzeremo la piattaforma “MQTT Light” usata in modalità template (in quanto è necessario far censire, comprendere e gestire a Home Assistant la percentuale di intensità luminosa impostata/da impostare – e questo lo si fa appunto in modalità template).

L’implementazione è semplice. Sarà infatti sufficiente inserire in configurazione (personalizzandola, come spiegato a seguire) il seguente blocco (integrando le eventuali light già presenti):

light:
  platform: mqtt
  schema: template
  name: Shelly Dimmer
  command_topic: "shellies/NOME_SHELLY/light/0/set"
  state_topic: "shellies/NOME_SHELLY/light/0/status"
  command_on_template: >
    {"turn": "on"
      {% if brightness is defined %} 
        , "brightness": {{ brightness | float | multiply(0.3922) | round(0) }}
      {% endif %}
    }
  state_template: > 
    {% if value_json.ison %}
      on
    {% else %}
      off
    {% endif %}
  brightness_template: "{{ value_json.brightness | float | multiply(2.55) | round(0) }}"
  command_off_template: '{"turn":"off"}'
  qos: 1

Il valore NOME_SHELLY è ovviamente da personalizzare: tale nome viene impostato nella fase di configurazione MQTT già effettuata precedentemente. Ovviamente il tutto è personalizzabile, inclusi (in primis) i nomi dei due interruttori (campo “name“), o per esempio l’icona (campo “icon“, non presente nell’esempio) usando il solito materialicondesign.com per la scelta dell’icona appropriata (di default è una lampadina). QoS, come spesso capita, è impostato a 1 per una maggiore certezza dell’esecuzione dei comandi.

Dopo aver variato la configurazione di Home Assistant, riavviarlo. Verranno create un’entità (nel caso dell’esempio, light.shelly_dimmer). a rappresentazione presso l’interfaccia Lovelace UI è la seguente:

Home Assistant - Shelly Dimmer - via MQTT template

Sensori

Vediamo ora come definire i vari sensori. Si noti però come in ogni configurazione il NOME_SHELLY presente nel codice di configurazione proposto vada personalizzato come spiegato sopra.

ASSORBIMENTO E CONSUMO

Il primo sensore che andremo a definire sarà quello che fornisca alla domotica la lettura istantanea dell’assorbimento espresso in Watt, che ci servirà come fonte alimentante per creare i due contatori (giornaliero e mensile, o altri):
La configurazione è la seguente:

sensor:
  - platform: mqtt
    name: "Shelly Dimmer Assorbimento"
    state_topic: "shellies/NOME_SHELLY/light/0/power"
    unit_of_measurement: "Watt"

Il sensore (chiamato sensor.shelly_dimmer_assorbimento) indicherà, istantaneamente, quanto il carico applicato allo Shelly (ovviamente con l’interruttore su ON) stia assorbendo, in Watt.

N.b. Questa funzione è disponibile solo quando lo Shelly Dimmer è alimentato tramite neutro e fase e non solo fase (come può capitare in caso di modello Shelly Dimmer SL).

Dopo l’implementazione di tale sensore si consideri, ovviamente, la possibilità di implementare delle notifiche legate al superamento di specifiche soglie.

N.b. Quando si parla di sensori di questo tipo si consiglia sempre di valutare l’adozione di misure atte a ridurre il numero di dati scritti sul database.

A questo punto possiamo dotarci di un generico sensore di consumo cumulativo (ottenuto tramite la piattaforma “Integration – Riemann sum integral“) il quale esprima l’assorbimento in kWh:

sensor:
  - platform: integration
    name: "Shelly Dimmer Consumo"
    source: sensor.shelly_dimmer_assorbimento
    unit : "kWh"
    round: 2

Il sensore, chiamato sensor.shelly_dimmer_consumo, riporterà il cumulativo in kWh. Si azzererà ad ogni reboot dello shelly, ma questo non è un problema: al conteggio (giornaliero, mensile o di altri periodi) provvederanno le entità di tipo “Utility Meter” che vedremo ora.

CONSUMO GIORNALIERO

In questo caso sfrutteremo la piattaforma “Utility Meter“, utilizzata per definire dei contabilizzatori.

utility_meter:
  shelly_dimmer_consumo_mensile:
    source: sensor.shelly_dimmer_assorbimento
    cycle: daily

Il sensore utility.meter.shelly_dimmer_consumo_daily riporterà il cumulativo giornaliero espresso in kWh, azzerandosi automaticamente alla mezzanotte (e riportando, nei propri attributi, il consumo giornaliero precedente).

CONSUMO MENSILE

In questo caso sfrutteremo nuovamente la piattaforma “Utility Meter”, ma stavolta per definire un contatore mensile:

utility_meter:
  shelly_dimmer_consumo_mensile:
    source: sensor.shelly_dimmer_assorbimento
    cycle: monthly

Il sensore utility.meter.shelly_dimmer_consumo_mensile riporterà il cumulativo mensile espresso in kWh, azzerandosi automaticamente il primo giorno di ogni mese (e riportando, nei propri attributi, il consumo mensile del mese precedente).

TERMICO

In ultimo è possibile catturare la lettura del sensore termico presente a bordo dello Shelly Dimmer.
Per farlo, il codice di configurazione (il quale utilizza la piattaforma “MQTT Sensor”) è il seguente:

sensor:
- platform: mqtt
  name: "Temperatura Shelly Camera"
  state_topic: "shellies/NOME_SHELLY/temperature"
  value_template: "{{ value }}"
  unit_of_measurement: "°C"
  availability_topic: "shellies/NOME_SHELLY/online"
  payload_available: "true"
  payload_not_available: "false"

Il valore NOME_SHELLY è ovviamente da personalizzare: tale nome viene impostato nella fase di configurazione MQTT già effettuata precedentemente. Ovviamente tutto è personalizzabile, inclusi (in primis) il nome dell’entità (campo “name“, qui valorizzato a “Temperatura Shelly Camera“).

Dopo aver variato la configurazione di Home Assistant, riavviarlo. Verrà creata un’entità di tipo “Sensor” (nel caso dell’esempio, sensor.temperatura_shelly_camera). La rappresentazione presso l’interfaccia Lovelace UI è la seguente:

Home Assistant - Sensor temperatura

Cliccando sull’icona, i dettagli saranno visualizzati come segue:

Home Assistant - Sensor temperatura - Dettagli

N.b. Quando si parla di sensori di questo tipo si consiglia sempre di valutare l’adozione di misure atte a ridurre il numero di dati scritti sul database.
SURRISCALDAMENTO

Ci doteremo infine di un “Binary Sensor” il quale si attivi quando l’unità Shelly Dimmer dovesse segnalare un proprio surriscaldamento:

binary_sensor:
  - platform: mqtt
    name: "Shelly Dimmer Surriscaldamento"
    state_topic: "shellies/NOME_SHELLY/overtemperature"
    payload_on: 1
    payload_off: 0
    device_class: problem
    qos: 0

L’entità derivante, ovvero binary_sensor.shelly_dimmer_surriscaldamento, potrà essere facilmente usata come trigger per una qualsiasi automazione (dalle notifiche allo spegnimento dell’unità stessa, eccetera).

Automazione per il censimento iniziale dello stato

All’avvio, Home Assistant non conosce lo stato dello/degli Shelly; per far in modo che tali stati vengano raccolti immediatamente, aggiungere la seguente automazione all’elenco di quelle esistenti:

- alias: MQTT Announce
  trigger:
  - event: start
    platform: homeassistant
  condition: []
  action:
  - service: mqtt.publish
    data:
      payload: announce
      topic: shellies/command
    

Pubblicando il topic “shellies/command“, tutti gli Shelly presenti sulla rete connessi al broker MQTT risponderanno fornendo il proprio stato.

Ricapitolo telemetrie MQTT

Di seguito la lista dei topic telemetrici MQTT pubblicati (ciclicamente o al cambio di determinati stati) dall’attuatore:

shellies/NOME_SHELLY/light/0 on
shellies/NOME_SHELLY/light/0/status {"ison":true,"has_timer":false,"timer_remaining":0,"mode":"white","brightness":0}
shellies/NOME_SHELLY/temperature XX.XX
shellies/NOME_SHELLY/temperature_f XX.XX
shellies/NOME_SHELLY/overtemperature 0
shellies/NOME_SHELLY/overload 0
shellies/NOME_SHELLY/loaderror 0
shellies/NOME_SHELLY/light/0/power 0.00
shellies/NOME_SHELLY/light/0/energy 0

Comandi speciali

La presenza dello standard MQTT consente agli Shelly di essere configurati e interrogati tramite comandi diretti MQTT (nonché API REST via HTTP). A tale aspetto abbiamo dedicato la scheda che segue:

Shelly, MQTT e HTTP: comandi utili



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.