zigbee-herdsman-converters
Version:
Collection of device converters to be used with zigbee-herdsman
710 lines • 31.7 kB
JavaScript
"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 fz = __importStar(require("../converters/fromZigbee"));
const tz = __importStar(require("../converters/toZigbee"));
const exposes = __importStar(require("../lib/exposes"));
const logger_1 = require("../lib/logger");
const m = __importStar(require("../lib/modernExtend"));
const reporting = __importStar(require("../lib/reporting"));
const utils_1 = require("../lib/utils");
const e = exposes.presets;
const ea = exposes.access;
const NS = "zhc:orvibo";
const tzLocal = {
// biome-ignore lint/style/useNamingConvention: ignored using `--suppress`
DD10Z_brightness: {
key: ["brightness"],
options: [exposes.options.transition()],
convertSet: async (entity, key, value, meta) => {
// Device doesn't support moveToLevelWithOnOff therefore this converter is needed.
await entity.command("genLevelCtrl", "moveToLevel", { level: Number(value), transtime: 0 }, { disableDefaultResponse: true });
return { state: { brightness: value } };
},
convertGet: async (entity, key, meta) => {
await entity.read("genLevelCtrl", ["currentLevel"]);
},
},
};
const distinct = (input, toKey) => {
const seen = new Set();
return input.filter((item) => {
const key = toKey(item);
if (seen.has(key)) {
return false;
}
seen.add(key);
return true;
});
};
const hexToBytes = (hex) => {
// Remove '0x' prefix if present
if (hex.startsWith("0x")) {
// biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
hex = hex.slice(2);
}
// Ensure even length
if (hex.length % 2 !== 0) {
// biome-ignore lint/style/noParameterAssign: ignored using `--suppress`
hex = `0${hex}`;
}
// Convert to byte array
const bytes = [];
for (let i = 0; i < hex.length; i += 2) {
bytes.push(Number.parseInt(hex.substring(i, i + 2), 16));
}
return bytes;
};
const clusterManuSpecifcOrviboSwitchRewiring = () => {
return m.deviceAddCustomCluster("manuSpecificOrvibo", {
ID: 0x0017,
attributes: {},
commands: {
setSwitchRelay: {
// This command can be used to set switch to ON, OFF or TOGGLE particular relay.
// Payload: {"data":[<SWITCH_ID>,0,0,<IEEE_REVERSED_ADDRESS>,<RELAY_ID>,4,1,6,0,1,<ACTION>]}
// Where <SWITCH_ID> is integer 1-6
// Where <IEEE_REVERSED_ADDRESS> is 8 bytes reversed device IEEE address
// Where <RELAY_ID> is integer 1-4
// Where <ACTION> is 0 for OFF, 1 for ON, and 2 for TOGGLE
// Example for switch 3 toggling relay 2 for device with IEEE address 0x0131000029042388: {"data":[3,0,0,136,35,4,41,0,0,49,1,2,4,1,6,0,1,2]}
ID: 0x00,
parameters: [{ name: "data", type: zigbee_herdsman_1.Zcl.BuffaloZclDataType.BUFFER }],
},
clearSwitchAction: {
// This command can be used to clear any action particular switch was configured to execute
// Payload {"data":[<SWITCH_ID>,0,0]}
ID: 0x02,
parameters: [{ name: "data", type: zigbee_herdsman_1.Zcl.BuffaloZclDataType.BUFFER }],
},
setSwitchScene: {
// This command can be used to set switch to recall a scene
// Payload {"data":[<SWITCH_ID>,0,0,0,0,<SCENE_ID>]}
// ADDING/REMOVING RELAYS FROM SCENE
// Scene can be used to change state of any or all relays in this switch.
// To ADD relay to a scene execute on relay endpoint (1-4) cluster 5 command 0 with payload { "groupid": 0, "sceneid": <SCENE_ID>, "transtime": 0, "scenename": "todo", "extensionfieldsets": [{"clstId": 6, "len": 1, "extField":[<ACTION>]}] }
// Where <ACTION> is 0 for OFF and 1 for ON (TOGGLE not supported)
// To REMOVE relay from a scene execute on relay endpoint (1-4) cluster 5 command 2 with payload { "groupid":0,"sceneid":<SCENE_ID> }
// COMMANDING RELAY AND RECALLING A SCENE
// It is possible to configure a switch to command a relay (see setSwitchRelay command) and recall a scene (this command). It is important to execute commands in the following order - clearSwitchAction, then setSwitchRelay and then setSwitchScene.
// This can be useful for a scenario where you have blinds motor set-up on relay 1 and 2, and would like to have switch 1 toggle relay 1, but turn off relay 2. You would command relay 1 with TOGGLE action and recall scene set-up for relay 2 to turn it off.
ID: 0x04,
parameters: [{ name: "data", type: zigbee_herdsman_1.Zcl.BuffaloZclDataType.BUFFER }],
},
},
commandsResponse: {},
});
};
const clusterManuSpecificOrviboPowerOnBehavior = () => {
return m.deviceAddCustomCluster("manuSpecificOrvibo2", {
ID: 0xff00,
attributes: {
powerOnBehavior: { ID: 0x0001, type: zigbee_herdsman_1.Zcl.DataType.UINT8 },
},
commands: {},
commandsResponse: {},
});
};
const orviboSwitchRewiring = (args) => {
const composite = e.composite("switch_actions", "switch_actions", ea.SET).withDescription("Switch actions");
for (const endpointName of args.endpointNames) {
composite.withFeature(e
.composite(endpointName, endpointName, ea.SET)
.withDescription("Set which scene and/or relay switch press should execute")
.withFeature(e.numeric("sceneid", ea.SET).withValueMin(0).withValueMax(255).withDescription("Scene id to recall. Set to 0 to recall none."))
.withFeature(e
.numeric("sceneturnoffrelay", ea.SET)
.withValueMin(0)
.withValueMax(4)
.withDescription("Relay id which set sceneid will change to off when scene is recalled. Set to 0 if no relay is affected by the scene.")) // TODO: We should just use scenes, however we can not set them up yet via front-end as it does not support endpoints. [See feature request](https://github.com/nurikk/zigbee2mqtt-frontend/issues/2393).
.withFeature(e
.numeric("relaynumber", ea.SET)
.withValueMin(0)
.withValueMax(4)
.withDescription("Relay number to act on. Set to 0 to act on none."))
.withFeature(e
.numeric("relayaction", ea.SET)
.withValueMin(0)
.withValueMax(2)
.withDescription("Relay operation to execute. 0 = OFF, 1 = ON, 2 = TOGGLE.")));
}
composite.withFeature(e
.binary("forceupdate", ea.SET, true, false)
.withDescription("Force of all switches update when applying changes. When turned off only changed switches will be affected."));
const options = [composite];
const fromZigbee = [
{
cluster: "genScenes",
type: "commandRecall",
options,
convert: (model, msg, publish, options, meta) => {
if ((0, utils_1.hasAlreadyProcessedMessage)(msg, model))
return;
const payload = { action: (0, utils_1.postfixWithEndpointName)(`recall_${msg.data.sceneid}`, msg, model, meta) };
(0, utils_1.addActionGroup)(payload, msg, model);
// Orvibo switch can be configured to both recall a scene and act on a relay. In this situation it does not publish new state (when scene is recalled), so here we are updating state accordingly.
const switch_actions = options.switch_actions;
if (!switch_actions) {
return;
}
const affectedEndpointNames = args.endpointNames.filter((en) => switch_actions[en]?.sceneid === msg.data.sceneid);
const affectedRelays = affectedEndpointNames.map((en) => ({
relaynumber: switch_actions[en]?.relaynumber,
relayaction: switch_actions[en]?.relayaction,
}));
const distinctAffectedRelays = distinct(affectedRelays, (relay) => `${relay.relaynumber}_${relay.relayaction}`);
if (distinctAffectedRelays.length > 1) {
logger_1.logger.warning("Switch has multiple endpoints set-up to recall same scene with different relay configurations. We are unable to figure out which relay state might have changed.", NS);
}
else if (distinctAffectedRelays.length === 0) {
// Nothing to do...
}
else {
const { relaynumber, relayaction } = distinctAffectedRelays[0];
const endpointName = args.endpointIds[relaynumber];
payload[`state_${endpointName}`] =
relayaction === 0 ? "OFF" : relayaction === 1 ? "ON" : meta.state[`state_${endpointName}`] === "ON" ? "OFF" : "ON";
}
const turnOffRelay = affectedEndpointNames[0] ? switch_actions[affectedEndpointNames[0]]?.sceneturnoffrelay : undefined;
if (typeof turnOffRelay === "number") {
// Update relay state
payload[`state_${args.endpointIds[turnOffRelay]}`] = "OFF";
}
return payload;
},
},
];
const onEvent = [
async (type, data, device, settings, state, meta) => {
if (type !== "deviceOptionsChanged") {
return;
}
const endpointsOptionsFrom = data?.from?.switch_actions ?? {};
const endpointsOptionsTo = data?.to?.switch_actions ?? {};
if (!endpointsOptionsTo) {
return;
}
const forceUpdate = endpointsOptionsTo.forceupdate;
for (const endpointName of args.endpointNames) {
let from = endpointsOptionsFrom[endpointName];
let to = endpointsOptionsTo[endpointName];
if (!to && !from && !forceUpdate) {
return;
}
to = to ?? {};
to.sceneid = to.sceneid ? to.sceneid : 0;
to.relaynumber = to.relaynumber ? to.relaynumber : 0;
to.relayaction = to.relayaction ? to.relayaction : 0;
from = from ?? {};
if (from.sceneid !== to.sceneid || from.relaynumber !== to.relaynumber || from.relayaction !== to.relayaction || forceUpdate) {
const switchId = args.endpoints[endpointName];
await device.getEndpoint(7).command("manuSpecificOrvibo", "clearSwitchAction", { data: [switchId, 0, 0] });
const { sceneid, relaynumber, relayaction } = to;
if (sceneid) {
await device.getEndpoint(7).command("manuSpecificOrvibo", "setSwitchScene", { data: [switchId, 0, 0, 0, 0, sceneid] });
}
if (relaynumber && device.ieeeAddr.length > 3) {
const invertedAddress = hexToBytes(device.ieeeAddr).reverse();
await device.getEndpoint(7).command("manuSpecificOrvibo", "setSwitchRelay", {
data: [switchId, 0, 0, ...invertedAddress, relaynumber, 4, 1, 6, 0, 1, relayaction],
});
}
}
}
},
];
return {
onEvent,
fromZigbee,
isModernExtend: true,
};
};
const orviboSwitchPowerOnBehavior = () => {
const powerOnLookup = { 1: "off", 2: "previous" };
const powerOnLookup2 = { off: 1, previous: 2 };
const exposes = [e.power_on_behavior(["off", "previous"])];
const fromZigbee = [
{
cluster: "manuSpecificOrvibo2",
type: ["readResponse"],
convert: (model, msg, publish, options, meta) => {
const result = {};
if (typeof msg.data.powerOnBehavior === "number") {
result.power_on_behavior = powerOnLookup[msg.data.powerOnBehavior];
}
return result;
},
},
];
const toZigbee = [
{
key: ["power_on_behavior"],
convertSet: async (entity, key, value, meta) => {
if (key === "power_on_behavior") {
await entity.write("manuSpecificOrvibo2", { powerOnBehavior: powerOnLookup2[value] });
}
},
convertGet: async (entity, key, meta) => {
if (key === "power_on_behavior") {
await entity.read("manuSpecificOrvibo2", ["powerOnBehavior"]);
}
},
},
];
return {
exposes,
fromZigbee,
toZigbee,
isModernExtend: true,
};
};
exports.definitions = [
{
zigbeeModel: ["ccb9f56837ab41dcad366fb1452096b6", "250bccf66c41421b91b5e3242942c164", "af22cef59b2543d1be1dfab4f1c9c920"],
model: "DD10Z",
vendor: "ORVIBO",
description: "Smart spotlight",
// https://github.com/Koenkk/zigbee2mqtt/issues/13123#issuecomment-1198793749
meta: { disableDefaultResponse: true },
toZigbee: [tzLocal.DD10Z_brightness],
extend: [m.light({ powerOnBehavior: false, colorTemp: { range: [153, 370], startup: false } })],
},
{
zigbeeModel: ["9ff5a780c5a4470d9087175c71d50f92"],
model: "DSZ12060",
vendor: "ORVIBO",
description: "Spot light S10",
extend: [m.identify(), m.light({ effect: false, colorTemp: { range: [166, 370] } })],
},
{
zigbeeModel: ["4a33f5ea766a4c96a962b371ffde9943"],
model: "DS20Z07B",
vendor: "ORVIBO",
description: "Downlight (S series)",
extend: [m.light({ colorTemp: { range: [166, 370] } })],
},
{
zigbeeModel: ["ORVIBO Socket", "93e29b89b2ee45bea5bdbb7679d75d24"],
model: "OR-ZB-S010-3C",
vendor: "ORVIBO",
description: "Smart socket",
extend: [m.onOff()],
},
{
zigbeeModel: ["3c4e4fc81ed442efaf69353effcdfc5f", "51725b7bcba945c8a595b325127461e9"],
model: "CR11S8UZ",
vendor: "ORVIBO",
description: "Smart sticker switch",
fromZigbee: [fz.orvibo_raw_1],
exposes: [
e.action([
"button_1_click",
"button_1_hold",
"button_1_release",
"button_2_click",
"button_2_hold",
"button_2_release",
"button_3_click",
"button_3_hold",
"button_3_release",
"button_4_click",
"button_4_hold",
"button_4_release",
]),
],
toZigbee: [],
},
{
zigbeeModel: ["31c989b65ebb45beaf3b67b1361d3965"],
model: "T18W3Z",
vendor: "ORVIBO",
description: "Neutral smart switch 3 gang",
extend: [
clusterManuSpecificOrviboPowerOnBehavior(),
orviboSwitchPowerOnBehavior(),
m.deviceEndpoints({ endpoints: { l1: 1, l2: 2, l3: 3 } }),
m.onOff({ configureReporting: false, powerOnBehavior: false, endpointNames: ["l1", "l2", "l3"] }),
],
},
{
zigbeeModel: ["fdd76effa0e146b4bdafa0c203a37192", "c670e231d1374dbc9e3c6a9fffbd0ae6", "75a4bfe8ef9c4350830a25d13e3ab068"],
model: "SM10ZW",
vendor: "ORVIBO",
description: "Door or window contact switch",
fromZigbee: [fz.ias_contact_alarm_1, fz.battery],
toZigbee: [],
exposes: [e.contact(), e.battery_low(), e.tamper(), e.battery()],
},
{
zigbeeModel: ["8643db61de35494d93e72c1289b526a3"],
model: "RL804CZB",
vendor: "ORVIBO",
description: "Zigbee LED controller RGB + CCT or RGBW",
extend: [m.light({ colorTemp: { range: undefined }, color: true })],
},
{
zigbeeModel: ["82c167c95ed746cdbd21d6817f72c593", "8762413da99140cbb809195ff40f8c51"],
model: "RL804QZB",
vendor: "ORVIBO",
description: "Multi-functional 3 gang relay",
extend: [m.deviceEndpoints({ endpoints: { l1: 1, l2: 2, l3: 3 } }), m.onOff({ endpointNames: ["l1", "l2", "l3"], configureReporting: false })],
},
{
zigbeeModel: ["396483ce8b3f4e0d8e9d79079a35a420"],
model: "CM10ZW",
vendor: "ORVIBO",
description: "Multi-functional 3 gang relay",
extend: [m.deviceEndpoints({ endpoints: { l1: 1, l2: 2, l3: 3 } }), m.onOff({ endpointNames: ["l1", "l2", "l3"] })],
},
{
zigbeeModel: ["b467083cfc864f5e826459e5d8ea6079"],
model: "ST20",
vendor: "ORVIBO",
description: "Temperature & humidity sensor",
fromZigbee: [fz.humidity, fz.temperature, fz.battery],
toZigbee: [],
meta: { battery: { voltageToPercentage: { min: 2500, max: 3000 } } },
configure: async (device, coordinatorEndpoint) => {
const endpoint1 = device.getEndpoint(1);
await reporting.bind(endpoint1, coordinatorEndpoint, ["msTemperatureMeasurement"]);
const endpoint2 = device.getEndpoint(2);
await reporting.bind(endpoint2, coordinatorEndpoint, ["msRelativeHumidity", "genPowerCfg"]);
await reporting.temperature(endpoint1);
await reporting.humidity(endpoint2);
await reporting.batteryVoltage(endpoint2);
await reporting.batteryPercentageRemaining(endpoint2);
},
exposes: [e.humidity(), e.temperature(), e.battery()],
},
{
zigbeeModel: ["888a434f3cfc47f29ec4a3a03e9fc442"],
model: "ST21",
vendor: "ORVIBO",
description: "Temperature & humidity Sensor",
fromZigbee: [fz.temperature, fz.humidity, fz.battery],
toZigbee: [],
meta: { battery: { voltageToPercentage: { min: 2500, max: 3000 } } },
configure: async (device, coordinatorEndpoint) => {
const endpoint1 = device.getEndpoint(1);
await reporting.bind(endpoint1, coordinatorEndpoint, ["msTemperatureMeasurement"]);
const endpoint2 = device.getEndpoint(2);
await reporting.bind(endpoint2, coordinatorEndpoint, ["msRelativeHumidity", "genPowerCfg"]);
await reporting.temperature(endpoint1);
await reporting.humidity(endpoint2);
await reporting.batteryVoltage(endpoint2);
await reporting.batteryPercentageRemaining(endpoint2);
},
exposes: [e.temperature(), e.humidity(), e.battery()],
},
{
zigbeeModel: ["898ca74409a740b28d5841661e72268d", "50938c4c3c0b4049923cd5afbc151bde"],
model: "ST30",
vendor: "ORVIBO",
description: "Temperature & humidity sensor",
extend: [m.battery(), m.humidity(), m.temperature()],
},
{
zigbeeModel: ["9f76c9f31b4c4a499e3aca0977ac4494", "6fd24c0f58a04c848fea837aaa7d6e0f"],
model: "T30W3Z",
vendor: "ORVIBO",
description: "Smart light switch - 3 gang",
extend: [
clusterManuSpecificOrviboPowerOnBehavior(),
orviboSwitchPowerOnBehavior(),
m.deviceEndpoints({ endpoints: { top: 1, center: 2, bottom: 3 } }),
m.onOff({ configureReporting: false, powerOnBehavior: false, endpointNames: ["top", "center", "bottom"] }),
],
},
{
zigbeeModel: ["074b3ffba5a045b7afd94c47079dd553"],
model: "T21W2Z",
vendor: "ORVIBO",
description: "Smart light switch - 2 gang",
extend: [
clusterManuSpecificOrviboPowerOnBehavior(),
orviboSwitchPowerOnBehavior(),
m.deviceEndpoints({ endpoints: { top: 1, bottom: 2 } }),
m.onOff({ configureReporting: false, powerOnBehavior: false, endpointNames: ["top", "bottom"] }),
],
},
{
zigbeeModel: ["095db3379e414477ba6c2f7e0c6aa026"],
model: "T21W1Z",
vendor: "ORVIBO",
description: "Smart light switch - 1 gang",
extend: [
clusterManuSpecificOrviboPowerOnBehavior(),
orviboSwitchPowerOnBehavior(),
m.onOff({ configureReporting: false, powerOnBehavior: false }),
],
},
{
zigbeeModel: ["093199ff04984948b4c78167c8e7f47e", "c8daea86aa9c415aa524365775b1218c", "c8daea86aa9c415aa524365775b1218"],
model: "W40CZ",
vendor: "ORVIBO",
description: "Smart curtain motor",
fromZigbee: [fz.curtain_position_analog_output, fz.cover_position_tilt, fz.ignore_basic_report],
toZigbee: [tz.cover_state, tz.cover_position_tilt],
exposes: [e.cover_position()],
},
{
zigbeeModel: ["428f8caf93574815be1a98fa6732c3ea"],
model: "W45CZ",
vendor: "ORVIBO",
description: "Smart curtain motor",
fromZigbee: [fz.curtain_position_analog_output, fz.cover_position_tilt, fz.ignore_basic_report],
toZigbee: [tz.cover_state, tz.cover_position_tilt],
exposes: [e.cover_position()],
},
{
zigbeeModel: ["e0fc98cc88df4857847dc4ae73d80b9e"],
model: "R11W2Z",
vendor: "ORVIBO",
description: "In wall switch - 2 gang",
extend: [
clusterManuSpecificOrviboPowerOnBehavior(),
orviboSwitchPowerOnBehavior(),
m.deviceEndpoints({ endpoints: { l1: 1, l2: 2 } }),
m.onOff({ configureReporting: false, powerOnBehavior: false, endpointNames: ["l1", "l2"] }),
],
},
{
zigbeeModel: ["9ea4d5d8778d4f7089ac06a3969e784b", "83b9b27d5ffb4830bf35be5b1023623e", "2810c2403b9c4a5db62cc62d1030d95e"],
model: "R20W2Z",
vendor: "ORVIBO",
description: "In wall switch - 2 gang",
extend: [m.deviceEndpoints({ endpoints: { l1: 1, l2: 2 } }), m.onOff({ endpointNames: ["l1", "l2"] })],
},
{
zigbeeModel: ["131c854783bc45c9b2ac58088d09571c", "b2e57a0f606546cd879a1a54790827d6", "585fdfb8c2304119a2432e9845cf2623"],
model: "SN10ZW",
vendor: "ORVIBO",
description: "Occupancy sensor",
fromZigbee: [fz.ias_occupancy_alarm_1_with_timeout, fz.battery],
toZigbee: [],
exposes: [e.occupancy(), e.battery_low(), e.tamper(), e.battery()],
},
{
zigbeeModel: ["da2edf1ded0d44e1815d06f45ce02029"],
model: "SW21",
vendor: "ORVIBO",
description: "Water leakage sensor",
fromZigbee: [fz.ias_water_leak_alarm_1],
toZigbee: [],
exposes: [e.water_leak(), e.battery_low(), e.tamper()],
},
{
zigbeeModel: ["b7e305eb329f497384e966fe3fb0ac69", "52debf035a1b4a66af56415474646c02", "MultIR", "ZL1-EN"],
model: "SW30",
vendor: "ORVIBO",
description: "Water leakage sensor",
fromZigbee: [fz.ias_water_leak_alarm_1],
toZigbee: [],
exposes: [e.water_leak(), e.battery_low(), e.tamper()],
},
{
zigbeeModel: ["987b1869e4944218aa0034750d4ac585"],
model: "SE20-O",
vendor: "ORVIBO",
description: "Smart emergency button",
fromZigbee: [fz.command_status_change_notification_action],
exposes: [e.action(["single"])],
toZigbee: [],
},
{
zigbeeModel: ["72bd56c539ca4c7fba73a9be0ae0d19f"],
model: "SE21",
vendor: "ORVIBO",
description: "Smart emergency button",
fromZigbee: [fz.command_status_change_notification_action],
exposes: [e.action(["off", "single", "double", "hold"])],
toZigbee: [],
},
{
zigbeeModel: ["2a103244da0b406fa51410c692f79ead"],
model: "AM25",
vendor: "ORVIBO",
description: "Smart blind controller",
fromZigbee: [fz.cover_position_tilt, fz.battery],
toZigbee: [tz.cover_state, tz.cover_position_tilt],
configure: async (device, coordinatorEndpoint) => {
const endpoint = device.getEndpoint(1);
await reporting.bind(endpoint, coordinatorEndpoint, ["genPowerCfg", "closuresWindowCovering"]);
await reporting.batteryPercentageRemaining(endpoint);
await reporting.currentPositionLiftPercentage(endpoint);
device.powerSource = "Battery";
device.save();
},
exposes: [e.cover_position(), e.battery()],
},
{
zigbeeModel: ["2ae011fb6d0542f58705d6861064eb5f", "71a0b275d9ba4895afdaf400bc7e3a0d", "b7313321dbe74da384d136a2a3fa2005"],
model: "T40W1Z",
vendor: "ORVIBO",
description: "MixSwitch 1 gang",
extend: [
clusterManuSpecificOrviboPowerOnBehavior(),
orviboSwitchPowerOnBehavior(),
m.onOff({ configureReporting: false, powerOnBehavior: false }),
],
},
{
zigbeeModel: ["2e13af8e17434961be98f055d68c2166"],
model: "T40W2Z",
vendor: "ORVIBO",
description: "MixSwitch 2 gangs",
extend: [
clusterManuSpecificOrviboPowerOnBehavior(),
orviboSwitchPowerOnBehavior(),
m.deviceEndpoints({ endpoints: { left: 1, right: 2 } }),
m.onOff({ configureReporting: false, powerOnBehavior: false, endpointNames: ["left", "right"] }),
],
},
{
zigbeeModel: ["e8d667cb184b4a2880dd886c23d00976"],
model: "T40W3Z_v1",
vendor: "ORVIBO",
description: "MixSwitch 3 gangs",
extend: [
clusterManuSpecificOrviboPowerOnBehavior(),
orviboSwitchPowerOnBehavior(),
m.deviceEndpoints({ endpoints: { left: 1, center: 2, right: 3 } }),
m.onOff({ configureReporting: false, powerOnBehavior: false, endpointNames: ["left", "center", "right"] }),
],
},
{
zigbeeModel: ["f3be30b8c43c44da85aac622e5b56111", "f58591161f344ccea242688a6de7d25d"],
model: "T40W3Z_v2",
vendor: "ORVIBO",
description: "MixSwitch 3 gangs",
extend: [
clusterManuSpecificOrviboPowerOnBehavior(),
orviboSwitchPowerOnBehavior(),
m.deviceEndpoints({ endpoints: { right: 1, center: 2, left: 3 } }),
m.onOff({ configureReporting: false, powerOnBehavior: false, endpointNames: ["right", "center", "left"] }),
],
},
{
zigbeeModel: ["20513b10079f4cc68cffb8b0dc6d3277", "c2ea8c76f9fe40e5a7de5e8fb8dfb765"],
model: "T40W4Z",
vendor: "ORVIBO",
description: "MixSwitch 4 gangs",
extend: [
clusterManuSpecifcOrviboSwitchRewiring(),
m.deviceEndpoints({ endpoints: { left_up: 1, left_down: 2, center_up: 3, center_down: 4, right_up: 5, right_down: 6 } }),
m.onOff({
powerOnBehavior: false,
configureReporting: false,
endpointNames: ["left_up", "left_down", "center_up", "center_down", "right_up", "right_down"],
}),
orviboSwitchRewiring({
endpointNames: ["left_up", "left_down", "center_up", "center_down", "right_up", "right_down"],
endpoints: { left_up: 1, left_down: 2, center_up: 3, center_down: 4, right_up: 5, right_down: 6 },
endpointIds: { 1: "left_up", 2: "left_down", 3: "center_up", 4: "center_down", 5: "right_up", 6: "right_down" },
}),
m.commandsScenes(),
],
},
{
zigbeeModel: ["bcb949e87e8c4ea6bc2803052dd8fbf5"],
model: "T40S6Z",
vendor: "ORVIBO",
description: "MixSwitch 6 gangs",
fromZigbee: [fz.orvibo_raw_2],
toZigbee: [],
exposes: [e.action(["button_1_click", "button_2_click", "button_3_click", "button_4_click", "button_5_click", "button_6_click"])],
},
{
zigbeeModel: ["ba8120ad03f744ecb6a973672369e80d"],
model: "T41W1Z",
vendor: "ORVIBO",
description: "MixSwitch 1 gang (without neutral wire)",
extend: [
clusterManuSpecificOrviboPowerOnBehavior(),
orviboSwitchPowerOnBehavior(),
m.onOff({ configureReporting: false, powerOnBehavior: false }),
],
},
{
zigbeeModel: ["7c8f476a0f764cd4b994bc73d07c906d"],
model: "T41W2Z",
vendor: "ORVIBO",
description: "MixSwitch 2 gang (without neutral wire)",
extend: [
clusterManuSpecificOrviboPowerOnBehavior(),
orviboSwitchPowerOnBehavior(),
m.deviceEndpoints({ endpoints: { left: 1, right: 2 } }),
m.onOff({ configureReporting: false, powerOnBehavior: false, endpointNames: ["left", "right"] }),
],
},
{
zigbeeModel: ["cb7ce9fe2cb147e69c5ea700b39b3d5b"],
model: "DM10ZW",
vendor: "ORVIBO",
description: "0-10v dimmer",
extend: [m.light({ colorTemp: { range: [153, 371] } })],
},
{
zigbeeModel: ["1a20628504bf48c88ed698fe96b7867c"],
model: "DTZ09039",
vendor: "ORVIBO",
description: "Downlight (Q series)",
extend: [m.light()],
},
{
zigbeeModel: ["bbfed49c738948b989911f9f9f73d759"],
model: "R30W3Z",
vendor: "ORVIBO",
description: "In-wall switch 3 gang",
extend: [
clusterManuSpecificOrviboPowerOnBehavior(),
orviboSwitchPowerOnBehavior(),
m.deviceEndpoints({ endpoints: { left: 1, center: 2, right: 3 } }),
m.onOff({ configureReporting: false, powerOnBehavior: false, endpointNames: ["left", "center", "right"] }),
],
},
{
zigbeeModel: ["0e93fa9c36bb417a90ad5d8a184b683a"],
model: "SM20",
vendor: "ORVIBO",
description: "Door or window contact switch",
fromZigbee: [fz.ias_contact_alarm_1, fz.battery],
toZigbee: [],
exposes: [e.contact(), e.battery_low(), e.tamper(), e.battery()],
},
];
//# sourceMappingURL=orvibo.js.map