Merge PR #87: Add min/max value support to temperaturemeasurement cluster
commit
eb2386cf27
|
|
@ -36,11 +36,45 @@ ZigbeeClusterTemperatureMeasurement::ZigbeeClusterTemperatureMeasurement(ZigbeeN
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ZigbeeClusterReply *ZigbeeClusterTemperatureMeasurement::readTemperature()
|
||||||
|
{
|
||||||
|
ZigbeeClusterReply *readTempReply = readAttributes({ZigbeeClusterTemperatureMeasurement::AttributeMeasuredValue});
|
||||||
|
connect(readTempReply, &ZigbeeClusterReply::finished, this, [=](){
|
||||||
|
if (readTempReply->error() != ZigbeeClusterReply::ErrorNoError) {
|
||||||
|
qCWarning(dcZigbeeCluster()) << "Failed to read min/max/temp values." << readTempReply->error();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return readTempReply;
|
||||||
|
}
|
||||||
|
|
||||||
|
ZigbeeClusterReply *ZigbeeClusterTemperatureMeasurement::readMinMaxTemperature()
|
||||||
|
{
|
||||||
|
ZigbeeClusterReply *readMinMaxTempReply = readAttributes({ZigbeeClusterTemperatureMeasurement::AttributeMeasuredValue, ZigbeeClusterTemperatureMeasurement::AttributeMinMeasuredValue, ZigbeeClusterTemperatureMeasurement::AttributeMaxMeasuredValue});
|
||||||
|
connect(readMinMaxTempReply, &ZigbeeClusterReply::finished, this, [=](){
|
||||||
|
if (readMinMaxTempReply->error() != ZigbeeClusterReply::ErrorNoError) {
|
||||||
|
qCWarning(dcZigbeeCluster()) << "Failed to read min/max/temp values." << readMinMaxTempReply->error();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return readMinMaxTempReply;
|
||||||
|
}
|
||||||
|
|
||||||
double ZigbeeClusterTemperatureMeasurement::temperature() const
|
double ZigbeeClusterTemperatureMeasurement::temperature() const
|
||||||
{
|
{
|
||||||
return m_temperature;
|
return m_temperature;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double ZigbeeClusterTemperatureMeasurement::minTemperature() const
|
||||||
|
{
|
||||||
|
return m_minTemperature;
|
||||||
|
}
|
||||||
|
|
||||||
|
double ZigbeeClusterTemperatureMeasurement::maxTemperature() const
|
||||||
|
{
|
||||||
|
return m_maxTemperature;
|
||||||
|
}
|
||||||
|
|
||||||
void ZigbeeClusterTemperatureMeasurement::setAttribute(const ZigbeeClusterAttribute &attribute)
|
void ZigbeeClusterTemperatureMeasurement::setAttribute(const ZigbeeClusterAttribute &attribute)
|
||||||
{
|
{
|
||||||
ZigbeeCluster::setAttribute(attribute);
|
ZigbeeCluster::setAttribute(attribute);
|
||||||
|
|
@ -55,6 +89,20 @@ void ZigbeeClusterTemperatureMeasurement::setAttribute(const ZigbeeClusterAttrib
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_temperature = value / 100.0;
|
||||||
|
qCDebug(dcZigbeeCluster()) << "Temperature changed on" << m_node << m_endpoint << this << m_temperature << "°C";
|
||||||
|
emit temperatureChanged(m_temperature);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (attribute.id() == AttributeMinMeasuredValue) {
|
||||||
|
bool valueOk = false;
|
||||||
|
qint16 value = attribute.dataType().toInt16(&valueOk);
|
||||||
|
if (valueOk) {
|
||||||
|
if (value == static_cast<qint16>(0x8000)) {
|
||||||
|
qCDebug(dcZigbeeCluster()) << m_node << m_endpoint << this << "received invalid min measurement value. Not updating the attribute.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
m_temperature = value / 100.0;
|
m_temperature = value / 100.0;
|
||||||
qCDebug(dcZigbeeCluster()) << "Temperature changed on" << m_node << m_endpoint << this << m_temperature << "°C";
|
qCDebug(dcZigbeeCluster()) << "Temperature changed on" << m_node << m_endpoint << this << m_temperature << "°C";
|
||||||
emit temperatureChanged(m_temperature);
|
emit temperatureChanged(m_temperature);
|
||||||
|
|
|
||||||
|
|
@ -56,15 +56,24 @@ public:
|
||||||
|
|
||||||
explicit ZigbeeClusterTemperatureMeasurement(ZigbeeNetwork *network, ZigbeeNode *node, ZigbeeNodeEndpoint *endpoint, Direction direction, QObject *parent = nullptr);
|
explicit ZigbeeClusterTemperatureMeasurement(ZigbeeNetwork *network, ZigbeeNode *node, ZigbeeNodeEndpoint *endpoint, Direction direction, QObject *parent = nullptr);
|
||||||
|
|
||||||
|
ZigbeeClusterReply* readTemperature();
|
||||||
|
ZigbeeClusterReply* readMinMaxTemperature();
|
||||||
|
|
||||||
double temperature() const;
|
double temperature() const;
|
||||||
|
double minTemperature() const;
|
||||||
|
double maxTemperature() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
double m_temperature = 0;
|
double m_temperature = 0;
|
||||||
|
double m_minTemperature = -55.54; // Absolute min/max as per Zigbee spec
|
||||||
|
double m_maxTemperature = 327.67;
|
||||||
|
|
||||||
void setAttribute(const ZigbeeClusterAttribute &attribute) override;
|
void setAttribute(const ZigbeeClusterAttribute &attribute) override;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void temperatureChanged(double temperature);
|
void temperatureChanged(double temperature);
|
||||||
|
void minTemperatureChanged(double minTemperature);
|
||||||
|
void maxTemperatureChanged(double maxTemperature);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue