zigbee-herdsman-converters
Version:
Collection of device converters to be used with zigbee-herdsman
1,186 lines • 58.5 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 m = __importStar(require("../lib/modernExtend"));
const reporting = __importStar(require("../lib/reporting"));
const e = exposes.presets;
const fzLocal = {
thirdreality_acceleration: {
cluster: "3rVirationSpecialcluster",
type: ["attributeReport", "readResponse"],
convert: (model, msg, publish, options, meta) => {
const payload = {};
if (msg.data.xAxis)
payload.x_axis = msg.data.xAxis;
if (msg.data.yAxis)
payload.y_axis = msg.data.yAxis;
if (msg.data.zAxis)
payload.z_axis = msg.data.zAxis;
return payload;
},
},
thirdreality_private_motion_sensor: {
cluster: "r3Specialcluster",
type: "attributeReport",
convert: (model, msg, publish, options, meta) => {
const zoneStatus = msg.data[2];
return { occupancy: (zoneStatus & 1) > 0 };
},
},
};
exports.definitions = [
{
zigbeeModel: ["3RSS009Z"],
model: "3RSS009Z",
vendor: "Third Reality",
description: "Smart switch Gen3",
ota: true,
fromZigbee: [fz.on_off, fz.battery],
toZigbee: [tz.on_off, tz.ignore_transition],
exposes: [e.switch(), e.battery(), e.battery_voltage()],
configure: async (device, coordinatorEndpoint) => {
const endpoint = device.getEndpoint(1);
await endpoint.read("genPowerCfg", ["batteryPercentageRemaining"]);
device.powerSource = "Battery";
device.save();
},
extend: [
m.deviceAddCustomCluster("3rSwitchGen3SpecialCluster", {
name: "3rSwitchGen3SpecialCluster",
ID: 0xff02,
manufacturerCode: 0x1233,
attributes: {
onToOffDelay: { name: "onToOffDelay", ID: 0x0001, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true, max: 0xffff },
offToOnDelay: { name: "offToOnDelay", ID: 0x0002, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true, max: 0xffff },
},
commands: {},
commandsResponse: {},
}),
],
},
{
zigbeeModel: ["3RSS008Z"],
model: "3RSS008Z",
vendor: "Third Reality",
description: "RealitySwitch Plus",
fromZigbee: [fz.on_off, fz.battery],
toZigbee: [tz.on_off, tz.ignore_transition],
meta: { battery: { voltageToPercentage: "3V_2100" } },
exposes: [e.switch(), e.battery(), e.battery_voltage()],
},
{
zigbeeModel: ["3RSS007Z"],
model: "3RSS007Z",
vendor: "Third Reality",
description: "Smart light switch",
extend: [m.onOff()],
meta: { disableDefaultResponse: true },
},
{
zigbeeModel: ["3RSL011Z"],
model: "3RSL011Z",
vendor: "Third Reality",
description: "Smart light A19",
extend: [m.light({ colorTemp: { range: undefined } })],
},
{
zigbeeModel: ["3RSL012Z"],
model: "3RSL012Z",
vendor: "Third Reality",
description: "Smart light BR30",
extend: [m.light({ colorTemp: { range: undefined } })],
},
{
zigbeeModel: ["3RWS18BZ"],
model: "3RWS18BZ",
vendor: "Third Reality",
description: "Water sensor",
ota: true,
extend: [
m.deviceAddCustomCluster("3rWaterSensorcluster", {
name: "3rWaterSensorcluster",
ID: 0xff01,
manufacturerCode: 0x1233,
attributes: {
sirenOnOff: { name: "sirenOnOff", ID: 0x0010, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true, max: 0xff },
sirenMinutes: { name: "sirenMinutes", ID: 0x0011, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true, max: 0xff },
},
commands: {},
commandsResponse: {},
}),
m.onOff({ powerOnBehavior: false }),
m.iasZoneAlarm({
zoneType: "water_leak",
zoneAttributes: ["alarm_1", "battery_low"],
}),
m.battery(),
m.forcePowerSource({ powerSource: "Battery" }),
m.binary({
name: "water_leak_buzzer",
valueOn: ["ON", 1],
valueOff: ["OFF", 0],
cluster: "3rWaterSensorcluster",
attribute: "sirenOnOff",
description: "Turns the water-leak detection buzzer on or off.",
access: "ALL",
}),
m.numeric({
name: "water_leak_buzzer_alarm_mode",
unit: "min",
valueMin: 0,
valueMax: 255,
cluster: "3rWaterSensorcluster",
attribute: "sirenMinutes",
description: "Sets the buzzers beeping mode for water-leak alerts.(0 = continuous;values = beeping duration (minutes).)",
access: "ALL",
}),
],
},
{
zigbeeModel: ["3RWS0218Z"],
model: "3RWS0218Z",
vendor: "Third Reality",
description: "Smart WaterLeak Sensor WL2",
ota: true,
extend: [m.iasZoneAlarm({ zoneType: "water_leak", zoneAttributes: ["alarm_1"] }), m.battery()],
},
{
zigbeeModel: ["3RMS16BZ"],
model: "3RMS16BZ",
vendor: "Third Reality",
description: "Wireless motion sensor",
fromZigbee: [fz.ias_occupancy_alarm_1, fz.battery],
toZigbee: [],
ota: true,
exposes: [e.occupancy(), e.battery_low(), e.battery(), e.battery_voltage()],
configure: async (device, coordinatorEndpoint) => {
const endpoint = device.getEndpoint(1);
await endpoint.read("genPowerCfg", ["batteryPercentageRemaining"]);
device.powerSource = "Battery";
device.save();
},
extend: [
m.deviceAddCustomCluster("3rMotionSpecialCluster", {
name: "3rMotionSpecialCluster",
ID: 0xff01,
manufacturerCode: 0x1233,
attributes: {
coolDownTime: { name: "coolDownTime", ID: 0x0001, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true, max: 0xffff },
},
commands: {},
commandsResponse: {},
}),
],
},
{
zigbeeModel: ["3RSMR01067Z"],
model: "3RSMR01067Z",
vendor: "Third Reality",
description: "Smart motion sensor R1",
ota: true,
extend: [
m.forcePowerSource({ powerSource: "Battery" }),
m.iasZoneAlarm({ zoneType: "occupancy", zoneAttributes: ["alarm_1", "battery_low"] }),
m.battery({ voltage: true, percentageReporting: false }),
m.deviceAddCustomCluster("3rRadarSpecialCluster", {
name: "3rRadarSpecialCluster",
ID: 0xff01,
manufacturerCode: 0x1407,
attributes: {
coolDownTime: { name: "coolDownTime", ID: 0x0001, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true, max: 0xffff },
},
commands: {},
commandsResponse: {},
}),
],
},
{
zigbeeModel: ["3RAQ1096Z"],
model: "3RAQ1096Z",
vendor: "Third Reality",
description: "Smart air quality sensor",
ota: true,
extend: [
m.temperature(),
m.humidity(),
m.co2(),
m.deviceAddCustomCluster("3rCO2SensorCluster", {
name: "3rCO2SensorCluster",
ID: 0x042e,
manufacturerCode: 0x1407,
attributes: {
volatileOrganicCompounds: {
name: "volatileOrganicCompounds",
ID: 0x0000,
type: zigbee_herdsman_1.Zcl.DataType.UINT32,
max: 0xffffffff,
},
},
commands: {},
commandsResponse: {},
}),
m.numeric({
name: "voc_index",
cluster: "3rCO2SensorCluster",
attribute: "volatileOrganicCompounds",
unit: "aqi",
description: "Measured VOC Index",
access: "STATE_GET",
}),
],
},
{
zigbeeModel: ["3RPL01084Z"],
model: "3RPL01084Z",
vendor: "Third Reality",
description: "Multi-function smart presence sensor R3",
ota: true,
extend: [
m.occupancy(),
m.illuminance(),
m.deviceAddCustomCluster("3r60gRadarSpecialCluster", {
name: "3r60gRadarSpecialCluster",
ID: 0x042e,
manufacturerCode: 0x1407,
attributes: {
totalVolatileOrganicCompounds: {
name: "totalVolatileOrganicCompounds",
ID: 0x0000,
type: zigbee_herdsman_1.Zcl.DataType.UINT32,
max: 0xffffffff,
},
presenceSensorDetectDistanceLevel: {
name: "presenceSensorDetectDistanceLevel",
ID: 0xf002,
type: zigbee_herdsman_1.Zcl.DataType.UINT8,
write: true,
min: 1,
max: 6,
},
tvocSensorCalibration: { name: "tvocSensorCalibration", ID: 0xf001, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true, min: 1, max: 1 },
tvocAlertThreshold: { name: "tvocAlertThreshold", ID: 0xf003, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true, min: 3000, max: 50000 },
motionDetectSensitivityLevel: {
name: "motionDetectSensitivityLevel",
ID: 0xf004,
type: zigbee_herdsman_1.Zcl.DataType.UINT8,
write: true,
min: 0,
max: 20,
},
presenceDetectSensitivityLevel: {
name: "presenceDetectSensitivityLevel",
ID: 0xf005,
type: zigbee_herdsman_1.Zcl.DataType.UINT8,
write: true,
min: 0,
max: 20,
},
presenceHoldTimeLevel: { name: "presenceHoldTimeLevel", ID: 0xf006, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true, min: 1, max: 4 },
tvocAlertEnable: { name: "tvocAlertEnable", ID: 0xf007, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true, min: 0, max: 1 },
},
commands: {},
commandsResponse: {},
}),
m.numeric({
name: "total_volatile_organic_compounds",
cluster: "3r60gRadarSpecialCluster",
attribute: "totalVolatileOrganicCompounds",
unit: "ppb",
description: "Measured TVOC value",
access: "STATE_GET",
}),
m.enumLookup({
name: "tvoc_sensor_calibration",
lookup: { Reset: 1 },
cluster: "3r60gRadarSpecialCluster",
attribute: "tvocSensorCalibration",
description: "TVOC sensor calibration",
access: "ALL",
}),
m.numeric({
name: "presence_sensor_sensitivity",
valueMin: 1,
valueMax: 6,
cluster: "3r60gRadarSpecialCluster",
attribute: "presenceSensorDetectDistanceLevel",
description: "Presence sensor detect distance level",
access: "ALL",
}),
m.numeric({
name: "tvoc_alert_threshold",
valueMin: 3000,
valueMax: 50000,
cluster: "3r60gRadarSpecialCluster",
attribute: "tvocAlertThreshold",
unit: "ppb",
description: "TVOC alert threshold",
access: "ALL",
}),
m.binary({
name: "tvoc_alert_enable",
valueOn: ["ON", 1],
valueOff: ["OFF", 0],
cluster: "3r60gRadarSpecialCluster",
attribute: "tvocAlertEnable",
description: "TVOC alert enable",
access: "ALL",
}),
m.numeric({
name: "motion_detect_sensitivity_level",
valueMin: 0,
valueMax: 20,
cluster: "3r60gRadarSpecialCluster",
attribute: "motionDetectSensitivityLevel",
unit: "level",
description: "Set motion detect sensitivity level",
access: "ALL",
}),
m.numeric({
name: "presence_detect_sensitivity_level",
valueMin: 0,
valueMax: 20,
cluster: "3r60gRadarSpecialCluster",
attribute: "presenceDetectSensitivityLevel",
unit: "level",
description: "Set Presence detect sensitivity level",
access: "ALL",
}),
m.numeric({
name: "presence_hold_time_level",
valueMin: 1,
valueMax: 4,
cluster: "3r60gRadarSpecialCluster",
attribute: "presenceHoldTimeLevel",
unit: "level",
description: "Set Presence hold time level",
access: "ALL",
}),
m.light({
color: { modes: ["xy"], enhancedHue: true },
colorTemp: { range: [154, 500] },
}),
],
},
{
zigbeeModel: ["3RDS17BZ"],
model: "3RDS17BZ",
vendor: "Third Reality",
description: "Door sensor",
fromZigbee: [fz.ias_contact_alarm_1, fz.battery],
toZigbee: [],
ota: true,
exposes: [e.contact(), e.battery_low(), e.battery(), e.battery_voltage()],
configure: async (device, coordinatorEndpoint) => {
const endpoint = device.getEndpoint(1);
await endpoint.read("genPowerCfg", ["batteryPercentageRemaining"]);
device.powerSource = "Battery";
device.save();
},
extend: [
m.deviceAddCustomCluster("3rDoorSpecialCluster", {
name: "3rDoorSpecialCluster",
ID: 0xff01,
manufacturerCode: 0x1233,
attributes: {
delayOpenAttrId: { name: "delayOpenAttrId", ID: 0x0000, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true, max: 0xffff },
},
commands: {},
commandsResponse: {},
}),
],
},
{
zigbeeModel: ["3RDTS01056Z"],
model: "3RDTS01056Z",
vendor: "Third Reality",
description: "Garage door tilt sensor",
extend: [
m.battery({ percentageReporting: false }),
m.forcePowerSource({ powerSource: "Battery" }),
m.iasZoneAlarm({ zoneType: "contact", zoneAttributes: ["alarm_1", "battery_low"] }),
m.deviceAddCustomCluster("3rGarageDoorSpecialCluster", {
name: "3rGarageDoorSpecialCluster",
ID: 0xff01,
manufacturerCode: 0x1407,
attributes: {
delayOpenAttrId: { name: "delayOpenAttrId", ID: 0x0000, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true, max: 0xffff },
zclCabrationAttrId: { name: "zclCabrationAttrId", ID: 0x0003, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true, max: 0xffff },
},
commands: {},
commandsResponse: {},
}),
],
ota: true,
},
{
zigbeeModel: ["3RSP019BZ"],
model: "3RSP019BZ",
vendor: "Third Reality",
description: "Zigbee / BLE smart plug",
extend: [
m.onOff(),
m.deviceAddCustomCluster("3rPlugGen1SpecialCluster", {
name: "3rPlugGen1SpecialCluster",
ID: 0xff03,
manufacturerCode: 0x1233,
attributes: {
onToOffDelay: { name: "onToOffDelay", ID: 0x0001, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true, max: 0xffff },
offToOnDelay: { name: "offToOnDelay", ID: 0x0002, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true, max: 0xffff },
allowBind: { name: "allowBind", ID: 0x0020, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true, max: 0xff },
},
commands: {},
commandsResponse: {},
}),
],
ota: true,
},
{
zigbeeModel: ["3RSB015BZ"],
model: "3RSB015BZ",
vendor: "Third Reality",
description: "Roller shade",
fromZigbee: [fz.cover_position_tilt, fz.battery],
toZigbee: [tz.cover_state, tz.cover_position_tilt],
meta: { battery: { dontDividePercentage: false } },
ota: true,
configure: async (device, coordinatorEndpoint) => {
const endpoint = device.getEndpoint(1);
await reporting.bind(endpoint, coordinatorEndpoint, ["genPowerCfg", "closuresWindowCovering"]);
await reporting.currentPositionLiftPercentage(endpoint);
try {
await reporting.batteryPercentageRemaining(endpoint);
}
catch {
/* Fails for some*/
}
},
exposes: [e.cover_position(), e.battery()],
extend: [
m.deviceAddCustomCluster("3rRollerShadeSpecialCluster", {
name: "3rRollerShadeSpecialCluster",
ID: 0xfff1,
manufacturerCode: 0x1233,
attributes: {
infraredOff: { name: "infraredOff", ID: 0x0000, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true, max: 0xff },
allowBind: { name: "allowBind", ID: 0x0020, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true, max: 0xff },
},
commands: {},
commandsResponse: {},
}),
],
},
{
zigbeeModel: ["TRZB3"],
model: "TRZB3",
vendor: "Third Reality",
description: "Roller blind motor",
extend: [m.battery()],
fromZigbee: [fz.cover_position_tilt],
toZigbee: [tz.cover_state, tz.cover_position_tilt],
exposes: [e.cover_position()],
},
{
zigbeeModel: ["3RSB02015Z"],
model: "3RSB02015Z",
vendor: "Third Reality",
description: "Third Reality Blind Gen2",
ota: true,
extend: [
m.battery(),
m.windowCovering({ controls: ["lift"] }),
m.commandsWindowCovering({ commands: ["open", "close", "stop"] }),
m.deviceAddCustomCluster("3rSmartBlindGen2SpecialCluster", {
name: "3rSmartBlindGen2SpecialCluster",
ID: 0xfff1,
manufacturerCode: 0x1233,
attributes: {
infraredEnable: { name: "infraredEnable", ID: 0x0000, type: 0x20, write: true, min: 0, max: 1 },
compensationSpeed: { name: "compensationSpeed", ID: 0x0001, type: 0x28, write: true, min: -100, max: 100 },
limitPosition: { name: "limitPosition", ID: 0x0002, type: 0x21, write: true, min: 50, max: 4100 },
totalCycleTimes: { name: "totalCycleTimes", ID: 0x0003, type: 0x21, write: true, min: 200, max: 334 },
lastRemainingBatteryPercentage: { name: "lastRemainingBatteryPercentage", ID: 0x0004, type: 0x20, write: true, min: 0, max: 100 },
},
commands: {},
commandsResponse: {},
}),
m.binary({
name: "ir_remote",
valueOn: ["ON", 0x00],
valueOff: ["OFF", 0x01],
cluster: "3rSmartBlindGen2SpecialCluster",
attribute: "infraredEnable",
description: "IR Remote Function Enable/Disable",
}),
m.numeric({
name: "bottom_balance_adjustment",
valueMin: -100,
valueMax: 100,
cluster: "3rSmartBlindGen2SpecialCluster",
attribute: "compensationSpeed",
description: "Adjusts the left-right balance of the shade's bottom bar(turns -100 ~ 100).",
access: "ALL",
}),
m.numeric({
name: "preset_bottom_position",
valueMin: 50,
valueMax: 4100,
cluster: "3rSmartBlindGen2SpecialCluster",
attribute: "limitPosition",
description: "Preset the bottom limit position of the blind",
access: "ALL",
}),
m.numeric({
name: "estimated_usable_curtain_cycles",
valueMin: 200,
valueMax: 334,
cluster: "3rSmartBlindGen2SpecialCluster",
attribute: "totalCycleTimes",
description: "Indicates the estimated number of remaining curtain cycles, used to gauge the battery charge level(based on battery level).",
access: "ALL",
}),
m.numeric({
name: "battery_level_at_last_power_off",
valueMin: 0,
valueMax: 100,
cluster: "3rSmartBlindGen2SpecialCluster",
attribute: "lastRemainingBatteryPercentage",
description: "Stores the battery level recorded at the moment of the last power-off, used to help estimate the current battery capacity.",
access: "STATE_GET",
}),
],
},
{
zigbeeModel: ["3RSB22BZ"],
model: "3RSB22BZ",
vendor: "Third Reality",
description: "Smart button",
fromZigbee: [fz.itcmdr_clicks],
ota: true,
exposes: [e.action(["single", "double", "hold", "release"])],
extend: [
m.battery(),
m.forcePowerSource({ powerSource: "Battery" }),
m.deviceAddCustomCluster("3rButtonSpecialCluster", {
name: "3rButtonSpecialCluster",
ID: 0xff01,
manufacturerCode: 0x1233,
attributes: {
cancelDoubleClick: { name: "cancelDoubleClick", ID: 0x0000, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true, max: 0xff },
},
commands: {},
commandsResponse: {},
}),
],
},
{
zigbeeModel: ["3RSB01085Z"],
model: "3RSB01085Z",
vendor: "Third Reality",
description: "Smart Scene Button S3",
ota: true,
extend: [
m.deviceEndpoints({ endpoints: { 1: 1, 2: 2, 3: 3 } }),
m.actionEnumLookup({
endpointNames: ["1", "2", "3"],
cluster: "genMultistateInput",
attribute: "presentValue",
actionLookup: { release: 255, single: 1, double: 2, hold: 0 },
}),
m.battery(),
],
},
{
zigbeeModel: ["3RTHS24BZ"],
model: "3RTHS24BZ",
vendor: "Third Reality",
description: "Temperature and humidity sensor",
extend: [
m.temperature(),
m.humidity(),
m.battery(),
m.forcePowerSource({ powerSource: "Battery" }),
m.deviceAddCustomCluster("3rSpecialCluster", {
name: "3rSpecialCluster",
ID: 0xff01,
manufacturerCode: 0x1233,
attributes: {
celsiusDegreeCalibration: { name: "celsiusDegreeCalibration", ID: 0x0031, type: zigbee_herdsman_1.Zcl.DataType.INT16, write: true, min: -32768 },
humidityCalibration: { name: "humidityCalibration", ID: 0x0032, type: zigbee_herdsman_1.Zcl.DataType.INT16, write: true, min: -32768 },
fahrenheitDegreeCalibration: {
name: "fahrenheitDegreeCalibration",
ID: 0x0033,
type: zigbee_herdsman_1.Zcl.DataType.INT16,
write: true,
min: -32768,
},
},
commands: {},
commandsResponse: {},
}),
],
ota: true,
},
{
zigbeeModel: ["3RTHS0324Z"],
model: "3RTHS0324Z",
vendor: "Third Reality",
description: "Temperature and Humidity Sensor Lite Gen2",
extend: [
m.deviceAddCustomCluster("3rSpecialCluster", {
name: "3rSpecialCluster",
ID: 0xff01,
manufacturerCode: 0x1407,
attributes: {
celsiusDegreeCalibration: { name: "celsiusDegreeCalibration", ID: 0x0031, type: zigbee_herdsman_1.Zcl.DataType.INT16, write: true, min: -32768 },
humidityCalibration: { name: "humidityCalibration", ID: 0x0032, type: zigbee_herdsman_1.Zcl.DataType.INT16, write: true, min: -32768 },
fahrenheitDegreeCalibration: {
name: "fahrenheitDegreeCalibration",
ID: 0x0033,
type: zigbee_herdsman_1.Zcl.DataType.INT16,
write: true,
min: -32768,
},
},
commands: {},
commandsResponse: {},
}),
m.battery(),
m.temperature(),
m.humidity(),
m.commandsOnOff(),
m.numeric({
name: "celsius_degree_calibration",
unit: "°C",
valueMin: -200,
valueMax: 200,
scale: 100,
cluster: "3rSpecialCluster",
attribute: "celsiusDegreeCalibration",
description: "Celsius degree calibration",
access: "ALL",
}),
m.numeric({
name: "humidity_calibration",
unit: "%",
valueMin: -100,
valueMax: 100,
scale: 100,
cluster: "3rSpecialCluster",
attribute: "humidityCalibration",
description: "Humidity calibration",
access: "ALL",
}),
m.numeric({
name: "fahrenheit_degree_calibration",
unit: "°F",
valueMin: -200,
valueMax: 200,
scale: 100,
cluster: "3rSpecialCluster",
attribute: "fahrenheitDegreeCalibration",
description: "Fahrenheit degree calibration",
access: "ALL",
}),
],
ota: true,
},
{
zigbeeModel: ["3RSM0147Z"],
model: "3RSM0147Z",
vendor: "Third Reality",
description: "Smart Soil Moisture Sensor",
extend: [
m.temperature(),
m.soilMoisture(),
m.battery(),
m.deviceAddCustomCluster("3rSoilSpecialCluster", {
name: "3rSoilSpecialCluster",
ID: 0xff01,
manufacturerCode: 0x1407,
attributes: {
celsiusDegreeCalibration: { name: "celsiusDegreeCalibration", ID: 0x0031, type: zigbee_herdsman_1.Zcl.DataType.INT16, write: true, min: -32768 },
humidityCalibration: { name: "humidityCalibration", ID: 0x0032, type: zigbee_herdsman_1.Zcl.DataType.INT16, write: true, min: -32768 },
fahrenheitDegreeCalibration: {
name: "fahrenheitDegreeCalibration",
ID: 0x0033,
type: zigbee_herdsman_1.Zcl.DataType.INT16,
write: true,
min: -32768,
},
},
commands: {},
commandsResponse: {},
}),
],
ota: true,
},
{
zigbeeModel: ["3RSM0347Z"],
model: "3RSM0347Z",
vendor: "Third Reality",
description: "Smart Soil Moisture Sensor Gen2",
extend: [
m.battery(),
m.temperature(),
m.soilMoisture(),
m.deviceAddCustomCluster("3rSoilGen2SpecialCluster", {
name: "3rSoilGen2SpecialCluster",
ID: 0xff01,
manufacturerCode: 0x1407,
attributes: {
celsiusDegreeCalibration: { name: "celsiusDegreeCalibration", ID: 0x0031, type: zigbee_herdsman_1.Zcl.DataType.INT16, write: true, min: -32768 },
humidityCalibration: { name: "humidityCalibration", ID: 0x0032, type: zigbee_herdsman_1.Zcl.DataType.INT16, write: true, min: -32768 },
fahrenheitDegreeCalibration: {
name: "fahrenheitDegreeCalibration",
ID: 0x0033,
type: zigbee_herdsman_1.Zcl.DataType.INT16,
write: true,
min: -32768,
},
},
commands: {},
commandsResponse: {},
}),
m.numeric({
name: "celsius_degree_calibration",
unit: "°C",
valueMin: -200,
valueMax: 200,
scale: 100,
cluster: "3rSoilGen2SpecialCluster",
attribute: "celsiusDegreeCalibration",
description: "Celsius degree calibration",
access: "ALL",
}),
m.numeric({
name: "humidity_calibration",
unit: "%",
valueMin: -100,
valueMax: 100,
scale: 100,
cluster: "3rSoilGen2SpecialCluster",
attribute: "humidityCalibration",
description: "Humidity calibration",
access: "ALL",
}),
m.numeric({
name: "fahrenheit_degree_calibration",
unit: "°F",
valueMin: -200,
valueMax: 200,
scale: 100,
cluster: "3rSoilGen2SpecialCluster",
attribute: "fahrenheitDegreeCalibration",
description: "Fahrenheit degree calibration",
access: "ALL",
}),
],
ota: true,
},
{
zigbeeModel: ["3RTHS0224Z"],
model: "3RTHS0224Z",
vendor: "Third Reality",
description: "Temperature and humidity sensor lite",
extend: [
m.temperature(),
m.humidity(),
m.battery(),
m.deviceAddCustomCluster("3rSpecialCluster", {
name: "3rSpecialCluster",
ID: 0xff01,
manufacturerCode: 0x1407,
attributes: {
celsiusDegreeCalibration: { name: "celsiusDegreeCalibration", ID: 0x0031, type: zigbee_herdsman_1.Zcl.DataType.INT16, write: true, min: -32768 },
humidityCalibration: { name: "humidityCalibration", ID: 0x0032, type: zigbee_herdsman_1.Zcl.DataType.INT16, write: true, min: -32768 },
fahrenheitDegreeCalibration: {
name: "fahrenheitDegreeCalibration",
ID: 0x0033,
type: zigbee_herdsman_1.Zcl.DataType.INT16,
write: true,
min: -32768,
},
},
commands: {},
commandsResponse: {},
}),
],
ota: true,
},
{
zigbeeModel: ["3RWK0148Z"],
model: "3RWK0148Z",
vendor: "Third Reality",
description: "Smart watering kit",
extend: [
m.battery({ percentage: true, voltage: true, lowStatus: true, percentageReporting: true }),
m.onOff({ powerOnBehavior: false }),
m.iasZoneAlarm({
zoneType: "generic",
zoneAttributes: ["alarm_1"],
description: "Water shortage warning",
}),
m.deviceAddCustomCluster("3rWateringSpecialCluster", {
name: "3rWateringSpecialCluster",
ID: 0xfff2,
manufacturerCode: 0x1407,
attributes: {
wateringTimes: { name: "wateringTimes", ID: 0x0000, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true, min: 1, max: 1800 },
intervalDay: { name: "intervalDay", ID: 0x0001, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true, min: 0, max: 30 },
},
commands: {},
commandsResponse: {},
}),
m.numeric({
name: "watering_times",
cluster: "3rWateringSpecialCluster",
attribute: "wateringTimes",
valueMin: 1,
valueMax: 1800,
unit: "s",
description: "watering times",
access: "ALL",
}),
m.numeric({
name: "interval_day",
cluster: "3rWateringSpecialCluster",
attribute: "intervalDay",
valueMin: 0,
valueMax: 30,
unit: "Day",
description: "interval day",
access: "ALL",
}),
],
ota: true,
},
{
zigbeeModel: ["3RSP02028BZ"],
model: "3RSP02028BZ",
vendor: "Third Reality",
description: "Zigbee / BLE smart plug with power",
fromZigbee: [fz.on_off, fz.electrical_measurement, fz.metering, fz.power_on_behavior],
toZigbee: [tz.on_off, tz.power_on_behavior],
ota: true,
exposes: [e.switch(), e.power_on_behavior(), e.ac_frequency(), e.power(), e.power_factor(), e.energy(), e.current(), e.voltage()],
configure: async (device, coordinatorEndpoint) => {
const endpoint = device.getEndpoint(1);
await reporting.bind(endpoint, coordinatorEndpoint, ["genOnOff", "haElectricalMeasurement", "seMetering"]);
await endpoint.read("haElectricalMeasurement", ["acPowerMultiplier", "acPowerDivisor"]);
await reporting.onOff(endpoint);
await reporting.activePower(endpoint, { change: 10 });
await reporting.rmsCurrent(endpoint, { change: 50 });
await reporting.rmsVoltage(endpoint, { change: 5 });
await reporting.readMeteringMultiplierDivisor(endpoint);
endpoint.saveClusterAttributeKeyValue("seMetering", { divisor: 3600000, multiplier: 1 });
endpoint.saveClusterAttributeKeyValue("haElectricalMeasurement", {
acVoltageMultiplier: 1,
acVoltageDivisor: 10,
acCurrentMultiplier: 1,
acCurrentDivisor: 1000,
acPowerMultiplier: 1,
acPowerDivisor: 10,
});
device.save();
},
extend: [
m.deviceAddCustomCluster("3rPlugGen2SpecialCluster", {
name: "3rPlugGen2SpecialCluster",
ID: 0xff03,
manufacturerCode: 0x1233,
attributes: {
resetTotalEnergy: { name: "resetTotalEnergy", ID: 0x0000, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true, max: 0xff },
countdownToTurnOff: { name: "countdownToTurnOff", ID: 0x0001, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true, max: 0xffff },
countdownToTurnOn: { name: "countdownToTurnOn", ID: 0x0002, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true, max: 0xffff },
allowBind: { name: "allowBind", ID: 0x0020, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true, max: 0xff },
},
commands: {},
commandsResponse: {},
}),
m.enumLookup({
name: "reset_total_energy",
lookup: { Reset: 1 },
cluster: "3rPlugGen2SpecialCluster",
attribute: "resetTotalEnergy",
description: "Reset the sum of consumed energy",
access: "ALL",
}),
m.numeric({
name: "countdown_to_turn_off",
unit: "s",
valueMin: 0,
valueMax: 65535,
cluster: "3rPlugGen2SpecialCluster",
attribute: "countdownToTurnOff",
description: "(ON-OFF)",
access: "ALL",
}),
m.numeric({
name: "countdown_to_turn_on",
unit: "s",
valueMin: 0,
valueMax: 65535,
cluster: "3rPlugGen2SpecialCluster",
attribute: "countdownToTurnOn",
description: "(OFF-ON)",
access: "ALL",
}),
],
},
{
zigbeeModel: ["3RSP02064Z", "3RSPU01080Z", "3RSPE02065Z", "3RSP0186Z", "3RSPJ0187Z"],
model: "3RSP02064Z",
vendor: "Third Reality",
description: "Smart Plug Gen3",
whiteLabel: [
{ vendor: "Third Reality", model: "3RSPU01080Z", description: "Smart Plug UZ1", fingerprint: [{ modelID: "3RSPU01080Z" }] },
{ vendor: "Third Reality", model: "3RSPE02065Z", description: "Smart Plug E3", fingerprint: [{ modelID: "3RSPE02065Z" }] },
{ vendor: "Third Reality", model: "3RSP0186Z", description: " Smart Plug C1", fingerprint: [{ modelID: "3RSP0186Z" }] },
{ vendor: "Third Reality", model: "3RSPJ0187Z", description: "Smart Plug J1", fingerprint: [{ modelID: "3RSPJ0187Z" }] },
],
extend: [
m.onOff(),
m.electricityMeter({ acFrequency: true, powerFactor: true }),
m.deviceAddCustomCluster("3rPlugGen3Specialcluster", {
name: "3rPlugGen3Specialcluster",
ID: 0xff03,
manufacturerCode: 0x1407,
attributes: {
resetTotalEnergy: { name: "resetTotalEnergy", ID: 0x0000, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true, max: 0xff },
countdownToTurnOff: { name: "countdownToTurnOff", ID: 0x0001, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true, max: 0xffff },
countdownToTurnOn: { name: "countdownToTurnOn", ID: 0x0002, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true, max: 0xffff },
allowBind: { name: "allowBind", ID: 0x0020, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true, max: 0xff },
powerRiseThreshold: { name: "powerRiseThreshold", ID: 0x0040, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true, min: 0x01, max: 0xc80 },
powerDropThreshold: { name: "powerDropThreshold", ID: 0x0041, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true, min: 0x01, max: 0xc80 },
meteringOnlyMode: { name: "meteringOnlyMode", ID: 0x0050, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true, max: 0xff },
},
commands: {},
commandsResponse: {},
}),
m.enumLookup({
name: "reset_total_energy",
lookup: { Reset: 1 },
cluster: "3rPlugGen3Specialcluster",
attribute: "resetTotalEnergy",
description: "Reset the sum of consumed energy",
access: "ALL",
}),
m.binary({
name: "metering_only_mode",
valueOn: ["ON", 1],
valueOff: ["OFF", 0],
cluster: "3rPlugGen3Specialcluster",
attribute: "meteringOnlyMode",
description: "When enabled, the device enters metering-only mode and the relay is forced to stay ON.",
access: "ALL",
}),
m.numeric({
name: "countdown_to_turn_off",
unit: "s",
valueMin: 0,
valueMax: 65535,
cluster: "3rPlugGen3Specialcluster",
attribute: "countdownToTurnOff",
description: "(ON-OFF)",
access: "ALL",
}),
m.numeric({
name: "countdown_to_turn_on",
unit: "s",
valueMin: 0,
valueMax: 65535,
cluster: "3rPlugGen3Specialcluster",
attribute: "countdownToTurnOn",
description: "(OFF-ON)",
access: "ALL",
}),
m.numeric({
name: "power_rise_threshold",
unit: "w",
valueMin: 1,
valueMax: 3200,
cluster: "3rPlugGen3Specialcluster",
attribute: "powerRiseThreshold",
description: "Reports sudden power changes. Power rise and fall alerts can be enabled separately. Threshold adjustable.",
access: "ALL",
}),
m.numeric({
name: "power_drop_threshold",
unit: "w",
valueMin: 1,
valueMax: 3200,
cluster: "3rPlugGen3Specialcluster",
attribute: "powerDropThreshold",
description: "Reports sudden power changes. Power rise and drop alerts can be enabled separately. Threshold adjustable.",
access: "ALL",
}),
],
ota: true,
},
{
zigbeeModel: ["3RDP01072Z", "3RWP01073Z"],
model: "3RDP01072Z",
vendor: "Third Reality",
description: "Smart Dual Plug ZP1",
ota: true,
whiteLabel: [{ vendor: "Third Reality", model: "3RWP01073Z", description: "Smart Wall Plug ZW1", fingerprint: [{ modelID: "3RWP01073Z" }] }],
extend: [
m.deviceEndpoints({ endpoints: { 1: 1, 2: 2 } }),
m.onOff({ endpointNames: ["1"], description: "On/off state of the switch left/bottom" }),
m.electricityMeter({ acFrequency: true, powerFactor: true, endpointNames: ["1"], energy: { divisor: 1000, multiplier: 1 } }),
m.onOff({ endpointNames: ["2"], description: "On/off state of the switch right/top" }),
m.electricityMeter({ acFrequency: true, powerFactor: true, endpointNames: ["2"], energy: { divisor: 1000, multiplier: 1 } }),
m.deviceAddCustomCluster("3rDualPlugSpecialcluster", {
name: "3rDualPlugSpecialcluster",
ID: 0xff03,
manufacturerCode: 0x1407,
attributes: {
resetTotalEnergy: { name: "resetTotalEnergy", ID: 0x0000, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true, max: 0xff },
countdownToTurnOff: { name: "countdownToTurnOff", ID: 0x0001, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true, max: 0xffff },
countdownToTurnOn: { name: "countdownToTurnOn", ID: 0x0002, type: zigbee_herdsman_1.Zcl.DataType.UINT16, write: true, max: 0xffff },
},
commands: {},
commandsResponse: {},
}),
m.deviceAddCustomCluster("genBasic", {
name: "genBasic",
ID: 0x0000,
attributes: {
redLedBrightness: { name: "redLedBrightness", ID: 0xff01, type: zigbee_herdsman_1.Zcl.DataType.UINT8, write: true, min: 0, max: 100 },
},
commands: {},
commandsResponse: {},
}),
m.enumLookup({
endpointName: "1",
name: "reset_total_energy",
lookup: { Reset: 1 },
cluster: "3rDualPlugSpecialcluster",
attribute: "resetTotalEnergy",
description: "Reset the sum of consumed energy",
access: "ALL",
}),
m.numeric({
name: "countdown_time_on_to_off",
endpointNames: ["1"],
unit: "s",
valueMin: 0,
valueMax: 60000,
cluster: "3rDualPlugSpecialcluster",
attribute: "countdownToTurnOff",
description: "(ON-OFF)",
access: "ALL",
}),
m.numeric({
name: "countdown_time_off_to_on",
endpointNames: ["1"],
unit: "s",
valueMin: 0,
valueMax: 60000,
cluster: "3rDualPlugSpecialcluster",
attribute: "countdownToTurnOn",
description: "(OFF-ON)",
access: "ALL",
}),
m.enumLookup({
endpointName: "2",
name: "reset_total_energy",
lookup: { Reset: 1 },
cluster: "3rDualPlugSpecialcluster",
attribute: "resetTotalEnergy",
description: "Reset the sum of consumed energy",
access: "ALL",
}),
m.numeric({
name: "countdown_time_on_to_off",
endpointNames: ["2"],
unit: "s",
valueMin: 0,
valueMax: 60000,
cluster: "3rDualPlugSpecialcluster",
attribute: "countdownToTurnOff",
description: "(ON-OFF)",
access: "ALL",
}),
m.numeric({
name: "countdown_time_off_to_on",
endpointNames: ["2"],
unit: "s",
valueMin: 0,
valueMax: 60000,
cluster: "3rDualPlugSpecialcluster",
attribute: "countdownToTurnOn",
description: "(OFF-ON)",
access: "ALL",
}),
m.numeric({
name: "red_led_brightness",
unit: "%",
valueMin: 0,
valueMax: 100,
cluster: "genBasic",
attribute: "redLedBrightness",
description: "Set red led brightness",
access: "ALL",
}),
],
},
{
zigbeeModel: ["3RVS01031Z"],
model: "3RVS01031Z",
vendor: "Third Reality",
description: "Zigbee vibration sensor",
fromZigbee: [fz.ias_vibration_alarm_1, fz.battery, fzLocal.thirdreality_acceleration],
toZigbee: [],
ota: true,
exposes: [e.vibration(), e.battery_low(), e.battery(), e.battery_voltage(), e.x_axis(), e.y_axis(), e.z_axis()],
configure: async (device, coordinatorEndpoint) => {
const endpoint = device.getEndpoint(1);
await endpoint.read("genPowerCfg", ["batteryPercentageRemaining"]);
device.powerSource = "Battery";
device.save();
},
extend: [
m.deviceAddCustomCluster("3rVirationSpecialcluster", {
name: "3rVirationSpecialcluster",
ID: 0xfff1,
manufacturerCode: 0x1233,
attributes: {
coolDownTime: { name: "coolDownTime", ID: 0x0004, type: zigbee_her