zigbee-herdsman-converters
Version:
Collection of device converters to be used with zigbee-herdsman
172 lines • 8.3 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 fz = __importStar(require("../converters/fromZigbee"));
const tz = __importStar(require("../converters/toZigbee"));
const exposes = __importStar(require("../lib/exposes"));
const m = __importStar(require("../lib/modernExtend"));
const reporting = __importStar(require("../lib/reporting"));
const utils = __importStar(require("../lib/utils"));
const e = exposes.presets;
const ea = exposes.access;
exports.definitions = [
{
zigbeeModel: ["PU01"],
model: "6717-84",
vendor: "Busch-Jaeger",
description: "Adaptor plug",
extend: [m.onOff()],
},
{
// Busch-Jaeger 6735, 6736 and 6737 have been tested with the 6710 U (Power Adapter),
// 6711 U (Relay) and 6715 U (dimmer) back-ends. Unfortunately both the relay and the dimmer
// report as model 'RM01' with genLevelCtrl clusters, so we need to set up both of them
// as dimmable lights.
//
// The battery-powered version of the device ('RB01') is supported as well. These devices are
// sold as Busch-Jaeger 6735/01, 6736/01 and 6737/01.
//
// In order to manually capture scenes as described in the devices manual, the endpoint
// corresponding to the row needs to be unbound (https://www.zigbee2mqtt.io/information/binding.html)
// If that operation was successful, the switch will respond to button presses on that
// by blinking multiple times (vs. just blinking once if it's bound).
zigbeeModel: ["RM01", "RB01"],
model: "6735/6736/6737",
vendor: "Busch-Jaeger",
description: "Zigbee Light Link power supply/relay/dimmer/wall-switch",
endpoint: (device) => {
return { row_1: 0x0a, row_2: 0x0b, row_3: 0x0c, row_4: 0x0d, relay: 0x12 };
},
exposes: (device, options) => {
const expose = [];
// If endpoint 0x12 (18) is present this means the following two things:
// 1. The device is connected to a relay or dimmer and needs to be exposed as a dimmable light
// 2. The top rocker will not be usable (not emit any events) as it's hardwired to the relay/dimmer
if (!device || device.getEndpoint(0x12) != null) {
expose.push(e.light_brightness().withEndpoint("relay"));
}
// Not all devices support all actions (depends on number of rocker rows and if relay/dimmer is installed),
// but defining all possible actions here won't do any harm.
// The recall actions are only emitted when the `genScenes` cluster is bound to a group/light.
expose.push(e.action([
"off_row_1",
"on_row_1",
"brightness_step_down_row_1",
"brightness_step_up_row_1",
"brightness_stop_row_1",
"off_row_2",
"on_row_2",
"brightness_step_down_row_2",
"brightness_step_up_row_2",
"brightness_stop_row_2",
"off_row_3",
"on_row_3",
"brightness_step_down_row_3",
"brightness_step_up_row_3",
"brightness_stop_row_3",
"off_row_4",
"on_row_4",
"brightness_step_down_row_4",
"brightness_step_up_row_4",
"brightness_stop_row_4",
"recall_*_row_*",
]));
return expose;
},
meta: { multiEndpoint: true },
configure: async (device, coordinatorEndpoint) => {
// Depending on the actual devices - 6735, 6736, or 6737 - there are 1, 2, or 4 endpoints for
// the rockers. If the module is installed on a dimmer or relay, there is an additional endpoint (18).
// These devices only have a very limited amount of memory available. Possibly depending on network size (?)
// they only support around 5 bindings so we need to be very careful about the binding setup. We intentionally
// skip binding the endpoint 18 (light endpoint) to the coordinator. The device does not support ZigBee
// reporting anyways and we poll the device's state instead, so this does not cause any loss of functionality.
const endpoint18 = device.getEndpoint(0x12);
if (endpoint18 == null) {
// We only need to bind endpoint 10 (top rocker) if endpoint 18 (relay/dimmer) is not present.
// Otherwise the top rocker is hard-wired to the relay/dimmer and cannot be used anyways.
const endpoint10 = device.getEndpoint(0x0a);
if (endpoint10 != null) {
await reporting.bind(endpoint10, coordinatorEndpoint, ["genLevelCtrl"]);
}
}
const endpoint11 = device.getEndpoint(0x0b);
if (endpoint11 != null) {
await reporting.bind(endpoint11, coordinatorEndpoint, ["genLevelCtrl"]);
}
const endpoint12 = device.getEndpoint(0x0c);
if (endpoint12 != null) {
await reporting.bind(endpoint12, coordinatorEndpoint, ["genLevelCtrl"]);
}
const endpoint13 = device.getEndpoint(0x0d);
if (endpoint13 != null) {
await reporting.bind(endpoint13, coordinatorEndpoint, ["genLevelCtrl"]);
}
},
fromZigbee: [
fz.ignore_basic_report,
fz.on_off,
fz.brightness,
fz.command_on,
fz.command_off,
fz.command_step,
fz.command_stop,
fz.command_recall,
],
options: [
e
.numeric("state_poll_interval", ea.SET)
.withValueMin(-1)
.withDescription("This device does not support state reporting so it is polled instead. The default poll interval is 60 seconds, set to -1 to disable."),
],
toZigbee: [tz.light_onoff_brightness, tz.light_brightness_step, tz.light_brightness_move],
onEvent: (type, data, device, options) => {
const switchEndpoint = device.getEndpoint(0x12);
if (switchEndpoint == null) {
return;
}
// This device doesn't support reporting.
// Therefore we read the on/off state every 60 seconds.
// This is the same way as the Hue bridge does it.
const poll = async () => {
await switchEndpoint.read("genOnOff", ["onOff"]);
await switchEndpoint.read("genLevelCtrl", ["currentLevel"]);
};
utils.onEventPoll(type, data, device, options, "state", 60, poll);
},
},
];
//# sourceMappingURL=busch_jaeger.js.map
;