Привет!
dev["wb-led_194/CCT1"] =! dev["wb-led_194/CCT1"]; log("wb-led_194/CCT1 = " + dev["wb-led_194/CCT1"]);
И… Получаю не новое а старое состояние. Что я делаю не так?
Привет!
dev["wb-led_194/CCT1"] =! dev["wb-led_194/CCT1"]; log("wb-led_194/CCT1 = " + dev["wb-led_194/CCT1"]);
И… Получаю не новое а старое состояние. Что я делаю не так?
Вы не даете время на исполнение вашей команды. Присвоение dev["wb-led_194/CCT1"] =”новое значение” не означает мгновенного исполнения команды. Т.е. команда на изменение значения уже принята, но еще не успела исполниться и “отчитаться” о фактическом ее исполнении, поэтому в логе вы видите пока еще “старое” значение (не обновившееся) топика.
Есть ли еще способ, помимо виртуального устройства, таймера ожидания и глобальных переменных оперативно определять состояние?
Не понятна суть вопроса.
dev["wb-led_194/CCT1"] - это не виртуальное устройство, а запрос к физическому (“железяке”) устройству. Быстрее чем само (физическое) устройство примет от вас команду, исполните ее и даст ответ о своем новом (изменившемся) состоянии вы все равно ничего не сделаете. Не забывайте также о том, что ваши запросы к устройствам и ответы от них передаются по физической линии связи (RS-485) в протоколе modBus - на это нужно время.
Поэтому между
dev["wb-led_194/CCT1"] =! dev["wb-led_194/CCT1"];
(в этот момент запрос на изменение встанет в очередь (если она не пустая) и уйдет к устройству)
и получением ответного отчета от устройства,
т.е. когда устройство отработает запрос (это произойдет быстро) и поместит свое новое состояние в соответствующий mqtt топик, откуда вы его и прочитаете вот этой строкой:
log("wb-led_194/CCT1 = " + dev["wb-led_194/CCT1"]);
нужно небольшое время.
Если вы не делаете паузу между
dev["wb-led_194/CCT1"] =! dev["wb-led_194/CCT1"];
log("wb-led_194/CCT1 = " + dev["wb-led_194/CCT1"]);
то фактически вы отправляете зарос на изменение и тут же читаете “все еще предыдущий статус”. Это не значит, что ваш запрос не исполнился.
посмотрите вот эту тему - WB-Rules не присваиваются значения - #6 от пользователя Book-Keeper
Да, спасибо идея понятна: формирования события, постановка в очередь, обработка и получения ответа от устройства… И да, спасибо за ссылку
Искал способ получения новой уставки максимально близко к событию включения И крайне желательно без дополнительных обработчиков событий…
Чтож на текущий момент логику скорректировал несколько иначе.
Можно считать вопрос закрытым