UNPKG

zigbee-herdsman-converters

Version:

Collection of device converters to be used with zigbee-herdsman

457 lines • 19.3 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 semver_1 = require("semver"); const fz = __importStar(require("../converters/fromZigbee")); const tz = __importStar(require("../converters/toZigbee")); const constants = __importStar(require("../lib/constants")); const exposes = __importStar(require("../lib/exposes")); const m = __importStar(require("../lib/modernExtend")); const nodon_1 = require("../lib/nodon"); const reporting = __importStar(require("../lib/reporting")); const e = exposes.presets; const ea = exposes.access; const nodonModernExtend = { calibrationVerticalRunTimeUp: (args) => m.numeric({ name: "calibration_vertical_run_time_up", unit: "10 ms", cluster: "closuresWindowCovering", attribute: { ID: 0x0001, type: zigbee_herdsman_1.Zcl.DataType.UINT16 }, valueMin: 0, valueMax: 65535, scale: 1, access: "ALL", description: "Manuel calibration: Set vertical run time up of the roller shutter. " + "Do not change it if your roller shutter is already calibrated.", zigbeeCommandOptions: { manufacturerCode: 0x128b }, ...args, }), calibrationVerticalRunTimeDowm: (args) => m.numeric({ name: "calibration_vertical_run_time_down", unit: "10 ms", cluster: "closuresWindowCovering", attribute: { ID: 0x0002, type: zigbee_herdsman_1.Zcl.DataType.UINT16 }, valueMin: 0, valueMax: 65535, scale: 1, access: "ALL", description: "Manuel calibration: Set vertical run time down of the roller shutter. " + "Do not change it if your roller shutter is already calibrated.", zigbeeCommandOptions: { manufacturerCode: 0x128b }, ...args, }), calibrationRotationRunTimeUp: (args) => m.numeric({ name: "calibration_rotation_run_time_up", unit: "ms", cluster: "closuresWindowCovering", attribute: { ID: 0x0003, type: zigbee_herdsman_1.Zcl.DataType.UINT16 }, valueMin: 0, valueMax: 65535, scale: 1, access: "ALL", description: "Manuel calibration: Set rotation run time up of the roller shutter. " + "Do not change it if your roller shutter is already calibrated.", zigbeeCommandOptions: { manufacturerCode: 0x128b }, ...args, }), calibrationRotationRunTimeDown: (args) => m.numeric({ name: "calibration_rotation_run_time_down", unit: "ms", cluster: "closuresWindowCovering", attribute: { ID: 0x0004, type: zigbee_herdsman_1.Zcl.DataType.UINT16 }, valueMin: 0, valueMax: 65535, scale: 1, access: "ALL", description: "Manuel calibration: Set rotation run time down of the roller shutter. " + "Do not change it if your roller shutter is already calibrated.", zigbeeCommandOptions: { manufacturerCode: 0x128b }, ...args, }), dryContact: (args) => m.enumLookup({ name: "dry_contact", lookup: { contact_closed: 0x00, contact_open: 0x01 }, cluster: "genBinaryInput", attribute: { ID: 0x055, type: zigbee_herdsman_1.Zcl.DataType.ENUM8 }, description: "State of the contact, closed or open.", ...args, }), impulseMode: (args) => { const resultName = "impulse_mode_configuration"; const resultUnit = "ms"; const resultValueMin = 0; const resultValueMax = 10000; const resultDescription = "Set the impulse duration in milliseconds (set value to 0 to deactivate the impulse mode)."; const result = m.numeric({ name: resultName, unit: resultUnit, cluster: "genOnOff", attribute: { ID: 0x0001, type: zigbee_herdsman_1.Zcl.DataType.UINT16 }, valueMin: resultValueMin, valueMax: resultValueMax, scale: 1, description: resultDescription, zigbeeCommandOptions: { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.NODON }, }); // NOTE: make exposes dynamic based on fw version result.exposes = [ (device, options) => { if (device?.softwareBuildID && (0, semver_1.valid)(device.softwareBuildID) && (0, semver_1.gt)(device.softwareBuildID, "3.4.0")) { return [ e .numeric(resultName, ea.ALL) .withDescription(resultDescription) .withUnit(resultUnit) .withValueMin(resultValueMin) .withValueMax(resultValueMax), ]; } return []; }, ]; return result; }, switchTypeOnOff: (args) => { const resultName = "switch_type_on_off"; const resultLookup = { bistable: 0x00, monostable: 0x01, auto_detect: 0x02 }; const resultDescription = "Select the switch type wire to the device."; const result = m.enumLookup({ name: resultName, lookup: resultLookup, cluster: "genOnOff", attribute: { ID: 0x1001, type: zigbee_herdsman_1.Zcl.DataType.ENUM8 }, description: resultDescription, zigbeeCommandOptions: { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.NODON }, ...args, }); // NOTE: make exposes dynamic based on fw version result.exposes = [ (device, options) => { if (device?.softwareBuildID && (0, semver_1.valid)(device.softwareBuildID) && (0, semver_1.gt)(device.softwareBuildID, "3.4.0")) { return [e.enum(resultName, ea.ALL, Object.keys(resultLookup)).withDescription(resultDescription)]; } return []; }, ]; return result; }, switchTypeWindowCovering: (args) => { const resultName = "switch_type_window_covering"; const resultLookup = { bistable: 0x00, monostable: 0x01, auto_detect: 0x02 }; const resultDescription = "Select the switch type wire to the device."; const result = m.enumLookup({ name: resultName, lookup: resultLookup, cluster: "closuresWindowCovering", attribute: { ID: 0x1001, type: zigbee_herdsman_1.Zcl.DataType.ENUM8 }, description: resultDescription, zigbeeCommandOptions: { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.NODON }, ...args, }); // NOTE: make exposes dynamic based on fw version result.exposes = [ (device, options) => { if (device?.softwareBuildID && (0, semver_1.valid)(device.softwareBuildID) && (0, semver_1.gt)(device.softwareBuildID, "3.4.0")) { return [e.enum(resultName, ea.ALL, Object.keys(resultLookup)).withDescription(resultDescription)]; } return []; }, ]; return result; }, trvMode: (args) => m.enumLookup({ name: "trv_mode", lookup: { auto: 0x00, valve_position_mode: 0x01, manual: 0x02 }, cluster: "hvacThermostat", attribute: { ID: 0x4000, type: zigbee_herdsman_1.Zcl.DataType.ENUM8 }, description: "Select between direct control of the TRV via the `valve_position_mode` " + "or automatic control of the TRV based on the `current_heating_setpoint`. " + "When switched to manual mode the display shows a value from 0 (valve closed) to 100 (valve fully open) " + "and the buttons on the device are disabled.", zigbeeCommandOptions: { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.NXP_SEMICONDUCTORS }, ...args, }), valvePosition: (args) => m.numeric({ name: "valve_position", cluster: "hvacThermostat", attribute: { ID: 0x4001, type: zigbee_herdsman_1.Zcl.DataType.UINT8 }, description: "Directly control the radiator valve when `trv_mode` is set to `valve_position_mode`." + "The values range from 0 (valve closed) to 100 (valve fully open) in %.", valueMin: 0, valueMax: 100, valueStep: 1, unit: "%", scale: 1, zigbeeCommandOptions: { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.NXP_SEMICONDUCTORS }, ...args, }), }; exports.definitions = [ { zigbeeModel: ["IRB-4-1-00"], model: "IRB-4-1-00", vendor: "NodOn", description: "IR Blaster", fromZigbee: [fz.thermostat, fz.fan], toZigbee: [ tz.fan_mode, tz.thermostat_local_temperature, tz.thermostat_occupied_cooling_setpoint, tz.thermostat_occupied_heating_setpoint, tz.thermostat_min_heat_setpoint_limit, tz.thermostat_max_heat_setpoint_limit, tz.thermostat_min_cool_setpoint_limit, tz.thermostat_max_cool_setpoint_limit, tz.thermostat_control_sequence_of_operation, tz.thermostat_system_mode, tz.thermostat_ac_louver_position, ], ota: true, exposes: [ e .climate() .withLocalTemperature() .withSetpoint("occupied_cooling_setpoint", 18, 30, 0.5) .withSetpoint("occupied_heating_setpoint", 16, 30, 0.5) .withSystemMode(["off", "heat", "cool", "auto", "dry", "fan_only"]) .withFanMode(["off", "low", "medium", "high", "auto"]) .withAcLouverPosition(["fully_open", "fully_closed", "half_open", "quarter_open", "three_quarters_open"]), ], configure: async (device, coordinatorEndpoint, logger) => { const endpoint = device.getEndpoint(1); const binds = ["hvacFanCtrl", "genIdentify", "hvacThermostat"]; await reporting.bind(endpoint, coordinatorEndpoint, binds); await reporting.thermostatTemperature(endpoint); await reporting.thermostatOccupiedCoolingSetpoint(endpoint); await reporting.thermostatOccupiedHeatingSetpoint(endpoint); await reporting.thermostatSystemMode(endpoint); await reporting.thermostatAcLouverPosition(endpoint); }, }, { zigbeeModel: ["SDC-4-1-00"], model: "SDC-4-1-00", vendor: "NodOn", description: "Dry contact sensor", extend: [m.battery({ voltageReporting: true }), nodonModernExtend.dryContact()], ota: true, }, { zigbeeModel: ["SDO-4-1-00"], model: "SDO-4-1-00", vendor: "NodOn", description: "Door & window opening sensor", fromZigbee: [fz.battery, fz.ias_contact_alarm_1], toZigbee: [], exposes: [e.contact()], extend: [m.battery({ voltageReporting: true })], ota: true, }, { zigbeeModel: ["SEM-4-1-00"], model: "SEM-4-1-00", vendor: "NodOn", description: "Energy monitoring sensor", extend: [m.electricityMeter()], ota: true, }, { zigbeeModel: ["SIN-4-RS-20", "SIN-4-UNK"], model: "SIN-4-RS-20", vendor: "NodOn", description: "Roller shutter relay switch", extend: [ m.windowCovering({ controls: ["tilt", "lift"], coverMode: true }), nodonModernExtend.calibrationVerticalRunTimeUp(), nodonModernExtend.calibrationVerticalRunTimeDowm(), nodonModernExtend.calibrationRotationRunTimeUp(), nodonModernExtend.calibrationRotationRunTimeDown(), nodonModernExtend.switchTypeWindowCovering(), ], ota: true, }, { zigbeeModel: ["SIN-4-RS-20_PRO"], model: "SIN-4-RS-20_PRO", vendor: "NodOn", description: "Roller shutter relay switch", extend: [ m.windowCovering({ controls: ["tilt", "lift"], coverMode: true }), nodonModernExtend.calibrationVerticalRunTimeUp(), nodonModernExtend.calibrationVerticalRunTimeDowm(), nodonModernExtend.calibrationRotationRunTimeUp(), nodonModernExtend.calibrationRotationRunTimeDown(), nodonModernExtend.switchTypeWindowCovering(), ], ota: true, }, { zigbeeModel: ["SIN-4-1-20"], model: "SIN-4-1-20", vendor: "NodOn", description: "Multifunction relay switch", extend: [m.onOff(), nodonModernExtend.impulseMode(), nodonModernExtend.switchTypeOnOff()], ota: true, }, { zigbeeModel: ["SIN-4-1-20_PRO"], model: "SIN-4-1-20_PRO", vendor: "NodOn", description: "Multifunction relay switch", extend: [m.onOff(), nodonModernExtend.impulseMode(), nodonModernExtend.switchTypeOnOff()], ota: true, }, { zigbeeModel: ["SIN-4-1-21"], model: "SIN-4-1-21", vendor: "NodOn", description: "Multifunction relay switch with metering", extend: [ m.onOff({ powerOnBehavior: true }), m.electricityMeter({ cluster: "metering" }), nodonModernExtend.impulseMode(), nodonModernExtend.switchTypeOnOff(), ], ota: true, }, { zigbeeModel: ["SIN-4-2-20"], model: "SIN-4-2-20", vendor: "NodOn", description: "Lighting relay switch", extend: [ m.deviceEndpoints({ endpoints: { l1: 1, l2: 2 } }), m.onOff({ endpointNames: ["l1", "l2"] }), nodonModernExtend.switchTypeOnOff({ endpointName: "l1" }), nodonModernExtend.switchTypeOnOff({ endpointName: "l2" }), ], ota: true, }, { zigbeeModel: ["SIN-4-2-20_PRO"], model: "SIN-4-2-20_PRO", vendor: "NodOn", description: "Lighting relay switch", extend: [ m.deviceEndpoints({ endpoints: { l1: 1, l2: 2 } }), m.onOff({ endpointNames: ["l1", "l2"] }), nodonModernExtend.switchTypeOnOff({ endpointName: "l1" }), nodonModernExtend.switchTypeOnOff({ endpointName: "l2" }), ], ota: true, }, { zigbeeModel: ["SIN-4-FP-20"], model: "SIN-4-FP-20", vendor: "NodOn", description: "Pilot wire heating module", extend: [m.onOff({ powerOnBehavior: true }), m.electricityMeter({ cluster: "metering" }), ...(0, nodon_1.nodonPilotWire)(true)], ota: true, }, { zigbeeModel: ["SIN-4-FP-21"], model: "SIN-4-FP-21", vendor: "NodOn", description: "Pilot wire heating module", extend: [m.onOff({ powerOnBehavior: true }), m.electricityMeter({ cluster: "metering" }), ...(0, nodon_1.nodonPilotWire)(true)], ota: true, }, { zigbeeModel: ["STPH-4-1-00"], model: "STPH-4-1-00", vendor: "NodOn", description: "Temperature & humidity sensor", extend: [m.battery(), m.temperature(), m.humidity()], ota: true, }, { zigbeeModel: ["TRV-4-1-00"], model: "TRV-4-1-00", vendor: "NodOn", description: "Thermostatic Radiateur Valve", extend: [m.battery(), nodonModernExtend.trvMode(), nodonModernExtend.valvePosition()], fromZigbee: [fz.thermostat], toZigbee: [ tz.thermostat_local_temperature, tz.thermostat_pi_heating_demand, tz.thermostat_local_temperature_calibration, tz.thermostat_occupied_heating_setpoint, tz.thermostat_unoccupied_heating_setpoint, tz.thermostat_min_heat_setpoint_limit, tz.thermostat_max_heat_setpoint_limit, tz.thermostat_setpoint_raise_lower, tz.thermostat_control_sequence_of_operation, tz.thermostat_system_mode, tz.eurotronic_error_status, tz.eurotronic_child_lock, tz.eurotronic_mirror_display, ], exposes: [ e.child_lock(), e .climate() .withLocalTemperature() .withPiHeatingDemand(ea.STATE_GET) .withLocalTemperatureCalibration() .withSetpoint("occupied_heating_setpoint", 7.5, 28.5, 0.5) .withSetpoint("unoccupied_heating_setpoint", 7.5, 28.5, 0.5) .withSystemMode(["off", "auto", "heat"]), e .binary("mirror_display", ea.ALL, "ON", "OFF") .withDescription("Mirror display of the thermostat. Useful when it is mounted in a way where the display is presented upside down."), ], ota: true, configure: async (device, coordinatorEndpoint) => { const endpoint = device.getEndpoint(1); const options = { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.NXP_SEMICONDUCTORS }; await reporting.bind(endpoint, coordinatorEndpoint, ["genPowerCfg", "hvacThermostat"]); await reporting.thermostatTemperature(endpoint); await reporting.thermostatPIHeatingDemand(endpoint); await reporting.thermostatOccupiedHeatingSetpoint(endpoint); await reporting.thermostatUnoccupiedHeatingSetpoint(endpoint); await endpoint.configureReporting("hvacThermostat", [ { attribute: { ID: 0x4008, type: 34 }, minimumReportInterval: 0, maximumReportInterval: constants.repInterval.HOUR, reportableChange: 1, }, ], options); }, }, ]; //# sourceMappingURL=nodon.js.map