Linkind ZS130000078
Model | ZS130000078 |
Vendor | Linkind |
Description | Security keypad battery |
Exposes | battery, voltage, battery_low, occupancy, tamper, action_code, action_transaction, action_zone, action, linkquality |
Picture |
Notes
General
Once the device is turned on, it usually publishes some status messages to z2m that look like this:
info 2022-02-18 19:20:02: MQTT publish: topic 'zigbee2mqtt/LinkindKeypad', payload '{"ac_status":false,"battery":100,"battery_low":false,"linkquality":32,"occupancy":false,"restore_reports":true,"smoke":false,"supervision_reports":true,"tamper":true,"test":false,"trouble":false,"voltage":3000}'
Here it should give you already an overview about the linkquality, battery etc. If nothing is happening after turning on, check your z2m and hardware setup again and retry.
The keypad has a proximity sensor builtin, which turns on the light of the keys and LEDs whenever your hand gets close to it and signals this with a beep as well. At this stage, there is not much you can do with the keypad. Pressing any button has no effect and usually the network LED is blinking orange. After a couple of seconds the keypad gives up and gets back into standby. This repeats until you will pair it and initialize it properly like described below.
In general, once properly setup, the current arm mode on the keypad is shown, by highlighting one of the (dis)arm buttons on the right with a greenish color.
Pairing
In order to pair the keypad with z2m, simply use a paperclip and stick it to the small hole on the back of the keypad and hold it for a couple of seconds until the network LED is blinking green quickly. You find the hole in the area where the wallmounting clip will be placed. Now watch the logs for z2m to see the keypad being interviewed, configured and finally detected as Linkind Keypad device:
Zigbee2MQTT:info 2022-02-16 23:26:21: Device '0x588e81fffe21eede' joined
Zigbee2MQTT:info 2022-02-16 23:26:21: MQTT publish: topic 'zigbee2mqtt/bridge/event', payload '{"data":{"friendly_name":"0x588e81fffe21eede","ieee_address":"0x588e81fffe21eede"},"type":"device_joined"}'
Zigbee2MQTT:info 2022-02-16 23:26:21: Configuring '0x588e81fffe21eede'
Zigbee2MQTT:info 2022-02-16 23:26:21: Starting interview of '0x588e81fffe21eede'
Zigbee2MQTT:info 2022-02-16 23:26:21: MQTT publish: topic 'zigbee2mqtt/bridge/event', payload '{"data":{"friendly_name":"0x588e81fffe21eede","ieee_address":"0x588e81fffe21eede","status":"started"},"type":"device_interview"}'
Zigbee2MQTT:info 2022-02-16 23:26:26: MQTT publish: topic 'zigbee2mqtt/bridge/event', payload '{"data":{"friendly_name":"0x588e81fffe21eede","ieee_address":"0x588e81fffe21eede"},"type":"device_announce"}'
Zigbee2MQTT:error 2022-02-16 23:26:31: Failed to configure '0x588e81fffe21eede', attempt 3 (Error: Bind 0x588e81fffe21eede/1 genPowerCfg from '0x00124b00258db1c4/1' failed (AREQ - ZDO - bindRsp after 10000ms)
at Timeout._onTimeout (..\zigbee2mqtt\node_modules\zigbee-herdsman\src\utils\waitress.ts:64:35)
at listOnTimeout (node:internal/timers:559:17)
at processTimers (node:internal/timers:502:7))
Zigbee2MQTT:info 2022-02-16 23:26:42: Successfully interviewed '0x588e81fffe21eede', device has successfully been paired
Zigbee2MQTT:info 2022-02-16 23:26:42: Device '0x588e81fffe21eede' is supported, identified as: Linkind Security keypad battery (ZS130000078)
As you can see it can happen that it fails a couple of times - then simply wait and retry if needed.
Initialize after pairing
Once the keypad is successfully paired, it will still show the behavior like explained in the general section above. In order to properly initialize it, you have to send the following payload to the MQTT topic you created for it appending /set
:
{
"arm_mode": {
"mode": "disarm"
}
}
This will set the keyboard into disarmed mode, ready to be used as it should be. Now you can actually press one of the (dis)arm buttons on the right, enter a code and press the check symbol. Then you should see a payload containing the action mode, transaction and code.
Whenever you stop z2m, you have to re-send the payload above in order to init it again. I haven't tried it, but maybe sending the actual arm mode state from the service could also work.
Arming/Disarming from the server
To set arming mode publish the following payload to zigbee2mqtt/FRIENDLY_NAME/set
topic:
{
"arm_mode": {
"mode": "arm_all_zones"
}
}
Valid mode
values as per ZCL specifications are disarm
, arm_day_zones
, arm_night_zones
, arm_all_zones
, exit_delay
, entry_delay
, not_ready
, in_alarm
, arming_stay
, arming_night
, arming_away
.
Arming/Disarming from the keypad
When an attempt to set arm mode is done on the keypad, Zigbee2MQTT will publish the following payload to topic zigbee2mqtt/FRIENDLY_NAME
:
{
"action": "arm_all_zones", // This is the example
"action_code": "123", // The code being entered
"action_zone": 0, // The zone being armed (always 0)
"action_transaction": 99 // The transaction number
}
The automation server must validate the request and send a notification to the keypad, confirming or denying the request.
Do so by sending the following payload to zigbee2mqtt/FRIENDLY_NAME/set
:
{
"arm_mode": {
"transaction": 99, // Transaction number (this must be the same as the keypad request `action_transaction`)
"mode": "arm_all_zones" // Mode (this must be the same as the keypad request `action`)
}
}
Valid mode
values are disarm
, arm_day_zones
, arm_all_zones
, invalid_code
, not_ready
, already_disarmed
The automation server must follow the notification with an actual change to the correct arm mode. For the example above, the server should respond with exit_delay
, count the elapsed time (e.g 30 secs), then change mode again to arm_all_zones
(see "Arming/Disarming from the server" section above)
Options
How to use device type specific configuration
occupancy_timeout
: Time in seconds after which occupancy is cleared after detecting it (default 90 seconds). The value must be a number with a minimum value of0
Exposes
Battery (numeric)
Remaining battery in %, can take up to 24 hours before reported. Value can be found in the published state on the battery
property. It's not possible to read (/get
) or write (/set
) this value. The minimal value is 0
and the maximum value is 100
. The unit of this value is %
.
Voltage (numeric)
Voltage of the battery in millivolts. Value can be found in the published state on the voltage
property. It's not possible to read (/get
) or write (/set
) this value. The unit of this value is mV
.
Battery low (binary)
Indicates if the battery of this device is almost empty. Value can be found in the published state on the battery_low
property. It's not possible to read (/get
) or write (/set
) this value. If value equals true
battery low is ON, if false
OFF.
Occupancy (binary)
Indicates whether the device detected occupancy. Value can be found in the published state on the occupancy
property. It's not possible to read (/get
) or write (/set
) this value. If value equals true
occupancy is ON, if false
OFF.
Tamper (binary)
Indicates whether the device is tampered. Value can be found in the published state on the tamper
property. It's not possible to read (/get
) or write (/set
) this value. If value equals true
tamper is ON, if false
OFF.
Action code (numeric)
Pin code introduced.. Value can be found in the published state on the action_code
property. It's not possible to read (/get
) or write (/set
) this value.
Action transaction (numeric)
Last action transaction number.. Value can be found in the published state on the action_transaction
property. It's not possible to read (/get
) or write (/set
) this value.
Action zone (text)
Alarm zone. Default value 23. Value can be found in the published state on the action_zone
property. It's not possible to read (/get
) or write (/set
) this value.
Action (enum)
Triggered action (e.g. a button click). Value can be found in the published state on the action
property. It's not possible to read (/get
) or write (/set
) this value. The possible values are: panic
, disarm
, arm_day_zones
, arm_all_zones
, exit_delay
, entry_delay
.
Linkquality (numeric)
Link quality (signal strength). Value can be found in the published state on the linkquality
property. It's not possible to read (/get
) or write (/set
) this value. The minimal value is 0
and the maximum value is 255
. The unit of this value is lqi
.