J'ai déjà parlé ici du système d'alarme Alarmo pour Home Assistant et notamment des commandes possibles pour armer et désarmer le système. Aujourd'hui il s'agira des sirènes.
J'ai trois modèles
- La plus basique est juste branchée sur une prise commandée Zigbee ondulée. Donc un
switch:
vu en tant que siren:
.
- Une sirène Heiman qui sous ZHA décroche régulièrement et que j'ai du appairer à ma seconde passerelle sous Z2M.
- Sous ZHA elle était vue en tant que
siren:
.
- Sous Z2M elle est vue en tant que rien du tout...
- Une sirène SMaBit sous Z2M également vue en rien du tout...
Pour commander une sirène via ZHA HA propose :
- service: siren.turn_on
target:
entity_id:
- siren.heiman_sirene
Pour commander une sirène sous Z2M il faut lui envoyer le payload
correspondant :
- service: mqtt.publish
data:
topic: zigbee2mqtt/Sirène SMaBiT/set
payload: >-
{"warning": {"mode": "fire", "level": "very_high", "strobe_level": "low", "strobe": "false", "strobe_duty_cycle": "10", "duration": "360"}}
Un peu plus compliqué et moins facile à mémoriser, mais ça fonctionne.
Mon objectif a donc été de faire en sorte qu'une sirène Z2M soit vue par Home Assistant comme une sirène ZHA et ainsi pouvoir la commander par un siren.turn_on
comme les autres... Et voici ce que ça donne :
mqtt:
siren:
- unique_id: heiman_sirene_1s
name: Heiman Sirène 1s
state_topic: "zigbee2mqtt/Heiman Sirène 1/set"
command_topic: "zigbee2mqtt/Heiman Sirène 1/set"
optimistic: false
qos: 0
retain: true
state_value_template: "{{ value_json.warning['mode'] }}"
command_template: '{"warning": {"duration": 2, "mode": "burglar", "level": "very_high", "strobe": true}}'
command_off_template: '{"warning": {"duration": 2, "mode": "stop", "level": "very_high", "strobe": true}}'
state_on: "burglar"
state_off: "stop"
Problème, car il y en a un, la sirène Heiman ne retourne aucun état sous Z2M. Il y a beaucoup d'articles à ce sujet, et l'intégration ne semble pas vraiment terminée. Hors dans l'activation il y a une durée, le principe étant d'activer la sirène pour x secondes. Et donc comme elle ne retourne pas son état, son commutateur restera sur ON alors que le délais d'activation est terminé et la prochaine action n'aura aucun effet... De plus certaines sirènes proposent plusieurs fonctions et tonalités (les bips de délais d'armement et désarmement par exemple).
Donc contrairement à ZHA ou l'intégration siren:
peut gérer tous les modes, chercher à gérer une sirène Z2M en tant que siren:
n'a pas de sens... (hormis peut être de bricoler un template:
qui en fonction de la durée d'activation repasserait le commutateur à off, on peut aussi le faire via une automation: mais là ça va alourdir la chose...).
Alternative
S'agissant d'envoyer un payload
à une sirène Z2M, ce que j'ai trouvé de plus logique est un mqtt:/button:
et il faut donc en faire deux :
mqtt:
button:
- unique_id: siren_heiman_1_warning
name: "Sirène Heiman 1 : Waraning"
command_topic: "zigbee2mqtt/Heiman Sirène 1/set"
payload_press: '{"warning": {"duration": 2000, "mode": "burglar", "level": "very_high", "strobe": true}}'
qos: 0
retain: false
entity_category: "config"
device_class: "restart"
- unique_id: siren_heiman_1_stopped
name: "Sirène Heiman 1 : Stopped"
command_topic: "zigbee2mqtt/Heiman Sirène 1/set"
payload_press: '{"warning": {"duration": 2, "mode": "stop", "level": "very_high", "strobe": true}}'
qos: 0
retain: false
entity_category: "config"
device_class: "restart"
Ou plusieurs pour gérer les différents mode de la SMaBit :
mqtt:
button:
- unique_id: siren_smabit_armed
name: "Sirène SMaBit : Armed"
command_topic: "zigbee2mqtt/Sirène SMaBiT/set"
payload_press: '{"squawk": {"state": "system_is_armed", "level": "veryhigh", "strobe": "true"}}'
qos: 0
retain: false
entity_category: "config"
device_class: "restart"
- unique_id: siren_smabit_disarmed
name: "Sirène SMaBit : Disarmed"
command_topic: "zigbee2mqtt/Sirène SMaBiT/set"
payload_press: '{"squawk": {"state": "system_is_disarmed", "level": "veryhigh", "strobe": "true"}}'
qos: 0
retain: false
entity_category: "config"
device_class: "restart"
- unique_id: siren_smabit_warning
name: "Sirène SMaBit : Warning"
command_topic: "zigbee2mqtt/Sirène SMaBiT/set"
payload_press: '{"warning": {"mode": "fire", "level": "very_high", "strobe_level": "low", "strobe": "false", "strobe_duty_cycle": "10", "duration": "360"}}'
qos: 0
retain: false
entity_category: "config"
device_class: "restart"
- unique_id: siren_smabit_stopped
name: "Sirène SMaBit : Stopped"
command_topic: "zigbee2mqtt/Sirène SMaBiT/set"
payload_press: '{"warning": {"mode": "stop"}}'
qos: 0
retain: false
entity_category: "config"
device_class: "restart"
Vous l'aurez compris, il s'agit plus d'un exercice de style qu'autre chose. Mais ça m'aura permis de comprendre comment créer des devices MQTT non reconnus par le discovery:
. Merci @Mathieu pour ta participation !
Sources