UNPKG

zigbee-herdsman-converters

Version:

Collection of device converters to be used with zigbee-herdsman

384 lines 15.2 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 = __importStar(require("../lib/exposes")); const m = __importStar(require("../lib/modernExtend")); const utils = __importStar(require("../lib/utils")); const e = exposes.presets; const ea = exposes.access; const customAttrIds = { genBasic: { readInterval: 0x0200, nightMode: 0x0240, nightOnTime: 0x0241, nightOffTime: 0x0242, }, msCO2: { control: 0x0220, invert: 0x0221, levelHigh: 0x0222, levelLow: 0x0223, factoryReset: 0x0230, forcedRecalibration: 0x0231, autoCalibration: 0x0232, }, msIlluminanceMeasurement: { control: 0x0220, invert: 0x0221, levelHigh: 0x0222, levelLow: 0x0223, offset: 0x0210, }, msTemperatureMeasurement: { offset: 0x0210, sensor: 0x0211, }, msRelativeHumidity: { offset: 0x0210, }, msPressureMeasurement: { offset: 0x0210, }, }; const tzLocal = { last_boot: { key: ["last_boot"], convertGet: async (entity, key, meta) => { await entity.read("genTime", ["lastSetTime"]); }, }, wifi: { key: ["wifi"], convertGet: async (entity, key, meta) => { await entity.read("genBasic", ["locationDesc"]); }, convertSet: async (entity, key, value, meta) => { await entity.write("genBasic", { locationDesc: value === "ON" ? "1" : "0" }); const retryRead = async (attempts) => { if (attempts > 0) { try { await entity.read("genBasic", ["locationDesc"]); } catch (error) { /* Do nothing */ } setTimeout(() => retryRead(attempts - 1), 10000); } }; retryRead(3); }, }, }; const fzLocal = { last_boot: { cluster: "genTime", type: ["readResponse"], convert: (model, msg, publish, options, meta) => { if (msg.data.lastSetTime) { const data = msg.data.lastSetTime; // Assuming the epoch is January 1, 2000 const epoch = new Date("2000-01-01T00:00:00Z").getTime() / 1000; const date = new Date((epoch + data) * 1000); // Convert seconds to milliseconds const boot_date_time = date.toISOString(); return { last_boot: boot_date_time }; } }, }, wifi: { cluster: "genBasic", type: ["readResponse"], convert: (model, msg, publish, options, meta) => { if (msg.data.locationDesc) { const data = msg.data; const wifi = data.locationDesc && data.locationDesc.trim().length > 0 ? "ON" : "OFF"; return { ip_address: data.locationDesc.trim(), wifi: wifi }; } }, }, }; const optionsLocal = { last_boot_update: () => { return e .numeric("last_boot_update", ea.STATE_SET) .withValueMin(10) .withDescription("Interval for request boot datetime from device. (default 60 seconds)"); }, }; exports.definitions = [ { zigbeeModel: ["Leleka"], model: "Leleka", vendor: "MindY", description: "Advanced Environmental Monitoring Device", ota: true, fromZigbee: [fzLocal.last_boot, fzLocal.wifi], toZigbee: [tzLocal.last_boot, tzLocal.wifi], options: [optionsLocal.last_boot_update()], onEvent: (type, data, device, options) => { const endpoint = device.getEndpoint(1); const poll = async () => { await endpoint.read("genTime", ["lastSetTime"]); await endpoint.read("genBasic", ["locationDesc"]); }; utils.onEventPoll(type, data, device, options, "last_boot_update", 60, poll); }, configure: async (device, coordinatorEndpoint) => { const endpoint = device.getEndpoint(1); for (const [cluster, attributes] of Object.entries(customAttrIds)) { for (const attributeName in attributes) { await endpoint.read(cluster, [attributes[attributeName]]); } } }, extend: [ m.temperature(), m.humidity(), m.pressure(), m.co2(), m.illuminance(), m.light({ configureReporting: true, powerOnBehavior: false, effect: false }), m.identify(), m.numeric({ name: "read_interval", unit: "seconds", valueMin: 5, valueMax: 600, access: "ALL", cluster: "genBasic", attribute: { ID: customAttrIds.genBasic.readInterval, type: zigbee_herdsman_1.Zcl.DataType.UINT16 }, description: "Read interval of sensors. Default 30", entityCategory: "config", }), m.binary({ name: "night_mode", valueOn: ["ON", 1], valueOff: ["OFF", 0], cluster: "genBasic", attribute: { ID: customAttrIds.genBasic.nightMode, type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN }, description: "Turn OFF LED at night", }), m.numeric({ name: "night_on_time", unit: "Hr", valueMin: 0, valueMax: 23, cluster: "genBasic", attribute: { ID: customAttrIds.genBasic.nightOnTime, type: zigbee_herdsman_1.Zcl.DataType.UINT8 }, description: "Night mode activation time", }), m.numeric({ name: "night_off_time", unit: "Hr", valueMin: 0, valueMax: 23, cluster: "genBasic", attribute: { ID: customAttrIds.genBasic.nightOffTime, type: zigbee_herdsman_1.Zcl.DataType.UINT8 }, description: "Night mode deactivation time", }), m.binary({ name: "co2_control", valueOn: ["ON", 1], valueOff: ["OFF", 0], cluster: "msCO2", attribute: { ID: customAttrIds.msCO2.control, type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN }, description: "Enable CO2 bind-control", }), m.binary({ name: "co2_invert", valueOn: ["ON", 1], valueOff: ["OFF", 0], cluster: "msCO2", attribute: { ID: customAttrIds.msCO2.invert, type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN }, description: "Invert CO2 control logic", }), m.numeric({ name: "co2_level_high", unit: "ppm", access: "ALL", cluster: "msCO2", attribute: { ID: customAttrIds.msCO2.levelHigh, type: zigbee_herdsman_1.Zcl.DataType.UINT16 }, description: "High CO2 threshold", precision: 0, valueMin: 400, valueMax: 2000, }), m.numeric({ name: "co2_level_low", unit: "ppm", access: "ALL", cluster: "msCO2", attribute: { ID: customAttrIds.msCO2.levelLow, type: zigbee_herdsman_1.Zcl.DataType.UINT16 }, description: "Low CO2 threshold", precision: 0, valueMin: 400, valueMax: 2000, }), m.binary({ name: "co2_auto_calibration", valueOn: ["ON", 1], valueOff: ["OFF", 0], cluster: "msCO2", attribute: { ID: customAttrIds.msCO2.autoCalibration, type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN }, description: "Automatic self calibration", entityCategory: "config", }), m.numeric({ name: "co2_forced_recalibration", unit: "ppm", valueMin: 0, valueMax: 5000, cluster: "msCO2", attribute: { ID: customAttrIds.msCO2.forcedRecalibration, type: zigbee_herdsman_1.Zcl.DataType.UINT16 }, description: "Start FRC by setting the value", entityCategory: "config", }), m.binary({ name: "co2_factory_reset", valueOn: ["ON", 1], valueOff: ["OFF", 0], cluster: "msCO2", attribute: { ID: customAttrIds.msCO2.factoryReset, type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN }, description: "Factory Reset CO2 sensor", entityCategory: "config", }), m.binary({ name: "lux_control", valueOn: ["ON", 1], valueOff: ["OFF", 0], cluster: "msIlluminanceMeasurement", attribute: { ID: customAttrIds.msIlluminanceMeasurement.control, type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN }, description: "Enable illuminance bind-control", }), m.binary({ name: "lux_invert", valueOn: ["ON", 1], valueOff: ["OFF", 0], cluster: "msIlluminanceMeasurement", attribute: { ID: customAttrIds.msIlluminanceMeasurement.invert, type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN }, description: "Invert illuminance control logic", }), m.numeric({ name: "lux_level_high", unit: "lx", access: "ALL", cluster: "msIlluminanceMeasurement", attribute: { ID: customAttrIds.msIlluminanceMeasurement.levelHigh, type: zigbee_herdsman_1.Zcl.DataType.UINT16 }, description: "High illuminance threshold", valueMin: 100, valueMax: 10000, precision: 0, }), m.numeric({ name: "lux_level_low", unit: "lx", access: "ALL", cluster: "msIlluminanceMeasurement", attribute: { ID: customAttrIds.msIlluminanceMeasurement.levelLow, type: zigbee_herdsman_1.Zcl.DataType.UINT16 }, description: "Low illuminance threshold", valueMin: 100, valueMax: 10000, precision: 0, }), m.numeric({ name: "offset_illuminance", unit: "lx", valueMin: -500, valueMax: 500, valueStep: 1, scale: 1, access: "ALL", cluster: "msIlluminanceMeasurement", attribute: { ID: customAttrIds.msIlluminanceMeasurement.offset, type: zigbee_herdsman_1.Zcl.DataType.INT16 }, description: "Adjust illuminance", entityCategory: "config", }), m.enumLookup({ name: "temperature_sensor", lookup: { CPU: 0, SCD4X: 1, BMP280: 2 }, cluster: "msTemperatureMeasurement", attribute: { ID: customAttrIds.msTemperatureMeasurement.sensor, type: zigbee_herdsman_1.Zcl.DataType.UINT8 }, description: "Active temperature sensor", entityCategory: "config", }), m.numeric({ name: "offset_temperature", unit: "°C", valueMin: -50, valueMax: 50, valueStep: 0.1, scale: 10, access: "ALL", cluster: "msTemperatureMeasurement", attribute: { ID: customAttrIds.msTemperatureMeasurement.offset, type: zigbee_herdsman_1.Zcl.DataType.INT16 }, description: "Adjust temperature", entityCategory: "config", }), m.numeric({ name: "offset_humidity", unit: "%", valueMin: -50, valueMax: 50, valueStep: 0.1, scale: 10, access: "ALL", cluster: "msRelativeHumidity", attribute: { ID: customAttrIds.msRelativeHumidity.offset, type: zigbee_herdsman_1.Zcl.DataType.INT16 }, description: "Adjust humidity", entityCategory: "config", }), m.numeric({ name: "offset_pressure", unit: "kPa", valueMin: -100, valueMax: 100, valueStep: 0.01, scale: 100, access: "ALL", cluster: "msPressureMeasurement", attribute: { ID: customAttrIds.msPressureMeasurement.offset, type: zigbee_herdsman_1.Zcl.DataType.INT16 }, description: "Adjust pressure", entityCategory: "config", }), ], exposes: [ e.text("last_boot", ea.STATE_GET).withDescription("Device boot date and time").withCategory("diagnostic"), e.binary("wifi", ea.ALL, "ON", "OFF").withDescription("Device WiFi state").withCategory("config"), e.text("ip_address", ea.STATE).withDescription("Device IP address").withCategory("diagnostic"), ], }, ]; //# sourceMappingURL=mindy.js.map