Implement timeout settings for occupancy sensing cluster

pull/66/head
Michael Zanetti 2022-10-02 23:25:30 +02:00
parent a70afb965d
commit 4141de2200
2 changed files with 88 additions and 0 deletions

View File

@ -41,6 +41,48 @@ bool ZigbeeClusterOccupancySensing::occupied() const
return m_occupied;
}
quint16 ZigbeeClusterOccupancySensing::pirOccupiedToUnoccupiedDelay() const
{
return m_pirOccupiedToUnoccupiedDelay;
}
ZigbeeClusterReply *ZigbeeClusterOccupancySensing::setPirOccupiedToUnoccupiedDelay(quint16 pirOccupiedToUnoccupiedDelay)
{
ZigbeeClusterLibrary::WriteAttributeRecord record;
record.attributeId = AttributePirOccupiedToUnoccupiedDelay;
record.dataType = Zigbee::Uint16;
record.data = ZigbeeDataType(pirOccupiedToUnoccupiedDelay).data();
return writeAttributes({record});
}
quint16 ZigbeeClusterOccupancySensing::pirUnoccupiedToOccupiedDelay() const
{
return m_pirUnoccupiedToOccupiedDelay;
}
ZigbeeClusterReply *ZigbeeClusterOccupancySensing::setPirUnoccupiedToOccupiedDelay(quint16 pirUnoccupiedToOccupiedDelay)
{
ZigbeeClusterLibrary::WriteAttributeRecord record;
record.attributeId = AttributePirUnoccupiedToOccupiedDelay;
record.dataType = Zigbee::Uint16;
record.data = ZigbeeDataType(pirUnoccupiedToOccupiedDelay).data();
return writeAttributes({record});
}
quint16 ZigbeeClusterOccupancySensing::pirUnoccupiedToOccupiedThreshold() const
{
return m_pirUnoccupiedToOccupiedThreshold;
}
ZigbeeClusterReply *ZigbeeClusterOccupancySensing::setPirUnoccupiedToOccupiedThreshold(quint16 pirUnoccupiedToOccupiedThreshold)
{
ZigbeeClusterLibrary::WriteAttributeRecord record;
record.attributeId = AttributePirUnoccupiedToOccupiedThreshold;
record.dataType = Zigbee::Uint16;
record.data = ZigbeeDataType(pirUnoccupiedToOccupiedThreshold).data();
return writeAttributes({record});
}
void ZigbeeClusterOccupancySensing::setAttribute(const ZigbeeClusterAttribute &attribute)
{
ZigbeeCluster::setAttribute(attribute);
@ -56,5 +98,35 @@ void ZigbeeClusterOccupancySensing::setAttribute(const ZigbeeClusterAttribute &a
} else {
qCWarning(dcZigbeeCluster()) << "Failed to convert value from attribute" << m_node << m_endpoint << this << attribute;
}
} else if (attribute.id() == AttributePirOccupiedToUnoccupiedDelay) {
bool valueOk;
quint16 value = attribute.dataType().toUInt16(&valueOk);
if (valueOk) {
m_pirOccupiedToUnoccupiedDelay = value;
qCDebug(dcZigbeeCluster()) << "PirOccupiedToUnoccupiedDelay changed on" << m_node << m_endpoint << this << m_pirOccupiedToUnoccupiedDelay;
emit pirOccupiedToUnoccupiedDelayChanged(m_pirOccupiedToUnoccupiedDelay);
} else {
qCWarning(dcZigbeeCluster()) << "Failed to convert value from attribute" << m_node << m_endpoint << this << attribute;
}
} else if (attribute.id() == AttributePirUnoccupiedToOccupiedDelay) {
bool valueOk;
quint16 value = attribute.dataType().toUInt16(&valueOk);
if (valueOk) {
m_pirUnoccupiedToOccupiedDelay = value;
qCDebug(dcZigbeeCluster()) << "PirUnccupiedToOccupiedDelay changed on" << m_node << m_endpoint << this << m_pirOccupiedToUnoccupiedDelay;
emit pirUnoccupiedToOccupiedDelayChanged(m_pirUnoccupiedToOccupiedDelay);
} else {
qCWarning(dcZigbeeCluster()) << "Failed to convert value from attribute" << m_node << m_endpoint << this << attribute;
}
} else if (attribute.id() == AttributePirUnoccupiedToOccupiedThreshold) {
bool valueOk;
quint16 value = attribute.dataType().toUInt16(&valueOk);
if (valueOk) {
m_pirUnoccupiedToOccupiedThreshold = value;
qCDebug(dcZigbeeCluster()) << "PirUnoccupiedToOccupiedThreshold changed on" << m_node << m_endpoint << this << m_pirOccupiedToUnoccupiedDelay;
emit pirUnoccupiedToOccupiedThresholdChanged(m_pirUnoccupiedToOccupiedThreshold);
} else {
qCWarning(dcZigbeeCluster()) << "Failed to convert value from attribute" << m_node << m_endpoint << this << attribute;
}
}
}

View File

@ -74,13 +74,29 @@ public:
bool occupied() const;
quint16 pirOccupiedToUnoccupiedDelay() const;
ZigbeeClusterReply *setPirOccupiedToUnoccupiedDelay(quint16 pirOccupiedToUnoccupiedDelay);
quint16 pirUnoccupiedToOccupiedDelay() const;
ZigbeeClusterReply *setPirUnoccupiedToOccupiedDelay(quint16 pirUnoccupiedToOccupiedDelay);
quint16 pirUnoccupiedToOccupiedThreshold() const;
ZigbeeClusterReply *setPirUnoccupiedToOccupiedThreshold(quint16 pirUnoccupiedToOccupiedThreshold);
private:
bool m_occupied = false;
quint16 m_pirOccupiedToUnoccupiedDelay = 0;
quint16 m_pirUnoccupiedToOccupiedDelay = 0;
quint16 m_pirUnoccupiedToOccupiedThreshold = 0;
void setAttribute(const ZigbeeClusterAttribute &attribute) override;
signals:
void occupancyChanged(bool occupied);
void pirOccupiedToUnoccupiedDelayChanged(quint16 pirOccupiedToUnoccupiedDelay);
void pirUnoccupiedToOccupiedDelayChanged(quint16 pirUnoccupiedToOccupiedDelay);
void pirUnoccupiedToOccupiedThresholdChanged(quint16 pirUnoccupiedToOccupiedThreshold);
};