From 0a30b1e2d535520b2a9c19de36c7ccec6d185ee3 Mon Sep 17 00:00:00 2001 From: SwoopX Date: Sat, 19 Feb 2022 20:25:48 +0100 Subject: [PATCH] Add DDF for Develco/frient SMSZB-120 smoke detector --- bindings.cpp | 10 +- database.cpp | 12 +- de_web_plugin.cpp | 14 +- devices/develco/smszb-120_smoke_detector.json | 290 ++++++++++++++++++ devices/frient/smszb-120_smoke_detector.json | 290 ++++++++++++++++++ light_node.cpp | 1 - power_configuration.cpp | 1 - 7 files changed, 586 insertions(+), 32 deletions(-) create mode 100644 devices/develco/smszb-120_smoke_detector.json create mode 100644 devices/frient/smszb-120_smoke_detector.json diff --git a/bindings.cpp b/bindings.cpp index f30351ef70..2acc7ab5e3 100644 --- a/bindings.cpp +++ b/bindings.cpp @@ -623,8 +623,7 @@ bool DeRestPluginPrivate::sendBindRequest(BindingTask &bt) // Whitelist sensors which don't seem to have a valid node descriptor. // This is a workaround currently only required for Develco smoke sensor // and potentially Bosch motion sensor - if (s.modelId().startsWith(QLatin1String("SMSZB-1")) || // Develco smoke sensor - s.modelId().startsWith(QLatin1String("EMIZB-1")) || // Develco EMI Norwegian HAN + if (s.modelId().startsWith(QLatin1String("EMIZB-1")) || // Develco EMI Norwegian HAN s.modelId().startsWith(QLatin1String("ISW-ZPR1-WP13"))) // Bosch motion sensor { } @@ -1076,7 +1075,6 @@ bool DeRestPluginPrivate::sendConfigureReportingRequest(BindingTask &bt) rq.attributeId = 0x0000; // measured value if (modelId.startsWith(QLatin1String("AQSZB-1")) || // Develco air quality sensor - modelId.startsWith(QLatin1String("SMSZB-1")) || // Develco smoke sensor modelId.startsWith(QLatin1String("HESZB-1")) || // Develco heat sensor modelId.startsWith(QLatin1String("MOSZB-1")) || // Develco motion sensor modelId.startsWith(QLatin1String("WISZB-1")) || // Develco window sensor @@ -1919,7 +1917,6 @@ bool DeRestPluginPrivate::sendConfigureReportingRequest(BindingTask &bt) rq.reportableChange8bit = 0; } else if (modelId.startsWith(QLatin1String("AQSZB-1")) || // Develco air quality sensor - modelId.startsWith(QLatin1String("SMSZB-1")) || // Develco smoke sensor modelId.startsWith(QLatin1String("HESZB-1")) || // Develco heat sensor modelId.startsWith(QLatin1String("MOSZB-1")) || // Develco motion sensor modelId.startsWith(QLatin1String("WISZB-1")) || // Develco window sensor @@ -2827,8 +2824,7 @@ bool DeRestPluginPrivate::checkSensorBindingsForAttributeReporting(Sensor *senso // Whitelist sensors which don't seem to have a valid node descriptor. // This is a workaround currently only required for Develco smoke sensor // and potentially Bosch motion sensor - if (sensor->modelId().startsWith(QLatin1String("SMSZB-1")) || // Develco smoke sensor - sensor->modelId().startsWith(QLatin1String("EMIZB-1")) || // Develco EMI Norwegian HAN + if (sensor->modelId().startsWith(QLatin1String("EMIZB-1")) || // Develco EMI Norwegian HAN sensor->modelId().startsWith(QLatin1String("ISW-ZPR1-WP13"))) // Bosch motion sensor { } @@ -2984,7 +2980,6 @@ bool DeRestPluginPrivate::checkSensorBindingsForAttributeReporting(Sensor *senso sensor->modelId().startsWith(QLatin1String("902010")) || // Develco sensor->modelId().startsWith(QLatin1String("AQSZB-1")) || // air quality sensor - sensor->modelId().startsWith(QLatin1String("SMSZB-1")) || // smoke sensor sensor->modelId().startsWith(QLatin1String("HESZB-1")) || // heat sensor sensor->modelId().startsWith(QLatin1String("WISZB-1")) || // window sensor sensor->modelId().startsWith(QLatin1String("FLSZB-1")) || // water leak sensor @@ -3346,7 +3341,6 @@ bool DeRestPluginPrivate::checkSensorBindingsForAttributeReporting(Sensor *senso } else if (sensor->modelId() == QLatin1String("Motion Sensor-A") || sensor->modelId().startsWith(QLatin1String("AQSZB-1")) || - sensor->modelId().startsWith(QLatin1String("SMSZB-1")) || sensor->modelId().startsWith(QLatin1String("HESZB-1")) || sensor->modelId().startsWith(QLatin1String("WISZB-1")) || sensor->modelId().startsWith(QLatin1String("MOSZB-1")) || diff --git a/database.cpp b/database.cpp index d7d58d8bf8..a86ebb38f3 100644 --- a/database.cpp +++ b/database.cpp @@ -4183,16 +4183,8 @@ static int sqliteLoadAllSensorsCallback(void *user, int ncols, char **colval , c { item = sensor.addItem(DataTypeBool, RStateLowBattery); item->setValue(false); - if (sensor.modelId().startsWith(QLatin1String("SMSZB-1"))) // Develco smoke detector - { - item = sensor.addItem(DataTypeBool, RStateTest); - item->setValue(false); - } - else - { - item = sensor.addItem(DataTypeBool, RStateTampered); - item->setValue(false); - } + item = sensor.addItem(DataTypeBool, RStateTampered); + item->setValue(false); } sensor.addItem(DataTypeUInt16, RConfigPending)->setValue(0); sensor.addItem(DataTypeUInt32, RConfigEnrolled)->setValue(IAS_STATE_INIT); diff --git a/de_web_plugin.cpp b/de_web_plugin.cpp index 056fff3ebb..ff2d19153d 100644 --- a/de_web_plugin.cpp +++ b/de_web_plugin.cpp @@ -366,7 +366,6 @@ static const SupportedDevice supportedDevices[] = { { VENDOR_STELPRO, "STZB402", xalMacPrefix }, // Stelpro baseboard thermostat { VENDOR_STELPRO, "SORB", xalMacPrefix }, // Stelpro Orleans Fan { VENDOR_DEVELCO, "AQSZB-1", develcoMacPrefix }, // Develco air quality sensor - { VENDOR_DEVELCO, "SMSZB-1", develcoMacPrefix }, // Develco smoke sensor { VENDOR_DEVELCO, "HESZB-1", develcoMacPrefix }, // Develco heat sensor { VENDOR_DEVELCO, "SPLZB-1", develcoMacPrefix }, // Develco smart plug { VENDOR_DEVELCO, "WISZB-1", develcoMacPrefix }, // Develco window sensor @@ -5989,7 +5988,6 @@ void DeRestPluginPrivate::addSensorNode(const deCONZ::Node *node, const deCONZ:: modelId.startsWith(QLatin1String("SMOK_")) || // Heiman fire sensor modelId.startsWith(QLatin1String("Smoke")) || // Heiman fire sensor (newer model) modelId.startsWith(QLatin1String("902010/24")) || // Bitron smoke detector - modelId.startsWith(QLatin1String("SMSZB-1")) || // Develco smoke detector modelId.startsWith(QLatin1String("HESZB-1")) || // Develco heat detector modelId.startsWith(QLatin1String("SF2")) || // ORVIBO (Heiman) smoke sensor modelId == QLatin1String("358e4e3e03c644709905034dae81433e") || // Orvibo Combustible Gas Sensor @@ -8179,16 +8177,8 @@ void DeRestPluginPrivate::addSensorNode(const deCONZ::Node *node, const SensorFi { item = sensorNode.addItem(DataTypeBool, RStateLowBattery); item->setValue(false); - if (modelId.startsWith(QLatin1String("SMSZB-1"))) // Develco smoke detector - { - item = sensorNode.addItem(DataTypeBool, RStateTest); - item->setValue(false); - } - else - { - item = sensorNode.addItem(DataTypeBool, RStateTampered); - item->setValue(false); - } + item = sensorNode.addItem(DataTypeBool, RStateTampered); + item->setValue(false); } sensorNode.addItem(DataTypeUInt16, RConfigPending)->setValue(0); sensorNode.addItem(DataTypeUInt32, RConfigEnrolled)->setValue(IAS_STATE_INIT); diff --git a/devices/develco/smszb-120_smoke_detector.json b/devices/develco/smszb-120_smoke_detector.json new file mode 100644 index 0000000000..8297975291 --- /dev/null +++ b/devices/develco/smszb-120_smoke_detector.json @@ -0,0 +1,290 @@ +{ + "schema": "devcap1.schema.json", + "manufacturername": "Develco Products A/S", + "modelid": "SMSZB-120", + "vendor": "Develco Products", + "product": "SMSZB-120", + "sleeper": false, + "status": "Gold", + "subdevices": [ + { + "type": "$TYPE_FIRE_SENSOR", + "restapi": "/sensors", + "uuid": [ + "$address.ext", + "0x23", + "0x0500" + ], + "fingerprint": { + "profile": "0x0104", + "device": "0x0402", + "endpoint": "0x23", + "in": [ + "0x0000", + "0x0001", + "0x0500" + ] + }, + "items": [ + { + "name": "attr/id" + }, + { + "name": "attr/lastannounced" + }, + { + "name": "attr/lastseen" + }, + { + "name": "attr/manufacturername" + }, + { + "name": "attr/modelid" + }, + { + "name": "attr/name" + }, + { + "name": "attr/swversion", + "refresh.interval": 84000, + "read": { + "at": "0x8000", + "cl": "0x0000", + "ep": 35, + "fn": "zcl", + "mf": "0x1015" + }, + "parse": { + "at": "0x8000", + "cl": "0x0000", + "ep": 35, + "fn": "zcl", + "mf": "0x1015", + "script": "develco_firmware.js" + } + }, + { + "name": "attr/type" + }, + { + "name": "attr/uniqueid" + }, + { + "name": "config/battery", + "parse": { + "at": "0x0020", + "cl": "0x0001", + "ep": 35, + "script": "develco_battery.js" + } + }, + { + "name": "config/enrolled" + }, + { + "name": "config/on" + }, + { + "name": "config/pending" + }, + { + "name": "config/reachable" + }, + { + "name": "state/fire" + }, + { + "name": "state/lastupdated" + }, + { + "name": "state/lowbattery" + }, + { + "name": "state/test" + } + ] + }, + { + "type": "$TYPE_TEMPERATURE_SENSOR", + "restapi": "/sensors", + "uuid": [ + "$address.ext", + "0x26", + "0x0402" + ], + "fingerprint": { + "profile": "0x0104", + "device": "0x0302", + "endpoint": "0x26", + "in": [ + "0x0000", + "0x0001", + "0x0402" + ] + }, + "items": [ + { + "name": "attr/id" + }, + { + "name": "attr/lastannounced" + }, + { + "name": "attr/lastseen" + }, + { + "name": "attr/manufacturername" + }, + { + "name": "attr/modelid" + }, + { + "name": "attr/name" + }, + { + "name": "attr/swversion", + "refresh.interval": 84000, + "read": { + "at": "0x8000", + "cl": "0x0000", + "ep": 35, + "fn": "zcl", + "mf": "0x1015" + }, + "parse": { + "at": "0x8000", + "cl": "0x0000", + "ep": 35, + "fn": "zcl", + "mf": "0x1015", + "script": "develco_firmware.js" + } + }, + { + "name": "attr/type" + }, + { + "name": "attr/uniqueid" + }, + { + "name": "config/battery", + "parse": { + "at": "0x0020", + "cl": "0x0001", + "ep": 35, + "script": "develco_battery.js" + } + }, + { + "name": "config/offset" + }, + { + "name": "config/on" + }, + { + "name": "config/reachable" + }, + { + "name": "state/lastupdated" + }, + { + "name": "state/temperature" + } + ] + }, + { + "type": "Warning device", + "restapi": "/lights", + "uuid": [ + "$address.ext", + "0x23" + ], + "items": [ + { + "name": "attr/id" + }, + { + "name": "attr/lastannounced" + }, + { + "name": "attr/lastseen" + }, + { + "name": "attr/manufacturername" + }, + { + "name": "attr/modelid" + }, + { + "name": "attr/name" + }, + { + "name": "attr/swversion", + "refresh.interval": 84000, + "read": { + "at": "0x8000", + "cl": "0x0000", + "ep": 35, + "fn": "zcl", + "mf": "0x1015" + }, + "parse": { + "at": "0x8000", + "cl": "0x0000", + "ep": 35, + "fn": "zcl", + "mf": "0x1015", + "script": "develco_firmware.js" + } + }, + { + "name": "attr/type" + }, + { + "name": "attr/uniqueid" + }, + { + "name": "state/alert" + }, + { + "name": "state/reachable" + } + ] + } + ], + "bindings": [ + { + "bind": "unicast", + "src.ep": 35, + "cl": "0x0001", + "report": [ + { + "at": "0x0020", + "dt": "0x20", + "min": 300, + "max": 43200, + "change": "0x00000001" + } + ] + }, + { + "bind": "unicast", + "src.ep": 35, + "cl": "0x0500" + }, + { + "bind": "unicast", + "src.ep": 38, + "cl": "0x0402", + "report": [ + { + "at": "0x0000", + "dt": "0x29", + "min": 60, + "max": 600, + "change": "0x0000000A" + } + ] + } + ] +} \ No newline at end of file diff --git a/devices/frient/smszb-120_smoke_detector.json b/devices/frient/smszb-120_smoke_detector.json new file mode 100644 index 0000000000..acd1565212 --- /dev/null +++ b/devices/frient/smszb-120_smoke_detector.json @@ -0,0 +1,290 @@ +{ + "schema": "devcap1.schema.json", + "manufacturername": "frient A/S", + "modelid": "SMSZB-120", + "vendor": "Develco Products", + "product": "SMSZB-120", + "sleeper": false, + "status": "Gold", + "subdevices": [ + { + "type": "$TYPE_FIRE_SENSOR", + "restapi": "/sensors", + "uuid": [ + "$address.ext", + "0x23", + "0x0500" + ], + "fingerprint": { + "profile": "0x0104", + "device": "0x0402", + "endpoint": "0x23", + "in": [ + "0x0000", + "0x0001", + "0x0500" + ] + }, + "items": [ + { + "name": "attr/id" + }, + { + "name": "attr/lastannounced" + }, + { + "name": "attr/lastseen" + }, + { + "name": "attr/manufacturername" + }, + { + "name": "attr/modelid" + }, + { + "name": "attr/name" + }, + { + "name": "attr/swversion", + "refresh.interval": 84000, + "read": { + "at": "0x8000", + "cl": "0x0000", + "ep": 35, + "fn": "zcl", + "mf": "0x1015" + }, + "parse": { + "at": "0x8000", + "cl": "0x0000", + "ep": 35, + "fn": "zcl", + "mf": "0x1015", + "script": "develco_firmware.js" + } + }, + { + "name": "attr/type" + }, + { + "name": "attr/uniqueid" + }, + { + "name": "config/battery", + "parse": { + "at": "0x0020", + "cl": "0x0001", + "ep": 35, + "script": "develco_battery.js" + } + }, + { + "name": "config/enrolled" + }, + { + "name": "config/on" + }, + { + "name": "config/pending" + }, + { + "name": "config/reachable" + }, + { + "name": "state/fire" + }, + { + "name": "state/lastupdated" + }, + { + "name": "state/lowbattery" + }, + { + "name": "state/test" + } + ] + }, + { + "type": "$TYPE_TEMPERATURE_SENSOR", + "restapi": "/sensors", + "uuid": [ + "$address.ext", + "0x26", + "0x0402" + ], + "fingerprint": { + "profile": "0x0104", + "device": "0x0302", + "endpoint": "0x26", + "in": [ + "0x0000", + "0x0001", + "0x0402" + ] + }, + "items": [ + { + "name": "attr/id" + }, + { + "name": "attr/lastannounced" + }, + { + "name": "attr/lastseen" + }, + { + "name": "attr/manufacturername" + }, + { + "name": "attr/modelid" + }, + { + "name": "attr/name" + }, + { + "name": "attr/swversion", + "refresh.interval": 84000, + "read": { + "at": "0x8000", + "cl": "0x0000", + "ep": 35, + "fn": "zcl", + "mf": "0x1015" + }, + "parse": { + "at": "0x8000", + "cl": "0x0000", + "ep": 35, + "fn": "zcl", + "mf": "0x1015", + "script": "develco_firmware.js" + } + }, + { + "name": "attr/type" + }, + { + "name": "attr/uniqueid" + }, + { + "name": "config/battery", + "parse": { + "at": "0x0020", + "cl": "0x0001", + "ep": 35, + "script": "develco_battery.js" + } + }, + { + "name": "config/offset" + }, + { + "name": "config/on" + }, + { + "name": "config/reachable" + }, + { + "name": "state/lastupdated" + }, + { + "name": "state/temperature" + } + ] + }, + { + "type": "Warning device", + "restapi": "/lights", + "uuid": [ + "$address.ext", + "0x23" + ], + "items": [ + { + "name": "attr/id" + }, + { + "name": "attr/lastannounced" + }, + { + "name": "attr/lastseen" + }, + { + "name": "attr/manufacturername" + }, + { + "name": "attr/modelid" + }, + { + "name": "attr/name" + }, + { + "name": "attr/swversion", + "refresh.interval": 84000, + "read": { + "at": "0x8000", + "cl": "0x0000", + "ep": 35, + "fn": "zcl", + "mf": "0x1015" + }, + "parse": { + "at": "0x8000", + "cl": "0x0000", + "ep": 35, + "fn": "zcl", + "mf": "0x1015", + "script": "develco_firmware.js" + } + }, + { + "name": "attr/type" + }, + { + "name": "attr/uniqueid" + }, + { + "name": "state/alert" + }, + { + "name": "state/reachable" + } + ] + } + ], + "bindings": [ + { + "bind": "unicast", + "src.ep": 35, + "cl": "0x0001", + "report": [ + { + "at": "0x0020", + "dt": "0x20", + "min": 300, + "max": 43200, + "change": "0x00000001" + } + ] + }, + { + "bind": "unicast", + "src.ep": 35, + "cl": "0x0500" + }, + { + "bind": "unicast", + "src.ep": 38, + "cl": "0x0402", + "report": [ + { + "at": "0x0000", + "dt": "0x29", + "min": 60, + "max": 600, + "change": "0x0000000A" + } + ] + } + ] +} \ No newline at end of file diff --git a/light_node.cpp b/light_node.cpp index 14a23c5c08..0b8b598d99 100644 --- a/light_node.cpp +++ b/light_node.cpp @@ -496,7 +496,6 @@ void LightNode::setHaEndpoint(const deCONZ::SimpleDescriptor &endpoint) else if (i->id() == IAS_WD_CLUSTER_ID) { if (modelId().startsWith(QLatin1String("902010/24")) || // Bitron Smoke Detector with siren - modelId().startsWith(QLatin1String("SMSZB-1")) || // Develco Smoke Alarm with siren modelId().startsWith(QLatin1String("HESZB-1")) || // Develco heat sensor with siren modelId().startsWith(QLatin1String("FLSZB-1")) || // Develco water leak sensor with siren modelId().startsWith(QLatin1String("SIRZB-1")) || // Develco siren diff --git a/power_configuration.cpp b/power_configuration.cpp index 6b10f2bcc9..2f75e64906 100644 --- a/power_configuration.cpp +++ b/power_configuration.cpp @@ -234,7 +234,6 @@ void DeRestPluginPrivate::handlePowerConfigurationClusterIndication(const deCONZ sensor.modelId() == QLatin1String("lumi.remote.b28ac1") || // Aqara wireless remote switch H1 (double rocker) sensor.modelId().endsWith(QLatin1String("86opcn01")) || // Aqara Opple sensor.modelId().startsWith(QLatin1String("AQSZB-1")) || // Develco air quality sensor - sensor.modelId().startsWith(QLatin1String("SMSZB-1")) || // Develco smoke sensor sensor.modelId().startsWith(QLatin1String("HESZB-1")) || // Develco heat sensor sensor.modelId().startsWith(QLatin1String("MOSZB-1")) || // Develco motion sensor sensor.modelId().startsWith(QLatin1String("WISZB-1")) || // Develco window sensor