Integrazione Home Assistant: Shelly 4 PRO PM via MQTT !

HassioHelp

Integrazione Home Assistant: Shelly 4 PRO PM via MQTT !

Argomento: IntegrazioneS helly 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

switch:
 
###### relè 1
  - platform: mqtt
    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/available'
 
 
###### relè 2
  - platform: mqtt
    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/available'
 
###### relè 3
  - platform: mqtt
    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/available'
 
###### relè 4
  - platform: mqtt
    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/available'
 

Configuriamo i sensori Power:


sensor:
 
###### Power 1
  - platform: mqtt
    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 - platform: mqtt 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 - platform: mqtt 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 - platform: mqtt 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:


sensor:
###### Energy1 - platform: mqtt 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 - platform: mqtt 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 - platform: mqtt 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 - platform: mqtt 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
 
Configuriamo i sensori Voltage:
 

sensor:
###### Voltage 1 - platform: mqtt 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 - platform: mqtt 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 - platform: mqtt 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 - platform: mqtt 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:


sensor:
- platform: rest resource: http://192.168.1.251/rpc name: Shelly 4 Pro Salotto Status method: POST payload: '{"id":1, "src":"status_connect", "method":"Shelly.GetStatus"}' value_template: "{{ value_json.result.wifi.status|trim != 'disconnected' }}" scan_interval: 300
Configuriamo il sensore New Firmware ed esponiamo il Firmware presente all’interno del nostro device:
 

sensor:
###### Nuovo Firmware - platform: mqtt unique_id: shelly_4pm_new_firmware_mqtt name: "Shelly 4PM New Firmware MQTT" state_topic: 'firmware_up/rpc' value_template: >- {{ value_json.result.sys.available_updates | trim | regex_replace("{*'}*:*","") }}
###### Firmware Presente nel Device - platform: mqtt 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 }}
Eseguiamo Update del firmware, quando ci saranno aggiornamenti con il seguente  script:


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 %}
Questo script vi permetterà di aggiornare lo shelly con la stabile o la beta version, a seconda della versione esposta dal sensore.

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

nell’ “available_topic” degli switch :
 

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/available'
                  payload: 'online'
              - 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/available' payload: 'offline'
Sfruttare gli EVENTI disponibili

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 …

Concludendo, questo Device è degno della nomina “PRO”: è molto stabile e la qualità costruttiva in generale è molto buona

Lo schermo a colori è di ottima fattura e risulta leggibile e ben illuminato.

Questa è una prima integrazione, sicuramente ci saranno dei cambiamenti in quanto Shelly ad oggi con il firmware 0.8.1 esegue continui cambiamenti.

Spero l’articolo possa esservi d’aiuto.

Un grazie a tutti per la vostra attenzione!

Contatti diretti:

Documentazione Ufficiale :


Sostienici, dona un caffè al nostro sito

 
 
 
 
 

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *