UNPKG

zigbee-herdsman-converters

Version:

Collection of device converters to be used with zigbee-herdsman

624 lines 33.4 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 (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const zigbee_herdsman_1 = require("zigbee-herdsman"); const exposes = __importStar(require("../lib/exposes")); const fromZigbee_1 = __importDefault(require("../converters/fromZigbee")); const legacy = __importStar(require("../lib/legacy")); const toZigbee_1 = __importDefault(require("../converters/toZigbee")); const reporting = __importStar(require("../lib/reporting")); const globalStore = __importStar(require("../lib/store")); const constants = __importStar(require("../lib/constants")); const utils = __importStar(require("../lib/utils")); const modernExtend_1 = require("../lib/modernExtend"); const logger_1 = require("../lib/logger"); const NS = 'zhc:sunricher'; const e = exposes.presets; const ea = exposes.access; const fzLocal = { sunricher_SRZGP2801K45C: { cluster: 'greenPower', type: ['commandNotification', 'commandCommissioningNotification'], convert: (model, msg, publish, options, meta) => { const commandID = msg.data.commandID; if (utils.hasAlreadyProcessedMessage(msg, model, msg.data.frameCounter, `${msg.device.ieeeAddr}_${commandID}`)) return; if (commandID === 224) return; const lookup = { 0x21: 'press_on', 0x20: 'press_off', 0x37: 'press_high', 0x38: 'press_low', 0x35: 'hold_high', 0x36: 'hold_low', 0x34: 'high_low_release', 0x63: 'cw_ww_release', 0x62: 'cw_dec_ww_inc', 0x64: 'ww_inc_cw_dec', 0x41: 'r_g_b', 0x42: 'b_g_r', 0x40: 'rgb_release', }; if (!lookup.hasOwnProperty(commandID)) { logger_1.logger.error(`Missing command '0x${commandID.toString(16)}'`, NS); } else { return { action: utils.getFromLookup(commandID, lookup) }; } }, }, }; async function syncTime(endpoint) { try { const time = Math.round(((new Date()).getTime() - constants.OneJanuary2000) / 1000 + ((new Date()).getTimezoneOffset() * -1) * 60); const values = { time: time }; await endpoint.write('genTime', values); } catch (error) { /* Do nothing*/ } } const definitions = [ { zigbeeModel: ['HK-SENSOR-4IN1-A'], model: 'HK-SENSOR-4IN1-A', vendor: 'Sunricher', description: '4IN1 Sensor', extend: [(0, modernExtend_1.battery)(), (0, modernExtend_1.identify)(), (0, modernExtend_1.occupancy)(), (0, modernExtend_1.temperature)(), (0, modernExtend_1.humidity)(), (0, modernExtend_1.illuminance)()], }, { zigbeeModel: ['SR-ZG9023A-EU'], model: 'SR-ZG9023A-EU', vendor: 'Sunricher', description: '4 ports switch with 2 usb ports (no metering)', extend: [ (0, modernExtend_1.deviceEndpoints)({ endpoints: { 'l1': 1, 'l2': 2, 'l3': 3, 'l4': 4, 'l5': 5 } }), (0, modernExtend_1.onOff)({ endpointNames: ['l1', 'l2', 'l3', 'l4', 'l5'] }), ], }, { zigbeeModel: ['ON/OFF(2CH)'], model: 'UP-SA-9127D', vendor: 'Sunricher', description: 'LED-Trading 2 channel AC switch', extend: [ (0, modernExtend_1.deviceEndpoints)({ endpoints: { 'l1': 1, 'l2': 2 } }), (0, modernExtend_1.onOff)({ endpointNames: ['l1', 'l2'] }), ], }, { fingerprint: [{ modelID: 'ON/OFF(2CH)', softwareBuildID: '2.9.2_r54' }], model: 'SR-ZG9101SAC-HP-SWITCH-2CH', vendor: 'Sunricher', description: 'Zigbee 2 channel switch', fromZigbee: [fromZigbee_1.default.on_off, fromZigbee_1.default.electrical_measurement, fromZigbee_1.default.metering, fromZigbee_1.default.power_on_behavior, fromZigbee_1.default.ignore_genOta], toZigbee: [toZigbee_1.default.on_off, toZigbee_1.default.power_on_behavior], exposes: [e.switch().withEndpoint('l1'), e.switch().withEndpoint('l2'), e.power(), e.current(), e.voltage(), e.energy(), e.power_on_behavior(['off', 'on', 'previous'])], endpoint: (device) => { return { 'l1': 1, 'l2': 2 }; }, meta: { multiEndpoint: true, multiEndpointSkip: ['power', 'energy', 'voltage', 'current'] }, configure: async (device, coordinatorEndpoint) => { const endpoint1 = device.getEndpoint(1); const endpoint2 = device.getEndpoint(2); await reporting.bind(endpoint1, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement', 'seMetering']); await reporting.bind(endpoint2, coordinatorEndpoint, ['genOnOff']); await reporting.onOff(endpoint1); await reporting.onOff(endpoint2); await reporting.readEletricalMeasurementMultiplierDivisors(endpoint1); await reporting.activePower(endpoint1); await reporting.rmsCurrent(endpoint1, { min: 10, change: 10 }); await reporting.rmsVoltage(endpoint1, { min: 10 }); await reporting.readMeteringMultiplierDivisor(endpoint1); await reporting.currentSummDelivered(endpoint1); }, }, { zigbeeModel: ['HK-ZD-CCT-A'], model: 'HK-ZD-CCT-A', vendor: 'Sunricher', description: '50W Zigbee CCT LED driver (constant current)', extend: [(0, modernExtend_1.light)({ colorTemp: { range: [160, 450] } })], }, { zigbeeModel: ['ZGRC-KEY-004'], model: 'SR-ZG9001K2-DIM', vendor: 'Sunricher', description: 'Zigbee wall remote control for single color, 1 zone', fromZigbee: [fromZigbee_1.default.command_on, fromZigbee_1.default.command_off, fromZigbee_1.default.command_move, fromZigbee_1.default.command_stop, fromZigbee_1.default.battery], toZigbee: [], exposes: [e.battery(), e.action(['on', 'off', 'brightness_move_up', 'brightness_move_down', 'brightness_move_stop'])], }, { zigbeeModel: ['ZGRC-KEY-007'], model: 'SR-ZG9001K2-DIM2', vendor: 'Sunricher', description: 'Zigbee 2 button wall switch', fromZigbee: [fromZigbee_1.default.command_on, fromZigbee_1.default.command_off, fromZigbee_1.default.command_move, fromZigbee_1.default.command_stop, fromZigbee_1.default.battery], exposes: [e.battery(), e.action([ 'on_1', 'off_1', 'stop_1', 'brightness_move_up_1', 'brightness_move_down_1', 'brightness_stop_1', 'on_2', 'off_2', 'stop_2', 'brightness_move_up_2', 'brightness_move_down_2', 'brightness_stop_2' ])], toZigbee: [], meta: { multiEndpoint: true }, }, { zigbeeModel: ['ZGRC-KEY-009'], model: '50208693', vendor: 'Sunricher', description: 'Zigbee wall remote control for RGBW, 1 zone with 2 scenes', fromZigbee: [fromZigbee_1.default.command_on, fromZigbee_1.default.command_off, fromZigbee_1.default.command_move, fromZigbee_1.default.command_stop, fromZigbee_1.default.battery, fromZigbee_1.default.command_recall, fromZigbee_1.default.command_step, fromZigbee_1.default.command_move_to_color, fromZigbee_1.default.command_move_to_color_temp], toZigbee: [], exposes: [e.battery(), e.action(['on', 'off', 'brightness_move_up', 'brightness_move_down', 'brightness_move_stop', 'brightness_step_up', 'brightness_step_down', 'recall_1', 'recall_2'])], }, { zigbeeModel: ['ZGRC-KEY-012'], model: 'SR-ZG9001K12-DIM-Z5', vendor: 'Sunricher', description: '5 zone remote and dimmer', fromZigbee: [fromZigbee_1.default.command_on, fromZigbee_1.default.command_off, fromZigbee_1.default.command_move, fromZigbee_1.default.command_stop, fromZigbee_1.default.battery], toZigbee: [], exposes: [e.battery(), e.action([ 'on_1', 'off_1', 'brightness_move_up_1', 'brightness_move_down_1', 'brightness_stop_1', 'on_2', 'off_2', 'brightness_move_up_2', 'brightness_move_down_2', 'brightness_stop_2', 'on_3', 'off_3', 'brightness_move_up_3', 'brightness_move_down_3', 'brightness_stop_3', 'on_4', 'off_4', 'brightness_move_up_4', 'brightness_move_down_4', 'brightness_stop_4', 'on_5', 'off_5', 'brightness_move_up_5', 'brightness_move_down_5', 'brightness_stop_5' ])], meta: { multiEndpoint: true, battery: { dontDividePercentage: true } }, configure: async (device, coordinatorEndpoint) => { await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']); await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ['genOnOff']); await reporting.bind(device.getEndpoint(3), coordinatorEndpoint, ['genOnOff']); await reporting.bind(device.getEndpoint(4), coordinatorEndpoint, ['genOnOff']); await reporting.bind(device.getEndpoint(5), coordinatorEndpoint, ['genOnOff']); }, }, { zigbeeModel: ['ZGRC-KEY-013'], model: 'SR-ZG9001K12-DIM-Z4', vendor: 'Sunricher', description: '4 zone remote and dimmer', fromZigbee: [fromZigbee_1.default.battery, fromZigbee_1.default.command_move, legacy.fz.ZGRC013_brightness_onoff, legacy.fz.ZGRC013_brightness, fromZigbee_1.default.command_stop, legacy.fz.ZGRC013_brightness_stop, fromZigbee_1.default.command_on, legacy.fz.ZGRC013_cmdOn, fromZigbee_1.default.command_off, legacy.fz.ZGRC013_cmdOff, fromZigbee_1.default.command_recall], exposes: [e.battery(), e.action(['brightness_move_up', 'brightness_move_down', 'brightness_stop', 'on', 'off', 'recall_*'])], toZigbee: [], whiteLabel: [{ vendor: 'RGB Genie', model: 'ZGRC-KEY-013' }], meta: { multiEndpoint: true, battery: { dontDividePercentage: true } }, configure: async (device, coordinatorEndpoint) => { await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff', 'genScenes']); await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ['genOnOff']); await reporting.bind(device.getEndpoint(3), coordinatorEndpoint, ['genOnOff']); await reporting.bind(device.getEndpoint(4), coordinatorEndpoint, ['genOnOff']); }, }, { zigbeeModel: ['ZGRC-TEUR-005'], model: 'SR-ZG9001T4-DIM-EU', vendor: 'Sunricher', description: 'Zigbee wireless touch dimmer switch', fromZigbee: [fromZigbee_1.default.command_recall, fromZigbee_1.default.command_on, fromZigbee_1.default.command_off, fromZigbee_1.default.command_step, fromZigbee_1.default.command_move, fromZigbee_1.default.command_stop], exposes: [e.action(['recall_*', 'on', 'off', 'brightness_stop', 'brightness_move_down', 'brightness_move_up', 'brightness_step_down', 'brightness_step_up'])], toZigbee: [], }, { zigbeeModel: ['CCT Lighting'], model: 'ZG192910-4', vendor: 'Sunricher', description: 'Zigbee LED-controller', extend: [(0, modernExtend_1.light)({ colorTemp: { range: undefined } })], }, { zigbeeModel: ['ZG9101SAC-HP'], model: 'ZG9101SAC-HP', vendor: 'Sunricher', description: 'ZigBee AC phase-cut dimmer', extend: [(0, modernExtend_1.light)({ configureReporting: true })], }, { zigbeeModel: ['ON/OFF -M', 'ON/OFF', 'ZIGBEE-SWITCH'], model: 'ZG9101SAC-HP-Switch', vendor: 'Sunricher', description: 'Zigbee AC in wall switch', extend: [(0, modernExtend_1.onOff)({ powerOnBehavior: false })], }, { zigbeeModel: ['Micro Smart Dimmer', 'SM311', 'HK-SL-RDIM-A', 'HK-SL-DIM-EU-A'], model: 'ZG2835RAC', vendor: 'Sunricher', description: 'ZigBee knob smart dimmer', extend: [(0, modernExtend_1.light)({ configureReporting: true }), (0, modernExtend_1.electricityMeter)()], whiteLabel: [{ vendor: 'YPHIX', model: '50208695' }, { vendor: 'Samotech', model: 'SM311' }], }, { zigbeeModel: ['ZG2835'], model: 'ZG2835', vendor: 'Sunricher', description: 'ZigBee knob smart dimmer', fromZigbee: [fromZigbee_1.default.command_on, fromZigbee_1.default.command_off, fromZigbee_1.default.command_move_to_level], exposes: [e.action(['on', 'off', 'brightness_move_to_level'])], toZigbee: [], }, { zigbeeModel: ['HK-SL-DIM-A'], model: 'SR-ZG9040A', vendor: 'Sunricher', description: 'Zigbee micro smart dimmer', extend: [(0, modernExtend_1.light)({ configureReporting: true }), (0, modernExtend_1.electricityMeter)()], }, { zigbeeModel: ['HK-ZD-DIM-A'], model: 'SRP-ZG9105-CC', vendor: 'Sunricher', description: 'Constant Current Zigbee LED dimmable driver', extend: [(0, modernExtend_1.light)()], }, { zigbeeModel: ['HK-DIM'], model: '50208702', vendor: 'Sunricher', description: 'LED dimmable driver', extend: [(0, modernExtend_1.light)()], whiteLabel: [{ vendor: 'Yphix', model: '50208702' }], }, { zigbeeModel: ['SR-ZG9040A-S'], model: 'SR-ZG9040A-S', vendor: 'Sunricher', description: 'ZigBee AC phase-cut dimmer single-line', extend: [(0, modernExtend_1.light)({ configureReporting: true })], }, { zigbeeModel: ['Micro Smart OnOff', 'HK-SL-RELAY-A'], model: 'SR-ZG9100A-S', vendor: 'Sunricher', description: 'Zigbee AC in wall switch single-line', extend: [(0, modernExtend_1.onOff)()], }, { zigbeeModel: ['ZG2819S-CCT'], model: 'ZG2819S-CCT', vendor: 'Sunricher', description: 'Zigbee handheld remote CCT 4 channels', fromZigbee: [fromZigbee_1.default.battery, fromZigbee_1.default.command_move_to_color, fromZigbee_1.default.command_move_to_color_temp, fromZigbee_1.default.command_move_hue, fromZigbee_1.default.command_step, fromZigbee_1.default.command_recall, fromZigbee_1.default.command_on, fromZigbee_1.default.command_off, fromZigbee_1.default.command_toggle, fromZigbee_1.default.command_stop, fromZigbee_1.default.command_move, fromZigbee_1.default.command_color_loop_set, fromZigbee_1.default.command_ehanced_move_to_hue_and_saturation], exposes: [e.battery(), e.action([ 'color_move', 'color_temperature_move', 'hue_move', 'brightness_step_up', 'brightness_step_down', 'recall_*', 'on', 'off', 'toggle', 'brightness_stop', 'brightness_move_up', 'brightness_move_down', 'color_loop_set', 'enhanced_move_to_hue_and_saturation', 'hue_stop' ])], toZigbee: [], meta: { multiEndpoint: true }, endpoint: (device) => { return { ep1: 1, ep2: 2, ep3: 3, ep4: 4 }; }, }, { zigbeeModel: ['ZG2858A'], model: 'ZG2858A', vendor: 'Sunricher', description: 'Zigbee handheld remote RGBCCT 3 channels', fromZigbee: [fromZigbee_1.default.battery, fromZigbee_1.default.command_move_to_color, fromZigbee_1.default.command_move_to_color_temp, fromZigbee_1.default.command_move_hue, fromZigbee_1.default.command_step, fromZigbee_1.default.command_recall, fromZigbee_1.default.command_on, fromZigbee_1.default.command_off, fromZigbee_1.default.command_toggle, fromZigbee_1.default.command_stop, fromZigbee_1.default.command_move, fromZigbee_1.default.command_color_loop_set, fromZigbee_1.default.command_ehanced_move_to_hue_and_saturation], exposes: [e.battery(), e.action([ 'color_move', 'color_temperature_move', 'hue_move', 'brightness_step_up', 'brightness_step_down', 'recall_*', 'on', 'off', 'toggle', 'brightness_stop', 'brightness_move_up', 'brightness_move_down', 'color_loop_set', 'enhanced_move_to_hue_and_saturation', 'hue_stop' ])], toZigbee: [], meta: { multiEndpoint: true }, endpoint: (device) => { return { ep1: 1, ep2: 2, ep3: 3 }; }, }, { zigbeeModel: ['HK-ZCC-A'], model: 'SR-ZG9080A', vendor: 'Sunricher', description: 'Curtain motor controller', meta: { coverInverted: true }, fromZigbee: [fromZigbee_1.default.cover_position_tilt], toZigbee: [toZigbee_1.default.cover_state, toZigbee_1.default.cover_position_tilt], exposes: [e.cover_position()], configure: async (device, coordinatorEndpoint) => { const endpoint = device.getEndpoint(1); await reporting.bind(endpoint, coordinatorEndpoint, ['closuresWindowCovering']); await reporting.currentPositionLiftPercentage(endpoint); }, }, { fingerprint: [{ modelID: 'GreenPower_2', ieeeAddr: /^0x00000000010.....$/ }, { modelID: 'GreenPower_2', ieeeAddr: /^0x0000000001b.....$/ }], model: 'SR-ZGP2801K2-DIM', vendor: 'Sunricher', description: 'Pushbutton transmitter module', fromZigbee: [fromZigbee_1.default.sunricher_switch2801K2], toZigbee: [], exposes: [e.action(['press_on', 'press_off', 'hold_on', 'hold_off', 'release'])], }, { fingerprint: [{ modelID: 'GreenPower_2', ieeeAddr: /^0x000000005d5.....$/ }, { modelID: 'GreenPower_2', ieeeAddr: /^0x0000000057e.....$/ }, { modelID: 'GreenPower_2', ieeeAddr: /^0x000000001fa.....$/ }, { modelID: 'GreenPower_2', ieeeAddr: /^0x0000000034b.....$/ }, { modelID: 'GreenPower_2', ieeeAddr: /^0x00000000f12.....$/ }], model: 'SR-ZGP2801K4-DIM', vendor: 'Sunricher', description: 'Pushbutton transmitter module', fromZigbee: [fromZigbee_1.default.sunricher_switch2801K4], toZigbee: [], exposes: [e.action(['press_on', 'press_off', 'press_high', 'press_low', 'hold_high', 'hold_low', 'release'])], }, { fingerprint: [{ modelID: 'GreenPower_2', ieeeAddr: /^0x00000000aaf.....$/ }], model: 'SR-ZGP2801K-5C', vendor: 'Sunricher', description: 'Pushbutton transmitter module', fromZigbee: [fzLocal.sunricher_SRZGP2801K45C], toZigbee: [], exposes: [e.action(['press_on', 'press_off', 'press_high', 'press_low', 'hold_high', 'hold_low', 'high_low_release', 'cw_ww_release', 'cw_dec_ww_inc', 'ww_inc_cw_dec', 'r_g_b', 'b_g_r', 'rgb_release'])], }, { zigbeeModel: ['ZG9092', 'HK-LN-HEATER-A'], model: 'SR-ZG9092A', vendor: 'Sunricher', description: 'Touch thermostat', fromZigbee: [fromZigbee_1.default.thermostat, fromZigbee_1.default.namron_thermostat, fromZigbee_1.default.metering, fromZigbee_1.default.electrical_measurement, fromZigbee_1.default.namron_hvac_user_interface], toZigbee: [toZigbee_1.default.thermostat_occupied_heating_setpoint, toZigbee_1.default.thermostat_unoccupied_heating_setpoint, toZigbee_1.default.thermostat_occupancy, toZigbee_1.default.thermostat_local_temperature_calibration, toZigbee_1.default.thermostat_local_temperature, toZigbee_1.default.thermostat_outdoor_temperature, toZigbee_1.default.thermostat_system_mode, toZigbee_1.default.thermostat_control_sequence_of_operation, toZigbee_1.default.thermostat_running_state, toZigbee_1.default.namron_thermostat, toZigbee_1.default.namron_thermostat_child_lock], exposes: [ e.numeric('outdoor_temperature', ea.STATE_GET).withUnit('°C') .withDescription('Current temperature measured from the floor sensor'), e.climate() .withSetpoint('occupied_heating_setpoint', 0, 40, 0.1) .withSetpoint('unoccupied_heating_setpoint', 0, 40, 0.1) .withLocalTemperature() .withLocalTemperatureCalibration(-3, 3, 0.1) .withSystemMode(['off', 'auto', 'heat']) .withRunningState(['idle', 'heat']), e.binary('away_mode', ea.ALL, 'ON', 'OFF') .withDescription('Enable/disable away mode'), e.binary('child_lock', ea.ALL, 'UNLOCK', 'LOCK') .withDescription('Enables/disables physical input on the device'), e.power(), e.current(), e.voltage(), e.energy(), e.enum('lcd_brightness', ea.ALL, ['low', 'mid', 'high']) .withDescription('OLED brightness when operating the buttons. Default: Medium.'), e.enum('button_vibration_level', ea.ALL, ['off', 'low', 'high']) .withDescription('Key beep volume and vibration level. Default: Low.'), e.enum('floor_sensor_type', ea.ALL, ['10k', '15k', '50k', '100k', '12k']) .withDescription('Type of the external floor sensor. Default: NTC 10K/25.'), e.enum('sensor', ea.ALL, ['air', 'floor', 'both']) .withDescription('The sensor used for heat control. Default: Room Sensor.'), e.enum('powerup_status', ea.ALL, ['default', 'last_status']) .withDescription('The mode after a power reset. Default: Previous Mode.'), e.numeric('floor_sensor_calibration', ea.ALL) .withUnit('°C') .withValueMin(-3).withValueMax(3).withValueStep(0.1) .withDescription('The tempearatue calibration for the external floor sensor, between -3 and 3 in 0.1°C. Default: 0.'), e.numeric('dry_time', ea.ALL) .withUnit('min') .withValueMin(5).withValueMax(100) .withDescription('The duration of Dry Mode, between 5 and 100 minutes. Default: 5.'), e.enum('mode_after_dry', ea.ALL, ['off', 'manual', 'auto', 'away']) .withDescription('The mode after Dry Mode. Default: Auto.'), e.enum('temperature_display', ea.ALL, ['room', 'floor']) .withDescription('The temperature on the display. Default: Room Temperature.'), e.numeric('window_open_check', ea.ALL) .withUnit('°C') .withValueMin(0).withValueMax(8).withValueStep(0.5) .withDescription('The threshold to detect window open, between 0.0 and 8.0 in 0.5 °C. Default: 0 (disabled).'), e.numeric('hysterersis', ea.ALL) .withUnit('°C') .withValueMin(0.5).withValueMax(2).withValueStep(0.1) .withDescription('Hysteresis setting, between 0.5 and 2 in 0.1 °C. Default: 0.5.'), e.enum('display_auto_off_enabled', ea.ALL, ['disabled', 'enabled']), e.numeric('alarm_airtemp_overvalue', ea.ALL) .withUnit('°C') .withValueMin(20).withValueMax(60) .withDescription('Room temperature alarm threshold, between 20 and 60 in °C. 0 means disabled. Default: 45.'), ], onEvent: async (type, data, device, options) => { if (type === 'stop') { clearInterval(globalStore.getValue(device, 'time')); globalStore.clearValue(device, 'time'); } else if (!globalStore.hasValue(device, 'time')) { const endpoint = device.getEndpoint(1); const hours24 = 1000 * 60 * 60 * 24; // Device does not ask for the time with binding, therefore we write the time every 24 hours const interval = setInterval(async () => syncTime(endpoint), hours24); globalStore.putValue(device, 'time', interval); } }, configure: async (device, coordinatorEndpoint) => { const endpoint = device.getEndpoint(1); const binds = [ 'genBasic', 'genIdentify', 'hvacThermostat', 'seMetering', 'haElectricalMeasurement', 'genAlarms', 'msOccupancySensing', 'genTime', 'hvacUserInterfaceCfg', ]; await reporting.bind(endpoint, coordinatorEndpoint, binds); // standard ZCL attributes await reporting.thermostatTemperature(endpoint); await reporting.thermostatOccupiedHeatingSetpoint(endpoint); await reporting.thermostatUnoccupiedHeatingSetpoint(endpoint); try { await reporting.thermostatKeypadLockMode(endpoint); } catch (error) { // Fails for some // https://github.com/Koenkk/zigbee2mqtt/issues/15025 logger_1.logger.debug(`Failed to setup keypadLockout reporting`, NS); } await endpoint.configureReporting('hvacThermostat', [{ attribute: 'occupancy', minimumReportInterval: 0, maximumReportInterval: constants.repInterval.HOUR, reportableChange: null, }]); await endpoint.read('haElectricalMeasurement', ['acVoltageMultiplier', 'acVoltageDivisor', 'acCurrentMultiplier']); await endpoint.read('haElectricalMeasurement', ['acCurrentDivisor']); await endpoint.read('seMetering', ['multiplier', 'divisor']); await reporting.activePower(endpoint, { min: 30, change: 10 }); // Min report change 10W await reporting.rmsCurrent(endpoint, { min: 30, change: 50 }); // Min report change 0.05A await reporting.rmsVoltage(endpoint, { min: 30, change: 20 }); // Min report change 2V await reporting.readMeteringMultiplierDivisor(endpoint); await reporting.currentSummDelivered(endpoint); // Custom attributes const options = { manufacturerCode: zigbee_herdsman_1.Zcl.ManufacturerCode.SHENZHEN_SUNRICHER_TECHNOLOGY_LTD }; // OperateDisplayLcdBrightnesss await endpoint.configureReporting('hvacThermostat', [{ attribute: { ID: 0x1000, type: 0x30 }, minimumReportInterval: 0, maximumReportInterval: constants.repInterval.HOUR, reportableChange: null, }], options); // ButtonVibrationLevel await endpoint.configureReporting('hvacThermostat', [{ attribute: { ID: 0x1001, type: 0x30 }, minimumReportInterval: 0, maximumReportInterval: constants.repInterval.HOUR, reportableChange: null, }], options); // FloorSensorType await endpoint.configureReporting('hvacThermostat', [{ attribute: { ID: 0x1002, type: 0x30 }, minimumReportInterval: 0, maximumReportInterval: constants.repInterval.HOUR, reportableChange: null, }], options); // ControlType await endpoint.configureReporting('hvacThermostat', [{ attribute: { ID: 0x1003, type: 0x30 }, minimumReportInterval: 0, maximumReportInterval: constants.repInterval.HOUR, reportableChange: null, }], options); // PowerUpStatus await endpoint.configureReporting('hvacThermostat', [{ attribute: { ID: 0x1004, type: 0x30 }, minimumReportInterval: 0, maximumReportInterval: constants.repInterval.HOUR, reportableChange: null, }], options); // FloorSensorCalibration await endpoint.configureReporting('hvacThermostat', [{ attribute: { ID: 0x1005, type: 0x28 }, minimumReportInterval: 0, maximumReportInterval: constants.repInterval.HOUR, reportableChange: 0, }], options); // DryTime await endpoint.configureReporting('hvacThermostat', [{ attribute: { ID: 0x1006, type: 0x20 }, minimumReportInterval: 0, maximumReportInterval: constants.repInterval.HOUR, reportableChange: 0, }], options); // ModeAfterDry await endpoint.configureReporting('hvacThermostat', [{ attribute: { ID: 0x1007, type: 0x30 }, minimumReportInterval: 0, maximumReportInterval: constants.repInterval.HOUR, reportableChange: null, }], options); // TemperatureDisplay await endpoint.configureReporting('hvacThermostat', [{ attribute: { ID: 0x1008, type: 0x30 }, minimumReportInterval: 0, maximumReportInterval: constants.repInterval.HOUR, reportableChange: null, }], options); // WindowOpenCheck await endpoint.configureReporting('hvacThermostat', [{ attribute: { ID: 0x1009, type: 0x20 }, minimumReportInterval: 0, maximumReportInterval: constants.repInterval.HOUR, reportableChange: 0, }], options); // Hysterersis await endpoint.configureReporting('hvacThermostat', [{ attribute: { ID: 0x100A, type: 0x20 }, minimumReportInterval: 0, maximumReportInterval: constants.repInterval.HOUR, reportableChange: 0, }], options); // DisplayAutoOffEnable await endpoint.configureReporting('hvacThermostat', [{ attribute: { ID: 0x100B, type: 0x30 }, minimumReportInterval: 0, maximumReportInterval: constants.repInterval.HOUR, reportableChange: null, }], options); // AlarmAirTempOverValue await endpoint.configureReporting('hvacThermostat', [{ attribute: { ID: 0x2001, type: 0x20 }, minimumReportInterval: 0, maximumReportInterval: constants.repInterval.HOUR, reportableChange: 0, }], options); // Away Mode Set await endpoint.configureReporting('hvacThermostat', [{ attribute: { ID: 0x2002, type: 0x30 }, minimumReportInterval: 0, maximumReportInterval: constants.repInterval.HOUR, reportableChange: null, }], options); // Device does not asks for the time with binding, we need to write time during configure syncTime(endpoint); // Trigger initial read await endpoint.read('hvacThermostat', ['systemMode', 'runningState', 'occupiedHeatingSetpoint']); await endpoint.read('hvacThermostat', [0x1000, 0x1001, 0x1002, 0x1003], options); await endpoint.read('hvacThermostat', [0x1004, 0x1005, 0x1006, 0x1007], options); await endpoint.read('hvacThermostat', [0x1008, 0x1009, 0x100A, 0x100B], options); await endpoint.read('hvacThermostat', [0x2001, 0x2002], options); }, }, { fingerprint: [{ modelID: 'TERNCY-DC01', manufacturerName: 'Sunricher' }, { modelID: 'HK-SENSOR-CT-A', manufacturerName: 'Sunricher' }], model: 'SR-ZG9010A', vendor: 'Sunricher', description: 'Door windows sensor', fromZigbee: [fromZigbee_1.default.U02I007C01_contact, fromZigbee_1.default.battery], toZigbee: [], exposes: [e.contact(), e.battery()], }, ]; exports.default = definitions; module.exports = definitions; //# sourceMappingURL=sunricher.js.map