UNPKG

zigbee-herdsman-converters

Version:

Collection of device converters to be used with zigbee-herdsman

491 lines • 18.8 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.definitions = void 0; const zigbee_herdsman_1 = require("zigbee-herdsman"); const exposes_1 = require("../lib/exposes"); const logger_1 = require("../lib/logger"); const m = __importStar(require("../lib/modernExtend")); const utils_1 = require("../lib/utils"); const NS = "zhc:yandex"; const manufacturerCode = 0x140a; function enumLookupWithSetCommand(args) { const { name, lookup, cluster, attribute, zigbeeCommandOptions, setCommand } = args; const attributeKey = (0, utils_1.isString)(attribute) ? attribute : attribute.ID; const access = exposes_1.access[args.access ?? "ALL"]; const mExtend = m.enumLookup(args); const toZigbee = [ { key: [name], convertSet: access & exposes_1.access.SET ? async (entity, key, value, meta) => { const payloadValue = (0, utils_1.getFromLookup)(value, lookup); await m.determineEndpoint(entity, meta, cluster).command(cluster, setCommand, { value: payloadValue }, zigbeeCommandOptions); await m.determineEndpoint(entity, meta, cluster).read(cluster, [attributeKey], zigbeeCommandOptions); return { state: { [key]: value } }; } : undefined, convertGet: access & exposes_1.access.GET ? async (entity, key, meta) => { await m.determineEndpoint(entity, meta, cluster).read(cluster, [attributeKey], zigbeeCommandOptions); } : undefined, }, ]; return { ...mExtend, toZigbee }; } function binaryWithSetCommand(args) { const { name, valueOn, valueOff, cluster, attribute, zigbeeCommandOptions, setCommand } = args; const attributeKey = (0, utils_1.isString)(attribute) ? attribute : attribute.ID; const access = exposes_1.access[args.access ?? "ALL"]; const mExtend = m.binary(args); const toZigbee = [ { key: [name], convertSet: access & exposes_1.access.SET ? async (entity, key, value, meta) => { const payloadValue = value === valueOn[0] ? valueOn[1] : valueOff[1]; await m.determineEndpoint(entity, meta, cluster).command(cluster, setCommand, { value: payloadValue }, zigbeeCommandOptions); await m.determineEndpoint(entity, meta, cluster).read(cluster, [attributeKey], zigbeeCommandOptions); return { state: { [key]: value } }; } : undefined, convertGet: access & exposes_1.access.GET ? async (entity, key, meta) => { await m.determineEndpoint(entity, meta, cluster).read(cluster, [attributeKey], zigbeeCommandOptions); } : undefined, }, ]; return { ...mExtend, toZigbee }; } function YandexCluster() { return m.deviceAddCustomCluster("manuSpecificYandex", { ID: 0xfc03, manufacturerCode, attributes: { switchMode: { ID: 0x0001, type: zigbee_herdsman_1.Zcl.DataType.ENUM8 }, switchType: { ID: 0x0002, type: zigbee_herdsman_1.Zcl.DataType.ENUM8 }, powerType: { ID: 0x0003, type: zigbee_herdsman_1.Zcl.DataType.ENUM8 }, ledIndicator: { ID: 0x0005, type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN }, interlock: { ID: 0x0007, type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN }, buttonMode: { ID: 0x0008, type: zigbee_herdsman_1.Zcl.DataType.ENUM8 }, }, commands: { switchMode: { ID: 0x01, parameters: [{ name: "value", type: zigbee_herdsman_1.Zcl.DataType.UINT8 }], }, switchType: { ID: 0x02, parameters: [{ name: "value", type: zigbee_herdsman_1.Zcl.DataType.UINT8 }], }, powerType: { ID: 0x03, parameters: [{ name: "value", type: zigbee_herdsman_1.Zcl.DataType.UINT8 }], }, ledIndicator: { ID: 0x05, parameters: [{ name: "value", type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN }], }, interlock: { ID: 0x07, parameters: [{ name: "value", type: zigbee_herdsman_1.Zcl.DataType.UINT8 }], }, buttonMode: { ID: 0x08, parameters: [{ name: "value", type: zigbee_herdsman_1.Zcl.DataType.UINT8 }], }, }, commandsResponse: {}, }); } function reinterview() { let coordEnd = 1; const configure = [ (device, coordinatorEndpoint, definition) => { coordEnd = coordinatorEndpoint; }, ]; const onEvent = [ async (type, data, device, settings, state, meta) => { if (type === "deviceAnnounce") { // reinterview try { await device.interview(true); logger_1.logger.info(`Successfully interviewed '${device.ieeeAddr}'`, NS); // bind extended endpoint to coordinator for (const endpoint of device.endpoints) { if (endpoint.supportsOutputCluster("genOnOff")) { await endpoint.bind("genOnOff", coordEnd); } } // send updates to clients if (meta) meta.deviceExposesChanged(); } catch (error) { logger_1.logger.error(`Reinterview failed for '${device.ieeeAddr} with error '${error}'`, NS); } } }, ]; return { onEvent, configure, isModernExtend: true }; } exports.definitions = [ { zigbeeModel: ["YNDX-00537"], model: "YNDX_00537", vendor: "Yandex", description: "Single relay", extend: [ reinterview(), YandexCluster(), m.deviceEndpoints({ endpoints: { "1": 1, "": 2 }, }), m.onOff({ endpointNames: ["1"], }), enumLookupWithSetCommand({ name: "power_type", cluster: "manuSpecificYandex", attribute: "powerType", setCommand: "powerType", zigbeeCommandOptions: { manufacturerCode }, description: "Power supply type", lookup: { full: 0x03, low: 0x02, medium: 0x01, high: 0x00, }, entityCategory: "config", }), enumLookupWithSetCommand({ name: "switch_type", cluster: "manuSpecificYandex", attribute: "switchType", setCommand: "switchType", zigbeeCommandOptions: { manufacturerCode }, endpointName: "1", description: "External switch type 1", lookup: { rocker: 0x00, button: 0x01, decoupled: 0x02, }, entityCategory: "config", }), m.commandsOnOff({ endpointNames: [""] }), ], }, { zigbeeModel: ["YNDX-00538"], model: "YNDX_00538", vendor: "Yandex", description: "Double relay", extend: [ reinterview(), YandexCluster(), m.deviceEndpoints({ endpoints: { "1": 1, "2": 2, b1: 3, b2: 4 }, }), m.onOff({ endpointNames: ["1", "2"], }), enumLookupWithSetCommand({ name: "power_type", cluster: "manuSpecificYandex", attribute: "powerType", setCommand: "powerType", zigbeeCommandOptions: { manufacturerCode }, description: "Power supply type", lookup: { full: 0x03, low: 0x02, medium: 0x01, high: 0x00, }, entityCategory: "config", }), binaryWithSetCommand({ name: "interlock", cluster: "manuSpecificYandex", attribute: "interlock", valueOn: ["ON", 1], valueOff: ["OFF", 0], setCommand: "interlock", zigbeeCommandOptions: { manufacturerCode }, description: "Interlock", entityCategory: "config", }), enumLookupWithSetCommand({ name: "switch_type", cluster: "manuSpecificYandex", attribute: "switchType", setCommand: "switchType", zigbeeCommandOptions: { manufacturerCode }, endpointName: "1", description: "External switch type 1", lookup: { rocker: 0x00, button: 0x01, decoupled: 0x02, }, entityCategory: "config", }), enumLookupWithSetCommand({ name: "switch_type", cluster: "manuSpecificYandex", attribute: "switchType", setCommand: "switchType", zigbeeCommandOptions: { manufacturerCode }, endpointName: "2", description: "External switch type 2", lookup: { rocker: 0x00, button: 0x01, decoupled: 0x02, }, entityCategory: "config", }), m.commandsOnOff({ endpointNames: ["b1", "b2"] }), ], }, { zigbeeModel: ["YNDX-00534"], model: "YNDX_00534", vendor: "Yandex", description: "Single gang wireless switch", extend: [ YandexCluster(), m.deviceEndpoints({ endpoints: { down: 1, up: 2 }, }), m.commandsOnOff({ endpointNames: ["up", "down"] }), m.battery(), ], }, { zigbeeModel: ["YNDX-00535"], model: "YNDX_00535", vendor: "Yandex", description: "Double gang wireless switch", extend: [ YandexCluster(), m.deviceEndpoints({ endpoints: { b1_down: 1, b2_down: 2, b1_up: 3, b2_up: 4 }, }), m.commandsOnOff({ endpointNames: ["b1_up", "b1_down", "b2_up", "b2_down"] }), m.battery(), ], }, { zigbeeModel: ["YNDX-00531"], model: "YNDX_00531", vendor: "Yandex", description: "Single gang switch", extend: [ reinterview(), YandexCluster(), m.deviceEndpoints({ endpoints: { "1": 1, down: 2, up: 3 }, }), m.onOff({ endpointNames: ["1"], }), enumLookupWithSetCommand({ name: "power_type", cluster: "manuSpecificYandex", attribute: "powerType", setCommand: "powerType", zigbeeCommandOptions: { manufacturerCode }, description: "Power supply type", lookup: { full: 0x03, low: 0x02, medium: 0x01, high: 0x00, }, entityCategory: "config", }), m.commandsOnOff({ endpointNames: ["up", "down"] }), enumLookupWithSetCommand({ name: "operation_mode", cluster: "manuSpecificYandex", attribute: "switchMode", setCommand: "switchMode", zigbeeCommandOptions: { manufacturerCode }, description: "Switch mode (control_relay - the button control the relay, decoupled - button send events when pressed)", lookup: { control_relay: 0x00, up_decoupled: 0x01, decoupled: 0x02, down_decoupled: 0x03, }, entityCategory: "config", endpointName: "1", }), binaryWithSetCommand({ name: "led_indicator", cluster: "manuSpecificYandex", attribute: "ledIndicator", valueOn: ["ON", 1], valueOff: ["OFF", 0], setCommand: "ledIndicator", zigbeeCommandOptions: { manufacturerCode }, description: "Led indicator", entityCategory: "config", }), ], }, { zigbeeModel: ["YNDX-00532"], model: "YNDX_00532", vendor: "Yandex", description: "Double gang switch", extend: [ reinterview(), YandexCluster(), m.deviceEndpoints({ endpoints: { "1": 1, "2": 2, b1_down: 3, b2_down: 4, b1_up: 5, b2_up: 6 }, }), m.onOff({ endpointNames: ["1", "2"], }), enumLookupWithSetCommand({ name: "power_type", cluster: "manuSpecificYandex", attribute: "powerType", setCommand: "powerType", zigbeeCommandOptions: { manufacturerCode }, description: "Power supply type", lookup: { full: 0x03, low: 0x02, medium: 0x01, high: 0x00, }, entityCategory: "config", }), m.commandsOnOff({ endpointNames: ["b1_up", "b1_down", "b2_up", "b2_down"] }), enumLookupWithSetCommand({ name: "operation_mode", cluster: "manuSpecificYandex", attribute: "switchMode", setCommand: "switchMode", zigbeeCommandOptions: { manufacturerCode }, description: "Switch mode (control_relay - the button control the relay, decoupled - button send events when pressed)", lookup: { control_relay: 0x00, up_decoupled: 0x01, decoupled: 0x02, down_decoupled: 0x03, }, entityCategory: "config", endpointName: "1", }), enumLookupWithSetCommand({ name: "operation_mode", cluster: "manuSpecificYandex", attribute: "switchMode", setCommand: "switchMode", zigbeeCommandOptions: { manufacturerCode }, description: "Switch mode (control_relay - the buttons control the relay, decoupled - buttons send events when pressed)", lookup: { control_relay: 0x00, up_decoupled: 0x01, decoupled: 0x02, down_decoupled: 0x03, }, entityCategory: "config", endpointName: "2", }), binaryWithSetCommand({ name: "led_indicator", cluster: "manuSpecificYandex", attribute: "ledIndicator", valueOn: ["ON", 1], valueOff: ["OFF", 0], setCommand: "ledIndicator", zigbeeCommandOptions: { manufacturerCode }, description: "Led indicator", entityCategory: "config", }), ], }, { zigbeeModel: ["YNDX-00530"], model: "YNDX_00530", vendor: "Yandex", description: "Dimmer", extend: [ YandexCluster(), m.light({ effect: true, powerOnBehavior: true, configureReporting: true, levelReportingConfig: { min: "MIN", max: "MAX", change: 1 }, }), m.lightingBallast(), binaryWithSetCommand({ name: "led_indicator", cluster: "manuSpecificYandex", attribute: "ledIndicator", valueOn: ["ON", 1], valueOff: ["OFF", 0], setCommand: "ledIndicator", zigbeeCommandOptions: { manufacturerCode }, description: "Led indicator", entityCategory: "config", }), enumLookupWithSetCommand({ name: "button_mode", cluster: "manuSpecificYandex", attribute: "buttonMode", setCommand: "buttonMode", zigbeeCommandOptions: { manufacturerCode }, description: "Dimmer button mode", lookup: { general: 0x00, alternative: 0x01, }, entityCategory: "config", }), ], }, ]; //# sourceMappingURL=yandex.js.map