community italiana di domotica personale
 
Integrare Shelly 1L a Home Assistant via MQTT

Integrare Shelly 1L a Home Assistant via MQTT

Scopi della guida:
  • Integrare l’attuatore Shelly 1L all’HUB di domotica personale Home Assistant
  • 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 indicata per utenti con installazione:
Ambiente Home Assistant HassOS-Supervised-Core
NOTE E DISCLAIMER
  • qualsiasi eventuale modifica agli impianti domestici dev'essere progettata ed 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;
  • questa pagina è materialmente scritta e manutenuta da più individui: non ci si aspetti né si pretenda un supporto personale. In presenza di difficoltà, chiedere supporto alla community sul nostro forum o sulla nostra chat.
Revisione guida: 1.1

Shelly 1L - 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 1L e come configurare Home Assistant affinché lo integri in tutte le sue possibili funzioni.

N.b. Sebbene esistano componenti specifici per integrare “facilmente” i device della linea Shelly (come per esempio quello nativo di Home Assistant), 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 anche il componente ShellyForHASS (vedi guida) o altri.

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 configurati fornendogli accesso alla propria rete Wi-Fi, cosa che può essere fatta sia tramite l’app Shelly Cloud (per Android e iOS)  sia attraverso l’access point da essi fornito a fronte di un reset alle impostazioni di fabbrica.

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.1: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, esso viene tipicamente utilizzato per controllare un punto luce, una presa elettrica o comunque un carico generico (ma mai superiore ai 4.1 Ampere): va da sé che l’integrazione da realizzare sia questa, ovvero dotarsi di uno “Switch” per attivare/disattivare tale interruttore.

Inoltre, Shelly 1L consente di censire lo stato dei pulsanti/interruttori manuali ad esso eventualmente collegati. Questo risulta utile per innescare, eventualmente, delle automazioni all’interno di Home Assistant (o altro). Infine, integreremo anche i sensori di surriscaldamento e di sovraccarico presenti.

Nei paragrafi che seguono scopriremo come integrare via MQTT queste funzionalità.

N.b. A differenza del modello Shelly 1PM, lo Shelly 1L non dispone di sensore rilevazione di assorbimento elettrico istantaneo. In realtà abbiamo appurato che, indicando presso il pannello web dell’attuatore il carico “previsto” (eg. 25 watt), tale valore viene sempre riportato tramite la telemetria shellies/NOME_SHELLY/relay/0/power. Tale valore, ovviamente, non deve essere inteso come reale assorbimento istantaneo, ma solo come un valore riportato manualmente.

Home Assistant

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

Relè

Ipotizziamo di aver collegato un carico al singolo canale d’uscita dello Shelly 1 e un pulsante/interruttore murale per controllare il canale.

L’obiettivo dell’integrazione dev’essere dunque quello di dotarsi, presso Home Assistant, di uno “Switch” il quale non solo agisca sullo Shelly in modo da poter attivarne il relè, ma anche da visualizzarne lo stato operativo aggiornato in caso di variazione effettuata tramite i pulsanti/interruttori murali.

Allo scopo utilizzeremo la piattaforma “MQTT Switch“.

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

mqtt:
  switch:
  - name: "Interruttore"
    state_topic: "shellies/NOME_SHELLY/relay/0"
    command_topic: "shellies/NOME_SHELLY/relay/0/command"
    availability_topic: "shellies/NOME_SHELLY/online"
    qos: 1
    value_template: "{% if value == 'on' %} on {% else %} off {% endif %}" 
    payload_on: "on"
    payload_off: "off"
    payload_available: "true"
    payload_not_available: "false"
    optimistic: false
    retain: false

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“) usando il solito materialicondesign.com per la scelta dell’icona appropriata (in questo caso, una lampadina).

QoS, come spesso capita, è impostato a 1 per una maggiore certezza dell’esecuzione dei comandi.

Stato interruttori/pulsanti

Oltre allo stato dell’interruttore intelligente è possibile, tramite Shelly 1L, censire lo stato degli interruttori o pulsanti eventualmente collegati fisicamente all’unità, ovvero la posizione degli stessi (0/1).

Per farlo useremo un “Binary Sensor“:

mqtt:
  binary_sensor:
  - name: "Shelly 1L - Stato comando esterno 1"
    payload_on: "on"
    payload_off: "off"
    device_class: power
    state_topic: "shellies/NOME_SHELLY/input/0"
    value_template: "{% if value == '1' %} on {% else %} off {% endif %}" 
    payload_on: "on"
    payload_off: "off"
    payload_available: "true"
    payload_not_available: "false"

  - name: "Shelly 1L - Stato comando esterno 2"
    state_topic: "shellies/NOME_SHELLY/input/1" 
    payload_on: "on"
    payload_off: "off"
    value_template: "{% if value == '1' %} on {% else %} off {% endif %}" 
    payload_available: "true"
    payload_not_available: "false"
    device_class: power 

Questo può essere utile in caso – tramite la configurazione dell’attuatore – gli interruttori/pulsanti vogliano essere usato solo come comando virtuale da utilizzare in domotica e non per innescare il relè dell’attuatore stesso ma piuttosto altre funzioni. Un po’ come fa lo Shelly i3, per capirci.

Sensori

TERMICO

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

mqtt:
  sensor:
  - name: "Temperatura Shelly Camera"
    state_topic: "shellies/NOME_SHELLY/temperature"
    availability_topic: "shellies/NOME_SHELLY/online"
    value_template: "{{ value }}"
    unit_of_measurement: "°C"
    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 dell’HUB è 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 poi di un “Binary Sensor” il quale si attivi quando l’unità Shelly 1L dovesse segnalare un proprio surriscaldamento:

mqtt:
  binary_sensor:
  - name: "Shelly Surriscaldamento"
    state_topic: "shellies/NOME_SHELLY/overtemperature"
    payload_on: 1
    payload_off: 0
    availability_topic: "shellies/NOME_SHELLY/online"
    payload_available: "true"
    payload_not_available: "false"
    device_class: problem
    qos: 1

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

OVERPOWER

Ci doteremo infine di un ulteriore “Binary Sensor” il quale si attivi quando l’unità Shelly 1L dovesse segnalare un problema di sovraccarico:

mqtt:
  binary_sensor:
  - name: "Shelly Overpower"
    state_topic: "shellies/NOME_SHELLY/relay/0"
    value_template: "{% if value == 'overpower' %} on {% else %} off {% endif %}"
    payload_on: "on"
    payload_off: "off"
    availability_topic: "shellies/NOME_SHELLY/online"
    payload_available: "true"
    payload_not_available: "false"
    device_class: "problem"
    qos: 0

Nota: a differenza di Shelly 1PM, per questo attuatore non è possibile modificare il valore di “PROTEZIONE MASSIMA POTENZA“.

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:

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

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

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



⚠️ 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. Se ti sei perso, a tua disposizione c'è la mappa.
Telegram News Channel