diff --git a/libnymea-zigbee/zcl/general/zigbeeclusterpowerconfiguration.cpp b/libnymea-zigbee/zcl/general/zigbeeclusterpowerconfiguration.cpp index 936bef1..af166ff 100644 --- a/libnymea-zigbee/zcl/general/zigbeeclusterpowerconfiguration.cpp +++ b/libnymea-zigbee/zcl/general/zigbeeclusterpowerconfiguration.cpp @@ -41,6 +41,11 @@ double ZigbeeClusterPowerConfiguration::batteryPercentage() const return m_batteryPercentage; } +ZigbeeClusterPowerConfiguration::BatteryAlarmMask ZigbeeClusterPowerConfiguration::batteryAlarmState() const +{ + return m_batteryAlarmState; +} + void ZigbeeClusterPowerConfiguration::setAttribute(const ZigbeeClusterAttribute &attribute) { qCDebug(dcZigbeeCluster()) << "Update attribute" << m_node << m_endpoint << this << static_cast(attribute.id()) << attribute.dataType(); @@ -56,5 +61,14 @@ void ZigbeeClusterPowerConfiguration::setAttribute(const ZigbeeClusterAttribute } else { qCWarning(dcZigbeeCluster()) << "Failed to parse attribute data" << m_node << m_endpoint << this << attribute; } + } else if (attribute.id() == AttributeBatteryAlarmState) { + bool ok; + quint32 alarmState = attribute.dataType().toUInt32(&ok); + if (ok) { + m_batteryAlarmState = static_cast(alarmState); + emit batteryAlarmStateChanged(m_batteryAlarmState); + } else { + qCWarning(dcZigbeeCluster()) << "Failed to parse attribute data" << m_node << m_endpoint << this << attribute; + } } } diff --git a/libnymea-zigbee/zcl/general/zigbeeclusterpowerconfiguration.h b/libnymea-zigbee/zcl/general/zigbeeclusterpowerconfiguration.h index 2d3e121..6350071 100644 --- a/libnymea-zigbee/zcl/general/zigbeeclusterpowerconfiguration.h +++ b/libnymea-zigbee/zcl/general/zigbeeclusterpowerconfiguration.h @@ -79,29 +79,44 @@ public: }; Q_ENUM(Attribute) - enum MainsAlarmMask { - MainsAlarmMaskMainVoltageToLow = 0x01, - MainsAlarmMaskMainVoltageToHigh = 0x02, - MainsAlarmMaskMainPowerSupplyLost = 0x04 + enum MainsAlarm { + MainsAlarmNone = 0x00, + MainsAlarmMainVoltageToLow = 0x01, + MainsAlarmMainVoltageToHigh = 0x02, + MainsAlarmMainPowerSupplyLost = 0x04 }; - Q_ENUM(MainsAlarmMask) - Q_DECLARE_FLAGS(MainsAlarmMaskFlag, MainsAlarmMask) + Q_ENUM(MainsAlarm) + Q_DECLARE_FLAGS(MainsAlarmMask, MainsAlarm) + + enum BatteryAlarm { + BatteryAlarmNone = 0x00, + BatteryAlarmTooLowToOperate = 0x01, + BatteryAlarm1 = 0x02, + BatteryAlarm2 = 0x04, + BatteryAlarm3 = 0x08 + }; + Q_ENUM(BatteryAlarm) + Q_DECLARE_FLAGS(BatteryAlarmMask, BatteryAlarm) explicit ZigbeeClusterPowerConfiguration(ZigbeeNetwork *network, ZigbeeNode *node, ZigbeeNodeEndpoint *endpoint, Direction direction, QObject *parent = nullptr); double batteryPercentage() const; + BatteryAlarmMask batteryAlarmState() const; private: double m_batteryPercentage = 0; + BatteryAlarmMask m_batteryAlarmState = BatteryAlarmNone; void setAttribute(const ZigbeeClusterAttribute &attribute) override; signals: void batteryPercentageChanged(double percentage); + void batteryAlarmStateChanged(ZigbeeClusterPowerConfiguration::BatteryAlarmMask alarmState); }; -Q_DECLARE_OPERATORS_FOR_FLAGS(ZigbeeClusterPowerConfiguration::MainsAlarmMaskFlag) +Q_DECLARE_OPERATORS_FOR_FLAGS(ZigbeeClusterPowerConfiguration::MainsAlarmMask) +Q_DECLARE_OPERATORS_FOR_FLAGS(ZigbeeClusterPowerConfiguration::BatteryAlarmMask) #endif // ZIGBEECLUSTERPOWERCONFIGURATION_H