This script adds MQTT discovery support for Shelly Gen2 and Gen3 devices in the Home Assistant.
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.
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.
- Shelly Plus 1
- Shelly Plus 1 Mini (Gen2 & Gen3)
- Shelly Plus 1PM
- Shelly Plus 1PM Mini (Gen2 & Gen3)
- Shelly Plus 2PM
- Shelly Plus Add-on
- Shelly Plus H&T
- Shelly Plus I4
- Shelly Plus Plug IT
- Shelly Plus Plug S
- Shelly Plus Plug UK
- Shelly Plus Plug US
- Shelly Plus PM Mini (Gen2 & Gen3)
- Shelly Plus Smoke
- Shelly Plus Wall Dimmer
- Shelly Pro 1
- Shelly Pro 1PM
- Shelly Pro 2
- Shelly Pro 2PM
- Shelly Pro 3
- Shelly Pro 3EM
- Shelly Pro 4PM
- Shelly Pro Dimmer 2
- Shelly Pro Dual Cover PM
- Shelly Pro EM
- Shelly Wall Display (relay and thermostat mode)
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:
- enter the device into setup mode (press the button on the device)
- manually run
Shellies Announce Gen2
automation
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
- binary sensor
- button
- climate
- cover
- device trigger
- event
- fan
- light
- sensor
- switch
- update
- the device name is taken from the device configuration
- the relay name is taken from the device configuration
- the relay consumption type is taken from the device configuration (consumption type must contain
light
orfan
to configure light or fan platform) - if the input type is set to button, device automation triggers are available
- custom MQTT prefixes are supported
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.yaml file
python_script:
# automations.yaml file
- id: shellies_announce_gen2
alias: "Shellies Announce Gen2"
trigger:
- platform: homeassistant
event: start
variables:
device_info_payload: "{{ {'id': 1, 'src':'shellies_discovery', 'method':'Shelly.GetConfig'} | to_json }}"
device_ids: # enter the list of device IDs (MQTT prefixes) here
- shellyplus2pm-485519a1ff8c
- custom-prefix/shelly-kitchen
action:
- repeat:
for_each: "{{ device_ids }}"
sequence:
- service: mqtt.publish
data:
topic: "{{ repeat.item }}/rpc"
payload: "{{ device_info_payload }}"
- id: shellies_discovery_gen2
alias: "Shellies Discovery Gen2"
mode: queued
max: 999
trigger:
- platform: mqtt
topic: shellies_discovery/rpc
action:
- service: python_script.shellies_discovery_gen2
data:
id: "{{ trigger.payload_json.src }}"
device_config: "{{ trigger.payload_json.result }}"
- service: mqtt.publish
data:
topic: "{{ trigger.payload_json.result.mqtt.topic_prefix }}/command"
payload: "status_update"