Integrazione Home Assistant: Shelly 4 PRO PM via MQTT !

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
 
Configuriamo i sensori Voltage:
 
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
Configuriamo il sensore New Firmware ed esponiamo il Firmware presente all’interno del nostro device:
 
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 }}

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/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'
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 …

 

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 :


Sostienici, dona un caffè al nostro sito

 
 
 
 
 

 

4 risposte

  1. Cristian ha detto:

    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

  2. DAVIDE ha detto:

    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?

    • Alesoft73 ha detto:

      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

Lascia un commento

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

Advertisment ad adsense adlogger