Linkind ZS130000078

ModelZS130000078
VendorLinkind
DescriptionSecurity keypad battery
Exposesbattery, voltage, battery_low, occupancy, tamper, action_code, action_transaction, action_zone, action, linkquality
PictureLinkind ZS130000078

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}'
1

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)
1
2
3
4
5
6
7
8
9
10
11
12

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"
    }
}
1
2
3
4
5

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"
    }
}
1
2
3
4
5

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
}
1
2
3
4
5
6

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`)
    }
}
1
2
3
4
5
6

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 of 0

Exposes

Battery (numeric)

Remaining battery in %. 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.