Zigbee support for Terncy Smart Dial (#9612)

* Zigbee support for Terncy Smart Dial

* Fix wrong attributes for TerncyDuration

* Fix wrong type for TerncyDuration

Co-authored-by: Stephan Hadinger <stephan.hadinger@gmail.com>
This commit is contained in:
s-hadinger 2020-10-23 22:49:51 +02:00 committed by GitHub
parent f3498f031b
commit f566660fb8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 105 additions and 91 deletions

View File

@ -381,6 +381,8 @@ const char Z_strings[] PROGMEM =
"TuyaFanMode" "\x00" "TuyaFanMode" "\x00"
"TuyaForceMode" "\x00" "TuyaForceMode" "\x00"
"TuyaWeekSelect" "\x00" "TuyaWeekSelect" "\x00"
"TerncyRotate" "\x00"
"TerncyDuration" "\x00"
"Identify" "\x00" "Identify" "\x00"
"xxxx" "\x00" "xxxx" "\x00"
"IdentifyQuery" "\x00" "IdentifyQuery" "\x00"
@ -780,95 +782,97 @@ enum Z_offsets {
Zo_TuyaFanMode = 5097, Zo_TuyaFanMode = 5097,
Zo_TuyaForceMode = 5109, Zo_TuyaForceMode = 5109,
Zo_TuyaWeekSelect = 5123, Zo_TuyaWeekSelect = 5123,
Zo_Identify = 5138, Zo_TerncyRotate = 5138,
Zo_xxxx = 5147, Zo_TerncyDuration = 5151,
Zo_IdentifyQuery = 5152, Zo_Identify = 5166,
Zo_AddGroup = 5166, Zo_xxxx = 5175,
Zo_xxxx00 = 5175, Zo_IdentifyQuery = 5180,
Zo_ViewGroup = 5182, Zo_AddGroup = 5194,
Zo_GetGroup = 5192, Zo_xxxx00 = 5203,
Zo_01xxxx = 5201, Zo_ViewGroup = 5210,
Zo_GetAllGroups = 5208, Zo_GetGroup = 5220,
Zo_00 = 5221, Zo_01xxxx = 5229,
Zo_RemoveGroup = 5224, Zo_GetAllGroups = 5236,
Zo_RemoveAllGroups = 5236, Zo_00 = 5249,
Zo_ViewScene = 5252, Zo_RemoveGroup = 5252,
Zo_xxxxyy = 5262, Zo_RemoveAllGroups = 5264,
Zo_RemoveScene = 5269, Zo_ViewScene = 5280,
Zo_RemoveAllScenes = 5281, Zo_xxxxyy = 5290,
Zo_RecallScene = 5297, Zo_RemoveScene = 5297,
Zo_GetSceneMembership = 5309, Zo_RemoveAllScenes = 5309,
Zo_PowerOffEffect = 5328, Zo_RecallScene = 5325,
Zo_xxyy = 5343, Zo_GetSceneMembership = 5337,
Zo_PowerOnRecall = 5348, Zo_PowerOffEffect = 5356,
Zo_PowerOnTimer = 5362, Zo_xxyy = 5371,
Zo_xxyyyyzzzz = 5375, Zo_PowerOnRecall = 5376,
Zo_xx0A00 = 5386, Zo_PowerOnTimer = 5390,
Zo_DimmerUp = 5393, Zo_xxyyyyzzzz = 5403,
Zo_00190200 = 5402, Zo_xx0A00 = 5414,
Zo_DimmerDown = 5411, Zo_DimmerUp = 5421,
Zo_01190200 = 5422, Zo_00190200 = 5430,
Zo_DimmerStop = 5431, Zo_DimmerDown = 5439,
Zo_ResetAlarm = 5442, Zo_01190200 = 5450,
Zo_xxyyyy = 5453, Zo_DimmerStop = 5459,
Zo_ResetAllAlarms = 5460, Zo_ResetAlarm = 5470,
Zo_xx000A00 = 5475, Zo_xxyyyy = 5481,
Zo_HueSat = 5484, Zo_ResetAllAlarms = 5488,
Zo_xxyy0A00 = 5491, Zo_xx000A00 = 5503,
Zo_Color = 5500, Zo_HueSat = 5512,
Zo_xxxxyyyy0A00 = 5506, Zo_xxyy0A00 = 5519,
Zo_xxxx0A00 = 5519, Zo_Color = 5528,
Zo_ShutterOpen = 5528, Zo_xxxxyyyy0A00 = 5534,
Zo_ShutterClose = 5540, Zo_xxxx0A00 = 5547,
Zo_ShutterStop = 5553, Zo_ShutterOpen = 5556,
Zo_ShutterLift = 5565, Zo_ShutterClose = 5568,
Zo_xx = 5577, Zo_ShutterStop = 5581,
Zo_ShutterTilt = 5580, Zo_ShutterLift = 5593,
Zo_Shutter = 5592, Zo_xx = 5605,
Zo_DimmerMove = 5600, Zo_ShutterTilt = 5608,
Zo_xx0A = 5611, Zo_Shutter = 5620,
Zo_DimmerStepUp = 5616, Zo_DimmerMove = 5628,
Zo_00xx0A00 = 5629, Zo_xx0A = 5639,
Zo_DimmerStepDown = 5638, Zo_DimmerStepUp = 5644,
Zo_01xx0A00 = 5653, Zo_00xx0A00 = 5657,
Zo_DimmerStep = 5662, Zo_DimmerStepDown = 5666,
Zo_xx190A00 = 5673, Zo_01xx0A00 = 5681,
Zo_01 = 5682, Zo_DimmerStep = 5690,
Zo_HueMove = 5685, Zo_xx190A00 = 5701,
Zo_xx19 = 5693, Zo_01 = 5710,
Zo_HueStepUp = 5698, Zo_HueMove = 5713,
Zo_HueStepDown = 5708, Zo_xx19 = 5721,
Zo_03xx0A00 = 5720, Zo_HueStepUp = 5726,
Zo_HueStep = 5729, Zo_HueStepDown = 5736,
Zo_SatMove = 5737, Zo_03xx0A00 = 5748,
Zo_SatStep = 5745, Zo_HueStep = 5757,
Zo_xx190A = 5753, Zo_SatMove = 5765,
Zo_ColorMove = 5760, Zo_SatStep = 5773,
Zo_xxxxyyyy = 5770, Zo_xx190A = 5781,
Zo_ColorStep = 5779, Zo_ColorMove = 5788,
Zo_ColorTempMoveUp = 5789, Zo_xxxxyyyy = 5798,
Zo_01xxxx000000000000 = 5805, Zo_ColorStep = 5807,
Zo_ColorTempMoveDown = 5824, Zo_ColorTempMoveUp = 5817,
Zo_03xxxx000000000000 = 5842, Zo_01xxxx000000000000 = 5833,
Zo_ColorTempMoveStop = 5861, Zo_ColorTempMoveDown = 5852,
Zo_00xxxx000000000000 = 5879, Zo_03xxxx000000000000 = 5870,
Zo_ColorTempMove = 5898, Zo_ColorTempMoveStop = 5889,
Zo_xxyyyy000000000000 = 5912, Zo_00xxxx000000000000 = 5907,
Zo_ColorTempStepUp = 5931, Zo_ColorTempMove = 5926,
Zo_01xxxx0A0000000000 = 5947, Zo_xxyyyy000000000000 = 5940,
Zo_ColorTempStepDown = 5966, Zo_ColorTempStepUp = 5959,
Zo_03xxxx0A0000000000 = 5984, Zo_01xxxx0A0000000000 = 5975,
Zo_ColorTempStep = 6003, Zo_ColorTempStepDown = 5994,
Zo_xxyyyy0A0000000000 = 6017, Zo_03xxxx0A0000000000 = 6012,
Zo_ArrowClick = 6036, Zo_ColorTempStep = 6031,
Zo_ArrowHold = 6047, Zo_xxyyyy0A0000000000 = 6045,
Zo_ArrowRelease = 6057, Zo_ArrowClick = 6064,
Zo_ZoneStatusChange = 6070, Zo_ArrowHold = 6075,
Zo_xxxxyyzz = 6087, Zo_ArrowRelease = 6085,
Zo_xxyyzzzz = 6096, Zo_ZoneStatusChange = 6098,
Zo_AddScene = 6105, Zo_xxxxyyzz = 6115,
Zo_xxyyyyzz = 6114, Zo_xxyyzzzz = 6124,
Zo_StoreScene = 6123, Zo_AddScene = 6133,
Zo_xxyyyyzz = 6142,
Zo_StoreScene = 6151,
}; };

