-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[New device support]: ubisys H10/230 10way relays (heating) #18121
Comments
It's not an easy device to add support for, but ubisys has great technical documentation https://www.ubisys.de/wp-content/uploads/ubisys-h10-technical-reference.pdf That is always a good place to start. I had a quick look over the tech reference:
So there is a lot to configure on here, It also seems to work with an optional additional unit for pump control which is confusing me. It looks ep 1 + 11, 2 + 12, ... work as pairs where the thermostat endpoint will use temperature data while the heater/cooler will bypass the former and allow direct control. It's very unclear from just looking at the docs where it gets the temperature info form that is used by the thermostat endpoints. I was hoping to be able to give some pointers but this is a rather complex device that seems to require a basic HVAC installation knowledge which I unfortunately lack. I did add support for the H1 which was a simple valve control but the H10 is a whole different beast. If you have the device in hand, it's probably best to start reading the linked technical reference and start experimenting. Generally if you are stuck on a specific thing or something does not seem to match up with the tech reference you can also mail ubisys, they are very helpful and friendly, at least when you ask specific technical question. Very broad question usually result in less helpful answers. |
@sjorge: at the end, its just 10 seperate relays. the device can be operated in cooling mode, then there are always two relays bundled so only one is on while the other is of. Or you run it in heating mode, then its just 10 relays that are on or off to turn on the valve. The temperature module is optional and I think would just report but not automatically act. the native module does not not have any thermostat inputs. The master control endpoint should be the one switching between cooling and heating option. Happy to do the footwork on the 10 relays if you could help me to understand how to create the converter... |
const fz = require('zigbee-herdsman-converters/converters/fromZigbee');
const tz = require('zigbee-herdsman-converters/converters/toZigbee');
const exposes = require('zigbee-herdsman-converters/lib/exposes');
const reporting = require('zigbee-herdsman-converters/lib/reporting');
const extend = require('zigbee-herdsman-converters/lib/extend');
const e = exposes.presets;
const ea = exposes.access;
const definition = {
zigbeeModel: ['H10'],
model: 'H10',
vendor: 'Ubisys',
description: 'Heatingcontrol 10Way',
meta: {thermostat: {dontMapPIHeatingDemand: true}, multiEndpoint: true},
fromZigbee: [fz.on_off, fz.thermostat, fz.thermostat_weekly_schedule],
toZigbee: [
tz.on_off, tz.thermostat_occupied_heating_setpoint,
tz.thermostat_unoccupied_heating_setpoint, tz.thermostat_local_temperature,
tz.thermostat_system_mode, tz.thermostat_weekly_schedule,
tz.thermostat_clear_weekly_schedule, tz.thermostat_running_mode,
tz.thermostat_pi_heating_demand,
],
// FIXME: @koenkk do I add th1-10 to z2m/utils/utils.ts
endpoint: (device) => {
return {
//'th1': 1, 'th2', 2, 'th3': 3, 'th4': 4, 'th5': 5,
//'th6': 6, 'th7', 7, 'th8': 8, 'th9': 9, 'th10': 10,
'l1': 11, 'l2': 12, 'l3': 13, 'l4': 14, 'l5': 15,
'l6': 16, 'l7': 17, 'l8': 18, 'l9': 19, 'l10': 20,
default: 21
};
},
exposes: [
e.switch().withEndpoint('l1'), e.switch().withEndpoint('l2'),
e.switch().withEndpoint('l3'), e.switch().withEndpoint('l4'),
e.switch().withEndpoint('l5'), e.switch().withEndpoint('l6'),
e.switch().withEndpoint('l7'), e.switch().withEndpoint('l8'),
e.switch().withEndpoint('l9'), e.switch().withEndpoint('l10'),
],
configure: async (device, coordinatorEndpoint, logger) => {
// setup ep 1-10 as thermostats
// FIXME: doesn't look like fz/tz.thermostat and friends support
// multiEndpoint
/*
const thermostatBinds = ['hvacThermostat'];
for (let ep = 1; ep <= 10; ep++) {
const endpoint = device.getEndpoint(ep);
await reporting.bind(endpoint, coordinatorEndpoint, thermostatBinds);
await reporting.thermostatSystemMode(endpoint);
await reporting.thermostatTemperature(endpoint,
{min: 0, max: constants.repInterval.HOUR, change: 50});
await reporting.thermostatOccupiedHeatingSetpoint(endpoint,
{min: 0, max: constants.repInterval.HOUR, change: 50});
await reporting.thermostatPIHeatingDemand(endpoint,
{min: 15, max: constants.repInterval.HOUR, change: 1});
}
*/
// setup ep 11-20 as on/off switches
const heaterCoolerBinds = ['genOnOff'];
for (let ep = 11; ep <= 20; ep++) {
const endpoint = device.getEndpoint(ep);
await reporting.bind(endpoint, coordinatorEndpoint, heaterCoolerBinds);
await reporting.onOff(endpoint);
}
}
};
module.exports = definition; @stefanschaedeli didn't test this as I don't have a device so I just write this erm freehand. For now it only does ep11-20 as onOff switches as that is what they are according to the tech ref. fz/tz.on_off also support multiEndpoint so those should knocks on wood work. I had to comment ep1-10 as the fz/tz thermostat converters do not support multiEndpoint and there are also no real names available for the endpoints. Nothing to do be done for ep 21 (master) as it only is a binding target for a thermal sensor and has genTime cluster which z2m should handle on it's own. So let's see if that stuff at least works. @Koenkk how do you feel about adding more endpoints to |
@sjorge Thank you, I will test once I'm back from holidays and report :) |
@sjorge I did test your code and it seems to create the 10 switches, but they are not switching the relay yet ... here the log output when i request the first relay to switch: |
big surprise, it suddenly worked, and then resetet itself.... the device seems to toggle between the setting mode and operation mode: debug 2023-07-20 21:40:11Publishing 'set' 'state' to '0x001fee0000003610' |
The device, at least based on the attributeReports seems to be reacting correctly but only your first attempt. It looks like the frontend is somehow setting weird extra entries the more state you try and toggle? Can you try with just sending it via mqtt (not using the frontend?)
And check if it gets a correct report from the device between each one, those shoud look something like:
where endpoint XX should what whatever l you turned on or off (mapping is in the converter but copied here for easy of access)
|
@sjorge I just reintervied the device, here the full log: what is really strange is that it actually works... the relays are toggling... but its not showing popperly on the leds and also the status is odd in home assistant... |
slight correction, the device works in home asssistant too... it just seems to behave odd.. I have a case open with the manufacturer, maybe they can help. |
@Koenkk are you OK with me adding the th1 tot th10 endpoint names? If not, I'll do a PR to get at least the basic relay part commited to zhc, since that seems to be working, minus the on device leds not updating which doesn't look like it's a z2m problem. |
@sjorge that's fine! |
@stefanschaedeli once #18405 is merged, can you switch to the dev branch and try this converter? (https://www.zigbee2mqtt.io/advanced/more/switch-to-dev-branch.html) const fz = require('zigbee-herdsman-converters/converters/fromZigbee');
const tz = require('zigbee-herdsman-converters/converters/toZigbee');
const exposes = require('zigbee-herdsman-converters/lib/exposes');
const reporting = require('zigbee-herdsman-converters/lib/reporting');
const extend = require('zigbee-herdsman-converters/lib/extend');
const e = exposes.presets;
const ea = exposes.access;
const definition = {
zigbeeModel: ['H10'],
model: 'H10',
vendor: 'Ubisys',
description: 'Heatingcontrol 10Way',
meta: {thermostat: {dontMapPIHeatingDemand: true}, multiEndpoint: true},
fromZigbee: [fz.on_off, fz.thermostat, fz.thermostat_weekly_schedule],
toZigbee: [
tz.on_off, tz.thermostat_occupied_heating_setpoint,
tz.thermostat_unoccupied_heating_setpoint, tz.thermostat_local_temperature,
tz.thermostat_system_mode, tz.thermostat_weekly_schedule,
tz.thermostat_clear_weekly_schedule, tz.thermostat_running_mode,
tz.thermostat_pi_heating_demand,
],
endpoint: (device) => {
return {
'th1': 1, 'th2', 2, 'th3': 3, 'th4': 4, 'th5': 5,
'th6': 6, 'th7', 7, 'th8': 8, 'th9': 9, 'th10': 10,
'l1': 11, 'l2': 12, 'l3': 13, 'l4': 14, 'l5': 15,
'l6': 16, 'l7': 17, 'l8': 18, 'l9': 19, 'l10': 20,
default: 21
};
},
exposes: [
e.switch().withEndpoint('l1'), e.switch().withEndpoint('l2'),
e.switch().withEndpoint('l3'), e.switch().withEndpoint('l4'),
e.switch().withEndpoint('l5'), e.switch().withEndpoint('l6'),
e.switch().withEndpoint('l7'), e.switch().withEndpoint('l8'),
e.switch().withEndpoint('l9'), e.switch().withEndpoint('l10'),
e.climate().withEndpoint('th1')
.withSystemMode(['off', 'heat'], ea.ALL).withRunningMode(['off', 'heat'])
.withSetpoint('occupied_heating_setpoint', 7, 30, 0.5)
.withLocalTemperature().withPiHeatingDemand(ea.STATE_GET),
e.climate().withEndpoint('th2')
.withSystemMode(['off', 'heat'], ea.ALL).withRunningMode(['off', 'heat'])
.withSetpoint('occupied_heating_setpoint', 7, 30, 0.5)
.withLocalTemperature().withPiHeatingDemand(ea.STATE_GET),
e.climate().withEndpoint('th3')
.withSystemMode(['off', 'heat'], ea.ALL).withRunningMode(['off', 'heat'])
.withSetpoint('occupied_heating_setpoint', 7, 30, 0.5)
.withLocalTemperature().withPiHeatingDemand(ea.STATE_GET),
e.climate().withEndpoint('th4')
.withSystemMode(['off', 'heat'], ea.ALL).withRunningMode(['off', 'heat'])
.withSetpoint('occupied_heating_setpoint', 7, 30, 0.5)
.withLocalTemperature().withPiHeatingDemand(ea.STATE_GET),
e.climate().withEndpoint('th5')
.withSystemMode(['off', 'heat'], ea.ALL).withRunningMode(['off', 'heat'])
.withSetpoint('occupied_heating_setpoint', 7, 30, 0.5)
.withLocalTemperature().withPiHeatingDemand(ea.STATE_GET),
e.climate().withEndpoint('th6')
.withSystemMode(['off', 'heat'], ea.ALL).withRunningMode(['off', 'heat'])
.withSetpoint('occupied_heating_setpoint', 7, 30, 0.5)
.withLocalTemperature().withPiHeatingDemand(ea.STATE_GET),
e.climate().withEndpoint('th7')
.withSystemMode(['off', 'heat'], ea.ALL).withRunningMode(['off', 'heat'])
.withSetpoint('occupied_heating_setpoint', 7, 30, 0.5)
.withLocalTemperature().withPiHeatingDemand(ea.STATE_GET),
e.climate().withEndpoint('th8')
.withSystemMode(['off', 'heat'], ea.ALL).withRunningMode(['off', 'heat'])
.withSetpoint('occupied_heating_setpoint', 7, 30, 0.5)
.withLocalTemperature().withPiHeatingDemand(ea.STATE_GET),
e.climate().withEndpoint('th9')
.withSystemMode(['off', 'heat'], ea.ALL).withRunningMode(['off', 'heat'])
.withSetpoint('occupied_heating_setpoint', 7, 30, 0.5)
.withLocalTemperature().withPiHeatingDemand(ea.STATE_GET),
e.climate().withEndpoint('th10')
.withSystemMode(['off', 'heat'], ea.ALL).withRunningMode(['off', 'heat'])
.withSetpoint('occupied_heating_setpoint', 7, 30, 0.5)
.withLocalTemperature().withPiHeatingDemand(ea.STATE_GET),
],
configure: async (device, coordinatorEndpoint, logger) => {
// setup ep 1-10 as thermostats
// FIXME: doesn't look like fz/tz.thermostat and friends support
// multiEndpoint
const thermostatBinds = ['hvacThermostat'];
for (let ep = 1; ep <= 10; ep++) {
const endpoint = device.getEndpoint(ep);
await reporting.bind(endpoint, coordinatorEndpoint, thermostatBinds);
await reporting.thermostatSystemMode(endpoint);
await reporting.thermostatTemperature(endpoint,
{min: 0, max: constants.repInterval.HOUR, change: 50});
await reporting.thermostatOccupiedHeatingSetpoint(endpoint,
{min: 0, max: constants.repInterval.HOUR, change: 50});
await reporting.thermostatPIHeatingDemand(endpoint,
{min: 15, max: constants.repInterval.HOUR, change: 1});
}
// setup ep 11-20 as on/off switches
const heaterCoolerBinds = ['genOnOff'];
for (let ep = 11; ep <= 20; ep++) {
const endpoint = device.getEndpoint(ep);
await reporting.bind(endpoint, coordinatorEndpoint, heaterCoolerBinds);
await reporting.onOff(endpoint);
}
}
};
module.exports = definition; The thermostat stuff might not work without more changes but this would be the first step I'd try. |
sure :) |
getting these erros in the logs:
|
I'll have a look tonight unless I get home late, probably made an error somewhere. |
sure :) I use this image by the way :
|
That is the one on the correct commit, so that should be fine. |
const fz = require('zigbee-herdsman-converters/converters/fromZigbee');
const tz = require('zigbee-herdsman-converters/converters/toZigbee');
const exposes = require('zigbee-herdsman-converters/lib/exposes');
const reporting = require('zigbee-herdsman-converters/lib/reporting');
const extend = require('zigbee-herdsman-converters/lib/extend');
const e = exposes.presets;
const ea = exposes.access;
const definition = {
zigbeeModel: ['H10'],
model: 'H10',
vendor: 'Ubisys',
description: 'Heatingcontrol 10Way',
meta: {thermostat: {dontMapPIHeatingDemand: true}, multiEndpoint: true},
fromZigbee: [fz.on_off, fz.thermostat, fz.thermostat_weekly_schedule],
toZigbee: [
tz.on_off, tz.thermostat_occupied_heating_setpoint,
tz.thermostat_unoccupied_heating_setpoint, tz.thermostat_local_temperature,
tz.thermostat_system_mode, tz.thermostat_weekly_schedule,
tz.thermostat_clear_weekly_schedule, tz.thermostat_running_mode,
tz.thermostat_pi_heating_demand,
],
endpoint: (device) => {
return {
'th1': 1, 'th2': 2, 'th3': 3, 'th4': 4, 'th5': 5,
'th6': 6, 'th7': 7, 'th8': 8, 'th9': 9, 'th10': 10,
'l1': 11, 'l2': 12, 'l3': 13, 'l4': 14, 'l5': 15,
'l6': 16, 'l7': 17, 'l8': 18, 'l9': 19, 'l10': 20,
default: 21
};
},
exposes: [
e.switch().withEndpoint('l1'), e.switch().withEndpoint('l2'),
e.switch().withEndpoint('l3'), e.switch().withEndpoint('l4'),
e.switch().withEndpoint('l5'), e.switch().withEndpoint('l6'),
e.switch().withEndpoint('l7'), e.switch().withEndpoint('l8'),
e.switch().withEndpoint('l9'), e.switch().withEndpoint('l10'),
e.climate()
.withSystemMode(['off', 'heat'], ea.ALL).withRunningMode(['off', 'heat'])
.withSetpoint('occupied_heating_setpoint', 7, 30, 0.5)
.withLocalTemperature().withPiHeatingDemand(ea.STATE_GET)
.withEndpoint('th1'),
e.climate()
.withSystemMode(['off', 'heat'], ea.ALL).withRunningMode(['off', 'heat'])
.withSetpoint('occupied_heating_setpoint', 7, 30, 0.5)
.withLocalTemperature().withPiHeatingDemand(ea.STATE_GET)
.withEndpoint('th2'),
e.climate()
.withSystemMode(['off', 'heat'], ea.ALL).withRunningMode(['off', 'heat'])
.withSetpoint('occupied_heating_setpoint', 7, 30, 0.5)
.withLocalTemperature().withPiHeatingDemand(ea.STATE_GET)
.withEndpoint('th3'),
e.climate()
.withSystemMode(['off', 'heat'], ea.ALL).withRunningMode(['off', 'heat'])
.withSetpoint('occupied_heating_setpoint', 7, 30, 0.5)
.withLocalTemperature().withPiHeatingDemand(ea.STATE_GET)
.withEndpoint('th4'),
e.climate()
.withSystemMode(['off', 'heat'], ea.ALL).withRunningMode(['off', 'heat'])
.withSetpoint('occupied_heating_setpoint', 7, 30, 0.5)
.withLocalTemperature().withPiHeatingDemand(ea.STATE_GET)
.withEndpoint('th5'),
e.climate()
.withSystemMode(['off', 'heat'], ea.ALL).withRunningMode(['off', 'heat'])
.withSetpoint('occupied_heating_setpoint', 7, 30, 0.5)
.withLocalTemperature().withPiHeatingDemand(ea.STATE_GET)
.withEndpoint('th6'),
e.climate()
.withSystemMode(['off', 'heat'], ea.ALL).withRunningMode(['off', 'heat'])
.withSetpoint('occupied_heating_setpoint', 7, 30, 0.5)
.withLocalTemperature().withPiHeatingDemand(ea.STATE_GET)
.withEndpoint('th7'),
e.climate()
.withSystemMode(['off', 'heat'], ea.ALL).withRunningMode(['off', 'heat'])
.withSetpoint('occupied_heating_setpoint', 7, 30, 0.5)
.withLocalTemperature().withPiHeatingDemand(ea.STATE_GET)
.withEndpoint('th8'),
e.climate()
.withSystemMode(['off', 'heat'], ea.ALL).withRunningMode(['off', 'heat'])
.withSetpoint('occupied_heating_setpoint', 7, 30, 0.5)
.withLocalTemperature().withPiHeatingDemand(ea.STATE_GET)
.withEndpoint('th9'),
e.climate()
.withSystemMode(['off', 'heat'], ea.ALL).withRunningMode(['off', 'heat'])
.withSetpoint('occupied_heating_setpoint', 7, 30, 0.5)
.withLocalTemperature().withPiHeatingDemand(ea.STATE_GET)
.withEndpoint('th10'),
],
configure: async (device, coordinatorEndpoint, logger) => {
// setup ep 1-10 as thermostats
// FIXME: doesn't look like fz/tz.thermostat and friends support
// multiEndpoint
const thermostatBinds = ['hvacThermostat'];
for (let ep = 1; ep <= 10; ep++) {
const endpoint = device.getEndpoint(ep);
await reporting.bind(endpoint, coordinatorEndpoint, thermostatBinds);
await reporting.thermostatSystemMode(endpoint);
await reporting.thermostatTemperature(endpoint,
{min: 0, max: constants.repInterval.HOUR, change: 50});
await reporting.thermostatOccupiedHeatingSetpoint(endpoint,
{min: 0, max: constants.repInterval.HOUR, change: 50});
await reporting.thermostatPIHeatingDemand(endpoint,
{min: 15, max: constants.repInterval.HOUR, change: 1});
}
// setup ep 11-20 as on/off switches
const heaterCoolerBinds = ['genOnOff'];
for (let ep = 11; ep <= 20; ep++) {
const endpoint = device.getEndpoint(ep);
await reporting.bind(endpoint, coordinatorEndpoint, heaterCoolerBinds);
await reporting.onOff(endpoint);
}
}
};
module.exports = definition; |
There is no easy way to turn on or off the thermostat exposes. But are they actually working properly? I'm not sure the thermostat converters (and expose) understand the endpoint stuff. |
Koenkk/zigbee2mqtt#18121 This adds the basic support on the 'switch' endpoints, will try to add the thermostat endpoints later when I get more feedback.
Koenkk/zigbee2mqtt#18121 This adds the basic support on the 'switch' endpoints, will try to add the thermostat endpoints later when I get more feedback.
* feat: initial support for Ubisys H10 Koenkk/zigbee2mqtt#18121 This adds the basic support on the 'switch' endpoints, will try to add the thermostat endpoints later when I get more feedback. * Update ubisys.ts --------- Co-authored-by: Koen Kanters <koenkanters94@gmail.com>
This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 7 days |
Link
https://www.ubisys.de/produkte/produkte-klima/produkte-klima-h10/
Database entry
{"id":100,"type":"Router","ieeeAddr":"0x001fee0000003610","nwkAddr":8354,"manufId":4338,"manufName":"ubisys","powerSource":"Mains (single phase)","modelId":"H10","epList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,232,242],"endpoints":{"1":{"profId":260,"epId":1,"devId":769,"inClusterList":[0,3,4,5,513],"outClusterList":[513,1026,1029,1030],"clusters":{"genBasic":{"attributes":{"modelId":"H10","manufacturerName":"ubisys","powerSource":1,"zclVersion":2,"appVersion":1,"stackVersion":1,"hwVersion":1,"dateCode":"20190107-DE-FB0"}}},"binds":[{"cluster":6,"type":"endpoint","deviceIeeeAddress":"0x00124b000be89cf0","endpointID":1}],"configuredReportings":[],"meta":{}},"2":{"profId":260,"epId":2,"devId":769,"inClusterList":[0,3,4,5,513],"outClusterList":[513,1026,1029,1030],"clusters":{"genBasic":{"attributes":{}}},"binds":[],"configuredReportings":[],"meta":{}},"3":{"profId":260,"epId":3,"devId":769,"inClusterList":[0,3,4,5,513],"outClusterList":[513,1026,1029,1030],"clusters":{"genBasic":{"attributes":{}}},"binds":[{"cluster":6,"type":"endpoint","deviceIeeeAddress":"0x00124b000be89cf0","endpointID":1},{"cluster":1794,"type":"endpoint","deviceIeeeAddress":"0x00124b000be89cf0","endpointID":1}],"configuredReportings":[],"meta":{}},"4":{"profId":260,"epId":4,"devId":769,"inClusterList":[0,3,4,5,513],"outClusterList":[513,1026,1029,1030],"clusters":{"genBasic":{"attributes":{}}},"binds":[],"configuredReportings":[],"meta":{}},"5":{"profId":260,"epId":5,"devId":769,"inClusterList":[0,3,4,5,513],"outClusterList":[513,1026,1029,1030],"clusters":{"genBasic":{"attributes":{}}},"binds":[],"configuredReportings":[],"meta":{}},"6":{"profId":260,"epId":6,"devId":769,"inClusterList":[0,3,4,5,513],"outClusterList":[513,1026,1029,1030],"clusters":{"genBasic":{"attributes":{}}},"binds":[],"configuredReportings":[],"meta":{}},"7":{"profId":260,"epId":7,"devId":769,"inClusterList":[0,3,4,5,513],"outClusterList":[513,1026,1029,1030],"clusters":{"genBasic":{"attributes":{}}},"binds":[],"configuredReportings":[],"meta":{}},"8":{"profId":260,"epId":8,"devId":769,"inClusterList":[0,3,4,5,513],"outClusterList":[513,1026,1029,1030],"clusters":{"genBasic":{"attributes":{}}},"binds":[],"configuredReportings":[],"meta":{}},"9":{"profId":260,"epId":9,"devId":769,"inClusterList":[0,3,4,5,513],"outClusterList":[513,1026,1029,1030],"clusters":{"genBasic":{"attributes":{}}},"binds":[],"configuredReportings":[],"meta":{}},"10":{"profId":260,"epId":10,"devId":769,"inClusterList":[0,3,4,5,513],"outClusterList":[513,1026,1029,1030],"clusters":{"genBasic":{"attributes":{}}},"binds":[],"configuredReportings":[],"meta":{}},"11":{"profId":260,"epId":11,"devId":768,"inClusterList":[0,3,4,5,6,8],"outClusterList":[513],"clusters":{"genBasic":{"attributes":{}}},"binds":[],"configuredReportings":[],"meta":{}},"12":{"profId":260,"epId":12,"devId":768,"inClusterList":[0,3,4,5,6,8],"outClusterList":[513],"clusters":{"genBasic":{"attributes":{}}},"binds":[],"configuredReportings":[],"meta":{}},"13":{"profId":260,"epId":13,"devId":768,"inClusterList":[0,3,4,5,6,8],"outClusterList":[513],"clusters":{"genBasic":{"attributes":{}}},"binds":[],"configuredReportings":[],"meta":{}},"14":{"profId":260,"epId":14,"devId":768,"inClusterList":[0,3,4,5,6,8],"outClusterList":[513],"clusters":{"genBasic":{"attributes":{}}},"binds":[],"configuredReportings":[],"meta":{}},"15":{"profId":260,"epId":15,"devId":768,"inClusterList":[0,3,4,5,6,8],"outClusterList":[513],"clusters":{"genBasic":{"attributes":{}}},"binds":[],"configuredReportings":[],"meta":{}},"16":{"profId":260,"epId":16,"devId":768,"inClusterList":[0,3,4,5,6,8],"outClusterList":[513],"clusters":{"genBasic":{"attributes":{}}},"binds":[],"configuredReportings":[],"meta":{}},"17":{"profId":260,"epId":17,"devId":768,"inClusterList":[0,3,4,5,6,8],"outClusterList":[513],"clusters":{"genBasic":{"attributes":{}}},"binds":[],"configuredReportings":[],"meta":{}},"18":{"profId":260,"epId":18,"devId":768,"inClusterList":[0,3,4,5,6,8],"outClusterList":[513],"clusters":{"genBasic":{"attributes":{}}},"binds":[],"configuredReportings":[],"meta":{}},"19":{"profId":260,"epId":19,"devId":768,"inClusterList":[0,3,4,5,6,8],"outClusterList":[513],"clusters":{"genBasic":{"attributes":{}}},"binds":[],"configuredReportings":[],"meta":{}},"20":{"profId":260,"epId":20,"devId":768,"inClusterList":[0,3,4,5,6,8],"outClusterList":[513],"clusters":{"genBasic":{"attributes":{}}},"binds":[],"configuredReportings":[],"meta":{}},"21":{"profId":260,"epId":21,"devId":7,"inClusterList":[0,3],"outClusterList":[1026],"clusters":{"genBasic":{"attributes":{}}},"binds":[],"configuredReportings":[],"meta":{}},"232":{"profId":260,"epId":232,"devId":1287,"inClusterList":[0,21],"outClusterList":[3,25],"clusters":{"genBasic":{"attributes":{}}},"binds":[],"configuredReportings":[],"meta":{}},"242":{"profId":41440,"epId":242,"devId":102,"inClusterList":[33],"outClusterList":[33],"clusters":{},"binds":[],"configuredReportings":[],"meta":{}}},"appVersion":1,"stackVersion":1,"hwVersion":1,"dateCode":"20190107-DE-FB0","zclVersion":2,"interviewCompleted":true,"meta":{},"lastSeen":1687779553766,"defaultSendRequestWhen":"immediate"}
Comments
Tried to create my external converter but seem to struggle...
External converter
Supported color modes
No response
Color temperature range
No response
The text was updated successfully, but these errors were encountered: