Skip to content

Commit cf9bae8

Browse files
committed
Zigbee2mqtt: remove dynamic brightness to reduce communication load
1 parent 2504bca commit cf9bae8

File tree

3 files changed

+16
-15
lines changed

3 files changed

+16
-15
lines changed

Diff for: include/led-drivers/net/DriverNetZigbee2mqtt.h

+2-7
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,8 @@
77
#include <list>
88
#include <atomic>
99
#include <chrono>
10-
#include <mutex>
1110
#endif
1211

13-
#include <condition_variable>
14-
1512
#include <led-drivers/LedDevice.h>
1613
#include <linalg.h>
1714

@@ -24,7 +21,7 @@ class DriverNetZigbee2mqtt : public LedDevice
2421
struct Zigbee2mqttInstance
2522
{
2623
int transition;
27-
int constantBrightness;
24+
int constantBrightness = -1;
2825

2926
std::list<Zigbee2mqttLamp> lamps;
3027
};
@@ -35,6 +32,7 @@ class DriverNetZigbee2mqtt : public LedDevice
3532

3633
QString name;
3734
Mode colorModel;
35+
int currentBrightness;
3836
};
3937

4038
public:
@@ -63,9 +61,6 @@ public slots:
6361
QString _discoveryMessage;
6462
int _mqttId;
6563

66-
std::mutex _mtx;
67-
std::condition_variable _cv;
68-
6964
static int mqttId;
7065
static bool isRegistered;
7166
};

Diff for: sources/led-drivers/net/DriverNetZigbee2mqtt.cpp

+12-6
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,13 @@ bool DriverNetZigbee2mqtt::init(const QJsonObject& deviceConfig)
2727

2828
if (LedDevice::init(deviceConfig))
2929
{
30+
if (_zigInstance.constantBrightness < 0)
31+
{
32+
QThread::msleep(750);
33+
}
3034

3135
_zigInstance.transition = deviceConfig["transition"].toInt(0);
32-
_zigInstance.constantBrightness = deviceConfig["constantBrightness"].toInt(0);
36+
_zigInstance.constantBrightness = deviceConfig["constantBrightness"].toInt(1);
3337

3438
Debug(_log, "Transition (ms) : %s", (_zigInstance.transition > 0) ? QSTRING_CSTR(QString::number(_zigInstance.transition)) : "disabled" );
3539
Debug(_log, "ConstantBrightness : %s", (_zigInstance.constantBrightness > 0) ? QSTRING_CSTR(QString::number(_zigInstance.constantBrightness)) : "disabled");
@@ -117,7 +121,7 @@ int DriverNetZigbee2mqtt::write(const std::vector<ColorRgb>& ledValues)
117121
auto start = InternalClock::nowPrecise();
118122

119123
auto rgb = ledValues.begin();
120-
for (const auto& lamp : _zigInstance.lamps)
124+
for (auto& lamp : _zigInstance.lamps)
121125
if (rgb != ledValues.end())
122126
{
123127
QJsonObject row;
@@ -148,12 +152,14 @@ int DriverNetZigbee2mqtt::write(const std::vector<ColorRgb>& ledValues)
148152
brightness = std::min(std::max(static_cast<int>(std::roundl(v * 255.0)), 0), 255);
149153
}
150154

151-
if (brightness > 0 && _zigInstance.constantBrightness > 0)
155+
if (lamp.currentBrightness <= 0 && brightness > 0)
152156
{
153-
brightness = _zigInstance.constantBrightness;
157+
row["brightness"] = lamp.currentBrightness = _zigInstance.constantBrightness;
158+
}
159+
else if (lamp.currentBrightness > 0 && brightness == 0)
160+
{
161+
row["brightness"] = lamp.currentBrightness = 0;
154162
}
155-
156-
row["brightness"] = brightness;
157163

158164
doc.setObject(row);
159165
emit GlobalSignals::getInstance()->SignalMqttPublish(topic, doc.toJson(QJsonDocument::Compact));

Diff for: sources/led-drivers/schemas/schema-zigbee2mqtt.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
"constantBrightness": {
1616
"type": "integer",
1717
"title": "edt_dev_spec_constantBrightness_title",
18-
"default": 0,
19-
"minimum": 0,
18+
"default": 255,
19+
"minimum": 1,
2020
"maximum": 255,
2121
"required": true,
2222
"propertyOrder": 4

0 commit comments

Comments
 (0)