bieniu / ha-shellies-discovery-gen2

Script that adds MQTT discovery support for Shellies Gen2 devices
Apache License 2.0
107 stars 20 forks source link
discovery hacktoberfest home-assistant mqtt python python-script shelly

Shellies Discovery Gen2

GitHub Release GitHub All Releases Community Forum Buy me a coffee PayPal_Me

This script adds MQTT discovery support for Shelly Gen2 and Gen3 devices in the Home Assistant.

image

Prerequisites

This script needs Home Assistant python_script component so, if you never used it, I strongly suggest you to follow the official instruction and check that python_script is properly configured and it's working.

For the device to work with the script, it must have MQTT configured and options Enable "MQTT Control", RPC status notifications over MQTT and Generic status update over MQTT enabled.

MQTT integration must be configured in Home Assistant.

Installation

You can download shellies_discovery_gen2.py file and save it in <config>/python_scripts folder or install the script via HACS. You won't find Shellies Discovery Gen2 in the HACS Integrations section, nor add it as a custom repository. You must have a properly configured python_script component to be able to install the script from the HACS Automations section.

Shellies Discovery Gen2 will automatically install/update the script on your Shelly device. Due to python_scripts integration limitations, updating the device script requires the announce automation to run twice.

Supported devices

Battery powered devices

Battery powered devices like Plus H&T are put to sleep most of the time. For this reason, adding/updating entities configuration for a device should be done as follows:

How to debug

To debug the script add this to your logger configuration:

# configuration.yaml file
logger:
  default: error
  logs:
    homeassistant.components.python_script: debug
    homeassistant.components.automation: info
    homeassistant.components.mqtt.discovery: info

Supported platforms

Supported features

Script arguments

key optional type default description
discovery_prefix True string homeassistant MQTT discovery prefix
script_prefix True string MQTT prefix to install the script in the device
qos True integer 0 MQTT QoS, you can use 0, 1 or 2

Configuration

# configuration.yaml file
python_script:

# automations.yaml file
- id: shellies_announce_gen2
  alias: "Shellies Announce Gen2"
  triggers:
    - platform: homeassistant
      event: start
  variables:
    get_config_payload: "{{ {'id': 1, 'src': 'shellies_discovery', 'method': 'Shelly.GetConfig'} | to_json }}"
    get_components_payload: "{{ {'id': 1, 'src': 'shellies_discovery', 'method':'Shelly.GetComponents', 'params': {'include': ['config']}} | to_json }}"
    device_ids:  # enter the list of device IDs (MQTT prefixes) here
      - shellyplus2pm-485519a1ff8c
      - custom-prefix/shelly-kitchen
  actions:
    - repeat:
        for_each: "{{ device_ids }}"
        sequence:
          - action: mqtt.publish
            data:
              topic: "{{ repeat.item }}/rpc"
              payload: "{{ get_config_payload }}"
          - service: mqtt.publish
            data:
              topic: "{{ repeat.item }}/rpc"
              payload: "{{ get_components_payload }}"

- id: shellies_discovery_gen2
  alias: "Shellies Discovery Gen2"
  mode: queued
  max: 999
  triggers:
    - platform: mqtt
      topic: shellies_discovery/rpc
  actions:
    - action: python_script.shellies_discovery_gen2
      data:
        id: "{{ trigger.payload_json.src }}"
        device_config: "{{ trigger.payload_json.result }}"
    - condition: template
      value_template: "{{ 'mqtt' in trigger.payload_json.result }}"
    - service: mqtt.publish
      data:
        topic: "{{ trigger.payload_json.result.mqtt.topic_prefix }}/command"
        payload: "status_update"