diff --git a/libnymea-zigbee/zcl/general/zigbeeclusterpowerconfiguration.cpp b/libnymea-zigbee/zcl/general/zigbeeclusterpowerconfiguration.cpp index 951757a..1b5af67 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; } +double ZigbeeClusterPowerConfiguration::batteryVoltage() const +{ + return m_batteryVoltage; +} + ZigbeeClusterPowerConfiguration::BatteryAlarmMask ZigbeeClusterPowerConfiguration::batteryAlarmState() const { return m_batteryAlarmState; @@ -50,7 +55,17 @@ void ZigbeeClusterPowerConfiguration::setAttribute(const ZigbeeClusterAttribute { ZigbeeCluster::setAttribute(attribute); - if (attribute.id() == AttributeBatteryPercentageRemaining) { + if (attribute.id() == AttributeBatteryVoltage) { + bool ok; + quint8 value = attribute.dataType().toUInt8(&ok); + if (ok) { + m_batteryVoltage = value / 10.0; + qCDebug(dcZigbeeCluster()) << "PowerConfiguration battery voltage changed on" << m_node << m_endpoint << this << m_batteryVoltage << "V"; + emit batteryVoltageChanged(m_batteryVoltage); + } else { + qCWarning(dcZigbeeCluster()) << "Failed to parse battery voltage attribute data" << m_node << m_endpoint << this << attribute; + } + } else if (attribute.id() == AttributeBatteryPercentageRemaining) { bool valueOk = false; quint8 value = attribute.dataType().toUInt8(&valueOk); if (valueOk) { @@ -58,7 +73,7 @@ void ZigbeeClusterPowerConfiguration::setAttribute(const ZigbeeClusterAttribute qCDebug(dcZigbeeCluster()) << "PowerConfiguration remaining battery percentage changed on" << m_node << m_endpoint << this << m_batteryPercentage << "%"; emit batteryPercentageChanged(m_batteryPercentage); } else { - qCWarning(dcZigbeeCluster()) << "Failed to parse attribute data" << m_node << m_endpoint << this << attribute; + qCWarning(dcZigbeeCluster()) << "Failed to parse battery percentage attribute data" << m_node << m_endpoint << this << attribute; } } else if (attribute.id() == AttributeBatteryAlarmState) { bool ok; diff --git a/libnymea-zigbee/zcl/general/zigbeeclusterpowerconfiguration.h b/libnymea-zigbee/zcl/general/zigbeeclusterpowerconfiguration.h index 6350071..2191e49 100644 --- a/libnymea-zigbee/zcl/general/zigbeeclusterpowerconfiguration.h +++ b/libnymea-zigbee/zcl/general/zigbeeclusterpowerconfiguration.h @@ -101,16 +101,19 @@ public: explicit ZigbeeClusterPowerConfiguration(ZigbeeNetwork *network, ZigbeeNode *node, ZigbeeNodeEndpoint *endpoint, Direction direction, QObject *parent = nullptr); double batteryPercentage() const; + double batteryVoltage() const; BatteryAlarmMask batteryAlarmState() const; private: double m_batteryPercentage = 0; + double m_batteryVoltage = 0; BatteryAlarmMask m_batteryAlarmState = BatteryAlarmNone; void setAttribute(const ZigbeeClusterAttribute &attribute) override; signals: void batteryPercentageChanged(double percentage); + void batteryVoltageChanged(double voltage); void batteryAlarmStateChanged(ZigbeeClusterPowerConfiguration::BatteryAlarmMask alarmState); };