Zigbee add support for Muller Licht remote

This commit is contained in:
Stephan Hadinger 2021-01-10 11:47:12 +01:00
parent e35cac1ba8
commit d0021b9b04
3 changed files with 202 additions and 196 deletions

View File

@ -299,6 +299,7 @@ const char Z_strings[] PROGMEM =
"ModelId" "\x00" "ModelId" "\x00"
"MotorStepSize" "\x00" "MotorStepSize" "\x00"
"Movement" "\x00" "Movement" "\x00"
"MullerLightMode" "\x00"
"MultiApplicationType" "\x00" "MultiApplicationType" "\x00"
"MultiDescription" "\x00" "MultiDescription" "\x00"
"MultiInApplicationType" "\x00" "MultiInApplicationType" "\x00"
@ -493,7 +494,6 @@ const char Z_strings[] PROGMEM =
"xxyyyyzzzz" "\x00" "xxyyyyzzzz" "\x00"
"xxyyzzzz" "\x00" "xxyyzzzz" "\x00"
; ;
enum Z_offsets { enum Z_offsets {
Zo_ = 0, Zo_ = 0,
Zo_00 = 1, Zo_00 = 1,
@ -720,199 +720,200 @@ enum Z_offsets {
Zo_ModelId = 3604, Zo_ModelId = 3604,
Zo_MotorStepSize = 3612, Zo_MotorStepSize = 3612,
Zo_Movement = 3626, Zo_Movement = 3626,
Zo_MultiApplicationType = 3635, Zo_MullerLightMode = 3635,
Zo_MultiDescription = 3656, Zo_MultiApplicationType = 3651,
Zo_MultiInApplicationType = 3673, Zo_MultiDescription = 3672,
Zo_MultiInDescription = 3696, Zo_MultiInApplicationType = 3689,
Zo_MultiInNumberOfStates = 3715, Zo_MultiInDescription = 3712,
Zo_MultiInOutOfService = 3737, Zo_MultiInNumberOfStates = 3731,
Zo_MultiInReliability = 3757, Zo_MultiInOutOfService = 3753,
Zo_MultiInStatusFlags = 3776, Zo_MultiInReliability = 3773,
Zo_MultiInValue = 3795, Zo_MultiInStatusFlags = 3792,
Zo_MultiNumberOfStates = 3808, Zo_MultiInValue = 3811,
Zo_MultiOutApplicationType = 3828, Zo_MultiNumberOfStates = 3824,
Zo_MultiOutDescription = 3852, Zo_MultiOutApplicationType = 3844,
Zo_MultiOutNumberOfStates = 3872, Zo_MultiOutDescription = 3868,
Zo_MultiOutOfService = 3895, Zo_MultiOutNumberOfStates = 3888,
Zo_MultiOutOutOfService = 3913, Zo_MultiOutOfService = 3911,
Zo_MultiOutReliability = 3934, Zo_MultiOutOutOfService = 3929,
Zo_MultiOutRelinquishDefault = 3954, Zo_MultiOutReliability = 3950,
Zo_MultiOutStatusFlags = 3980, Zo_MultiOutRelinquishDefault = 3970,
Zo_MultiOutValue = 4000, Zo_MultiOutStatusFlags = 3996,
Zo_MultiReliability = 4014, Zo_MultiOutValue = 4016,
Zo_MultiRelinquishDefault = 4031, Zo_MultiReliability = 4030,
Zo_MultiStatusFlags = 4054, Zo_MultiRelinquishDefault = 4047,
Zo_MultiValue = 4071, Zo_MultiStatusFlags = 4070,
Zo_MultipleScheduling = 4082, Zo_MultiValue = 4087,
Zo_NumberOfDevices = 4101, Zo_MultipleScheduling = 4098,
Zo_NumberOfPrimaries = 4117, Zo_NumberOfDevices = 4117,
Zo_NumberOfResets = 4135, Zo_NumberOfPrimaries = 4133,
Zo_NumberofActuationsLift = 4150, Zo_NumberOfResets = 4151,
Zo_NumberofActuationsTilt = 4173, Zo_NumberofActuationsLift = 4166,
Zo_Occupancy = 4196, Zo_NumberofActuationsTilt = 4189,
Zo_OccupancySensorType = 4206, Zo_Occupancy = 4212,
Zo_OccupiedCoolingSetpoint = 4226, Zo_OccupancySensorType = 4222,
Zo_OccupiedHeatingSetpoint = 4250, Zo_OccupiedCoolingSetpoint = 4242,
Zo_OnOffTransitionTime = 4274, Zo_OccupiedHeatingSetpoint = 4266,
Zo_OpenPeriod = 4294, Zo_OnOffTransitionTime = 4290,
Zo_OppleMode = 4305, Zo_OpenPeriod = 4310,
Zo_OutdoorTemperature = 4315, Zo_OppleMode = 4321,
Zo_OverTempTotalDwell = 4334, Zo_OutdoorTemperature = 4331,
Zo_PICoolingDemand = 4353, Zo_OverTempTotalDwell = 4350,
Zo_PIHeatingDemand = 4369, Zo_PICoolingDemand = 4369,
Zo_POD = 4385, Zo_PIHeatingDemand = 4385,
Zo_Panic = 4389, Zo_POD = 4401,
Zo_PartNumber = 4395, Zo_Panic = 4405,
Zo_PersistentMemoryWrites = 4406, Zo_PartNumber = 4411,
Zo_PersonalAlarm = 4429, Zo_PersistentMemoryWrites = 4422,
Zo_PhysicalClosedLimit = 4443, Zo_PersonalAlarm = 4445,
Zo_PhysicalClosedLimitLift = 4463, Zo_PhysicalClosedLimit = 4459,
Zo_PhysicalClosedLimitTilt = 4487, Zo_PhysicalClosedLimitLift = 4479,
Zo_Power = 4511, Zo_PhysicalClosedLimitTilt = 4503,
Zo_Power2 = 4517, Zo_Power = 4527,
Zo_Power3 = 4524, Zo_Power2 = 4533,
Zo_Power4 = 4531, Zo_Power3 = 4540,
Zo_PowerOffEffect = 4538, Zo_Power4 = 4547,
Zo_PowerOnRecall = 4553, Zo_PowerOffEffect = 4554,
Zo_PowerOnTimer = 4567, Zo_PowerOnRecall = 4569,
Zo_PowerSource = 4580, Zo_PowerOnTimer = 4583,
Zo_PowerThreshold = 4592, Zo_PowerSource = 4596,
Zo_Pressure = 4607, Zo_PowerThreshold = 4608,
Zo_PressureMaxMeasuredValue = 4616, Zo_Pressure = 4623,
Zo_PressureMaxScaledValue = 4641, Zo_PressureMaxMeasuredValue = 4632,
Zo_PressureMinMeasuredValue = 4664, Zo_PressureMaxScaledValue = 4657,
Zo_PressureMinScaledValue = 4689, Zo_PressureMinMeasuredValue = 4680,
Zo_PressureScale = 4712, Zo_PressureMinScaledValue = 4705,
Zo_PressureScaledTolerance = 4726, Zo_PressureScale = 4728,
Zo_PressureScaledValue = 4750, Zo_PressureScaledTolerance = 4742,
Zo_PressureTolerance = 4770, Zo_PressureScaledValue = 4766,
Zo_Primary1Intensity = 4788, Zo_PressureTolerance = 4786,
Zo_Primary1X = 4806, Zo_Primary1Intensity = 4804,
Zo_Primary1Y = 4816, Zo_Primary1X = 4822,
Zo_Primary2Intensity = 4826, Zo_Primary1Y = 4832,
Zo_Primary2X = 4844, Zo_Primary2Intensity = 4842,
Zo_Primary2Y = 4854, Zo_Primary2X = 4860,
Zo_Primary3Intensity = 4864, Zo_Primary2Y = 4870,
Zo_Primary3X = 4882, Zo_Primary3Intensity = 4880,
Zo_Primary3Y = 4892, Zo_Primary3X = 4898,
Zo_ProductCode = 4902, Zo_Primary3Y = 4908,
Zo_ProductRevision = 4914, Zo_ProductCode = 4918,
Zo_ProductURL = 4930, Zo_ProductRevision = 4930,
Zo_QualityMeasure = 4941, Zo_ProductURL = 4946,
Zo_RMSCurrent = 4956, Zo_QualityMeasure = 4957,
Zo_RMSVoltage = 4967, Zo_RMSCurrent = 4972,
Zo_ReactivePower = 4978, Zo_RMSVoltage = 4983,
Zo_RecallScene = 4992, Zo_ReactivePower = 4994,
Zo_RemainingTime = 5004, Zo_RecallScene = 5008,
Zo_RemoteSensing = 5018, Zo_RemainingTime = 5020,
Zo_RemoveAllGroups = 5032, Zo_RemoteSensing = 5034,
Zo_RemoveAllScenes = 5048, Zo_RemoveAllGroups = 5048,
Zo_RemoveGroup = 5064, Zo_RemoveAllScenes = 5064,
Zo_RemoveScene = 5076, Zo_RemoveGroup = 5080,
Zo_ResetAlarm = 5088, Zo_RemoveScene = 5092,
Zo_ResetAllAlarms = 5099, Zo_ResetAlarm = 5104,
Zo_SWBuildID = 5114, Zo_ResetAllAlarms = 5115,
Zo_Sat = 5124, Zo_SWBuildID = 5130,
Zo_SatMove = 5128, Zo_Sat = 5140,
Zo_SatStep = 5136, Zo_SatMove = 5144,
Zo_SceneCount = 5144, Zo_SatStep = 5152,
Zo_SceneValid = 5155, Zo_SceneCount = 5160,
Zo_ScheduleMode = 5166, Zo_SceneValid = 5171,
Zo_SeaPressure = 5179, Zo_ScheduleMode = 5182,
Zo_ShortPollInterval = 5191, Zo_SeaPressure = 5195,
Zo_Shutter = 5209, Zo_ShortPollInterval = 5207,
Zo_ShutterClose = 5217, Zo_Shutter = 5225,
Zo_ShutterLift = 5230, Zo_ShutterClose = 5233,
Zo_ShutterOpen = 5242, Zo_ShutterLift = 5246,
Zo_ShutterStop = 5254, Zo_ShutterOpen = 5258,
Zo_ShutterTilt = 5266, Zo_ShutterStop = 5270,
Zo_SoftwareRevision = 5278, Zo_ShutterTilt = 5282,
Zo_StackVersion = 5295, Zo_SoftwareRevision = 5294,
Zo_StandardTime = 5308, Zo_StackVersion = 5311,
Zo_StartUpOnOff = 5321, Zo_StandardTime = 5324,
Zo_Status = 5334, Zo_StartUpOnOff = 5337,
Zo_StoreScene = 5341, Zo_Status = 5350,
Zo_SwitchType = 5352, Zo_StoreScene = 5357,
Zo_SystemMode = 5363, Zo_SwitchType = 5368,
Zo_TRVBoost = 5374, Zo_SystemMode = 5379,
Zo_TRVChildProtection = 5383, Zo_TRVBoost = 5390,
Zo_TRVMirrorDisplay = 5402, Zo_TRVChildProtection = 5399,
Zo_TRVMode = 5419, Zo_TRVMirrorDisplay = 5418,
Zo_TRVWindowOpen = 5427, Zo_TRVMode = 5435,
Zo_TempTarget = 5441, Zo_TRVWindowOpen = 5443,
Zo_Temperature = 5452, Zo_TempTarget = 5457,
Zo_TemperatureMaxMeasuredValue = 5464, Zo_Temperature = 5468,
Zo_TemperatureMinMeasuredValue = 5492, Zo_TemperatureMaxMeasuredValue = 5480,
Zo_TemperatureTolerance = 5520, Zo_TemperatureMinMeasuredValue = 5508,
Zo_TerncyDuration = 5541, Zo_TemperatureTolerance = 5536,
Zo_TerncyRotate = 5556, Zo_TerncyDuration = 5557,
Zo_ThSetpoint = 5569, Zo_TerncyRotate = 5572,
Zo_Time = 5580, Zo_ThSetpoint = 5585,
Zo_TimeEpoch = 5585, Zo_Time = 5596,
Zo_TimeStatus = 5595, Zo_TimeEpoch = 5601,
Zo_TimeZone = 5606, Zo_TimeStatus = 5611,
Zo_TotalProfileNum = 5615, Zo_TimeZone = 5622,
Zo_TuyaAutoLock = 5631, Zo_TotalProfileNum = 5631,
Zo_TuyaAwayDays = 5644, Zo_TuyaAutoLock = 5647,
Zo_TuyaAwayTemp = 5657, Zo_TuyaAwayDays = 5660,
Zo_TuyaBattery = 5670, Zo_TuyaAwayTemp = 5673,
Zo_TuyaBoostTime = 5682, Zo_TuyaBattery = 5686,
Zo_TuyaChildLock = 5696, Zo_TuyaBoostTime = 5698,
Zo_TuyaComfortTemp = 5710, Zo_TuyaChildLock = 5712,
Zo_TuyaEcoTemp = 5726, Zo_TuyaComfortTemp = 5726,
Zo_TuyaFanMode = 5738, Zo_TuyaEcoTemp = 5742,
Zo_TuyaForceMode = 5750, Zo_TuyaFanMode = 5754,
Zo_TuyaMaxTemp = 5764, Zo_TuyaForceMode = 5766,
Zo_TuyaMinTemp = 5776, Zo_TuyaMaxTemp = 5780,
Zo_TuyaPreset = 5788, Zo_TuyaMinTemp = 5792,
Zo_TuyaScheduleHolidays = 5799, Zo_TuyaPreset = 5804,
Zo_TuyaScheduleWorkdays = 5820, Zo_TuyaScheduleHolidays = 5815,
Zo_TuyaTempTarget = 5841, Zo_TuyaScheduleWorkdays = 5836,
Zo_TuyaValveDetection = 5856, Zo_TuyaTempTarget = 5857,
Zo_TuyaValvePosition = 5875, Zo_TuyaValveDetection = 5872,
Zo_TuyaWeekSelect = 5893, Zo_TuyaValvePosition = 5891,
Zo_TuyaWindowDetection = 5908, Zo_TuyaWeekSelect = 5909,
Zo_UnoccupiedCoolingSetpoint = 5928, Zo_TuyaWindowDetection = 5924,
Zo_UnoccupiedHeatingSetpoint = 5954, Zo_UnoccupiedCoolingSetpoint = 5944,
Zo_UtilityName = 5980, Zo_UnoccupiedHeatingSetpoint = 5970,
Zo_ValidUntilTime = 5992, Zo_UtilityName = 5996,
Zo_ValvePosition = 6007, Zo_ValidUntilTime = 6008,
Zo_VelocityLift = 6021, Zo_ValvePosition = 6023,
Zo_ViewGroup = 6034, Zo_VelocityLift = 6037,
Zo_ViewScene = 6044, Zo_ViewGroup = 6050,
Zo_Water = 6054, Zo_ViewScene = 6060,
Zo_WhitePointX = 6060, Zo_Water = 6070,
Zo_WhitePointY = 6072, Zo_WhitePointX = 6076,
Zo_WindowCoveringType = 6084, Zo_WhitePointY = 6088,
Zo_X = 6103, Zo_WindowCoveringType = 6100,
Zo_Y = 6105, Zo_X = 6119,
Zo_ZCLVersion = 6107, Zo_Y = 6121,
Zo_ZoneState = 6118, Zo_ZCLVersion = 6123,
Zo_ZoneStatus = 6128, Zo_ZoneState = 6134,
Zo_ZoneStatusChange = 6139, Zo_ZoneStatus = 6144,
Zo_ZoneType = 6156, Zo_ZoneStatusChange = 6155,
Zo_xx = 6165, Zo_ZoneType = 6172,
Zo_xx000A00 = 6168, Zo_xx = 6181,
Zo_xx0A = 6177, Zo_xx000A00 = 6184,
Zo_xx0A00 = 6182, Zo_xx0A = 6193,
Zo_xx19 = 6189, Zo_xx0A00 = 6198,
Zo_xx190A = 6194, Zo_xx19 = 6205,
Zo_xx190A00 = 6201, Zo_xx190A = 6210,
Zo_xxxx = 6210, Zo_xx190A00 = 6217,
Zo_xxxx00 = 6215, Zo_xxxx = 6226,
Zo_xxxx0A00 = 6222, Zo_xxxx00 = 6231,
Zo_xxxxyy = 6231, Zo_xxxx0A00 = 6238,
Zo_xxxxyyyy = 6238, Zo_xxxxyy = 6247,
Zo_xxxxyyyy0A00 = 6247, Zo_xxxxyyyy = 6254,
Zo_xxxxyyzz = 6260, Zo_xxxxyyyy0A00 = 6263,
Zo_xxyy = 6269, Zo_xxxxyyzz = 6276,
Zo_xxyy0A00 = 6274, Zo_xxyy = 6285,
Zo_xxyyyy = 6283, Zo_xxyy0A00 = 6290,
Zo_xxyyyy000000000000 = 6290, Zo_xxyyyy = 6299,
Zo_xxyyyy0A0000000000 = 6309, Zo_xxyyyy000000000000 = 6306,
Zo_xxyyyyzz = 6328, Zo_xxyyyy0A0000000000 = 6325,
Zo_xxyyyyzzzz = 6337, Zo_xxyyyyzz = 6344,
Zo_xxyyzzzz = 6348, Zo_xxyyyyzzzz = 6353,
Zo_xxyyzzzz = 6364,
}; };

View File

@ -195,6 +195,7 @@ const Z_AttributeConverter Z_PostProcess[] PROGMEM = {
{ Zoctstr, Cx0000, 0x000A, Z_(ProductCode), Cm1, 0 }, { Zoctstr, Cx0000, 0x000A, Z_(ProductCode), Cm1, 0 },
{ Zstring, Cx0000, 0x000B, Z_(ProductURL), Cm1, 0 }, { Zstring, Cx0000, 0x000B, Z_(ProductURL), Cm1, 0 },
{ Zstring, Cx0000, 0x4000, Z_(SWBuildID), Cm1, 0 }, { Zstring, Cx0000, 0x4000, Z_(SWBuildID), Cm1, 0 },
{ Zuint8, Cx0000, 0x4005, Z_(MullerLightMode), Cm1, 0 },
// { Zunk, Cx0000, 0xFFFF, nullptr, Cm0, 0 }, // Remove all other values // { Zunk, Cx0000, 0xFFFF, nullptr, Cm0, 0 }, // Remove all other values
// Cmd 0x0A - Cluster 0x0000, attribute 0xFF01 - proprietary // Cmd 0x0A - Cluster 0x0000, attribute 0xFF01 - proprietary
{ Zmap8, Cx0000, 0xFF01, Z_(), Cm0, 0 }, { Zmap8, Cx0000, 0xFF01, Z_(), Cm0, 0 },
@ -1185,6 +1186,10 @@ void ZCLFrame::parseReportAttributes(Z_attribute_list& attr_list) {
uint32_t i = 0; uint32_t i = 0;
uint32_t len = _payload.len(); uint32_t len = _payload.len();
if (ZCL_WRITE_ATTRIBUTES == getCmdId()) {
attr_list.addAttribute(PSTR("Command"), true).setStr(PSTR("Write"));
}
while (len >= i + 3) { while (len >= i + 3) {
uint16_t attrid = _payload.get16(i); uint16_t attrid = _payload.get16(i);
i += 2; i += 2;

View File

@ -1639,9 +1639,9 @@ void Z_IncomingMessage(class ZCLFrame &zcl_received) {
zcl_received.parseResponse(); // Zigbee general "Default Response", publish ZbResponse message zcl_received.parseResponse(); // Zigbee general "Default Response", publish ZbResponse message
} else { } else {
// Build the ZbReceive list // Build the ZbReceive list
if ( (!zcl_received.isClusterSpecificCommand()) && (ZCL_REPORT_ATTRIBUTES == zcl_received.getCmdId())) { if ( (!zcl_received.isClusterSpecificCommand()) && (ZCL_REPORT_ATTRIBUTES == zcl_received.getCmdId() || ZCL_WRITE_ATTRIBUTES == zcl_received.getCmdId())) {
zcl_received.parseReportAttributes(attr_list); // Zigbee report attributes from sensors zcl_received.parseReportAttributes(attr_list); // Zigbee report attributes from sensors
if (clusterid) { defer_attributes = true; } // don't defer system Cluster=0 messages if (clusterid && (ZCL_REPORT_ATTRIBUTES == zcl_received.getCmdId())) { defer_attributes = true; } // don't defer system Cluster=0 messages or Write Attribute
} else if ( (!zcl_received.isClusterSpecificCommand()) && (ZCL_READ_ATTRIBUTES_RESPONSE == zcl_received.getCmdId())) { } else if ( (!zcl_received.isClusterSpecificCommand()) && (ZCL_READ_ATTRIBUTES_RESPONSE == zcl_received.getCmdId())) {
zcl_received.parseReadAttributesResponse(attr_list); zcl_received.parseReadAttributesResponse(attr_list);
if (clusterid) { defer_attributes = true; } // don't defer system Cluster=0 messages if (clusterid) { defer_attributes = true; } // don't defer system Cluster=0 messages