1
0
mirror of https://github.com/Utyff/Zintercom.git synced 2026-01-12 09:17:41 +03:00

Update converter to support z2m v1.35

This commit is contained in:
xyzroe
2024-01-07 15:49:38 +02:00
committed by GitHub
parent abc32f88fa
commit 07114547b4

View File

@@ -1,11 +1,12 @@
const {
fromZigbeeConverters,
toZigbeeConverters,
exposes
} = require('zigbee-herdsman-converters');
const zigbeeHerdsmanConverters = require('zigbee-herdsman-converters');
const exposes = zigbeeHerdsmanConverters['exposes'] || require("zigbee-herdsman-converters/lib/exposes");
const ep = exposes.presets;
const ea = exposes.access;
const fromZigbeeConverters = zigbeeHerdsmanConverters.fromZigbeeConverters || zigbeeHerdsmanConverters.fromZigbee;
const toZigbeeConverters = zigbeeHerdsmanConverters.toZigbeeConverters || zigbeeHerdsmanConverters.toZigbee;
const bind = async (endpoint, target, clusters) => {
for (const cluster of clusters) {
@@ -14,6 +15,10 @@ const bind = async (endpoint, target, clusters) => {
};
const configureReporting = {
currentPositionLiftPercentage: async (endpoint, overrides) => {
const payload = configureReportingPayload('currentPositionLiftPercentage', 1, repInterval.MAX, 1, overrides);
await endpoint.configureReporting('closuresWindowCovering', payload);
},
batteryPercentageRemaining: async (endpoint, overrides) => {
const payload = configureReportingPayload(
'batteryPercentageRemaining', repInterval.HOUR, repInterval.MAX, 0, overrides,
@@ -65,18 +70,6 @@ const fz = {
}
if (msg.data.hasOwnProperty(0x0051)) {
result.mode = ['Never', 'Once', 'Always', 'Drop'][msg.data[0x0051]];
result.once = 'OFF';
result.always = 'OFF';
result.drop = 'OFF';
if (msg.data[0x0051] == 1) {
result.once = 'ON';
}
if (msg.data[0x0051] == 2) {
result.always = 'ON';
}
if (msg.data[0x0051] == 3) {
result.drop = 'ON';
}
}
if (msg.data.hasOwnProperty(0x0052)) {
result.sound = ['OFF', 'ON'][msg.data[0x0052]];
@@ -103,11 +96,11 @@ const fz = {
const tz = {
diy_zintercom_config: {
key: ['state', 'mode', 'sound', 'once', 'always', 'drop', 'time_ring', 'time_talk', 'time_open', 'time_bell', 'time_report'],
key: ['state', 'mode', 'sound', 'time_ring', 'time_talk', 'time_open', 'time_bell', 'time_report'],
convertSet: async (entity, key, rawValue, meta) => {
const lookup = {
'OFF': '0',
'ON': '1',
'OFF': 0x00,
'ON': 0x01,
};
const modeOpenLookup = {
'Never': '0',
@@ -123,24 +116,9 @@ const tz = {
value = modeOpenLookup.hasOwnProperty(rawValue) ? modeOpenLookup[rawValue] : parseInt(rawValue, 10);
}
if (key == 'once') {
value = (rawValue == 'ON') ? 1 : 0;
}
if (key == 'always') {
value = (rawValue == 'ON') ? 2 : 0;
}
if (key == 'drop') {
value = (rawValue == 'ON') ? 3 : 0;
}
const payloads = {
mode: {0x0051: {value, type: 0x30}},
sound: {0x0052: {value, type: 0x10}},
once: {0x0051: {value, type: 0x30}},
always: {0x0051: {value, type: 0x30}},
drop: {0x0051: {value, type: 0x30}},
time_ring: {0x0053: {value, type: 0x20}},
time_talk: {0x0054: {value, type: 0x20}},
time_open: {0x0055: {value, type: 0x20}},
@@ -149,17 +127,6 @@ const tz = {
};
await entity.write('closuresDoorLock', payloads[key]);
if (key == 'once' || key == 'always' || key == 'drop' || key == 'mode') {
const payloads = {
mode: ['closuresDoorLock', 0x0051],
once: ['closuresDoorLock', 0x0051],
always: ['closuresDoorLock', 0x0051],
drop: ['closuresDoorLock', 0x0051],
};
await entity.read(payloads[key][0], [payloads[key][1]]);
}
return {
state: {[key]: rawValue},
};
@@ -169,9 +136,6 @@ const tz = {
state: ['closuresDoorLock', 0x0050],
mode: ['closuresDoorLock', 0x0051],
sound: ['closuresDoorLock', 0x0052],
once: ['closuresDoorLock', 0x0051],
always: ['closuresDoorLock', 0x0051],
drop: ['closuresDoorLock', 0x0051],
time_ring: ['closuresDoorLock', 0x0053],
time_talk: ['closuresDoorLock', 0x0054],
time_open: ['closuresDoorLock', 0x0055],
@@ -229,12 +193,6 @@ const device = {
.withDescription('Select open mode'),
exposes.binary('sound', ea.ALL, 'ON', 'OFF').withProperty('sound')
.withDescription('Enable or disable sound'),
exposes.binary('once', ea.ALL, 'ON', 'OFF').withProperty('once')
.withDescription('Enable or disable once mode'),
exposes.binary('always', ea.ALL, 'ON', 'OFF').withProperty('always')
.withDescription('Enable or disable always mode'),
exposes.binary('drop', ea.ALL, 'ON', 'OFF').withProperty('drop')
.withDescription('Enable or disable drop mode'),
exposes.numeric('time_ring', ea.ALL).withUnit('sec')
.withDescription('Time to ring before answer'),
exposes.numeric('time_talk', ea.ALL).withUnit('sec')