Skip to content

Commit 844ff2c

Browse files
authored
Add mute alarm button for Plus Smoke (#138)
1 parent a480c5e commit 844ff2c

File tree

1 file changed

+36
-17
lines changed

1 file changed

+36
-17
lines changed

python_scripts/shellies_discovery_gen2.py

+36-17
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
ATTR_SWITCH = "switch"
2929
ATTR_UPDATES = "updates"
3030

31+
BUTTON_MUTE_ALARM = "mute_alarm"
3132
BUTTON_RESTART = "restart"
3233
BUTTON_UPDATE_FIRMWARE = "update_firmware"
3334

@@ -59,9 +60,13 @@
5960
EVENT_LONG_PUSH = "long_push"
6061
EVENT_SINGLE_PUSH = "single_push"
6162

63+
HOME_ASSISTANT = "home-assistant"
64+
6265
KEY_AUTOMATION_TYPE = "atype"
6366
KEY_AVAILABILITY = "avty"
6467
KEY_AVAILABILITY_MODE = "avty_mode"
68+
KEY_AVAILABILITY_TEMPLATE = "avty_tpl"
69+
KEY_AVAILABILITY_TOPIC = "avty_t"
6570
KEY_BRIGHTNESS_TEMPLATE = "bri_tpl"
6671
KEY_COMMAND_OFF_TEMPLATE = "cmd_off_tpl"
6772
KEY_COMMAND_ON_TEMPLATE = "cmd_on_tpl"
@@ -269,12 +274,21 @@
269274
EVENT_SINGLE_PUSH: TRIGGER_BUTTON_SHORT_PRESS,
270275
}
271276

