Merge PR #82: PowerConfiguration cluster: Add battery voltage

electricalmeasurement-formatting
jenkins 2023-02-21 17:42:47 +01:00
commit b7fe5a624e
2 changed files with 20 additions and 2 deletions

View File

@ -41,6 +41,11 @@ double ZigbeeClusterPowerConfiguration::batteryPercentage() const
return m_batteryPercentage; return m_batteryPercentage;
} }
double ZigbeeClusterPowerConfiguration::batteryVoltage() const
{
return m_batteryVoltage;
}
ZigbeeClusterPowerConfiguration::BatteryAlarmMask ZigbeeClusterPowerConfiguration::batteryAlarmState() const ZigbeeClusterPowerConfiguration::BatteryAlarmMask ZigbeeClusterPowerConfiguration::batteryAlarmState() const
{ {
return m_batteryAlarmState; return m_batteryAlarmState;
@ -50,7 +55,17 @@ void ZigbeeClusterPowerConfiguration::setAttribute(const ZigbeeClusterAttribute
{ {
ZigbeeCluster::setAttribute(attribute); 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; bool valueOk = false;
quint8 value = attribute.dataType().toUInt8(&valueOk); quint8 value = attribute.dataType().toUInt8(&valueOk);
if (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 << "%"; qCDebug(dcZigbeeCluster()) << "PowerConfiguration remaining battery percentage changed on" << m_node << m_endpoint << this << m_batteryPercentage << "%";
emit batteryPercentageChanged(m_batteryPercentage); emit batteryPercentageChanged(m_batteryPercentage);
} else { } 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) { } else if (attribute.id() == AttributeBatteryAlarmState) {
bool ok; bool ok;

View File

@ -101,16 +101,19 @@ public:
explicit ZigbeeClusterPowerConfiguration(ZigbeeNetwork *network, ZigbeeNode *node, ZigbeeNodeEndpoint *endpoint, Direction direction, QObject *parent = nullptr); explicit ZigbeeClusterPowerConfiguration(ZigbeeNetwork *network, ZigbeeNode *node, ZigbeeNodeEndpoint *endpoint, Direction direction, QObject *parent = nullptr);
double batteryPercentage() const; double batteryPercentage() const;
double batteryVoltage() const;
BatteryAlarmMask batteryAlarmState() const; BatteryAlarmMask batteryAlarmState() const;
private: private:
double m_batteryPercentage = 0; double m_batteryPercentage = 0;
double m_batteryVoltage = 0;
BatteryAlarmMask m_batteryAlarmState = BatteryAlarmNone; BatteryAlarmMask m_batteryAlarmState = BatteryAlarmNone;
void setAttribute(const ZigbeeClusterAttribute &attribute) override; void setAttribute(const ZigbeeClusterAttribute &attribute) override;
signals: signals:
void batteryPercentageChanged(double percentage); void batteryPercentageChanged(double percentage);
void batteryVoltageChanged(double voltage);
void batteryAlarmStateChanged(ZigbeeClusterPowerConfiguration::BatteryAlarmMask alarmState); void batteryAlarmStateChanged(ZigbeeClusterPowerConfiguration::BatteryAlarmMask alarmState);
}; };