Skip to content

[External Converter]: HT-SLM-2 from Heimgard TechnologiesΒ #30462

@88nightrider

Description

@88nightrider

Link

https://heimgard.com/produkt/heimgard-smart-elektronisk-dorlas

Database entry

0xbc026efffe8b6b29

Zigbee2MQTT version

2.7.2 (unknown)

External converter

const exposes = require('zigbee-herdsman-converters/lib/exposes');
const fz = require('zigbee-herdsman-converters/converters/fromZigbee');
const tz = require('zigbee-herdsman-converters/converters/toZigbee');
const reporting = require('zigbee-herdsman-converters/lib/reporting');
const ota = require('zigbee-herdsman-converters/lib/ota');
const e = exposes.presets;

/*
   Mapping av action_user β†’ navn
*/
const userNameMap = {
    0: "Master",
    1: "User 01",
    2: "User 02",
    3: "User 03",
    4: "User 04",
    5: "User 05",
    6: "User 06",
    7: "User 07",
    8: "User 08",
    9: "User 09",
    10: "User 10",
    11: "User 11",
    12: "User 12",
    13: "User 13",
    14: "User 14",
    15: "User 15",
    16: "User 16",
    17: "User 17",
    18: "User 18",
    19: "User 19",
    20: "User 20",
    21: "User 21",
    22: "User 22",
    23: "User 23",
    24: "User 24",
    25: "User 25",
    26: "User 26",
    27: "User 27",
    28: "User 28",
    29: "User 29",
    30: "User 30",
    31: "User 31",
    32: "User 32",
    33: "User 33",
    34: "User 34",
    35: "User 35",
    36: "User 36",
    37: "User 37",
    38: "User 38",
    39: "User 39",
};

/*
   Custom converter som oversetter user-ID til navn
*/
const fzLocal = {
    lock_operation_event_user_name: {
        cluster: 'closuresDoorLock',
        type: ['commandOperationEventNotification'],
        convert: (model, msg, publish, options, meta) => {
            const user = msg.data.user;
            const userName = userNameMap[user] || `Unknown (${user})`;
            return {
                action_user: user,
                action_user_name: userName,
            };
        },
    },
};

module.exports = [
    {
        zigbeeModel: ['HT-SLM-2'],
        model: 'HT-SLM-2',
        vendor: 'Heimgard Technologies',
        description: 'Doorlock with fingerprint - with user name mapping',
        fromZigbee: [
            fz.lock,
            fz.battery,
            fz.lock_pin_code_response,
            fz.lock_user_status_response,
            fz.lock_operation_event,
            fz.lock_programming_event,
            fzLocal.lock_operation_event_user_name, // <-- lagt til
        ],
        toZigbee: [
            tz.lock,
            tz.lock_sound_volume,
            tz.identify,
            tz.pincode_lock,
            tz.lock_userstatus,
            tz.lock_auto_relock_time,
        ],
        meta: { pinCodeCount: 39 },
        ota: ota.zigbeeOTA,

        configure: async (device, coordinatorEndpoint, logger) => {
            const endpoint = device.getEndpoint(1);
            await reporting.bind(endpoint, coordinatorEndpoint, ['closuresDoorLock', 'genPowerCfg']);
            await reporting.lockState(endpoint);
            await reporting.batteryPercentageRemaining(endpoint);
            await endpoint.read('closuresDoorLock', ['lockState', 'soundVolume']);
        },

        exposes: [
            e.lock(),
            e.pincode(),
            e.battery(),
            e.sound_volume(),
            e.auto_relock_time().withValueMin(0).withValueMax(3600),
            e.text('action_user_name', 'r'),  // <--- NY SENSOR
            e.lock_action_user(),
            e.lock_action_source_name(),
        ],
    },
];

What does/doesn't work with the external definition?

Lock/Unlock - works
Battery readout - works
Sound volume - works
Auto relock time - not tested
Pin code - not tested

Notes

software_build_id: undefined
date_code: undefined
endpoints:

{"1":{"clusters":{"input":["genBasic","genPowerCfg","genIdentify","genGroups","genScenes","genPollCtrl","closuresDoorLock"],"output":["genIdentify","genOta"]}}}

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions