Есть еще один вариант, который сразу не учли: переписать решение на wb-rules. Вероятно, это самый безболезненный вариант.
Первый вариант фактически тоже сводится к wb-rules: правило будет отслеживать готовность датчика и через runshell перезапускать службу сценария. Второй вариант менее предпочтителен, так как при обновлении конфиг может быть перезаписан. Третий вариант также возможен, но его реализация может занять больше времени.
Да, код выше должен нивелировать данную проблему, хотя это и является обходным решением.
serjio
April 3, 2026, 2:20pm
26
увеличение таймаута не спасло, контрол горит красным, cityron появился, на виртуальном контроле целевая температура выставлена, но вылазит ошибка:
2026-04-03 17:16:25
[WBSC-thermostat-mod]: Target temperature “null” must be in the range from “Min” to “Max”
2026-04-03 17:16:26
[WBSC‑base-mod/bedroom_heating]: Config validation failed for scenario: “bedroom heating”
2026-04-03 17:16:26
ECMAScript error: Error: Config validation failed for scenario: “bedroom heating”
anon wbsc-scenario-base.mod:248
anon wbsc-scenario-base.mod:225 preventsyield
apply native strict preventsyield
anon wbsc-wait-controls.mod:120 preventsyield
serjio
April 3, 2026, 2:21pm
27
как это сделать? через /meta/error?
Добрый день, удалось ли решить вопрос?
serjio
April 11, 2026, 6:31pm
30
Добрый день, нет, попробую на выходных.
upd: может, что-то не так я делаю, но отслеживать готовность датчика при перезапуске mqtt-serial таким образом не получается. НО. Если отключаю питание шины и включаю, то правило срабатывает.
defineRule({
whenChanged: "cityron-pu-3_9/Main Temperature#error",
then: function(newValue, devName, cellName) {
log("newValue = " + newValue);
if (newValue !== "") {
log("!!!!!!!!!!! cityron disabled !!!!!!!!!!!!");
} else {
log("!!!!!!!!!! cityron EBABLED !!!!!!!!!!!!!");
}
}
});
ВОПРОС: как правильно отслеживать готовность датчика при старте службы?
Добрый день,
Попробуйте данный вариант,
// 1. Проверка при загрузке системы
defineRule("check_cityron_on_start", {
when: cron("@reboot"),
then: function () {
setTimeout(tryCheckCityronState, 3000);
}
});
// 2. Отслеживание изменений в процессе работы
defineRule("track_cityron_error_changes", {
whenChanged: "cityron-pu-3_9/Main Temperature#error",
then: function (newValue) {
log("newValue = " + newValue);
if (newValue !== "") {
log("!!!!!!!!!!! cityron disabled !!!!!!!!!!!!");
} else {
log("!!!!!!!!!! cityron ENABLED !!!!!!!!!!!!!");
}
}
});
так же рекомендую использовать нашего робота для генерации правил, расположен сверху справа с иконкой робота.
serjio
April 15, 2026, 8:30pm
32
Добрый день!
Aleksandr_Khlebnikov:
// 1. Проверка при загрузке системы
defineRule("check_cityron_on_start", {
when: cron("@reboot"),
then: function () {
setTimeout(tryCheckCityronState, 3000);
}
});
А как функция tryCheckCityronState() дожна выглядеть и какова дальнейшая логика работы?
Что-то на 2602 у меня нет иконки робота в редакторе правил.
Добрый день,
Робот на портале размещен.
serjio
April 16, 2026, 1:26pm
34
Ясно, спасибо, попробую.
А как функция tryCheckCityronState() дожна выглядеть и какова дальнейшая логика работы?
Добрый день,
Если я я понял верно ваш вопрос, то ответ в данной конструкции.
// 1. Проверка при загрузке системы
defineRule("check_cityron_on_start", {
when: cron("@reboot"),
then: function () {
setTimeout(tryCheckCityronState, 3000);
}
});
// 2. Отслеживание изменений в процессе работы
defineRule("track_cityron_error_changes", {
whenChanged: "cityron-pu-3_9/Main Temperature#error",
then: function (newValue) {
log("newValue = " + newValue);
if (newValue !== "") {
log("!!!!!!!!!!! cityron disabled !!!!!!!!!!!!");
} else {
log("!!!!!!!!!! cityron ENABLED !!!!!!!!!!!!!");
}
}
});
serjio
April 17, 2026, 7:42am
36
Добрый день. В конструкции
setTimeout(tryCheckCityronState, 3000);
используется таймер, в котором функция tryCheckCityronState срабатывает каждые 3 секунды. Вот я и задаю вопрос: а что это за функция?
tryCheckCityronState — это просто пользовательская функция, которая должна быть объявлена выше в скрипте для считываения статуса ошибки.
serjio
April 17, 2026, 11:18am
38
Также через #error ?
Насколько корректно в пользовательской функции считывать топик, которого нет?
И будет ли cron(@reboot ) отрабатывать при сохранении настроек/рестарте serial-сервиса?
serjio
May 6, 2026, 12:34pm
40
Добрый день, ответ будет какой-то?
Простите, пропустил сообщение.
Вполне. Подписка на отсутствующий на момент подписки топик вполне возможно, когда (если) в него будет что-то опубликовано - подписка сработает.
Нет.