zigbee-herdsman-converters
Version:
Collection of device converters to be used with zigbee-herdsman
759 lines • 29.5 kB
JavaScript
;
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 manufacturerCodeOld = 0x140a;
const manufacturerCodeNew = 0x132f;
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 (0, utils_1.determineEndpoint)(entity, meta, cluster).command(cluster, setCommand, { value: payloadValue }, zigbeeCommandOptions);
await (0, utils_1.determineEndpoint)(entity, meta, cluster).read(cluster, [attributeKey], zigbeeCommandOptions);
return { state: { [key]: value } };
}
: undefined,
convertGet: access & exposes_1.access.GET
? async (entity, key, meta) => {
await (0, utils_1.determineEndpoint)(entity, meta, cluster).read(cluster, [attributeKey], zigbeeCommandOptions);
}
: undefined,
},
];
return { ...mExtend, toZigbee };
}
function binaryWithSetCommand(args) {
const { name, cluster, attribute, valueOn, valueOff, zigbeeCommandOptions, setCommand } = args;
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 (0, utils_1.determineEndpoint)(entity, meta, cluster).command(cluster, setCommand, { value: payloadValue }, zigbeeCommandOptions);
await (0, utils_1.determineEndpoint)(entity, meta, cluster).read(cluster, [attribute], zigbeeCommandOptions);
return { state: { [key]: value } };
}
: undefined,
convertGet: access & exposes_1.access.GET
? async (entity, key, meta) => {
await (0, utils_1.determineEndpoint)(entity, meta, cluster).read(cluster, [attribute], zigbeeCommandOptions);
}
: undefined,
},
];
return { ...mExtend, toZigbee };
}
function YandexCluster(manufacturerCode) {
return m.deviceAddCustomCluster("manuSpecificYandex", {
name: "manuSpecificYandex",
ID: 0xfc03,
manufacturerCode: manufacturerCode,
attributes: {
switchMode: { name: "switchMode", ID: 0x0001, type: zigbee_herdsman_1.Zcl.DataType.ENUM8, write: true, max: 0xff },
switchType: { name: "switchType", ID: 0x0002, type: zigbee_herdsman_1.Zcl.DataType.ENUM8, write: true, max: 0xff },
powerType: { name: "powerType", ID: 0x0003, type: zigbee_herdsman_1.Zcl.DataType.ENUM8, write: true, max: 0xff },
ledIndicator: { name: "ledIndicator", ID: 0x0005, type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN, write: true },
interlock: { name: "interlock", ID: 0x0007, type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN, write: true },
buttonMode: { name: "buttonMode", ID: 0x0008, type: zigbee_herdsman_1.Zcl.DataType.ENUM8, write: true, max: 0xff },
displayFlip: { name: "displayFlip", ID: 0x0009, type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN, write: true },
windowDetection: { name: "windowDetection", ID: 0x000a, type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN, write: true },
frostProtection: { name: "frostProtection", ID: 0x000d, type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN, write: true },
scaleProtection: { name: "scaleProtection", ID: 0x000e, type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN, write: true },
autoCalibration: { name: "autoCalibration", ID: 0x000f, type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN, write: true },
},
commands: {
switchMode: {
name: "switchMode",
ID: 0x01,
parameters: [{ name: "value", type: zigbee_herdsman_1.Zcl.DataType.UINT8, max: 0xff }],
},
switchType: {
name: "switchType",
ID: 0x02,
parameters: [{ name: "value", type: zigbee_herdsman_1.Zcl.DataType.UINT8, max: 0xff }],
},
powerType: {
name: "powerType",
ID: 0x03,
parameters: [{ name: "value", type: zigbee_herdsman_1.Zcl.DataType.UINT8, max: 0xff }],
},
ledIndicator: {
name: "ledIndicator",
ID: 0x05,
parameters: [{ name: "value", type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN }],
},
interlock: {
name: "interlock",
ID: 0x07,
parameters: [{ name: "value", type: zigbee_herdsman_1.Zcl.DataType.UINT8, max: 0xff }],
},
buttonMode: {
name: "buttonMode",
ID: 0x08,
parameters: [{ name: "value", type: zigbee_herdsman_1.Zcl.DataType.UINT8, max: 0xff }],
},
displayFlip: {
name: "displayFlip",
ID: 0x09,
parameters: [{ name: "value", type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN }],
},
windowDetection: {
name: "windowDetection",
ID: 0x0a,
parameters: [{ name: "value", type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN }],
},
},
commandsResponse: {},
});
}
function YandexThermostatCluster(manufacturerCode) {
return m.deviceAddCustomCluster("hvacThermostat", {
name: "hvacThermostat",
ID: zigbee_herdsman_1.Zcl.Clusters.hvacThermostat.ID,
attributes: {
calibrated: {
name: "calibrated",
ID: 0xf000,
type: zigbee_herdsman_1.Zcl.DataType.BOOLEAN,
manufacturerCode: manufacturerCode,
write: true,
},
},
commands: {
calibrate: {
name: "calibrate",
ID: 0x00,
parameters: [{ name: "value", type: zigbee_herdsman_1.Zcl.DataType.UINT8, max: 0xff }],
},
},
commandsResponse: {},
});
}
function reinterview() {
let coordEnd = 1;
const configure = [
(device, coordinatorEndpoint, definition) => {
coordEnd = coordinatorEndpoint;
},
];
const onEvent = [
async (event) => {
if (event.type === "deviceAnnounce") {
// reinterview
const { device, deviceExposesChanged } = event.data;
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
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",
ota: true,
extend: [
reinterview(),
YandexCluster(manufacturerCodeOld),
m.deviceEndpoints({
endpoints: { "1": 1, "": 2 },
}),
m.onOff({
endpointNames: ["1"],
}),
enumLookupWithSetCommand({
name: "power_type",
cluster: "manuSpecificYandex",
attribute: "powerType",
setCommand: "powerType",
zigbeeCommandOptions: { manufacturerCode: manufacturerCodeOld },
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: manufacturerCodeOld },
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",
ota: true,
extend: [
reinterview(),
YandexCluster(manufacturerCodeOld),
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: manufacturerCodeOld },
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: manufacturerCodeOld },
description: "Interlock",
entityCategory: "config",
}),
enumLookupWithSetCommand({
name: "switch_type",
cluster: "manuSpecificYandex",
attribute: "switchType",
setCommand: "switchType",
zigbeeCommandOptions: { manufacturerCode: manufacturerCodeOld },
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: manufacturerCodeOld },
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",
ota: true,
extend: [
YandexCluster(manufacturerCodeOld),
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",
ota: true,
extend: [
YandexCluster(manufacturerCodeOld),
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",
ota: true,
extend: [
reinterview(),
YandexCluster(manufacturerCodeOld),
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: manufacturerCodeOld },
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: manufacturerCodeOld },
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",
}),
m.binary({
name: "led_indicator",
cluster: "manuSpecificYandex",
attribute: "ledIndicator",
valueOn: ["ON", 1],
valueOff: ["OFF", 0],
zigbeeCommandOptions: { manufacturerCode: manufacturerCodeOld },
description: "Led indicator",
entityCategory: "config",
}),
],
},
{
zigbeeModel: ["YNDX-00532"],
model: "YNDX_00532",
vendor: "Yandex",
description: "Double gang switch",
ota: true,
extend: [
reinterview(),
YandexCluster(manufacturerCodeOld),
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: manufacturerCodeOld },
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: manufacturerCodeOld },
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: manufacturerCodeOld },
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",
}),
m.binary({
name: "led_indicator",
cluster: "manuSpecificYandex",
attribute: "ledIndicator",
valueOn: ["ON", 1],
valueOff: ["OFF", 0],
zigbeeCommandOptions: { manufacturerCode: manufacturerCodeOld },
description: "Led indicator",
entityCategory: "config",
}),
],
},
{
zigbeeModel: ["YNDX-00530"],
model: "YNDX_00530",
vendor: "Yandex",
description: "Dimmer",
ota: true,
extend: [
YandexCluster(manufacturerCodeOld),
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: manufacturerCodeOld },
description: "Led indicator",
entityCategory: "config",
}),
enumLookupWithSetCommand({
name: "button_mode",
cluster: "manuSpecificYandex",
attribute: "buttonMode",
setCommand: "buttonMode",
zigbeeCommandOptions: { manufacturerCode: manufacturerCodeOld },
description: "Dimmer button mode",
lookup: {
general: 0x00,
alternative: 0x01,
},
entityCategory: "config",
}),
],
},
{
zigbeeModel: ["YNDX-00518"],
model: "YNDX-00518",
vendor: "Yandex",
description: "Thermostatic radiator valve",
ota: true,
extend: [
YandexCluster(manufacturerCodeNew),
YandexThermostatCluster(manufacturerCodeNew),
m.onOff({
powerOnBehavior: false,
}),
m.thermostat({
localTemperature: {
configure: { reporting: { min: "1_MINUTE", max: "2_MINUTES", change: 50 } },
},
setpoints: {
values: { occupiedHeatingSetpoint: { min: 5, max: 30, step: 0.5 } },
configure: { reporting: { min: "1_SECOND", max: "2_MINUTES", change: 50 } },
},
localTemperatureCalibration: {
values: true,
},
}),
binaryWithSetCommand({
name: "display_flip",
valueOn: ["ON", 1],
valueOff: ["OFF", 0],
cluster: "manuSpecificYandex",
attribute: "displayFlip",
setCommand: "displayFlip",
zigbeeCommandOptions: { manufacturerCode: manufacturerCodeNew },
description: "Flip display orientation",
entityCategory: "config",
}),
m.binary({
name: "child_lock",
valueOn: ["LOCK", 1],
valueOff: ["UNLOCK", 0],
cluster: "hvacUserInterfaceCfg",
attribute: "keypadLockout",
description: "Enables/disables physical input on the device",
access: "ALL",
reporting: { min: 0, max: 3600, change: 0 },
}),
m.binary({
name: "frost_protection",
valueOn: ["ON", 1],
valueOff: ["OFF", 0],
cluster: "manuSpecificYandex",
attribute: "frostProtection",
description: "Enables/disables antifreeze function",
access: "ALL",
zigbeeCommandOptions: { manufacturerCode: manufacturerCodeNew },
}),
binaryWithSetCommand({
name: "window_detection",
valueOn: ["ON", 1],
valueOff: ["OFF", 0],
cluster: "manuSpecificYandex",
setCommand: "windowDetection",
attribute: "windowDetection",
description: "Enables/disables window detection on the device",
access: "ALL",
zigbeeCommandOptions: { manufacturerCode: manufacturerCodeNew },
}),
m.binary({
name: "scale_protection",
valueOn: ["ON", 1],
valueOff: ["OFF", 0],
cluster: "manuSpecificYandex",
attribute: "scaleProtection",
description: "Enables/disables anti-scale protection",
access: "ALL",
zigbeeCommandOptions: { manufacturerCode: manufacturerCodeNew },
}),
m.binary({
name: "auto_calibration",
valueOn: ["ON", 1],
valueOff: ["OFF", 0],
cluster: "manuSpecificYandex",
attribute: "autoCalibration",
description: "Enables/disables auto calibration",
access: "ALL",
zigbeeCommandOptions: { manufacturerCode: manufacturerCodeNew },
}),
binaryWithSetCommand({
name: "calibrated",
valueOn: ["ON", 1],
valueOff: ["OFF", 0],
cluster: "hvacThermostat",
attribute: "calibrated",
setCommand: "calibrate",
zigbeeCommandOptions: { manufacturerCode: manufacturerCodeNew },
description: "OFF if calibration needs to be performed",
entityCategory: "config",
reporting: { min: 0, max: 3600, change: 0 },
}),
m.battery({
voltage: true,
}),
],
},
{
zigbeeModel: ["YNDX-00591", "YNDX-00592"],
model: "YNDX-00591",
vendor: "Yandex",
description: "Window cover",
ota: true,
extend: [
m.windowCovering({
controls: ["lift"],
configureReporting: true,
coverMode: true,
coverInverted: false,
}),
m.enumLookup({
name: "velocity",
lookup: { slow: 6, normal: 9, fast: 12 },
cluster: "closuresWindowCovering",
attribute: "velocityLift",
description: "Velocity",
access: "ALL",
}),
m.numeric({
name: "max_position",
unit: "%",
valueMin: 0,
valueMax: 100,
cluster: "closuresWindowCovering",
attribute: { ID: 0xf001, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
description: "Max position",
access: "ALL",
zigbeeCommandOptions: { manufacturerCode: manufacturerCodeNew },
}),
m.numeric({
name: "min_position",
unit: "%",
valueMin: 0,
valueMax: 100,
cluster: "closuresWindowCovering",
attribute: { ID: 0xf002, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
description: "Min position",
access: "ALL",
zigbeeCommandOptions: { manufacturerCode: manufacturerCodeNew },
}),
],
},
{
zigbeeModel: ["YNDX-00526"],
model: "YNDX_00526",
vendor: "Yandex",
description: "Contact sensor",
ota: true,
extend: [
m.iasZoneAlarm({
zoneType: "contact",
zoneAttributes: ["alarm_1", "battery_low"],
}),
m.battery({
voltage: true,
}),
],
},
{
zigbeeModel: ["YNDX-00527"],
model: "YNDX_00527",
vendor: "Yandex",
description: "Leak sensor",
ota: true,
extend: [
m.iasZoneAlarm({
zoneType: "water_leak",
zoneAttributes: ["alarm_1", "battery_low"],
}),
m.battery({
voltage: true,
}),
],
},
{
zigbeeModel: ["YNDX-00528"],
model: "YNDX_00528",
vendor: "Yandex",
description: "Motion and illuminance sensor",
ota: true,
extend: [
m.enumLookup({
name: "sensitivity",
lookup: { low: 0, medium: 1, high: 2 },
cluster: "msOccupancySensing",
attribute: { ID: 0xf000, type: zigbee_herdsman_1.Zcl.DataType.ENUM8 },
description: "Sensor sensitivity",
access: "ALL",
zigbeeCommandOptions: { manufacturerCode: manufacturerCodeNew },
}),
m.occupancy(),
m.illuminance(),
m.battery({
voltage: true,
}),
],
},
{
zigbeeModel: ["YNDX-00529"],
model: "YNDX_00529",
vendor: "Yandex",
description: "Temperature and humidity and pressure sensor",
ota: true,
extend: [
m.temperature(),
m.humidity(),
m.pressure(),
m.battery({
voltage: true,
}),
],
},
];
//# sourceMappingURL=yandex.js.map