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

Integrare Shelly RGBW2 a Home Assistant via MQTT

Scopi della guida:
  • Integrare l’attuatore Shelly RGBW2 all’HUB di domotica personale Home Assistant per consentire il controllo dei sistemi di illuminazione ad esso connessi
  • Livello di difficoltà: medio/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 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: 2.1

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

N.b. La metodologia MQTT qui descritta rimane tra quelle più comprovatamente sicure, efficienti. In assoluto, però, si consiglia l’utilizzo della piattaforma di integrazione inclusa nativamente su Home Assistant, in quanto ormai più che rodata, affidabile e, tutto sommato, più semplice da attuare. Inoltre, essa rende inutile la presenza di un broker MQTT il quale, va da sé, rappresenta un single-point-of-failure in più nella catena d’integrazione.

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.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 componente che prevede svariate modalità di installazione, va da sé che la configurazione per l’integrazione debba essere fatta in relazione all’impianto in uso. Indipendentemente dall’alimentazione in uso (12-24 volt DC o 230 AC), la differenza la fa l’uso di una striscia RGB/RGBW/RGBWW oppure di strisce bianche/LED/lampadine LED installati sui singoli canali (fino a 4 contemporaneamente).

In caso si utilizzino strisce o singoli canali, la configurazione cambia di conseguenza.

Home Assistant

Vediamo ora come provvedere all’integrazione dell’attuatore, ipotizzando l’uso come “striscia” e come “singoli canali”. Inoltre, vedremo l’introduzione di una serie di sensori collegati all’unità.

STRISCIA

Ipotizziamo di aver collegato allo Shelly RGBW2 una striscia LED RGB o RGBW/W (con o senza interruttore di controllo sul contatto “I”).
Uno schema elettrico simile al seguente, per capirci:

Shelly RGBW2 - schema di connessione - DC RGBW LED strip

L’obiettivo dell’integrazione dev’essere dunque quello di dotarsi, presso Home Assistant, di un’entità “Light” la quale consenta l’accensione/spegnimento, la regolazione di intensità luminosa, del colore prescelto, dell’eventuale canale “W” (si possono anche usare semplici strisce RGB) nonché di visualizzare lo stato operativo aggiornato dell’attuatore in caso di variazioni effettuata tramite l’app Shelly Cloud.

Allo scopo utilizzeremo la piattaforma “MQTT Light“.

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

mqtt:
  light:
  retain: false
  qos: 1
  # Online
  availability_topic: "shellies/NOME_SHELLY/online"
  payload_available: "true"
  payload_not_available: "false"

  # ON/OFF
  command_topic: "shellies/NOME_SHELLY/color/0/command"
  state_topic: "shellies/NOME_SHELLY/color/0"
  payload_on: >-
    on
  payload_off: >-
    off

  # RGBW
  rgbw_command_topic: "shellies/NOME_SHELLY/color/0/set"
  rgbw_command_template: >
    {
      "red": {{ red }},
      "green": {{ green }},
      "blue": {{ blue }},
      "white": {{ white }}
    }
  rgbw_state_topic: "shellies/NOME_SHELLY/color/0/status"
  rgbw_value_template: "{{value_json.red}},{{value_json.green}},{{value_json.blue}},{{value_json.white}}"

  # LUMINOSITÀ
  brightness_command_topic: "shellies/NOME_SHELLY/color/0/set"
  brightness_command_template: >
    {
      "gain": {{ value | float | multiply(0.3922) | round(0) }}
    }
  brightness_state_topic: "shellies/NOME_SHELLY/color/0/status"
  brightness_value_template: "{{ value_json.gain | float | multiply(2.55) | round(0) }}"

  # EFFETTI
  effect_command_topic: "shellies/NOME_SHELLY/color/0/set"
  effect_command_template: >
    {
    {% if value == "Off" %}
    "effect": "0"
    {% elif value == "Meteor Shower" %}
    "effect": "1"
    {% elif value == "Gradual Change" %}
    "effect": "2"
    {% elif value == "Flash" %}
    "effect": "3"
    {% endif %}
    }
  effect_state_topic: "shellies/NOME_SHELLY/color/0/status"
  effect_value_template: >-
    {% if value_json.effect == 0 %}
      Off
    {% elif value_json.effect == 1 %}
      Meteor Shower
    {% elif value_json.effect == 2 %}
      Gradual Change
    {% elif value_json.effect == 3 %}
      Flash
    {% endif %}
  effect_list:
    - "Off"
    - "Meteor Shower"
    - "Gradual Change"
    - "Flash"

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) il nome dell’entità (campo “name“), o per esempio l’icona (campo “icon“, non presente nell’esempio) usando il solito materialicondesign.com per la scelta dell’icona appropriata. QoS, come spesso capita, è impostato a 1 per una maggiore certezza dell’esecuzione dei comandi.

Vetrina - Offerte del giorno

