From c29a2c3d39014706c11525088fceed625a5c7529 Mon Sep 17 00:00:00 2001 From: Tao Gong Date: Sun, 8 Nov 2020 22:54:48 -0800 Subject: [PATCH 001/198] Cooper RF9540-N: add VerifyChanged flag for Switch Multilevel V2 --- config/cooper/RF9540-N.xml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/config/cooper/RF9540-N.xml b/config/cooper/RF9540-N.xml index 91c0de1d5d..a0ca9264a7 100644 --- a/config/cooper/RF9540-N.xml +++ b/config/cooper/RF9540-N.xml @@ -1,4 +1,4 @@ - + http://www.openzwave.com/device-database/001A:0101:4449 images/cooper/RF9540-N.png @@ -10,6 +10,7 @@ Initial Metadata Import from Z-Wave Alliance Database - https://products.z-wavealliance.org/products/797/xml Remove group 255 as 0 associations is reported from the device + Add VerifyChanged flags for Switch Multilevel V2 @@ -72,6 +73,12 @@ + + + + true + + From 9014c54f6ec66421abb6c50130d98faa05209866 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joachim=20M=2E=20Gi=C3=A6ver?= Date: Sat, 28 Nov 2020 20:36:06 +0100 Subject: [PATCH 002/198] Add Namron 2 Kanaler Bryter K4 --- config/manufacturer_specific.xml | 4 ++-- cpp/build/testconfigversions.cfg | 12 ++++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index 7f1480dfcc..2460ae6e9f 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -1,5 +1,5 @@ - + @@ -1285,7 +1285,7 @@ - + diff --git a/cpp/build/testconfigversions.cfg b/cpp/build/testconfigversions.cfg index e218e623f1..85512d4051 100644 --- a/cpp/build/testconfigversions.cfg +++ b/cpp/build/testconfigversions.cfg @@ -1904,8 +1904,8 @@ 'md5' => '4d34aeaaea917c229bedbb737e4de1550b2d7db5f9e61566a1c0a39966b6442d381d01f93714e12aae1404797d36854274cc4063dd7424b00d27da238b17a36a' }, 'config/manufacturer_specific.xml' => { - 'Revision' => 132, - 'md5' => '3b51c4e4b9ab28ddf7a6d9a91b18ba30ebd7aa740d14ed2887cb141289ef9ad327f93e931f0830d7c2757d595d8ab64887709a96b8b094bb1686ae640ee79d52' + 'Revision' => 133, + 'md5' => 'abbd3490305bcce0f485c52c4d1e7779cb8a12b70949378125daa4ff1a6252555d3bf7aa6abc1329dcf31c0972b37b415303d719fa58d0f9e5991bca96a27b99' }, 'config/mcohome/a8-9.xml' => { 'Revision' => 1, @@ -2003,6 +2003,10 @@ 'Revision' => 1, 'md5' => '601c713a6cef0fa0e5d92bbfe6fa0d6201b60959a5a1d427cf7280d73921d658ee5fdc703b003d42ba2ce3c000848c1cdd507bd9385a435ff93c1888d3fb1ca5' }, + 'config/namron/4512720.xml' => { + 'Revision' => 1, + 'md5' => '1ca0949a8ee454011adf12347ddb93d4727e98cb5d22c7ec6d2b268385896e0accbc837153375154fb7f2f0c2491a4b30a042a84aa6c4727f00e16908fdfdcde' + }, 'config/namron/4512724.xml' => { 'Revision' => 1, 'md5' => '10edb9b98013bac7754fd68151bef8b684dff2ad17d14b71cd6831f386a1e98aef64ff83138cdd28bf6bd1ab6526ca40b87e310beed25e9ed4a857b21e689b3f' @@ -2296,8 +2300,8 @@ 'md5' => '94f11e408312da4a3104d120112bb697bf53a9c5877f3eb73128e480f23e217aa72bac2bc0752f2595a68d26dceb22573beb7f4a98938149e73facd854e21114' }, 'config/qubino/ZMNHCDx.xml' => { - 'Revision' => 7, - 'md5' => '7133bddad00285e714e0469b6ebb11bdf1bae84de2393fc512520ffcbb93c1d204646327ed6b2e50da1c23fd423361a4550af9ecde4aa587890d8261f09dbf9e' + 'Revision' => 8, + 'md5' => '70c37e94bb435fb029af0b55829db7e244ec7beead5939bc19c25fe525ebebe677a974d1d920699ac74b1a4b62643f5818b317a07b78f00d8ae792cb4da73e11' }, 'config/qubino/ZMNHDA2.xml' => { 'Revision' => 4, From 12426e20aae47a4982e3d0600b16abeda91c2b55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joachim=20M=2E=20Gi=C3=A6ver?= Date: Sat, 28 Nov 2020 21:51:39 +0100 Subject: [PATCH 003/198] Add support for namron 1- & 2 kanaler bryter K2/K4 --- config/images/namron/4512712.jpg | Bin 0 -> 10917 bytes config/images/namron/4512720.jpg | Bin 0 -> 11340 bytes config/namron/4512712.xml | 46 +++++++++++++++++++++++++++++ config/namron/4512720.xml | 48 +++++++++++++++++++++++++++++++ cpp/build/testconfigversions.cfg | 8 ++++-- 5 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 config/images/namron/4512712.jpg create mode 100644 config/images/namron/4512720.jpg create mode 100644 config/namron/4512712.xml create mode 100644 config/namron/4512720.xml diff --git a/config/images/namron/4512712.jpg b/config/images/namron/4512712.jpg new file mode 100644 index 0000000000000000000000000000000000000000..35389776cabcd003386c1d9e27734c342e9b948c GIT binary patch literal 10917 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 Bitqpc literal 0 HcmV?d00001 diff --git a/config/namron/4512712.xml b/config/namron/4512712.xml new file mode 100644 index 0000000000..20550b45fb --- /dev/null +++ b/config/namron/4512712.xml @@ -0,0 +1,46 @@ + + + + Namron Z-Wave 1 kanal bryter K2 + The remote control is a Z-Wave device that can both control other Z-Wave devices and activate scenes in Gateways. Although it is controlling other devices, the device cannot act as Z-Wave network controller (primary or secondary) and will always need a Z-Wave network controller to be added into a Z-Wave network. + http://www.openzwave.com/device-database/0438:a30f:0300 + https://www.namron.com/products/namron-z-wave-1-kanal-bryter-k2/ + https://www.namron.com/contact/ + images/namron/4512712.jpg + https://www.elektroimportoren.no/docs/lib/4512712-Brukerveiledning-5.pdf + short press any button + Set controller in inclusion mode press and hold down group 2 keys for 3 seconds + Set controller in exclusion mode press and hold down group 2 keys for 3 seconds + Press and hold down group 2 keys for more than 10 seconds use only if controller is unavailable + https://products.z-wavealliance.org/products/3910 + CEPT + 4512712 + + Initial release. + + + + + + + Set to 21930 to factory reset the device. + + + + + true + + + + + true + + + + + + + + + + diff --git a/config/namron/4512720.xml b/config/namron/4512720.xml new file mode 100644 index 0000000000..64db4f68db --- /dev/null +++ b/config/namron/4512720.xml @@ -0,0 +1,48 @@ + + + + Namron Z-Wave 2 kanaler bryter K4 + The remote control is a Z-Wave device that can both control other Z-Wave devices and activate scenes in Gateways. Although it is controlling other devices, the device cannot act as Z-Wave network controller (primary or secondary) and will always need a Z-Wave network controller to be added into a Z-Wave network. + http://www.openzwave.com/device-database/0438:a306:0300 + https://www.namron.com/products/namron-z-wave-2-kanaler-bryter-k4/ + https://www.namron.com/contact/ + images/namron/4512720.jpg + https://www.elektroimportoren.no/docs/lib/4512720-Brukerveiledning-5.pdf + short press any button + Set controller in inclusion mode press and hold down group 2 keys for 3 seconds + Set controller in exclusion mode press and hold down group 2 keys for 3 seconds + Press and hold down group 2 keys for more than 10 seconds use only if controller is unavailable + https://products.z-wavealliance.org/products/3911 + CEPT + 4512720 + + Fix product page + Based on thermofloor/heatitz4.xml, fix groups and add multi channel assoc. + + + + + + + Set to 21930 to factory reset the device. + + + + + true + + + + + true + + + + + + + + + + + diff --git a/cpp/build/testconfigversions.cfg b/cpp/build/testconfigversions.cfg index 85512d4051..5a8f67db01 100644 --- a/cpp/build/testconfigversions.cfg +++ b/cpp/build/testconfigversions.cfg @@ -1999,13 +1999,17 @@ 'Revision' => 1, 'md5' => '6bdd47c7a0ba829e89cf2735e720bf2b62020f228a4e80df237c1b454707ea7aa7898e916bcad430ac313d38206e9862b5a51748ec3138368c2b5fb643d93d15' }, + 'config/namron/4512712.xml' => { + 'Revision' => 1, + 'md5' => 'bcc121bd2e6bdb09ccf1b5396af0048b57b4d9012e114ee8053b1459300aaf3f029b54679be96e7665a66f26112491a9f81845297e81cd79c14d2070da4653d7' + }, 'config/namron/4512715.xml' => { 'Revision' => 1, 'md5' => '601c713a6cef0fa0e5d92bbfe6fa0d6201b60959a5a1d427cf7280d73921d658ee5fdc703b003d42ba2ce3c000848c1cdd507bd9385a435ff93c1888d3fb1ca5' }, 'config/namron/4512720.xml' => { - 'Revision' => 1, - 'md5' => '1ca0949a8ee454011adf12347ddb93d4727e98cb5d22c7ec6d2b268385896e0accbc837153375154fb7f2f0c2491a4b30a042a84aa6c4727f00e16908fdfdcde' + 'Revision' => 2, + 'md5' => 'c53b0beebcd8ef019da86791c1e6eebf632ed92c9fda51a6881b52dfeadf1b6e0c9809ef6c4072234ed73ee9b679cee5530866bd04916c27441e7d195a4a5c8d' }, 'config/namron/4512724.xml' => { 'Revision' => 1, From 182e2e8976dbe470731e16e274935c7c301d0636 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joachim=20M=2E=20Gi=C3=A6ver?= Date: Sat, 28 Nov 2020 23:24:59 +0100 Subject: [PATCH 004/198] Add missing manufacturer entry for 2K --- config/manufacturer_specific.xml | 3 ++- cpp/build/testconfigversions.cfg | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index 2460ae6e9f..94ef043499 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -1,5 +1,5 @@ - + @@ -1283,6 +1283,7 @@ + diff --git a/cpp/build/testconfigversions.cfg b/cpp/build/testconfigversions.cfg index 5a8f67db01..a664c8dc4f 100644 --- a/cpp/build/testconfigversions.cfg +++ b/cpp/build/testconfigversions.cfg @@ -1904,8 +1904,8 @@ 'md5' => '4d34aeaaea917c229bedbb737e4de1550b2d7db5f9e61566a1c0a39966b6442d381d01f93714e12aae1404797d36854274cc4063dd7424b00d27da238b17a36a' }, 'config/manufacturer_specific.xml' => { - 'Revision' => 133, - 'md5' => 'abbd3490305bcce0f485c52c4d1e7779cb8a12b70949378125daa4ff1a6252555d3bf7aa6abc1329dcf31c0972b37b415303d719fa58d0f9e5991bca96a27b99' + 'Revision' => 134, + 'md5' => '24916b7e3124056da321c57d74523436a2a01ada9f2b351f8e4c3151618adb940191782e584773b41c674dc383fdc7fd5c14dce6957d4f1d39195a8b31108c70' }, 'config/mcohome/a8-9.xml' => { 'Revision' => 1, From d73d83af813e5e563cb3b35b47054eaee5ab92f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joachim=20M=2E=20Gi=C3=A6ver?= Date: Sun, 29 Nov 2020 00:19:38 +0100 Subject: [PATCH 005/198] Fix id. --- config/namron/4512712.xml | 9 +++++---- cpp/build/testconfigversions.cfg | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/config/namron/4512712.xml b/config/namron/4512712.xml index 20550b45fb..abf65f42b0 100644 --- a/config/namron/4512712.xml +++ b/config/namron/4512712.xml @@ -1,4 +1,4 @@ - + Namron Z-Wave 1 kanal bryter K2 @@ -12,10 +12,11 @@ Set controller in inclusion mode press and hold down group 2 keys for 3 seconds Set controller in exclusion mode press and hold down group 2 keys for 3 seconds Press and hold down group 2 keys for more than 10 seconds use only if controller is unavailable - https://products.z-wavealliance.org/products/3910 - CEPT - 4512712 + https://products.z-wavealliance.org/products/3910 + CEPT + 4512712 + Fix id. Initial release. diff --git a/cpp/build/testconfigversions.cfg b/cpp/build/testconfigversions.cfg index a664c8dc4f..9c7bc5f0aa 100644 --- a/cpp/build/testconfigversions.cfg +++ b/cpp/build/testconfigversions.cfg @@ -2000,8 +2000,8 @@ 'md5' => '6bdd47c7a0ba829e89cf2735e720bf2b62020f228a4e80df237c1b454707ea7aa7898e916bcad430ac313d38206e9862b5a51748ec3138368c2b5fb643d93d15' }, 'config/namron/4512712.xml' => { - 'Revision' => 1, - 'md5' => 'bcc121bd2e6bdb09ccf1b5396af0048b57b4d9012e114ee8053b1459300aaf3f029b54679be96e7665a66f26112491a9f81845297e81cd79c14d2070da4653d7' + 'Revision' => 2, + 'md5' => 'a82b5f87b0be78f05917547ca8ca358d6d2ff484a3aab865597fc8fa8d59dac81498693d0768f4aa8aa7fdf45ce115edf96a6ad17cee09d9ef37941f803a2ade' }, 'config/namron/4512715.xml' => { 'Revision' => 1, From cd0ce7554c80ca78a48ec75de12afe9ab9af1299 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joachim=20M=2E=20Gi=C3=A6ver?= Date: Sun, 29 Nov 2020 00:25:55 +0100 Subject: [PATCH 006/198] Fix id --- config/manufacturer_specific.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index 94ef043499..609f7c6544 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -1283,7 +1283,7 @@ - + From 61bcf653cd5ecb7e86c54a57123e4f22ff18a3c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joachim=20M=2E=20Gi=C3=A6ver?= Date: Sun, 29 Nov 2020 00:41:05 +0100 Subject: [PATCH 007/198] Bump revision --- config/manufacturer_specific.xml | 2 +- cpp/build/testconfigversions.cfg | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index 609f7c6544..f431364093 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -1,5 +1,5 @@ - + diff --git a/cpp/build/testconfigversions.cfg b/cpp/build/testconfigversions.cfg index 9c7bc5f0aa..ad2e2ff60c 100644 --- a/cpp/build/testconfigversions.cfg +++ b/cpp/build/testconfigversions.cfg @@ -1904,8 +1904,8 @@ 'md5' => '4d34aeaaea917c229bedbb737e4de1550b2d7db5f9e61566a1c0a39966b6442d381d01f93714e12aae1404797d36854274cc4063dd7424b00d27da238b17a36a' }, 'config/manufacturer_specific.xml' => { - 'Revision' => 134, - 'md5' => '24916b7e3124056da321c57d74523436a2a01ada9f2b351f8e4c3151618adb940191782e584773b41c674dc383fdc7fd5c14dce6957d4f1d39195a8b31108c70' + 'Revision' => 135, + 'md5' => '9aff04fe61966cf2b5c628e2d666d081f3abb3a5c49ebff8d4428d8155a25ec70383a9057eef4b18e38d6b9e0976632d4a2559423801da11331237486b532fd5' }, 'config/mcohome/a8-9.xml' => { 'Revision' => 1, From 197c73081e728416db85710b1d04997ca4d667c3 Mon Sep 17 00:00:00 2001 From: Mark Ruys Date: Sat, 12 Dec 2020 23:45:42 +0100 Subject: [PATCH 008/198] First attempt --- cpp/src/Msg.cpp | 28 ++++ cpp/src/Msg.h | 3 +- cpp/src/command_classes/CommandClass.h | 5 + cpp/src/command_classes/CommandClasses.cpp | 2 + cpp/src/command_classes/Supervision.cpp | 139 ++++++++++++++++++ cpp/src/command_classes/Supervision.h | 119 +++++++++++++++ .../command_classes/ThermostatSetpoint.cpp | 45 +++++- cpp/src/command_classes/ThermostatSetpoint.h | 5 + cpp/src/value_classes/Value.cpp | 31 ++-- 9 files changed, 358 insertions(+), 19 deletions(-) create mode 100644 cpp/src/command_classes/Supervision.cpp create mode 100644 cpp/src/command_classes/Supervision.h diff --git a/cpp/src/Msg.cpp b/cpp/src/Msg.cpp index 9a4c9c3ff5..eba6fade39 100644 --- a/cpp/src/Msg.cpp +++ b/cpp/src/Msg.cpp @@ -33,6 +33,7 @@ #include "ZWSecurity.h" #include "platform/Log.h" #include "command_classes/MultiInstance.h" +#include "command_classes/Supervision.h" #include "command_classes/Security.h" #include "aes/aescpp.h" @@ -230,6 +231,33 @@ namespace OpenZWave return str; } +//----------------------------------------------------------------------------- +// +// Encapsulate the data inside a Supervision message +//----------------------------------------------------------------------------- + void Msg::SupervisionEncap(uint8 session_id) + { + char str[256]; + if (m_buffer[3] != FUNC_ID_ZW_SEND_DATA) + { + return; + } + + for (uint32 i = m_length - 1; i >= 6; --i) + { + m_buffer[i + 4] = m_buffer[i]; + } + m_buffer[6] = Internal::CC::Supervision::StaticGetCommandClassId(); + m_buffer[7] = Internal::CC::Supervision::SupervisionCmd_Get; + m_buffer[8] = Internal::CC::Supervision::SupervisionMoreStatusUpdates_MoreReports | session_id; + m_buffer[9] = m_buffer[5]; + m_buffer[5] += 4; + m_length += 4; + + snprintf(str, sizeof(str), "Supervisioned: %s", m_logText.c_str()); + m_logText = str; + } + //----------------------------------------------------------------------------- // // Encapsulate the data inside a MultiInstance/Multicommand message diff --git a/cpp/src/Msg.h b/cpp/src/Msg.h index 8a0bbb6c5f..9a7bd5a7f9 100644 --- a/cpp/src/Msg.h +++ b/cpp/src/Msg.h @@ -65,6 +65,7 @@ namespace OpenZWave void Append(uint8 const _data); void AppendArray(const uint8* const _data, const uint8 _length); + void SupervisionEncap(uint8 session_id); void Finalize(); void UpdateCallbackId(); @@ -215,7 +216,7 @@ namespace OpenZWave { m_homeId = homeId; } - void setResendDuetoCANorNAK() + void setResendDuetoCANorNAK() { m_resendDuetoCANorNAK = true; } diff --git a/cpp/src/command_classes/CommandClass.h b/cpp/src/command_classes/CommandClass.h index 92b382691e..60856a48f3 100644 --- a/cpp/src/command_classes/CommandClass.h +++ b/cpp/src/command_classes/CommandClass.h @@ -149,6 +149,11 @@ namespace OpenZWave virtual bool supportsMultiInstance() { return true; } + virtual uint8 GetSession(uint8 _command_class_id) { + return 0; + } + virtual void SessionSuccess(uint8 _session_id, uint32 const _instance) { + } void SetInstances(uint8 const _instances); void SetInstance(uint8 const _endPoint); diff --git a/cpp/src/command_classes/CommandClasses.cpp b/cpp/src/command_classes/CommandClasses.cpp index d8748caeec..41345ce783 100644 --- a/cpp/src/command_classes/CommandClasses.cpp +++ b/cpp/src/command_classes/CommandClasses.cpp @@ -70,6 +70,7 @@ #include "command_classes/SensorBinary.h" #include "command_classes/SensorMultilevel.h" #include "command_classes/SoundSwitch.h" +#include "command_classes/Supervision.h" #include "command_classes/SwitchAll.h" #include "command_classes/SwitchBinary.h" #include "command_classes/SwitchMultilevel.h" @@ -226,6 +227,7 @@ namespace OpenZWave cc.Register(SensorBinary::StaticGetCommandClassId(), SensorBinary::StaticGetCommandClassName(), SensorBinary::Create); cc.Register(SensorMultilevel::StaticGetCommandClassId(), SensorMultilevel::StaticGetCommandClassName(), SensorMultilevel::Create); cc.Register(SoundSwitch::StaticGetCommandClassId(), SoundSwitch::StaticGetCommandClassName(), SoundSwitch::Create); + cc.Register(Supervision::StaticGetCommandClassId(), Supervision::StaticGetCommandClassName(), Supervision::Create); cc.Register(SwitchAll::StaticGetCommandClassId(), SwitchAll::StaticGetCommandClassName(), SwitchAll::Create); cc.Register(SwitchBinary::StaticGetCommandClassId(), SwitchBinary::StaticGetCommandClassName(), SwitchBinary::Create); cc.Register(SwitchMultilevel::StaticGetCommandClassId(), SwitchMultilevel::StaticGetCommandClassName(), SwitchMultilevel::Create); diff --git a/cpp/src/command_classes/Supervision.cpp b/cpp/src/command_classes/Supervision.cpp new file mode 100644 index 0000000000..106c21b576 --- /dev/null +++ b/cpp/src/command_classes/Supervision.cpp @@ -0,0 +1,139 @@ +//----------------------------------------------------------------------------- +// +// Supervision.h +// +// Implementation of the Z-Wave COMMAND_CLASS_SUPERVISION +// +// Copyright (c) 2020 Mark Ruys +// +// SOFTWARE NOTICE AND LICENSE +// +// This file is part of OpenZWave. +// +// OpenZWave is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published +// by the Free Software Foundation, either version 3 of the License, +// or (at your option) any later version. +// +// OpenZWave is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with OpenZWave. If not, see . +// +//----------------------------------------------------------------------------- + +#include "command_classes/CommandClasses.h" +#include "command_classes/Supervision.h" +#include "Defs.h" +#include "Msg.h" +#include "Node.h" +#include "Driver.h" +#include "platform/Log.h" + +#include "value_classes/Value.h" + +namespace OpenZWave +{ + namespace Internal + { + namespace CC + { + uint Supervision::m_session_id = 0; + + uint8 Supervision::GetSession(uint8 _command_class_id) + { + Supervision::m_session_id++; + Supervision::m_session_id &= 0x3f; + + Supervision::m_command_class_id = _command_class_id; + + return Supervision::m_session_id; + } + + +//----------------------------------------------------------------------------- +// +// Handle a message from the Z-Wave network +//----------------------------------------------------------------------------- + void Supervision::HandleSupervisionReport(uint8 const* _data, uint32 const _length, uint32 const _instance) + { + if (Node* node = GetNodeUnsafe()) + { + if ( _length >= 4 ) { + uint8 more_status_updates = _data[1] >> 7; + uint8 session_id = _data[1] & 0x3f; + uint8 status = _data[2]; + int duration = _data[3]; + + Log::Write(LogLevel_Info, GetNodeId(), "Received SupervisionReport: session id %d, status 0x%02x, duration %d sec, more status updates %d", + session_id, status, decodeDuration(duration), more_status_updates); + + if ( status == Supervision::SupervisionStatus::SupervisionStatus_Success ) + { + if ( Supervision::m_session_id == session_id ) + { + if (CommandClass* pCommandClass = node->GetCommandClass(Supervision::m_command_class_id)) + { + pCommandClass->SessionSuccess(session_id, _instance); + } + } + } + + if ( more_status_updates == 0 ) + { + // Clean up session + } + } + } + } + + + bool Supervision::HandleIncomingMsg(uint8 const* _data, uint32 const _length, uint32 const _instance) + { + + return HandleMsg(_data, _length, _instance); + } + +//----------------------------------------------------------------------------- +// +// Handle a message from the Z-Wave network +//----------------------------------------------------------------------------- + bool Supervision::HandleMsg(uint8 const* _data, uint32 const _length, uint32 const _instance // = 1 + ) + { + bool handled = false; + Node* node = GetNodeUnsafe(); + if (node != NULL) + { + handled = true; + switch ((SupervisionCmd) _data[0]) + { +// case SupervisionCmd_Get: +// { +// HandleSupervisionEncap(_data, _length); +// break; +// } + case SupervisionCmd_Report: + { + HandleSupervisionReport(_data, _length, _instance); + break; + } + default: + { + handled = false; + break; + } + } + } + + return handled; + + + } + } // namespace CC + } // namespace Internal +} // namespace OpenZWave + diff --git a/cpp/src/command_classes/Supervision.h b/cpp/src/command_classes/Supervision.h new file mode 100644 index 0000000000..e92f595853 --- /dev/null +++ b/cpp/src/command_classes/Supervision.h @@ -0,0 +1,119 @@ +//----------------------------------------------------------------------------- +// +// Supervision.h +// +// Implementation of the Z-Wave COMMAND_CLASS_SUPERVISION +// +// Copyright (c) 2020 Mark Ruys +// +// SOFTWARE NOTICE AND LICENSE +// +// This file is part of OpenZWave. +// +// OpenZWave is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published +// by the Free Software Foundation, either version 3 of the License, +// or (at your option) any later version. +// +// OpenZWave is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with OpenZWave. If not, see . +// +//----------------------------------------------------------------------------- + +#ifndef _Supervision_H +#define _Supervision_H + +#include "command_classes/CommandClass.h" + +namespace OpenZWave +{ + namespace Internal + { + namespace CC + { + /** \brief Implements COMMAND_CLASS_SUPERVISION (0x6c), a Z-Wave device command class. + * \ingroup CommandClass + */ + class Supervision: public CommandClass + { + public: + enum SupervisionCmd + { + SupervisionCmd_Get = 0x01, + SupervisionCmd_Report = 0x02, + }; + enum SupervisionMoreStatusUpdates + { + SupervisionMoreStatusUpdates_LastReport = 0x00, + SupervisionMoreStatusUpdates_MoreReports = 0x80, + }; + enum SupervisionStatus + { + SupervisionStatus_NoSupport = 0x00, + SupervisionStatus_Working = 0x01, + SupervisionStatus_Fail = 0x02, + SupervisionStatus_Success = 0xff + }; + + static CommandClass* Create(uint32 const _homeId, uint8 const _nodeId) + { + return new Supervision(_homeId, _nodeId); + } + virtual ~Supervision() + { + } + + static uint8 const StaticGetCommandClassId() + { + return 0x6c; + } + static string const StaticGetCommandClassName() + { + return "COMMAND_CLASS_SUPERVISION"; + } + +// virtual uint8 GetMaxVersion() override +// { +// return 2; // TODO support v2 too +// } + + uint8 GetSession(uint8 _command_class_id) ; + static uint8 const StaticNoSessionId() + { + return 0xff; // As sessions are only 5 bits, this value will never match + } + + // From CommandClass + virtual uint8 const GetCommandClassId() const override + { + return StaticGetCommandClassId(); + } + virtual string const GetCommandClassName() const override + { + return StaticGetCommandClassName(); + } + virtual bool HandleIncomingMsg(uint8 const* _data, uint32 const _length, uint32 const _instance = 1) override; + virtual bool HandleMsg(uint8 const* _data, uint32 const _length, uint32 const _instance = 1) override; + + private: + Supervision(uint32 const _homeId, uint8 const _nodeId) : + CommandClass(_homeId, _nodeId) + { + } + + static uint m_session_id; + uint m_command_class_id; // TODO as implemented now we support only a single concurrent supervision call per CC + + void HandleSupervisionReport(uint8 const* _data, uint32 const _length, uint32 const _instance); + }; + } // namespace CC + } // namespace Internal +} // namespace OpenZWave + +#endif + diff --git a/cpp/src/command_classes/ThermostatSetpoint.cpp b/cpp/src/command_classes/ThermostatSetpoint.cpp index 9dde0ca533..7295b24c9e 100644 --- a/cpp/src/command_classes/ThermostatSetpoint.cpp +++ b/cpp/src/command_classes/ThermostatSetpoint.cpp @@ -26,6 +26,7 @@ //----------------------------------------------------------------------------- #include "command_classes/CommandClasses.h" +#include "command_classes/Supervision.h" #include "command_classes/ThermostatSetpoint.h" #include "Defs.h" #include "Msg.h" @@ -67,6 +68,7 @@ namespace OpenZWave ThermostatSetpoint::ThermostatSetpoint(uint32 const _homeId, uint8 const _nodeId) : CommandClass(_homeId, _nodeId) { + m_supervision_session_id = Supervision::StaticNoSessionId(); m_com.EnableFlag(COMPAT_FLAG_TSSP_BASE, 1); m_com.EnableFlag(COMPAT_FLAG_TSSP_ALTTYPEINTERPRETATION, true); SetStaticRequest(StaticRequest_Values); @@ -260,6 +262,27 @@ namespace OpenZWave return false; } + void ThermostatSetpoint::SessionSuccess(uint8 _session_id, uint32 const _instance) + { + if ( m_supervision_session_id == _session_id ) + { + uint16 const _index = m_value->GetID().GetIndex(); + if (Internal::VC::ValueDecimal* value = static_cast(GetValue(_instance, _index))) + { + value->SetPrecision(m_value->GetPrecision()); // TODO Do we actually need this? + value->SetUnits(m_value->GetUnits()); // TODO Idem + value->OnValueRefreshed(m_value->GetValue()); + + Log::Write(LogLevel_Info, GetNodeId(), "Confirmed thermostat setpoint %s to %s%s", + value->GetLabel().c_str(), value->GetValue().c_str(), value->GetUnits().c_str()); + } + } + else + { + Log::Write(LogLevel_Info, GetNodeId(), "Ignore unknown supervision session %d", _session_id); + } + } + //----------------------------------------------------------------------------- // // Set a thermostat setpoint temperature @@ -268,17 +291,29 @@ namespace OpenZWave { if (ValueID::ValueType_Decimal == _value.GetID().GetType()) { - Internal::VC::ValueDecimal const* value = static_cast(&_value); - uint8 scale = strcmp("C", value->GetUnits().c_str()) ? 1 : 0; + // TODO Is it safe to address _value outside this call? + m_value = static_cast(&_value); + + uint8 scale = strcmp("C", m_value->GetUnits().c_str()) ? 1 : 0; Msg* msg = new Msg("ThermostatSetpointCmd_Set", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true); msg->SetInstance(this, _value.GetID().GetInstance()); msg->Append(GetNodeId()); - msg->Append(4 + GetAppendValueSize(value->GetValue())); + msg->Append(4 + GetAppendValueSize(m_value->GetValue())); msg->Append(GetCommandClassId()); msg->Append(ThermostatSetpointCmd_Set); - msg->Append((uint8_t) (value->GetID().GetIndex() & 0xFF)); - AppendValue(msg, value->GetValue(), scale); + msg->Append((uint8_t) (m_value->GetID().GetIndex() & 0xFF)); + AppendValue(msg, m_value->GetValue(), scale); + + if (Node* node = GetNodeUnsafe()) + { + if (CommandClass* pCommandClass = node->GetCommandClass(Internal::CC::Supervision::StaticGetCommandClassId())) + { + m_supervision_session_id = pCommandClass->GetSession(StaticGetCommandClassId()); + msg->SupervisionEncap(m_supervision_session_id); + } + } + msg->Append(GetDriver()->GetTransmitOptions()); GetDriver()->SendMsg(msg, Driver::MsgQueue_Send); return true; diff --git a/cpp/src/command_classes/ThermostatSetpoint.h b/cpp/src/command_classes/ThermostatSetpoint.h index fb12a54eaf..1757448b8c 100644 --- a/cpp/src/command_classes/ThermostatSetpoint.h +++ b/cpp/src/command_classes/ThermostatSetpoint.h @@ -31,6 +31,7 @@ #include #include #include "command_classes/CommandClass.h" +#include "value_classes/ValueDecimal.h" namespace OpenZWave { @@ -79,12 +80,16 @@ namespace OpenZWave { return 3; } + virtual void SessionSuccess(uint8 _session_id, uint32 const _instance); protected: virtual void CreateVars(uint8 const _instance) override; private: ThermostatSetpoint(uint32 const _homeId, uint8 const _nodeId); + + uint m_supervision_session_id; + Internal::VC::ValueDecimal const* m_value; }; } // namespace CC } // namespace Internal diff --git a/cpp/src/value_classes/Value.cpp b/cpp/src/value_classes/Value.cpp index 5849a52a2f..adf7135886 100644 --- a/cpp/src/value_classes/Value.cpp +++ b/cpp/src/value_classes/Value.cpp @@ -36,6 +36,7 @@ #include "value_classes/Value.h" #include "platform/Log.h" #include "command_classes/CommandClass.h" +#include "command_classes/Supervision.h" #include #include "Options.h" @@ -312,9 +313,13 @@ namespace OpenZWave { if (!IsWriteOnly()) { - // queue a "RequestValue" message to update the value - if (m_refreshAfterSet) { - cc->RequestValue( 0, m_id.GetIndex(), m_id.GetInstance(), Driver::MsgQueue_Send ); + if (m_refreshAfterSet) + { + if (!node->GetCommandClass(Internal::CC::Supervision::StaticGetCommandClassId())) + { + // queue a "RequestValue" message to update the value + cc->RequestValue( 0, m_id.GetIndex(), m_id.GetInstance(), Driver::MsgQueue_Send ); + } } } else @@ -483,11 +488,11 @@ namespace OpenZWave // Check a refreshed value //----------------------------------------------------------------------------- int Value::VerifyRefreshedValue( - void* _originalValue, - void* _checkValue, - void* _newValue, + void* _originalValue, + void* _checkValue, + void* _newValue, void* _targetValue, - ValueID::ValueType _type, + ValueID::ValueType _type, int _originalValueLength, // = 0, int _checkValueLength, // = 0, int _newValueLength, // = 0, @@ -788,19 +793,19 @@ namespace OpenZWave * - Caveat here is that if the outgoing queue is large, then this will be additionally delayed */ int32 timeout; - if (m_duration <= 2) + if (m_duration <= 2) { timeout = 250; } - else if (m_duration <= 5) + else if (m_duration <= 5) { /* for Durations less than 5 seconds, lets refresh every 1/2 seconds */ timeout = 500; - } - else + } + else { - /* Everything else is 1 second + /* Everything else is 1 second */ timeout = 1000; } @@ -813,7 +818,7 @@ namespace OpenZWave //----------------------------------------------------------------------------- // -// Callback from the Timer to send a Get value to refresh a value from the +// Callback from the Timer to send a Get value to refresh a value from the // CheckTargetValue function //----------------------------------------------------------------------------- void Value::sendValueRefresh(uint32 _unused) From c286c6dffe00d1e9c6f7af57ef3c9956999002aa Mon Sep 17 00:00:00 2001 From: Mark Ruys Date: Tue, 22 Dec 2020 17:37:41 +0100 Subject: [PATCH 009/198] Refactor proof of concept code --- cpp/src/Msg.cpp | 73 ++++++++++++------- cpp/src/Msg.h | 5 +- cpp/src/Node.cpp | 17 +++++ cpp/src/Node.h | 3 + cpp/src/command_classes/CommandClass.h | 3 +- cpp/src/command_classes/Supervision.cpp | 7 +- .../command_classes/ThermostatSetpoint.cpp | 52 ++++++------- cpp/src/command_classes/ThermostatSetpoint.h | 2 +- 8 files changed, 98 insertions(+), 64 deletions(-) diff --git a/cpp/src/Msg.cpp b/cpp/src/Msg.cpp index eba6fade39..74421a2d01 100644 --- a/cpp/src/Msg.cpp +++ b/cpp/src/Msg.cpp @@ -103,6 +103,19 @@ namespace OpenZWave } } +//----------------------------------------------------------------------------- +// +// Encapsulate the data inside a Supervision message +//----------------------------------------------------------------------------- + void Msg::SetSupervision(uint8 _supervision_session_id) + { + if (_supervision_session_id != Internal::CC::Supervision::StaticNoSessionId()) + { + m_supervision_session_id = _supervision_session_id; + m_flags |= m_Supervision; + } + } + //----------------------------------------------------------------------------- // // Add a byte to the message @@ -136,6 +149,12 @@ namespace OpenZWave return; } + // Deal with Supervision encapsulation + if ((m_flags & m_Supervision) != 0) + { + SupervisionEncap(); + } + // Deal with Multi-Channel/Instance encapsulation if ((m_flags & (m_MultiChannel | m_MultiInstance)) != 0) { @@ -231,33 +250,6 @@ namespace OpenZWave return str; } -//----------------------------------------------------------------------------- -// -// Encapsulate the data inside a Supervision message -//----------------------------------------------------------------------------- - void Msg::SupervisionEncap(uint8 session_id) - { - char str[256]; - if (m_buffer[3] != FUNC_ID_ZW_SEND_DATA) - { - return; - } - - for (uint32 i = m_length - 1; i >= 6; --i) - { - m_buffer[i + 4] = m_buffer[i]; - } - m_buffer[6] = Internal::CC::Supervision::StaticGetCommandClassId(); - m_buffer[7] = Internal::CC::Supervision::SupervisionCmd_Get; - m_buffer[8] = Internal::CC::Supervision::SupervisionMoreStatusUpdates_MoreReports | session_id; - m_buffer[9] = m_buffer[5]; - m_buffer[5] += 4; - m_length += 4; - - snprintf(str, sizeof(str), "Supervisioned: %s", m_logText.c_str()); - m_logText = str; - } - //----------------------------------------------------------------------------- // // Encapsulate the data inside a MultiInstance/Multicommand message @@ -308,6 +300,33 @@ namespace OpenZWave } } +//----------------------------------------------------------------------------- +// +// Encapsulate the data inside a Supervision message +//----------------------------------------------------------------------------- + void Msg::SupervisionEncap() + { + char str[256]; + if (m_buffer[3] != FUNC_ID_ZW_SEND_DATA) + { + return; + } + + for (uint32 i = m_length - 1; i >= 6; --i) + { + m_buffer[i + 4] = m_buffer[i]; + } + m_buffer[6] = Internal::CC::Supervision::StaticGetCommandClassId(); + m_buffer[7] = Internal::CC::Supervision::SupervisionCmd_Get; + m_buffer[8] = Internal::CC::Supervision::SupervisionMoreStatusUpdates_MoreReports | m_supervision_session_id; + m_buffer[9] = m_buffer[5]; + m_buffer[5] += 4; + m_length += 4; + + snprintf(str, sizeof(str), "Supervisioned: %s", m_logText.c_str()); + m_logText = str; + } + //----------------------------------------------------------------------------- // // Get a pointer to our driver diff --git a/cpp/src/Msg.h b/cpp/src/Msg.h index 9a7bd5a7f9..333d1bee48 100644 --- a/cpp/src/Msg.h +++ b/cpp/src/Msg.h @@ -54,6 +54,7 @@ namespace OpenZWave { m_MultiChannel = 0x01, // Indicate MultiChannel encapsulation m_MultiInstance = 0x02, // Indicate MultiInstance encapsulation + m_Supervision = 0x03, // Indicate Supervision encapsulation }; Msg(string const& _logtext, uint8 _targetNodeId, uint8 const _msgType, uint8 const _function, bool const _bCallbackRequired, bool const _bReplyRequired = true, uint8 const _expectedReply = 0, uint8 const _expectedCommandClassId = 0); @@ -62,10 +63,10 @@ namespace OpenZWave } void SetInstance(OpenZWave::Internal::CC::CommandClass * _cc, uint8 const _instance); // Used to enable wrapping with MultiInstance/MultiChannel during finalize. + void SetSupervision(uint8 _session_id); void Append(uint8 const _data); void AppendArray(const uint8* const _data, const uint8 _length); - void SupervisionEncap(uint8 session_id); void Finalize(); void UpdateCallbackId(); @@ -232,6 +233,7 @@ namespace OpenZWave private: void MultiEncap(); // Encapsulate the data inside a MultiInstance/Multicommand message + void SupervisionEncap(); // Encapsulate the data inside a Supervision message string m_logText; bool m_bFinal; bool m_bCallbackRequired; @@ -250,6 +252,7 @@ namespace OpenZWave uint8 m_instance; uint8 m_endPoint; // Endpoint to use if the message must be wrapped in a multiInstance or multiChannel command class uint8 m_flags; + uint8 m_supervision_session_id; bool m_encrypted; bool m_noncerecvd; diff --git a/cpp/src/Node.cpp b/cpp/src/Node.cpp index 377a6b3738..8c8f7b76e8 100644 --- a/cpp/src/Node.cpp +++ b/cpp/src/Node.cpp @@ -58,6 +58,7 @@ #include "command_classes/NodeNaming.h" #include "command_classes/NoOperation.h" #include "command_classes/Version.h" +#include "command_classes/Supervision.h" #include "command_classes/SwitchAll.h" #include "command_classes/ZWavePlusInfo.h" #include "command_classes/DeviceResetLocally.h" @@ -4049,3 +4050,19 @@ void Node::WriteMetaDataXML(TiXmlElement *mdElement) mdElement->LinkEndChild(cl); } } + +//----------------------------------------------------------------------------- +// +// Generate a new session id for Supervision encapsulation, if supported +//----------------------------------------------------------------------------- +uint Node::GetSupervisionSessionId(uint8 _command_class_id) +{ + if (Internal::CC::CommandClass* cc = GetCommandClass(Internal::CC::Supervision::StaticGetCommandClassId())) + { + return cc->GetSession(_command_class_id); + } + else + { + return Internal::CC::Supervision::StaticNoSessionId(); + } +} diff --git a/cpp/src/Node.h b/cpp/src/Node.h index 9fbd0f42af..26869ab24c 100644 --- a/cpp/src/Node.h +++ b/cpp/src/Node.h @@ -911,6 +911,9 @@ namespace OpenZWave void WriteMetaDataXML(TiXmlElement*); map m_metadata; map m_changeLog; + + public: + uint GetSupervisionSessionId(uint8 _command_class_id); }; } //namespace OpenZWave diff --git a/cpp/src/command_classes/CommandClass.h b/cpp/src/command_classes/CommandClass.h index 60856a48f3..cddc5ec168 100644 --- a/cpp/src/command_classes/CommandClass.h +++ b/cpp/src/command_classes/CommandClass.h @@ -152,8 +152,7 @@ namespace OpenZWave virtual uint8 GetSession(uint8 _command_class_id) { return 0; } - virtual void SessionSuccess(uint8 _session_id, uint32 const _instance) { - } + virtual void SupervisionSessionSuccess(uint8 _session_id, uint32 const _instance) {}; void SetInstances(uint8 const _instances); void SetInstance(uint8 const _endPoint); diff --git a/cpp/src/command_classes/Supervision.cpp b/cpp/src/command_classes/Supervision.cpp index 106c21b576..379c6375d2 100644 --- a/cpp/src/command_classes/Supervision.cpp +++ b/cpp/src/command_classes/Supervision.cpp @@ -53,10 +53,9 @@ namespace OpenZWave return Supervision::m_session_id; } - //----------------------------------------------------------------------------- // -// Handle a message from the Z-Wave network +// Handle a supervision report message from the Z-Wave network //----------------------------------------------------------------------------- void Supervision::HandleSupervisionReport(uint8 const* _data, uint32 const _length, uint32 const _instance) { @@ -77,7 +76,7 @@ namespace OpenZWave { if (CommandClass* pCommandClass = node->GetCommandClass(Supervision::m_command_class_id)) { - pCommandClass->SessionSuccess(session_id, _instance); + pCommandClass->SupervisionSessionSuccess(session_id, _instance); } } } @@ -90,10 +89,8 @@ namespace OpenZWave } } - bool Supervision::HandleIncomingMsg(uint8 const* _data, uint32 const _length, uint32 const _instance) { - return HandleMsg(_data, _length, _instance); } diff --git a/cpp/src/command_classes/ThermostatSetpoint.cpp b/cpp/src/command_classes/ThermostatSetpoint.cpp index 7295b24c9e..6ce7126c5a 100644 --- a/cpp/src/command_classes/ThermostatSetpoint.cpp +++ b/cpp/src/command_classes/ThermostatSetpoint.cpp @@ -262,7 +262,7 @@ namespace OpenZWave return false; } - void ThermostatSetpoint::SessionSuccess(uint8 _session_id, uint32 const _instance) + void ThermostatSetpoint::SupervisionSessionSuccess(uint8 _session_id, uint32 const _instance) { if ( m_supervision_session_id == _session_id ) { @@ -289,35 +289,31 @@ namespace OpenZWave //----------------------------------------------------------------------------- bool ThermostatSetpoint::SetValue(Internal::VC::Value const& _value) { - if (ValueID::ValueType_Decimal == _value.GetID().GetType()) - { - // TODO Is it safe to address _value outside this call? - m_value = static_cast(&_value); - - uint8 scale = strcmp("C", m_value->GetUnits().c_str()) ? 1 : 0; - - Msg* msg = new Msg("ThermostatSetpointCmd_Set", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true); - msg->SetInstance(this, _value.GetID().GetInstance()); - msg->Append(GetNodeId()); - msg->Append(4 + GetAppendValueSize(m_value->GetValue())); - msg->Append(GetCommandClassId()); - msg->Append(ThermostatSetpointCmd_Set); - msg->Append((uint8_t) (m_value->GetID().GetIndex() & 0xFF)); - AppendValue(msg, m_value->GetValue(), scale); - - if (Node* node = GetNodeUnsafe()) + if (Node* node = GetNodeUnsafe()) + { + if (ValueID::ValueType_Decimal == _value.GetID().GetType()) { - if (CommandClass* pCommandClass = node->GetCommandClass(Internal::CC::Supervision::StaticGetCommandClassId())) - { - m_supervision_session_id = pCommandClass->GetSession(StaticGetCommandClassId()); - msg->SupervisionEncap(m_supervision_session_id); - } + // TODO Is it safe to address _value outside this call? + m_value = static_cast(&_value); + m_supervision_session_id = node->GetSupervisionSessionId(StaticGetCommandClassId()); + + uint8 scale = strcmp("C", m_value->GetUnits().c_str()) ? 1 : 0; + + Msg* msg = new Msg("ThermostatSetpointCmd_Set", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true); + msg->SetInstance(this, _value.GetID().GetInstance()); + msg->SetSupervision(m_supervision_session_id); + msg->Append(GetNodeId()); + msg->Append(4 + GetAppendValueSize(m_value->GetValue())); + msg->Append(GetCommandClassId()); + msg->Append(ThermostatSetpointCmd_Set); + msg->Append((uint8_t) (m_value->GetID().GetIndex() & 0xFF)); + AppendValue(msg, m_value->GetValue(), scale); + + msg->Append(GetDriver()->GetTransmitOptions()); + GetDriver()->SendMsg(msg, Driver::MsgQueue_Send); + return true; } - - msg->Append(GetDriver()->GetTransmitOptions()); - GetDriver()->SendMsg(msg, Driver::MsgQueue_Send); - return true; - } + } return false; } diff --git a/cpp/src/command_classes/ThermostatSetpoint.h b/cpp/src/command_classes/ThermostatSetpoint.h index 1757448b8c..3179b34e57 100644 --- a/cpp/src/command_classes/ThermostatSetpoint.h +++ b/cpp/src/command_classes/ThermostatSetpoint.h @@ -80,7 +80,7 @@ namespace OpenZWave { return 3; } - virtual void SessionSuccess(uint8 _session_id, uint32 const _instance); + virtual void SupervisionSessionSuccess(uint8 _session_id, uint32 const _instance); protected: virtual void CreateVars(uint8 const _instance) override; From 9941271b96e4a70ffb3c52be415498a3abea2574 Mon Sep 17 00:00:00 2001 From: Greg Tatham Date: Sun, 10 Jan 2021 14:25:29 -0600 Subject: [PATCH 010/198] Added support for RGBGenie, a switch that SENDS light commands, but doesn't receive them. Also allowed resetting log path to allow RAM logging for Pi or other SSD. --- config/device_configuration.xsd | 1 + ...3004-RGBW-wall-controller-3-zone-white.png | Bin 0 -> 27051 bytes config/manufacturer_specific.xml | 3 +- config/sunricher/zw3004.xml | 96 +++++++++++ cpp/examples/MinOZW/Main.cpp | 2 + cpp/src/CompatOptionManager.cpp | 3 +- cpp/src/CompatOptionManager.h | 1 + cpp/src/Driver.h | 4 + cpp/src/Group.cpp | 23 ++- cpp/src/Manager.cpp | 19 ++- cpp/src/Notification.cpp | 6 + cpp/src/Notification.h | 100 +++++++++++- cpp/src/Options.cpp | 1 + cpp/src/command_classes/CentralScene.cpp | 2 +- cpp/src/command_classes/Color.cpp | 152 ++++++++++++++++-- cpp/src/command_classes/Color.h | 1 + cpp/src/command_classes/Configuration.cpp | 11 +- .../MultiChannelAssociation.cpp | 3 +- cpp/src/command_classes/MultiInstance.cpp | 54 ++++++- cpp/src/command_classes/SwitchMultilevel.cpp | 51 +++++- 20 files changed, 500 insertions(+), 33 deletions(-) create mode 100755 config/images/sunricher/ZW-3004-RGBW-wall-controller-3-zone-white.png create mode 100755 config/sunricher/zw3004.xml diff --git a/config/device_configuration.xsd b/config/device_configuration.xsd index d850a24aed..fa53c5def3 100644 --- a/config/device_configuration.xsd +++ b/config/device_configuration.xsd @@ -94,6 +94,7 @@ + diff --git a/config/images/sunricher/ZW-3004-RGBW-wall-controller-3-zone-white.png b/config/images/sunricher/ZW-3004-RGBW-wall-controller-3-zone-white.png new file mode 100755 index 0000000000000000000000000000000000000000..41fec856f82bc878415a44cdc54fee560fa5e023 GIT binary patch literal 27051 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 literal 0 HcmV?d00001 diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index 7f1480dfcc..1a0a628827 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -1,5 +1,5 @@ - + @@ -1791,6 +1791,7 @@ + diff --git a/config/sunricher/zw3004.xml b/config/sunricher/zw3004.xml new file mode 100755 index 0000000000..f695a1e768 --- /dev/null +++ b/config/sunricher/zw3004.xml @@ -0,0 +1,96 @@ + + + RGBGenie ZW-3004 Wall-mounted Lighting Control Remote + Wall-mounted remote controller for controlling other Z-Wave devices, specifically + designed around light control (RGBWC controls, dimming, pre-sets, speed). This model supports three groups, + and three scenes. + http://www.openzwave.com/device-database/0330:0301:a105 + https://rgbgenie.com/?product=rgbgenie-color-touch-panel-and-dimmer-white-z-wave-2 + http://rgbgenie.com/ + images/sunricher/ZW-3004-RGBW-wall-controller-3-zone-white.png + + Short press the “inclusion/exclusion” button (on back of device), + or press and hold down “ALL ON/OFF” button for over 3 seconds, the wall controller will be set to inclusion mode, + and waiting to be included, then LED indicator turns on and blinks 6 times quickly to indicate successful inclusion. + Short press the “inclusion/exclusion” button (on back of device), + or press and hold down “ALL ON/OFF” button for over 3 seconds, the wall controller will be set to exclusion mode, + and waiting to be excluded, then LED indicator turns on and shows 3 short blinks and 1 long blink to indicate + successful exclusion. + Press and hold down “inclusion/exclusion” button (on back of device) + for over 8 seconds, LED indicator blinks slowly to indicate successful factory reset, release + “inclusion/exclusion” button,the wall controller will restart automatically. + + + + + Initial entry after extensive testing. + + + + + + + Dynamic mode switching. Switch 1 - 0 - 2 - 0 - 3 - 0 etc. up to 20. Resets after hitting another + button and restarts from 1. Note: you don't SET this, this is a message you'll receive from the switch. + + + + + Dynamic mode speed (for effects). A value 0..255 to indicate speed. Note: you don't SET this, this is + a message that you'll receive from the switch. + + + + + Choose working mode of the remote control. This may or may not work. + + + + + + + + + false + + + + + + false + + + + + + + + + + + + + + + + + + + + + + true + + + + + true + + + + + + + + + diff --git a/cpp/examples/MinOZW/Main.cpp b/cpp/examples/MinOZW/Main.cpp index 07b494f866..e76705afce 100644 --- a/cpp/examples/MinOZW/Main.cpp +++ b/cpp/examples/MinOZW/Main.cpp @@ -261,6 +261,8 @@ void OnNotification case Notification::Type_UserAlerts: case Notification::Type_ManufacturerSpecificDBReady: case Notification::Type_ValueRefreshed: + case Notification::Type_LevelChangeStart: + case Notification::Type_LevelChangeStop: { } } diff --git a/cpp/src/CompatOptionManager.cpp b/cpp/src/CompatOptionManager.cpp index ef4271a5b2..2c9fa4790c 100644 --- a/cpp/src/CompatOptionManager.cpp +++ b/cpp/src/CompatOptionManager.cpp @@ -59,7 +59,8 @@ namespace OpenZWave { "VerifyChanged", COMPAT_FLAG_VERIFYCHANGED, COMPAT_FLAG_TYPE_BOOL_ARRAY }, { "EnableNotificationClear", COMPAT_FLAG_NOT_ENABLECLEAR, COMPAT_FLAG_TYPE_BOOL }, { "EnableV1AlarmTypes", COMPAT_FLAG_NOT_V1ALARMTYPES_ENABLED, COMPAT_FLAG_TYPE_BOOL }, - { "NoRefreshAfterSet", COMPAT_FLAG_NO_REFRESH_AFTER_SET, COMPAT_FLAG_TYPE_BOOL_ARRAY } + { "NoRefreshAfterSet", COMPAT_FLAG_NO_REFRESH_AFTER_SET, COMPAT_FLAG_TYPE_BOOL_ARRAY }, + { "MultiChannelSenderOnly", COMPAT_FLAG_MULTICHANNEL_SENDER_ONLY, COMPAT_FLAG_TYPE_BOOL } // RGBGenie (Sunricher rebadge) supports MultiChannelAssociate, but not MultiChannel }; uint16_t availableCompatFlagsCount = sizeof(availableCompatFlags) / sizeof(availableCompatFlags[0]); diff --git a/cpp/src/CompatOptionManager.h b/cpp/src/CompatOptionManager.h index 237e11b204..a098a7ffde 100644 --- a/cpp/src/CompatOptionManager.h +++ b/cpp/src/CompatOptionManager.h @@ -69,6 +69,7 @@ namespace OpenZWave COMPAT_FLAG_NOT_ENABLECLEAR, COMPAT_FLAG_NOT_V1ALARMTYPES_ENABLED, COMPAT_FLAG_NO_REFRESH_AFTER_SET, + COMPAT_FLAG_MULTICHANNEL_SENDER_ONLY, STATE_FLAG_CCVERSION, STATE_FLAG_STATIC_REQUESTS, STATE_FLAG_AFTERMARK, diff --git a/cpp/src/Driver.h b/cpp/src/Driver.h index cdca6b00a1..26fbed8d97 100644 --- a/cpp/src/Driver.h +++ b/cpp/src/Driver.h @@ -59,6 +59,8 @@ namespace OpenZWave class NodeNaming; class Security; class SceneActivation; + class SwitchMultilevel; + class Color; } namespace VC { @@ -100,6 +102,8 @@ namespace OpenZWave friend class Internal::CC::WakeUp; friend class Internal::CC::ApplicationStatus; /* for Notification messages */ friend class Internal::CC::Security; + friend class Internal::CC::SwitchMultilevel; /* for Notification messages */ + friend class Internal::CC::Color; /* for Notification messages */ friend class Internal::Msg; friend class Internal::ManufacturerSpecificDB; friend class TimerThread; diff --git a/cpp/src/Group.cpp b/cpp/src/Group.cpp index 990f830c2c..158d1f3d6e 100644 --- a/cpp/src/Group.cpp +++ b/cpp/src/Group.cpp @@ -244,11 +244,20 @@ void Group::AddAssociation(uint8 const _nodeId, uint8 const _endPoint) Internal::CC::MultiInstance *mc = static_cast(node->GetCommandClass(Internal::CC::MultiInstance::StaticGetCommandClassId())); if (cc && IsMultiInstance()) { - if (mc) { + // Check the compatibility flag. Known instance is RGBGenie, which supports MultiChannelAssociation, but not MultiChannel + if ( mc || (cc->m_com.GetFlagBool(Internal::COMPAT_FLAG_MULTICHANNEL_SENDER_ONLY) == true)) + { + // Set up an instance for the values, along with an endpoint mapped to that instance. + cc->SetInstance( _endPoint ); + cc->SetEndPoint( _endPoint, _endPoint ); + cc->SetInstanceLabel( _endPoint, (char *)m_label.c_str() ); + cc->Set(m_groupIdx, _nodeId, _endPoint); cc->QueryGroup(m_groupIdx, 0); return; - } else { + } + else + { Log::Write(LogLevel_Warning, m_nodeId, "MultiChannelAssociation is Present, but MultiChannel CC is not. Trying Plain Association..."); } } @@ -275,7 +284,7 @@ void Group::RemoveAssociation(uint8 const _nodeId, uint8 const _endPoint) { if (Node* node = driver->GetNodeUnsafe(m_nodeId)) { - Internal::CC::MultiChannelAssociation* cc = static_cast(node->GetCommandClass(Internal::CC::MultiChannelAssociation::StaticGetCommandClassId())); + Internal::CC::MultiChannelAssociation* cc = static_cast(node->GetCommandClass(Internal::CC::MultiChannelAssociation::StaticGetCommandClassId())); if (cc && IsMultiInstance()) { cc->Remove(m_groupIdx, _nodeId, _endPoint); @@ -321,7 +330,7 @@ void Group::OnGroupChanged(vector const& _associations) { bool notify = false; - // If the number of associations is different, we'll save + // If the number of associations is different, we'll save // ourselves some work and clear the old set now. if (_associations.size() != m_associations.size()) { @@ -343,7 +352,7 @@ void Group::OnGroupChanged(vector const& _associations) uint8 i; for (i = 0; i < _associations.size(); ++i) { - m_associations[_associations[i]] = AssociationCommandVec(); + m_associations[_associations[i]] = AssociationCommandVec(); } if ((!notify) && (oldSize != m_associations.size())) @@ -362,7 +371,7 @@ void Group::OnGroupChanged(vector const& _associations) if (notify) { - // If the node supports COMMAND_CLASS_ASSOCIATION_COMMAND_CONFIGURATION, we need to request the command data. + // If the node supports COMMAND_CLASS_ASSOCIATION_COMMAND_CONFIGURATION, we need to request the command data. if (Driver* driver = Manager::Get()->GetDriver(m_homeId)) { if (Node* node = driver->GetNodeUnsafe(m_nodeId)) @@ -400,7 +409,7 @@ void Group::OnGroupChanged(vector const& _associations) //----------------------------------------------------------------------------- uint32 Group::GetAssociations(uint8** o_associations) { - size_t numNodes = m_associations.size(); + size_t numNodes = m_associations.size(); if (!numNodes) { *o_associations = NULL; diff --git a/cpp/src/Manager.cpp b/cpp/src/Manager.cpp index a23ed6847d..f337f08cdb 100644 --- a/cpp/src/Manager.cpp +++ b/cpp/src/Manager.cpp @@ -184,7 +184,18 @@ Manager::Manager() : int nDumpTrigger = (int) LogLevel_Warning; Options::Get()->GetOptionAsInt("DumpTriggerLevel", &nDumpTrigger); - string logFilename = userPath + logFileNameBase; + string logFilePath = ""; + Options::Get()->GetOptionAsString("LogFilePath", &logFilePath); + if ( logFilePath.size() < 1 ) + { + // Default behavior - LogFilePath not specified, and defaults to the userpath + logFilePath = userPath; + } + else if ( logFilePath[ logFilePath.size() -1] != '/') + { + logFilePath += "/"; + } + string logFilename = logFilePath + logFileNameBase; Log::Create(logFilename, bAppend, bConsoleOutput, (LogLevel) nSaveLogLevel, (LogLevel) nQueueLogLevel, (LogLevel) nDumpTrigger); Log::SetLoggingState(logging); @@ -2552,8 +2563,10 @@ bool Manager::GetValueFloatPrecision(ValueID const& _id, uint8* o_value) } else { - OZW_ERROR(OZWException::OZWEXCEPTION_CANNOT_CONVERT_VALUEID, "ValueID passed to GetValueFloatPrecision is not a Decimal Value"); - } + // GCT + // OZW_ERROR(OZWException::OZWEXCEPTION_CANNOT_CONVERT_VALUEID, "ValueID passed to GetValueFloatPrecision is not a Decimal Value"); + Log::Write(LogLevel_Error, "Exception swallowed in Manager::GetValueFloatPrecision (!). Invalid GetValueFloatPrecision() on value %u of type %s", *o_value, Internal::VC::Value::GetTypeNameFromEnum(_id.GetType())); + } } return res; diff --git a/cpp/src/Notification.cpp b/cpp/src/Notification.cpp index 675b6585eb..7c41ecd14c 100644 --- a/cpp/src/Notification.cpp +++ b/cpp/src/Notification.cpp @@ -336,6 +336,12 @@ string Notification::GetAsString() const case Type_ManufacturerSpecificDBReady: str = "ManufacturerSpecificDB Ready"; break; + case Type_LevelChangeStart: + str = "Level Change Start"; + break; + case Type_LevelChangeStop: + str = "Level Change Stop"; + break; } return str; diff --git a/cpp/src/Notification.h b/cpp/src/Notification.h index 455d536491..099d24401a 100644 --- a/cpp/src/Notification.h +++ b/cpp/src/Notification.h @@ -45,6 +45,8 @@ namespace OpenZWave class NodeNaming; class SceneActivation; class WakeUp; + class SwitchMultilevel; + class Color; } namespace VC { @@ -73,6 +75,8 @@ namespace OpenZWave friend class Internal::CC::SceneActivation; friend class Internal::CC::WakeUp; friend class Internal::CC::ApplicationStatus; + friend class Internal::CC::SwitchMultilevel; + friend class Internal::CC::Color; friend class Internal::ManufacturerSpecificDB; /* allow us to Stream a Notification */ //friend std::ostream &operator<<(std::ostream &os, const Notification &dt); @@ -119,7 +123,9 @@ namespace OpenZWave * Notification::GetEvent returns Driver::ControllerCommand and Notification::GetNotification returns Driver::ControllerState */ Type_NodeReset, /**< The Device has been reset and thus removed from the NodeList in OZW */ Type_UserAlerts, /**< Warnings and Notifications Generated by the library that should be displayed to the user (eg, out of date config files) */ - Type_ManufacturerSpecificDBReady /**< The ManufacturerSpecific Database Is Ready */ + Type_ManufacturerSpecificDBReady, /**< The ManufacturerSpecific Database Is Ready */ + Type_LevelChangeStart, /**< Start level changes (multilevel switch, color) */ + Type_LevelChangeStop /**< Stop level changes (multilevel switch, color) */ }; /** @@ -156,6 +162,53 @@ namespace OpenZWave Alert_ApplicationStatus_Rejected, /**< Command has been rejected */ }; + /** + * Types of things that support start/stop of level changes. + */ + enum LevelChangeType + { + LevelChange_Switch, /**< Multilevel Switch */ + LevelChange_Color /**< Color Switch start/stop level change */ + }; + + /** + * Interpretation of the up/down bits in a level change command. + * For color change, this is just up or down. For a multilevel switch with + * a secondary control, could ignore one or the other. + */ + enum LevelChangeDirection + { + LevelChangeDirection_Up, /**< When the change is started, increment. */ + LevelChangeDirection_Down, /**< When the change is started, decrement. */ + LevelChangeDirection_None /**< Do not increment or decrement. Used for multilevel switch with 2 switches. */ + }; + + /** + * Used for storing the parameters for a multilevel switch or color change start command. + * Only a multilevel switch has the secondary parameters. + */ + struct LevelChangeParameters + { + LevelChangeParameters(): + m_type( LevelChange_Switch ), + m_primaryDirection(LevelChangeDirection_None), + m_secondaryDirection(LevelChangeDirection_None), + m_ignoreStartLevel(0), + m_primaryStartLevel(0), + m_durationSeconds(0), + m_secondaryStepSize(0), + m_colorTarget(""){} + + LevelChangeType m_type; + LevelChangeDirection m_primaryDirection; + LevelChangeDirection m_secondaryDirection; + uint8 m_ignoreStartLevel; + uint8 m_primaryStartLevel; + uint16 m_durationSeconds; + uint8 m_secondaryStepSize; + string m_colorTarget; + }; + /** * Get the type of this notification. * \return the notification type. @@ -184,6 +237,15 @@ namespace OpenZWave return m_valueId.GetNodeId(); } + /** + * Get the CommandClass Instance associated with this notification. + * @return the instance ID + */ + uint8 GetInstance() const + { + return m_valueId.GetInstance(); + } + /** * Get the unique ValueID of any value involved in this notification. * \return the value's ValueID @@ -300,6 +362,11 @@ namespace OpenZWave } ; + LevelChangeParameters const& GetLevelChangeParameters () const + { + return m_levelChangeParameters; + } + private: Notification(NotificationType _type) : m_type(_type), m_byte(0), m_event(0), m_command(0), m_useralerttype(Alert_None) @@ -366,6 +433,36 @@ namespace OpenZWave assert(Type_UserAlerts == m_type); m_byte = timeout; } + void SetLevelChangeStartParameters( LevelChangeType type, + LevelChangeDirection primaryDirection, + LevelChangeDirection secondaryDirection, + uint8 ignoreStartLevel, + uint8 primaryStartLevel, + uint16 durationSeconds, + uint8 secondaryStepSize, + string colorTarget ) + { + assert(Type_LevelChangeStart == m_type); + m_levelChangeParameters.m_type = type; + m_levelChangeParameters.m_primaryDirection = primaryDirection; + m_levelChangeParameters.m_secondaryDirection = secondaryDirection; + m_levelChangeParameters.m_ignoreStartLevel = ignoreStartLevel; + m_levelChangeParameters.m_primaryStartLevel = primaryStartLevel; + m_levelChangeParameters.m_durationSeconds = durationSeconds; + m_levelChangeParameters.m_secondaryStepSize = secondaryStepSize; + m_levelChangeParameters.m_colorTarget = colorTarget; + } + void SetLevelChangeType ( LevelChangeType type ) + { + assert(Type_LevelChangeStart == m_type || Type_LevelChangeStop == m_type ); + m_levelChangeParameters.m_type = type; + } + + void SetColorTarget ( string colorTarget ) + { + assert(Type_LevelChangeStart == m_type || Type_LevelChangeStop == m_type ); + m_levelChangeParameters.m_colorTarget = colorTarget; + } NotificationType m_type; ValueID m_valueId; @@ -374,6 +471,7 @@ namespace OpenZWave uint8 m_command; UserAlertNotification m_useralerttype; string m_comport; + LevelChangeParameters m_levelChangeParameters; }; } //namespace OpenZWave diff --git a/cpp/src/Options.cpp b/cpp/src/Options.cpp index 9137f0e7cc..381d6e4cfe 100644 --- a/cpp/src/Options.cpp +++ b/cpp/src/Options.cpp @@ -100,6 +100,7 @@ Options* Options::Create(string const& _configPath, string const& _userPath, str s_instance->AddOptionBool("Logging", true); // Enable logging of library activity. s_instance->AddOptionString("LogFileName", "OZW_Log.txt", false); // Name of the log file (can be changed via Log::SetLogFileName) + s_instance->AddOptionString("LogFilePath", string(""), false); // Alternate path (rather than using userpath) for the logfile - e.g., to keep in RAM s_instance->AddOptionBool("AppendLogFile", false); // Append new session logs to existing log file (false = overwrite) s_instance->AddOptionBool("ConsoleOutput", true); // Display log information on console (as well as save to disk) s_instance->AddOptionInt("SaveLogLevel", LogLevel_Detail); // Save (to file) log messages equal to or above LogLevel_Detail diff --git a/cpp/src/command_classes/CentralScene.cpp b/cpp/src/command_classes/CentralScene.cpp index d088894547..9eb4ce778c 100644 --- a/cpp/src/command_classes/CentralScene.cpp +++ b/cpp/src/command_classes/CentralScene.cpp @@ -87,7 +87,7 @@ namespace OpenZWave // Constructor //----------------------------------------------------------------------------- CentralScene::CentralScene(uint32 const _homeId, uint8 const _nodeId) : - CommandClass(_homeId, _nodeId), m_slowrefresh(false), m_sequence(0) + CommandClass(_homeId, _nodeId), m_slowrefresh(false), m_sequence(0xFE) // init to this to pick up initial set to scene 0 { m_dom.EnableFlag(STATE_FLAG_CS_SCENECOUNT, 0); m_dom.EnableFlag(STATE_FLAG_CS_CLEARTIMEOUT, 1000); diff --git a/cpp/src/command_classes/Color.cpp b/cpp/src/command_classes/Color.cpp index fe97a028d6..0cc1713e87 100644 --- a/cpp/src/command_classes/Color.cpp +++ b/cpp/src/command_classes/Color.cpp @@ -35,6 +35,7 @@ #include "Node.h" #include "Driver.h" #include "platform/Log.h" +#include "Notification.h" #include "value_classes/ValueInt.h" #include "value_classes/ValueString.h" @@ -394,6 +395,104 @@ namespace OpenZWave return true; } + /* + * Next three are to support the RGBGenie, which is a wall plate you can use to send signals + * to the lights in a group. In this case, we want to receive the signals so that we can act on + * them. + */ + if (ColorCmd_Set == (ColorCmd) _data[0]) + { + // Get our current color capabilities -- we'll be updating if we see a new color channel set. + uint16_t f_capabilities = m_dom.GetFlagShort(STATE_FLAG_COLOR_CHANNELS); + uint16_t f_save_capabilities = f_capabilities; + + uint8 nComponents = _data[1] & 0x1F; + for ( uint8_t idx = 0; idx < nComponents; idx++ ) + { + uint8 coloridx = _data[ 2 + idx*2 ]; + m_colorvalues[coloridx] = _data[ 3 + idx*2 ]; + Log::Write(LogLevel_Detail, GetNodeId(), "Setting index %u to value %u", coloridx, m_colorvalues[ coloridx ]); + + // If we're being asked to set a color, be sure it's set in our capabilities (i.e., force it)! + // Each bit stands for one of the color indices. + f_capabilities |= (1 << coloridx); + } + if ( f_capabilities != f_save_capabilities ) // then we updated it along the way . . . + { + m_dom.SetFlagShort(STATE_FLAG_COLOR_CHANNELS, f_capabilities); + } + string colorStr = decodeColor(m_colorvalues); + Log::Write(LogLevel_Info, GetNodeId(), "Received COLOR_SET from Device: %s for instance %d", colorStr.c_str(), _instance); + + Internal::VC::ValueString* color = static_cast(GetValue(_instance, ValueID_Index_Color::Color)); + + if ( ! color ) + { + if (Node* node = GetNodeUnsafe()) + { + // Create it read-only ... + node->CreateValueString(ValueID::ValueGenre_User, GetCommandClassId(), _instance, + ValueID_Index_Color::Color, "Color", "", true, false, "#000000", 0); + color = static_cast(GetValue(_instance, ValueID_Index_Color::Color)); + } + else + { + Log::Write(LogLevel_Error, GetNodeId(), "Couldn't get node (!?)."); + } + } + + color->OnValueRefreshed(colorStr); + color->Release(); + + /* if we got a updated Color Index Value - Update our ValueID */ + if (Internal::VC::ValueList* coloridx = static_cast(GetValue(_instance, ValueID_Index_Color::Index))) + { + if ((m_dom.GetFlagShort(STATE_FLAG_COLOR_CHANNELS)) & (1 << (COLORIDX_INDEXCOLOR))) + { + coloridx->OnValueRefreshed(m_colorvalues[COLORIDX_INDEXCOLOR]); + } + else + { + coloridx->OnValueRefreshed(decodeColorList(colorStr)); + } + coloridx->Release(); + } + + return true; + } + if (ColorCmd_StartCapabilityLevelChange == (ColorCmd) _data[0]) + { + uint8 ignoreStartLevel = ( _data[1] >> 5 ) & 0x01; + uint8 directionRaw = ( _data[1] >> 6 ) & 0x01; + uint8 colorComponentId = _data[2]; + uint8 startLevel = _data[3]; + uint16 durationSeconds = 4; // TODO: should do something else here. Overall, this seems like a good duration, but ... + string colorStr = decodeColorIndexAndAddColor(colorComponentId); + + Notification::LevelChangeDirection direction = ( directionRaw == 0) ? Notification::LevelChangeDirection_Up : Notification::LevelChangeDirection_Down; + + Log::Write(LogLevel_Info, GetNodeId(), "Received ColorCmd_StartStateChange from node %d - instance %d. Color index %d - %s. Sending event notification.", GetNodeId(), _instance, colorComponentId, colorStr.c_str()); + Notification* notification = new Notification(Notification::Type_LevelChangeStart); + notification->SetHomeNodeIdAndInstance(GetHomeId(), GetNodeId(), _instance); + notification->SetLevelChangeStartParameters( Notification::LevelChange_Color, direction, Notification::LevelChangeDirection_None, ignoreStartLevel, startLevel, durationSeconds, 0, colorStr ); + GetDriver()->QueueNotification(notification); + + return true; + } + if (ColorCmd_StopStateChange == (ColorCmd) _data[0]) + { + uint colorComponentId = _data[1]; + string colorStr = decodeColorIndexAndAddColor(colorComponentId); + Log::Write(LogLevel_Info, GetNodeId(), "Received ColorCmd_StopStateChange from node %d - instance %d. Color index %d - %s. Sending event notification.", GetNodeId(), _instance, colorComponentId, colorStr.c_str()); + Notification* notification = new Notification(Notification::Type_LevelChangeStop); + notification->SetHomeNodeIdAndInstance(GetHomeId(), GetNodeId(), _instance); + notification->SetLevelChangeType( Notification::LevelChange_Color ); + notification->SetColorTarget( colorStr ); + GetDriver()->QueueNotification(notification); + + return true; + } + return false; } @@ -520,6 +619,13 @@ namespace OpenZWave return 17; } + /** + * NOTE: 12.30.2020: This had a defect in that instead of decoding from the valueArray passed in, + * it was always decoding from m_colorvalues. This only impacts the calls that + * were calling with m_colorTargetValues. Pretty sure they were defective. + * @param valueArray + * @return + */ string Color::decodeColor(uint8 valueArray[9]) { /* create a RGB[W] String */ @@ -530,17 +636,17 @@ namespace OpenZWave ss << "#"; /* do R */ if ((f_capabilities) & (1 << (COLORIDX_RED))) - ss << std::setw(2) << std::uppercase << std::hex << std::setfill('0') << (int) m_colorvalues[COLORIDX_RED]; + ss << std::setw(2) << std::uppercase << std::hex << std::setfill('0') << (int) valueArray[COLORIDX_RED]; else ss << "00"; /* do G */ if ((f_capabilities) & (1 << (COLORIDX_GREEN))) - ss << std::setw(2) << std::uppercase << std::hex << std::setfill('0') << (int) m_colorvalues[COLORIDX_GREEN]; + ss << std::setw(2) << std::uppercase << std::hex << std::setfill('0') << (int) valueArray[COLORIDX_GREEN]; else ss << "00"; /* do B */ if ((f_capabilities) & (1 << (COLORIDX_BLUE))) - ss << std::setw(2) << std::uppercase << std::hex << std::setfill('0') << (int) m_colorvalues[COLORIDX_BLUE]; + ss << std::setw(2) << std::uppercase << std::hex << std::setfill('0') << (int) valueArray[COLORIDX_BLUE]; else ss << "00"; @@ -548,18 +654,18 @@ namespace OpenZWave if (((f_capabilities) & (1 << (COLORIDX_WARMWHITE))) && ((f_capabilities) & (1 << (COLORIDX_COLDWHITE)))) { /* append them both */ - ss << std::setw(2) << std::uppercase << std::hex << std::setfill('0') << (int) m_colorvalues[COLORIDX_WARMWHITE]; - ss << std::setw(2) << std::uppercase << std::hex << std::setfill('0') << (int) m_colorvalues[COLORIDX_COLDWHITE]; + ss << std::setw(2) << std::uppercase << std::hex << std::setfill('0') << (int) valueArray[COLORIDX_WARMWHITE]; + ss << std::setw(2) << std::uppercase << std::hex << std::setfill('0') << (int) valueArray[COLORIDX_COLDWHITE]; } else if ((f_capabilities) & (1 << (COLORIDX_WARMWHITE))) { /* else, if the warm white is present, append that */ - ss << std::setw(2) << std::uppercase << std::hex << std::setfill('0') << (int) m_colorvalues[COLORIDX_WARMWHITE]; + ss << std::setw(2) << std::uppercase << std::hex << std::setfill('0') << (int) valueArray[COLORIDX_WARMWHITE]; } else if ((f_capabilities) & (1 << (COLORIDX_COLDWHITE))) { /* else, if the cold white is present, append that */ - ss << std::setw(2) << std::uppercase << std::hex << std::setfill('0') << (int) m_colorvalues[COLORIDX_COLDWHITE]; + ss << std::setw(2) << std::uppercase << std::hex << std::setfill('0') << (int) valueArray[COLORIDX_COLDWHITE]; } else { @@ -578,7 +684,7 @@ namespace OpenZWave usingbuf = false; } /* and then our Color */ - ss << std::setw(2) << std::uppercase << std::hex << std::setfill('0') << (int) m_colorvalues[COLORIDX_AMBER]; + ss << std::setw(2) << std::uppercase << std::hex << std::setfill('0') << (int) valueArray[COLORIDX_AMBER]; } else { @@ -597,7 +703,7 @@ namespace OpenZWave usingbuf = false; } /* and then our Color */ - ss << std::setw(2) << std::uppercase << std::hex << std::setfill('0') << (int) m_colorvalues[COLORIDX_CYAN]; + ss << std::setw(2) << std::uppercase << std::hex << std::setfill('0') << (int) valueArray[COLORIDX_CYAN]; } else { @@ -616,7 +722,7 @@ namespace OpenZWave usingbuf = false; } /* and then our Color */ - ss << std::setw(2) << std::uppercase << std::hex << std::setfill('0') << (int) m_colorvalues[COLORIDX_PURPLE]; + ss << std::setw(2) << std::uppercase << std::hex << std::setfill('0') << (int) valueArray[COLORIDX_PURPLE]; } /* No need for a else case here as COLORIDX_PURPLE is the last color. If its not supported, we * don't put anything in our Color String @@ -624,6 +730,32 @@ namespace OpenZWave return ss.str(); } +//----------------------------------------------------------------------------- +// +// Helper function for turning a single color index value into a string. Used +// when handling color change start/stop (applies to single color index). We +// also force the color index into our supported flags, as if we're being asked +// to change it, we must support it! Note that that makes this a single-use utility; +// you would modify it to optionally force the flag if you wanted to use it elsewhere. +//----------------------------------------------------------------------------- + + string Color::decodeColorIndexAndAddColor ( uint8 const colorIndex ) + { + // Get our current color capabilities -- we'll be updating if we see a new color channel set. + uint16_t f_capabilities = m_dom.GetFlagShort(STATE_FLAG_COLOR_CHANNELS); + uint8 colorvalues[9]; + for (uint8 i = 0; i < 9; i++) + colorvalues[i] = 0; + + colorvalues[colorIndex] = 0xFF; + // If we're being asked to set a color, be sure it's set in our capabilities (i.e., force it)! + // Each bit stands for one of the color indices. + if ( ! ( f_capabilities & (1 << colorIndex)) ) { // ... then it's a new color index + m_dom.SetFlagShort(STATE_FLAG_COLOR_CHANNELS, f_capabilities | (1 << colorIndex)); + } + return decodeColor(colorvalues); + } + //----------------------------------------------------------------------------- // // Set the device's Color value diff --git a/cpp/src/command_classes/Color.h b/cpp/src/command_classes/Color.h index 104ace81f8..8374b04cec 100644 --- a/cpp/src/command_classes/Color.h +++ b/cpp/src/command_classes/Color.h @@ -84,6 +84,7 @@ namespace OpenZWave virtual void CreateVars(uint8 const _instance) override; string decodeColor(uint8 valueArray[9]); uint8 decodeColorList(string color); + string decodeColorIndexAndAddColor ( uint8 const colorIndex ); private: Color(uint32 const _homeId, uint8 const _nodeId); diff --git a/cpp/src/command_classes/Configuration.cpp b/cpp/src/command_classes/Configuration.cpp index 3e60385853..791cb682e7 100644 --- a/cpp/src/command_classes/Configuration.cpp +++ b/cpp/src/command_classes/Configuration.cpp @@ -61,7 +61,8 @@ namespace OpenZWave bool Configuration::HandleMsg(uint8 const* _data, uint32 const _length, uint32 const _instance // = 1 ) { - if (ConfigurationCmd_Report == (ConfigurationCmd) _data[0]) + if ((ConfigurationCmd_Report == (ConfigurationCmd) _data[0]) + || (ConfigurationCmd_Set == (ConfigurationCmd) _data[0])) { // Extract the parameter index and value uint8 parameter = _data[1]; @@ -73,7 +74,10 @@ namespace OpenZWave paramValue |= (int32) _data[i + 3]; } - if (Internal::VC::Value* value = GetValue(1, parameter)) + Log::Write(LogLevel_Info, GetNodeId(), "Configuration Set: Parameter %d - Size %d - Value %d", parameter, size, paramValue); + + // This had previously been forced to be GetValue(1, ...), ignoring the _instance. + if (Internal::VC::Value* value = GetValue(_instance, parameter)) { switch (value->GetID().GetType()) { @@ -156,6 +160,9 @@ namespace OpenZWave Log::Write(LogLevel_Info, GetNodeId(), "Received Configuration report: Parameter=%d, Value=%d", parameter, paramValue); return true; } + else { + Log::Write(LogLevel_Info, GetNodeId(), "Configuration Set: Unhandled command %d", _data[0]); + } return false; } diff --git a/cpp/src/command_classes/MultiChannelAssociation.cpp b/cpp/src/command_classes/MultiChannelAssociation.cpp index 5ab4f3738e..124619a4f4 100644 --- a/cpp/src/command_classes/MultiChannelAssociation.cpp +++ b/cpp/src/command_classes/MultiChannelAssociation.cpp @@ -59,7 +59,8 @@ namespace OpenZWave CommandClass(_homeId, _nodeId), m_queryAll(false), m_numGroups(0) { m_com.EnableFlag(COMPAT_FLAG_MCA_FORCEINSTANCES, true); - SetStaticRequest(StaticRequest_Values); + m_com.EnableFlag(COMPAT_FLAG_MULTICHANNEL_SENDER_ONLY, false); + SetStaticRequest(StaticRequest_Values); } //----------------------------------------------------------------------------- diff --git a/cpp/src/command_classes/MultiInstance.cpp b/cpp/src/command_classes/MultiInstance.cpp index ad8221ea17..33ee8d5a62 100644 --- a/cpp/src/command_classes/MultiInstance.cpp +++ b/cpp/src/command_classes/MultiInstance.cpp @@ -79,7 +79,8 @@ namespace OpenZWave m_com.EnableFlag(COMPAT_FLAG_MI_IGNMCCAPREPORTS, false); m_com.EnableFlag(COMPAT_FLAG_MI_ENDPOINTHINT, 0); m_com.EnableFlag(COMPAT_FLAG_MI_REMOVECC, false); - } + m_com.EnableFlag(COMPAT_FLAG_MULTICHANNEL_SENDER_ONLY, false); + } //----------------------------------------------------------------------------- // @@ -609,16 +610,59 @@ namespace OpenZWave */ if (endPoint == 0) { - Log::Write(LogLevel_Info, GetNodeId(), "MultiChannelEncap with endpoint set to 0 - Send to Root Device"); - pCommandClass->HandleMsg(&_data[4], _length - 4); - return; + /* + * If this flag is set, then we have a device that we can make an end-point association + * with for *our* (simulated) end-point, and it will return commands to that end point. + * Example here is the RGBGenie wall panel, which can associate color commands to groups. + * If we want to pick those up (segregated by group), we need to catch the group (endpoint) + * indicated in the return. COMPAT_FLAG_MULTICHANNEL_SENDER_ONLY indicates this case. + */ + if ( m_com.GetFlagBool(Internal::COMPAT_FLAG_MULTICHANNEL_SENDER_ONLY) == true ) + { + endPoint = _data[2] & 0x7f; + Log::Write(LogLevel_Info, GetNodeId(), "MultiChannelEncap with (s)endpoint set to %d.", endPoint ); + + uint8 testInstance = pCommandClass->GetInstance(endPoint); + + if ( testInstance != endPoint ) + { + Log::Write(LogLevel_Info, GetNodeId(), "MultiChannelEncap fixing instance %d for endpoint %d.", testInstance, endPoint ); + + pCommandClass->SetInstance( endPoint ); + pCommandClass->SetEndPoint( endPoint, endPoint ); + // Should probably also set an instance label here (?) -- pCommandClass-SetInstanceLabel( endPoint, ??) + + /* + * TODO: solve incorrect value label for first discovered instance if IncludeInstanceLabel set to true + * The way we're doing this, which is to add the instances at the point we receive a message, + * introduces a defect. See Manager::GetValueLabel(). It checks the IncludeInstanceLabel + * configuration option, and if set, then it also checks to see if the CC has multiple instances. + * In our case, for the very first added instance, we will not have multiple instances, + * so the label will *not* include the Instance # prefix. It's not immediately clear to me + * how to solve this in a clean way, as for the device I'm adding (RGBGenie), you don't necessarily + * know what endpoints you're going to get back until you get a message on them. The messy way + * (brute force) to solve this would be to add an "isMultiInstance" flag in the CommandClass, and + * set that to true here when we detect this, and then check it in Manager::GetValueLabel(). But + * for that flag to be meaningful everywhere (i.e., to have clean semantics, as opposed to just + * brute-forcing this one case) would require a more thorough implementation. + * The temporary workaround is just to always handle both cases in your client (instance label in value + * label, or none). + */ + } + } + else + { + Log::Write(LogLevel_Info, GetNodeId(), "MultiChannelEncap with endpoint set to 0 - Send to Root Device"); + pCommandClass->HandleMsg(&_data[4], _length - 4); + return; + } } uint8 instance = pCommandClass->GetInstance(endPoint); /* we can never have a 0 Instance */ if (instance == 0) instance = 1; - Log::Write(LogLevel_Info, GetNodeId(), "Received a MultiChannelEncap from node %d, endpoint %d for Command Class %s", GetNodeId(), endPoint, pCommandClass->GetCommandClassName().c_str()); + Log::Write(LogLevel_Info, GetNodeId(), "Received a MultiChannelEncap from node %d, endpoint %d, instance %d for Command Class %s", GetNodeId(), endPoint, instance, pCommandClass->GetCommandClassName().c_str()); if (!pCommandClass->IsAfterMark()) { if (!pCommandClass->HandleMsg(&_data[4], _length - 4, instance)) diff --git a/cpp/src/command_classes/SwitchMultilevel.cpp b/cpp/src/command_classes/SwitchMultilevel.cpp index 7685b81bbf..dd495317b4 100644 --- a/cpp/src/command_classes/SwitchMultilevel.cpp +++ b/cpp/src/command_classes/SwitchMultilevel.cpp @@ -33,6 +33,7 @@ #include "Driver.h" #include "Node.h" #include "platform/Log.h" +#include "Notification.h" #include "value_classes/ValueBool.h" #include "value_classes/ValueButton.h" @@ -222,7 +223,55 @@ namespace OpenZWave } return true; } - Log::Write(LogLevel_Warning, GetNodeId(), "Recieved a Unhandled SwitchMultiLevel Command: %d", _data[0]); + + if ( SwitchMultilevelCmd_StartLevelChange == (SwitchMultilevelCmd)_data[0]) + { + uint8 secondaryDirectionRaw = ( _data[1] >> 3 ) & 0x03; + uint8 ignoreStartLevel = ( _data[1] >> 5 ) & 0x01; + uint8 primaryDirectionRaw = ( _data[1] >> 6 ) & 0x03; + uint8 primaryStartLevel = _data[2]; + uint8 codedDuration = _data[3]; + uint8 secondaryStepSize = ( _length > 4 ) ? _data[4] : 0; // > Version 2 only + uint16 durationSeconds = codedDuration; + + Notification::LevelChangeDirection primaryDirection = ( primaryDirectionRaw == 0) ? Notification::LevelChangeDirection_Up + : ( ( primaryDirectionRaw == 1) ? Notification::LevelChangeDirection_Down : Notification::LevelChangeDirection_None); + Notification::LevelChangeDirection secondaryDirection = ( secondaryDirectionRaw == 0) ? Notification::LevelChangeDirection_Up + : ( ( secondaryDirectionRaw == 1) ? Notification::LevelChangeDirection_Down : Notification::LevelChangeDirection_None); + + if ( codedDuration > 0x7F ) { + if ( codedDuration == 0xFF ) { + // Uh, it's supposed to be factory duration. Call it 10 seconds for grins. + // TODO: figure something else out, here? + durationSeconds = 10; + } + else { + // It's in minutes, starting from 0x80 == 1 minute. + durationSeconds = ( codedDuration - 0x7F ) * 60; + } + } + + Log::Write(LogLevel_Info, GetNodeId(), "Received MultilevelSwitchStart from node %d. Sending event notification.", GetNodeId()); + Notification* notification = new Notification(Notification::Type_LevelChangeStart); + notification->SetHomeNodeIdAndInstance(GetHomeId(), GetNodeId(), _instance); + notification->SetLevelChangeStartParameters( Notification::LevelChange_Switch, primaryDirection, secondaryDirection, ignoreStartLevel, primaryStartLevel, durationSeconds, secondaryStepSize, "" ); + GetDriver()->QueueNotification(notification); + + return true; + } + + if ( SwitchMultilevelCmd_StopLevelChange == (SwitchMultilevelCmd)_data[0]) + { + Log::Write(LogLevel_Info, GetNodeId(), "Received MultilevelSwitchStop from node %d. Sending event notification.", GetNodeId()); + Notification* notification = new Notification(Notification::Type_LevelChangeStop); + notification->SetHomeNodeIdAndInstance(GetHomeId(), GetNodeId(), _instance); + notification->SetLevelChangeType( Notification::LevelChange_Switch ); + GetDriver()->QueueNotification(notification); + + return true; + } + + Log::Write(LogLevel_Warning, GetNodeId(), "Recieved a Unhandled SwitchMultiLevel Command: %d", _data[0]); return false; } From 41fb6b14f94fd799cdef58cb873fb349f536ccbe Mon Sep 17 00:00:00 2001 From: Greg Tatham Date: Sun, 10 Jan 2021 15:06:57 -0600 Subject: [PATCH 011/198] Fixing tabs vs spaces --- config/device_configuration.xsd | 2 +- cpp/src/Group.cpp | 26 +-- cpp/src/Manager.cpp | 22 +- cpp/src/Notification.cpp | 12 +- cpp/src/Notification.h | 130 ++++++------ cpp/src/command_classes/Color.cpp | 190 +++++++++--------- cpp/src/command_classes/Configuration.cpp | 9 +- .../MultiChannelAssociation.cpp | 4 +- cpp/src/command_classes/MultiInstance.cpp | 96 ++++----- cpp/src/command_classes/SwitchMultilevel.cpp | 96 ++++----- 10 files changed, 295 insertions(+), 292 deletions(-) diff --git a/config/device_configuration.xsd b/config/device_configuration.xsd index fa53c5def3..25f6ac7a04 100644 --- a/config/device_configuration.xsd +++ b/config/device_configuration.xsd @@ -94,7 +94,7 @@ - + diff --git a/cpp/src/Group.cpp b/cpp/src/Group.cpp index 158d1f3d6e..e2c0b7b6ef 100644 --- a/cpp/src/Group.cpp +++ b/cpp/src/Group.cpp @@ -244,20 +244,20 @@ void Group::AddAssociation(uint8 const _nodeId, uint8 const _endPoint) Internal::CC::MultiInstance *mc = static_cast(node->GetCommandClass(Internal::CC::MultiInstance::StaticGetCommandClassId())); if (cc && IsMultiInstance()) { - // Check the compatibility flag. Known instance is RGBGenie, which supports MultiChannelAssociation, but not MultiChannel - if ( mc || (cc->m_com.GetFlagBool(Internal::COMPAT_FLAG_MULTICHANNEL_SENDER_ONLY) == true)) - { - // Set up an instance for the values, along with an endpoint mapped to that instance. - cc->SetInstance( _endPoint ); - cc->SetEndPoint( _endPoint, _endPoint ); - cc->SetInstanceLabel( _endPoint, (char *)m_label.c_str() ); + // Check the compatibility flag. Known instance is RGBGenie, which supports MultiChannelAssociation, but not MultiChannel + if ( mc || (cc->m_com.GetFlagBool(Internal::COMPAT_FLAG_MULTICHANNEL_SENDER_ONLY) == true)) + { + // Set up an instance for the values, along with an endpoint mapped to that instance. + cc->SetInstance( _endPoint ); + cc->SetEndPoint( _endPoint, _endPoint ); + cc->SetInstanceLabel( _endPoint, (char *)m_label.c_str() ); cc->Set(m_groupIdx, _nodeId, _endPoint); cc->QueryGroup(m_groupIdx, 0); return; } - else - { + else + { Log::Write(LogLevel_Warning, m_nodeId, "MultiChannelAssociation is Present, but MultiChannel CC is not. Trying Plain Association..."); } } @@ -284,7 +284,7 @@ void Group::RemoveAssociation(uint8 const _nodeId, uint8 const _endPoint) { if (Node* node = driver->GetNodeUnsafe(m_nodeId)) { - Internal::CC::MultiChannelAssociation* cc = static_cast(node->GetCommandClass(Internal::CC::MultiChannelAssociation::StaticGetCommandClassId())); + Internal::CC::MultiChannelAssociation* cc = static_cast(node->GetCommandClass(Internal::CC::MultiChannelAssociation::StaticGetCommandClassId())); if (cc && IsMultiInstance()) { cc->Remove(m_groupIdx, _nodeId, _endPoint); @@ -330,7 +330,7 @@ void Group::OnGroupChanged(vector const& _associations) { bool notify = false; - // If the number of associations is different, we'll save + // If the number of associations is different, we'll save // ourselves some work and clear the old set now. if (_associations.size() != m_associations.size()) { @@ -352,7 +352,7 @@ void Group::OnGroupChanged(vector const& _associations) uint8 i; for (i = 0; i < _associations.size(); ++i) { - m_associations[_associations[i]] = AssociationCommandVec(); + m_associations[_associations[i]] = AssociationCommandVec(); } if ((!notify) && (oldSize != m_associations.size())) @@ -371,7 +371,7 @@ void Group::OnGroupChanged(vector const& _associations) if (notify) { - // If the node supports COMMAND_CLASS_ASSOCIATION_COMMAND_CONFIGURATION, we need to request the command data. + // If the node supports COMMAND_CLASS_ASSOCIATION_COMMAND_CONFIGURATION, we need to request the command data. if (Driver* driver = Manager::Get()->GetDriver(m_homeId)) { if (Node* node = driver->GetNodeUnsafe(m_nodeId)) diff --git a/cpp/src/Manager.cpp b/cpp/src/Manager.cpp index f337f08cdb..dbe0def740 100644 --- a/cpp/src/Manager.cpp +++ b/cpp/src/Manager.cpp @@ -187,14 +187,14 @@ Manager::Manager() : string logFilePath = ""; Options::Get()->GetOptionAsString("LogFilePath", &logFilePath); if ( logFilePath.size() < 1 ) - { - // Default behavior - LogFilePath not specified, and defaults to the userpath - logFilePath = userPath; - } + { + // Default behavior - LogFilePath not specified, and defaults to the userpath + logFilePath = userPath; + } else if ( logFilePath[ logFilePath.size() -1] != '/') - { - logFilePath += "/"; - } + { + logFilePath += "/"; + } string logFilename = logFilePath + logFileNameBase; Log::Create(logFilename, bAppend, bConsoleOutput, (LogLevel) nSaveLogLevel, (LogLevel) nQueueLogLevel, (LogLevel) nDumpTrigger); Log::SetLoggingState(logging); @@ -2563,10 +2563,12 @@ bool Manager::GetValueFloatPrecision(ValueID const& _id, uint8* o_value) } else { - // GCT + // GCT: I'm not sure the exact source, but occasional bad values being passed + // here. Swallowing the error produces no bad effects, and prevents bad + // initialization. // OZW_ERROR(OZWException::OZWEXCEPTION_CANNOT_CONVERT_VALUEID, "ValueID passed to GetValueFloatPrecision is not a Decimal Value"); - Log::Write(LogLevel_Error, "Exception swallowed in Manager::GetValueFloatPrecision (!). Invalid GetValueFloatPrecision() on value %u of type %s", *o_value, Internal::VC::Value::GetTypeNameFromEnum(_id.GetType())); - } + Log::Write(LogLevel_Error, "Exception swallowed in Manager::GetValueFloatPrecision (!). Invalid GetValueFloatPrecision() on value %u of type %s", *o_value, Internal::VC::Value::GetTypeNameFromEnum(_id.GetType())); + } } return res; diff --git a/cpp/src/Notification.cpp b/cpp/src/Notification.cpp index 7c41ecd14c..81b22657fe 100644 --- a/cpp/src/Notification.cpp +++ b/cpp/src/Notification.cpp @@ -336,12 +336,12 @@ string Notification::GetAsString() const case Type_ManufacturerSpecificDBReady: str = "ManufacturerSpecificDB Ready"; break; - case Type_LevelChangeStart: - str = "Level Change Start"; - break; - case Type_LevelChangeStop: - str = "Level Change Stop"; - break; + case Type_LevelChangeStart: + str = "Level Change Start"; + break; + case Type_LevelChangeStop: + str = "Level Change Stop"; + break; } return str; diff --git a/cpp/src/Notification.h b/cpp/src/Notification.h index 099d24401a..6e7a06e408 100644 --- a/cpp/src/Notification.h +++ b/cpp/src/Notification.h @@ -125,7 +125,7 @@ namespace OpenZWave Type_UserAlerts, /**< Warnings and Notifications Generated by the library that should be displayed to the user (eg, out of date config files) */ Type_ManufacturerSpecificDBReady, /**< The ManufacturerSpecific Database Is Ready */ Type_LevelChangeStart, /**< Start level changes (multilevel switch, color) */ - Type_LevelChangeStop /**< Stop level changes (multilevel switch, color) */ + Type_LevelChangeStop /**< Stop level changes (multilevel switch, color) */ }; /** @@ -166,10 +166,10 @@ namespace OpenZWave * Types of things that support start/stop of level changes. */ enum LevelChangeType - { - LevelChange_Switch, /**< Multilevel Switch */ - LevelChange_Color /**< Color Switch start/stop level change */ - }; + { + LevelChange_Switch, /**< Multilevel Switch */ + LevelChange_Color /**< Color Switch start/stop level change */ + }; /** * Interpretation of the up/down bits in a level change command. @@ -177,37 +177,37 @@ namespace OpenZWave * a secondary control, could ignore one or the other. */ enum LevelChangeDirection - { - LevelChangeDirection_Up, /**< When the change is started, increment. */ - LevelChangeDirection_Down, /**< When the change is started, decrement. */ - LevelChangeDirection_None /**< Do not increment or decrement. Used for multilevel switch with 2 switches. */ - }; + { + LevelChangeDirection_Up, /**< When the change is started, increment. */ + LevelChangeDirection_Down, /**< When the change is started, decrement. */ + LevelChangeDirection_None /**< Do not increment or decrement. Used for multilevel switch with 2 switches. */ + }; /** * Used for storing the parameters for a multilevel switch or color change start command. * Only a multilevel switch has the secondary parameters. */ struct LevelChangeParameters - { - LevelChangeParameters(): - m_type( LevelChange_Switch ), - m_primaryDirection(LevelChangeDirection_None), - m_secondaryDirection(LevelChangeDirection_None), - m_ignoreStartLevel(0), - m_primaryStartLevel(0), - m_durationSeconds(0), - m_secondaryStepSize(0), - m_colorTarget(""){} - - LevelChangeType m_type; - LevelChangeDirection m_primaryDirection; - LevelChangeDirection m_secondaryDirection; - uint8 m_ignoreStartLevel; - uint8 m_primaryStartLevel; - uint16 m_durationSeconds; - uint8 m_secondaryStepSize; - string m_colorTarget; - }; + { + LevelChangeParameters(): + m_type( LevelChange_Switch ), + m_primaryDirection(LevelChangeDirection_None), + m_secondaryDirection(LevelChangeDirection_None), + m_ignoreStartLevel(0), + m_primaryStartLevel(0), + m_durationSeconds(0), + m_secondaryStepSize(0), + m_colorTarget(""){} + + LevelChangeType m_type; + LevelChangeDirection m_primaryDirection; + LevelChangeDirection m_secondaryDirection; + uint8 m_ignoreStartLevel; + uint8 m_primaryStartLevel; + uint16 m_durationSeconds; + uint8 m_secondaryStepSize; + string m_colorTarget; + }; /** * Get the type of this notification. @@ -242,9 +242,9 @@ namespace OpenZWave * @return the instance ID */ uint8 GetInstance() const - { - return m_valueId.GetInstance(); - } + { + return m_valueId.GetInstance(); + } /** * Get the unique ValueID of any value involved in this notification. @@ -363,9 +363,9 @@ namespace OpenZWave ; LevelChangeParameters const& GetLevelChangeParameters () const - { - return m_levelChangeParameters; - } + { + return m_levelChangeParameters; + } private: Notification(NotificationType _type) : @@ -434,35 +434,35 @@ namespace OpenZWave m_byte = timeout; } void SetLevelChangeStartParameters( LevelChangeType type, - LevelChangeDirection primaryDirection, - LevelChangeDirection secondaryDirection, - uint8 ignoreStartLevel, - uint8 primaryStartLevel, - uint16 durationSeconds, - uint8 secondaryStepSize, - string colorTarget ) - { - assert(Type_LevelChangeStart == m_type); - m_levelChangeParameters.m_type = type; - m_levelChangeParameters.m_primaryDirection = primaryDirection; - m_levelChangeParameters.m_secondaryDirection = secondaryDirection; - m_levelChangeParameters.m_ignoreStartLevel = ignoreStartLevel; - m_levelChangeParameters.m_primaryStartLevel = primaryStartLevel; - m_levelChangeParameters.m_durationSeconds = durationSeconds; - m_levelChangeParameters.m_secondaryStepSize = secondaryStepSize; - m_levelChangeParameters.m_colorTarget = colorTarget; - } - void SetLevelChangeType ( LevelChangeType type ) - { - assert(Type_LevelChangeStart == m_type || Type_LevelChangeStop == m_type ); - m_levelChangeParameters.m_type = type; - } - - void SetColorTarget ( string colorTarget ) - { - assert(Type_LevelChangeStart == m_type || Type_LevelChangeStop == m_type ); - m_levelChangeParameters.m_colorTarget = colorTarget; - } + LevelChangeDirection primaryDirection, + LevelChangeDirection secondaryDirection, + uint8 ignoreStartLevel, + uint8 primaryStartLevel, + uint16 durationSeconds, + uint8 secondaryStepSize, + string colorTarget ) + { + assert(Type_LevelChangeStart == m_type); + m_levelChangeParameters.m_type = type; + m_levelChangeParameters.m_primaryDirection = primaryDirection; + m_levelChangeParameters.m_secondaryDirection = secondaryDirection; + m_levelChangeParameters.m_ignoreStartLevel = ignoreStartLevel; + m_levelChangeParameters.m_primaryStartLevel = primaryStartLevel; + m_levelChangeParameters.m_durationSeconds = durationSeconds; + m_levelChangeParameters.m_secondaryStepSize = secondaryStepSize; + m_levelChangeParameters.m_colorTarget = colorTarget; + } + void SetLevelChangeType ( LevelChangeType type ) + { + assert(Type_LevelChangeStart == m_type || Type_LevelChangeStop == m_type ); + m_levelChangeParameters.m_type = type; + } + + void SetColorTarget ( string colorTarget ) + { + assert(Type_LevelChangeStart == m_type || Type_LevelChangeStop == m_type ); + m_levelChangeParameters.m_colorTarget = colorTarget; + } NotificationType m_type; ValueID m_valueId; diff --git a/cpp/src/command_classes/Color.cpp b/cpp/src/command_classes/Color.cpp index 0cc1713e87..6c66949200 100644 --- a/cpp/src/command_classes/Color.cpp +++ b/cpp/src/command_classes/Color.cpp @@ -400,98 +400,98 @@ namespace OpenZWave * to the lights in a group. In this case, we want to receive the signals so that we can act on * them. */ - if (ColorCmd_Set == (ColorCmd) _data[0]) - { - // Get our current color capabilities -- we'll be updating if we see a new color channel set. - uint16_t f_capabilities = m_dom.GetFlagShort(STATE_FLAG_COLOR_CHANNELS); - uint16_t f_save_capabilities = f_capabilities; + if (ColorCmd_Set == (ColorCmd) _data[0]) + { + // Get our current color capabilities -- we'll be updating if we see a new color channel set. + uint16_t f_capabilities = m_dom.GetFlagShort(STATE_FLAG_COLOR_CHANNELS); + uint16_t f_save_capabilities = f_capabilities; - uint8 nComponents = _data[1] & 0x1F; - for ( uint8_t idx = 0; idx < nComponents; idx++ ) - { - uint8 coloridx = _data[ 2 + idx*2 ]; - m_colorvalues[coloridx] = _data[ 3 + idx*2 ]; - Log::Write(LogLevel_Detail, GetNodeId(), "Setting index %u to value %u", coloridx, m_colorvalues[ coloridx ]); + uint8 nComponents = _data[1] & 0x1F; + for ( uint8_t idx = 0; idx < nComponents; idx++ ) + { + uint8 coloridx = _data[ 2 + idx*2 ]; + m_colorvalues[coloridx] = _data[ 3 + idx*2 ]; + Log::Write(LogLevel_Detail, GetNodeId(), "Setting index %u to value %u", coloridx, m_colorvalues[ coloridx ]); - // If we're being asked to set a color, be sure it's set in our capabilities (i.e., force it)! - // Each bit stands for one of the color indices. - f_capabilities |= (1 << coloridx); - } - if ( f_capabilities != f_save_capabilities ) // then we updated it along the way . . . - { - m_dom.SetFlagShort(STATE_FLAG_COLOR_CHANNELS, f_capabilities); - } - string colorStr = decodeColor(m_colorvalues); - Log::Write(LogLevel_Info, GetNodeId(), "Received COLOR_SET from Device: %s for instance %d", colorStr.c_str(), _instance); + // If we're being asked to set a color, be sure it's set in our capabilities (i.e., force it)! + // Each bit stands for one of the color indices. + f_capabilities |= (1 << coloridx); + } + if ( f_capabilities != f_save_capabilities ) // then we updated it along the way . . . + { + m_dom.SetFlagShort(STATE_FLAG_COLOR_CHANNELS, f_capabilities); + } + string colorStr = decodeColor(m_colorvalues); + Log::Write(LogLevel_Info, GetNodeId(), "Received COLOR_SET from Device: %s for instance %d", colorStr.c_str(), _instance); - Internal::VC::ValueString* color = static_cast(GetValue(_instance, ValueID_Index_Color::Color)); + Internal::VC::ValueString* color = static_cast(GetValue(_instance, ValueID_Index_Color::Color)); - if ( ! color ) - { - if (Node* node = GetNodeUnsafe()) - { - // Create it read-only ... - node->CreateValueString(ValueID::ValueGenre_User, GetCommandClassId(), _instance, - ValueID_Index_Color::Color, "Color", "", true, false, "#000000", 0); - color = static_cast(GetValue(_instance, ValueID_Index_Color::Color)); - } - else - { - Log::Write(LogLevel_Error, GetNodeId(), "Couldn't get node (!?)."); - } - } + if ( ! color ) + { + if (Node* node = GetNodeUnsafe()) + { + // Create it read-only ... + node->CreateValueString(ValueID::ValueGenre_User, GetCommandClassId(), _instance, + ValueID_Index_Color::Color, "Color", "", true, false, "#000000", 0); + color = static_cast(GetValue(_instance, ValueID_Index_Color::Color)); + } + else + { + Log::Write(LogLevel_Error, GetNodeId(), "Couldn't get node (!?)."); + } + } - color->OnValueRefreshed(colorStr); - color->Release(); + color->OnValueRefreshed(colorStr); + color->Release(); - /* if we got a updated Color Index Value - Update our ValueID */ - if (Internal::VC::ValueList* coloridx = static_cast(GetValue(_instance, ValueID_Index_Color::Index))) - { - if ((m_dom.GetFlagShort(STATE_FLAG_COLOR_CHANNELS)) & (1 << (COLORIDX_INDEXCOLOR))) - { - coloridx->OnValueRefreshed(m_colorvalues[COLORIDX_INDEXCOLOR]); - } - else - { - coloridx->OnValueRefreshed(decodeColorList(colorStr)); - } - coloridx->Release(); - } + /* if we got a updated Color Index Value - Update our ValueID */ + if (Internal::VC::ValueList* coloridx = static_cast(GetValue(_instance, ValueID_Index_Color::Index))) + { + if ((m_dom.GetFlagShort(STATE_FLAG_COLOR_CHANNELS)) & (1 << (COLORIDX_INDEXCOLOR))) + { + coloridx->OnValueRefreshed(m_colorvalues[COLORIDX_INDEXCOLOR]); + } + else + { + coloridx->OnValueRefreshed(decodeColorList(colorStr)); + } + coloridx->Release(); + } - return true; - } - if (ColorCmd_StartCapabilityLevelChange == (ColorCmd) _data[0]) - { - uint8 ignoreStartLevel = ( _data[1] >> 5 ) & 0x01; - uint8 directionRaw = ( _data[1] >> 6 ) & 0x01; - uint8 colorComponentId = _data[2]; - uint8 startLevel = _data[3]; - uint16 durationSeconds = 4; // TODO: should do something else here. Overall, this seems like a good duration, but ... - string colorStr = decodeColorIndexAndAddColor(colorComponentId); + return true; + } + if (ColorCmd_StartCapabilityLevelChange == (ColorCmd) _data[0]) + { + uint8 ignoreStartLevel = ( _data[1] >> 5 ) & 0x01; + uint8 directionRaw = ( _data[1] >> 6 ) & 0x01; + uint8 colorComponentId = _data[2]; + uint8 startLevel = _data[3]; + uint16 durationSeconds = 4; // TODO: should do something else here. Overall, this seems like a good duration, but ... + string colorStr = decodeColorIndexAndAddColor(colorComponentId); - Notification::LevelChangeDirection direction = ( directionRaw == 0) ? Notification::LevelChangeDirection_Up : Notification::LevelChangeDirection_Down; + Notification::LevelChangeDirection direction = ( directionRaw == 0) ? Notification::LevelChangeDirection_Up : Notification::LevelChangeDirection_Down; - Log::Write(LogLevel_Info, GetNodeId(), "Received ColorCmd_StartStateChange from node %d - instance %d. Color index %d - %s. Sending event notification.", GetNodeId(), _instance, colorComponentId, colorStr.c_str()); - Notification* notification = new Notification(Notification::Type_LevelChangeStart); - notification->SetHomeNodeIdAndInstance(GetHomeId(), GetNodeId(), _instance); - notification->SetLevelChangeStartParameters( Notification::LevelChange_Color, direction, Notification::LevelChangeDirection_None, ignoreStartLevel, startLevel, durationSeconds, 0, colorStr ); - GetDriver()->QueueNotification(notification); + Log::Write(LogLevel_Info, GetNodeId(), "Received ColorCmd_StartStateChange from node %d - instance %d. Color index %d - %s. Sending event notification.", GetNodeId(), _instance, colorComponentId, colorStr.c_str()); + Notification* notification = new Notification(Notification::Type_LevelChangeStart); + notification->SetHomeNodeIdAndInstance(GetHomeId(), GetNodeId(), _instance); + notification->SetLevelChangeStartParameters( Notification::LevelChange_Color, direction, Notification::LevelChangeDirection_None, ignoreStartLevel, startLevel, durationSeconds, 0, colorStr ); + GetDriver()->QueueNotification(notification); - return true; - } - if (ColorCmd_StopStateChange == (ColorCmd) _data[0]) - { - uint colorComponentId = _data[1]; - string colorStr = decodeColorIndexAndAddColor(colorComponentId); - Log::Write(LogLevel_Info, GetNodeId(), "Received ColorCmd_StopStateChange from node %d - instance %d. Color index %d - %s. Sending event notification.", GetNodeId(), _instance, colorComponentId, colorStr.c_str()); - Notification* notification = new Notification(Notification::Type_LevelChangeStop); - notification->SetHomeNodeIdAndInstance(GetHomeId(), GetNodeId(), _instance); - notification->SetLevelChangeType( Notification::LevelChange_Color ); - notification->SetColorTarget( colorStr ); - GetDriver()->QueueNotification(notification); + return true; + } + if (ColorCmd_StopStateChange == (ColorCmd) _data[0]) + { + uint colorComponentId = _data[1]; + string colorStr = decodeColorIndexAndAddColor(colorComponentId); + Log::Write(LogLevel_Info, GetNodeId(), "Received ColorCmd_StopStateChange from node %d - instance %d. Color index %d - %s. Sending event notification.", GetNodeId(), _instance, colorComponentId, colorStr.c_str()); + Notification* notification = new Notification(Notification::Type_LevelChangeStop); + notification->SetHomeNodeIdAndInstance(GetHomeId(), GetNodeId(), _instance); + notification->SetLevelChangeType( Notification::LevelChange_Color ); + notification->SetColorTarget( colorStr ); + GetDriver()->QueueNotification(notification); - return true; - } + return true; + } return false; } @@ -740,21 +740,21 @@ namespace OpenZWave //----------------------------------------------------------------------------- string Color::decodeColorIndexAndAddColor ( uint8 const colorIndex ) - { - // Get our current color capabilities -- we'll be updating if we see a new color channel set. - uint16_t f_capabilities = m_dom.GetFlagShort(STATE_FLAG_COLOR_CHANNELS); - uint8 colorvalues[9]; - for (uint8 i = 0; i < 9; i++) - colorvalues[i] = 0; + { + // Get our current color capabilities -- we'll be updating if we see a new color channel set. + uint16_t f_capabilities = m_dom.GetFlagShort(STATE_FLAG_COLOR_CHANNELS); + uint8 colorvalues[9]; + for (uint8 i = 0; i < 9; i++) + colorvalues[i] = 0; - colorvalues[colorIndex] = 0xFF; - // If we're being asked to set a color, be sure it's set in our capabilities (i.e., force it)! - // Each bit stands for one of the color indices. - if ( ! ( f_capabilities & (1 << colorIndex)) ) { // ... then it's a new color index - m_dom.SetFlagShort(STATE_FLAG_COLOR_CHANNELS, f_capabilities | (1 << colorIndex)); - } - return decodeColor(colorvalues); - } + colorvalues[colorIndex] = 0xFF; + // If we're being asked to set a color, be sure it's set in our capabilities (i.e., force it)! + // Each bit stands for one of the color indices. + if ( ! ( f_capabilities & (1 << colorIndex)) ) { // ... then it's a new color index + m_dom.SetFlagShort(STATE_FLAG_COLOR_CHANNELS, f_capabilities | (1 << colorIndex)); + } + return decodeColor(colorvalues); + } //----------------------------------------------------------------------------- // diff --git a/cpp/src/command_classes/Configuration.cpp b/cpp/src/command_classes/Configuration.cpp index 791cb682e7..1f7a577b58 100644 --- a/cpp/src/command_classes/Configuration.cpp +++ b/cpp/src/command_classes/Configuration.cpp @@ -74,10 +74,10 @@ namespace OpenZWave paramValue |= (int32) _data[i + 3]; } - Log::Write(LogLevel_Info, GetNodeId(), "Configuration Set: Parameter %d - Size %d - Value %d", parameter, size, paramValue); + Log::Write(LogLevel_Info, GetNodeId(), "Configuration Set: Parameter %d - Size %d - Value %d", parameter, size, paramValue); // This had previously been forced to be GetValue(1, ...), ignoring the _instance. - if (Internal::VC::Value* value = GetValue(_instance, parameter)) + if (Internal::VC::Value* value = GetValue(_instance, parameter)) { switch (value->GetID().GetType()) { @@ -160,8 +160,9 @@ namespace OpenZWave Log::Write(LogLevel_Info, GetNodeId(), "Received Configuration report: Parameter=%d, Value=%d", parameter, paramValue); return true; } - else { - Log::Write(LogLevel_Info, GetNodeId(), "Configuration Set: Unhandled command %d", _data[0]); + else + { + Log::Write(LogLevel_Info, GetNodeId(), "Configuration Set: Unhandled command %d", _data[0]); } return false; diff --git a/cpp/src/command_classes/MultiChannelAssociation.cpp b/cpp/src/command_classes/MultiChannelAssociation.cpp index 124619a4f4..f7ac3bae21 100644 --- a/cpp/src/command_classes/MultiChannelAssociation.cpp +++ b/cpp/src/command_classes/MultiChannelAssociation.cpp @@ -59,8 +59,8 @@ namespace OpenZWave CommandClass(_homeId, _nodeId), m_queryAll(false), m_numGroups(0) { m_com.EnableFlag(COMPAT_FLAG_MCA_FORCEINSTANCES, true); - m_com.EnableFlag(COMPAT_FLAG_MULTICHANNEL_SENDER_ONLY, false); - SetStaticRequest(StaticRequest_Values); + m_com.EnableFlag(COMPAT_FLAG_MULTICHANNEL_SENDER_ONLY, false); + SetStaticRequest(StaticRequest_Values); } //----------------------------------------------------------------------------- diff --git a/cpp/src/command_classes/MultiInstance.cpp b/cpp/src/command_classes/MultiInstance.cpp index 33ee8d5a62..b0353f5003 100644 --- a/cpp/src/command_classes/MultiInstance.cpp +++ b/cpp/src/command_classes/MultiInstance.cpp @@ -79,8 +79,8 @@ namespace OpenZWave m_com.EnableFlag(COMPAT_FLAG_MI_IGNMCCAPREPORTS, false); m_com.EnableFlag(COMPAT_FLAG_MI_ENDPOINTHINT, 0); m_com.EnableFlag(COMPAT_FLAG_MI_REMOVECC, false); - m_com.EnableFlag(COMPAT_FLAG_MULTICHANNEL_SENDER_ONLY, false); - } + m_com.EnableFlag(COMPAT_FLAG_MULTICHANNEL_SENDER_ONLY, false); + } //----------------------------------------------------------------------------- // @@ -610,52 +610,52 @@ namespace OpenZWave */ if (endPoint == 0) { - /* - * If this flag is set, then we have a device that we can make an end-point association - * with for *our* (simulated) end-point, and it will return commands to that end point. - * Example here is the RGBGenie wall panel, which can associate color commands to groups. - * If we want to pick those up (segregated by group), we need to catch the group (endpoint) - * indicated in the return. COMPAT_FLAG_MULTICHANNEL_SENDER_ONLY indicates this case. - */ - if ( m_com.GetFlagBool(Internal::COMPAT_FLAG_MULTICHANNEL_SENDER_ONLY) == true ) - { - endPoint = _data[2] & 0x7f; - Log::Write(LogLevel_Info, GetNodeId(), "MultiChannelEncap with (s)endpoint set to %d.", endPoint ); - - uint8 testInstance = pCommandClass->GetInstance(endPoint); - - if ( testInstance != endPoint ) - { - Log::Write(LogLevel_Info, GetNodeId(), "MultiChannelEncap fixing instance %d for endpoint %d.", testInstance, endPoint ); - - pCommandClass->SetInstance( endPoint ); - pCommandClass->SetEndPoint( endPoint, endPoint ); - // Should probably also set an instance label here (?) -- pCommandClass-SetInstanceLabel( endPoint, ??) - - /* - * TODO: solve incorrect value label for first discovered instance if IncludeInstanceLabel set to true - * The way we're doing this, which is to add the instances at the point we receive a message, - * introduces a defect. See Manager::GetValueLabel(). It checks the IncludeInstanceLabel - * configuration option, and if set, then it also checks to see if the CC has multiple instances. - * In our case, for the very first added instance, we will not have multiple instances, - * so the label will *not* include the Instance # prefix. It's not immediately clear to me - * how to solve this in a clean way, as for the device I'm adding (RGBGenie), you don't necessarily - * know what endpoints you're going to get back until you get a message on them. The messy way - * (brute force) to solve this would be to add an "isMultiInstance" flag in the CommandClass, and - * set that to true here when we detect this, and then check it in Manager::GetValueLabel(). But - * for that flag to be meaningful everywhere (i.e., to have clean semantics, as opposed to just - * brute-forcing this one case) would require a more thorough implementation. - * The temporary workaround is just to always handle both cases in your client (instance label in value - * label, or none). - */ - } - } - else - { - Log::Write(LogLevel_Info, GetNodeId(), "MultiChannelEncap with endpoint set to 0 - Send to Root Device"); - pCommandClass->HandleMsg(&_data[4], _length - 4); - return; - } + /* + * If this flag is set, then we have a device that we can make an end-point association + * with for *our* (simulated) end-point, and it will return commands to that end point. + * Example here is the RGBGenie wall panel, which can associate color commands to groups. + * If we want to pick those up (segregated by group), we need to catch the group (endpoint) + * indicated in the return. COMPAT_FLAG_MULTICHANNEL_SENDER_ONLY indicates this case. + */ + if ( m_com.GetFlagBool(Internal::COMPAT_FLAG_MULTICHANNEL_SENDER_ONLY) == true ) + { + endPoint = _data[2] & 0x7f; + Log::Write(LogLevel_Info, GetNodeId(), "MultiChannelEncap with (s)endpoint set to %d.", endPoint ); + + uint8 testInstance = pCommandClass->GetInstance(endPoint); + + if ( testInstance != endPoint ) + { + Log::Write(LogLevel_Info, GetNodeId(), "MultiChannelEncap fixing instance %d for endpoint %d.", testInstance, endPoint ); + + pCommandClass->SetInstance( endPoint ); + pCommandClass->SetEndPoint( endPoint, endPoint ); + // Should probably also set an instance label here (?) -- pCommandClass-SetInstanceLabel( endPoint, ??) + + /* + * TODO: solve incorrect value label for first discovered instance if IncludeInstanceLabel set to true + * The way we're doing this, which is to add the instances at the point we receive a message, + * introduces a defect. See Manager::GetValueLabel(). It checks the IncludeInstanceLabel + * configuration option, and if set, then it also checks to see if the CC has multiple instances. + * In our case, for the very first added instance, we will not have multiple instances, + * so the label will *not* include the Instance # prefix. It's not immediately clear to me + * how to solve this in a clean way, as for the device I'm adding (RGBGenie), you don't necessarily + * know what endpoints you're going to get back until you get a message on them. The messy way + * (brute force) to solve this would be to add an "isMultiInstance" flag in the CommandClass, and + * set that to true here when we detect this, and then check it in Manager::GetValueLabel(). But + * for that flag to be meaningful everywhere (i.e., to have clean semantics, as opposed to just + * brute-forcing this one case) would require a more thorough implementation. + * The temporary workaround is just to always handle both cases in your client (instance label in value + * label, or none). + */ + } + } + else + { + Log::Write(LogLevel_Info, GetNodeId(), "MultiChannelEncap with endpoint set to 0 - Send to Root Device"); + pCommandClass->HandleMsg(&_data[4], _length - 4); + return; + } } uint8 instance = pCommandClass->GetInstance(endPoint); diff --git a/cpp/src/command_classes/SwitchMultilevel.cpp b/cpp/src/command_classes/SwitchMultilevel.cpp index dd495317b4..e3f6078fce 100644 --- a/cpp/src/command_classes/SwitchMultilevel.cpp +++ b/cpp/src/command_classes/SwitchMultilevel.cpp @@ -224,54 +224,54 @@ namespace OpenZWave return true; } - if ( SwitchMultilevelCmd_StartLevelChange == (SwitchMultilevelCmd)_data[0]) - { - uint8 secondaryDirectionRaw = ( _data[1] >> 3 ) & 0x03; - uint8 ignoreStartLevel = ( _data[1] >> 5 ) & 0x01; - uint8 primaryDirectionRaw = ( _data[1] >> 6 ) & 0x03; - uint8 primaryStartLevel = _data[2]; - uint8 codedDuration = _data[3]; - uint8 secondaryStepSize = ( _length > 4 ) ? _data[4] : 0; // > Version 2 only - uint16 durationSeconds = codedDuration; - - Notification::LevelChangeDirection primaryDirection = ( primaryDirectionRaw == 0) ? Notification::LevelChangeDirection_Up - : ( ( primaryDirectionRaw == 1) ? Notification::LevelChangeDirection_Down : Notification::LevelChangeDirection_None); - Notification::LevelChangeDirection secondaryDirection = ( secondaryDirectionRaw == 0) ? Notification::LevelChangeDirection_Up - : ( ( secondaryDirectionRaw == 1) ? Notification::LevelChangeDirection_Down : Notification::LevelChangeDirection_None); - - if ( codedDuration > 0x7F ) { - if ( codedDuration == 0xFF ) { - // Uh, it's supposed to be factory duration. Call it 10 seconds for grins. - // TODO: figure something else out, here? - durationSeconds = 10; - } - else { - // It's in minutes, starting from 0x80 == 1 minute. - durationSeconds = ( codedDuration - 0x7F ) * 60; - } - } - - Log::Write(LogLevel_Info, GetNodeId(), "Received MultilevelSwitchStart from node %d. Sending event notification.", GetNodeId()); - Notification* notification = new Notification(Notification::Type_LevelChangeStart); - notification->SetHomeNodeIdAndInstance(GetHomeId(), GetNodeId(), _instance); - notification->SetLevelChangeStartParameters( Notification::LevelChange_Switch, primaryDirection, secondaryDirection, ignoreStartLevel, primaryStartLevel, durationSeconds, secondaryStepSize, "" ); - GetDriver()->QueueNotification(notification); - - return true; - } - - if ( SwitchMultilevelCmd_StopLevelChange == (SwitchMultilevelCmd)_data[0]) - { - Log::Write(LogLevel_Info, GetNodeId(), "Received MultilevelSwitchStop from node %d. Sending event notification.", GetNodeId()); - Notification* notification = new Notification(Notification::Type_LevelChangeStop); - notification->SetHomeNodeIdAndInstance(GetHomeId(), GetNodeId(), _instance); - notification->SetLevelChangeType( Notification::LevelChange_Switch ); - GetDriver()->QueueNotification(notification); - - return true; - } - - Log::Write(LogLevel_Warning, GetNodeId(), "Recieved a Unhandled SwitchMultiLevel Command: %d", _data[0]); + if ( SwitchMultilevelCmd_StartLevelChange == (SwitchMultilevelCmd)_data[0]) + { + uint8 secondaryDirectionRaw = ( _data[1] >> 3 ) & 0x03; + uint8 ignoreStartLevel = ( _data[1] >> 5 ) & 0x01; + uint8 primaryDirectionRaw = ( _data[1] >> 6 ) & 0x03; + uint8 primaryStartLevel = _data[2]; + uint8 codedDuration = _data[3]; + uint8 secondaryStepSize = ( _length > 4 ) ? _data[4] : 0; // > Version 2 only + uint16 durationSeconds = codedDuration; + + Notification::LevelChangeDirection primaryDirection = ( primaryDirectionRaw == 0) ? Notification::LevelChangeDirection_Up + : ( ( primaryDirectionRaw == 1) ? Notification::LevelChangeDirection_Down : Notification::LevelChangeDirection_None); + Notification::LevelChangeDirection secondaryDirection = ( secondaryDirectionRaw == 0) ? Notification::LevelChangeDirection_Up + : ( ( secondaryDirectionRaw == 1) ? Notification::LevelChangeDirection_Down : Notification::LevelChangeDirection_None); + + if ( codedDuration > 0x7F ) { + if ( codedDuration == 0xFF ) { + // Uh, it's supposed to be factory duration. Call it 10 seconds for grins. + // TODO: figure something else out, here? + durationSeconds = 10; + } + else { + // It's in minutes, starting from 0x80 == 1 minute. + durationSeconds = ( codedDuration - 0x7F ) * 60; + } + } + + Log::Write(LogLevel_Info, GetNodeId(), "Received MultilevelSwitchStart from node %d. Sending event notification.", GetNodeId()); + Notification* notification = new Notification(Notification::Type_LevelChangeStart); + notification->SetHomeNodeIdAndInstance(GetHomeId(), GetNodeId(), _instance); + notification->SetLevelChangeStartParameters( Notification::LevelChange_Switch, primaryDirection, secondaryDirection, ignoreStartLevel, primaryStartLevel, durationSeconds, secondaryStepSize, "" ); + GetDriver()->QueueNotification(notification); + + return true; + } + + if ( SwitchMultilevelCmd_StopLevelChange == (SwitchMultilevelCmd)_data[0]) + { + Log::Write(LogLevel_Info, GetNodeId(), "Received MultilevelSwitchStop from node %d. Sending event notification.", GetNodeId()); + Notification* notification = new Notification(Notification::Type_LevelChangeStop); + notification->SetHomeNodeIdAndInstance(GetHomeId(), GetNodeId(), _instance); + notification->SetLevelChangeType( Notification::LevelChange_Switch ); + GetDriver()->QueueNotification(notification); + + return true; + } + + Log::Write(LogLevel_Warning, GetNodeId(), "Recieved a Unhandled SwitchMultiLevel Command: %d", _data[0]); return false; } From 22efa3d35a786ebe22612a7eb866cce71dcdbe1c Mon Sep 17 00:00:00 2001 From: Greg Tatham Date: Sun, 10 Jan 2021 15:11:06 -0600 Subject: [PATCH 012/198] Fixing tabs vs spaces --- cpp/src/Group.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/src/Group.cpp b/cpp/src/Group.cpp index e2c0b7b6ef..08a39e5915 100644 --- a/cpp/src/Group.cpp +++ b/cpp/src/Group.cpp @@ -352,7 +352,7 @@ void Group::OnGroupChanged(vector const& _associations) uint8 i; for (i = 0; i < _associations.size(); ++i) { - m_associations[_associations[i]] = AssociationCommandVec(); + m_associations[_associations[i]] = AssociationCommandVec(); } if ((!notify) && (oldSize != m_associations.size())) @@ -409,7 +409,7 @@ void Group::OnGroupChanged(vector const& _associations) //----------------------------------------------------------------------------- uint32 Group::GetAssociations(uint8** o_associations) { - size_t numNodes = m_associations.size(); + size_t numNodes = m_associations.size(); if (!numNodes) { *o_associations = NULL; From 110fbb39a06d08e0abe132e2a87b796e3bbffa6b Mon Sep 17 00:00:00 2001 From: Greg Tatham Date: Sun, 10 Jan 2021 15:12:15 -0600 Subject: [PATCH 013/198] Fixing tabs vs spaces --- cpp/src/CompatOptionManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/src/CompatOptionManager.cpp b/cpp/src/CompatOptionManager.cpp index 2c9fa4790c..8e22417f6d 100644 --- a/cpp/src/CompatOptionManager.cpp +++ b/cpp/src/CompatOptionManager.cpp @@ -60,7 +60,7 @@ namespace OpenZWave { "EnableNotificationClear", COMPAT_FLAG_NOT_ENABLECLEAR, COMPAT_FLAG_TYPE_BOOL }, { "EnableV1AlarmTypes", COMPAT_FLAG_NOT_V1ALARMTYPES_ENABLED, COMPAT_FLAG_TYPE_BOOL }, { "NoRefreshAfterSet", COMPAT_FLAG_NO_REFRESH_AFTER_SET, COMPAT_FLAG_TYPE_BOOL_ARRAY }, - { "MultiChannelSenderOnly", COMPAT_FLAG_MULTICHANNEL_SENDER_ONLY, COMPAT_FLAG_TYPE_BOOL } // RGBGenie (Sunricher rebadge) supports MultiChannelAssociate, but not MultiChannel + { "MultiChannelSenderOnly", COMPAT_FLAG_MULTICHANNEL_SENDER_ONLY, COMPAT_FLAG_TYPE_BOOL } // RGBGenie (Sunricher rebadge) supports MultiChannelAssociate, but not MultiChannel }; uint16_t availableCompatFlagsCount = sizeof(availableCompatFlags) / sizeof(availableCompatFlags[0]); From b1c0b76b4d6436aa9929bff534bcf0269d8bc623 Mon Sep 17 00:00:00 2001 From: Greg Tatham Date: Sun, 10 Jan 2021 15:28:02 -0600 Subject: [PATCH 014/198] Trying to roll back the sequence # change --- config/manufacturer_specific.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index fffc695066..c91d564023 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -1818,9 +1818,7 @@ -<<<<<<< HEAD -======= >>>>>>> upstream/master From 4c4a3fc627dd9b0884053fa53ca1f96857f65f77 Mon Sep 17 00:00:00 2001 From: Greg Tatham Date: Sun, 10 Jan 2021 15:30:42 -0600 Subject: [PATCH 015/198] Trying to roll back the sequence # change --- config/manufacturer_specific.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index c91d564023..d40727b888 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -1821,7 +1821,6 @@ ->>>>>>> upstream/master From a946c409d507fd94aa167c097f8ff1b94a477cc5 Mon Sep 17 00:00:00 2001 From: Greg Tatham Date: Sun, 10 Jan 2021 18:16:05 -0600 Subject: [PATCH 016/198] Bump up the version # to eliminate error --- config/manufacturer_specific.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index d40727b888..bce5071da6 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -1,5 +1,5 @@ - + From c9d1876befe1e99eb58feb795da853799a6ff5fb Mon Sep 17 00:00:00 2001 From: Ryan Date: Mon, 11 Jan 2021 08:57:55 -0500 Subject: [PATCH 017/198] Update manufacturer_specific.xml Add Minoston MS11Z (NEI) --- config/manufacturer_specific.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index 42430b603f..6b7152a4b6 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -1309,6 +1309,9 @@ + + + From cc4a9acf24738129487c1639d9e4e2a2d0a967b2 Mon Sep 17 00:00:00 2001 From: Ryan Date: Mon, 11 Jan 2021 09:00:02 -0500 Subject: [PATCH 018/198] Create ms11z.xml --- config/nei/ms11z.xml | 53 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 config/nei/ms11z.xml diff --git a/config/nei/ms11z.xml b/config/nei/ms11z.xml new file mode 100644 index 0000000000..56581c3122 --- /dev/null +++ b/config/nei/ms11z.xml @@ -0,0 +1,53 @@ + + + + + + + Locally button function + + + + + + LED indicator + + + + + + + Enable Auto Turn-Off Timer + + + + + Auto turn off timer + + + Restore state after power failure + + + + + + + + + + + + + + + + + + + + + + + + + From 86291c4722ddb2bead1feb179c567893de15d9db Mon Sep 17 00:00:00 2001 From: Ryan Date: Mon, 11 Jan 2021 09:46:50 -0500 Subject: [PATCH 019/198] Update ms11z.xml --- config/nei/ms11z.xml | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/config/nei/ms11z.xml b/config/nei/ms11z.xml index 56581c3122..433e95c401 100644 --- a/config/nei/ms11z.xml +++ b/config/nei/ms11z.xml @@ -3,28 +3,28 @@ - + Locally button function - - - + + + - + LED indicator - - - - + + + + - + Enable Auto Turn-Off Timer - - + + - + Auto turn off timer - + Restore state after power failure @@ -45,9 +45,3 @@ - - - - - - From b51de27170069658e7e7253388b8b3a1ed0c604e Mon Sep 17 00:00:00 2001 From: Ryan Date: Mon, 11 Jan 2021 10:14:30 -0500 Subject: [PATCH 020/198] Update ms11z.xml Closed the Product element and added MetaData. --- config/nei/ms11z.xml | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/config/nei/ms11z.xml b/config/nei/ms11z.xml index 433e95c401..82be24f44d 100644 --- a/config/nei/ms11z.xml +++ b/config/nei/ms11z.xml @@ -1,6 +1,22 @@ + + + MS11Z + Minoston Smart Dimmer Switch + https://products.z-wavealliance.org/products/3610?selectedFrequencyId=2 + https://minoston.com/product/z-wave-plus-smart-dimmer-switch-%EF%BC%88ms11z%EF%BC%89/ + Add the MS13Z from the existing Z-Wave home control network with your primary controller. + Refer to your primary controller instructions to process the inclusion / exclusion setup procedure. + When prompted by your primary controller, click the Up or Down button three times in one second. +Include MS13Z to/from a Z-Wave Gateway with supporting Security.The MS13Z can support the Primary Controller that implemented the security S2. + Remove the MS13Z from the existing Z-Wave home control network with your primary controller. + + Refer to your primary controller instructions to process the inclusion / exclusion setup procedure. + When prompted by your primary controller, click the Up or Down button three times in one second. + + @@ -44,4 +60,5 @@ - + + From 5616b02c1bec53c433a2d8a3f4eeb39e52248f08 Mon Sep 17 00:00:00 2001 From: Ryan Date: Mon, 11 Jan 2021 11:21:09 -0500 Subject: [PATCH 021/198] Update ms11z.xml --- config/nei/ms11z.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/config/nei/ms11z.xml b/config/nei/ms11z.xml index 82be24f44d..b165c8053d 100644 --- a/config/nei/ms11z.xml +++ b/config/nei/ms11z.xml @@ -1,6 +1,5 @@ - - + MS11Z Minoston Smart Dimmer Switch From 56daff8c5f21a82b9cbf21c6b6ddfee6b1d751a7 Mon Sep 17 00:00:00 2001 From: Ryan Date: Mon, 11 Jan 2021 11:25:49 -0500 Subject: [PATCH 022/198] Update ms11z.xml --- config/nei/ms11z.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/config/nei/ms11z.xml b/config/nei/ms11z.xml index b165c8053d..2d40e0e897 100644 --- a/config/nei/ms11z.xml +++ b/config/nei/ms11z.xml @@ -1,5 +1,4 @@ - - + MS11Z Minoston Smart Dimmer Switch From 2bbeea3caf6101e4002bc887d6f852001c86af2d Mon Sep 17 00:00:00 2001 From: Ryan Date: Mon, 11 Jan 2021 11:33:18 -0500 Subject: [PATCH 023/198] Update ms11z.xml --- config/nei/ms11z.xml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/config/nei/ms11z.xml b/config/nei/ms11z.xml index 2d40e0e897..3cdfa1de46 100644 --- a/config/nei/ms11z.xml +++ b/config/nei/ms11z.xml @@ -4,6 +4,7 @@ Minoston Smart Dimmer Switch https://products.z-wavealliance.org/products/3610?selectedFrequencyId=2 https://minoston.com/product/z-wave-plus-smart-dimmer-switch-%EF%BC%88ms11z%EF%BC%89/ + images/inovelli/lzw30.png Add the MS13Z from the existing Z-Wave home control network with your primary controller. Refer to your primary controller instructions to process the inclusion / exclusion setup procedure. @@ -13,8 +14,11 @@ Include MS13Z to/from a Z-Wave Gateway with supporting Security.The MS13Z can su Refer to your primary controller instructions to process the inclusion / exclusion setup procedure. When prompted by your primary controller, click the Up or Down button three times in one second. - - + + + Adding Device + + @@ -46,7 +50,7 @@ Include MS13Z to/from a Z-Wave Gateway with supporting Security.The MS13Z can su - + From 1e38a2fba5c35594b976173c1d0bc659980ff5c7 Mon Sep 17 00:00:00 2001 From: Ryan Date: Mon, 11 Jan 2021 11:37:19 -0500 Subject: [PATCH 024/198] Update ms11z.xml --- config/nei/ms11z.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/nei/ms11z.xml b/config/nei/ms11z.xml index 3cdfa1de46..0d2f95d5b1 100644 --- a/config/nei/ms11z.xml +++ b/config/nei/ms11z.xml @@ -16,7 +16,7 @@ Include MS13Z to/from a Z-Wave Gateway with supporting Security.The MS13Z can su When prompted by your primary controller, click the Up or Down button three times in one second. - Adding Device + Adding Device From f55ba1e3b248e40150ebb1ca97c3f92cbb6a7bb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A5l=20Kristensen?= Date: Mon, 11 Jan 2021 20:57:59 +0100 Subject: [PATCH 025/198] Adding support for HeatIt TF021 with FW > 1.92 --- config/manufacturer_specific.xml | 2 +- config/thermofloor/heatit021-v1.92.xml | 228 +++++++++++++++++++++++++ 2 files changed, 229 insertions(+), 1 deletion(-) create mode 100644 config/thermofloor/heatit021-v1.92.xml diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index 42430b603f..c6cb782ed2 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -1745,7 +1745,7 @@ - + diff --git a/config/thermofloor/heatit021-v1.92.xml b/config/thermofloor/heatit021-v1.92.xml new file mode 100644 index 0000000000..0d7527fca7 --- /dev/null +++ b/config/thermofloor/heatit021-v1.92.xml @@ -0,0 +1,228 @@ + + + + + http://www.openzwave.com/device-database/019B:0201:0003 + images/thermofloor/heatit021.png + https://products.z-wavealliance.org/products/1234/ + Heatit Z-Wave is an electronic thermostat for mounting in a standard wall box. The thermostat has a built-in Z-Wave chip that +can be connected to Home Automation systems like Fibaro, Sensio, Vera, Zipato and others. +The display will show the actual room temperature. By pressing the buttons, the display will show the set value. +Heatit Z-Wave is equipped with a single-pole switch. +The thermostat can handle loads up to 16A/3600Wat 230V. If the load is greater than this, the thermostat needs to be connected to a contactor. It can be used with two external temperature sensors. + +FUNCTIONS +• Room sensor +• Floor sensor +• Temperature limiter +• Power regulator +• Z-Wave chip 500 series +• Week program/setback temperature via gateway +• Setback mode +• 7-segment LCD-screen +• Can be used in connection with diff erent NTC-sensors +• Lock mode/child lock +• Backlight +• Calibration +• 8 scenarios +CONNECTION CLAMPS +Use 1,5 mm² or 2,5 mm² cables according to power need. +TECHNICAL DATA +Display LED-display 3x 7-Seg 13.2mm CA white +Rated voltage: 230V 50/60Hz +Max. load: 3600W +Max. current: 16A +Power consumption: 1,5W +Protection class: IP21 +Min/Max installation temp: -20°C to 40°C +Min/Max operating temp: 5°C to 40°C +Temperature range +5°C/+40°C +Displayed temperature -30°C …. 60°C +Floor min. limit 5°C (5°C…35°C) +Floor max. limit 35°C (5°C…35°C) +Air min. limit 5°C (5°C…40°C) +Air max. limit 35°C (5°C…40°C) +Regulator min. limit 0 (0…9) +Power regulator P02 (P00…P10) cycle of 30 minutes +Temperature setback Adjustable within temperature range. +Temperature setback activation Pilot wire/Z-Wave user interface +Hysteresis: 0,5°C +Sensor values: 0°C 29,1 kOhm +10°C 18,6 kOhm +15°C 15,1 kOhm +20°C 12,2 kOhm +25°C 10,0 kOhm +Switch: Single-pole +Standard Color White RAL 9003 – Black RAL 9011 +Approvals CE – FIMKO - Z-Wave Plus + + INCLUSION/EXCLUSION +To include the thermostat to your home automation gateway, press Center (confirm) for 10 seconds. +The display will show OFF. Press Right (down) 4 times till you see Con in the display. +Now start add device in your home automation software. Start inclusion mode by pressing Center (confirm) for approximately +2 seconds. The inclusion/exclusion icon will appear in the display. Confirmation will show Inc/EcL in the display. If inclusion +fails, Err (error) will appear. +Leave programming mode by choosing ESC in menu. Your thermostat is ready for use with default settings. + https://products.z-wavealliance.org/ProductManual/File?folder=&filename=MarketCertificationFiles/1182/Manual_Multireg%20Z-Wave_Ver2015-A.pdf + CEPT (Europe) + Heatit Z-Wave + TF021 + FACTORY RESET - RES +By pressing buttons Left and Center (up and confirm) for 20 seconds, the thermostat will perform a complete factory reset. +NB! Please use this procedure only when the primary controller is missing or otherwise inoperable. + INCLUSION/EXCLUSION +To include the thermostat to your home automation gateway, press Center (confirm) for 10 seconds. +The display will show OFF. Press Right (down) 4 times till you see Con in the display. +Now start add device in your home automation software. Start inclusion mode by pressing Center (confirm) for approximately +2 seconds. The inclusion/exclusion icon will appear in the display. Confirmation will show Inc/EcL in the display. If inclusion +fails, Err (error) will appear. +Leave programming mode by choosing ESC in menu. Your thermostat is ready for use with default settings. + If Er2 appears in the display, touch any button to restart the display. + + Initial release + + + + + + 37 + + + + + + + + + + + Floor Temperature Sensor Value + + + Air Temperature Sensor Value + + + Internal Air Temperature Sensor Value + + + + + + + + + + + + + + + + + + + + + + + + 0 + true + + + + + + Set operation mode + + + + + + + Set sensor mode + + + + + + + + + Floor sensor type (10K NTC Default) + + + + + + + + + 0-30 (0,3C - 3.0C) + + + 50-400 (5.0C - 40.0C) + + + 50-400 (5.0C - 40.0C) + + + 50-400 (5.0C - 40.0C) + + + 50-400 (5.0C - 40.0C) + + + Min power 0-9 in FP-mode (Floor sensor and power regulator mode) + + + 50-400 (5.0C - 40.0C) + + + 50-400 (5.0C - 40.0C) + + + Power 0-10 in P-mode (Power regulator mode) + + + Only if cooling is enabled. 50-400 (5.0C - 40.0C) + + + Temperature correction 0 - 4.0C (Default: 0). For positive value 40 = 4.0C. Negative value is not working (Adjust negativ calibration on thermostat) + + + Temperature correction 0 - 4.0C (Default: 0). For positive value 40 = 4.0C. Negative value is not working (Adjust negativ calibration on thermostat) + + + Temperature correction 0 - 4.0C (Default: 0). For positive value 40 = 4.0C. Negative value is not working (Adjust negativ calibration on thermostat) + + + 0 (Report disabled) 1-8640 Multiply with 10 seconds, 10 seconds - 24 hours. Default is 6 (60 seconds) + + + 1-100 (0.1C - 10C). Default is 10 (1.0C) + + + + + + + + + + + + + + + + true + + + + + + \ No newline at end of file From 75f41f06064e1bcdf1ee2472dde6cdea9299e17a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A5l=20Kristensen?= Date: Mon, 11 Jan 2021 20:59:08 +0100 Subject: [PATCH 026/198] Fixed COMMAND_CLASS_SWITCH_MULTILEVEL get --- config/thermofloor/heatit-zdim.xml | 358 +++++++++++++++-------------- 1 file changed, 186 insertions(+), 172 deletions(-) diff --git a/config/thermofloor/heatit-zdim.xml b/config/thermofloor/heatit-zdim.xml index 0857c06ab0..f1b08e7a19 100644 --- a/config/thermofloor/heatit-zdim.xml +++ b/config/thermofloor/heatit-zdim.xml @@ -1,173 +1,187 @@ - - - - http://www.openzwave.com/device-database/019b:2200:0003 - images/thermofloor/heatit_zdim.png - https://products.z-wavealliance.org/products/3261 - Zdim - https://products.z-wavealliance.org/ProductManual/File?folder=&filename=product_documents/3261/Manual_Heatit_Z-DIM_FW%201.0_Ver2019-A_ENG.pdf - Z-Wave rotary dimmer for different light sources. The LED dimmer dims at low load without the light flickering. Dimmer LED from 1-200VA, 230V halogen and incandescent bulbs, dimmable LED drivers and electronic transformers. Not affected by additional starting currents. Need L + N conductor connected. -The dimmer has end-turn function. This allows you to turn on the light and dimming with one dimmer, and then turn off the light with another dimmer. Convenient for example in stairs and corridors. -The dimmer fits into standard Elko, Schneider Exxact and Gira System 55 frame systems. - -FUNCTIONS -- Z-wave rotary dimmer -- Scene controller -- Dims: -- LED -- 230V halogen -- Incandescent lightbulbs -- Dimable LED-drivers -- Electronic transformators -- Starts at 1VA and dims up to 200VA LED -- Trailing edge -- Multiway switching option -- Electronic thermal cutoff with automatic reset -- Firmware updates (OTA) -- Power metering -- Supports encryption mode: S0, S2 Authenticated Class, S2 Unauthenticated Class - -CONNECTION -1. Disconnect the power. -2. Connect the live to the dimmer terminal marked "L". -3. Connect the neutral to the dimmer terminal marked "N". -4. Connect the neutral to the load terminal marked "N". -5. Connect the load terminal marked "L" to the dimmer terminal marked (see wiring - diagram). -6. Install the dimmer (A) in the wall box. Make sure that no wires are pinched. -7. Attach the cover (B) with the supplied nut (C). -8. Attach the button (D) with a simple push. -To use the multiway function (stairway function) a 230VAC rated momentary switch -can be connected as follows: -9. Connect the live to the toggle switch terminal marked "L". -10. Connect the toggle switch terminal marked to the dimmer terminal marked "S" - (see wiring diagram). - -TECHNICAL DATA -Protocol Z-Wave, 868,4MHz -Chip Z-Wave 500 chip -SDK 6.71.03 -Rated voltage 230V AC 50Hz -Power 1VA - 200VA -Input current 0,9A -Controls Push and rotary dimmer -Operating temperature -20°C - 40 °C -Connection Max. 2,5mm2 -Flush mounting depth 15mm -IP Code IP 20 -Size (LxWxH) 84 x 84 x 43mm - -APPROVALS -Z-Wave Plus -CE -EN 55015/A2: 2009, EN 61547:2009 -EN 61000-3-2/A2:2009 -EN 61000-3-3:2008 -EN 60669-2-1/A12:2010 -EN 60669-1:A2:2008 -EMC 2014/30/EU, RoHS 2011/65/EU -LVD 2014/35/EU - - INCLUSION/EXCLUSION -Press the main button on dimmer 6 times in a rapid sequence. Heatit Z-DIM is now included in your Z-Wave network. - CEPT (Europe) - Heatit Zdim - FACTORY RESET - RES -By pressing and holding the main button for 20 seconds, the dimmer will perform -a complete factory reset. The connected light source will blink once and go in the -"OFF" state if successfully reset. NB! Please use this procedure only when the primary -controller is missing or otherwise inoperable - INCLUSION/EXCLUSION -Press the main button on dimmer 6 times in a rapid sequence. Heatit Z-DIM is now included in your Z-Wave network. - - Initial release - - - - - - -The parameter defines the value of connected load. Refer to Paragraph 8 "Power Metering". -0 = Default -1 - 200 = 1-200 Watts connected load - -POWER METERING -The Heatit Z-Dim has functionality to calculate power consumption. To enable this -function, Parameter 1 "Connected load" should have a value greater than 0. This is an -estimated value, therefore power consumption accuracy depends on load estimation. -1. Estimate the load value (Watt) connected to the Heatit Z-Dim. -2. Use this value in Parameter 1. -Heatit Z-Dim can report accumulated (kWh) and instant (Watt), or only instant (Watt) -power consumption. The report time interval can be altered by Parameter 9. - - - - -The parameter defines the lowest dimming level of the dimmer. The value must be lower than parameter 3 "Maximum Dim Level" -1% - 98% Default is 20 (20%) - - - - -The parameter defines the highest dimming level of the dimmer. -The value must be higher than parameter 2 "Minimum Dim Level" -2% - 99% Default is 85 (85%) - - - - -The parameter defines how many steps it should take to dim from minimum -to maximum dim level (One round = 20 steps). -5 - 255 = 5-255 steps. Default is 15 (3/4 round) - - - - The parameter defines the double press functionality. - - - - - Enables scene controller - - - - - -The parameter defines the dimming level when restored from the OFF state -by push button. -0 = Restores last dim level (Default) -1 - 99 = 1% - 99% - - - - -The parameter defines how long it takes to dim to the desired level. -Note! Only Multilevel Switch Command Class is affected by this parameter. -0 = Disabled -1 - 127 = Duration in seconds (1 - 127 seconds. Default is 1) -128 - 255 = Duration in minutes (1 - 127 minutes) - - - - -The parameter defines the report interval for Power Metering. -30 - 32767 = Duration in seconds (30 - 32 767. Default is 60) - - - - -The parameter defines the initial dimming level after power loss. -1 - 99 = 1% - 99% Default is 50 (50%) - - - - - - - - - - - - + + + + http://www.openzwave.com/device-database/019b:2200:0003 + images/thermofloor/heatit_zdim.png + https://products.z-wavealliance.org/products/3261 + Zdim + https://products.z-wavealliance.org/ProductManual/File?folder=&filename=product_documents/3261/Manual_Heatit_Z-DIM_FW%201.0_Ver2019-A_ENG.pdf + Z-Wave rotary dimmer for different light sources. The LED dimmer dims at low load without the light flickering. Dimmer LED from 1-200VA, 230V halogen and incandescent bulbs, dimmable LED drivers and electronic transformers. Not affected by additional starting currents. Need L + N conductor connected. +The dimmer has end-turn function. This allows you to turn on the light and dimming with one dimmer, and then turn off the light with another dimmer. Convenient for example in stairs and corridors. +The dimmer fits into standard Elko, Schneider Exxact and Gira System 55 frame systems. + +FUNCTIONS +- Z-wave rotary dimmer +- Scene controller +- Dims: +- LED +- 230V halogen +- Incandescent lightbulbs +- Dimable LED-drivers +- Electronic transformators +- Starts at 1VA and dims up to 200VA LED +- Trailing edge +- Multiway switching option +- Electronic thermal cutoff with automatic reset +- Firmware updates (OTA) +- Power metering +- Supports encryption mode: S0, S2 Authenticated Class, S2 Unauthenticated Class + +CONNECTION +1. Disconnect the power. +2. Connect the live to the dimmer terminal marked "L". +3. Connect the neutral to the dimmer terminal marked "N". +4. Connect the neutral to the load terminal marked "N". +5. Connect the load terminal marked "L" to the dimmer terminal marked (see wiring + diagram). +6. Install the dimmer (A) in the wall box. Make sure that no wires are pinched. +7. Attach the cover (B) with the supplied nut (C). +8. Attach the button (D) with a simple push. +To use the multiway function (stairway function) a 230VAC rated momentary switch +can be connected as follows: +9. Connect the live to the toggle switch terminal marked "L". +10. Connect the toggle switch terminal marked to the dimmer terminal marked "S" + (see wiring diagram). + +TECHNICAL DATA +Protocol Z-Wave, 868,4MHz +Chip Z-Wave 500 chip +SDK 6.71.03 +Rated voltage 230V AC 50Hz +Power 1VA - 200VA +Input current 0,9A +Controls Push and rotary dimmer +Operating temperature -20°C - 40 °C +Connection Max. 2,5mm2 +Flush mounting depth 15mm +IP Code IP 20 +Size (LxWxH) 84 x 84 x 43mm + +APPROVALS +Z-Wave Plus +CE +EN 55015/A2: 2009, EN 61547:2009 +EN 61000-3-2/A2:2009 +EN 61000-3-3:2008 +EN 60669-2-1/A12:2010 +EN 60669-1:A2:2008 +EMC 2014/30/EU, RoHS 2011/65/EU +LVD 2014/35/EU + + INCLUSION/EXCLUSION +Press the main button on dimmer 6 times in a rapid sequence. Heatit Z-DIM is now included in your Z-Wave network. + CEPT (Europe) + Heatit Zdim + FACTORY RESET - RES +By pressing and holding the main button for 20 seconds, the dimmer will perform +a complete factory reset. The connected light source will blink once and go in the +"OFF" state if successfully reset. NB! Please use this procedure only when the primary +controller is missing or otherwise inoperable + INCLUSION/EXCLUSION +Press the main button on dimmer 6 times in a rapid sequence. Heatit Z-DIM is now included in your Z-Wave network. + + Initial release + Fixed COMMAND_CLASS_SWITCH_MULTILEVEL get commands + + + + + + +The parameter defines the value of connected load. Refer to Paragraph 8 "Power Metering". +0 = Default +1 - 200 = 1-200 Watts connected load + +POWER METERING +The Heatit Z-Dim has functionality to calculate power consumption. To enable this +function, Parameter 1 "Connected load" should have a value greater than 0. This is an +estimated value, therefore power consumption accuracy depends on load estimation. +1. Estimate the load value (Watt) connected to the Heatit Z-Dim. +2. Use this value in Parameter 1. +Heatit Z-Dim can report accumulated (kWh) and instant (Watt), or only instant (Watt) +power consumption. The report time interval can be altered by Parameter 9. + + + + +The parameter defines the lowest dimming level of the dimmer. The value must be lower than parameter 3 "Maximum Dim Level" +1% - 98% Default is 20 (20%) + + + + +The parameter defines the highest dimming level of the dimmer. +The value must be higher than parameter 2 "Minimum Dim Level" +2% - 99% Default is 85 (85%) + + + + +The parameter defines how many steps it should take to dim from minimum +to maximum dim level (One round = 20 steps). +5 - 255 = 5-255 steps. Default is 15 (3/4 round) + + + + The parameter defines the double press functionality. + + + + + Enables scene controller + + + + + +The parameter defines the dimming level when restored from the OFF state +by push button. +0 = Restores last dim level (Default) +1 - 99 = 1% - 99% + + + + +The parameter defines how long it takes to dim to the desired level. +Note! Only Multilevel Switch Command Class is affected by this parameter. +0 = Disabled +1 - 127 = Duration in seconds (1 - 127 seconds. Default is 1) +128 - 255 = Duration in minutes (1 - 127 minutes) + + + + +The parameter defines the report interval for Power Metering. +30 - 32767 = Duration in seconds (30 - 32 767. Default is 60) + + + + +The parameter defines the initial dimming level after power loss. +1 - 99 = 1% - 99% Default is 50 (50%) + + + + + + + + false + + + + + + + + + + + + + + true + + + \ No newline at end of file From 370bc03c6e849883a0576e1f0b6c324e969c745f Mon Sep 17 00:00:00 2001 From: nechry Date: Mon, 11 Jan 2021 21:05:54 +0100 Subject: [PATCH 027/198] bump --- config/manufacturer_specific.xml | 2 +- cpp/build/testconfigversions.cfg | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index 6b7152a4b6..5ee18088c2 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -1,5 +1,5 @@ - + diff --git a/cpp/build/testconfigversions.cfg b/cpp/build/testconfigversions.cfg index 3ec263c8f8..9089711e7c 100644 --- a/cpp/build/testconfigversions.cfg +++ b/cpp/build/testconfigversions.cfg @@ -1928,8 +1928,8 @@ 'md5' => '4d34aeaaea917c229bedbb737e4de1550b2d7db5f9e61566a1c0a39966b6442d381d01f93714e12aae1404797d36854274cc4063dd7424b00d27da238b17a36a' }, 'config/manufacturer_specific.xml' => { - 'Revision' => 151, - 'md5' => 'bdd5195196392644982c079a81321bf2d4fb5d55d43abede846cab193d8e00208addc74bf851bc97c937593d3bc98808cfa7e97786fec984e2225b78354f4019' + 'Revision' => 152, + 'md5' => '7587b9d94a2ee88564d9c56268f5bac0735a4e2b836ca19eb4778f57a29d5a342085995134eeaaa1307c4c2bc5ce506693e9140f7f23097a1aceb6046a94cb4d' }, 'config/mcohome/a8-9.xml' => { 'Revision' => 1, @@ -2039,6 +2039,10 @@ 'Revision' => 1, 'md5' => '10edb9b98013bac7754fd68151bef8b684dff2ad17d14b71cd6831f386a1e98aef64ff83138cdd28bf6bd1ab6526ca40b87e310beed25e9ed4a857b21e689b3f' }, + 'config/nei/ms11z.xml' => { + 'Revision' => 1, + 'md5' => '798d15de5a67cd238320459d17b73b168fdc269de623ccaf21d84c84d353fdb15efb693c10bf43075e555b7011344200e8111352250bc7bf688f4298d981e8b2' + }, 'config/nexia/db100z.xml' => { 'Revision' => 2, 'md5' => 'a85e3b5dd39faff1bd76dc1f73f3b3527eacea0e1e1c70aa6d6e879533219b9e8034fc872b2553a12c7144152781389f3d055927a62565814695db853b87bf8e' From 3c33ecdb21e7191f3f1840f282f6618d1139a208 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Auger?= Date: Mon, 11 Jan 2021 21:10:09 +0100 Subject: [PATCH 028/198] Update heatit021-v1.92.xml --- config/thermofloor/heatit021-v1.92.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config/thermofloor/heatit021-v1.92.xml b/config/thermofloor/heatit021-v1.92.xml index 0d7527fca7..ca534f6610 100644 --- a/config/thermofloor/heatit021-v1.92.xml +++ b/config/thermofloor/heatit021-v1.92.xml @@ -109,9 +109,9 @@ Leave programming mode by choosing ESC in menu. Your thermostat is ready for use - + - + @@ -225,4 +225,4 @@ Leave programming mode by choosing ESC in menu. Your thermostat is ready for use - \ No newline at end of file + From ec27842015b73523d6992de851fc0de15e9dd0fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A5l=20Kristensen?= Date: Mon, 11 Jan 2021 21:21:53 +0100 Subject: [PATCH 029/198] command class 49 and 64 bugfix --- config/thermofloor/heatit021-v1.92.xml | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/config/thermofloor/heatit021-v1.92.xml b/config/thermofloor/heatit021-v1.92.xml index ca534f6610..60eedd23bb 100644 --- a/config/thermofloor/heatit021-v1.92.xml +++ b/config/thermofloor/heatit021-v1.92.xml @@ -1,9 +1,5 @@ - - + http://www.openzwave.com/device-database/019B:0201:0003 images/thermofloor/heatit021.png @@ -82,7 +78,7 @@ fails, Err (error) will appear. Leave programming mode by choosing ESC in menu. Your thermostat is ready for use with default settings. If Er2 appears in the display, touch any button to restart the display. - Initial release + Initial release @@ -93,8 +89,6 @@ Leave programming mode by choosing ESC in menu. Your thermostat is ready for use - - From 16165c51ec5170c2e181e0c02ec547847067a246 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A5l=20Kristensen?= Date: Mon, 11 Jan 2021 21:34:09 +0100 Subject: [PATCH 030/198] removing endpoint values --- config/thermofloor/heatit021-v1.92.xml | 3 --- 1 file changed, 3 deletions(-) diff --git a/config/thermofloor/heatit021-v1.92.xml b/config/thermofloor/heatit021-v1.92.xml index 60eedd23bb..ad284e7491 100644 --- a/config/thermofloor/heatit021-v1.92.xml +++ b/config/thermofloor/heatit021-v1.92.xml @@ -89,9 +89,6 @@ Leave programming mode by choosing ESC in menu. Your thermostat is ready for use - - - Floor Temperature Sensor Value From 74b215bca49d85f05c815ffa09eec9483876240e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A5l=20Kristensen?= Date: Mon, 11 Jan 2021 21:57:35 +0100 Subject: [PATCH 031/198] removing invalid values --- config/thermofloor/heatit021-v1.92.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config/thermofloor/heatit021-v1.92.xml b/config/thermofloor/heatit021-v1.92.xml index ad284e7491..ef773e5f58 100644 --- a/config/thermofloor/heatit021-v1.92.xml +++ b/config/thermofloor/heatit021-v1.92.xml @@ -89,13 +89,13 @@ Leave programming mode by choosing ESC in menu. Your thermostat is ready for use - + Floor Temperature Sensor Value - + Air Temperature Sensor Value - + Internal Air Temperature Sensor Value From 891442943122ef586a7a41e8802ae5905b7debec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A5l=20Kristensen?= Date: Mon, 11 Jan 2021 22:20:15 +0100 Subject: [PATCH 032/198] bumping manufacturer revision and fixing association groups --- config/manufacturer_specific.xml | 2 +- config/thermofloor/heatit021-v1.92.xml | 71 ++++++++++++++------------ 2 files changed, 38 insertions(+), 35 deletions(-) diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index c6cb782ed2..bf72793a30 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -1,5 +1,5 @@ - + diff --git a/config/thermofloor/heatit021-v1.92.xml b/config/thermofloor/heatit021-v1.92.xml index ef773e5f58..17761eec60 100644 --- a/config/thermofloor/heatit021-v1.92.xml +++ b/config/thermofloor/heatit021-v1.92.xml @@ -1,10 +1,11 @@ - - - http://www.openzwave.com/device-database/019B:0201:0003 - images/thermofloor/heatit021.png - https://products.z-wavealliance.org/products/1234/ - Heatit Z-Wave is an electronic thermostat for mounting in a standard wall box. The thermostat has a built-in Z-Wave chip that + + + http://www.openzwave.com/device-database/019B:0201:0003 + images/thermofloor/heatit021.png + https://products.z-wavealliance.org/products/1234/ + Heatit Z-Wave is an electronic thermostat for mounting in a standard wall box. The thermostat has a built-in Z-Wave chip that can be connected to Home Automation systems like Fibaro, Sensio, Vera, Zipato and others. The display will show the actual room temperature. By pressing the buttons, the display will show the set value. Heatit Z-Wave is equipped with a single-pole switch. @@ -54,33 +55,33 @@ Sensor values: 0°C 29,1 kOhm Switch: Single-pole Standard Color White RAL 9003 – Black RAL 9011 Approvals CE – FIMKO - Z-Wave Plus - - INCLUSION/EXCLUSION + + INCLUSION/EXCLUSION To include the thermostat to your home automation gateway, press Center (confirm) for 10 seconds. The display will show OFF. Press Right (down) 4 times till you see Con in the display. Now start add device in your home automation software. Start inclusion mode by pressing Center (confirm) for approximately 2 seconds. The inclusion/exclusion icon will appear in the display. Confirmation will show Inc/EcL in the display. If inclusion fails, Err (error) will appear. Leave programming mode by choosing ESC in menu. Your thermostat is ready for use with default settings. - https://products.z-wavealliance.org/ProductManual/File?folder=&filename=MarketCertificationFiles/1182/Manual_Multireg%20Z-Wave_Ver2015-A.pdf - CEPT (Europe) - Heatit Z-Wave - TF021 - FACTORY RESET - RES + https://products.z-wavealliance.org/ProductManual/File?folder=&filename=MarketCertificationFiles/1182/Manual_Multireg%20Z-Wave_Ver2015-A.pdf + CEPT (Europe) + Heatit Z-Wave + TF021 + FACTORY RESET - RES By pressing buttons Left and Center (up and confirm) for 20 seconds, the thermostat will perform a complete factory reset. NB! Please use this procedure only when the primary controller is missing or otherwise inoperable. - INCLUSION/EXCLUSION + INCLUSION/EXCLUSION To include the thermostat to your home automation gateway, press Center (confirm) for 10 seconds. The display will show OFF. Press Right (down) 4 times till you see Con in the display. Now start add device in your home automation software. Start inclusion mode by pressing Center (confirm) for approximately 2 seconds. The inclusion/exclusion icon will appear in the display. Confirmation will show Inc/EcL in the display. If inclusion fails, Err (error) will appear. Leave programming mode by choosing ESC in menu. Your thermostat is ready for use with default settings. - If Er2 appears in the display, touch any button to restart the display. - - Initial release - - + If Er2 appears in the display, touch any button to restart the display. + + Initial release + + @@ -89,18 +90,16 @@ Leave programming mode by choosing ESC in menu. Your thermostat is ready for use - - Floor Temperature Sensor Value - - - Air Temperature Sensor Value - - - Internal Air Temperature Sensor Value - + + + + + 0 + true + - + @@ -124,7 +123,7 @@ Leave programming mode by choosing ESC in menu. Your thermostat is ready for use true - + Set operation mode @@ -199,8 +198,8 @@ Leave programming mode by choosing ESC in menu. Your thermostat is ready for use - - + + @@ -215,5 +214,9 @@ Leave programming mode by choosing ESC in menu. Your thermostat is ready for use - - + + + true + + + \ No newline at end of file From bf85c16b01b50e56984b7bb1dea5d2c721c3901e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A5l=20Kristensen?= Date: Mon, 11 Jan 2021 23:11:12 +0100 Subject: [PATCH 033/198] Auto assigning controller. Correcting sensor name --- config/thermofloor/heatit021-v1.92.xml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/config/thermofloor/heatit021-v1.92.xml b/config/thermofloor/heatit021-v1.92.xml index 17761eec60..3c19b8f36a 100644 --- a/config/thermofloor/heatit021-v1.92.xml +++ b/config/thermofloor/heatit021-v1.92.xml @@ -86,13 +86,12 @@ Leave programming mode by choosing ESC in menu. Your thermostat is ready for use 37 - - + - + 0 true @@ -200,9 +199,9 @@ Leave programming mode by choosing ESC in menu. Your thermostat is ready for use - + - + From e2ad94f8973d58278b70f56cc9e85e0ad478bc28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A5l=20Kristensen?= Date: Mon, 11 Jan 2021 23:28:44 +0100 Subject: [PATCH 034/198] Correcting list parameter size --- config/thermofloor/heatit021-v1.92.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/config/thermofloor/heatit021-v1.92.xml b/config/thermofloor/heatit021-v1.92.xml index 3c19b8f36a..e8f8832cb1 100644 --- a/config/thermofloor/heatit021-v1.92.xml +++ b/config/thermofloor/heatit021-v1.92.xml @@ -124,14 +124,14 @@ Leave programming mode by choosing ESC in menu. Your thermostat is ready for use - + Set operation mode - + Set sensor mode @@ -140,7 +140,7 @@ Leave programming mode by choosing ESC in menu. Your thermostat is ready for use - + Floor sensor type (10K NTC Default) @@ -200,7 +200,7 @@ Leave programming mode by choosing ESC in menu. Your thermostat is ready for use - + From 862e4717373a7c63cefdc747ae383cb225c9b6ad Mon Sep 17 00:00:00 2001 From: Eric Maycock Date: Tue, 12 Jan 2021 17:10:31 -0700 Subject: [PATCH 035/198] Adding Inovelli LZW45 Light Strip --- config/inovelli/lzw45.xml | 193 +++++++++++++++++++++++++++++++ config/manufacturer_specific.xml | 3 +- 2 files changed, 195 insertions(+), 1 deletion(-) create mode 100644 config/inovelli/lzw45.xml diff --git a/config/inovelli/lzw45.xml b/config/inovelli/lzw45.xml new file mode 100644 index 0000000000..019ee12683 --- /dev/null +++ b/config/inovelli/lzw45.xml @@ -0,0 +1,193 @@ + + + http://www.openzwave.com/device-database/031E:0001:000a + images/inovelli/lzw31-sn.png + https://products.z-wavealliance.org/products/3438 + TBD + TBD + TBD + U.S. / Canada / Mexico + TBD + TBD + TBD + LZW45 LED Light Strip + LZW45 + TBD + + Initial Release + Fix device type, fix some issues with parameter sizes + Updates to work with firmware 1.16 + Updates to work with firmware 1.17 + Updates to work with firmware 1.18 + Updates parameter 30 to 4 bytes + + + + + + + When individually addressable LEDs are used, this parameter tells the controller the number of pixels that are attached. + 0: Automatic recognition of pixels + Range 1 - 130: Set the fixed value of the pixel bit + Default: 0 + + + + + This changes the speed in which the light strip dims up or down. A setting of 0 should turn the light immediately on or off (almost like an on/off switch). Increasing the value should slow down the transition speed. + Range 0 - 98: Set the dimming speed + Default: 4 + + + + + This changes the speed in which the light strip turns on or off. For example, when a user sends the switch a basicSet(value: 0xFF) or basicSet(value: 0x00), this is the speed in which those actions take place. A setting of 0 should turn the light immediately on or off (almost like an on/off switch). Increasing the value should slow down the transition speed. A setting of 99 should keep this in sync with parameter 2. + Range 0 - 98: Set the Ramp Rate + 99: Keep in sync with parameter 2 + Default: 99 + + + + + The minimum level that the strip can be dimmed to. Useful when the user has an LED strip that does not turn on or flickers at a lower level. + Range: 1 - 45 + Default: 1 + + + + + The maximum level that the strip can be dimmed to. Useful when the user has an LED strip that reaches its maximum level before the dimmer value of 99. + Range: 55 - 99 + Default: 99 + + + + + Automatically turns the strip off after this many seconds. When the strip is turned on a timer is started that is the duration of this setting. When the timer expires, the strip is turned off. + 0 - Auto off is disabled + Range: 0 - 32767 + + + + + Default level for the strip when it is powered on from the local switch. A setting of 0 means that the switch will return to the level that it was on before it was turned off. + Range 0 - 99 + Default: 0 + + + + + Default level for the dimmer when it is powered on from a Z-Wave command (i.e. BasicSet(0xFF)). A setting of 0 means that the switch will return to the level that it was on before it was turned off. + Range: 0-99 + Default: 0 + + + + + Byte(3-2): Values between 2700-6500 represent a color temperature. + Byte(1-0): Values between 0-361, represent the color on the Hue color wheel. The value of 361 represents a random color. + Range: 0 - 425984362 + Default: 262144000 + + + + + The state the switch should return to once power is restored after power failure. + 0 - Off + 1 - Default Color / Level (Parameter 9) + 2 - Previous + Default: Previous + + + + + + + + The power level change that will result in a new power report being sent. The value is a percentage of the previous report. 0 = disabled. + Range: 0 - 100 + Default: 10 + + + + + Time period between consecutive power & energy reports being sent (in seconds). The timer is reset after each report is sent. + Range: 0, 30 - 32767 + Default: 3600 + + + + + The energy level change that will result in a new energy report being sent (in kWh) + 0 = 0.01kWh, 10=0.1kWh, 100=1kWh + Range:0-127 + Default: 10 + + + + + See website for details + * Sending Basic, Binary Switch, Multilevel, and Color SET will automatically disable the strip effect. + * Toggling OFF -> ON will cancel effect mode set on LED Strip and change the LED Strip back to the Previous color. + Range: 0 - 2147483647 + Default: 0 + + + + + See website for details. + Range: 0 - 2147483647 + Default: 0 + + + + + See website for details. + Range: 0 - 2147483647 + Default: 0 + + + + + See website for details. + Range: 0 - 2147483647 + Default: 0 + + + + + See website for details. + Range: 0 - 65535 + Default: 0 + + + + + Byte 1 - Level + Byte 0 - Effect + See website for details. + Default: 0 + + + + + The 700ms delay that occurs after pressing the physical button to turn the switch on/off is removed. Consequently this also removes the following scenes: 2x, 3x, 4x, 5x tap. Still working are the 1x tap, held, released, and the level up/down scenes. (firmware 1.36+) + 0 - 700ms delay disabled (some scenes will not work) + 1 - 700ms delay enabled (All scenes work) + Default: 700ms delay enabled + + + + + + + + + + + + + + + + diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index 5ee18088c2..fdbfb99a46 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -1,5 +1,5 @@ - + @@ -1062,6 +1062,7 @@ + From 85a04683f231c7c85871e3983a8572fc3080ea3a Mon Sep 17 00:00:00 2001 From: Tao Gong Date: Thu, 14 Jan 2021 06:58:43 +0000 Subject: [PATCH 036/198] Ring Alarm Contact Sensor: Add initial support --- config/images/ring/contact-sensor-v2.png | Bin 0 -> 123170 bytes config/manufacturer_specific.xml | 3 +- config/ring/contact-sensor-v2.xml | 73 +++++++++++++++++++++++ 3 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 config/images/ring/contact-sensor-v2.png create mode 100644 config/ring/contact-sensor-v2.xml diff --git a/config/images/ring/contact-sensor-v2.png b/config/images/ring/contact-sensor-v2.png new file mode 100644 index 0000000000000000000000000000000000000000..249c88dc62d2b37bb1ad77e5c3d7c416e3a2d30a GIT binary patch literal 123170 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 z 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�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 - + @@ -1551,6 +1551,7 @@ + diff --git a/config/ring/contact-sensor-v2.xml b/config/ring/contact-sensor-v2.xml new file mode 100644 index 0000000000..a501276d54 --- /dev/null +++ b/config/ring/contact-sensor-v2.xml @@ -0,0 +1,73 @@ + + + Contact Sensor + Ring Alarm Contact Sensor is a wireless sensor for the Ring Alarm system which provides users the ability to know when a door or window is open or closed. After installing the sensor on a door or window and setting up the sensor in the Ring app, monitor and receive notifications when the door or window opens or closes. The Ring Alarm Base Station is required to enable Contact Sensor features and functions within the Ring app. + http://www.openzwave.com/device-database/0346:0301:0201 + images/ring/contact-sensor-v2.png + https://products.z-wavealliance.org/ProductManual/File?folder=&filename=product_documents/3862/Z-WaveUserManual_Contact_Sensor_700.pdf + ">The sensor will wake up every so often to send a Wake-Up Notification to allow the life line master node controller that the sensor is now available for any queued messages that the controller may have for the sensor. The time between Wake-Up Notifications can be configured with the Wake-Up Notification command class according to the following configurable values: +• Min Value 1 hr +• Max Value 24 hr +• Default Value 12 hours (12 * 60 * 60 seconds) +• Wake Up Interval Step Seconds 1 hour (3600 seconds) + + After powering on the device, press and hold the button on the front of the device for ~3 seconds. Release the button and the device will enter Classic inclusion mode which implements both classic inclusion with a Node Information Frame, and Network Wide Inclusion. During Classic Inclusion mode, the green LED will blink three times followed by a brief pause, repeatedly. When Classic inclusion times-out, the device will blink alternating red and green a few times. + + Exclusion Instructions: +1. Initiate remove “Ring Alarm Contact Sensor” flow in the Ring Alarm mobile application – Select the settings icon from device details page and choose “Remove Device” to remove the device. This will place the controller into Remove or “Z-Wave Exclusion” mode. +2. With the controller in Remove (Z-Wave Exclusion) mode, use a paper clip or similar object and tap the pinhole button. The device’s red LED turns on solid to indicate the device was removed from the network. + + Factory Default Instructions +1. To restore Ring Alarm Contact Sensor to factory default settings, locate the pinhole reset button on the device. This is found inside the battery compartment on the back of the device after removing the back bracket. +2. Using a paperclip or similar object, insert it into the pinhole, press and hold the button down for 10 seconds. +3. The device will rapidly blink green continuously for 10 seconds. After about 10 seconds, when the green blinking stops, release the button. The red LED will turn on solid to indicate the device was removed from the network. + + https://products.z-wavealliance.org/products/3862/ + Contact Sensor v2 + U.S. / Canada / Mexico + + Initial Metadata Creation + + + + + + Heartbeats are automatic battery reports on a timer after the last event. + + + + + Number of application level retries attempted for messages either not ACKed or messages encapsulated via supervision get that did not receive a report. + + + + + This parameter is the number base seconds used in the calculation for sleeping between retry messages. + + + + + This parameter allows a user, via software, to configure the various LED indications on the device. + + + + + + + + Writing to this parameter prompts the sensor to send a wakeup notification one time after this parameter's number of seconds. After which it is reset back to 0. + + + + + The number of milliseconds waiting for a Supervisory Report response to a Supervisory Get encapsulated command from the sensor before attempting a retry. + + + + + + + + + + From 5a1f980b76fb20d3f7757a7ee595c7c53914375d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Auger?= Date: Fri, 15 Jan 2021 16:22:30 +0100 Subject: [PATCH 037/198] ZDB5100 Convert param 1 to a bitset fix #2539 ZDB5100, config param 1 is actually a bitset --- config/logicsoft/ZDB5100.xml | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/config/logicsoft/ZDB5100.xml b/config/logicsoft/ZDB5100.xml index 1bd2391697..814239e936 100644 --- a/config/logicsoft/ZDB5100.xml +++ b/config/logicsoft/ZDB5100.xml @@ -1,5 +1,5 @@ - + Matrix MATRIX ZDB5100 is a dimmer wall switch module with four backlit pushbuttons. MATRIX is designed to fit into 1-module FUGA® wall boxes (Danish standard). @@ -16,17 +16,37 @@ ZDB5100 Initial Metadata Import from Z-Wave Alliance Database - https://products.z-wavealliance.org/products/3399/xml + Convert param 1 to a bitset - + This parameter specifies which pushbutton(s) that shall be used to control the built-in dimmer. - - - - - + + + No local operation of the dimmer + + + + Pushbutton 1 controls the dimmer + + + + Pushbutton 2 controls the dimmer + + + + Pushbutton 1 controls the dimmer + + + + Pushbutton 3 controls the dimmer + + + + Pushbutton 4 controls the dimmer + From b6635191fa1e3f231b64562842f2435ba8e92ef4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Auger?= Date: Fri, 15 Jan 2021 16:51:58 +0100 Subject: [PATCH 038/198] Update ZDB5100.xml --- config/logicsoft/ZDB5100.xml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/config/logicsoft/ZDB5100.xml b/config/logicsoft/ZDB5100.xml index 814239e936..a64c59eeba 100644 --- a/config/logicsoft/ZDB5100.xml +++ b/config/logicsoft/ZDB5100.xml @@ -1,5 +1,5 @@ - + Matrix MATRIX ZDB5100 is a dimmer wall switch module with four backlit pushbuttons. MATRIX is designed to fit into 1-module FUGA® wall boxes (Danish standard). @@ -16,7 +16,8 @@ ZDB5100 Initial Metadata Import from Z-Wave Alliance Database - https://products.z-wavealliance.org/products/3399/xml - Convert param 1 to a bitset + Convert param 1 to a bitset + Remove duplicate entry @@ -35,10 +36,6 @@ Pushbutton 2 controls the dimmer - - - Pushbutton 1 controls the dimmer - Pushbutton 3 controls the dimmer From 2def6154d56a78f660dce795e4c7b8a8562de5d1 Mon Sep 17 00:00:00 2001 From: Tao Gong Date: Sun, 17 Jan 2021 08:35:39 +0000 Subject: [PATCH 039/198] Ring Alarm Motion Detector: add initial support --- config/images/ring/motion-detector-v2.png | Bin 0 -> 142475 bytes config/manufacturer_specific.xml | 3 +- config/ring/motion-detector-v2.xml | 97 ++++++++++++++++++++++ 3 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 config/images/ring/motion-detector-v2.png create mode 100644 config/ring/motion-detector-v2.xml diff --git a/config/images/ring/motion-detector-v2.png b/config/images/ring/motion-detector-v2.png new file mode 100644 index 0000000000000000000000000000000000000000..2af9fc9300dd1e5d5da4e3e526b10906e019db6c GIT binary patch literal 142475 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 EANvGirT_o{ literal 0 HcmV?d00001 diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index 6acab398c9..35b7b33dfc 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -1,5 +1,5 @@ - + @@ -1552,6 +1552,7 @@ + diff --git a/config/ring/motion-detector-v2.xml b/config/ring/motion-detector-v2.xml new file mode 100644 index 0000000000..b5ab5c9d0c --- /dev/null +++ b/config/ring/motion-detector-v2.xml @@ -0,0 +1,97 @@ + + + Motion Detector + Ring Alarm Motion Detector is a wireless sensor for the Ring Alarm system which provides users the ability to know when there is movement of a person or similar object within an area. After installing the sensor and setting up the sensor in the Ring app, monitor and receive notifications motion is detected. The Ring Alarm Base Station is required to enable Motion Detector features and functions within the Ring app. + http://www.openzwave.com/device-database/0346:0301:0301 + images/ring/motion-detector-v2.png + https://products.z-wavealliance.org/ProductManual/File?folder=&filename=product_documents/3869/Z-WaveUserManual_Motion_Detector_700.pdf + Not applicable. Ring Alarm Motion Detector is a Frequently Listening Receiver Slave (FLiRS) device and does not support Wake Up Command Class. + + After powering on the device, press and hold the button on the front of the device for ~3 seconds. Release the button and the device will enter Classic inclusion mode which implements both classic inclusion with a Node Information Frame, and Network Wide Inclusion. During Classic Inclusion mode, the green LED will blink three times followed by a brief pause, repeatedly. When Classic inclusion times-out, the device will blink alternating red and green a few times. + + Exclusion Instructions: +1. Initiate remove “Ring Alarm Motion Detector” flow in the Ring Alarm mobile application – Select the settings icon from device details page and choose “Remove Device” to remove the device. This will place the controller into Remove or “Z-Wave Exclusion” mode. +2. Locate the pinhole reset button on the back of the device in the battery compartment. +3. With the controller in Remove (Z-Wave Exclusion) mode, use a paper clip or similar object and tap the pinhole button. The device’s red LED turns on solid to indicate the device was removed from the network. + + Factory Default Instructions +1. To restore Ring Alarm Motion Detector to factory default settings, locate the pinhole reset button on the device. This is found inside the battery compartment on the back of the device after removing the back bracket. +2. Using a paperclip or similar object, insert it into the pinhole, press and hold the button down for 10 seconds. +3. The device will rapidly blink green continuously for 10 seconds. After about 10 seconds, when the green blinking stops, release the button. The red LED will turn on solid to indicate the device was removed from the network. + +Note: Use this procedure only in the event that the network primary controller is missing or otherwise inoperable. + + https://products.z-wavealliance.org/products/3869/ + Motion Detector v2 + U.S. / Canada / Mexico + + Initial Metadata Creation + + + + + + This parameter is the number minutes between heartbeats. Heartbeats are automatic battery reports on a timer after the last event. + + + + + Number of application level retries attempted for messages either not ACKed or messages encapsulated via supervision get that did not receive a report. + + + + + The number base seconds used in the calculation for sleeping between retry messages. + + + + + This parameter allows a user, via software, to configure the various LED indications on the device. + + + + + + + + Delay time in seconds for occupancy signal to clear + + + + + Delay time in seconds for intrusion signal to clear + + + + + Standard delay time in seconds + + + + + Adjusts motion sensitivity + + + + + Enable or Disable light sensor + + + + + Delay used to turn off lights when motion is no longer detected + + + + + The number of milliseconds waiting for a Supervisory Report response to a Supervisory Get encapsulated command from the sensor before attempting a retry. + + + + + + + + + + From 64653f40592e60166b3e148e8c53e2490f4d41aa Mon Sep 17 00:00:00 2001 From: Tao Gong Date: Sun, 17 Jan 2021 08:49:44 +0000 Subject: [PATCH 040/198] Ring Alarm Contact Sensor: minor fix Config 6 is misdocumented in z-wave alliance. The true values are read(tested) from the device. --- config/ring/contact-sensor-v2.xml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/config/ring/contact-sensor-v2.xml b/config/ring/contact-sensor-v2.xml index a501276d54..e01cb8c264 100644 --- a/config/ring/contact-sensor-v2.xml +++ b/config/ring/contact-sensor-v2.xml @@ -1,11 +1,11 @@ - + Contact Sensor Ring Alarm Contact Sensor is a wireless sensor for the Ring Alarm system which provides users the ability to know when a door or window is open or closed. After installing the sensor on a door or window and setting up the sensor in the Ring app, monitor and receive notifications when the door or window opens or closes. The Ring Alarm Base Station is required to enable Contact Sensor features and functions within the Ring app. http://www.openzwave.com/device-database/0346:0301:0201 images/ring/contact-sensor-v2.png https://products.z-wavealliance.org/ProductManual/File?folder=&filename=product_documents/3862/Z-WaveUserManual_Contact_Sensor_700.pdf - ">The sensor will wake up every so often to send a Wake-Up Notification to allow the life line master node controller that the sensor is now available for any queued messages that the controller may have for the sensor. The time between Wake-Up Notifications can be configured with the Wake-Up Notification command class according to the following configurable values: + The sensor will wake up every so often to send a Wake-Up Notification to allow the life line master node controller that the sensor is now available for any queued messages that the controller may have for the sensor. The time between Wake-Up Notifications can be configured with the Wake-Up Notification command class according to the following configurable values: • Min Value 1 hr • Max Value 24 hr • Default Value 12 hours (12 * 60 * 60 seconds) @@ -26,6 +26,7 @@ Contact Sensor v2 U.S. / Canada / Mexico + Minor correction Initial Metadata Creation @@ -58,7 +59,7 @@ Writing to this parameter prompts the sensor to send a wakeup notification one time after this parameter's number of seconds. After which it is reset back to 0. - + The number of milliseconds waiting for a Supervisory Report response to a Supervisory Get encapsulated command from the sensor before attempting a retry. From 7758f96e41b13ced22fbfc5aab28346ca215fb46 Mon Sep 17 00:00:00 2001 From: jandujar Date: Sun, 17 Jan 2021 16:35:00 +0100 Subject: [PATCH 041/198] Added support for Simon 100 IO Dimmer 10002020_13X --- config/images/simon/10002020-13X.png | Bin 0 -> 11577 bytes config/manufacturer_specific.xml | 1 + config/simon/10002020-13X.xml | 143 +++++++++++++++++++++++++++ distfiles.mk | 30 ++++++ 4 files changed, 174 insertions(+) create mode 100755 config/images/simon/10002020-13X.png create mode 100755 config/simon/10002020-13X.xml diff --git a/config/images/simon/10002020-13X.png b/config/images/simon/10002020-13X.png new file mode 100755 index 0000000000000000000000000000000000000000..390505dbf1a5ed4e539a07e22ee02716ff1ed1c0 GIT binary patch literal 11577 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 + diff --git a/config/simon/10002020-13X.xml b/config/simon/10002020-13X.xml new file mode 100755 index 0000000000..b239236f8d --- /dev/null +++ b/config/simon/10002020-13X.xml @@ -0,0 +1,143 @@ + + + + images/simon/10002020-13X.png + https://products.z-wavealliance.org/products/2590/ + https://products.z-wavealliance.org/ProductManual/File?folder=%filename=MarketCertificationFiles/2590/DIMMER_991024_990912.pdf + S100 Rocker iO for Dimmer + + Added support for Simon S100 Rocker iO dimmer. + + + + + + + Used during Association process by Simon Shortcut Switch IO to turn ON the main LED of all devices already associated to this shortcut. + + + + + + + + This parameter allows to choose the dimmer set time in seconds. + Value 0 - Instantly (default). + Values from 1 to 127 - 1 second to 127 seconds in 1 second resolution. + + + + + + This parameter allows to choose the dimmer fade time in seconds. + Value 0 - Instantly (default). + Values from 1 to 127 - 1 second to 127 seconds in 1 second resolution. + + + + + + This parameter allows to choose the ON delay in seconds. + Value 0 - Instantly (default). + Values from 1 to 127 - 1 second to 127 seconds in 1 second resolution. + + + + + + This parameter allows to choose the activation time in seconds. + Value 0 - Instantly (default). + Values from 1 to 127 - 1 second to 127 seconds in 1 second resolution. + + + + + + This parameter allows to choose the OFF delay in seconds. + Value 0 - Instantly (default). + Values from 1 to 127 - 1 second to 127 seconds in 1 second resolution. + + + + + This parameter allows choosing between trailing or leading edge configuration. + + + + + + + Sets the Min percentage that can be reached. Once the device gets a value through Z-Wave, it scales the value read according to this Min margin. + + + + Sets the Max percentage that can be reached. Once the device gets a value through Z-Wave, it scales the value read according to this Max margin. + + + + Returns or sets the last non zero dimming value. In case of Set the device turns ON the load. + + + + This parameter allows to choose behaviour of LED in repose + + + + + + This parameter locks the direct control of load. + + + + + + Parameters, Groups, and Z-Wave status are restored to default (Only writable). + + + + + This parameter allows choosing. + + + + + + + + + Write only value that performs a fast blink on Central LED during 5 seconds in order to identify the device when it is installed in a multiple frame. + + + + + + Read only Configuration used to report the device state and last value. This value is represented in Hexadecimal. + Byte 0 informs about load state (0 load is OFF and 1 load is ON). + Byte 1 informs about last active dimming value (0x00 or 0x63) + + + + + + Reports whether the roller dimmer needs calibration. + 0x00 Calibration is not required. + 0xFF It is necessary to calibrate the dimmer to work properly. + + + + + This parameter allows to choose the long press behaviour. + + + + + + + + + + + diff --git a/distfiles.mk b/distfiles.mk index 80f3e3c22a..21af8ef3e9 100644 --- a/distfiles.mk +++ b/distfiles.mk @@ -283,6 +283,7 @@ DISTFILES = .gitignore \ config/fibaro/fgs211.xml \ config/fibaro/fgs212.xml \ config/fibaro/fgs213.xml \ + config/fibaro/fgs214.xml \ config/fibaro/fgs221.xml \ config/fibaro/fgs222.xml \ config/fibaro/fgs223.xml \ @@ -329,6 +330,7 @@ DISTFILES = .gitignore \ config/ge/14294-dimmer.xml \ config/ge/14295-dimmer-toggle.xml \ config/ge/14298.xml \ + config/ge/14322-dimmer-toggle.xml \ config/ge/26931-motion-switch.xml \ config/ge/26932-motion-dimmer.xml \ config/ge/26933-motion-dimmer.xml \ @@ -620,6 +622,7 @@ DISTFILES = .gitignore \ config/images/fibaro/fgcd001.png \ config/images/fibaro/fgd212.png \ config/images/fibaro/fgdw2.png \ + config/images/fibaro/fgfs101.png \ config/images/fibaro/fgfs101zw5.png \ config/images/fibaro/fggc001.png \ config/images/fibaro/fgk001.png \ @@ -631,7 +634,9 @@ DISTFILES = .gitignore \ config/images/fibaro/fgr223.png \ config/images/fibaro/fgrgbw442.png \ config/images/fibaro/fgrgbwm441.png \ + config/images/fibaro/fgrm222.png \ config/images/fibaro/fgs213.png \ + config/images/fibaro/fgs222.png \ config/images/fibaro/fgs223.png \ config/images/fibaro/fgs224.png \ config/images/fibaro/fgsd002.png \ @@ -639,6 +644,7 @@ DISTFILES = .gitignore \ config/images/fibaro/fgwd111.png \ config/images/fibaro/fgwds221.png \ config/images/fibaro/fgwoe.png \ + config/images/fibaro/fgwpb121.png \ config/images/fibaro/fgwpe.png \ config/images/fibaro/fgwpfzw5.png \ config/images/fibaro/fgwpg111.png \ @@ -672,6 +678,7 @@ DISTFILES = .gitignore \ config/images/ge/14294-dimmer.png \ config/images/ge/14295-dimmer-toggle.png \ config/images/ge/14298.png \ + config/images/ge/14322-dimmer-toggle.png \ config/images/ge/26931-motion-switch.png \ config/images/ge/26933-motion-dimmer.png \ config/images/ge/28167-plugin-dimmer.png \ @@ -790,6 +797,7 @@ DISTFILES = .gitignore \ config/images/leviton/vrpa1.png \ config/images/leviton/vrpd3.png \ config/images/leviton/vrs15.png \ + config/images/leviton/zw15r.png \ config/images/leviton/zw4sf.png \ config/images/linear/LB60Z-1.png \ config/images/linear/WD500Z5-1.png \ @@ -810,6 +818,7 @@ DISTFILES = .gitignore \ config/images/miyakawaelectric/me-d101.png \ config/images/namron/1402756.png \ config/images/namron/4512710.png \ + config/images/namron/4512714.jpg \ config/images/namron/4512715.png \ config/images/namron/4512724.png \ config/images/nexia/db100z.png \ @@ -896,6 +905,7 @@ DISTFILES = .gitignore \ config/images/remotec/zxt-310.png \ config/images/remotec/zxt-600.png \ config/images/ring/PIR-SS.png \ + config/images/ring/contact-sensor-v2.png \ config/images/schlage/BE468ZP.png \ config/images/schlage/BE469.png \ config/images/schlage/BE469ZP.png \ @@ -906,13 +916,16 @@ DISTFILES = .gitignore \ config/images/sercomm/sw-clp01-eu.png \ config/images/shenzen_neo/ls03ch.jpg \ config/images/shenzen_neo/nas-ab01z.png \ + config/images/shenzen_neo/nas-cs01z.jpg \ config/images/shenzen_neo/nas-ds01z.png \ config/images/shenzen_neo/nas-pd01z.png \ config/images/shenzen_neo/nas-pd02z.png \ + config/images/shenzen_neo/nas-sc03ze.jpg \ config/images/shenzen_neo/nas-wr01z.png \ config/images/shenzen_neo/nas-wr01ze.png \ config/images/shenzen_neo/nas-ws02z.png \ config/images/shenzen_saykey/SK-3007-05.png \ + config/images/simon/10002020-13X.png \ config/images/simon/10002034-13X.png \ config/images/simon/10002080-13X.png \ config/images/smartthings/pgc401m.png \ @@ -935,6 +948,7 @@ DISTFILES = .gitignore \ config/images/sunricher/srzv9101sachpeu.png \ config/images/sunricher/srzv9101sachpswitch.png \ config/images/sunricher/zv2835rac.png \ + config/images/sunricher/zv9100a.png \ config/images/sunricher/zv9101.png \ config/images/swiid/swiidinter.png \ config/images/technisat/03009496.png \ @@ -945,6 +959,7 @@ DISTFILES = .gitignore \ config/images/telldus/tzwp102.png \ config/images/there/800z.png \ config/images/thermofloor/Heatit-Z-Push-button-8-white.png \ + config/images/thermofloor/heatit0204.png \ config/images/thermofloor/heatit021.png \ config/images/thermofloor/heatit056.png \ config/images/thermofloor/heatit058.png \ @@ -988,6 +1003,7 @@ DISTFILES = .gitignore \ config/images/wenzhou/tz69.png \ config/images/wenzhou/tz78.png \ config/images/wenzhou/tz88.png \ + config/images/wenzhou/tze96.png \ config/images/widom/DRY.png \ config/images/widom/UBS104.png \ config/images/widom/UME304C_S.png \ @@ -1041,6 +1057,7 @@ DISTFILES = .gitignore \ config/images/zwave.me/popp_kfob-c.png \ config/images/zwave.me/razberry.png \ config/images/zwave.me/zme_raz5.png \ + config/images/zwave.me/zme_wallc_s.png \ config/images/zwave.me/zweather.png \ config/images/zwp/PA-100.png \ config/images/zwp/WD-100.png \ @@ -1053,6 +1070,7 @@ DISTFILES = .gitignore \ config/inovelli/lzw40.xml \ config/inovelli/lzw41.xml \ config/inovelli/lzw42.xml \ + config/inovelli/lzw45.xml \ config/inovelli/lzw60.xml \ config/inovelli/nzw1201.xml \ config/inovelli/nzw30.xml \ @@ -1090,6 +1108,7 @@ DISTFILES = .gitignore \ config/leviton/vrpa1.xml \ config/leviton/vrpd3.xml \ config/leviton/vrs15.xml \ + config/leviton/zw15r.xml \ config/leviton/zw4sf.xml \ config/linear/GC-TBZ48.xml \ config/linear/LB60Z-1.xml \ @@ -1118,6 +1137,7 @@ DISTFILES = .gitignore \ config/mcohome/mhp210.xml \ config/mcohome/mhp220.xml \ config/mcohome/mhp511.xml \ + config/mcohome/mhs220.xml \ config/mcohome/mhs311.xml \ config/mcohome/mhs312.xml \ config/mcohome/mhs314.xml \ @@ -1133,8 +1153,10 @@ DISTFILES = .gitignore \ config/miyakawaelectric/me-d101.xml \ config/namron/1402756.xml \ config/namron/4512710.xml \ + config/namron/4512714.xml \ config/namron/4512715.xml \ config/namron/4512724.xml \ + config/nei/ms11z.xml \ config/nexia/db100z.xml \ config/nexia/th100nx.xml \ config/nodon/asp3100SmartPlug.xml \ @@ -1252,6 +1274,7 @@ DISTFILES = .gitignore \ config/remotec/zxt-310.xml \ config/remotec/zxt-600.xml \ config/ring/PIR-SS.xml \ + config/ring/contact-sensor-v2.xml \ config/schlage/BE468.xml \ config/schlage/BE468ZP.xml \ config/schlage/BE469.xml \ @@ -1267,15 +1290,18 @@ DISTFILES = .gitignore \ config/shenzen_neo/ls02ch.xml \ config/shenzen_neo/ls03ch.xml \ config/shenzen_neo/nas-ab01z.xml \ + config/shenzen_neo/nas-cs01z.xml \ config/shenzen_neo/nas-ds01z.xml \ config/shenzen_neo/nas-pd01z.xml \ config/shenzen_neo/nas-pd02z.xml \ config/shenzen_neo/nas-pd03z.xml \ config/shenzen_neo/nas-rc01z.xml \ + config/shenzen_neo/nas-sc03ze.xml \ config/shenzen_neo/nas-wr01z.xml \ config/shenzen_neo/nas-wr01ze.xml \ config/shenzen_neo/nas-ws02z.xml \ config/shenzen_saykey/sk-3007-05.xml \ + config/simon/10002020-13X.xml \ config/simon/10002034-13X.xml \ config/simon/10002041-13X.xml \ config/simon/10002080-13X.xml \ @@ -1296,6 +1322,7 @@ DISTFILES = .gitignore \ config/sunricher/srzv9001t4dimeu.xml \ config/sunricher/srzv9001tccteu.xml \ config/sunricher/srzv9003t4rgbweu.xml \ + config/sunricher/srzv9100aa.xml \ config/sunricher/srzv9101sachpeu.xml \ config/sunricher/srzv9101sachpswitch.xml \ config/sunricher/zv2835rac.xml \ @@ -1311,9 +1338,11 @@ DISTFILES = .gitignore \ config/telldus/tzwp102.xml \ config/there/800z.xml \ config/thermofloor/heatit-zdim.xml \ + config/thermofloor/heatit021-v1.92.xml \ config/thermofloor/heatit021.xml \ config/thermofloor/heatit056.xml \ config/thermofloor/heatit058.xml \ + config/thermofloor/heatit204.xml \ config/thermofloor/heatit20a.xml \ config/thermofloor/heatitz4.xml \ config/thermofloor/heatitz8.xml \ @@ -1369,6 +1398,7 @@ DISTFILES = .gitignore \ config/wenzhou/tz78.xml \ config/wenzhou/tz79.xml \ config/wenzhou/tz88.xml \ + config/wenzhou/tze96.xml \ config/widom/DRY.xml \ config/widom/UBS104.xml \ config/widom/UME304C_S.xml \ From 51f40b71f8fbb53ccc0f82d7049bee132686de73 Mon Sep 17 00:00:00 2001 From: Nathan Spencer Date: Sun, 17 Jan 2021 17:24:21 -0700 Subject: [PATCH 042/198] Add Yale Assure Lock for Andersen patio doors (YRM276) --- config/assa_abloy/yrm276.xml | 112 ++++++++++++++++++++++++++++ config/images/assa_abloy/yrm276.png | Bin 0 -> 23530 bytes config/manufacturer_specific.xml | 1 + 3 files changed, 113 insertions(+) create mode 100644 config/assa_abloy/yrm276.xml create mode 100644 config/images/assa_abloy/yrm276.png diff --git a/config/assa_abloy/yrm276.xml b/config/assa_abloy/yrm276.xml new file mode 100644 index 0000000000..888a298bf8 --- /dev/null +++ b/config/assa_abloy/yrm276.xml @@ -0,0 +1,112 @@ + + + + Yale Assure Lock for Andersen Patio Doors + Yale Assure Lock® is a secure, keyless lock developed by Yale exclusively available with Andersen Patio Doors (E-Series and A-Series hinged patio doors). Monitor, lock and unlock from anywhere with your Yale Assure Lock featuring Andersen’s VeriLock™ sensor technology and integrate into a compatible home automation or security system. + http://www.openzwave.com/device-database/0129:1604:8014 + https://shopyalehome.com/products/assure-lock-for-andersen-patio-doors-z-wave-plus-in-satin-nickel?_pos=9&_sid=9cc5e3274&_ss=r + https://support.shopyalehome.com/en_us/categories/getting-started-Sy5xA1Wyw + images/assa_abloy/yrm276.png + https://products.z-wavealliance.org/ProductManual/File?folder=&filename=MarketCertificationFiles/2911/YRM276_YRM476-INST-FUL%20Rev%20A%20WEB_SystemGuide.pdf + 1. Enter the 4-8 digit master PIN code followed by the gear key. +2. Press the 7 key followed by the gear key. +3. Press the 1 key followed by the gear key. + 1. Enter the 4-8 digit master PIN code followed by the gear key. +2. Press the 7 key followed by the gear key. +3. Press the 3 key followed by the gear key. + Please use this procedure only when the network primary controller is missing or otherwise inoperable. +When resetting the lock, all user codes, including the Master code, are deleted. All programming features are reset to the original default settings. +1. Remove the battery cover and batteries. +2. Remove the interior lock to access the reset button. +3. The reset button is located above the cable connectors. PCB +4. Re-insert 3 batteries and hold the reset button for 3 seconds. +5. While still holding the reset button, insert the 4th battery, and hold the reset button for an additional 3 seconds. +6. Release the reset button. + https://products.z-wavealliance.org/products/2925 + U.S. / Canada / Mexico + YRM276 + + Initial entry with data obtained from https://products.z-wavealliance.org/products/2925 + + + + + Default is Low Volume + + + + + + Default is Off + + + + + 1 to 180 seconds (default is 30) + + + 3 to 10 (default is 5) + + + Default is English + + + + + + 10 to 180 seconds (default is 60) + + + Normal (default) +Vacation = keypad lockout +Privacy = no keypad, RF Unlock will work + + + + + + Default is On + + + + + Default is Off + + + + + Default is Off + + + + + No default value + + + + 10 to 2540 second. This value is represented as seconds X 10 (ie a value of 4 would mean a door propped timer of 40 seconds). Set to 0 to disable (default). + +**Optional Door Position Switch must hvae been installed with the lock. + + + Used to enable/disable door condition alarms for locks that support a door position sensor. Any lock that does not support DPS will always report Off. Default is Off + +**Optional Door Position Switch must hvae been installed with the lock. + + + + + Off (default) = The lock will always lock regardless of DPSstate +On = Check DPS before motorized lock function + +**Optional Door Position Switch must hvae been installed with the lock. + + + + + + + + + + \ No newline at end of file diff --git a/config/images/assa_abloy/yrm276.png b/config/images/assa_abloy/yrm276.png new file mode 100644 index 0000000000000000000000000000000000000000..0ea79eebb786feff2e647e91c02846501a701cea GIT binary patch literal 23530 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 + From 8bab4012895ff284d001d289acef1c7ee3f75dd3 Mon Sep 17 00:00:00 2001 From: Dmitry Blokhin Date: Mon, 18 Jan 2021 07:36:19 +0200 Subject: [PATCH 043/198] Updated information, metadata and photos for Shenzhen Neo light switches --- config/images/shenzhen-neo/eu-1.png | Bin 0 -> 13278 bytes config/images/shenzhen-neo/eu-2.png | Bin 0 -> 13573 bytes config/images/shenzhen-neo/eu-3.png | Bin 0 -> 12834 bytes config/manufacturer_specific.xml | 5 ++- config/shenzen_neo/ls01ch.xml | 66 +++++++++++++++++++--------- config/shenzen_neo/ls02ch.xml | 55 ++++++++++++++++++----- config/shenzen_neo/ls03ch.xml | 26 ++++++++--- 7 files changed, 111 insertions(+), 41 deletions(-) create mode 100644 config/images/shenzhen-neo/eu-1.png create mode 100644 config/images/shenzhen-neo/eu-2.png create mode 100644 config/images/shenzhen-neo/eu-3.png diff --git a/config/images/shenzhen-neo/eu-1.png b/config/images/shenzhen-neo/eu-1.png new file mode 100644 index 0000000000000000000000000000000000000000..0c68174cd27cab9a58ac8e584573ef67b7a7f42c GIT binary patch literal 13278 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 literal 0 HcmV?d00001 diff --git a/config/images/shenzhen-neo/eu-2.png b/config/images/shenzhen-neo/eu-2.png new file mode 100644 index 0000000000000000000000000000000000000000..d7db1c2df57d6bb74c4f3cd44e4f062ac3733644 GIT binary patch literal 13573 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 LNkvXXu0mjfghgT| literal 0 HcmV?d00001 diff --git a/config/images/shenzhen-neo/eu-3.png b/config/images/shenzhen-neo/eu-3.png new file mode 100644 index 0000000000000000000000000000000000000000..162883c450a4d59422012aa4b37f91151f2c7cca GIT binary patch literal 12834 zcmd6O2Q-}9*Y{u;y|)N4dL0HcjEUZfP8cCFGmI9!m*|~D^e9QR1kpvJB|6bAQGzJZ zMT-z62$64c+k4;j{lE9#^_FkFmU-rRj^Ek)?7e?ypMB1=#2e~sQjxQf0{{RjZ7nrp z{CD5a4=Ex3%8ium$A1xc8EdKls)pG&@ee?IWj$p8p!Pn+IffYjOy;g-;ROIt(Et1p zjC}|>$4hE)G(~x%^mLInZZ2XNTQ@9D%-_Wwj|Kqb6#d;XHn(x!U@Xqw(N&&%_f;D= z*wI#=+Z?V3)pJ+HIXG$sdg4q1^-XO8Z`;V)aw{rOk<0lb@e*8c-WagIi?gd2(qEqY zSHVd9{m*7`Zt$-V@7wa+%0D%NQF?}8RX0x@7%m2f*gz#R943Ah9dAt4Hugi1(> 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 - + @@ -1311,7 +1311,7 @@ - + @@ -1643,6 +1643,7 @@ + diff --git a/config/shenzen_neo/ls01ch.xml b/config/shenzen_neo/ls01ch.xml index 5726fe7a85..2714f516dd 100644 --- a/config/shenzen_neo/ls01ch.xml +++ b/config/shenzen_neo/ls01ch.xml @@ -1,28 +1,54 @@ - - - - This parameter defines the on/off status of relay needs saving or not. The status will be saved when relay status is changed if this parameter is set to '1'. Otherwise the relay status is not saved. The Light Switch will restore the relay On/Off status when it's powered again. - - - - - This parameter defines the back light state of the touch button. - - - - - This Parameter defines the relay state. The led will be turned on with pink color when the button is touched to turn on relay if this parameter is set to '1'. Otherwise the LED is off. - - - - - + + Shenzhen NEO Electronics (Neo-CoolCam) Light Switch (1 channel) + http://www.openzwave.com/device-database/0258:108c:0003 + https://szneo.com/en/products/show.php?id=201 + images/shenzhen-neo/eu-1.png + Set Z-Wave gateway into inclusion mode (refer to gateway user manual). +Touch any button three times continuously within 1,5 seconds, then Light Switch will enter into inclusion mode. +Meanwhile, LED light would flash red colour five time on and off alternately. + Set Z-Wave gateway into exclusion mode (refer to gateway user manual). +Touch any button three times continuously within 1,5 seconds, then Light Switch will enter into exclusion mode. + Touch and hold any button for 10 seconds, then release the button. +LEF lights would flash red (1CH:pink) color 5 times within 2s after resetting successfully. +During the resetting process, please make sure the Light Switch is powered on all the time. + https://szneo.com/en/products/show.php?id=201 + CEPT (Europe) + EU-1 + https://szneo.com/en/products/show.php?id=202 + U.S. / Canada / Mexico + US-1 + + Initial version + Added pictures, descriptions and metadata + + + + + + This parameter defines the on/off status of relay needs to be saved or not. +The status will be saved when relay status is changed if this parameter is set to '1'; otherwise the relay stataus is not saved. +The Light Switch will restore the relay On/Off status when is powered on again. + + + + + This parameter defines the back light state of the touch button. + + + + + This Parameter defines the relay state. The led will be turned on with pink color when the button is touched to turn on relay if this parameter is set to '1'. Otherwise the LED is off. + + + + + - \ No newline at end of file + diff --git a/config/shenzen_neo/ls02ch.xml b/config/shenzen_neo/ls02ch.xml index 03eb1ab13f..1233a6231c 100644 --- a/config/shenzen_neo/ls02ch.xml +++ b/config/shenzen_neo/ls02ch.xml @@ -1,27 +1,58 @@ - - + + + Shenzhen NEO Electronics (Neo-CoolCam) Light Switch (2 channels) + http://www.openzwave.com/device-database/0258:108b:0003 + https://szneo.com/en/products/show.php?id=196 + images/shenzhen-neo/eu-2.png + Set Z-Wave gateway into inclusion mode (refer to gateway user manual). +Touch any button three times continuously within 1,5 seconds, then Light switch will enter into inclusion mode. +Meanwhile, LED light would flash red colour five time on and off alternately. + Set Z-Wave gateway into exclusion mode (refer to gateway user manual). +Touch any button three times continuously within 1,5 seconds, then Light switch will enter into exclusion mode. + Touch and hold any button for 10 seconds, then release the button. +LEF lights would flash red (1CH:pink) color 5 times within 2s after resetting successfully. +During the resetting process, please make sure the light switch is powered on all the time. + https://szneo.com/en/products/show.php?id=196 + CEPT (Europe) + EU-2 + https://szneo.com/en/products/show.php?id=203 + U.S. / Canada / Mexico + US-2 + + Initial version + Added pictures, descriptions and metadata + + - - This parameter defines the back light state of the touch button. The back light led would be on when Light Switch is powered on if the parameter is set to '1'. Otherwise the back light led would be off. + + This parameter defines the back light state of the touch button. +The back light led would be on when Light Switch is powered on if the parameter is set to '1'. +Otherwise the back light led would be off. - - This parameter defines the relays state. The led will be turned on with pink color when the button is touched to tur on relay if this paramtere is set to '1'. Otherwise the ledstate is not changed. + + This parameter defines the relays state. +The led will be turned on with pink color when the button is touched to turn on relay if this paramtere is set to '1'. +Otherwise the led state is not changed. - - This parameter defines the on/off status of relay needs to be saved. The status will be saved when relay status is changed if this parameter is set to '1'. Otherwise the relay stataus is not saved. The Light Switch will restore the relay On/Off status when powered again. + + This parameter defines the on/off status of relay needs to be saved or not. +The status will be saved when relay status is changed if this parameter is set to '1'; otherwise the relay stataus is not saved. +The Light Switch will restore the relay On/Off status when is powered on again. - - This parameter defines which endpoint is mapped to root device (Endpoint 0). 0 - No endpoint is mapped to root device. 1 - Endpoint 1 is mapped to root device. 2 - Endpoint 2 is mapped to root device. 3 - Both endpoint 1 and 2 are mapped to root device. + + This parameter defines which endpoint is mapped to root device (Endpoint 0). +The valid values are explaned as follows. Default value is 1. +0 - No endpoint is mapped to root device; 1 - Endpoint 1 is mapped to root device; 2 - Endpoint 2 is mapped to root device; 3 - Both endpoint 1 and 2 are mapped to root device. +For example, assume this parameter is set to 1 (default value). Gateway or other devices (such as door/window sensor, motion sensor, etc.) that is associated +with Light Switch send a command BASIC_SET = 0xFF to Light Switch, the relay in endpoint 1 will be turned on, and other relay status will not be changed. diff --git a/config/shenzen_neo/ls03ch.xml b/config/shenzen_neo/ls03ch.xml index 3d86dfa1ec..854c5717dc 100644 --- a/config/shenzen_neo/ls03ch.xml +++ b/config/shenzen_neo/ls03ch.xml @@ -1,16 +1,28 @@ - - https://www.szneo.com/en/products/show.php?id=237 - images/shenzen_neo/ls03ch.jpg - Prepaire z-wave controller for inclusion and press any button 3 times within 1.5 seconds to start the pairing process - Prepaire z-wave controller for exclusion and press any button 3 times within 1.5 seconds to start the exclusion process + Shenzhen NEO Electronics (Neo-CoolCam) Light Switch (3 channels) 3 gang lightswitch EU 868.42 MHz + http://www.openzwave.com/device-database/0258:102b:0200 + https://szneo.com/en/products/show.php?id=237 + images/shenzhen-neo/eu-3.png + Set Z-Wave gateway into inclusion mode (refer to gateway user manual). +Touch any button three times continuously within 1,5 seconds, then Light Switch will enter into inclusion mode. +Meanwhile, LED light would flash red colour five time on and off alternately. + Set Z-Wave gateway into exclusion mode (refer to gateway user manual). +Touch any button three times continuously within 1,5 seconds, then Light Switch will enter into exclusion mode. + Touch and hold any button for 10 seconds, then release the button. +LEF lights would flash red (1CH:pink) color 5 times within 2s after resetting successfully. +During the resetting process, please make sure the Light Switch is powered on all the time. + https://szneo.com/en/products/show.php?id=237 + CEPT (Europe) + EU-3 + https://szneo.com/en/products/show.php?id=236 + U.S. / Canada / Mexico + US-3 Initial Release + Added pictures, descriptions and metadata From a609538e4e33efc40de811e92760d8817eb556e3 Mon Sep 17 00:00:00 2001 From: Dmitry Blokhin Date: Mon, 18 Jan 2021 09:31:43 +0200 Subject: [PATCH 044/198] Bump ls03ch.xml revision --- config/shenzen_neo/ls03ch.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/shenzen_neo/ls03ch.xml b/config/shenzen_neo/ls03ch.xml index 854c5717dc..86cccecc7e 100644 --- a/config/shenzen_neo/ls03ch.xml +++ b/config/shenzen_neo/ls03ch.xml @@ -1,5 +1,5 @@ - + Shenzhen NEO Electronics (Neo-CoolCam) Light Switch (3 channels) 3 gang lightswitch EU 868.42 MHz From 42cee713564ccb511ff960a1fff6fccfb0b52b12 Mon Sep 17 00:00:00 2001 From: Dmitry Blokhin Date: Mon, 18 Jan 2021 09:38:02 +0200 Subject: [PATCH 045/198] Bump ls01ch.xml revision --- config/shenzen_neo/ls01ch.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/shenzen_neo/ls01ch.xml b/config/shenzen_neo/ls01ch.xml index 2714f516dd..1136f2853f 100644 --- a/config/shenzen_neo/ls01ch.xml +++ b/config/shenzen_neo/ls01ch.xml @@ -1,5 +1,5 @@ - + Shenzhen NEO Electronics (Neo-CoolCam) Light Switch (1 channel) http://www.openzwave.com/device-database/0258:108c:0003 From f0e3109fdfc145cbcef3a628c4c871c0c3a5b3fe Mon Sep 17 00:00:00 2001 From: Muhammad Zaman Date: Mon, 18 Jan 2021 02:20:15 -0800 Subject: [PATCH 046/198] Update zw095.xml see https://github.com/OpenZWave/open-zwave/issues/2214 for root cause of issue. --- config/aeotec/zw095.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/config/aeotec/zw095.xml b/config/aeotec/zw095.xml index 6934b2bfcf..feaf476f07 100644 --- a/config/aeotec/zw095.xml +++ b/config/aeotec/zw095.xml @@ -250,5 +250,10 @@ Products that are Z-Wave certified can be used and communicate with other Z-Wave + + + + false + From 7c87c9e55892372d87fbc6fbf9b128e8db3cc0a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A5l=20Kristensen?= Date: Mon, 18 Jan 2021 15:12:46 +0100 Subject: [PATCH 047/198] Fixing heatit push button devices --- config/manufacturer_specific.xml | 6 ++++-- config/thermofloor/heatitz4.xml | 11 +++++------ config/thermofloor/heatitz8.xml | 13 +++++++------ 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index 6acab398c9..424d18d5ae 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -1,5 +1,5 @@ - + @@ -810,7 +810,9 @@ - + + + diff --git a/config/thermofloor/heatitz4.xml b/config/thermofloor/heatitz4.xml index d6fde1bccc..72bcfa982b 100644 --- a/config/thermofloor/heatitz4.xml +++ b/config/thermofloor/heatitz4.xml @@ -1,4 +1,4 @@ - + Heatit Z-Push Button 4 @@ -7,7 +7,7 @@ https://www.heatit.com/z-wave/heatit-z-push-button-4/ https://www.heatit.com/z-wave/heatit-z-push-button-4/ images/thermofloor/Heatit-Z-Push-button-8-white.png - https://www.heatit.com/wp-content/uploads/2019/07/Manual_Heatit-Z-Push_Button-4-_FW-1.26_Ver2019-A_ENG.pdf + https://www.thermo-floor.no/media/multicase/documents/_tfasdokumentasjon/heatit%20controls/heatit%20z-push%20button/manual_heatit%20z-push_button%204%20_fw%201.26_ver2019-a_eng.pdf short press any button set controller in inclusion mode press and hold down group 2 keys for 3 seconds set controller in exclusion mode press and hold down group 2 keys for 3 seconds @@ -17,6 +17,7 @@ 45 126 82 (white) 45 126 83 (black) add Heatit Z-Push Button 4 + Fixed Association Groups @@ -33,10 +34,8 @@ - - - - + + diff --git a/config/thermofloor/heatitz8.xml b/config/thermofloor/heatitz8.xml index a32c80b39a..72946c507f 100644 --- a/config/thermofloor/heatitz8.xml +++ b/config/thermofloor/heatitz8.xml @@ -1,4 +1,4 @@ - + Heatit Z-Push Button 8 @@ -7,7 +7,7 @@ https://www.heatit.com/z-wave/heatit-z-push-button-8/ https://www.heatit.com/z-wave/heatit-z-push-button-8/ images/thermofloor/Heatit-Z-Push-button-8-white.png - https://www.heatit.com/wp-content/uploads/2019/07/Manual_Heatit_Z-Push_Button_8_FW_1.26_Ver2019-A_ENG.pdf + https://www.thermo-floor.no/media/multicase/documents/_tfasdokumentasjon/heatit%20controls/heatit%20z-push%20button/manual_heatit_z-push_button_8_fw_1.26_ver2019-a_eng.pdf short press any button set controller in inclusion mode press and hold down group 2 keys for 3 seconds set controller in exclusion mode press and hold down group 2 keys for 3 seconds @@ -17,6 +17,7 @@ 45 125 81 (white) 45 126 81 (black) Made config from manual and zwave alliance + Removed auto include controller to Association Groups @@ -33,10 +34,10 @@ - - - - + + + + From 4ac372a8ca1529a3dee1c2dce5df88a91081babb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A5l=20Kristensen?= Date: Mon, 18 Jan 2021 15:20:23 +0100 Subject: [PATCH 048/198] correct group entries typo --- config/thermofloor/heatitz4.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/thermofloor/heatitz4.xml b/config/thermofloor/heatitz4.xml index 72bcfa982b..0d1ead3ae2 100644 --- a/config/thermofloor/heatitz4.xml +++ b/config/thermofloor/heatitz4.xml @@ -32,7 +32,7 @@ - + From ec6221c5f4129e33f51782cb3b3faf8d5dfcb25a Mon Sep 17 00:00:00 2001 From: Matthew Grimes <7375220+cybergrimes@users.noreply.github.com> Date: Mon, 18 Jan 2021 13:04:01 -0600 Subject: [PATCH 049/198] Add Yale YRD136 push button deadbolt lock Recently added to my system using PushButtonDeadbolt.xml for config, working same as previous YRD110, 210, 216. --- config/manufacturer_specific.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index 6acab398c9..24f9f1b0d0 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -280,6 +280,7 @@ + From 5aefb9e0a0d11218402c8e4944306f5b66b3ab17 Mon Sep 17 00:00:00 2001 From: Matthew Grimes <7375220+cybergrimes@users.noreply.github.com> Date: Mon, 18 Jan 2021 13:05:25 -0600 Subject: [PATCH 050/198] Update manufacturer_specific.xml --- config/manufacturer_specific.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index 24f9f1b0d0..9494b690bd 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -1,5 +1,5 @@ - + From f392a3250292ac04ad08d2018e81f65baf1eb764 Mon Sep 17 00:00:00 2001 From: nechry Date: Mon, 18 Jan 2021 20:33:22 +0100 Subject: [PATCH 051/198] Add bitmask on param 1 --- config/logicsoft/ZDB5100.xml | 8 +++++--- cpp/build/testconfigversions.cfg | 28 ++++++++++++++++++++++------ 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/config/logicsoft/ZDB5100.xml b/config/logicsoft/ZDB5100.xml index a64c59eeba..53276735d1 100644 --- a/config/logicsoft/ZDB5100.xml +++ b/config/logicsoft/ZDB5100.xml @@ -1,5 +1,6 @@ - + Matrix MATRIX ZDB5100 is a dimmer wall switch module with four backlit pushbuttons. MATRIX is designed to fit into 1-module FUGA® wall boxes (Danish standard). @@ -17,12 +18,13 @@ Initial Metadata Import from Z-Wave Alliance Database - https://products.z-wavealliance.org/products/3399/xml Convert param 1 to a bitset - Remove duplicate entry + Remove duplicate entry + Add bitmask on param 1 - + This parameter specifies which pushbutton(s) that shall be used to control the built-in dimmer. diff --git a/cpp/build/testconfigversions.cfg b/cpp/build/testconfigversions.cfg index 9089711e7c..4de370bdac 100644 --- a/cpp/build/testconfigversions.cfg +++ b/cpp/build/testconfigversions.cfg @@ -1703,6 +1703,10 @@ 'Revision' => 2, 'md5' => '8a255b9f1762edab6edf809ac54964910f02427f3c215bb1def2741e8737b5479eb7ae3673be4f222558f3d70af66e3394ba16958dd9cb1dfd3e3b0c57122aa1' }, + 'config/inovelli/lzw45.xml' => { + 'Revision' => 6, + 'md5' => 'f3ec59088f41cc1697bb1e0d17df7644923b0c282974064b8318b681ecb9700f2b7bef530db54c752bff6d278217b6b8bd3c02e368391d54a1dd4549cf2ac767' + }, 'config/inovelli/lzw60.xml' => { 'Revision' => 1, 'md5' => 'd279c5b9dee85d2886f21b484af5ebd146c8189e480b6b676da38a0a3545c08194fab6a6c0b6c4de8f3cf145f2906d774af4bc703cb2dab9815f8d53f05c8b01' @@ -1916,8 +1920,8 @@ 'md5' => '88bf6abcbe1a82e590f415571cb96d9304ef77fedc43eea98b372142c84f79b94d001b87398f5610290d3c19ba79e59d856874f0b3fd3c65d2ffaea750d7e971' }, 'config/logicsoft/ZDB5100.xml' => { - 'Revision' => 2, - 'md5' => 'b931b0c85893c47f635431f0beab6f294298d86d7c948bef0e5148998132f1b70b951a64f20b2f725787fae9d56ae0b00ad739ab6fbed807c36130ba268536e1' + 'Revision' => 5, + 'md5' => '3145ca4b1a0d82f196c79590e28841826165c6c0c6a018260d7506c743bb16b424265e3ac56e36da8755385442f27222fc9983c5a4ce5974fe5d215927f623cb' }, 'config/logicsoft/ZHC5002.xml' => { 'Revision' => 1, @@ -1928,8 +1932,8 @@ 'md5' => '4d34aeaaea917c229bedbb737e4de1550b2d7db5f9e61566a1c0a39966b6442d381d01f93714e12aae1404797d36854274cc4063dd7424b00d27da238b17a36a' }, 'config/manufacturer_specific.xml' => { - 'Revision' => 152, - 'md5' => '7587b9d94a2ee88564d9c56268f5bac0735a4e2b836ca19eb4778f57a29d5a342085995134eeaaa1307c4c2bc5ce506693e9140f7f23097a1aceb6046a94cb4d' + 'Revision' => 155, + 'md5' => '358317ac52fb6ee73a9c873b2c3c5d2b67016ec2bfc9496a6a40ec4c8893fdf2abbfb75bb84a27376061d038c9e5a42b43e0505e884bccef9284004f3dfce5ff' }, 'config/mcohome/a8-9.xml' => { 'Revision' => 1, @@ -2503,6 +2507,14 @@ 'Revision' => 1, 'md5' => '59652dc6da375fc15e84a385f1d90799e3fc7d6a6295d5f2eb6b28d2d965029a6eae376a21e326b3ce9d85dab066a46282db1a7edaeea29344d075d880c87601' }, + 'config/ring/contact-sensor-v2.xml' => { + 'Revision' => 1, + 'md5' => '21f67911a54810e3e269da838bd5e41a559f6b1e983ebcd38ccb1fc7d002831009bea29ec9020f47b988a0f99e5badc8fbf27cdd9f24ac10a27650f33af62160' + }, + 'config/ring/motion-detector-v2.xml' => { + 'Revision' => 1, + 'md5' => '40691ad61c15ad9d6cf90f46b2e04e707809db8f5db55250dacce93c19bf6c2057d1ba4b190995e40c044bc4f9f6bd2fa226b5b54935d1a6649632da0bc21d4b' + }, 'config/schlage/BE468.xml' => { 'Revision' => 2, 'md5' => '4b373a2ecad0691860087e425fea93ca9914330abef2b1b90ee39b4f8b6fd7298a832578640873ba6662383801e04601a8335062f20f4f787eff432c233ac31c' @@ -2748,9 +2760,13 @@ 'md5' => 'b065d0460c3da5e6bab88657b36d0c840db877c3c0c89c26313d7fd4bd12f7f57af2045cf89bcd689449989f0902f3ae3c6487fa9842dc45ca4538931e4a134e' }, 'config/thermofloor/heatit-zdim.xml' => { - 'Revision' => 1, - 'md5' => '29fc827fce0ac074d0508e2b677861d3d795f7000a5650596cbd6c4f7eaf30b4ed88915f82a0cf0946a2d302bb5def71f258e0b960a59b16571aac1d3ac13ec2' + 'Revision' => 2, + 'md5' => '627f5761aa76f8e6046e8f0e82d4d6b50a1395f76afb05936ffc2b42f95fcc15d490b4f33d0083e2300d8de65a9b05e66ceea516776ca911c2473e8f46bdbd10' }, + 'config/thermofloor/heatit021-v1.92.xml' => { + 'Revision' => 1, + 'md5' => '9839f51c4a1fd1c63a2d12843f73c341c329222b6032895805026752671aa2d58d7513c3d07cd7a9090e6dc7866faa19f7d7efb20f3e37253de0ad6ac1604dea' + }, 'config/thermofloor/heatit021.xml' => { 'Revision' => 9, 'md5' => 'ccb695b1d42cabdee7c16337e69ddc495f7b7ce6bdb208be7f2158c273c566957299a0406037539830b47cdcc853f20f015a3c91976dbf9a76db672fbfd30faf' From b857af350c30a1ac60b2080ae0ed16f571490aa1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Auger?= Date: Mon, 18 Jan 2021 20:34:30 +0100 Subject: [PATCH 052/198] Update contact-sensor-v2.xml --- config/ring/contact-sensor-v2.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/ring/contact-sensor-v2.xml b/config/ring/contact-sensor-v2.xml index e01cb8c264..8f0dd68d54 100644 --- a/config/ring/contact-sensor-v2.xml +++ b/config/ring/contact-sensor-v2.xml @@ -26,8 +26,8 @@ Contact Sensor v2 U.S. / Canada / Mexico - Minor correction Initial Metadata Creation + Minor correction From 0ba115bfdad2b72d0d372ec61a1c68d3a430918e Mon Sep 17 00:00:00 2001 From: nechry Date: Mon, 18 Jan 2021 20:38:33 +0100 Subject: [PATCH 053/198] bump --- config/manufacturer_specific.xml | 2 +- cpp/build/testconfigversions.cfg | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index 540cd006ce..daaa5f4128 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -1,5 +1,5 @@ - + diff --git a/cpp/build/testconfigversions.cfg b/cpp/build/testconfigversions.cfg index 4de370bdac..cb2372dc35 100644 --- a/cpp/build/testconfigversions.cfg +++ b/cpp/build/testconfigversions.cfg @@ -1932,8 +1932,8 @@ 'md5' => '4d34aeaaea917c229bedbb737e4de1550b2d7db5f9e61566a1c0a39966b6442d381d01f93714e12aae1404797d36854274cc4063dd7424b00d27da238b17a36a' }, 'config/manufacturer_specific.xml' => { - 'Revision' => 155, - 'md5' => '358317ac52fb6ee73a9c873b2c3c5d2b67016ec2bfc9496a6a40ec4c8893fdf2abbfb75bb84a27376061d038c9e5a42b43e0505e884bccef9284004f3dfce5ff' + 'Revision' => 156, + 'md5' => '82ec56453fd19065ddf6643d856ae23756287fbc5aa0150d65080fc7aaea161039b08ad39c874c433a5d5a60ae0cf6e249bbc9affa9b3a57f98d510005587845' }, 'config/mcohome/a8-9.xml' => { 'Revision' => 1, @@ -2508,8 +2508,8 @@ 'md5' => '59652dc6da375fc15e84a385f1d90799e3fc7d6a6295d5f2eb6b28d2d965029a6eae376a21e326b3ce9d85dab066a46282db1a7edaeea29344d075d880c87601' }, 'config/ring/contact-sensor-v2.xml' => { - 'Revision' => 1, - 'md5' => '21f67911a54810e3e269da838bd5e41a559f6b1e983ebcd38ccb1fc7d002831009bea29ec9020f47b988a0f99e5badc8fbf27cdd9f24ac10a27650f33af62160' + 'Revision' => 2, + 'md5' => '1f51fedc85cebb63a19943c3635ef4a33748d37e9c37bda8c0370ae204903ba9325af12ca3b6ef22a32d01d929d02e97bf48c81fdb09b1c003bcf95f171ab479' }, 'config/ring/motion-detector-v2.xml' => { 'Revision' => 1, @@ -2619,6 +2619,10 @@ 'Revision' => 1, 'md5' => '8f7ab98b4ab3f08f2d56bf834a8dc001973d58b06672ad049426a332b32bfb8072817ff714e22e89f57bcfda113651eb809c8d0e9010f035176feb5050af4bef' }, + 'config/simon/10002020-13X.xml' => { + 'Revision' => 1, + 'md5' => 'd2164162991f71803dffa110f7a4c65fc181cb8563b63097f07362a1cac2e2ac4a88ec775dad27c875b82b28ac3197822c1a69e08ac0e21c7bf2aefe04107e22' + }, 'config/simon/10002034-13X.xml' => { 'Revision' => 3, 'md5' => '8bb9641949c548b619a32d4169dd3f3b14367fd98bcc0168ffb6402fab467d0821f1a011e5be2987eab93ccad87692aaea9a63ee568722dc05e69c4a22359485' From f107c27d89e7c46a87ee9b8f808589a2a119f70e Mon Sep 17 00:00:00 2001 From: nechry Date: Mon, 18 Jan 2021 20:41:55 +0100 Subject: [PATCH 054/198] bump --- config/manufacturer_specific.xml | 2 +- cpp/build/testconfigversions.cfg | 20 ++++++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index c132f9a7c0..ad6d63d9f8 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -1,5 +1,5 @@ - + diff --git a/cpp/build/testconfigversions.cfg b/cpp/build/testconfigversions.cfg index cb2372dc35..8728d3990c 100644 --- a/cpp/build/testconfigversions.cfg +++ b/cpp/build/testconfigversions.cfg @@ -475,6 +475,10 @@ 'Revision' => 14, 'md5' => '72b0c1a02e59692b581f0f242a36b9c0c96f97d94217e7f391d219130f73df398abdc8370dcdffd74462d41b9aa1bf69498d0d04c3c147ed89a093970d25fef7' }, + 'config/assa_abloy/yrm276.xml' => { + 'Revision' => 1, + 'md5' => '85f0bb84ad6fc350a6e916a4931d91adc77427366f8394bf07de3c9ca1394bf5a5dce576d6a4dd107097017454e4397f800ac597bec7fee8047a69a1709b2d12' + }, 'config/august/asl-03.xml' => { 'Revision' => 2, 'md5' => 'c20731a4c1ed5261983c163c619c36085cab448344caa87203a45f89938678cd755708bf67bb0bc997bc61120051ae0355e4465f7e50a83420f4fc12e9752ac0' @@ -1932,8 +1936,8 @@ 'md5' => '4d34aeaaea917c229bedbb737e4de1550b2d7db5f9e61566a1c0a39966b6442d381d01f93714e12aae1404797d36854274cc4063dd7424b00d27da238b17a36a' }, 'config/manufacturer_specific.xml' => { - 'Revision' => 156, - 'md5' => '82ec56453fd19065ddf6643d856ae23756287fbc5aa0150d65080fc7aaea161039b08ad39c874c433a5d5a60ae0cf6e249bbc9affa9b3a57f98d510005587845' + 'Revision' => 157, + 'md5' => '12ceed239042dd7ece1176b0583dfeefdfe6a466ffd558501a1972f4c981eca9f952d8a246282bbcbd919ad7911ff34e5bc0fedb291b83254af498884604544b' }, 'config/mcohome/a8-9.xml' => { 'Revision' => 1, @@ -2560,16 +2564,16 @@ 'md5' => 'af10355b77d03b65fadf93f853057ded42d39a421df623b45dec230e9b55b34aef95eeded78e70212c02ae9e71745b45e63978706a3093d14a7f391a9177b560' }, 'config/shenzen_neo/ls01ch.xml' => { - 'Revision' => 1, - 'md5' => '27118871f8fd4290219a3f2988620725e14515fe70545b90e47940f78cd8f41ab72675a8401848d9899a0f712dafa52d8eb5ece68d633cf3556bb3b2af9f6a19' + 'Revision' => 2, + 'md5' => '59404ff10eff881692c709bbcec4717aff3179e546253171970482f37188a1f38f77fc3f6231841b5d1c47d8d7fd8983138a53e98cb3b2532b34f9d31ee8f4b5' }, 'config/shenzen_neo/ls02ch.xml' => { - 'Revision' => 1, - 'md5' => '54536587d5b748daabf86c94f72a62e6558c67a244f4da46e4c9dd63ba369b8c240a7f5f678ff58ea23dacf11913bfa1a23a11db265e715a089dc2f5e3fd3d7b' + 'Revision' => 2, + 'md5' => '9d83ab76ccbac89e559c98979142ead8da4851cff7529fb3ed5cfb9b7cb9f393f7ecb823be8c50e768862449b2310e6facec1c4979e8569c147df21541716d41' }, 'config/shenzen_neo/ls03ch.xml' => { - 'Revision' => 1, - 'md5' => '28310b3ed41fa108d60236abafc5cee2a0db2d92d9de756aedc227746bc80c9958adfe38571c63381bf5c5a23ac54b5aa75bf83ea600e82e172cedba03074b04' + 'Revision' => 2, + 'md5' => 'a0777d5e97620acc8b2b93df1adf51c848a45c379bd4e900ac3c9d9b8b61446273e2afb917faa71248c5ac467513b75050e0f6fbc5c3dc43f3aeadbd0eb85ca3' }, 'config/shenzen_neo/nas-ab01z.xml' => { 'Revision' => 4, From f4bfd3b9c3477521ed0155308536fa582f840e46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Auger?= Date: Mon, 18 Jan 2021 20:45:28 +0100 Subject: [PATCH 055/198] Update manufacturer_specific.xml --- config/manufacturer_specific.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index 424d18d5ae..36829f7d6a 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -1,5 +1,5 @@ - + From 1e5b719dd13b10f3d951e9b33c036d842b70cbe2 Mon Sep 17 00:00:00 2001 From: nechry Date: Mon, 18 Jan 2021 20:48:01 +0100 Subject: [PATCH 056/198] bump --- config/manufacturer_specific.xml | 2 +- cpp/build/testconfigversions.cfg | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index 8bd86a43b5..00204d7401 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -1,5 +1,5 @@ - + diff --git a/cpp/build/testconfigversions.cfg b/cpp/build/testconfigversions.cfg index 8728d3990c..4e8df2e3db 100644 --- a/cpp/build/testconfigversions.cfg +++ b/cpp/build/testconfigversions.cfg @@ -1936,8 +1936,8 @@ 'md5' => '4d34aeaaea917c229bedbb737e4de1550b2d7db5f9e61566a1c0a39966b6442d381d01f93714e12aae1404797d36854274cc4063dd7424b00d27da238b17a36a' }, 'config/manufacturer_specific.xml' => { - 'Revision' => 157, - 'md5' => '12ceed239042dd7ece1176b0583dfeefdfe6a466ffd558501a1972f4c981eca9f952d8a246282bbcbd919ad7911ff34e5bc0fedb291b83254af498884604544b' + 'Revision' => 158, + 'md5' => '1f79ae33949bc8c1cf05ab2339b8f3a5899b0a0b118a655b1ab49b21f5036f5ed169ffc146f85f3509ce07060215386510f78096f91cb381a3a6f60426e78188' }, 'config/mcohome/a8-9.xml' => { 'Revision' => 1, @@ -2796,12 +2796,12 @@ 'md5' => 'c230bb573e64439be9d40720f4c5a72e901018078ab9d778aaac156666e248686706fe9d81f7b19a9ada774d9284a8a05c4ef1ef2aed9fb5a762c5c05ad1547e' }, 'config/thermofloor/heatitz4.xml' => { - 'Revision' => 1, - 'md5' => '57e5d7ee681bf0379054de7b35cb233d8cb2621d4c1741a85278c116a49ae4dfe483e79d605a9c8b0ff1ee4fd2154504bc65327524985cf868b05330df1ac41b' + 'Revision' => 2, + 'md5' => '2be6250742eb2ed930e0aef28513fb85da3dd37f00824a45c0a7af60797954ec46ccb32df5e4ec15a18e48e8cfe199639f77405d76749455d7850d0869be816b' }, 'config/thermofloor/heatitz8.xml' => { - 'Revision' => 1, - 'md5' => 'b55218c2be64c855325a1f781e259d016ca1adeaf0fab563e58ec6a5b0131f5fb88bfedb810cc40555d0e95e90a5c26ff2ff26d870242be4e01ed85c5868bb7c' + 'Revision' => 2, + 'md5' => '1fd512de745b166c79f9d16742f87c10b86ef0c259b504f3d2cb9ac081c22ed96c292a68394a5a7be110aafffa67ee82cb54d2f28e6d1c48cf51ff26fc32428f' }, 'config/trane/TZEMT400AB32MAA.xml' => { 'Revision' => 3, From 62fc2353d499ae6a366878573ea7c5b7184d46d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Auger?= Date: Mon, 18 Jan 2021 20:48:56 +0100 Subject: [PATCH 057/198] Update manufacturer_specific.xml --- config/manufacturer_specific.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index 9494b690bd..972716b13e 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -1,5 +1,5 @@ - + From c6f408332f330746064973460cefae62f3831c8f Mon Sep 17 00:00:00 2001 From: nechry Date: Mon, 18 Jan 2021 20:51:08 +0100 Subject: [PATCH 058/198] bump --- config/manufacturer_specific.xml | 2 +- cpp/build/testconfigversions.cfg | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index bca42a07be..8ef74fdd3f 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -1,5 +1,5 @@ - + diff --git a/cpp/build/testconfigversions.cfg b/cpp/build/testconfigversions.cfg index 4e8df2e3db..4d55e57249 100644 --- a/cpp/build/testconfigversions.cfg +++ b/cpp/build/testconfigversions.cfg @@ -1936,8 +1936,8 @@ 'md5' => '4d34aeaaea917c229bedbb737e4de1550b2d7db5f9e61566a1c0a39966b6442d381d01f93714e12aae1404797d36854274cc4063dd7424b00d27da238b17a36a' }, 'config/manufacturer_specific.xml' => { - 'Revision' => 158, - 'md5' => '1f79ae33949bc8c1cf05ab2339b8f3a5899b0a0b118a655b1ab49b21f5036f5ed169ffc146f85f3509ce07060215386510f78096f91cb381a3a6f60426e78188' + 'Revision' => 159, + 'md5' => 'a7b5ac5a8efcfdbdd028bef54da628fddade3e30f1e495e10ca64e0f8d8fc680696d9be7d0a950b89798505c7fcf947b0f05517d7f523eb6d8b36ebe3f2e5dba' }, 'config/mcohome/a8-9.xml' => { 'Revision' => 1, From 7a5e7acf6d67421e00f3edf7aa5a49a464393296 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Auger?= Date: Mon, 18 Jan 2021 20:56:00 +0100 Subject: [PATCH 059/198] Update zw095.xml --- config/aeotec/zw095.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/config/aeotec/zw095.xml b/config/aeotec/zw095.xml index feaf476f07..ca4fa7d4c4 100644 --- a/config/aeotec/zw095.xml +++ b/config/aeotec/zw095.xml @@ -1,7 +1,7 @@ +--> http://www.openzwave.com/device-database/0086:005F:0102 images/aeotec/zw095.png @@ -21,6 +21,7 @@ Products that are Z-Wave certified can be used and communicate with other Z-Wave Initial Metadata Import from Z-Wave Alliance Database - https://products.z-wavealliance.org/products/1289/xml Updated Metadata Import from Z-Wave Alliance Database - https://products.z-wavealliance.org/products/1596/xml Updated Metadata Import from Z-Wave Alliance Database - https://products.z-wavealliance.org/products/2046/xml + Configure ordinary lifeline association instead of multi channel lifeline association https://products.z-wavealliance.org/products/2046/ CEPT (Europe) From 7236fe40b96b2918376e010b83f4065fab6ca4d7 Mon Sep 17 00:00:00 2001 From: Matthew Grimes <7375220+cybergrimes@users.noreply.github.com> Date: Mon, 18 Jan 2021 16:40:13 -0600 Subject: [PATCH 060/198] Initial config for YRD136/156 Configuration parameters from manufacturer document here: https://products.z-wavealliance.org/ProductManual/File?folder=&filename=MarketCertificationFiles/3446/YRD136%20FINAL-compressed%20(1).pdf I originally attached this device to an existing config but it looks like too many parameters have changed. I do not have a YRD156 but document for that device is same config parameters. They share a product page on manufacturer website, just need device ID numbers. --- config/assa_abloy/ProSLKey-FreeDeadbolt.xml | 100 ++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 config/assa_abloy/ProSLKey-FreeDeadbolt.xml diff --git a/config/assa_abloy/ProSLKey-FreeDeadbolt.xml b/config/assa_abloy/ProSLKey-FreeDeadbolt.xml new file mode 100644 index 0000000000..38f31d426b --- /dev/null +++ b/config/assa_abloy/ProSLKey-FreeDeadbolt.xml @@ -0,0 +1,100 @@ + + + Yale Pro SL Key-Free Deadbolt (YRD136 or YRD156) + Never worry about the hassle of carrying around or losing your keys again. Lock and unlock your home with ease from the back-lit keypad. Create unique entry codes for friends, family, service providers, and renters. The YRD136 has Z-Wave Plus built in so you can easily integrate it into a compatible smart home or alarm system with one-touch enrollment. + http://www.openzwave.com/device-database/0129:803b:0508 + https://us.yalehome.com/en/yalehome-products/yale-pro-sl-yrd156yrd136/yale-pro-sl-yrd156yrd136/prosl/ + images/assa_abloy/ProSLKey-FreeDeadbolt.png + https://products.z-wavealliance.org/ProductManual/File?folder=&filename=MarketCertificationFiles/3446/YRD136%20FINAL-compressed%20(1).pdf + + 1. Remove the battery cover. + 2. Press button and hold until unit beeps two (2) times. + 3. Release button and network joining automatically begins. + 4. Replace battery cover. + + 1. Remove the battery cover. + 2. Press button and hold until unit beeps five (5) times. + 3. Release button and network removal automatically begins. + 4. Replace battery cover. + https://products.z-wavealliance.org/products/3446/ + U.S. / Canada / Mexico + YRD136 + + + + Initial product configuration + +--> + + + + Disable the door sensor alarm function. + + + + + + + + + + seconds; after successful code entry and unit unlocks, it will automatically re-lock after specified time (30 = default value) + + + + The number of invalid code entries lock will accept before sending TAMPER Alarm. + When number of wrong code entries is exceeded, lock will disable keypad for the time specified by Shutdown Time parameter. (5 = default) + + + + + + + + + + + + number of seconds unit will be inoperable after number of wrong code entries is exceeded (60 = default) + + + + Normal Mode: Master code and all user codes enabled (default). + Vacation Mode: Master code enabled, all user codes disabled. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 73dbada23abfb37c90d820ab1e728b0d30ddfc44 Mon Sep 17 00:00:00 2001 From: Matthew Grimes <7375220+cybergrimes@users.noreply.github.com> Date: Mon, 18 Jan 2021 16:41:15 -0600 Subject: [PATCH 061/198] Product image for Yale YRD136/156 --- .../images/assa_abloy/ProSLKey-FreeDeadbolt.png | Bin 0 -> 12387 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 config/images/assa_abloy/ProSLKey-FreeDeadbolt.png diff --git a/config/images/assa_abloy/ProSLKey-FreeDeadbolt.png b/config/images/assa_abloy/ProSLKey-FreeDeadbolt.png new file mode 100644 index 0000000000000000000000000000000000000000..c674c1868c3d7478d117912fe3687467025e9aa8 GIT binary patch literal 12387 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 literal 0 HcmV?d00001 From f96869f21f661f2a27a2485aa52d22ddb0e234c6 Mon Sep 17 00:00:00 2001 From: Matthew Grimes <7375220+cybergrimes@users.noreply.github.com> Date: Mon, 18 Jan 2021 16:43:09 -0600 Subject: [PATCH 062/198] Update Assa Abloy/Yale YRD136 for new config Originally I pointed to an existing config, discovered config parameters had changed too much so created new device specific config file. --- config/manufacturer_specific.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index 8ef74fdd3f..7112975c70 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -1,5 +1,5 @@ - + @@ -280,7 +280,7 @@ - + From 099864bb29600c8e59f8d5b832f624894a2a9601 Mon Sep 17 00:00:00 2001 From: Morten Nielsen <1378165+dotMorten@users.noreply.github.com> Date: Tue, 19 Jan 2021 09:58:09 -0800 Subject: [PATCH 063/198] Fixes build issue with recent VS and reduces maintenance --- cpp/build/winRT/vs2015/OpenZWave.vcxproj | 152 +---------------------- 1 file changed, 1 insertion(+), 151 deletions(-) diff --git a/cpp/build/winRT/vs2015/OpenZWave.vcxproj b/cpp/build/winRT/vs2015/OpenZWave.vcxproj index f511f189b5..ebfedc37d6 100644 --- a/cpp/build/winRT/vs2015/OpenZWave.vcxproj +++ b/cpp/build/winRT/vs2015/OpenZWave.vcxproj @@ -586,157 +586,7 @@ exit 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + From d776b35414d5299045571e722b99eef4face3345 Mon Sep 17 00:00:00 2001 From: Morten Nielsen <1378165+dotMorten@users.noreply.github.com> Date: Tue, 19 Jan 2021 10:24:36 -0800 Subject: [PATCH 064/198] Fix absolute paths --- cpp/build/winRT/vs2015/OpenZWave.vcxproj | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/cpp/build/winRT/vs2015/OpenZWave.vcxproj b/cpp/build/winRT/vs2015/OpenZWave.vcxproj index ebfedc37d6..5d6364fdec 100644 --- a/cpp/build/winRT/vs2015/OpenZWave.vcxproj +++ b/cpp/build/winRT/vs2015/OpenZWave.vcxproj @@ -169,7 +169,7 @@ true true WINRT;%(PreprocessorDefinitions) - ..\..\..\tinyxml;..\..\..\src;E:\GitHub\OpenZWave\openzwave-dotnet-uwp\open-zwave\cpp\hidapi\hidapi;%(AdditionalIncludeDirectories) + ..\..\..\tinyxml;..\..\..\src;..\..\..\hidapi\hidapi;%(AdditionalIncludeDirectories) Console @@ -189,7 +189,7 @@ exit 0 true true WINRT;%(PreprocessorDefinitions) - ..\..\..\tinyxml;..\..\..\src;E:\GitHub\OpenZWave\openzwave-dotnet-uwp\open-zwave\cpp\hidapi\hidapi;%(AdditionalIncludeDirectories) + ..\..\..\tinyxml;..\..\..\src;..\..\..\hidapi\hidapi;%(AdditionalIncludeDirectories) Console @@ -209,7 +209,7 @@ exit 0 true true LITTLE_ENDIAN;WINRT;%(PreprocessorDefinitions) - ..\..\..\tinyxml;..\..\..\src;E:\GitHub\OpenZWave\openzwave-dotnet-uwp\open-zwave\cpp\hidapi\hidapi;%(AdditionalIncludeDirectories) + ..\..\..\tinyxml;..\..\..\src;..\..\..\hidapi\hidapi;%(AdditionalIncludeDirectories) Console @@ -230,7 +230,7 @@ exit 0 true true LITTLE_ENDIAN;WINRT;%(PreprocessorDefinitions) - ..\..\..\tinyxml;..\..\..\src;E:\GitHub\OpenZWave\openzwave-dotnet-uwp\open-zwave\cpp\hidapi\hidapi;%(AdditionalIncludeDirectories) + ..\..\..\tinyxml;..\..\..\src;..\..\..\hidapi\hidapi;%(AdditionalIncludeDirectories) Console @@ -250,7 +250,7 @@ exit 0 true true LITTLE_ENDIAN;WINRT;%(PreprocessorDefinitions) - ..\..\..\tinyxml;..\..\..\src;E:\GitHub\OpenZWave\openzwave-dotnet-uwp\open-zwave\cpp\hidapi\hidapi;%(AdditionalIncludeDirectories) + ..\..\..\tinyxml;..\..\..\src;..\..\..\hidapi\hidapi;%(AdditionalIncludeDirectories) Console @@ -271,7 +271,7 @@ exit 0 true true LITTLE_ENDIAN;WINRT;%(PreprocessorDefinitions) - ..\..\..\tinyxml;..\..\..\src;E:\GitHub\OpenZWave\openzwave-dotnet-uwp\open-zwave\cpp\hidapi\hidapi;%(AdditionalIncludeDirectories) + ..\..\..\tinyxml;..\..\..\src;..\..\..\hidapi\hidapi;%(AdditionalIncludeDirectories) Console @@ -291,7 +291,7 @@ exit 0 true true WINRT;%(PreprocessorDefinitions) - ..\..\..\tinyxml;..\..\..\src;E:\GitHub\OpenZWave\openzwave-dotnet-uwp\open-zwave\cpp\hidapi\hidapi;%(AdditionalIncludeDirectories) + ..\..\..\tinyxml;..\..\..\src;..\..\..\hidapi\hidapi;%(AdditionalIncludeDirectories) Console From ad6ee386b3b0a3adba604f7f5cea59d9c2d1b5f3 Mon Sep 17 00:00:00 2001 From: Morten Nielsen <1378165+dotMorten@users.noreply.github.com> Date: Tue, 19 Jan 2021 10:34:56 -0800 Subject: [PATCH 065/198] Ensure everything is included for linking Also reordered entries to match the win32 csproj, so it's easier to sync up in the future --- cpp/build/winRT/vs2015/OpenZWave.vcxproj | 37 +++++++++++++++--------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/cpp/build/winRT/vs2015/OpenZWave.vcxproj b/cpp/build/winRT/vs2015/OpenZWave.vcxproj index 5d6364fdec..311aff9e17 100644 --- a/cpp/build/winRT/vs2015/OpenZWave.vcxproj +++ b/cpp/build/winRT/vs2015/OpenZWave.vcxproj @@ -332,6 +332,7 @@ exit 0 + @@ -357,12 +358,13 @@ exit 0 - + + @@ -370,6 +372,7 @@ exit 0 + @@ -384,9 +387,15 @@ exit 0 - + + + + + + + + - @@ -451,6 +460,7 @@ exit 0 + false @@ -482,21 +492,12 @@ exit 0 - - - - - - - - - - + @@ -517,8 +518,16 @@ exit 0 + + + + + + + + + - From 6df9b70b93a654b29802b67bc06ae736ccd96546 Mon Sep 17 00:00:00 2001 From: Ben Ootjers Date: Wed, 20 Jan 2021 20:23:44 +0100 Subject: [PATCH 066/198] added: McoHome MH10-PM2.5-WD --- config/manufacturer_specific.xml | 1 + config/mcohome/mh10pm25wd.xml | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 config/mcohome/mh10pm25wd.xml diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index 8ef74fdd3f..a694094cbc 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -1254,6 +1254,7 @@ + diff --git a/config/mcohome/mh10pm25wd.xml b/config/mcohome/mh10pm25wd.xml new file mode 100644 index 0000000000..5774e4231e --- /dev/null +++ b/config/mcohome/mh10pm25wd.xml @@ -0,0 +1,26 @@ + + + + + + + 0 report disabled, base on 0.1ug/m3 unit, 10 by default, 10*0.1ug/m3=1ug/m3 + + + 0 report disabled, base on 0.5C unit, 1 by default, 1*0.5C=0.5C + + + 0 report disabled, base on 1% unit, 2 by default, 2*1C=2C + + + Restore the factory setting - write only, set to 85 to reset + + + + + + + + + + From 76678f4e5cdd15823dbfbcb91f669cb374d570ca Mon Sep 17 00:00:00 2001 From: Ben Ootjers Date: Wed, 20 Jan 2021 20:29:33 +0100 Subject: [PATCH 067/198] bump revision because of added McoHome MH10-PM2.5-WD --- config/manufacturer_specific.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index a694094cbc..2ade8ea418 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -1,5 +1,5 @@ - + From e9188f33a866d2f6474bd86720704223a0b3c9f6 Mon Sep 17 00:00:00 2001 From: Matthew Grimes <7375220+cybergrimes@users.noreply.github.com> Date: Wed, 20 Jan 2021 13:57:46 -0600 Subject: [PATCH 068/198] Additional parameters for zen16 Add parameters 21 through 24 for device firmware 1.03 (https://www.support.getzooz.com/kb/article/356-zen16-multirelay-change-log/) ------------------ Firmware: 1.03 Added the ability to change relays to NC (normally closed) and customize on/off reports based on the switch / relay position Added DC motor control mode which prevents R1 and R2 to be turned on at the same time --- config/zooz/zen16.xml | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/config/zooz/zen16.xml b/config/zooz/zen16.xml index 847a48ca69..82e4f79f48 100644 --- a/config/zooz/zen16.xml +++ b/config/zooz/zen16.xml @@ -1,5 +1,5 @@ - + Multirelay PRODUCT FEATURES: @@ -38,6 +38,7 @@ SPECIFICATIONS: Initial Metadata Import Updated for firmware version 1.02 + Updated for firmware version 1.03 @@ -153,6 +154,29 @@ SPECIFICATIONS: + + Decide whether you'd like Relay 1 to be normally open (NO) or normally closed (NC). Default normally open. + + + + + + Decide whether you'd like Relay 2 to be normally open (NO) or normally closed (NC). Default normally open. + + + + + + Decide whether you'd like Relay 3 to be normally open (NO) or normally closed (NC). Default normally open. + + + + + + Sync Relay 1 and Relay 2 together to prevent them from being activated at the same time. Default disabled. + + + From 1d98b6a82c9d712be50300fc9fbb09198585e23c Mon Sep 17 00:00:00 2001 From: Nathan Fiscus Date: Wed, 20 Jan 2021 18:10:47 -0700 Subject: [PATCH 069/198] Update Max Value of Inovelli LZW45 Parameter 30 The range for this parameter is too narrow. Currently the max value accepted by the device is 197375. --- config/inovelli/lzw45.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/config/inovelli/lzw45.xml b/config/inovelli/lzw45.xml index 019ee12683..e8324dd27a 100644 --- a/config/inovelli/lzw45.xml +++ b/config/inovelli/lzw45.xml @@ -20,6 +20,7 @@ Updates to work with firmware 1.17 Updates to work with firmware 1.18 Updates parameter 30 to 4 bytes + Updates parameter 30 value max @@ -154,10 +155,10 @@ Default: 0 - + See website for details. - Range: 0 - 65535 + Range: 0 - 197375 Default: 0 From de9640e896124f0d703e99c78a3f2babfb7c0b40 Mon Sep 17 00:00:00 2001 From: Nathan Fiscus Date: Wed, 20 Jan 2021 18:14:39 -0700 Subject: [PATCH 070/198] update revision number --- config/inovelli/lzw45.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/inovelli/lzw45.xml b/config/inovelli/lzw45.xml index e8324dd27a..1e2497a488 100644 --- a/config/inovelli/lzw45.xml +++ b/config/inovelli/lzw45.xml @@ -20,7 +20,7 @@ Updates to work with firmware 1.17 Updates to work with firmware 1.18 Updates parameter 30 to 4 bytes - Updates parameter 30 value max + Updates parameter 30 value max From 8499662ac0b3055267e4605c6bbd24773ae04744 Mon Sep 17 00:00:00 2001 From: Nathan Fiscus Date: Wed, 20 Jan 2021 18:16:35 -0700 Subject: [PATCH 071/198] update other revision number --- config/inovelli/lzw45.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/inovelli/lzw45.xml b/config/inovelli/lzw45.xml index 1e2497a488..b49d7beeb2 100644 --- a/config/inovelli/lzw45.xml +++ b/config/inovelli/lzw45.xml @@ -1,4 +1,4 @@ - + http://www.openzwave.com/device-database/031E:0001:000a images/inovelli/lzw31-sn.png From ee90c896c137b3a473232565c45a51d70c41c431 Mon Sep 17 00:00:00 2001 From: nechry Date: Fri, 22 Jan 2021 11:22:19 +0100 Subject: [PATCH 072/198] Fix metadata on ale Pro SL Key-Free Deadbolt --- config/assa_abloy/ProSLKey-FreeDeadbolt.xml | 21 +++++++++++++-------- cpp/build/testconfigversions.cfg | 20 ++++++++++++++------ 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/config/assa_abloy/ProSLKey-FreeDeadbolt.xml b/config/assa_abloy/ProSLKey-FreeDeadbolt.xml index 38f31d426b..77e1c21ba0 100644 --- a/config/assa_abloy/ProSLKey-FreeDeadbolt.xml +++ b/config/assa_abloy/ProSLKey-FreeDeadbolt.xml @@ -1,30 +1,35 @@ - + + Yale Pro SL Key-Free Deadbolt (YRD136 or YRD156) Never worry about the hassle of carrying around or losing your keys again. Lock and unlock your home with ease from the back-lit keypad. Create unique entry codes for friends, family, service providers, and renters. The YRD136 has Z-Wave Plus built in so you can easily integrate it into a compatible smart home or alarm system with one-touch enrollment. http://www.openzwave.com/device-database/0129:803b:0508 https://us.yalehome.com/en/yalehome-products/yale-pro-sl-yrd156yrd136/yale-pro-sl-yrd156yrd136/prosl/ images/assa_abloy/ProSLKey-FreeDeadbolt.png - https://products.z-wavealliance.org/ProductManual/File?folder=&filename=MarketCertificationFiles/3446/YRD136%20FINAL-compressed%20(1).pdf + https://products.z-wavealliance.org/ProductManual/File?folder=&filename=MarketCertificationFiles/3446/YRD136%20FINAL-compressed%20(1).pdf 1. Remove the battery cover. 2. Press button and hold until unit beeps two (2) times. 3. Release button and network joining automatically begins. - 4. Replace battery cover. + 4. Replace battery cover. + 1. Remove the battery cover. 2. Press button and hold until unit beeps five (5) times. 3. Release button and network removal automatically begins. 4. Replace battery cover. + https://products.z-wavealliance.org/products/3446/ U.S. / Canada / Mexico YRD136 - - - + Initial product configuration - ---> + Fix metadata + + + + diff --git a/cpp/build/testconfigversions.cfg b/cpp/build/testconfigversions.cfg index 4d55e57249..48b45ea8c9 100644 --- a/cpp/build/testconfigversions.cfg +++ b/cpp/build/testconfigversions.cfg @@ -292,8 +292,8 @@ 'md5' => 'eda5882a0b1e3f78c95e51496307d1867a1b3dc756a0b24f705155a3a1996659e67b6af65e60bd4b800548b4b1b6bb57ff591140f2062027545612efbf2a3cfa' }, 'config/aeotec/zw095.xml' => { - 'Revision' => 5, - 'md5' => '64029aa66434ff853d0f5b54dbab6c5ab5039f9307474a6a28bd2405fe318c98f4d3fda8a718fdbc9d8765f8ce7625f6b0f9d245491f90b3559144dc9535fe0b' + 'Revision' => 6, + 'md5' => '2e61f67c818ce40e29881dfc21ac53d6fc51b650d8394a615c02221664d47d53882a967581943faf9fd1b67f9c64ead25d0dee1d50ffc4893876c328ef449f35' }, 'config/aeotec/zw096.xml' => { 'Revision' => 8, @@ -451,6 +451,10 @@ 'Revision' => 2, 'md5' => '4252c298eacb7e31a79c7c8fcee5e2d40b56d9bf865c8eeed53e3a29e8695508d38ffb83f558a41871e13af346c65cbdbc8a7de6caf7c5a1a67af59b5fb384b3' }, + 'config/assa_abloy/ProSLKey-FreeDeadbolt.xml' => { + 'Revision' => 2, + 'md5' => '7a6771adb77b2bbcb11fa6e74733ff064b87311b1530dbfb048bb167d03e5a1b3880ad2d5fa59977080cc3c3b37f3624f457095ebc5770d97d4cf258d68cf0fd' + }, 'config/assa_abloy/PushButtonDeadbolt.xml' => { 'Revision' => 7, 'md5' => 'a39dc67ada1bb3ea32c5be977f635cb4e5758e5006d54b84ef8cb9c8bb91a830718e94758b5701d07af4c17ec3c83a68af34069aaded0e9096f70311e15ae2c5' @@ -1708,8 +1712,8 @@ 'md5' => '8a255b9f1762edab6edf809ac54964910f02427f3c215bb1def2741e8737b5479eb7ae3673be4f222558f3d70af66e3394ba16958dd9cb1dfd3e3b0c57122aa1' }, 'config/inovelli/lzw45.xml' => { - 'Revision' => 6, - 'md5' => 'f3ec59088f41cc1697bb1e0d17df7644923b0c282974064b8318b681ecb9700f2b7bef530db54c752bff6d278217b6b8bd3c02e368391d54a1dd4549cf2ac767' + 'Revision' => 7, + 'md5' => '06c8a460ef78d26a073341a0561641b98f7bb3b1cdd95e56b1f4ad7a28ab34ca3930a232ba023307090017e1fe85d5d83c8d3a0b0fb93dd4050a81c1f48e972c' }, 'config/inovelli/lzw60.xml' => { 'Revision' => 1, @@ -1943,6 +1947,10 @@ 'Revision' => 1, 'md5' => 'd1809616fec114edc52eab80314654c8644550fecaec881193460099bface47dc976da727f2d2b0ed6b06fdea1560a942ba2bf230752722ec64c210ed8ce95db' }, + 'config/mcohome/mh10pm25wd.xml' => { + 'Revision' => 0, + 'md5' => 'ebef8141b4a35af56a90ca212206de80c39e15825c9f1a1101c24e6432d47644609b5d2d95dc19b7dd656fd3dc103fb487910f56f4bc032870290aba77ad4189' + }, 'config/mcohome/mh7h.xml' => { 'Revision' => 3, 'md5' => '03ca338b59a9e520891497741c0c25dd562734b3f6367a4eac65aaa739351a409004c95faab888ae84c523ce1721d9b5842a9f365554dedf6faf6ed9fb6c7cb9' @@ -3096,8 +3104,8 @@ 'md5' => 'bee21869106becfe025892a4f334af530450727b855ffe9418a110bfec9534a4855eca768f82f2c2ad3a8c0e78caf0cba704f1570850bcb28dcb506a1eddb2bc' }, 'config/zooz/zen16.xml' => { - 'Revision' => 3, - 'md5' => '55ba12c1055f187247ebc19314fc2c883023127712cfd38d3bf9ee2e802eb31ee28b61276c122c69e79e6832ccd67bf55a5363a844e7896b23cf900b49619428' + 'Revision' => 4, + 'md5' => 'eab1371f2c81d3dac4edeb677afee22eb684fa157dff73bc89e95c93e0421abd949c382b4f2d2203bf6d4d981e913ed31a3080e649694ffdba1ece3fdc46295a' }, 'config/zooz/zen20.xml' => { 'Revision' => 2, From 72bfb532044ecfdfd946b932b46876df7191cbcc Mon Sep 17 00:00:00 2001 From: Mark Ruys Date: Sun, 24 Jan 2021 20:33:25 +0100 Subject: [PATCH 073/198] Fix uint occurrences --- cpp/src/Node.cpp | 2 +- cpp/src/Node.h | 2 +- cpp/src/command_classes/Supervision.cpp | 2 +- cpp/src/command_classes/Supervision.h | 4 ++-- cpp/src/command_classes/ThermostatSetpoint.h | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cpp/src/Node.cpp b/cpp/src/Node.cpp index 8c8f7b76e8..e33c2d89a7 100644 --- a/cpp/src/Node.cpp +++ b/cpp/src/Node.cpp @@ -4055,7 +4055,7 @@ void Node::WriteMetaDataXML(TiXmlElement *mdElement) // // Generate a new session id for Supervision encapsulation, if supported //----------------------------------------------------------------------------- -uint Node::GetSupervisionSessionId(uint8 _command_class_id) +uint8 Node::GetSupervisionSessionId(uint8 _command_class_id) { if (Internal::CC::CommandClass* cc = GetCommandClass(Internal::CC::Supervision::StaticGetCommandClassId())) { diff --git a/cpp/src/Node.h b/cpp/src/Node.h index 26869ab24c..e7bbd9b68f 100644 --- a/cpp/src/Node.h +++ b/cpp/src/Node.h @@ -913,7 +913,7 @@ namespace OpenZWave map m_changeLog; public: - uint GetSupervisionSessionId(uint8 _command_class_id); + uint8 GetSupervisionSessionId(uint8 _command_class_id); }; } //namespace OpenZWave diff --git a/cpp/src/command_classes/Supervision.cpp b/cpp/src/command_classes/Supervision.cpp index 379c6375d2..fcad4e5e66 100644 --- a/cpp/src/command_classes/Supervision.cpp +++ b/cpp/src/command_classes/Supervision.cpp @@ -41,7 +41,7 @@ namespace OpenZWave { namespace CC { - uint Supervision::m_session_id = 0; + uint8 Supervision::m_session_id = 0; uint8 Supervision::GetSession(uint8 _command_class_id) { diff --git a/cpp/src/command_classes/Supervision.h b/cpp/src/command_classes/Supervision.h index e92f595853..f267eb632d 100644 --- a/cpp/src/command_classes/Supervision.h +++ b/cpp/src/command_classes/Supervision.h @@ -106,8 +106,8 @@ namespace OpenZWave { } - static uint m_session_id; - uint m_command_class_id; // TODO as implemented now we support only a single concurrent supervision call per CC + static uint8 m_session_id; + uint8 m_command_class_id; // TODO as implemented now we support only a single concurrent supervision call per CC void HandleSupervisionReport(uint8 const* _data, uint32 const _length, uint32 const _instance); }; diff --git a/cpp/src/command_classes/ThermostatSetpoint.h b/cpp/src/command_classes/ThermostatSetpoint.h index 3179b34e57..0a84109517 100644 --- a/cpp/src/command_classes/ThermostatSetpoint.h +++ b/cpp/src/command_classes/ThermostatSetpoint.h @@ -88,7 +88,7 @@ namespace OpenZWave private: ThermostatSetpoint(uint32 const _homeId, uint8 const _nodeId); - uint m_supervision_session_id; + uint8 m_supervision_session_id; Internal::VC::ValueDecimal const* m_value; }; } // namespace CC From d29c1e25476e19619770763c087dd7d28ce20217 Mon Sep 17 00:00:00 2001 From: Mark Ruys Date: Sun, 24 Jan 2021 21:43:02 +0100 Subject: [PATCH 074/198] Fix ugly message flag error --- cpp/src/Msg.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/src/Msg.h b/cpp/src/Msg.h index 333d1bee48..f287801aa2 100644 --- a/cpp/src/Msg.h +++ b/cpp/src/Msg.h @@ -54,7 +54,7 @@ namespace OpenZWave { m_MultiChannel = 0x01, // Indicate MultiChannel encapsulation m_MultiInstance = 0x02, // Indicate MultiInstance encapsulation - m_Supervision = 0x03, // Indicate Supervision encapsulation + m_Supervision = 0x04, // Indicate Supervision encapsulation }; Msg(string const& _logtext, uint8 _targetNodeId, uint8 const _msgType, uint8 const _function, bool const _bCallbackRequired, bool const _bReplyRequired = true, uint8 const _expectedReply = 0, uint8 const _expectedCommandClassId = 0); From d39e9cc139dcf182446e70d8e712740a981ba380 Mon Sep 17 00:00:00 2001 From: Joel Knight Date: Sun, 24 Jan 2021 16:01:56 -0700 Subject: [PATCH 075/198] feat: add new type/id for shenzhen neo water sensor --- config/manufacturer_specific.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index ee28d770ec..b9face6d61 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -1641,6 +1641,7 @@ + From 173b111191892ff161b19d58f41b56db0f9fd6ef Mon Sep 17 00:00:00 2001 From: rrozema <1747982+rrozema@users.noreply.github.com> Date: Mon, 25 Jan 2021 16:31:10 +0100 Subject: [PATCH 076/198] Add config for mcohome MH-DT411 touch panel dimmer switch --- config/manufacturer_specific.xml | 1 + config/mcohome/mhdt411.xml | 129 +++++++++++++++++++++++++++++++ 2 files changed, 130 insertions(+) create mode 100644 config/mcohome/mhdt411.xml diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index ee28d770ec..d113ffc77b 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -1261,6 +1261,7 @@ + diff --git a/config/mcohome/mhdt411.xml b/config/mcohome/mhdt411.xml new file mode 100644 index 0000000000..d9fcc5417e --- /dev/null +++ b/config/mcohome/mhdt411.xml @@ -0,0 +1,129 @@ + + + + + Dimmer Switch MH-DT411 + Dimmer switch is a wall panel built-in with Z-Wave Plus module. With it's stylish design and stable performance, the panel can be used to control the light level. It supports basic command class, multi channel command class and multi channel association command class, also works as a repeater in a Z-Wave network. This product can be included and operated in any Z-Wave network with other Z-Wave certified devices from any other manufacturers. + http://www.openzwave.com/device-database/XXXX:YYYY:ZZZZ + http://www.mcohome.com/ProductDetail/3894312.html + http://www.mcohome.com/ProductDetail/3894312.html + Set controller into inclusion mode and press 3 clicks on '+' button to include. If succeeded, green led flashes 4 times. + Set controller into exclusion mode and press 3 clicks on '-' button to exclude. If succeeded, green led flashes 4 times. + Press 10 times of any button or exclude the device from Z-Wave network, then cut off the main power. The factory setting will be restored. + + Information retrieved from manual pages delivered with the product. No revision or date on the manual. + Fixed option 17. Enabled and Disabled where interchanged. + Fixed association group indexes. Was 1, 2, 5, 8. Now 1, 2, 3, 4. + + + + + + + Switch state saved or not when power down + + + + + 0x00 leading edge, 0x01 trailing edge, 0x02 On/off only. Default 0x01. + + + + + + 0 = Auto detection disabled, 1 = Auto detection enabled. + + + + + 0 = LED disabled, 1 - 10 = min level - max level. + + + 1 - 98 percentage minimum brightness level. Must always be less than Maximum (option 6). + + + 1 - 98 percentage minimum brightness level. Must always be higher than Minimum (option 5). + + + Max 2.55s, in 10ms steps. Default = 3 for 30ms. + + + 1 - 99% per step. Recommended not to change. Default value = 1. + + + Max 2.55s, in 10ms steps. Default = 3 for 30ms. + + + 1 - 99% per step. Recommended not to change. Default value = 1. + + + 0 = percentage from the last button-holding touch. 1 - 99 = percentage to set. Default value = 0. + + + 0 = No report during dimming, 1 - 255 = send report in 1 - 255 * 10ms intervals. Default value = 10ms. + + + 0 = Buttons, 1 = Toggle. Default value = Buttons. + + + + + Default value = function disabled. + + + + + + + + Defines which metering values to send to the gateway. Default value = Disabled. + + + + + + + + + + + + + + + + + + + Interval to send unsollicited energy reports to the gateway. Requires option 15 (Energy meter reporting) to be set to anything other than Disabled. Default value is every 10 seconds. + + + Enable or disable beep upon touching '+' and '-'. Default value = Enabled. + + + + + 0 = alarm disabled, 1 - 5000 * 0.01 Ampere alarm enabled (notification to gateway). Default = 0 - alarm disabled. + + + 0 = alarm disabled, 1 - 10000 * 0.1 Volt alarm enabled (notification to gateway). Default = 0 - alarm disabled. + + + Restore factory settings (write only). Default value = Disabled. + + + + + + + + + + + + + + + \ No newline at end of file From 064d4fa0bb3b905102f9c944e948738b823574c2 Mon Sep 17 00:00:00 2001 From: rrozema <1747982+rrozema@users.noreply.github.com> Date: Mon, 25 Jan 2021 16:35:57 +0100 Subject: [PATCH 077/198] mcohome dt411: Added newline, replaced & by + --- config/mcohome/mhdt411.xml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/config/mcohome/mhdt411.xml b/config/mcohome/mhdt411.xml index d9fcc5417e..fc4a39f401 100644 --- a/config/mcohome/mhdt411.xml +++ b/config/mcohome/mhdt411.xml @@ -82,19 +82,19 @@ - + - - - + + + - - - - - - - + + + + + + + Interval to send unsollicited energy reports to the gateway. Requires option 15 (Energy meter reporting) to be set to anything other than Disabled. Default value is every 10 seconds. @@ -126,4 +126,4 @@ - \ No newline at end of file + From 7cbfe88e6d3ca80a7ca20ea93f3c25fa7fa0f402 Mon Sep 17 00:00:00 2001 From: rrozema <1747982+rrozema@users.noreply.github.com> Date: Mon, 25 Jan 2021 16:54:13 +0100 Subject: [PATCH 078/198] Added picture and inverted auto options on association groups --- config/mcohome/mhdt411.xml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/config/mcohome/mhdt411.xml b/config/mcohome/mhdt411.xml index fc4a39f401..aa1c88a23b 100644 --- a/config/mcohome/mhdt411.xml +++ b/config/mcohome/mhdt411.xml @@ -9,6 +9,7 @@ http://www.openzwave.com/device-database/XXXX:YYYY:ZZZZ http://www.mcohome.com/ProductDetail/3894312.html http://www.mcohome.com/ProductDetail/3894312.html + https://img-for-hk.wds168.cn/comdata/95301/product/202005281048115265B2DC16DAB726_b.png Set controller into inclusion mode and press 3 clicks on '+' button to include. If succeeded, green led flashes 4 times. Set controller into exclusion mode and press 3 clicks on '-' button to exclude. If succeeded, green led flashes 4 times. Press 10 times of any button or exclude the device from Z-Wave network, then cut off the main power. The factory setting will be restored. @@ -120,10 +121,10 @@ - - - - + + + + From a8fae8c1a85a8fbb7d45ba3bc9401affbbde98b7 Mon Sep 17 00:00:00 2001 From: rrozema <1747982+rrozema@users.noreply.github.com> Date: Mon, 25 Jan 2021 17:02:00 +0100 Subject: [PATCH 079/198] removed space from picture path --- config/mcohome/mhdt411.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/mcohome/mhdt411.xml b/config/mcohome/mhdt411.xml index aa1c88a23b..a4e911a5fd 100644 --- a/config/mcohome/mhdt411.xml +++ b/config/mcohome/mhdt411.xml @@ -9,7 +9,7 @@ http://www.openzwave.com/device-database/XXXX:YYYY:ZZZZ http://www.mcohome.com/ProductDetail/3894312.html http://www.mcohome.com/ProductDetail/3894312.html - https://img-for-hk.wds168.cn/comdata/95301/product/202005281048115265B2DC16DAB726_b.png + https://img-for-hk.wds168.cn/comdata/95301/product/202005281048115265B2DC16DAB726_b.png Set controller into inclusion mode and press 3 clicks on '+' button to include. If succeeded, green led flashes 4 times. Set controller into exclusion mode and press 3 clicks on '-' button to exclude. If succeeded, green led flashes 4 times. Press 10 times of any button or exclude the device from Z-Wave network, then cut off the main power. The factory setting will be restored. From 94390a8b455bb6fbe3c3d4e435f13f4a9ae358fc Mon Sep 17 00:00:00 2001 From: rrozema <1747982+rrozema@users.noreply.github.com> Date: Mon, 25 Jan 2021 17:09:29 +0100 Subject: [PATCH 080/198] Added ozwinfo page ids --- config/mcohome/mhdt411.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/mcohome/mhdt411.xml b/config/mcohome/mhdt411.xml index a4e911a5fd..c855fe3ddb 100644 --- a/config/mcohome/mhdt411.xml +++ b/config/mcohome/mhdt411.xml @@ -6,7 +6,7 @@ Dimmer Switch MH-DT411 Dimmer switch is a wall panel built-in with Z-Wave Plus module. With it's stylish design and stable performance, the panel can be used to control the light level. It supports basic command class, multi channel command class and multi channel association command class, also works as a repeater in a Z-Wave network. This product can be included and operated in any Z-Wave network with other Z-Wave certified devices from any other manufacturers. - http://www.openzwave.com/device-database/XXXX:YYYY:ZZZZ + http://www.openzwave.com/device-database/015f:5102:d411 http://www.mcohome.com/ProductDetail/3894312.html http://www.mcohome.com/ProductDetail/3894312.html https://img-for-hk.wds168.cn/comdata/95301/product/202005281048115265B2DC16DAB726_b.png From 94144407b342f520cfec6bb1df9b8892f3d23aff Mon Sep 17 00:00:00 2001 From: rrozema <1747982+rrozema@users.noreply.github.com> Date: Mon, 25 Jan 2021 17:28:48 +0100 Subject: [PATCH 081/198] removed auto on the groups, added frequencey name --- config/mcohome/mhdt411.xml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/config/mcohome/mhdt411.xml b/config/mcohome/mhdt411.xml index c855fe3ddb..14ab5334ba 100644 --- a/config/mcohome/mhdt411.xml +++ b/config/mcohome/mhdt411.xml @@ -13,6 +13,7 @@ Set controller into inclusion mode and press 3 clicks on '+' button to include. If succeeded, green led flashes 4 times. Set controller into exclusion mode and press 3 clicks on '-' button to exclude. If succeeded, green led flashes 4 times. Press 10 times of any button or exclude the device from Z-Wave network, then cut off the main power. The factory setting will be restored. + CEPT (Europe) Information retrieved from manual pages delivered with the product. No revision or date on the manual. Fixed option 17. Enabled and Disabled where interchanged. @@ -121,10 +122,10 @@ - - - - + + + + From 2df4512204eaa5f51d3dfc9021df6c3206f27e3e Mon Sep 17 00:00:00 2001 From: Joel Moses Date: Mon, 25 Jan 2021 16:38:19 -0800 Subject: [PATCH 082/198] Support new Dome Mouser id version 0104 --- config/manufacturer_specific.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index ee28d770ec..9c84937a32 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -531,6 +531,7 @@ + From 68441ddd6e4e8e320873d1b617553f7f71a703c4 Mon Sep 17 00:00:00 2001 From: Joel Moses Date: Mon, 25 Jan 2021 16:40:43 -0800 Subject: [PATCH 083/198] Add support for new id 0104 Dome Mouser --- config/dome/0104.xml | 95 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 config/dome/0104.xml diff --git a/config/dome/0104.xml b/config/dome/0104.xml new file mode 100644 index 0000000000..a7e6ac0c09 --- /dev/null +++ b/config/dome/0104.xml @@ -0,0 +1,95 @@ + + + http://www.openzwave.com/device-database/021F:0086:0003 + images/dome/0086.png + https://products.z-wavealliance.org/products/1847/ + The Dome™ Home Automation DMMZ1 Mouser is a powerful rodent electric trap with Z-Wave technology built-in. It kills mice, rats and other rodents quickly, cleanly and humanely with a powerful jolt of electricity. Simply set bait, turn on and place in desired location. When connected to Z-Wave Certified Hub, once the trap is full, it sends out a notification to your smarthome system. You can easily dispose of Mouser’s contents without ever having to touch them. Use the top handle and tip to dispose of caught rodents. Specially designed removable and washable bait tray will allow you to easily replace the bait and set it back up. It operates on 4 AA batteries (not included) and is optimised to last over 50 uses. Mouser features extra-long Z-Wave wireless range (up to 150 ft) and Dome™ DMMZ1 Mouser comes with a 1-year limited warranty. Measurements in inches: 8.75 x 4.5 x 5. Dome™ Home Automation Z-Wave devices give your family peace of mind and security you can count on. With Dome™, you’re always connected and always covered. +• Humanely kills mice, rats and other rodents with a powerful electric shock and sends an alert to your smarthome system when the trap needs to be emptied +• Easy to use: set bait, turn on and place in desired location +Touch free: hold handle and tip to dispose of contents, then set it again +• Up to 150-foot Z-Wave range. Operating Temperature: 32°F - 112°F. Powered by 4 AA batteries (not included) enabling it to be triggered over 50 times +• Z-Wave Plus Certified. Works as a stand alone electronic mouse trap but requires a Z-Wave Certified Hub for notification functionality +• Tested to work with SmartThings, Vera, Staples Connect, HomeSeer, Nexia, Piper, URC, Harmony. Not supported by Wink, DSC, ADT Pulse, 2Gig, Napco, Interlogix, Honeywell (Dome is not associated with listed brands) + + Follow the instructions for your Z-Wave Certified controller to enter inclusion mode. When prompted by the controller: +1. Bring the Mouser to within 10’ of your Z-Wave controller for the inclusion process. After successful pairing, the device can be brought to the desired location. +2. Remove top cover by sliding it back and lifting up. +3. Insert batteries. +4. Press the CONNECT BUTTON quickly 3 times in a row. +5. The LED INDICATOR will flash five times indicating inclusion + + If needed, the Mouser can be reset locally by following these steps. Only do this when your Z-Wave controller is disconnected or otherwise unreachable. Beware that resetting your device will disconnect it from the system: +1. Remove the TOP COVER and confirm that your Mouser is powered up. +2. Press and hold the CONNECT BUTTON for at least 10 seconds then release. A flashing LED INDICATOR indicates a successful factory reset. +3. The Mouser’s memory will be erased to factory settings. + + DMMZ1 + If needed, the Mouser can be reset locally by following these steps. Only do this when your Z-Wave controller is disconnected or otherwise unreachable. Beware that resetting your device will disconnect it from the system: +1. Remove the TOP COVER and confirm that your Mouser is powered up. +2. Press and hold the CONNECT BUTTON for at least 10 seconds then release. A flashing LED INDICATOR indicates a successful factory reset. +3. The Mouser’s memory will be erased to factory settings. + U.S. / Canada / Mexico + Follow the instructions for your Z-Wave Certified controller to enter exclusion mode. +When prompted by the controller: +1. Remove top cover by sliding it back and lifting up. +2. Press the CONNECT BUTTON quickly 3 times in a row. +The LED INDICATOR will flash five times indicating exclusion/disconnection. + https://Products.Z-WaveAlliance.org/ProductManual/File?folder=&filename=Manuals/1847/Mouser API Manual.pdf + Dome Mouser + + Initial Metadata Import from Z-Wave Alliance Database - https://products.z-wavealliance.org/products/1847/xml + + + + + + + + This parameter defines the value sent by the BASIC_SET command to Association Group 2. + 0 Turn Off Device. + 1 to 99 Set Device to Value. + 255 Turn On Device. + + + + + This parameter sets firing mode of the Mouser. + Two firing modes are available: in the first (Continuous Fire,) electricity is passed continuously for the entire duration, + and in the second (Burst Fire,) electricity is passed continuously only for the first minute and it is pulsed at approximately 400 beats per minute for the remainder of the time. + + + + + + + This parameter defines how long the Mouser will fire continuously before it starts to burst-fire + + + + + This parameter enables or disables the indicator LED alarm when the trap is tripped. + + + + + + + This parameter sets the amount of time the LED Indicator blinks after the trap is tripped. + 0 LED Blinks Until Trap is Reset. + 1 to 255 in Hours. + + + + + + + + + + + + + From 5f4952b439c5b0293efcd00073693a11bf9c9407 Mon Sep 17 00:00:00 2001 From: rrozema <1747982+rrozema@users.noreply.github.com> Date: Tue, 26 Jan 2021 13:25:52 +0100 Subject: [PATCH 084/198] Add product picture Finally after a good night sleep understood the instructions (I think) --- config/images/mcohome/015f_5102_d411.png | Bin 0 -> 28471 bytes config/mcohome/mhdt411.xml | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 config/images/mcohome/015f_5102_d411.png diff --git a/config/images/mcohome/015f_5102_d411.png b/config/images/mcohome/015f_5102_d411.png new file mode 100644 index 0000000000000000000000000000000000000000..652e3a2919b558497637693421ffdec68eacaa52 GIT binary patch literal 28471 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://www.openzwave.com/device-database/015f:5102:d411 http://www.mcohome.com/ProductDetail/3894312.html http://www.mcohome.com/ProductDetail/3894312.html - https://img-for-hk.wds168.cn/comdata/95301/product/202005281048115265B2DC16DAB726_b.png + 015f_5102_d411.png Set controller into inclusion mode and press 3 clicks on '+' button to include. If succeeded, green led flashes 4 times. Set controller into exclusion mode and press 3 clicks on '-' button to exclude. If succeeded, green led flashes 4 times. Press 10 times of any button or exclude the device from Z-Wave network, then cut off the main power. The factory setting will be restored. From b44c26e44a74350cb44aebcab13fe5e4de63da9e Mon Sep 17 00:00:00 2001 From: rrozema <1747982+rrozema@users.noreply.github.com> Date: Tue, 26 Jan 2021 13:28:32 +0100 Subject: [PATCH 085/198] Another attempt at getting the picture int --- config/mcohome/mhdt411.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/mcohome/mhdt411.xml b/config/mcohome/mhdt411.xml index ef69ace89c..9e9b6c38ae 100644 --- a/config/mcohome/mhdt411.xml +++ b/config/mcohome/mhdt411.xml @@ -9,7 +9,7 @@ http://www.openzwave.com/device-database/015f:5102:d411 http://www.mcohome.com/ProductDetail/3894312.html http://www.mcohome.com/ProductDetail/3894312.html - 015f_5102_d411.png + mcohome/015f_5102_d411.png Set controller into inclusion mode and press 3 clicks on '+' button to include. If succeeded, green led flashes 4 times. Set controller into exclusion mode and press 3 clicks on '-' button to exclude. If succeeded, green led flashes 4 times. Press 10 times of any button or exclude the device from Z-Wave network, then cut off the main power. The factory setting will be restored. From 1f1e041b7e948c766f66930b92980dc1ee84d8fa Mon Sep 17 00:00:00 2001 From: rrozema <1747982+rrozema@users.noreply.github.com> Date: Tue, 26 Jan 2021 13:31:06 +0100 Subject: [PATCH 086/198] aargh, how hard can this be? --- config/mcohome/mhdt411.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/mcohome/mhdt411.xml b/config/mcohome/mhdt411.xml index 9e9b6c38ae..579da762e1 100644 --- a/config/mcohome/mhdt411.xml +++ b/config/mcohome/mhdt411.xml @@ -9,7 +9,7 @@ http://www.openzwave.com/device-database/015f:5102:d411 http://www.mcohome.com/ProductDetail/3894312.html http://www.mcohome.com/ProductDetail/3894312.html - mcohome/015f_5102_d411.png + images/mcohome/015f_5102_d411.png Set controller into inclusion mode and press 3 clicks on '+' button to include. If succeeded, green led flashes 4 times. Set controller into exclusion mode and press 3 clicks on '-' button to exclude. If succeeded, green led flashes 4 times. Press 10 times of any button or exclude the device from Z-Wave network, then cut off the main power. The factory setting will be restored. From 1ff92a3cff8378491ce667478962bc0ddc5ecbb6 Mon Sep 17 00:00:00 2001 From: rrozema <1747982+rrozema@users.noreply.github.com> Date: Tue, 26 Jan 2021 13:35:38 +0100 Subject: [PATCH 087/198] update revision number --- config/mcohome/mhdt411.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/mcohome/mhdt411.xml b/config/mcohome/mhdt411.xml index 579da762e1..9289165b86 100644 --- a/config/mcohome/mhdt411.xml +++ b/config/mcohome/mhdt411.xml @@ -1,5 +1,5 @@ - + From bacac23d0bbe7c9fcd482df60b23dd22a7fdd7ef Mon Sep 17 00:00:00 2001 From: MNM-TB <69683687+MNM-TB@users.noreply.github.com> Date: Thu, 28 Jan 2021 00:13:02 +0100 Subject: [PATCH 088/198] Added the European version of TZ67 called TZ67G The European version of the TKB home TZ67 dimmer plug has a different ID and type compared to the included version. This version is called TZ67G When copying the line for the TZ67 but changing the id and type accordingly, everything works perfectly. All functionality of the dimmer plug is there. --- config/manufacturer_specific.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index ccd1f12389..0f74bff00d 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -1790,6 +1790,7 @@ + From e3bc426e7b984cf961836a30ad1e91c877169272 Mon Sep 17 00:00:00 2001 From: Zachary Knight Date: Wed, 27 Jan 2021 19:23:41 -0500 Subject: [PATCH 089/198] Added RF9601 --- config/cooper/RF9601.xml | 68 ++++++++++++++++++++++++++++++++ config/manufacturer_specific.xml | 1 + 2 files changed, 69 insertions(+) create mode 100644 config/cooper/RF9601.xml diff --git a/config/cooper/RF9601.xml b/config/cooper/RF9601.xml new file mode 100644 index 0000000000..35bfbd958b --- /dev/null +++ b/config/cooper/RF9601.xml @@ -0,0 +1,68 @@ + + + http://www.openzwave.com/device-database/0503:0000:534C + images/cooper/RF9501.png + https://products.z-wavealliance.org/products/3038/ + RF9501 + U.S. / Canada / Mexico + Eaton’s Z-Wave Plus Wireless Switch + Eaton’s Z-Wave plus wireless switch replaces regular switches (where a neutral is present) to provide local and remote ON/OFF control for most common residential lighting loads including LEDs and certain motor loads. Each switch can be manually and remotely controlled by commands sent from your compatible Z-Wave certified controller. +Features & Benefits: +• Replaces standard switch to add local and wireless control +• Single pole and 3-Way control: Use with standard 3-Way switch or Z-Wave Plus Accessory RF9617 +• Neutral is required for installation +• Supports motors loads up to ½ HP +• Features blue load indicating LED light that can be dimmed in ON or OFF state +https://www.eaton.com/us/en-us/skuPage.RF9601DW.html + + + + + + The configuration value is a signed single byte number. This value may represent a value with no units or may represent a value such as time. 0 to 127 (decimal) represents 0 to 127 seconds of time. -128 to -1 (negative decimal numbers) represents 128 to 255 seconds as calculated by this formula. Config value = desired time in seconds (or desired value) -256 For an example of 172 seconds: config value = 172 - 256 = -84 (decimal) or 0xAC (hex) + + + + + The amount of time in seconds the switch will turn on for when panic mode is trigered. The configuration value is a signed single byte number. This value may represent a value with no units or may represent a value such as time. 0 to 127 (decimal) represents 0 to 127 seconds of time. -128 to -1 (negative decimal numbers) represents 128 to 255 seconds as calculated by this formula. Config value = desired time in seconds (or desired value) -256 For an example of 172 seconds: config value = 172 - 256 = -84 (decimal) or 0xAC (hex) + + + + + The amount of time in seconds the switch will turn off for when panic mode is triggered. The configuration value is a signed single byte number. This value may represent a value with no units or may represent a value such as time. 0 to 127 (decimal) represents 0 to 127 seconds of time. -128 to -1 (negative decimal numbers) represents 128 to 255 seconds as calculated by this formula. Config value = desired time in seconds (or desired value) -256 For an example of 172 seconds: config value = 172 - 256 = -84 (decimal) or 0xAC (hex) + + + + + Power up state of the device + + + + + + + + Enables this switch to participate in panic mode + + + + + + + Adjust brightness of the blue indicator LED with Switch is ON - 0 = OFF 4 = Maximum brightness + + + + + Adjust brightness of the blue indicator LED with Switch is OFF - 0 = OFF 4 = Maximum brightness + + + + + + + + + + + diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index ccd1f12389..592024411d 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -403,6 +403,7 @@ + From fe3bc2dca55669394e7ee17ce7ead9f87c7ced32 Mon Sep 17 00:00:00 2001 From: Zachary Knight Date: Wed, 27 Jan 2021 19:31:02 -0500 Subject: [PATCH 090/198] Update RF9601 xml --- config/cooper/RF9601.xml | 75 +++++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 35 deletions(-) diff --git a/config/cooper/RF9601.xml b/config/cooper/RF9601.xml index 35bfbd958b..77e357f100 100644 --- a/config/cooper/RF9601.xml +++ b/config/cooper/RF9601.xml @@ -1,68 +1,73 @@ - + - http://www.openzwave.com/device-database/0503:0000:534C + http://www.openzwave.com/device-database/001A:0503:534C images/cooper/RF9501.png https://products.z-wavealliance.org/products/3038/ - RF9501 + Eaton RF9601DW U.S. / Canada / Mexico Eaton’s Z-Wave Plus Wireless Switch - Eaton’s Z-Wave plus wireless switch replaces regular switches (where a neutral is present) to provide local and remote ON/OFF control for most common residential lighting loads including LEDs and certain motor loads. Each switch can be manually and remotely controlled by commands sent from your compatible Z-Wave certified controller. -Features & Benefits: -• Replaces standard switch to add local and wireless control -• Single pole and 3-Way control: Use with standard 3-Way switch or Z-Wave Plus Accessory RF9617 -• Neutral is required for installation -• Supports motors loads up to ½ HP -• Features blue load indicating LED light that can be dimmed in ON or OFF state -https://www.eaton.com/us/en-us/skuPage.RF9601DW.html + Eaton’s Z-Wave plus wireless switch replaces regular switches (where a neutral is present) to provide local and remote ON/OFF control for most common residential lighting loads including LEDs and certain motor loads. Each switch can be manually and + remotely controlled by commands sent from your compatible Z-Wave certified controller. Features and Benefits: • Replaces standard switch to add local and wireless control • Single pole and 3-Way control: Use with standard 3-Way switch or Z-Wave + Plus Accessory RF9617 • Neutral is required for installation • Supports motors loads up to ½ HP • Features blue load indicating LED light that can be dimmed in ON or OFF state + https://www.eaton.com/us/en-us/skuPage.RF9601DW.html + + Initial Metadata Import from Z-Wave Alliance Database - https://products.z-wavealliance.org/products/3038/xml + - + - The configuration value is a signed single byte number. This value may represent a value with no units or may represent a value such as time. 0 to 127 (decimal) represents 0 to 127 seconds of time. -128 to -1 (negative decimal numbers) represents 128 to 255 seconds as calculated by this formula. Config value = desired time in seconds (or desired value) -256 For an example of 172 seconds: config value = 172 - 256 = -84 (decimal) or 0xAC (hex) - + The configuration value is a signed single byte number. This value may represent a value with no units or may represent a value such as time. 0 to 127 (decimal) represents 0 to 127 seconds of time. -128 to -1 (negative decimal numbers) represents 128 + to 255 seconds as calculated by this formula. Config value = desired time in seconds (or desired value) -256 For an example of 172 seconds: config value = 172 - 256 = -84 (decimal) or 0xAC (hex) + - + - The amount of time in seconds the switch will turn on for when panic mode is trigered. The configuration value is a signed single byte number. This value may represent a value with no units or may represent a value such as time. 0 to 127 (decimal) represents 0 to 127 seconds of time. -128 to -1 (negative decimal numbers) represents 128 to 255 seconds as calculated by this formula. Config value = desired time in seconds (or desired value) -256 For an example of 172 seconds: config value = 172 - 256 = -84 (decimal) or 0xAC (hex) - + The amount of time in seconds the switch will turn on for when panic mode is trigered. The configuration value is a signed single byte number. This value may represent a value with no units or may represent a value such as time. 0 to 127 (decimal) represents + 0 to 127 seconds of time. -128 to -1 (negative decimal numbers) represents 128 to 255 seconds as calculated by this formula. Config value = desired time in seconds (or desired value) -256 For an example of 172 seconds: config value = 172 - 256 + = -84 (decimal) or 0xAC (hex) + - + - The amount of time in seconds the switch will turn off for when panic mode is triggered. The configuration value is a signed single byte number. This value may represent a value with no units or may represent a value such as time. 0 to 127 (decimal) represents 0 to 127 seconds of time. -128 to -1 (negative decimal numbers) represents 128 to 255 seconds as calculated by this formula. Config value = desired time in seconds (or desired value) -256 For an example of 172 seconds: config value = 172 - 256 = -84 (decimal) or 0xAC (hex) - + The amount of time in seconds the switch will turn off for when panic mode is triggered. The configuration value is a signed single byte number. This value may represent a value with no units or may represent a value such as time. 0 to 127 (decimal) represents + 0 to 127 seconds of time. -128 to -1 (negative decimal numbers) represents 128 to 255 seconds as calculated by this formula. Config value = desired time in seconds (or desired value) -256 For an example of 172 seconds: config value = 172 - 256 + = -84 (decimal) or 0xAC (hex) + - Power up state of the device - - - - + Power up state of the device + + + + - Enables this switch to participate in panic mode - - - + Enables this switch to participate in panic mode + + + - Adjust brightness of the blue indicator LED with Switch is ON - 0 = OFF 4 = Maximum brightness - + Adjust brightness of the blue indicator LED with Switch is ON - 0 = OFF 4 = Maximum brightness + - Adjust brightness of the blue indicator LED with Switch is OFF - 0 = OFF 4 = Maximum brightness - + Adjust brightness of the blue indicator LED with Switch is OFF - 0 = OFF 4 = Maximum brightness + + - - + + From 0f1835d5dabdb2e1416e42d3b74904a2dcb67a8b Mon Sep 17 00:00:00 2001 From: Zachary Knight Date: Wed, 27 Jan 2021 19:33:45 -0500 Subject: [PATCH 091/198] Update manufacturer revision --- config/manufacturer_specific.xml | 2080 ------------------------------ 1 file changed, 2080 deletions(-) diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index 592024411d..e69de29bb2 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -1,2080 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 7f8b19559d02ec5772ca0f8d2a89503b88a076d9 Mon Sep 17 00:00:00 2001 From: Zachary Knight Date: Wed, 27 Jan 2021 19:35:18 -0500 Subject: [PATCH 092/198] update xml --- config/manufacturer_specific.xml | 2080 ++++++++++++++++++++++++++++++ 1 file changed, 2080 insertions(+) diff --git a/config/manufacturer_specific.xml b/config/manufacturer_specific.xml index e69de29bb2..7293a06022 100644 --- a/config/manufacturer_specific.xml +++ b/config/manufacturer_specific.xml @@ -0,0 +1,2080 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 91f8daa4cdd38fe8e7226cd009d45052e81e7955 Mon Sep 17 00:00:00 2001 From: Zachary Knight Date: Wed, 27 Jan 2021 19:39:42 -0500 Subject: [PATCH 093/198] Removed Invalid RF9501 Group --- config/cooper/RF9501.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/config/cooper/RF9501.xml b/config/cooper/RF9501.xml index 3bfa0d0806..261145e3ce 100644 --- a/config/cooper/RF9501.xml +++ b/config/cooper/RF9501.xml @@ -54,7 +54,6 @@ - From e1b7dd7c4050151054b2023c305441d9a352131d Mon Sep 17 00:00:00 2001 From: Zachary Knight Date: Wed, 27 Jan 2021 19:42:12 -0500 Subject: [PATCH 094/198] Fix num_groups --- config/cooper/RF9501.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/cooper/RF9501.xml b/config/cooper/RF9501.xml index 261145e3ce..d5a3d3c81d 100644 --- a/config/cooper/RF9501.xml +++ b/config/cooper/RF9501.xml @@ -52,7 +52,7 @@ - + From dbd8b5d762bbff728db6ff76b308e03553434cf7 Mon Sep 17 00:00:00 2001 From: Zachary Knight Date: Wed, 27 Jan 2021 20:20:59 -0500 Subject: [PATCH 095/198] Add correct image for RF9601 --- config/cooper/RF9601.xml | 2 +- config/images/cooper/RF9601.png | Bin 0 -> 265293 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 config/images/cooper/RF9601.png diff --git a/config/cooper/RF9601.xml b/config/cooper/RF9601.xml index 77e357f100..e42ad00e9b 100644 --- a/config/cooper/RF9601.xml +++ b/config/cooper/RF9601.xml @@ -1,7 +1,7 @@ http://www.openzwave.com/device-database/001A:0503:534C - images/cooper/RF9501.png + images/cooper/RF9601.png https://products.z-wavealliance.org/products/3038/ Eaton RF9601DW U.S. / Canada / Mexico diff --git a/config/images/cooper/RF9601.png b/config/images/cooper/RF9601.png new file mode 100644 index 0000000000000000000000000000000000000000..c178ea9ba4e3ef41dcec1f2fba9a4e220ce1d9e7 GIT binary patch literal 265293 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 z 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 z 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