@@ -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
1211DriverNetZigbee2mqtt::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()
123114int 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
211179QJsonObject DriverNetZigbee2mqtt::discover (const QJsonObject& params)
0 commit comments