View File

@ -129,7 +129,7 @@ enum Cx_cluster_short {
Cx0010, Cx0011, Cx0012, Cx0013, Cx0014, Cx001A, Cx0020, Cx0100, Cx0010, Cx0011, Cx0012, Cx0013, Cx0014, Cx001A, Cx0020, Cx0100,
Cx0101, Cx0102, Cx0201, Cx0300, Cx0400, Cx0401, Cx0402, Cx0403, Cx0101, Cx0102, Cx0201, Cx0300, Cx0400, Cx0401, Cx0402, Cx0403,
Cx0404, Cx0405, Cx0406, Cx0500, Cx0702, Cx0B01, Cx0B04, Cx0B05, Cx0404, Cx0405, Cx0406, Cx0500, Cx0702, Cx0B01, Cx0B04, Cx0B05,
CxEF00, CxEF00, CxFCCC,
}; };
const uint16_t Cx_cluster[] PROGMEM = { const uint16_t Cx_cluster[] PROGMEM = {
@ -138,7 +138,7 @@ const uint16_t Cx_cluster[] PROGMEM = {
0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x001A, 0x0020, 0x0100, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x001A, 0x0020, 0x0100,
0x0101, 0x0102, 0x0201, 0x0300, 0x0400, 0x0401, 0x0402, 0x0403, 0x0101, 0x0102, 0x0201, 0x0300, 0x0400, 0x0401, 0x0402, 0x0403,
0x0404, 0x0405, 0x0406, 0x0500, 0x0702, 0x0B01, 0x0B04, 0x0B05, 0x0404, 0x0405, 0x0406, 0x0500, 0x0702, 0x0B01, 0x0B04, 0x0B05,
0xEF00, 0xEF00, 0xFCCC,
}; };
uint16_t CxToCluster(uint8_t cx) { uint16_t CxToCluster(uint8_t cx) {
@ -611,6 +611,10 @@ const Z_AttributeConverter Z_PostProcess[] PROGMEM = {
{ Ztuya1, CxEF00, 0x0405, Z_(TuyaFanMode), Cm1, 0 }, { Ztuya1, CxEF00, 0x0405, Z_(TuyaFanMode), Cm1, 0 },
{ Ztuya1, CxEF00, 0x046A, Z_(TuyaForceMode), Cm1, 0 }, { Ztuya1, CxEF00, 0x046A, Z_(TuyaForceMode), Cm1, 0 },
{ Ztuya1, CxEF00, 0x046F, Z_(TuyaWeekSelect), Cm1, 0 }, { Ztuya1, CxEF00, 0x046F, Z_(TuyaWeekSelect), Cm1, 0 },
// Terncy specific - 0xFCCC
{ Zuint16, CxFCCC, 0x001A, Z_(TerncyDuration), Cm1, 0 },
{ Zint16, CxFCCC, 0x001B, Z_(TerncyRotate), Cm1, 0 },
}; };
#pragma GCC diagnostic pop #pragma GCC diagnostic pop

View File

@ -136,6 +136,8 @@ const Z_CommandConverter Z_Commands[] PROGMEM = {
{ Z_(GetSceneMembership),0x0005, 0x06, 0x82,Z_(xxyyzzzz) }, // specific { Z_(GetSceneMembership),0x0005, 0x06, 0x82,Z_(xxyyzzzz) }, // specific
// Tuya - Moes specific // Tuya - Moes specific
{ Z_(), 0xEF00, 0xFF, 0x83, Z_() }, // capture any command in 0xEF00 cluster { Z_(), 0xEF00, 0xFF, 0x83, Z_() }, // capture any command in 0xEF00 cluster
// Terncy specific
{ Z_(), 0xFCCC, 0x00, 0x82, Z_(xxyy) }, // Terncy button (multi-)press
}; };
/*********************************************************************************************\ /*********************************************************************************************\
@ -419,6 +421,10 @@ void convertClusterSpecific(class Z_attribute_list &attr_list, uint16_t cluster,
attr_list.removeAttribute(&attr_raw); // remove raw command attr_list.removeAttribute(&attr_raw); // remove raw command
} }
break; break;
case 0xFCCC0000: // Terncy button (multi-)press
attr_list.addAttribute(PSTR("TerncyPress"), true).setUInt(xyz.y);
attr_list.addAttribute(PSTR("TerncyCount"), true).setUInt(xyz.x);
break;
} }
} else { // general case } else { // general case
// do we send command with endpoint suffix // do we send command with endpoint suffix