diff --git a/libnymea-zigbee/zcl/lighting/zigbeeclustercolorcontrol.cpp b/libnymea-zigbee/zcl/lighting/zigbeeclustercolorcontrol.cpp index bfa49b7..d0017be 100644 --- a/libnymea-zigbee/zcl/lighting/zigbeeclustercolorcontrol.cpp +++ b/libnymea-zigbee/zcl/lighting/zigbeeclustercolorcontrol.cpp @@ -213,10 +213,32 @@ ZigbeeClusterReply *ZigbeeClusterColorControl::commandStepColorTemperature(Zigbe return executeClusterCommand(ZigbeeClusterColorControl::CommandStepColorTemperature, payload); } +quint16 ZigbeeClusterColorControl::colorTemperatureMireds() const +{ + return m_colorTemperatureMireds; +} + void ZigbeeClusterColorControl::setAttribute(const ZigbeeClusterAttribute &attribute) { qCDebug(dcZigbeeCluster()) << "Attribute changed" << m_node << m_endpoint << this << static_cast(attribute.id()) << attribute.dataType(); updateOrAddAttribute(attribute); + + switch (attribute.id()) { + case AttributeColorTemperatureMireds: { + bool valueOk = false; + quint16 value = attribute.dataType().toUInt16(&valueOk); + if (valueOk) { + m_colorTemperatureMireds = value; + qCDebug(dcZigbeeCluster()) << "Color temperature mired changed on" << m_node << m_endpoint << this << m_colorTemperatureMireds; + emit colorTemperatureMiredsChanged(m_colorTemperatureMireds); + } else { + qCWarning(dcZigbeeCluster()) << "Failed to parse attribute data" << m_node << m_endpoint << this << attribute; + } + break; + } + default: + break; + } } void ZigbeeClusterColorControl::processDataIndication(ZigbeeClusterLibrary::Frame frame) diff --git a/libnymea-zigbee/zcl/lighting/zigbeeclustercolorcontrol.h b/libnymea-zigbee/zcl/lighting/zigbeeclustercolorcontrol.h index f98b1b4..26d3d9c 100644 --- a/libnymea-zigbee/zcl/lighting/zigbeeclustercolorcontrol.h +++ b/libnymea-zigbee/zcl/lighting/zigbeeclustercolorcontrol.h @@ -135,7 +135,7 @@ public: ColorCapabilityXY = 0x08, ColorCapabilityColorTemperature = 0x10 }; - Q_ENUM(ColorCapability) + Q_FLAG(ColorCapability) Q_DECLARE_FLAGS(ColorCapabilities, ColorCapability) enum Command { @@ -189,7 +189,7 @@ public: ColorLoopUpdateTime = 0x04, ColorLoopUpdateStartHue = 0x08 }; - Q_ENUM(ColorLoopUpdate) + Q_FLAG(ColorLoopUpdate) Q_DECLARE_FLAGS(ColorLoopUpdateFlags, ColorLoopUpdate) enum ColorLoopAction { @@ -231,7 +231,14 @@ public: ZigbeeClusterReply *commandMoveColorTemperature(MoveMode moveMode, quint16 rate, quint16 minColorTemperature, quint16 maxColorTemperature); ZigbeeClusterReply *commandStepColorTemperature(StepMode stepMode, quint16 stepSize, quint16 transitionTime, quint16 minColorTemperature, quint16 maxColorTemperature); + quint16 colorTemperatureMireds() const; + +signals: + void colorTemperatureMiredsChanged(quint16 colorTemperatureMireds); + private: + quint16 m_colorTemperatureMireds = 0; + void setAttribute(const ZigbeeClusterAttribute &attribute) override; protected: @@ -239,7 +246,4 @@ protected: }; -Q_DECLARE_OPERATORS_FOR_FLAGS(ZigbeeClusterColorControl::ColorCapabilities) -Q_DECLARE_OPERATORS_FOR_FLAGS(ZigbeeClusterColorControl::ColorLoopUpdateFlags) - #endif // ZIGBEECLUSTERCOLORCONTROL_H