277+
DESCRIPTION_BUTTON_MUTE_ALARM = {
278+
KEY_ICON: "mdi:volume-mute",
279+
KEY_ENABLED_BY_DEFAULT: True,
280+
KEY_ENTITY_CATEGORY: ENTITY_CATEGORY_CONFIG,
281+
KEY_NAME: "Mute Alarm",
282+
KEY_PAYLOAD_PRESS: "{{^id^:1,^src^:^{source}^,^method^:^Smoke.Mute^}}",
283+
KEY_AVAILABILITY_TOPIC: TOPIC_STATUS_SMOKE,
284+
KEY_AVAILABILITY_TEMPLATE: "{%if value_json.alarm%}online{%else%}offline{%endif%}",
285+
}
272286
DESCRIPTION_BUTTON_RESTART = {
273287
KEY_DEVICE_CLASS: DEVICE_CLASS_RESTART,
274288
KEY_ENABLED_BY_DEFAULT: True,
275289
KEY_ENTITY_CATEGORY: ENTITY_CATEGORY_CONFIG,
276290
KEY_NAME: "Restart",
277-
KEY_PAYLOAD_PRESS: "{{^id^:1,^src^:^{device_id}^,^method^:^Shelly.Reboot^}}",
291+
KEY_PAYLOAD_PRESS: "{{^id^:1,^src^:^{source}^,^method^:^Shelly.Reboot^}}",
278292
}
279293
DESCRIPTION_BATTERY = {
280294
KEY_DEVICE_CLASS: DEVICE_CLASS_BATTERY,
@@ -564,7 +578,7 @@
564578
KEY_LATEST_VERSION_TEMPLATE: TPL_FIRMWARE_STABLE,
565579
KEY_LATEST_VERSION_TOPIC: TOPIC_STATUS_RPC,
566580
KEY_NAME: "Firmware",
567-
KEY_PAYLOAD_INSTALL: "{{^id^:1,^src^:^{device_id}^,^method^:^Shelly.Update^,^params^:{{^stage^:^stable^}}}}",
581+
KEY_PAYLOAD_INSTALL: "{{^id^:1,^src^:^{source}^,^method^:^Shelly.Update^,^params^:{{^stage^:^stable^}}}}",
568582
KEY_STATE_TOPIC: TOPIC_STATUS_RPC,
569583
KEY_VALUE_TEMPLATE: TPL_INSTALLED_FIRMWARE,
570584
}
@@ -575,7 +589,7 @@
575589
KEY_LATEST_VERSION_TEMPLATE: TPL_FIRMWARE_BETA,
576590
KEY_LATEST_VERSION_TOPIC: TOPIC_STATUS_RPC,
577591
KEY_NAME: "Firmware beta",
578-
KEY_PAYLOAD_INSTALL: "{{^id^:1,^src^:^{device_id}^,^method^:^Shelly.Update^,^params^:{{^stage^:^beta^}}}}",
592+
KEY_PAYLOAD_INSTALL: "{{^id^:1,^src^:^{source}^,^method^:^Shelly.Update^,^params^:{{^stage^:^beta^}}}}",
579593
KEY_STATE_TOPIC: TOPIC_STATUS_RPC,
580594
KEY_VALUE_TEMPLATE: TPL_INSTALLED_FIRMWARE,
581595
}
@@ -825,6 +839,7 @@
825839
SENSOR_FIRMWARE: DESCRIPTION_SLEEPING_SENSOR_FIRMWARE,
826840
SENSOR_SMOKE: DESCRIPTION_SENSOR_SMOKE,
827841
},
842+
ATTR_BUTTONS: {BUTTON_MUTE_ALARM: DESCRIPTION_BUTTON_MUTE_ALARM},
828843
ATTR_SENSORS: {
829844
SENSOR_BATTERY: DESCRIPTION_BATTERY,
830845
SENSOR_LAST_RESTART: DESCRIPTION_SLEEPING_SENSOR_LAST_RESTART,
@@ -1134,10 +1149,10 @@ def get_cover(cover_id, profile):
11341149
KEY_VALUE_TEMPLATE: "{%if value_json.state!=^calibrating^%}{{value_json.state}}{%endif%}",
11351150
KEY_POSITION_TEMPLATE: "{%if is_number(value_json.get(^current_pos^))%}{{value_json.current_pos}}{%endif%}",
11361151
KEY_SET_POSITION_TOPIC: TOPIC_RPC,
1137-
KEY_SET_POSITION_TEMPLATE: f"{{^id^:1,^src^:^{device_id}^,^method^:^Cover.GoToPosition^,^params^:{{^id^:{cover_id},^pos^:{{{{position}}}}}}}}",
1138-
KEY_PAYLOAD_OPEN: f"{{^id^:1,^src^:^{device_id}^,^method^:^Cover.Open^,^params^:{{^id^:{cover_id}}}}}",
1139-
KEY_PAYLOAD_CLOSE: f"{{^id^:1,^src^:^{device_id}^,^method^:^Cover.Close^,^params^:{{^id^:{cover_id}}}}}",
1140-
KEY_PAYLOAD_STOP: f"{{^id^:1,^src^:^{device_id}^,^method^:^Cover.Stop^,^params^:{{^id^:{cover_id}}}}}",
1152+
KEY_SET_POSITION_TEMPLATE: f"{{^id^:1,^src^:^{HOME_ASSISTANT}^,^method^:^Cover.GoToPosition^,^params^:{{^id^:{cover_id},^pos^:{{{{position}}}}}}}}",
1153+
KEY_PAYLOAD_OPEN: f"{{^id^:1,^src^:^{HOME_ASSISTANT}^,^method^:^Cover.Open^,^params^:{{^id^:{cover_id}}}}}",
1154+
KEY_PAYLOAD_CLOSE: f"{{^id^:1,^src^:^{HOME_ASSISTANT}^,^method^:^Cover.Close^,^params^:{{^id^:{cover_id}}}}}",
1155+
KEY_PAYLOAD_STOP: f"{{^id^:1,^src^:^{HOME_ASSISTANT}^,^method^:^Cover.Stop^,^params^:{{^id^:{cover_id}}}}}",
11411156
KEY_AVAILABILITY: availability,
11421157
KEY_UNIQUE_ID: f"{device_id}-{cover_id}".lower(),
11431158
KEY_QOS: qos,
@@ -1162,8 +1177,8 @@ def get_switch(relay_id, relay_type, profile):
11621177
payload = {
11631178
KEY_NAME: relay_name,
11641179
KEY_COMMAND_TOPIC: TOPIC_RPC,
1165-
KEY_PAYLOAD_OFF: f"{{^id^:1,^src^:^{device_id}^,^method^:^Switch.Set^,^params^:{{^id^:{relay_id},^on^:false}}}}",
1166-
KEY_PAYLOAD_ON: f"{{^id^:1,^src^:^{device_id}^,^method^:^Switch.Set^,^params^:{{^id^:{relay_id},^on^:true}}}}",
1180+
KEY_PAYLOAD_OFF: f"{{^id^:1,^src^:^{HOME_ASSISTANT}^,^method^:^Switch.Set^,^params^:{{^id^:{relay_id},^on^:false}}}}",
1181+
KEY_PAYLOAD_ON: f"{{^id^:1,^src^:^{HOME_ASSISTANT}^,^method^:^Switch.Set^,^params^:{{^id^:{relay_id},^on^:true}}}}",
11671182
KEY_STATE_TOPIC: TOPIC_SWITCH_RELAY.format(relay=relay_id),
11681183
KEY_VALUE_TEMPLATE: "{%if value_json.output%}on{%else%}off{%endif%}",
11691184
KEY_STATE_OFF: VALUE_OFF,
@@ -1193,8 +1208,8 @@ def get_relay_light(relay_id, relay_type, profile):
11931208
KEY_SCHEMA: "template",
11941209
KEY_NAME: relay_name,
11951210
KEY_COMMAND_TOPIC: TOPIC_RPC,
1196-
KEY_COMMAND_OFF_TEMPLATE: f"{{^id^:1,^src^:^{device_id}^,^method^:^Switch.Set^,^params^:{{^id^:{relay_id},^on^:false}}}}",
1197-
KEY_COMMAND_ON_TEMPLATE: f"{{^id^:1,^src^:^{device_id}^,^method^:^Switch.Set^,^params^:{{^id^:{relay_id},^on^:true}}}}",
1211+
KEY_COMMAND_OFF_TEMPLATE: f"{{^id^:1,^src^:^{HOME_ASSISTANT}^,^method^:^Switch.Set^,^params^:{{^id^:{relay_id},^on^:false}}}}",
1212+
KEY_COMMAND_ON_TEMPLATE: f"{{^id^:1,^src^:^{HOME_ASSISTANT}^,^method^:^Switch.Set^,^params^:{{^id^:{relay_id},^on^:true}}}}",
11981213
KEY_STATE_TOPIC: TOPIC_SWITCH_RELAY.format(relay=relay_id),
11991214
KEY_STATE_TEMPLATE: "{%if value_json.output%}on{%else%}off{%endif%}",
12001215
KEY_AVAILABILITY: availability,
@@ -1221,7 +1236,7 @@ def get_relay_fan(relay_id, relay_type, profile):
12211236
payload = {
12221237
KEY_NAME: relay_name,
12231238
KEY_COMMAND_TOPIC: TOPIC_RPC,
1224-
KEY_COMMAND_TEMPLATE: f"{{%if value==^ON^%}}{{^id^:1,^src^:^{device_id}^,^method^:^Switch.Set^,^params^:{{^id^:{relay_id},^on^:true}}}}{{%else%}}{{^id^:1,^src^:^{device_id}^,^method^:^Switch.Set^,^params^:{{^id^:{relay_id},^on^:false}}}}{{%endif%}}",
1239+
KEY_COMMAND_TEMPLATE: f"{{%if value==^ON^%}}{{^id^:1,^src^:^{HOME_ASSISTANT}^,^method^:^Switch.Set^,^params^:{{^id^:{relay_id},^on^:true}}}}{{%else%}}{{^id^:1,^src^:^{HOME_ASSISTANT}^,^method^:^Switch.Set^,^params^:{{^id^:{relay_id},^on^:false}}}}{{%endif%}}",
12251240
KEY_STATE_TOPIC: TOPIC_SWITCH_RELAY.format(relay=relay_id),
12261241
KEY_STATE_VALUE_TEMPLATE: "{%if value_json.output%}ON{%else%}OFF{%endif%}",
12271242
KEY_AVAILABILITY: availability,
@@ -1245,8 +1260,8 @@ def get_light(light_id):
12451260
KEY_SCHEMA: "template",
12461261
KEY_NAME: light_name,
12471262
KEY_COMMAND_TOPIC: TOPIC_RPC,
1248-
KEY_COMMAND_OFF_TEMPLATE: f"{{^id^:1,^src^:^{device_id}^,^method^:^Light.Set^,^params^:{{^id^:{light_id},^on^:false}}}}",
1249-
KEY_COMMAND_ON_TEMPLATE: f"{{^id^:1,^src^:^{device_id}^,^method^:^Light.Set^,^params^:{{^id^:{light_id},^on^:true{{%if brightness is defined%}},^brightness^:{{{{brightness|float|multiply(0.3922)|round}}}}{{%endif%}}}}}}",
1263+
KEY_COMMAND_OFF_TEMPLATE: f"{{^id^:1,^src^:^{HOME_ASSISTANT}^,^method^:^Light.Set^,^params^:{{^id^:{light_id},^on^:false}}}}",
1264+
KEY_COMMAND_ON_TEMPLATE: f"{{^id^:1,^src^:^{HOME_ASSISTANT}^,^method^:^Light.Set^,^params^:{{^id^:{light_id},^on^:true{{%if brightness is defined%}},^brightness^:{{{{brightness|float|multiply(0.3922)|round}}}}{{%endif%}}}}}}",
12501265
KEY_STATE_TOPIC: TOPIC_LIGHT.format(light=light_id),
12511266
KEY_STATE_TEMPLATE: "{%if value_json.output%}on{%else%}off{%endif%}",
12521267
KEY_BRIGHTNESS_TEMPLATE: "{{value_json.brightness|float|multiply(2.55)|round}}",
@@ -1452,15 +1467,19 @@ def get_button(button, description):
14521467
payload = {
14531468
KEY_NAME: f"{device_name} {description[KEY_NAME]}",
14541469
KEY_COMMAND_TOPIC: TOPIC_RPC,
1455-
KEY_PAYLOAD_PRESS: description[KEY_PAYLOAD_PRESS].format(device_id=device_id),
1470+
KEY_PAYLOAD_PRESS: description[KEY_PAYLOAD_PRESS].format(source=HOME_ASSISTANT),
14561471
KEY_ENABLED_BY_DEFAULT: str(description[KEY_ENABLED_BY_DEFAULT]).lower(),
14571472
KEY_UNIQUE_ID: f"{device_id}-{button}".lower(),
14581473
KEY_QOS: qos,
1459-
KEY_AVAILABILITY: availability,
14601474
KEY_DEVICE: device_info,
14611475
KEY_DEFAULT_TOPIC: default_topic,
14621476
}
14631477

1478+
if description.get(KEY_AVAILABILITY_TOPIC):
1479+
payload[KEY_AVAILABILITY_TOPIC] = description[KEY_AVAILABILITY_TOPIC]
1480+
payload[KEY_AVAILABILITY_TEMPLATE] = description[KEY_AVAILABILITY_TEMPLATE]
1481+
elif availability:
1482+
payload[KEY_AVAILABILITY] = availability
14641483
if description.get(KEY_DEVICE_CLASS):
14651484
payload[KEY_DEVICE_CLASS] = description[KEY_DEVICE_CLASS]
14661485
if description.get(KEY_ENTITY_CATEGORY):
@@ -1494,7 +1513,7 @@ def get_update(update, description):
14941513
if description.get(KEY_PAYLOAD_INSTALL):
14951514
payload[KEY_COMMAND_TOPIC] = TOPIC_RPC
14961515
payload[KEY_PAYLOAD_INSTALL] = description[KEY_PAYLOAD_INSTALL].format(
1497-
device_id=device_id
1516+
source=HOME_ASSISTANT
14981517
)
14991518
if description.get(KEY_DEVICE_CLASS):
15001519
payload[KEY_DEVICE_CLASS] = description[KEY_DEVICE_CLASS]

0 commit comments

Comments
 (0)