Here is a blueprint you can use to repurpose Adeo LDSENK09 key fobs.
Those are zigbee devices similar to Linkind ones and are available at Leroy Merlin under the Lexman Brand and sold to use with the Leroy Merlin Enki ecosystem. They’re supposed to be used to enable/disable an alarm. Since buttons are not recessed, they are painful to use for their initial purpose as it’s easy to press a button by mistake.
Those key fobs can be fairly cheap, right now a pack of 3 is on sale for less than 5 euros in France.
The SOS button sends its payload only after a long press. The other 3 functions on a single press.
blueprint:
name: Adeo LDSENK09 buttons
description: Control devices trough an Adeo LDSENK09
source_url: https://gist.github.com/Chartreusito/bace65d3644543c4833deba88e799372
domain: automation
author: Chartreusito
homeassistant:
min_version: 2024.12.0
input:
section_keyfob:
name: '## Key-Fob selection'
icon: mdi:alarm-panel
description: ''
collapsed: false
input:
controller:
name: Key-Fob
description: The name of the key-fob in Zigbee2MQTT
default: ''
base_topic:
name: Root/Base mqtt topic from Zigbee2MQTT
description: The Root/base topic as configured in Zigbee2MQTT
default: zigbee2mqtt
section_alarm:
name: '## Alarm configuration'
icon: mdi:shield-home
description: ''
collapsed: false
input:
i_action_button_arm_partial_zones:
name: Action for arm home button
selector:
action: {}
default: []
i_action_button_arm_all_zones:
name: Action for arm away button
selector:
action: {}
default: []
i_action_button_disarm:
name: Action for disarm button
selector:
action: {}
default: []
i_action_button_panic:
name: Action for panic (SOS) button
selector:
action: {}
default: []
mode: parallel
max_exceeded: silent
max: 2
trigger_variables:
base_topic: !input base_topic
controller: !input controller
trigger:
- platform: mqtt
topic: '{{ base_topic ~ ''/'' ~ controller }}'
action:
- variables:
command: '{{ trigger.payload_json.action }}'
- choose:
- conditions: '{{ command == ''arm_day_zones'' }}'
sequence: !input i_action_button_arm_partial_zones
- conditions: '{{ command == ''arm_all_zones'' }}'
sequence: !input i_action_button_arm_all_zones
- conditions: '{{ command == ''disarm'' }}'
sequence: !input i_action_button_disarm
- conditions: '{{ command == ''panic'' }}'
sequence: !input i_action_button_panic