From 7fac724ec22e52c425974f6b8b013f7405c02d93 Mon Sep 17 00:00:00 2001 From: Alexey Pavlov Date: Tue, 13 Jan 2026 11:21:03 +0200 Subject: [PATCH] Zigbee co2 sensor (#24337) * Add CO2 sensor support * Add CO2 sensor support merge with actual development * Merge bug fix --- .../xdrv_23_zigbee_2_devices.ino | 9 +- .../xdrv_23_zigbee_5_0_constants.ino | 1240 +++++++++-------- .../xdrv_23_zigbee_5_1_attributes.ino | 27 +- .../xdrv_23_zigbee_5_2_converters.ino | 25 +- .../xdrv_23_zigbee_7_0_statemachine.ino | 12 +- .../xdrv_23_zigbee_8_parsers.ino | 3 +- .../xdrv_23_zigbee_A_impl.ino | 69 +- 7 files changed, 708 insertions(+), 677 deletions(-) diff --git a/tasmota/tasmota_xdrv_driver/xdrv_23_zigbee_2_devices.ino b/tasmota/tasmota_xdrv_driver/xdrv_23_zigbee_2_devices.ino index 5d9b315dd..d6b577abf 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_23_zigbee_2_devices.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_23_zigbee_2_devices.ino @@ -462,24 +462,28 @@ public: pressure(-0x8000), humidity(0xFFFF), th_setpoint(0xFF), - temperature_target(-0x8000) + temperature_target(-0x8000), + CO2(-1) {} inline bool validTemperature(void) const { return -0x8000 != temperature; } inline bool validPressure(void) const { return -0x8000 != pressure; } inline bool validHumidity(void) const { return 0xFFFF != humidity; } + inline bool validCO2(void) const { return -1 != CO2; } inline bool validThSetpoint(void) const { return 0xFF != th_setpoint; } inline bool validTempTarget(void) const { return -0x8000 != temperature_target; } inline int16_t getTemperature(void) const { return temperature; } - inline int16_t getPressure(void) const { return pressure; } + inline int16_t getPressure(void) const { return pressure; } inline uint16_t getHumidity(void) const { return humidity; } + inline float getCO2(void) const { return CO2; } inline uint8_t getThSetpoint(void) const { return th_setpoint; } inline int16_t getTempTarget(void) const { return temperature_target; } inline void setTemperature(int16_t _temperature) { temperature = _temperature; } inline void setPressure(int16_t _pressure) { pressure = _pressure; } inline void setHumidity(uint16_t _humidity) { humidity = _humidity; } + inline void setCO2(float _CO2) { CO2 = _CO2; } inline void setThSetpoint(uint8_t _th_setpoint) { th_setpoint = _th_setpoint; } inline void setTempTarget(int16_t _temperature_target){ temperature_target = _temperature_target; } @@ -492,6 +496,7 @@ public: // thermostat uint8_t th_setpoint; // percentage of heat/cool in percent int16_t temperature_target; // settings for the temparature + float CO2; // CO2 in ppm, 0..10000, -1 if unknown }; /*********************************************************************************************\ diff --git a/tasmota/tasmota_xdrv_driver/xdrv_23_zigbee_5_0_constants.ino b/tasmota/tasmota_xdrv_driver/xdrv_23_zigbee_5_0_constants.ino index 38e1e7bac..0373b91ed 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_23_zigbee_5_0_constants.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_23_zigbee_5_0_constants.ino @@ -243,6 +243,10 @@ const char Z_strings[] PROGMEM = "BlockedGPDID" "\x00" "CIE" "\x00" "CO" "\x00" + "CO2" "\x00" + "CO2MaxMeasuredValue" "\x00" + "CO2MinMeasuredValue" "\x00" + "CO2Tolerance" "\x00" "CT" "\x00" "CalculationPeriod" "\x00" "CcommissioningExitMode" "\x00" @@ -1030,622 +1034,626 @@ enum Z_offsets { Zo_BlockedGPDID = 3162, Zo_CIE = 3175, Zo_CO = 3179, - Zo_CT = 3182, - Zo_CalculationPeriod = 3185, - Zo_CcommissioningExitMode = 3203, - Zo_CheckinInterval = 3226, - Zo_CheckinIntervalMin = 3242, - Zo_ClientActiveFunctionality = 3261, - Zo_ClientFunctionality = 3287, - Zo_ClosedLimit = 3307, - Zo_Color = 3319, - Zo_ColorCapabilities = 3325, - Zo_ColorLoopActive = 3343, - Zo_ColorLoopDirection = 3359, - Zo_ColorLoopStartEnhancedHue = 3378, - Zo_ColorLoopStoredEnhancedHue = 3404, - Zo_ColorLoopTime = 3431, - Zo_ColorMode = 3445, - Zo_ColorMove = 3455, - Zo_ColorPointBIntensity = 3465, - Zo_ColorPointBX = 3486, - Zo_ColorPointBY = 3499, - Zo_ColorPointGIntensity = 3512, - Zo_ColorPointGX = 3533, - Zo_ColorPointGY = 3546, - Zo_ColorPointRIntensity = 3559, - Zo_ColorPointRX = 3580, - Zo_ColorPointRY = 3593, - Zo_ColorStartUpColorTempireds = 3606, - Zo_ColorStep = 3633, - Zo_ColorTempMove = 3643, - Zo_ColorTempMoveDown = 3657, - Zo_ColorTempMoveStop = 3675, - Zo_ColorTempMoveUp = 3693, - Zo_ColorTempPhysicalMaxMireds = 3709, - Zo_ColorTempPhysicalMinMireds = 3736, - Zo_ColorTempStep = 3763, - Zo_ColorTempStepDown = 3777, - Zo_ColorTempStepUp = 3795, - Zo_CommissioningWindow = 3811, - Zo_CommunicationMode = 3831, - Zo_CompanyName = 3849, - Zo_CompensationText = 3861, - Zo_ConfigStatus = 3878, - Zo_Contact = 3891, - Zo_ControlSequenceOfOperation = 3899, - Zo_ControlTemperature = 3926, - Zo_Coordinate1 = 3945, - Zo_Coordinate2 = 3957, - Zo_Coordinate3 = 3969, - Zo_CurrentBlock = 3981, - Zo_CurrentBlockPeriodConsumptionDelivered = 3994, - Zo_CurrentGroup = 4033, - Zo_CurrentInletEnergyCarrierDemand = 4046, - Zo_CurrentInletEnergyCarrierSummation = 4078, - Zo_CurrentMaxDemandDelivered = 4113, - Zo_CurrentMaxDemandDeliveredTime = 4139, - Zo_CurrentMaxDemandReceived = 4169, - Zo_CurrentMaxDemandReceivedTime = 4194, - Zo_CurrentOutletEnergyCarrierDemand = 4223, - Zo_CurrentOutletEnergyCarrierSummation = 4256, - Zo_CurrentPositionLift = 4292, - Zo_CurrentPositionLiftPercentage = 4312, - Zo_CurrentPositionTilt = 4342, - Zo_CurrentPositionTiltPercentage = 4362, - Zo_CurrentScene = 4392, - Zo_CurrentSummationDelivered = 4405, - Zo_CurrentSummationReceived = 4431, - Zo_CurrentTemperature = 4456, - Zo_CurrentTemperatureSetPoint = 4475, - Zo_CurrentZoneSensitivityLevel = 4502, - Zo_CustomerName = 4530, - Zo_DCCurrent = 4543, - Zo_DCCurrentDivisor = 4553, - Zo_DCCurrentMax = 4570, - Zo_DCCurrentMin = 4583, - Zo_DCCurrentMultiplier = 4596, - Zo_DCCurrentOverload = 4616, - Zo_DCOverloadAlarmsMask = 4634, - Zo_DCPower = 4655, - Zo_DCPowerDivisor = 4663, - Zo_DCPowerMax = 4678, - Zo_DCPowerMin = 4689, - Zo_DCPowerMultiplier = 4700, - Zo_DCVoltage = 4718, - Zo_DCVoltageDivisor = 4728, - Zo_DCVoltageMax = 4745, - Zo_DCVoltageMin = 4758, - Zo_DCVoltageMultiplier = 4771, - Zo_DCVoltageOverload = 4791, - Zo_DFTSummation = 4809, - Zo_DailyConsumptionTarget = 4822, - Zo_DailyFreezeTime = 4845, - Zo_DataQualityID = 4861, - Zo_DateCode = 4875, - Zo_DecelerationTimeLift = 4884, - Zo_DefaultMoveRate = 4905, - Zo_DefaultUpdatePeriod = 4921, - Zo_DehumidificationCooling = 4941, - Zo_DehumidificationHysteresis = 4965, - Zo_DehumidificationLockout = 4992, - Zo_DehumidificationMaxCool = 5016, - Zo_DeviceEnabled = 5040, - Zo_DeviceTempAlarmMask = 5054, - Zo_Dimmer = 5074, - Zo_DimmerCurrentFrequency = 5081, - Zo_DimmerDown = 5104, - Zo_DimmerMaxFrequency = 5115, - Zo_DimmerMaxLevel = 5134, - Zo_DimmerMinFrequency = 5149, - Zo_DimmerMinLevel = 5168, - Zo_DimmerMove = 5183, - Zo_DimmerOptions = 5194, - Zo_DimmerRemainingTime = 5208, - Zo_DimmerStartUpLevel = 5228, - Zo_DimmerStep = 5247, - Zo_DimmerStepDown = 5258, - Zo_DimmerStepUp = 5273, - Zo_DimmerStop = 5286, - Zo_DimmerUp = 5297, - Zo_DisableLocalConfig = 5306, - Zo_DoorClosedEvents = 5325, - Zo_DoorOpenEvents = 5342, - Zo_DoorState = 5357, - Zo_DriftCompensation = 5367, - Zo_DstEnd = 5385, - Zo_DstShift = 5392, - Zo_DstStart = 5401, - Zo_ElectricalMeasurementType = 5410, - Zo_EnergyFormatting = 5436, - Zo_EnergyRemote = 5453, - Zo_EnhancedColorMode = 5466, - Zo_EnhancedCurrentHue = 5484, - Zo_EurotronicErrors = 5503, - Zo_EurotronicHostFlags = 5520, - Zo_FanMode = 5540, - Zo_FanModeSequence = 5548, - Zo_FastPollTimeout = 5564, - Zo_FastPollTimeoutMax = 5580, - Zo_FastPollUpdatePeriod = 5599, - Zo_Fire = 5620, - Zo_FlowMaxMeasuredValue = 5625, - Zo_FlowMinMeasuredValue = 5646, - Zo_FlowRate = 5667, - Zo_FlowRestriction = 5676, - Zo_FlowTolerance = 5692, - Zo_GPHueStop = 5706, - Zo_GPIdentify = 5716, - Zo_GPLevelStop = 5727, - Zo_GPLockDoor = 5739, - Zo_GPMoveColor = 5750, - Zo_GPMoveDown = 5762, - Zo_GPMoveDownOnOff = 5773, - Zo_GPMoveHueDown = 5789, - Zo_GPMoveHueUp = 5803, - Zo_GPMoveSatDown = 5815, - Zo_GPMoveSatUp = 5829, - Zo_GPMoveUp = 5841, - Zo_GPMoveUpOnOff = 5850, - Zo_GPOff = 5864, - Zo_GPOn = 5870, - Zo_GPPress1of1 = 5875, - Zo_GPPress1of2 = 5887, - Zo_GPPress2of2 = 5899, - Zo_GPRelease = 5911, - Zo_GPRelease1of1 = 5921, - Zo_GPRelease1of2 = 5935, - Zo_GPRelease2of2 = 5949, - Zo_GPSatStop = 5963, - Zo_GPScene0 = 5973, - Zo_GPScene1 = 5982, - Zo_GPScene10 = 5991, - Zo_GPScene11 = 6001, - Zo_GPScene12 = 6011, - Zo_GPScene13 = 6021, - Zo_GPScene14 = 6031, - Zo_GPScene15 = 6041, - Zo_GPScene2 = 6051, - Zo_GPScene3 = 6060, - Zo_GPScene4 = 6069, - Zo_GPScene5 = 6078, - Zo_GPScene6 = 6087, - Zo_GPScene7 = 6096, - Zo_GPScene8 = 6105, - Zo_GPScene9 = 6114, - Zo_GPShortPress1of1 = 6123, - Zo_GPShortPress1of2 = 6140, - Zo_GPShortPress2of2 = 6157, - Zo_GPStepColor = 6174, - Zo_GPStepDown = 6186, - Zo_GPStepDownOnOff = 6197, - Zo_GPStepHueDown = 6213, - Zo_GPStepHueUp = 6227, - Zo_GPStepSatDown = 6239, - Zo_GPStepSatUp = 6253, - Zo_GPStepUp = 6265, - Zo_GPStepUpOnOff = 6274, - Zo_GPToggle = 6288, - Zo_GPUnlockDoor = 6297, - Zo_GenericDeviceClass = 6310, - Zo_GenericDeviceType = 6329, - Zo_GetAllGroups = 6347, - Zo_GetGroup = 6360, - Zo_GetSceneMembership = 6369, - Zo_GlassBreak = 6388, - Zo_GroupNameSupport = 6399, - Zo_HVACSystemTypeConfiguration = 6416, - Zo_HWVersion = 6444, - Zo_HarmonicCurrentMultiplier = 6454, - Zo_HighTempDwellTripPoint = 6480, - Zo_HighTempThreshold = 6503, - Zo_Hue = 6521, - Zo_HueMove = 6525, - Zo_HueSat = 6533, - Zo_HueStep = 6540, - Zo_HueStepDown = 6548, - Zo_HueStepUp = 6560, - Zo_Humidity = 6570, - Zo_HumidityMaxMeasuredValue = 6579, - Zo_HumidityMinMeasuredValue = 6604, - Zo_HumidityTolerance = 6629, - Zo_IASCIEAddress = 6647, - Zo_Identify = 6661, - Zo_IdentifyQuery = 6670, - Zo_IdentifyTime = 6684, - Zo_Illuminance = 6697, - Zo_IlluminanceLevelStatus = 6709, - Zo_IlluminanceLightSensorType = 6732, - Zo_IlluminanceMaxMeasuredValue = 6759, - Zo_IlluminanceMinMeasuredValue = 6787, - Zo_IlluminanceTargetLevel = 6815, - Zo_IlluminanceTolerance = 6838, - Zo_InletTemperature = 6859, - Zo_InstalledClosedLimitLift = 6876, - Zo_InstalledClosedLimitTilt = 6901, - Zo_InstalledOpenLimitLift = 6926, - Zo_InstalledOpenLimitTilt = 6949, - Zo_IntermediateSetpointsLift = 6972, - Zo_IntermediateSetpointsTilt = 6998, - Zo_IntervalReadReportingPeriod = 7024, - Zo_IntrinsicBallastFactor = 7052, - Zo_LampAlarmMode = 7075, - Zo_LampBurnHours = 7089, - Zo_LampBurnHoursTripPoint = 7103, - Zo_LampManufacturer = 7126, - Zo_LampRatedHours = 7143, - Zo_LampType = 7158, - Zo_LastConfiguredBy = 7167, - Zo_LastMessageLQI = 7184, - Zo_LastMessageRSSI = 7199, - Zo_LastSetTime = 7215, - Zo_LegrandHeatingMode = 7227, - Zo_LegrandMode = 7246, - Zo_LegrandOpt1 = 7258, - Zo_LegrandOpt2 = 7270, - Zo_LegrandOpt3 = 7282, - Zo_LidlPower = 7294, - Zo_LineCurrent = 7304, - Zo_LineCurrentPhB = 7316, - Zo_LineCurrentPhC = 7331, - Zo_LinkKey = 7346, - Zo_LocalTemperature = 7354, - Zo_LocalTemperatureCalibration = 7371, - Zo_LocalTime = 7399, - Zo_LocationAge = 7409, - Zo_LocationDescription = 7421, - Zo_LocationMethod = 7441, - Zo_LocationPower = 7456, - Zo_LocationType = 7470, - Zo_LockAlarmMask = 7483, - Zo_LockDefaultConfigurationRegister = 7497, - Zo_LockEnableInsideStatusLED = 7530, - Zo_LockEnableLocalProgramming = 7556, - Zo_LockEnableLogging = 7583, - Zo_LockEnableOneTouchLocking = 7601, - Zo_LockEnablePrivacyModeButton = 7627, - Zo_LockKeypadOperationEventMask = 7655, - Zo_LockKeypadProgrammingEventMask = 7684, - Zo_LockLEDSettings = 7715, - Zo_LockLanguage = 7731, - Zo_LockManualOperationEventMask = 7744, - Zo_LockOperatingMode = 7773, - Zo_LockRFIDOperationEventMask = 7791, - Zo_LockRFIDProgrammingEventMask = 7818, - Zo_LockRFOperationEventMask = 7847, - Zo_LockRFProgrammingEventMask = 7872, - Zo_LockSoundVolume = 7899, - Zo_LockState = 7915, - Zo_LockSupportedOperatingModes = 7925, - Zo_LockType = 7953, - Zo_LongPollInterval = 7962, - Zo_LongPollIntervalMin = 7979, - Zo_LowTempDwellTripPoint = 7999, - Zo_LowTempThreshold = 8021, - Zo_MainsAlarmMask = 8038, - Zo_MainsFrequency = 8053, - Zo_MainsVoltage = 8068, - Zo_MainsVoltageDwellTripPoint = 8081, - Zo_MainsVoltageMaxThreshold = 8108, - Zo_MainsVoltageMinThreshold = 8133, - Zo_Manufacturer = 8158, - Zo_MaxCoolSetpointLimit = 8171, - Zo_MaxHeatSetpointLimit = 8192, - Zo_MaxPINCodeLength = 8213, - Zo_MaxProxyTableEntries = 8230, - Zo_MaxRFIDCodeLength = 8251, - Zo_MaxSearchCounter = 8269, - Zo_MaxSinkTableEntries = 8286, - Zo_MaxTempExperienced = 8306, - Zo_Measured11thHarmonicCurrent = 8325, - Zo_Measured1stHarmonicCurrent = 8353, - Zo_Measured3rdHarmonicCurrent = 8380, - Zo_Measured5thHarmonicCurrent = 8407, - Zo_Measured7thHarmonicCurrent = 8434, - Zo_Measured9thHarmonicCurrent = 8461, - Zo_MeasuredPhase11thHarmonicCurrent = 8488, - Zo_MeasuredPhase1stHarmonicCurrent = 8521, - Zo_MeasuredPhase3rdHarmonicCurrent = 8553, - Zo_MeasuredPhase5thHarmonicCurrent = 8585, - Zo_MeasuredPhase7thHarmonicCurrent = 8617, - Zo_MeasuredPhase9thHarmonicCurrent = 8649, - Zo_MeterTypeID = 8681, - Zo_MinCoolSetpointLimit = 8693, - Zo_MinHeatSetpointLimit = 8714, - Zo_MinPINCodeLength = 8735, - Zo_MinRFIDCodeLength = 8752, - Zo_MinSetpointDeadBand = 8770, - Zo_MinTempExperienced = 8790, - Zo_Mode = 8809, - Zo_Model = 8814, - Zo_ModelId = 8820, - Zo_MotorStepSize = 8828, - Zo_Movement = 8842, - Zo_MullerLightMode = 8851, - Zo_MultiApplicationType = 8867, - Zo_MultiDescription = 8888, - Zo_MultiInApplicationType = 8905, - Zo_MultiInDescription = 8928, - Zo_MultiInNumberOfStates = 8947, - Zo_MultiInOutOfService = 8969, - Zo_MultiInReliability = 8989, - Zo_MultiInStatusFlags = 9008, - Zo_MultiInValue = 9027, - Zo_MultiNumberOfStates = 9040, - Zo_MultiOutApplicationType = 9060, - Zo_MultiOutDescription = 9084, - Zo_MultiOutNumberOfStates = 9104, - Zo_MultiOutOfService = 9127, - Zo_MultiOutOutOfService = 9145, - Zo_MultiOutReliability = 9166, - Zo_MultiOutRelinquishDefault = 9186, - Zo_MultiOutStatusFlags = 9212, - Zo_MultiOutValue = 9232, - Zo_MultiReliability = 9246, - Zo_MultiRelinquishDefault = 9263, - Zo_MultiStatusFlags = 9286, - Zo_MultiValue = 9303, - Zo_MultipleScheduling = 9314, - Zo_NeutralCurrent = 9333, - Zo_NotificationRetryNumber = 9348, - Zo_NotificationRetryTimer = 9372, - Zo_NumberOfDevices = 9395, - Zo_NumberOfHolidaySchedulesSupported = 9411, - Zo_NumberOfLogRecordsSupported = 9445, - Zo_NumberOfPINUsersSupported = 9473, - Zo_NumberOfPrimaries = 9499, - Zo_NumberOfRFIDUsersSupported = 9517, - Zo_NumberOfResets = 9544, - Zo_NumberOfTotalUsersSupported = 9559, - Zo_NumberOfWeekDaySchedulesSupportedPerUser = 9587, - Zo_NumberOfYearDaySchedulesSupportedPerUser = 9628, - Zo_NumberOfZoneSensitivityLevelsSupported = 9669, - Zo_NumberRSSIMeasurements = 9708, - Zo_NumberofActuationsLift = 9731, - Zo_NumberofActuationsTilt = 9754, - Zo_Occupancy = 9777, - Zo_OccupancySensorType = 9787, - Zo_OccupiedCoolingSetpoint = 9807, - Zo_OccupiedHeatingSetpoint = 9831, - Zo_OffTransitionTime = 9855, - Zo_OffWaitTime = 9873, - Zo_OnLevel = 9885, - Zo_OnOff = 9893, - Zo_OnOffTransitionTime = 9899, - Zo_OnTime = 9919, - Zo_OnTransitionTime = 9926, - Zo_OpenPeriod = 9943, - Zo_OppleMode = 9954, - Zo_OutdoorTemperature = 9964, - Zo_OutletTemperature = 9983, - Zo_OverTempTotalDwell = 10001, - Zo_PICoolingDemand = 10020, - Zo_PIHeatingDemand = 10036, - Zo_PIROccupiedToUnoccupiedDelay = 10052, - Zo_PIRUnoccupiedToOccupiedDelay = 10081, - Zo_PIRUnoccupiedToOccupiedThreshold = 10110, - Zo_POD = 10143, - Zo_Panic = 10147, - Zo_PartNumber = 10153, - Zo_PathLossExponent = 10164, - Zo_PersistentMemoryWrites = 10181, - Zo_PersonalAlarm = 10204, - Zo_PhaseHarmonicCurrentMultiplier = 10218, - Zo_PhysicalClosedLimit = 10249, - Zo_PhysicalClosedLimitLift = 10269, - Zo_PhysicalClosedLimitTilt = 10293, - Zo_PhysicalEnvironment = 10317, - Zo_Power = 10337, - Zo_PowerDivisor = 10343, - Zo_PowerFactor = 10356, - Zo_PowerFactorPhB = 10368, - Zo_PowerFactorPhC = 10383, - Zo_PowerMultiplier = 10398, - Zo_PowerOffEffect = 10414, - Zo_PowerOnRecall = 10429, - Zo_PowerOnTimer = 10443, - Zo_PowerSource = 10456, - Zo_PowerThreshold = 10468, - Zo_PresetReadingTime = 10483, - Zo_Pressure = 10501, - Zo_PressureMaxMeasuredValue = 10510, - Zo_PressureMaxScaledValue = 10535, - Zo_PressureMinMeasuredValue = 10558, - Zo_PressureMinScaledValue = 10583, - Zo_PressureScale = 10606, - Zo_PressureScaledTolerance = 10620, - Zo_PressureScaledValue = 10644, - Zo_PressureTolerance = 10664, - Zo_PreviousBlockPeriodConsumptionDelivered = 10682, - Zo_Primary1Intensity = 10722, - Zo_Primary1X = 10740, - Zo_Primary1Y = 10750, - Zo_Primary2Intensity = 10760, - Zo_Primary2X = 10778, - Zo_Primary2Y = 10788, - Zo_Primary3Intensity = 10798, - Zo_Primary3X = 10816, - Zo_Primary3Y = 10826, - Zo_Primary4Intensity = 10836, - Zo_Primary4X = 10854, - Zo_Primary4Y = 10864, - Zo_Primary5Intensity = 10874, - Zo_Primary5X = 10892, - Zo_Primary5Y = 10902, - Zo_Primary6Intensity = 10912, - Zo_Primary6X = 10930, - Zo_Primary6Y = 10940, - Zo_ProductCode = 10950, - Zo_ProductRevision = 10962, - Zo_ProductURL = 10978, - Zo_ProfileIntervalPeriod = 10989, - Zo_ProxyTable = 11011, - Zo_QualityMeasure = 11022, - Zo_RGB = 11037, - Zo_RHDehumidificationSetpoint = 11041, - Zo_RMSCurrent = 11068, - Zo_RMSCurrentMax = 11079, - Zo_RMSCurrentMaxPhB = 11093, - Zo_RMSCurrentMaxPhC = 11110, - Zo_RMSCurrentMin = 11127, - Zo_RMSCurrentMinPhB = 11141, - Zo_RMSCurrentMinPhC = 11158, - Zo_RMSCurrentPhB = 11175, - Zo_RMSCurrentPhC = 11189, - Zo_RMSExtremeOverVoltage = 11203, - Zo_RMSExtremeOverVoltagePeriod = 11225, - Zo_RMSExtremeOverVoltagePeriodPhB = 11253, - Zo_RMSExtremeOverVoltagePeriodPhC = 11284, - Zo_RMSExtremeUnderVoltage = 11315, - Zo_RMSExtremeUnderVoltagePeriod = 11338, - Zo_RMSExtremeUnderVoltagePeriodPhB = 11367, - Zo_RMSExtremeUnderVoltagePeriodPhC = 11399, - Zo_RMSVoltage = 11431, - Zo_RMSVoltageMax = 11442, - Zo_RMSVoltageMaxPhB = 11456, - Zo_RMSVoltageMaxPhC = 11473, - Zo_RMSVoltageMin = 11490, - Zo_RMSVoltageMinPhB = 11504, - Zo_RMSVoltageMinPhC = 11521, - Zo_RMSVoltagePhB = 11538, - Zo_RMSVoltagePhC = 11552, - Zo_RMSVoltageSag = 11566, - Zo_RMSVoltageSagPeriod = 11580, - Zo_RMSVoltageSagPeriodPhB = 11600, - Zo_RMSVoltageSagPeriodPhC = 11623, - Zo_RMSVoltageSwell = 11646, - Zo_RMSVoltageSwellPeriod = 11662, - Zo_RMSVoltageSwellPeriodPhB = 11684, - Zo_RMSVoltageSwellPeriodPhC = 11709, - Zo_ReactiveCurrent = 11734, - Zo_ReactiveCurrentPhB = 11750, - Zo_ReactiveCurrentPhC = 11769, - Zo_ReactivePower = 11788, - Zo_ReactivePowerPhB = 11802, - Zo_ReactivePowerPhC = 11819, - Zo_ReadingSnapShotTime = 11836, - Zo_RecallScene = 11856, - Zo_RelativeHumidity = 11868, - Zo_RelativeHumidityDisplay = 11885, - Zo_RelativeHumidityMode = 11909, - Zo_RemainingTime = 11930, - Zo_RemoteSensing = 11944, - Zo_RemoveAllGroups = 11958, - Zo_RemoveAllScenes = 11974, - Zo_RemoveGroup = 11990, - Zo_RemoveScene = 12002, - Zo_ReportingPeriod = 12014, - Zo_ResetAlarm = 12030, - Zo_ResetAllAlarms = 12041, - Zo_SWBuildID = 12056, - Zo_Sat = 12066, - Zo_SatMove = 12070, - Zo_SatStep = 12078, - Zo_SceneCount = 12086, - Zo_SceneNameSupport = 12097, - Zo_SceneValid = 12114, - Zo_ScheduleMode = 12125, - Zo_SeaPressure = 12138, - Zo_SecurityLevel = 12150, - Zo_ServerActiveFunctionality = 12164, - Zo_ServerFunctionality = 12190, - Zo_SharedSecurityKey = 12210, - Zo_SharedSecurityKeyType = 12228, - Zo_ShortPollInterval = 12250, - Zo_Shutter = 12268, - Zo_ShutterClose = 12276, - Zo_ShutterLift = 12289, - Zo_ShutterOpen = 12301, - Zo_ShutterStop = 12313, - Zo_ShutterTilt = 12325, - Zo_SinkTable = 12337, - Zo_SoftwareRevision = 12347, - Zo_StackVersion = 12364, - Zo_StandardTime = 12377, - Zo_StartUpOnOff = 12390, - Zo_Status = 12403, - Zo_StoreScene = 12410, - Zo_SupplyStatus = 12421, - Zo_SwitchActions = 12434, - Zo_SwitchType = 12448, - Zo_SystemMode = 12459, - Zo_TRVBoost = 12470, - Zo_TRVChildProtection = 12479, - Zo_TRVMirrorDisplay = 12498, - Zo_TRVMode = 12515, - Zo_TRVWindowOpen = 12523, - Zo_TempTarget = 12537, - Zo_Temperature = 12548, - Zo_TemperatureDisplayMode = 12560, - Zo_TemperatureMaxMeasuredValue = 12583, - Zo_TemperatureMinMeasuredValue = 12611, - Zo_TemperatureTolerance = 12639, - Zo_TerncyDuration = 12660, - Zo_TerncyRotate = 12675, - Zo_ThSetpoint = 12688, - Zo_ThermostatAlarmMask = 12699, - Zo_ThermostatKeypadLockout = 12719, - Zo_ThermostatOccupancy = 12743, - Zo_ThermostatRunningMode = 12763, - Zo_ThermostatScheduleProgrammingVisibility = 12785, - Zo_Time = 12825, - Zo_TimeEpoch = 12830, - Zo_TimeStatus = 12840, - Zo_TimeZone = 12851, - Zo_TotalActivePower = 12860, - Zo_TotalApparentPower = 12877, - Zo_TotalProfileNum = 12896, - Zo_TotalReactivePower = 12912, - Zo_TuyaCalibration = 12931, - Zo_TuyaCalibrationTime = 12947, - Zo_TuyaMCUVersion = 12967, - Zo_TuyaMotorReversal = 12982, - Zo_TuyaMovingState = 13000, - Zo_TuyaQuery = 13016, - Zo_UnoccupiedCoolingSetpoint = 13026, - Zo_UnoccupiedHeatingSetpoint = 13052, - Zo_UtilityName = 13078, - Zo_ValidUntilTime = 13090, - Zo_ValvePosition = 13105, - Zo_VelocityLift = 13119, - Zo_ViewGroup = 13132, - Zo_ViewScene = 13142, - Zo_VolumePerReport = 13152, - Zo_Water = 13168, - Zo_WhitePointX = 13174, - Zo_WhitePointY = 13186, - Zo_WindowCoveringType = 13198, - Zo_X = 13217, - Zo_Y = 13219, - Zo_ZCLVersion = 13221, - Zo_ZoneID = 13232, - Zo_ZoneState = 13239, - Zo_ZoneStatus = 13249, - Zo_ZoneStatusChange = 13260, - Zo_ZoneType = 13277, - Zo__ = 13286, - Zo_xx = 13288, - Zo_xx000A00 = 13291, - Zo_xx0A = 13300, - Zo_xx0A00 = 13305, - Zo_xx19 = 13312, - Zo_xx190A = 13317, - Zo_xx190A00 = 13324, - Zo_xxxx = 13333, - Zo_xxxx00 = 13338, - Zo_xxxx0A00 = 13345, - Zo_xxxxyy = 13354, - Zo_xxxxyyyy = 13361, - Zo_xxxxyyyy0A00 = 13370, - Zo_xxxxyyzz = 13383, - Zo_xxyy = 13392, - Zo_xxyy0A00 = 13397, - Zo_xxyyyy = 13406, - Zo_xxyyyy000000000000 = 13413, - Zo_xxyyyy0A0000000000 = 13432, - Zo_xxyyyyzz = 13451, - Zo_xxyyyyzzzz = 13460, - Zo_xxyyzzzz = 13471, + Zo_CO2 = 3182, + Zo_CO2MaxMeasuredValue = 3186, + Zo_CO2MinMeasuredValue = 3206, + Zo_CO2Tolerance = 3226, + Zo_CT = 3239, + Zo_CalculationPeriod = 3242, + Zo_CcommissioningExitMode = 3260, + Zo_CheckinInterval = 3283, + Zo_CheckinIntervalMin = 3299, + Zo_ClientActiveFunctionality = 3318, + Zo_ClientFunctionality = 3344, + Zo_ClosedLimit = 3364, + Zo_Color = 3376, + Zo_ColorCapabilities = 3382, + Zo_ColorLoopActive = 3400, + Zo_ColorLoopDirection = 3416, + Zo_ColorLoopStartEnhancedHue = 3435, + Zo_ColorLoopStoredEnhancedHue = 3461, + Zo_ColorLoopTime = 3488, + Zo_ColorMode = 3502, + Zo_ColorMove = 3512, + Zo_ColorPointBIntensity = 3522, + Zo_ColorPointBX = 3543, + Zo_ColorPointBY = 3556, + Zo_ColorPointGIntensity = 3569, + Zo_ColorPointGX = 3590, + Zo_ColorPointGY = 3603, + Zo_ColorPointRIntensity = 3616, + Zo_ColorPointRX = 3637, + Zo_ColorPointRY = 3650, + Zo_ColorStartUpColorTempireds = 3663, + Zo_ColorStep = 3690, + Zo_ColorTempMove = 3700, + Zo_ColorTempMoveDown = 3714, + Zo_ColorTempMoveStop = 3732, + Zo_ColorTempMoveUp = 3750, + Zo_ColorTempPhysicalMaxMireds = 3766, + Zo_ColorTempPhysicalMinMireds = 3793, + Zo_ColorTempStep = 3820, + Zo_ColorTempStepDown = 3834, + Zo_ColorTempStepUp = 3852, + Zo_CommissioningWindow = 3868, + Zo_CommunicationMode = 3888, + Zo_CompanyName = 3906, + Zo_CompensationText = 3918, + Zo_ConfigStatus = 3935, + Zo_Contact = 3948, + Zo_ControlSequenceOfOperation = 3956, + Zo_ControlTemperature = 3983, + Zo_Coordinate1 = 4002, + Zo_Coordinate2 = 4014, + Zo_Coordinate3 = 4026, + Zo_CurrentBlock = 4038, + Zo_CurrentBlockPeriodConsumptionDelivered = 4051, + Zo_CurrentGroup = 4090, + Zo_CurrentInletEnergyCarrierDemand = 4103, + Zo_CurrentInletEnergyCarrierSummation = 4135, + Zo_CurrentMaxDemandDelivered = 4170, + Zo_CurrentMaxDemandDeliveredTime = 4196, + Zo_CurrentMaxDemandReceived = 4226, + Zo_CurrentMaxDemandReceivedTime = 4251, + Zo_CurrentOutletEnergyCarrierDemand = 4280, + Zo_CurrentOutletEnergyCarrierSummation = 4313, + Zo_CurrentPositionLift = 4349, + Zo_CurrentPositionLiftPercentage = 4369, + Zo_CurrentPositionTilt = 4399, + Zo_CurrentPositionTiltPercentage = 4419, + Zo_CurrentScene = 4449, + Zo_CurrentSummationDelivered = 4462, + Zo_CurrentSummationReceived = 4488, + Zo_CurrentTemperature = 4513, + Zo_CurrentTemperatureSetPoint = 4532, + Zo_CurrentZoneSensitivityLevel = 4559, + Zo_CustomerName = 4587, + Zo_DCCurrent = 4600, + Zo_DCCurrentDivisor = 4610, + Zo_DCCurrentMax = 4627, + Zo_DCCurrentMin = 4640, + Zo_DCCurrentMultiplier = 4653, + Zo_DCCurrentOverload = 4673, + Zo_DCOverloadAlarmsMask = 4691, + Zo_DCPower = 4712, + Zo_DCPowerDivisor = 4720, + Zo_DCPowerMax = 4735, + Zo_DCPowerMin = 4746, + Zo_DCPowerMultiplier = 4757, + Zo_DCVoltage = 4775, + Zo_DCVoltageDivisor = 4785, + Zo_DCVoltageMax = 4802, + Zo_DCVoltageMin = 4815, + Zo_DCVoltageMultiplier = 4828, + Zo_DCVoltageOverload = 4848, + Zo_DFTSummation = 4866, + Zo_DailyConsumptionTarget = 4879, + Zo_DailyFreezeTime = 4902, + Zo_DataQualityID = 4918, + Zo_DateCode = 4932, + Zo_DecelerationTimeLift = 4941, + Zo_DefaultMoveRate = 4962, + Zo_DefaultUpdatePeriod = 4978, + Zo_DehumidificationCooling = 4998, + Zo_DehumidificationHysteresis = 5022, + Zo_DehumidificationLockout = 5049, + Zo_DehumidificationMaxCool = 5073, + Zo_DeviceEnabled = 5097, + Zo_DeviceTempAlarmMask = 5111, + Zo_Dimmer = 5131, + Zo_DimmerCurrentFrequency = 5138, + Zo_DimmerDown = 5161, + Zo_DimmerMaxFrequency = 5172, + Zo_DimmerMaxLevel = 5191, + Zo_DimmerMinFrequency = 5206, + Zo_DimmerMinLevel = 5225, + Zo_DimmerMove = 5240, + Zo_DimmerOptions = 5251, + Zo_DimmerRemainingTime = 5265, + Zo_DimmerStartUpLevel = 5285, + Zo_DimmerStep = 5304, + Zo_DimmerStepDown = 5315, + Zo_DimmerStepUp = 5330, + Zo_DimmerStop = 5343, + Zo_DimmerUp = 5354, + Zo_DisableLocalConfig = 5363, + Zo_DoorClosedEvents = 5382, + Zo_DoorOpenEvents = 5399, + Zo_DoorState = 5414, + Zo_DriftCompensation = 5424, + Zo_DstEnd = 5442, + Zo_DstShift = 5449, + Zo_DstStart = 5458, + Zo_ElectricalMeasurementType = 5467, + Zo_EnergyFormatting = 5493, + Zo_EnergyRemote = 5510, + Zo_EnhancedColorMode = 5523, + Zo_EnhancedCurrentHue = 5541, + Zo_EurotronicErrors = 5560, + Zo_EurotronicHostFlags = 5577, + Zo_FanMode = 5597, + Zo_FanModeSequence = 5605, + Zo_FastPollTimeout = 5621, + Zo_FastPollTimeoutMax = 5637, + Zo_FastPollUpdatePeriod = 5656, + Zo_Fire = 5677, + Zo_FlowMaxMeasuredValue = 5682, + Zo_FlowMinMeasuredValue = 5703, + Zo_FlowRate = 5724, + Zo_FlowRestriction = 5733, + Zo_FlowTolerance = 5749, + Zo_GPHueStop = 5763, + Zo_GPIdentify = 5773, + Zo_GPLevelStop = 5784, + Zo_GPLockDoor = 5796, + Zo_GPMoveColor = 5807, + Zo_GPMoveDown = 5819, + Zo_GPMoveDownOnOff = 5830, + Zo_GPMoveHueDown = 5846, + Zo_GPMoveHueUp = 5860, + Zo_GPMoveSatDown = 5872, + Zo_GPMoveSatUp = 5886, + Zo_GPMoveUp = 5898, + Zo_GPMoveUpOnOff = 5907, + Zo_GPOff = 5921, + Zo_GPOn = 5927, + Zo_GPPress1of1 = 5932, + Zo_GPPress1of2 = 5944, + Zo_GPPress2of2 = 5956, + Zo_GPRelease = 5968, + Zo_GPRelease1of1 = 5978, + Zo_GPRelease1of2 = 5992, + Zo_GPRelease2of2 = 6006, + Zo_GPSatStop = 6020, + Zo_GPScene0 = 6030, + Zo_GPScene1 = 6039, + Zo_GPScene10 = 6048, + Zo_GPScene11 = 6058, + Zo_GPScene12 = 6068, + Zo_GPScene13 = 6078, + Zo_GPScene14 = 6088, + Zo_GPScene15 = 6098, + Zo_GPScene2 = 6108, + Zo_GPScene3 = 6117, + Zo_GPScene4 = 6126, + Zo_GPScene5 = 6135, + Zo_GPScene6 = 6144, + Zo_GPScene7 = 6153, + Zo_GPScene8 = 6162, + Zo_GPScene9 = 6171, + Zo_GPShortPress1of1 = 6180, + Zo_GPShortPress1of2 = 6197, + Zo_GPShortPress2of2 = 6214, + Zo_GPStepColor = 6231, + Zo_GPStepDown = 6243, + Zo_GPStepDownOnOff = 6254, + Zo_GPStepHueDown = 6270, + Zo_GPStepHueUp = 6284, + Zo_GPStepSatDown = 6296, + Zo_GPStepSatUp = 6310, + Zo_GPStepUp = 6322, + Zo_GPStepUpOnOff = 6331, + Zo_GPToggle = 6345, + Zo_GPUnlockDoor = 6354, + Zo_GenericDeviceClass = 6367, + Zo_GenericDeviceType = 6386, + Zo_GetAllGroups = 6404, + Zo_GetGroup = 6417, + Zo_GetSceneMembership = 6426, + Zo_GlassBreak = 6445, + Zo_GroupNameSupport = 6456, + Zo_HVACSystemTypeConfiguration = 6473, + Zo_HWVersion = 6501, + Zo_HarmonicCurrentMultiplier = 6511, + Zo_HighTempDwellTripPoint = 6537, + Zo_HighTempThreshold = 6560, + Zo_Hue = 6578, + Zo_HueMove = 6582, + Zo_HueSat = 6590, + Zo_HueStep = 6597, + Zo_HueStepDown = 6605, + Zo_HueStepUp = 6617, + Zo_Humidity = 6627, + Zo_HumidityMaxMeasuredValue = 6636, + Zo_HumidityMinMeasuredValue = 6661, + Zo_HumidityTolerance = 6686, + Zo_IASCIEAddress = 6704, + Zo_Identify = 6718, + Zo_IdentifyQuery = 6727, + Zo_IdentifyTime = 6741, + Zo_Illuminance = 6754, + Zo_IlluminanceLevelStatus = 6766, + Zo_IlluminanceLightSensorType = 6789, + Zo_IlluminanceMaxMeasuredValue = 6816, + Zo_IlluminanceMinMeasuredValue = 6844, + Zo_IlluminanceTargetLevel = 6872, + Zo_IlluminanceTolerance = 6895, + Zo_InletTemperature = 6916, + Zo_InstalledClosedLimitLift = 6933, + Zo_InstalledClosedLimitTilt = 6958, + Zo_InstalledOpenLimitLift = 6983, + Zo_InstalledOpenLimitTilt = 7006, + Zo_IntermediateSetpointsLift = 7029, + Zo_IntermediateSetpointsTilt = 7055, + Zo_IntervalReadReportingPeriod = 7081, + Zo_IntrinsicBallastFactor = 7109, + Zo_LampAlarmMode = 7132, + Zo_LampBurnHours = 7146, + Zo_LampBurnHoursTripPoint = 7160, + Zo_LampManufacturer = 7183, + Zo_LampRatedHours = 7200, + Zo_LampType = 7215, + Zo_LastConfiguredBy = 7224, + Zo_LastMessageLQI = 7241, + Zo_LastMessageRSSI = 7256, + Zo_LastSetTime = 7272, + Zo_LegrandHeatingMode = 7284, + Zo_LegrandMode = 7303, + Zo_LegrandOpt1 = 7315, + Zo_LegrandOpt2 = 7327, + Zo_LegrandOpt3 = 7339, + Zo_LidlPower = 7351, + Zo_LineCurrent = 7361, + Zo_LineCurrentPhB = 7373, + Zo_LineCurrentPhC = 7388, + Zo_LinkKey = 7403, + Zo_LocalTemperature = 7411, + Zo_LocalTemperatureCalibration = 7428, + Zo_LocalTime = 7456, + Zo_LocationAge = 7466, + Zo_LocationDescription = 7478, + Zo_LocationMethod = 7498, + Zo_LocationPower = 7513, + Zo_LocationType = 7527, + Zo_LockAlarmMask = 7540, + Zo_LockDefaultConfigurationRegister = 7554, + Zo_LockEnableInsideStatusLED = 7587, + Zo_LockEnableLocalProgramming = 7613, + Zo_LockEnableLogging = 7640, + Zo_LockEnableOneTouchLocking = 7658, + Zo_LockEnablePrivacyModeButton = 7684, + Zo_LockKeypadOperationEventMask = 7712, + Zo_LockKeypadProgrammingEventMask = 7741, + Zo_LockLEDSettings = 7772, + Zo_LockLanguage = 7788, + Zo_LockManualOperationEventMask = 7801, + Zo_LockOperatingMode = 7830, + Zo_LockRFIDOperationEventMask = 7848, + Zo_LockRFIDProgrammingEventMask = 7875, + Zo_LockRFOperationEventMask = 7904, + Zo_LockRFProgrammingEventMask = 7929, + Zo_LockSoundVolume = 7956, + Zo_LockState = 7972, + Zo_LockSupportedOperatingModes = 7982, + Zo_LockType = 8010, + Zo_LongPollInterval = 8019, + Zo_LongPollIntervalMin = 8036, + Zo_LowTempDwellTripPoint = 8056, + Zo_LowTempThreshold = 8078, + Zo_MainsAlarmMask = 8095, + Zo_MainsFrequency = 8110, + Zo_MainsVoltage = 8125, + Zo_MainsVoltageDwellTripPoint = 8138, + Zo_MainsVoltageMaxThreshold = 8165, + Zo_MainsVoltageMinThreshold = 8190, + Zo_Manufacturer = 8215, + Zo_MaxCoolSetpointLimit = 8228, + Zo_MaxHeatSetpointLimit = 8249, + Zo_MaxPINCodeLength = 8270, + Zo_MaxProxyTableEntries = 8287, + Zo_MaxRFIDCodeLength = 8308, + Zo_MaxSearchCounter = 8326, + Zo_MaxSinkTableEntries = 8343, + Zo_MaxTempExperienced = 8363, + Zo_Measured11thHarmonicCurrent = 8382, + Zo_Measured1stHarmonicCurrent = 8410, + Zo_Measured3rdHarmonicCurrent = 8437, + Zo_Measured5thHarmonicCurrent = 8464, + Zo_Measured7thHarmonicCurrent = 8491, + Zo_Measured9thHarmonicCurrent = 8518, + Zo_MeasuredPhase11thHarmonicCurrent = 8545, + Zo_MeasuredPhase1stHarmonicCurrent = 8578, + Zo_MeasuredPhase3rdHarmonicCurrent = 8610, + Zo_MeasuredPhase5thHarmonicCurrent = 8642, + Zo_MeasuredPhase7thHarmonicCurrent = 8674, + Zo_MeasuredPhase9thHarmonicCurrent = 8706, + Zo_MeterTypeID = 8738, + Zo_MinCoolSetpointLimit = 8750, + Zo_MinHeatSetpointLimit = 8771, + Zo_MinPINCodeLength = 8792, + Zo_MinRFIDCodeLength = 8809, + Zo_MinSetpointDeadBand = 8827, + Zo_MinTempExperienced = 8847, + Zo_Mode = 8866, + Zo_Model = 8871, + Zo_ModelId = 8877, + Zo_MotorStepSize = 8885, + Zo_Movement = 8899, + Zo_MullerLightMode = 8908, + Zo_MultiApplicationType = 8924, + Zo_MultiDescription = 8945, + Zo_MultiInApplicationType = 8962, + Zo_MultiInDescription = 8985, + Zo_MultiInNumberOfStates = 9004, + Zo_MultiInOutOfService = 9026, + Zo_MultiInReliability = 9046, + Zo_MultiInStatusFlags = 9065, + Zo_MultiInValue = 9084, + Zo_MultiNumberOfStates = 9097, + Zo_MultiOutApplicationType = 9117, + Zo_MultiOutDescription = 9141, + Zo_MultiOutNumberOfStates = 9161, + Zo_MultiOutOfService = 9184, + Zo_MultiOutOutOfService = 9202, + Zo_MultiOutReliability = 9223, + Zo_MultiOutRelinquishDefault = 9243, + Zo_MultiOutStatusFlags = 9269, + Zo_MultiOutValue = 9289, + Zo_MultiReliability = 9303, + Zo_MultiRelinquishDefault = 9320, + Zo_MultiStatusFlags = 9343, + Zo_MultiValue = 9360, + Zo_MultipleScheduling = 9371, + Zo_NeutralCurrent = 9390, + Zo_NotificationRetryNumber = 9405, + Zo_NotificationRetryTimer = 9429, + Zo_NumberOfDevices = 9452, + Zo_NumberOfHolidaySchedulesSupported = 9468, + Zo_NumberOfLogRecordsSupported = 9502, + Zo_NumberOfPINUsersSupported = 9530, + Zo_NumberOfPrimaries = 9556, + Zo_NumberOfRFIDUsersSupported = 9574, + Zo_NumberOfResets = 9601, + Zo_NumberOfTotalUsersSupported = 9616, + Zo_NumberOfWeekDaySchedulesSupportedPerUser = 9644, + Zo_NumberOfYearDaySchedulesSupportedPerUser = 9685, + Zo_NumberOfZoneSensitivityLevelsSupported = 9726, + Zo_NumberRSSIMeasurements = 9765, + Zo_NumberofActuationsLift = 9788, + Zo_NumberofActuationsTilt = 9811, + Zo_Occupancy = 9834, + Zo_OccupancySensorType = 9844, + Zo_OccupiedCoolingSetpoint = 9864, + Zo_OccupiedHeatingSetpoint = 9888, + Zo_OffTransitionTime = 9912, + Zo_OffWaitTime = 9930, + Zo_OnLevel = 9942, + Zo_OnOff = 9950, + Zo_OnOffTransitionTime = 9956, + Zo_OnTime = 9976, + Zo_OnTransitionTime = 9983, + Zo_OpenPeriod = 10000, + Zo_OppleMode = 10011, + Zo_OutdoorTemperature = 10021, + Zo_OutletTemperature = 10040, + Zo_OverTempTotalDwell = 10058, + Zo_PICoolingDemand = 10077, + Zo_PIHeatingDemand = 10093, + Zo_PIROccupiedToUnoccupiedDelay = 10109, + Zo_PIRUnoccupiedToOccupiedDelay = 10138, + Zo_PIRUnoccupiedToOccupiedThreshold = 10167, + Zo_POD = 10200, + Zo_Panic = 10204, + Zo_PartNumber = 10210, + Zo_PathLossExponent = 10221, + Zo_PersistentMemoryWrites = 10238, + Zo_PersonalAlarm = 10261, + Zo_PhaseHarmonicCurrentMultiplier = 10275, + Zo_PhysicalClosedLimit = 10306, + Zo_PhysicalClosedLimitLift = 10326, + Zo_PhysicalClosedLimitTilt = 10350, + Zo_PhysicalEnvironment = 10374, + Zo_Power = 10394, + Zo_PowerDivisor = 10400, + Zo_PowerFactor = 10413, + Zo_PowerFactorPhB = 10425, + Zo_PowerFactorPhC = 10440, + Zo_PowerMultiplier = 10455, + Zo_PowerOffEffect = 10471, + Zo_PowerOnRecall = 10486, + Zo_PowerOnTimer = 10500, + Zo_PowerSource = 10513, + Zo_PowerThreshold = 10525, + Zo_PresetReadingTime = 10540, + Zo_Pressure = 10558, + Zo_PressureMaxMeasuredValue = 10567, + Zo_PressureMaxScaledValue = 10592, + Zo_PressureMinMeasuredValue = 10615, + Zo_PressureMinScaledValue = 10640, + Zo_PressureScale = 10663, + Zo_PressureScaledTolerance = 10677, + Zo_PressureScaledValue = 10701, + Zo_PressureTolerance = 10721, + Zo_PreviousBlockPeriodConsumptionDelivered = 10739, + Zo_Primary1Intensity = 10779, + Zo_Primary1X = 10797, + Zo_Primary1Y = 10807, + Zo_Primary2Intensity = 10817, + Zo_Primary2X = 10835, + Zo_Primary2Y = 10845, + Zo_Primary3Intensity = 10855, + Zo_Primary3X = 10873, + Zo_Primary3Y = 10883, + Zo_Primary4Intensity = 10893, + Zo_Primary4X = 10911, + Zo_Primary4Y = 10921, + Zo_Primary5Intensity = 10931, + Zo_Primary5X = 10949, + Zo_Primary5Y = 10959, + Zo_Primary6Intensity = 10969, + Zo_Primary6X = 10987, + Zo_Primary6Y = 10997, + Zo_ProductCode = 11007, + Zo_ProductRevision = 11019, + Zo_ProductURL = 11035, + Zo_ProfileIntervalPeriod = 11046, + Zo_ProxyTable = 11068, + Zo_QualityMeasure = 11079, + Zo_RGB = 11094, + Zo_RHDehumidificationSetpoint = 11098, + Zo_RMSCurrent = 11125, + Zo_RMSCurrentMax = 11136, + Zo_RMSCurrentMaxPhB = 11150, + Zo_RMSCurrentMaxPhC = 11167, + Zo_RMSCurrentMin = 11184, + Zo_RMSCurrentMinPhB = 11198, + Zo_RMSCurrentMinPhC = 11215, + Zo_RMSCurrentPhB = 11232, + Zo_RMSCurrentPhC = 11246, + Zo_RMSExtremeOverVoltage = 11260, + Zo_RMSExtremeOverVoltagePeriod = 11282, + Zo_RMSExtremeOverVoltagePeriodPhB = 11310, + Zo_RMSExtremeOverVoltagePeriodPhC = 11341, + Zo_RMSExtremeUnderVoltage = 11372, + Zo_RMSExtremeUnderVoltagePeriod = 11395, + Zo_RMSExtremeUnderVoltagePeriodPhB = 11424, + Zo_RMSExtremeUnderVoltagePeriodPhC = 11456, + Zo_RMSVoltage = 11488, + Zo_RMSVoltageMax = 11499, + Zo_RMSVoltageMaxPhB = 11513, + Zo_RMSVoltageMaxPhC = 11530, + Zo_RMSVoltageMin = 11547, + Zo_RMSVoltageMinPhB = 11561, + Zo_RMSVoltageMinPhC = 11578, + Zo_RMSVoltagePhB = 11595, + Zo_RMSVoltagePhC = 11609, + Zo_RMSVoltageSag = 11623, + Zo_RMSVoltageSagPeriod = 11637, + Zo_RMSVoltageSagPeriodPhB = 11657, + Zo_RMSVoltageSagPeriodPhC = 11680, + Zo_RMSVoltageSwell = 11703, + Zo_RMSVoltageSwellPeriod = 11719, + Zo_RMSVoltageSwellPeriodPhB = 11741, + Zo_RMSVoltageSwellPeriodPhC = 11766, + Zo_ReactiveCurrent = 11791, + Zo_ReactiveCurrentPhB = 11807, + Zo_ReactiveCurrentPhC = 11826, + Zo_ReactivePower = 11845, + Zo_ReactivePowerPhB = 11859, + Zo_ReactivePowerPhC = 11876, + Zo_ReadingSnapShotTime = 11893, + Zo_RecallScene = 11913, + Zo_RelativeHumidity = 11925, + Zo_RelativeHumidityDisplay = 11942, + Zo_RelativeHumidityMode = 11966, + Zo_RemainingTime = 11987, + Zo_RemoteSensing = 12001, + Zo_RemoveAllGroups = 12015, + Zo_RemoveAllScenes = 12031, + Zo_RemoveGroup = 12047, + Zo_RemoveScene = 12059, + Zo_ReportingPeriod = 12071, + Zo_ResetAlarm = 12087, + Zo_ResetAllAlarms = 12098, + Zo_SWBuildID = 12113, + Zo_Sat = 12123, + Zo_SatMove = 12127, + Zo_SatStep = 12135, + Zo_SceneCount = 12143, + Zo_SceneNameSupport = 12154, + Zo_SceneValid = 12171, + Zo_ScheduleMode = 12182, + Zo_SeaPressure = 12195, + Zo_SecurityLevel = 12207, + Zo_ServerActiveFunctionality = 12221, + Zo_ServerFunctionality = 12247, + Zo_SharedSecurityKey = 12267, + Zo_SharedSecurityKeyType = 12285, + Zo_ShortPollInterval = 12307, + Zo_Shutter = 12325, + Zo_ShutterClose = 12333, + Zo_ShutterLift = 12346, + Zo_ShutterOpen = 12358, + Zo_ShutterStop = 12370, + Zo_ShutterTilt = 12382, + Zo_SinkTable = 12394, + Zo_SoftwareRevision = 12404, + Zo_StackVersion = 12421, + Zo_StandardTime = 12434, + Zo_StartUpOnOff = 12447, + Zo_Status = 12460, + Zo_StoreScene = 12467, + Zo_SupplyStatus = 12478, + Zo_SwitchActions = 12491, + Zo_SwitchType = 12505, + Zo_SystemMode = 12516, + Zo_TRVBoost = 12527, + Zo_TRVChildProtection = 12536, + Zo_TRVMirrorDisplay = 12555, + Zo_TRVMode = 12572, + Zo_TRVWindowOpen = 12580, + Zo_TempTarget = 12594, + Zo_Temperature = 12605, + Zo_TemperatureDisplayMode = 12617, + Zo_TemperatureMaxMeasuredValue = 12640, + Zo_TemperatureMinMeasuredValue = 12668, + Zo_TemperatureTolerance = 12696, + Zo_TerncyDuration = 12717, + Zo_TerncyRotate = 12732, + Zo_ThSetpoint = 12745, + Zo_ThermostatAlarmMask = 12756, + Zo_ThermostatKeypadLockout = 12776, + Zo_ThermostatOccupancy = 12800, + Zo_ThermostatRunningMode = 12820, + Zo_ThermostatScheduleProgrammingVisibility = 12842, + Zo_Time = 12882, + Zo_TimeEpoch = 12887, + Zo_TimeStatus = 12897, + Zo_TimeZone = 12908, + Zo_TotalActivePower = 12917, + Zo_TotalApparentPower = 12934, + Zo_TotalProfileNum = 12953, + Zo_TotalReactivePower = 12969, + Zo_TuyaCalibration = 12988, + Zo_TuyaCalibrationTime = 13004, + Zo_TuyaMCUVersion = 13024, + Zo_TuyaMotorReversal = 13039, + Zo_TuyaMovingState = 13057, + Zo_TuyaQuery = 13073, + Zo_UnoccupiedCoolingSetpoint = 13083, + Zo_UnoccupiedHeatingSetpoint = 13109, + Zo_UtilityName = 13135, + Zo_ValidUntilTime = 13147, + Zo_ValvePosition = 13162, + Zo_VelocityLift = 13176, + Zo_ViewGroup = 13189, + Zo_ViewScene = 13199, + Zo_VolumePerReport = 13209, + Zo_Water = 13225, + Zo_WhitePointX = 13231, + Zo_WhitePointY = 13243, + Zo_WindowCoveringType = 13255, + Zo_X = 13274, + Zo_Y = 13276, + Zo_ZCLVersion = 13278, + Zo_ZoneID = 13289, + Zo_ZoneState = 13296, + Zo_ZoneStatus = 13306, + Zo_ZoneStatusChange = 13317, + Zo_ZoneType = 13334, + Zo__ = 13343, + Zo_xx = 13345, + Zo_xx000A00 = 13348, + Zo_xx0A = 13357, + Zo_xx0A00 = 13362, + Zo_xx19 = 13369, + Zo_xx190A = 13374, + Zo_xx190A00 = 13381, + Zo_xxxx = 13390, + Zo_xxxx00 = 13395, + Zo_xxxx0A00 = 13402, + Zo_xxxxyy = 13411, + Zo_xxxxyyyy = 13418, + Zo_xxxxyyyy0A00 = 13427, + Zo_xxxxyyzz = 13440, + Zo_xxyy = 13449, + Zo_xxyy0A00 = 13454, + Zo_xxyyyy = 13463, + Zo_xxyyyy000000000000 = 13470, + Zo_xxyyyy0A0000000000 = 13489, + Zo_xxyyyyzz = 13508, + Zo_xxyyyyzzzz = 13517, + Zo_xxyyzzzz = 13528, }; diff --git a/tasmota/tasmota_xdrv_driver/xdrv_23_zigbee_5_1_attributes.ino b/tasmota/tasmota_xdrv_driver/xdrv_23_zigbee_5_1_attributes.ino index be274ab40..8978b0ad6 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_23_zigbee_5_1_attributes.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_23_zigbee_5_1_attributes.ino @@ -190,8 +190,8 @@ enum Cx_cluster_short { Cx0010, Cx0011, Cx0012, Cx0013, Cx0014, Cx001A, Cx0020, Cx0021, Cx0100, Cx0101, Cx0102, Cx0201, Cx0202, Cx0203, Cx0204, Cx0300, Cx0301, Cx0400, Cx0401, Cx0402, Cx0403, - Cx0404, Cx0405, Cx0406, Cx0500, Cx0702, Cx0B01, Cx0B04, Cx0B05, - CxEF00, CxFC01, CxFC40, CxFCC0, CxFCCC, + Cx0404, Cx0405, Cx0406, Cx040D, Cx0500, Cx0702, Cx0B01, Cx0B04, + Cx0B05, CxEF00, CxFC01, CxFC40, CxFCC0, CxFCCC, }; const uint16_t Cx_cluster[] PROGMEM = { @@ -200,8 +200,8 @@ const uint16_t Cx_cluster[] PROGMEM = { 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x001A, 0x0020, 0x0021, 0x0100, 0x0101, 0x0102, 0x0201, 0x0202, 0x0203, 0x0204, 0x0300, 0x0301, 0x0400, 0x0401, 0x0402, 0x0403, - 0x0404, 0x0405, 0x0406, 0x0500, 0x0702, 0x0B01, 0x0B04, 0x0B05, - 0xEF00, 0xFC01, 0xFC40, 0xFCC0, 0xFCCC, + 0x0404, 0x0405, 0x0406, 0x040D, 0x0500, 0x0702, 0x0B01, 0x0B04, + 0x0B05, 0xEF00, 0xFC01, 0xFC40, 0xFCC0, 0xFCCC, }; uint16_t CxToCluster(uint8_t cx) { @@ -223,20 +223,20 @@ uint8_t ClusterToCx(uint16_t cluster) { // Multiplier contains only a limited set of values, so instead of storing the value // we store an index in a table, and reduce it to 4 bits enum Cm_multiplier_nibble { - Cm0 = 0, Cm1 = 1, Cm2, Cm5, Cm10, Cm100, + Cm0 = 0, Cm1 = 1, Cm2, Cm5, Cm10, Cm100, Cm1000000, // negative numbers Cm_2, Cm_5, Cm_10, Cm_100 }; -const int8_t Cm_multiplier[] PROGMEM = { - 0, 1, 2, 5, 10, 100, - -2, -5, -10, -100, +const int32_t Cm_multiplier[] PROGMEM = { + 0, 1, 2, 5, 10, 100, 1000000, + -2, -5, -10, -100 }; -int8_t CmToMultiplier(uint8_t cm) { +int32_t CmToMultiplier(uint8_t cm) { cm = cm & 0x0F; // get only low nibble if (cm < nitems(Cm_multiplier)) { - return pgm_read_byte(&Cm_multiplier[cm]); + return pgm_read_dword(&Cm_multiplier[cm]); } return 1; } @@ -1109,6 +1109,13 @@ const Z_AttributeConverter Z_PostProcess[] PROGMEM = { { Zuint8, Cx0406, 0x0012, Z_(PIRUnoccupiedToOccupiedThreshold), Cm1, 0 }, // { Zunk, Cx0406, 0xFFFF, Z_(), Cm0, 0 }, // Remove all other values + // CO2 Concentration Measurement cluster + { Zsingle, Cx040D, 0x0000, Z_(CO2), Cm1000000 + Z_EXPORT_DATA, Z_MAPPING(Z_Data_Thermo, CO2) }, // CO2 (ppm) + { Zsingle, Cx040D, 0x0001, Z_(CO2MinMeasuredValue), Cm1000000, 0 }, // + { Zsingle, Cx040D, 0x0002, Z_(CO2MaxMeasuredValue), Cm1000000, 0 }, // + { Zsingle, Cx040D, 0x0003, Z_(CO2Tolerance), Cm1000000, 0 }, // + // { Zunk, Cx040D, 0xFFFF, Z_(), Cm0, 0 }, // Remove all other values + // IAS Cluster (Intruder Alarm System) { Zenum8, Cx0500, 0x0000, Z_(ZoneState), Cm1, 0 }, // Occupancy (map8) { Zenum16, Cx0500, 0x0001, Z_(ZoneType), Cm1 + Z_EXPORT_DATA, Z_MAPPING(Z_Data_Alarm, zone_type) }, // Zone type for sensor diff --git a/tasmota/tasmota_xdrv_driver/xdrv_23_zigbee_5_2_converters.ino b/tasmota/tasmota_xdrv_driver/xdrv_23_zigbee_5_2_converters.ino index 66d135706..8b91c9edd 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_23_zigbee_5_2_converters.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_23_zigbee_5_2_converters.ino @@ -46,9 +46,9 @@ class Z_attribute_match Z_findAttributeMatcherByName(uint16_t shortaddr, const c matched_attr.cluster = CxToCluster(pgm_read_byte(&converter->cluster_short)); matched_attr.attribute = pgm_read_word(&converter->attribute); matched_attr.name = (Z_strings + pgm_read_word(&converter->name_offset)); - int8_t multiplier8 = CmToMultiplier(pgm_read_byte(&converter->multiplier_idx)); - if (multiplier8 > 1) { matched_attr.multiplier = multiplier8; } - if (multiplier8 < 0) { matched_attr.divider = -multiplier8; } + int32_t multiplier32 = CmToMultiplier(pgm_read_byte(&converter->multiplier_idx)); + if (multiplier32 > 1) { matched_attr.multiplier = multiplier32; } + if (multiplier32 < 0) { matched_attr.divider = -multiplier32; } matched_attr.zigbee_type = pgm_read_byte(&converter->type); uint8_t conv_mapping = pgm_read_byte(&converter->mapping); matched_attr.map_type = (Z_Data_Type) ((conv_mapping & 0xF0)>>4); @@ -79,9 +79,9 @@ class Z_attribute_match Z_findAttributeMatcherById(uint16_t shortaddr, uint16_t matched_attr.cluster = cluster; matched_attr.attribute = attr_id; matched_attr.name = (Z_strings + pgm_read_word(&converter->name_offset)); - int8_t multiplier8 = CmToMultiplier(pgm_read_byte(&converter->multiplier_idx)); - if (multiplier8 > 1) { matched_attr.multiplier = multiplier8; } - if (multiplier8 < 0) { matched_attr.divider = -multiplier8; } + int32_t multiplier32 = CmToMultiplier(pgm_read_byte(&converter->multiplier_idx)); + if (multiplier32 > 1) { matched_attr.multiplier = multiplier32; } + if (multiplier32 < 0) { matched_attr.divider = -multiplier32; } matched_attr.zigbee_type = pgm_read_byte(&converter->type); uint8_t conv_mapping = pgm_read_byte(&converter->mapping); matched_attr.map_type = (Z_Data_Type) ((conv_mapping & 0xF0)>>4); @@ -1531,6 +1531,8 @@ void Z_postProcessAttributes(uint16_t shortaddr, uint16_t src_ep, class Z_attrib uint8_t * attr_address = ((uint8_t*)&data) + sizeof(Z_Data) + matched_attr.map_offset; uint32_t uval32 = attr.getUInt(); // call converter to uint only once int32_t ival32 = attr.getInt(); // call converter to int only once + float fval = attr.getFloat(); // call converter to int only once + // AddLog(LOG_LEVEL_DEBUG_MORE, PSTR(D_LOG_ZIGBEE "Mapping type=%d offset=%d zigbee_type=%02X value=%d\n"), (uint8_t) matched_attr.map_type, matched_attr.map_offset, matched_attr.zigbee_type, ival32); switch (ccccaaaa) { case 0xEF000202: @@ -1551,6 +1553,7 @@ void Z_postProcessAttributes(uint16_t shortaddr, uint16_t src_ep, class Z_attrib case Zint8: *(int8_t*)attr_address = ival32; break; case Zint16: *(int16_t*)attr_address = ival32; break; case Zint32: *(int32_t*)attr_address = ival32; break; + case Zsingle: *(float*)attr_address = fval; break; } if (Z_Data_Set::updateData(data)) { zigbee_devices.dirty(); @@ -1723,11 +1726,11 @@ void Z_Data::toAttributes(Z_attribute_list & attr_list) const { const Z_AttributeConverter *converter = &Z_PostProcess[i]; uint8_t conv_export = pgm_read_byte(&converter->multiplier_idx) & Z_EXPORT_DATA; uint8_t conv_mapping = pgm_read_byte(&converter->mapping); - uint16_t multiplier = 1; - uint16_t divider = 1; - int8_t multiplier8 = CmToMultiplier(pgm_read_byte(&converter->multiplier_idx)); - if (multiplier8 > 1) { multiplier = multiplier8; } - if (multiplier8 < 0) { divider = -multiplier8; } + uint32_t multiplier = 1; + uint32_t divider = 1; + int32_t multiplier32 = CmToMultiplier(pgm_read_byte(&converter->multiplier_idx)); + if (multiplier32 > 1) { multiplier = multiplier32; } + if (multiplier32 < 0) { divider = -multiplier32; } Z_Data_Type map_type = (Z_Data_Type) ((conv_mapping & 0xF0)>>4); uint8_t map_offset = (conv_mapping & 0x0F); diff --git a/tasmota/tasmota_xdrv_driver/xdrv_23_zigbee_7_0_statemachine.ino b/tasmota/tasmota_xdrv_driver/xdrv_23_zigbee_7_0_statemachine.ino index 136191b86..af7541fb3 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_23_zigbee_7_0_statemachine.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_23_zigbee_7_0_statemachine.ino @@ -335,11 +335,11 @@ ZBM(ZBS_AF_REGISTERF2, Z_SREQ | Z_AF, AF_REGISTER, 0xF2 /* endpoint */, Z_B0(Z_P // Z_AF:register profile:104, ep:01 - main clusters for router or device ZBM(ZBS_AF_REGISTER_ALL, Z_SREQ | Z_AF, AF_REGISTER, 0x01 /* endpoint */, Z_B0(Z_PROF_HA), Z_B1(Z_PROF_HA), // 24000401050000000000 0x05, 0x00 /* AppDeviceId */, 0x00 /* AppDevVer */, 0x00 /* LatencyReq */, - 0x0E /* AppNumInClusters */, // actually all clusters will be received + 0x0F /* AppNumInClusters */, // actually all clusters will be received 0x00,0x00, 0x04,0x00, 0x05,0x00, 0x06,0x00, // 0x0000, 0x0004, 0x0005, 0x0006 0x07,0x00, 0x08,0x00, 0x0A,0x00, 0x02,0x01, // 0x0007, 0x0008, 0x000A, 0X0102 0x00,0x03, 0x00,0x04, 0x02,0x04, 0x03,0x04, // 0x0300, 0x0400, 0x0402, 0x0403 - 0x05,0x04, 0x06,0x04, // 0x0405, 0x0406 + 0x05,0x04, 0x06,0x04, 0x0D,0x04, // 0x0405, 0x0406, 0x040D 0x00 /* AppNumOutClusters */) // Z_ZDO:mgmtPermitJoinReq @@ -724,16 +724,16 @@ ZBR(ZBR_SET_OK2, EZSP_setConfigurationValue, 0x00 /*high*/, 0x00 /*ok*/) // Add Endpoints ZBM(ZBS_ADD_ENDPOINT1, EZSP_addEndpoint, 0x00 /*high*/, 0x01 /*ep*/, Z_B0(Z_PROF_HA), Z_B1(Z_PROF_HA), 0x05, 0x00 /* AppDeviceId */, 0x00 /* AppDevVer */, - 0x0F /* inputClusterCount */, // actually all clusters will be received - 0X0F /* outputClusterCount */, // 02000104010500000F0F0000040005000600070008000A00020100030004020403040504060400050000040005000600070008000A0002010003000402040304050406040005 + 0x10 /* inputClusterCount */, // actually all clusters will be received + 0X10 /* outputClusterCount */, // 02000104010500000F0F0000040005000600070008000A00020100030004020403040504060400050000040005000600070008000A0002010003000402040304050406040005 0x00,0x00, 0x04,0x00, 0x05,0x00, 0x06,0x00, // 0x0000, 0x0004, 0x0005, 0x0006 0x07,0x00, 0x08,0x00, 0x0A,0x00, 0x02,0x01, // 0x0007, 0x0008, 0x000A, 0X0102 0x00,0x03, 0x00,0x04, 0x02,0x04, 0x03,0x04, // 0x0300, 0x0400, 0x0402, 0x0403 - 0x05,0x04, 0x06,0x04, 0x00,0x05, // 0x0405, 0x0406, 0x0500 + 0x05,0x04, 0x06,0x04, 0x0D,0x04, 0x00,0x05, // 0x0405, 0x0406, 0x040D, 0x0500 0x00,0x00, 0x04,0x00, 0x05,0x00, 0x06,0x00, // 0x0000, 0x0004, 0x0005, 0x0006 0x07,0x00, 0x08,0x00, 0x0A,0x00, 0x02,0x01, // 0x0007, 0x0008, 0x000A, 0X0102 0x00,0x03, 0x00,0x04, 0x02,0x04, 0x03,0x04, // 0x0300, 0x0400, 0x0402, 0x0403 - 0x05,0x04, 0x06,0x04, 0x00,0x05, // 0x0405, 0x0406, 0x0500 + 0x05,0x04, 0x06,0x04, 0x0D,0x04, 0x00,0x05, // 0x0405, 0x0406, 0x040D, 0x0500 ) ZBM(ZBS_ADD_ENDPOINTB, EZSP_addEndpoint, 0x00 /*high*/, 0x0B /*ep*/, Z_B0(Z_PROF_HA), Z_B1(Z_PROF_HA), 0x05, 0x00 /* AppDeviceId */, 0x00 /* AppDevVer */, diff --git a/tasmota/tasmota_xdrv_driver/xdrv_23_zigbee_8_parsers.ino b/tasmota/tasmota_xdrv_driver/xdrv_23_zigbee_8_parsers.ino index db7fede78..4f190b1f4 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_23_zigbee_8_parsers.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_23_zigbee_8_parsers.ino @@ -665,7 +665,7 @@ int32_t Z_ReceiveActiveEp(int32_t res, const SBuffer &buf) { // list of clusters that need bindings const uint8_t Z_bindings[] PROGMEM = { Cx0001, Cx0006, Cx0008, Cx0102, Cx0201, Cx0300, - Cx0400, Cx0402, Cx0403, Cx0405, Cx0406, + Cx0400, Cx0402, Cx0403, Cx0405, Cx0406, Cx040D, Cx0500, Cx0B04, }; @@ -1564,6 +1564,7 @@ const Z_autoAttributeReporting_t Z_autoAttributeReporting[] PROGMEM = { { 0x0403, 0x0000, 30, USE_ZIGBEE_MAXTIME_SENSOR, USE_ZIGBEE_AUTOBIND_PRESSURE }, // Pressure (1 hPa) { 0x0405, 0x0000, 30, USE_ZIGBEE_MAXTIME_SENSOR, USE_ZIGBEE_AUTOBIND_HUMIDITY }, // Humidity (1 %) { 0x0406, 0x0000, 10, USE_ZIGBEE_MAXTIME_SENSOR, 0 }, // Occupancy + { 0x040D, 0x0000, 60, USE_ZIGBEE_MAXTIME_SENSOR, 0.00005 }, // CO2 { 0x0500, 0x0002, 1, USE_ZIGBEE_MAXTIME_SENSOR, 0 }, // ZoneStatus }; diff --git a/tasmota/tasmota_xdrv_driver/xdrv_23_zigbee_A_impl.ino b/tasmota/tasmota_xdrv_driver/xdrv_23_zigbee_A_impl.ino index 62a5b2d75..1404baf7e 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_23_zigbee_A_impl.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_23_zigbee_A_impl.ino @@ -2285,42 +2285,49 @@ void ZigbeeShow(void) WSContentSend_PD(msg[ZB_WEB_END_STATUS], dhm); - // Sensors - const Z_Data_Thermo & thermo = device.data.find(); + for (uint8_t i = 0; i < endpoints_max; i++) { + if (0 == device.endpoints[i]) continue; + uint8_t endpoint = device.endpoints[i]; + // Sensors + const Z_Data_Thermo & thermo = device.data.find(endpoint); - if (&thermo != &z_data_unk) { - bool validTemp = thermo.validTemperature(); - bool validTempTarget = thermo.validTempTarget(); - bool validThSetpoint = thermo.validThSetpoint(); - bool validHumidity = thermo.validHumidity(); - bool validPressure = thermo.validPressure(); + if (&thermo != &z_data_unk) { + bool validTemp = thermo.validTemperature(); + bool validTempTarget = thermo.validTempTarget(); + bool validThSetpoint = thermo.validThSetpoint(); + bool validHumidity = thermo.validHumidity(); + bool validPressure = thermo.validPressure(); + bool validCO2 = thermo.validCO2(); - if (validTemp || validTempTarget || validThSetpoint || validHumidity || validPressure) { - WSContentSend_P(msg[ZB_WEB_LINE_START]); - if (validTemp) { - char buf[12]; - dtostrf(thermo.getTemperature() / 100.0f, 3, 1, buf); - WSContentSend_PD(PSTR(" ☀️ %s°C"), buf); - } - if (validTempTarget) { - char buf[12]; - dtostrf(thermo.getTempTarget() / 100.0f, 3, 1, buf); - WSContentSend_PD(PSTR(" 🎯 %s°C"), buf); - } - if (validThSetpoint) { - WSContentSend_PD(PSTR(" ⚙️ %d%%"), thermo.getThSetpoint()); - } - if (validHumidity) { - WSContentSend_P(PSTR(" 💧 %d%%"), (uint16_t)(thermo.getHumidity() / 100.0f + 0.5f)); - } - if (validPressure) { - WSContentSend_P(PSTR(" ⛅ %d hPa"), thermo.getPressure()); - } + if (validTemp || validTempTarget || validThSetpoint || validHumidity || validPressure || validCO2) { + WSContentSend_P(msg[ZB_WEB_LINE_START]); + if (validTemp) { + char buf[12]; + dtostrf(thermo.getTemperature() / 100.0f, 3, 1, buf); + WSContentSend_PD(PSTR(" ☀️ %s°C"), buf); + } + if (validTempTarget) { + char buf[12]; + dtostrf(thermo.getTempTarget() / 100.0f, 3, 1, buf); + WSContentSend_PD(PSTR(" 🎯 %s°C"), buf); + } + if (validThSetpoint) { + WSContentSend_PD(PSTR(" ⚙️ %d%%"), thermo.getThSetpoint()); + } + if (validHumidity) { + WSContentSend_P(PSTR(" 💧 %d%%"), (uint16_t)(thermo.getHumidity() / 100.0f + 0.5f)); + } + if (validPressure) { + WSContentSend_P(PSTR(" ⛅ %d hPa"), thermo.getPressure()); + } + if (validCO2) { + WSContentSend_P(PSTR(" 🫧 %.0f ppm"), 1000000*thermo.getCO2()); + } - WSContentSend_P(PSTR("{e}")); + WSContentSend_P(PSTR("{e}")); + } } } - // Light, switches and plugs const Z_Data_OnOff & onoff = device.data.find(); bool onoff_display = (&onoff != &z_data_unk) ? onoff.validPower() : false;