Merge PR #48: Add Battery Alarm State support to PowerConfiguration cluster

This commit is contained in:
jenkins 2022-06-07 23:06:13 +02:00
commit 4650498d69
2 changed files with 36 additions and 7 deletions

View File

@ -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>(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<BatteryAlarmMask>(alarmState);
emit batteryAlarmStateChanged(m_batteryAlarmState);
} else {
qCWarning(dcZigbeeCluster()) << "Failed to parse attribute data" << m_node << m_endpoint << this << attribute;
}
}
}

View File

@ -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