SINGOLI CANALI

In questo scenario ipotizziamo di aver installato su uno o più canali, come per esempio schemi di installazioni analoghi ai seguenti:

Shelly RGBW2 - schema di connessione - DC 4x White LED strip
schema con quattro strisce bianche indipendenti a basso voltaggio.

 

Shelly RGBW2 - schema di connessione - AC White LED bulbs
schema con quattro LED raggruppati a coppie su due canali.

 

In questo frangente creeremo tante entità “Light” quanti sono i canali in uso. Il blocco da aggiungere in configurazione si ripete ed è sempre lo stesso:

mqtt:
  light:
  - name: "Shelly RGBW2 Canale 1"
    schema: template
    command_topic: "shellies/NOME_SHELLY/white/0/set"
    state_topic: "shellies/NOME_SHELLY/white/0/status"
    availability:
      topic: "shellies/NOME_SHELLY/online"
      payload_available: 'true'
      payload_not_available: 'false'
    command_on_template: >
      {"turn": "on"
      {%- if brightness is defined -%}
      , "brightness": {{brightness | float | multiply(0.3922) | round(0)}}
      {%- endif -%}
      {%- if red is defined and green is defined and blue is defined -%}
      , "red": {{ red }}, "green": {{ green }}, "blue": {{ blue }}
      {%- endif -%}
      {%- if white_value is defined -%}
      , "white": {{ white_value }}
      {%- endif -%}
      {%- if effect is defined -%}
      , "effect": {{ effect }}
      {%- endif -%}
      }
    command_off_template: '{"turn":"off"}'
    state_template: "{% if value_json.ison %}on{% else %}off{% endif %}"
    brightness_template: "{{ value_json.brightness | float | multiply(2.55) | round(0) }}"
    qos: 2

Ciò che distingue un canale dall’altro sono i campi “command_topic” e “state_topic“: all’interno della loro impostazione va cambiato il numero di canale. Nell’esempio abbiamo indicato il primo (il conteggio parte da 0):

command_topic: “shellies/NOME_SHELLY/white/0/set”
state_topic: “shellies/NOME_SHELLY/white/0/status”

Per creare entità relative ai canali 2, 3 e 4 basterà aggiungere un nuovo blocco come sopra ma specificando il canale appropriato personalizzando “command_topic” e “state_topic“, impostando “1” per il canale 2, “2” per il canale 3 e “3” per il canale 4.

Questa configurazione, presso Home Assistant, consente la creazioen di entità “Light” che consenta l’accensione/spegnimento, la regolazione di intensità luminosa del canale indicato in configurazione, nonché di visualizzare lo stato operativo aggiornato del canale di variazioni effettuata tramite l’app Shelly Cloud.

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 fornirà alla domotica la lettura istantanea dell’assorbimento espresso in Watt (ovvero la potenza), che ci servirà come fonte alimentante per creare i due contatori (giornaliero e mensile, o altri):
La configurazione è la seguente:

mqtt:
  sensor:
  - name: "Shelly RGBW2 Assorbimento"
    state_topic: "shellies/NOME_SHELLY/color/0/power"
    unit_of_measurement: "W"
    state_class: measurement
    device_class: power

Il sensore (chiamato sensor.shelly_rgbw2_assorbimento) indicherà, istantaneamente, quanto il carico applicato allo Shelly (ovviamente con l’interruttore su ON) stia assorbendo, in Watt.
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 il quale esprima l’assorbimento in kWh (ovvero di energia), il quale utilizzi il sensore di assorbimento istantaneo precedentemente definito come sorgente dati:

sensor:
  - platform: integration
    source: sensor.shelly_rgbw2_assorbimento
    name: "Shelly RGBW2 Consumo"
    unit_prefix: k
    round: 2

Il sensore, chiamato sensor.shelly_rgbw2_consumo, riporterà il cumulativo in kWh. Al conteggio (giornaliero, mensile o di altri periodi) provvederanno le entità di tipo “Utility Meter” che vedremo ora.

N.b. Un focus più approfondito dedicatro al calcolo di sensori di energia partendo da quelli di potenza è disponibile qui.
CONSUMO GIORNALIERO

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

utility_meter:
  shelly_rgbw2_consumo_giornaliero:
    source: sensor.shelly_rgbw2_consumo
    cycle: daily

Il sensore utility.meter.shelly_rgbw2_consumo_giornaliero 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_rgbw2_consumo_mensile:
    source: sensor.shelly_rgbw2_consumo
    cycle: monthly

Il sensore utility.meter.shelly_rgbw2_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).

OVERPOWER

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

mqtt:
  binary_sensor:
  - name: "Shelly RGBW2 Overpower"
    state_topic: "shellies/NOME_SHELLY/color/0/overpower"
    payload_on: "1"
    payload_off: "0"
    device_class: "problem"
    qos: 0
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:
  - action: 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 (1st gen), 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. 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.