Integrazione Home Assistant: Shelly 4 PRO PM via MQTT !

Argomento: Integrazione Shelly Pro 4PM – MQTT |
Livello: Novizio (Novizio,Esperto, Pro) |
Difficoltà: Bassa (Bassa, Media, Alta) |
Qualcuno ha integrato lo Shelly Pro 4Pm in Home Assistant??
Certo noi di Hassiohelp!!!
Pre requisiti:
- Deve essere configurato un Broker Mqtt (esempio : Mosquitto broker add-on in home assistant)
- Deve essere abilitato il protocollo Mqtt da interfaccia Web (UI) via browser nel dispositivo Shelly.
Come abilitare il protocollo MQTT nel device Shelly:
Accesso via browser, inserendo ip dello Shelly, va selezionata opzione “Network”:
Si seleziona “Mqtt”.
Si imposta il protocollo Mqtt inserendo IP del Broker Mqtt nome e password.
Ricordatevi di prendere nota del topic usato dal device, in questo caso “shellypro4pm-83443dsd”, il quale ci servirà per gestirlo in Home Asssistant.
Il Device:
Spendiamo due parole per questo nuovo device e sulle nuove API che shelly ci mette a disposizione:
Questa è la seconda generazione di dispositivi Shelly.
Vengono chiamati Shelly-NG ed utilizzano un processore migliore, hanno più memoria e offrono prestazioni superiori rispetto ai classici dispositivi Shelly.
Shelly Pro 4 è un dispositivo a quattro canali con un’ampia gamma di funzionalità.
Ogni canale può essere controllato individualmente e supporta l’uso di timer automatici, webhook e pianificazioni.
Il Pro 4PM è munito di attacchi DIN ed è in grado di pilotare quattro uscite da 16A per un totale di 40 A massimi.
Dispone di quattro misuratori di potenza integrati per misurare istantaneamente la potenza e l’energia consumate da ciascun canale.
Permette di leggere il consumo di ogni uscita (al decimo di watt). Sfrutta l’ecosistema costruito attorno al marchio Shelly, compatibile con Amazon Alexa, Apple Homekit, Google Home, MQTT, con molte soluzioni di domotica e assistenti vocali.
Inoltre è il primo ad avere uno schermo a colori da 1,8″, una porta RJ45 e Bluetooth (per il pairing) oltre al consueto Wi-Fi.
Supporta la funzione Bluetooth Low Energy che rende il compito di gestione molto più semplice.
Ha le solite protezioni contro le sovratensioni o il surriscaldamento.
Le sue dimensioni sono 90 x 52 x 57 mm.
Il protocollo:
In questo momento il gruppo di Home Assistant sembra stia facendo le modifiche per integrare il device con il protocollo proprietario RPC (Remote Procedure Calls)
Le RPC (Remote Procedure Calls) vengono utilizzate per inviare comandi ai dispositivi e riceverne le relative notifiche.
Shelly-NG è monitorato e controllato dal protocollo JSON-RPC 2.0 . Questo protocollo è supportato dal sistema operativo Mongoose e la documentazione dettagliata al riguardo può essere trovata qui .
Il protocollo è simmetrico: entrambi i peer possono eseguire delle chiamate con relative notifiche.
Come dice il titolo dell’articolo, ci occuperemo di integrare il nuovo device via MQTT.
Verifichiamo via terminale se lo shelly ha la pubblicazione del topic dello stato abilitata, interrogando lo “status_ntf”.
Digitiamo a terminale il seguente comando:
“curl -X POST -d ‘{“id”:1, “src”:”user_1″, “method”:”Mqtt.GetConfig”}’ http://IP_Shelly/rpc”
Avremmo questa risposta:
In formato Json (vedi immagine)
Nella quale ci viene esposta l’abilitazione o meno dello “status_ntf” true/false
Nel caso in cui sia in “false”, per abilitare lo stato dobbiamo digitare:
“curl -X POST -d ‘{“id”:1, “src”:”user_1″, “method”:”Mqtt.SetConfig”, “params”:{“config”:{“status_ntf”: true}}}’ http://ip_shelly/rpc”
il quale imposterà lo “status_ntf” in “true” come da immagine.
Partiamo con l’integrazione dello switch:
- Tutti i topic con la digitura “shellypro4pm-83443dsd” vanno sostituiti con il vostro, lo trovate all’interno della UI del vostro shelly
mqtt: # Update for Home Assistant 2022.6.XX
switch: ###### relè 1 - unique_id: luce_salotto_1_led name: "Luci Salotto 1 Led" icon: mdi:lightbulb state_topic: "shellypro4pm-83443dsd/status/switch:0" value_template: >- {{ value_json.output }} command_topic: 'shellypro4pm-83443dsd/rpc' qos: 0 payload_on: '{"id": 2,"src":"user_1","method":"Switch.Set","params": {"id":0,"on":true}}' payload_off: '{"id": 2,"src":"user_1","method":"Switch.Set","params": {"id":0,"on":false}}' state_on: true state_off: false optimistic: false retain: false availability_topic: 'shellypro4pm-83443dsd/online' payload_available: 'true' payload_not_available: 'false' ###### relè 2 - unique_id: luce_salotto_2_led name: "Luci Salotto 2 Led" icon: mdi:lightbulb state_topic: "shellypro4pm-83443dsd/status/switch:1" value_template: >- {{ value_json.output }} command_topic: 'shellypro4pm-83443dsd/rpc' qos: 0 payload_on: '{"id": 2,"src":"user_1","method":"Switch.Set","params": {"id":1,"on":true}}' payload_off: '{"id": 2,"src":"user_1","method":"Switch.Set","params": {"id":1,"on":false}}' state_on: true state_off: false optimistic: false retain: false availability_topic: 'shellypro4pm-83443dsd/online' payload_available: 'true' payload_not_available: 'false' ###### relè 3 - unique_id: luce_cucina name: "Luci Cucina" icon: mdi:lightbulb state_topic: "shellypro4pm-83443dsd/status/switch:2" value_template: >- {{ value_json.output }} command_topic: 'shellypro4pm-83443dsd/rpc' qos: 0 payload_on: '{"id": 2,"src":"user_1","method":"Switch.Set","params": {"id":2,"on":true}}' payload_off: '{"id": 2,"src":"user_1","method":"Switch.Set","params": {"id":2,"on":false}}' state_on: true state_off: false optimistic: false retain: false availability_topic: 'shellypro4pm-83443dsd/online' payload_available: 'true' payload_not_available: 'false' ###### relè 4 - unique_id: luce_cucina_2 name: "Luci Cucina 2" icon: mdi:lightbulb state_topic: "shellypro4pm-83443dsd/status/switch:3" value_template: >- {{ value_json.output }} command_topic: 'shellypro4pm-83443dsd/rpc' qos: 0 payload_on: '{"id": 2,"src":"user_1","method":"Switch.Set","params": {"id":3,"on":true}}' payload_off: '{"id": 2,"src":"user_1","method":"Switch.Set","params": {"id":3,"on":false}}' state_on: true state_off: false optimistic: false retain: false availability_topic: 'shellypro4pm-83443dsd/online' payload_available: 'true' payload_not_available: 'false'
Configuriamo i sensori Power:
mqtt: sensor: ###### Power 1 - unique_id: power_salotto_1 name: "Power Salotto 1" unit_of_measurement: "W" device_class: power state_topic: "shellypro4pm-83443dsd/status/switch:0" value_template: >- {{ value_json.apower | float(default=0) | round(2) }} ###### Power 2 - unique_id: power_salotto_2 name: "Power Salotto 2" unit_of_measurement: "W" device_class: power state_topic: "shellypro4pm-83443dsd/status/switch:1" value_template: >- {{ value_json.apower | float(default=0) | round(2) }} ###### Power 3 - unique_id: power_cucina name: "Power Cucina" unit_of_measurement: "W" device_class: power state_topic: "shellypro4pm-83443dsd/status/switch:2" value_template: >- {{ value_json.apower| float(default=0) | round(2) }} ###### Power 4 - unique_id: power_cucina_2 name: "Power Cucina 2" unit_of_measurement: "W" device_class: power state_topic: "shellypro4pm-83443dsd/status/switch:3" value_template: >- {{ value_json.apower| float(default=0) | round(2) }}
Configuriamo i sensore Energy:
mqtt:
sensor: ###### Energy1 - unique_id: energy_salotto_1_led name: "Energy Salotto 1 Led" state_topic: "shellypro4pm-83443dsd/status/switch:0" unit_of_measurement: "Wh" value_template: >- {{ value_json.aenergy.total | float(default=0) | round(2) }} state_class: total_increasing device_class: energy ###### Energy2 - unique_id: energy_salotto_2_led name: "Energy Salotto 2 Led" state_topic: "shellypro4pm-83443dsd/status/switch:1" unit_of_measurement: "Wh" value_template: >- {{ value_json.aenergy.total | float(default=0) | round(2) }} state_class: total_increasing device_class: energy ###### Energy3 - unique_id: energy_cucina name: "Energy Cucina" state_topic: "shellypro4pm-83443dsd/status/switch:2" unit_of_measurement: "Wh" value_template: >- {{ value_json.aenergy.total | float(default=0) | round(2) }} state_class: total_increasing device_class: energy ###### Energy4 - unique_id: energy_cucina_2 name: "Energy Cucina 2" state_topic: "shellypro4pm-83443dsd/status/switch:3" unit_of_measurement: "Wh" value_template: >- {{ value_json.aenergy.total | float(default=0) | round(2) }} state_class: total_increasing device_class: energy
mqtt: sensor: ###### Voltage 1 - unique_id: voltage_salotto_1 name: "Voltage Salotto 1" state_topic: "shellypro4pm-83443dsd/status/switch:0" unit_of_measurement: "V" value_template: >- {{ value_json.voltage | float(default=0) | round(2) }} state_class: measurement device_class: voltage ###### Voltage 2 - unique_id: voltage_salotto_2 name: "Voltage Salotto 2" state_topic: "shellypro4pm-83443dsd/status/switch:1" unit_of_measurement: "V" value_template: >- {{ value_json.voltage | float(default=0) | round(2) }} state_class: measurement device_class: voltage ###### Voltage 3 - unique_id: voltage_cucina name: "Voltage Cucina" state_topic: "shellypro4pm-83443dsd/status/switch:2" unit_of_measurement: "V" value_template: >- {{ value_json.voltage | float(default=0) | round(2) }} state_class: measurement device_class: voltage ###### Voltage 4 - unique_id: voltage_cucina_2 name: "Voltage Cucina 2" state_topic: "shellypro4pm-83443dsd/status/switch:3" unit_of_measurement: "V" value_template: >- {{ value_json.voltage | float(default=0) | round(2) }} state_class: measurement device_class: energy state_class: measurement device_class: voltage
Creiamo ora il sensore “On-Line” device, ci permette di sapere se lo Shelly è connesso alla rete:
binary_sensor: - platform: rest resource: http://192.168.1.251/rpc name: Shelly 4 Pro Salotto Status
device_class: connectivity method: POST payload: '{"id":1, "src":"status_connect", "method":"Shelly.GetStatus"}' value_template: "{{ value_json.result.wifi.status|trim != 'disconnected' }}" scan_interval: 300
mqtt:
sensor: ###### Nuovo Firmware - unique_id: shelly_4pm_new_firmware_mqtt name: "Shelly 4PM New Firmware MQTT" state_topic: 'firmware_up/rpc' value_template: >- {% set fw = value_json.result.sys.available_updates %} {{ fw | trim | regex_replace("{*'}*:*","") if fw|trim != "{}" else "Firmware Update" }}
###### Firmware Presente nel Device - unique_id: shelly_4pm_firmware_on_mqtt name: "Shelly 4PM Firmware On MQTT" state_topic: 'firmware_on/rpc' value_template: >- {{ value_json.result.fw_id }}
script: update_shelly_4pm: alias: "Shelly 4 Pm Update Firmware" sequence: - service: mqtt.publish data: topic: 'shellypro4pm-83443dsd/rpc' payload_template: >- {"id":1, "src":"user_1", "method":"Shelly.Update", "params":{"stage": {%- if "stable" is in states("sensor.shelly_4pm_new_firmware_mqtt") -%} "stable"}}{% else %}"beta"}}{% endif %}
Ne caso in cui vogliate aggiornare sempre e solo con la versione “stable”, basterà sostituire il “PAYLOAD_TEMPLATE” con il seguente:
payload_template: >- {"id":1, "src":"user_1", "method":"Shelly.Update", "params":{"stage":"stable"}}
E’ necessario inserire anche la seguente automazione la quale popolerà il sensore “firmware” e i vari stati online/offline
automation: - id: BEA112B123764-9123992-4123CDC-81113A120F-1AD5DCC121279D9C alias: Shelly 4pm sync switch initial_state: true mode: single max_exceeded: silent trigger: - platform: homeassistant event: start - platform: mqtt topic: "shellypro4pm-83443dsd/status/switch:0" - platform: state entity_id: binary_sensor.shelly_4_pro_salotto_status action: - choose: - conditions: - condition: template value_template: "{{ is_state('binary_sensor.shelly_4_pro_salotto_status','on') }}" sequence: - service: mqtt.publish data: topic: 'shellypro4pm-83443dsd/online' payload: 'true' - service: mqtt.publish data: topic: 'shellypro4pm-83443dsd/rpc' payload: '{"id":1, "src":"firmware_up", "method":"Shelly.GetStatus"}' - service: mqtt.publish data: topic: 'shellypro4pm-83443dsd/rpc' payload: '{"id":1, "src":"firmware_on", "method":"Shelly.GetDeviceInfo"}' default: - service: mqtt.publish data: topic: 'shellypro4pm-83443dsd/online' payload: 'false'
Impostiamo in “detached” il device come da immagine, all’interno della UI dello shelly:
(detached: significa che lo switch è separato dal relè )
Avremmo a disposizione i seguenti eventi per ogni singlo switch:
- single_push
- double_push
- long_push
Ecco un esempio di automazione che sfrutta l’evento ‘double_push’ dello switch 2 (relè 3 = input:2):
automation: - id: 7B05302E-81DE-4117-BEC0-841925177B30 alias: pulsante 2 click initial_state: true trigger: - platform: mqtt topic: "shellypro4pm-83443dsd/events/rpc" payload: "double_push" value_template: "{{ value_json.params.events[0].event }}" condition: - condition: template value_template: > {% set value_json = trigger.payload | from_json %} {{ value_json.params.events[0].component == 'input:2' }} action: - service: switch.turn_off data: entity_id: - switch.luci_salotto_2_led - switch.luci_salotto_1_led
Con il doppio “push” dello switch 2 (relè 3 = input:2 ) spegneremo le due luci inserite in “entity_id”.
Ovviamente le possibilità, avvalendosi di un’automazione, diventano infinite …
Configurare la luminosità Display (per firmware superiori “0.9”)
Con l’ultimo aggiornamento firmware (0.9X) è stato aggiunto un nuovo “UI” con il quale è possibile impostare la luminosità del display dello Shelly in modalità “riposo”.
Per facilitare le cose ho creato un input number con il quale è possibile selezionare, con valori da 0 a 100 , la luminosità.
L’ automazione invierà il payload , ad ogni movimento dello slider, per impostare il valore del display:
input_number:
screen_light_4pm:
name: "Screen Light Select"
min: 0
max: 100
step: 10
automation:
– id: 12e9e73faf-c1c3-447e-bd03-bbb9a303f4c3
alias: Set Shelly LCD Display
initial_state: true
mode: restart
trigger:
– platform: state
entity_id: input_number.screen_light_4pm
action:
– delay: “00:00:02”
– service: mqtt.publish
data:
topic: “shellypro4pm-84cca87e46ec/rpc”
payload: >-
{“id”:1, “src”:”user_1″, “method”:”UI.SetConfig”, “params”:{“config”:{“idle_brightness”: {{states(‘input_number.screen_light_4pm’)|int(default=0)}}}}}
Concludendo, questo Device è degno della nomina “PRO”: è molto stabile e la qualità costruttiva in generale è buona
Lo schermo a colori è di ottima fattura e risulta leggibile e ben illuminato.
Spero l’articolo possa esservi d’aiuto.
Un grazie a tutti per la vostra attenzione!
Contatti diretti:
Documentazione Ufficiale :
4pm Home Assistant integrazione mqtt pm4 shelly shelly 4 shelly pm
4 risposte
Ciao, bellissima guida e molto utile.
Una sola domanda, se io imposto lo shelly in modalità detached come hai fatto tu nella guida e poi utilizzo dei pulsanti a muro di tipo momentary switch, c’è modo di sapere quando accendere o spegnere le luci specificate nel campo identity ?
Cordiali saluti
Cristian
Grazie.
Devo capire come lo stai gestendo; in ogni caso hai il feedback dell’attivazione relè nell’entità di Home Asssitant.
Se hai bisogno contattami pure https://t.me/Alesoft73, cosi’ mi spieghi meglio.
Saluti e grz
ciao
ho un problema con l’integrazione, praticamente ogni volta che riavvio home assistant, le 4 entità dello shelly 4 pro pm ,risultano bloccate.
Per farle funzionare devo sempre riavviare il broker mqtt e cosi riparte tutto fino a quando riavvio home assistant.
Quale può essere il problema?
Buongiorno
la guida va seguita nella sua interezza.
Il binary sensor “ON-LINE” da lo stato all’automazioen che manda i topic per abilitare le entità.
Infatti l’automazione della guida riporta il trigger
“- platform: homeassistant
event: start”
Il quale fa triggare automazione all’avvio di HA e dare i vari stati allo shelly.
Controlli bene cio’ che ha inserito, in quanto integrazione Shelly la uso tutt’oggi senza nessun problema.
In caso mi contatti via telegram.
Saluti