Skip to content

Commit 2504bca

Browse files
committed
Zigbee2mqtt: remove synchronization, FOLLOW OUR WIKI because we switched to our zigbee2mqtt fork for better performance
1 parent 789ace3 commit 2504bca

File tree

3 files changed

+9
-38
lines changed

3 files changed

+9
-38
lines changed

include/led-drivers/net/DriverNetZigbee2mqtt.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ public slots:
5959

6060
Zigbee2mqttInstance _zigInstance;
6161
std::atomic<bool> _discoveryFinished;
62-
std::atomic<int> _colorsFinished;
6362
int _timeLogger;
6463
QString _discoveryMessage;
6564
int _mqttId;

sources/hyperhdr/HyperHdrDaemon.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,11 @@ void HyperHdrDaemon::instanceStateChangedHandler(InstanceState state, quint8 ins
215215
_flatProtoBuffersThread->start();
216216
}
217217

218+
if (_mqttThread != nullptr && !_mqttThread->isRunning())
219+
{
220+
_mqttThread->start();
221+
}
222+
218223
if (_networkThread != nullptr && !_networkThread->isRunning())
219224
{
220225
_networkThread->start();
@@ -396,7 +401,6 @@ void HyperHdrDaemon::startNetworkServices()
396401
[_mqtt](QThread* mqttThread) {
397402
THREAD_REMOVER(QString("MQTT"), mqttThread, _mqtt);
398403
});
399-
_mqttThread->start();
400404
#endif
401405
}
402406

sources/led-drivers/net/DriverNetZigbee2mqtt.cpp

Lines changed: 4 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,11 @@ namespace
66
{
77
constexpr auto ZIGBEE_DISCOVERY_MESSAGE = "zigbee2mqtt/bridge/devices";
88
constexpr int DEFAULT_TIME_MEASURE_MESSAGE = 25;
9-
constexpr int DEFAULT_COMMUNICATION_TIMEOUT_MS = 200;
109
}
1110

1211
DriverNetZigbee2mqtt::DriverNetZigbee2mqtt(const QJsonObject& deviceConfig)
1312
: LedDevice(deviceConfig),
1413
_discoveryFinished(false),
15-
_colorsFinished(0),
1614
_timeLogger(0),
1715
_mqttId(mqttId++)
1816
{
@@ -65,8 +63,7 @@ bool DriverNetZigbee2mqtt::powerOnOff(bool isOn)
6563

6664
for (const auto& lamp : _zigInstance.lamps)
6765
{
68-
QString topicDevice = QString("zigbee2mqtt/%1").arg(lamp.name);
69-
QString topic = QString("%1/set").arg(topicDevice);
66+
QString topic = QString("zigbee2mqtt/%1/set").arg(lamp.name);
7067
QJsonObject row;
7168

7269
row["state"] = (isOn) ? "ON" : "OFF";
@@ -76,18 +73,12 @@ bool DriverNetZigbee2mqtt::powerOnOff(bool isOn)
7673

7774
if (isOn)
7875
{
79-
emit GlobalSignals::getInstance()->SignalMqttSubscribe(true, topicDevice);
80-
8176
row["state"] = "OFF";
8277
doc.setObject(row);
8378

8479
lastWill.push_back(topic);
8580
lastWill.push_back(doc.toJson(QJsonDocument::Compact));
8681
}
87-
else
88-
{
89-
emit GlobalSignals::getInstance()->SignalMqttSubscribe(false, topicDevice);
90-
}
9182
}
9283

9384
if (_zigInstance.lamps.size() > 0)
@@ -123,8 +114,7 @@ bool DriverNetZigbee2mqtt::powerOff()
123114
int DriverNetZigbee2mqtt::write(const std::vector<ColorRgb>& ledValues)
124115
{
125116
QJsonDocument doc;
126-
127-
_colorsFinished = std::min(ledValues.size(), _zigInstance.lamps.size());
117+
auto start = InternalClock::nowPrecise();
128118

129119
auto rgb = ledValues.begin();
130120
for (const auto& lamp : _zigInstance.lamps)
@@ -168,22 +158,8 @@ int DriverNetZigbee2mqtt::write(const std::vector<ColorRgb>& ledValues)
168158
doc.setObject(row);
169159
emit GlobalSignals::getInstance()->SignalMqttPublish(topic, doc.toJson(QJsonDocument::Compact));
170160
}
171-
172-
auto start = InternalClock::nowPrecise();
173-
174-
std::unique_lock<std::mutex> lck(_mtx);
175-
_cv.wait_for(lck, std::chrono::milliseconds(DEFAULT_COMMUNICATION_TIMEOUT_MS));
176-
177-
for (int timeout = 0; timeout < 20 && _colorsFinished > 0 && (InternalClock::nowPrecise() < start + DEFAULT_COMMUNICATION_TIMEOUT_MS); timeout++)
178-
{
179-
QThread::msleep(10);
180-
}
181-
182-
if (_colorsFinished.exchange(0) > 0)
183-
{
184-
Warning(_log, "The communication timed out after %ims (%i)", (int)(InternalClock::nowPrecise() - start), (++_timeLogger));
185-
}
186-
else if (_timeLogger >= 0 && _timeLogger < DEFAULT_TIME_MEASURE_MESSAGE)
161+
162+
if (_timeLogger >= 0 && _timeLogger < DEFAULT_TIME_MEASURE_MESSAGE)
187163
{
188164
Info(_log, "The communication took: %ims (%i/%i)", (int)(InternalClock::nowPrecise() - start), ++_timeLogger, DEFAULT_TIME_MEASURE_MESSAGE);
189165
}
@@ -198,14 +174,6 @@ void DriverNetZigbee2mqtt::handlerSignalMqttReceived(QString topic, QString payl
198174
_discoveryMessage = payload;
199175
_discoveryFinished = true;
200176
}
201-
else if (_colorsFinished > 0)
202-
{
203-
_colorsFinished--;
204-
if (_colorsFinished == 0)
205-
{
206-
_cv.notify_all();
207-
}
208-
}
209177
}
210178

211179
QJsonObject DriverNetZigbee2mqtt::discover(const QJsonObject& params)

0 commit comments

Comments
 (0)