Сценарий термостата не работает после ребута

приложен диагностический архив, доступен только сотрудникам поддержки
(368,8 КБ)

Ситуация такая: создан сценарий в виде js-скрипта, всё работает, но после перезагрузки сценарий не включается из-за тайм-аутов инициализации датчика. Датчик пробовал другой в параметры подставлять - не помогает.

19-03-2026 10:04:59.732	ERROR: [rule error] [WBSC‑base-mod/bedroom_heating]: Linked controls not ready in 60s: cityron-pu-3_9/Main Temperature
19-03-2026 10:04:59.712	ERROR: [rule error] [WBSC‑base-mod/bedroom_heating]: Controls not ready within timeout: cityron-pu-3_9/Main Temperature
19-03-2026 10:04:00.229	INFO: all rule files are loaded
19-03-2026 10:03:59.256	ERROR: [rule error] Error in getting device: Device with given ID doesn't exist
19-03-2026 10:03:56.032	ERROR: [rule error] failed to SetValue for unexisting control wb-mr6cv3_156/K3: true
19-03-2026 10:03:55.968	ERROR: [rule error] failed to SetValue for unexisting control wb-mr6cv3_156/K2: true
19-03-2026 10:03:55.037	INFO: [rule info] add your rules to /etc/wb-rules/
19-03-2026 10:03:53.433	WARNING: [rule warning] DAC: no config file
19-03-2026 10:03:31.607	INFO: [engine] Starting sync loop
19-03-2026 10:03:31.569	INFO: the engine is ready
19-03-2026 10:03:31.546	INFO: [engine] Starting main loop
19-03-2026 10:03:28.754	INFO: [wbgo_mqtt] wb-rules-engine-wirenboard-AE6KYKQZ-2467: MQTT connection established
19-03-2026 10:03:28.690	INFO: [rule info] using file /var/lib/wirenboard/wbrules-persistent.db for persistent DB
19-03-2026 10:03:28.419	INFO: driver is ready
19-03-2026 10:03:28.309	INFO: wait for driver to become ready
19-03-2026 10:03:28.237	INFO: driver loop is started
19-03-2026 10:03:28.134	INFO: [wbgo_mqtt] rules-wirenboard-AE6KYKQZ-2467: MQTT connection established
19-03-2026 10:03:27.885	INFO: driver is created
19-03-2026 10:03:27.651	INFO: broker URL is default and mosquitto socket detected, trying to connect via it
19-03-2026 10:03:24.488	2026/03/19 10:03:24 ERROR: metrics: disable exposing PSI metrics because of failed init: open /sys/fs/cgroup/system.slice/wb-rules.service/cpu.pressure: no such file or directory
19-03-2026 10:01:33.656	INFO: [engine] Stop main loop
19-03-2026 10:01:33.501	INFO: [engine] Stopping sync loop
defineVirtualDevice('invert-heater-for-bedroom', {
    title: 'Invert Heater - Bedroom' ,
    cells: {
      Enabled: {
        title: "Enabled",
	    type: "switch",
	    value: true,
        readonly : true
	    },
      Enabled_1: {
        title: "Угол и правое окно",
	    type: "switch",
	    value: !dev["wb-gpio/EXT1_K1"]
	    },
      Enabled_2: {
        title: "Левое окно",
        type: "switch",
        value: !dev["wb-gpio/EXT1_K2"]
  	    },
      Enabled_3: {
        title: "У входа в гардеробную",
        type: "switch",
        value: !dev["wb-gpio/EXT1_K3"]
  	    }
    }
})

defineRule({
whenChanged: [“invert-heater-for-bedroom/Enabled”],
then: function(newValue, devName, cellName){
dev[“invert-heater-for-bedroom/Enabled_1”] = newValue;
dev[“invert-heater-for-bedroom/Enabled_2”] = newValue;
dev[“invert-heater-for-bedroom/Enabled_3”] = newValue;
dev[“wb-gpio/EXT1_K1”] = !newValue;
dev[“wb-gpio/EXT1_K2”] = !newValue;
dev[“wb-gpio/EXT1_K3”] = !newValue;
}
});

/**

  • @file: init-heating.js
    */

// Step 1: import module
var CustomTypeSc = require(‘thermostat.mod’).ThermostatScenario;

function main() {
var scenarioName = ‘bedroom heating’;
log.debug(‘Start init logic for: “{}”’, scenarioName);

// Step 2: Create new instance with scenario class
var scenario = new CustomTypeSc();

// Step 3: Configure algorithm
var cfg = {
idPrefix: ‘bedroom_heating’,// Не обязательный параметр, можно не указывать
targetTemp: dev[“cityron-pu-3_9/Temperature Setpoint”],
tempLimitsMin: 16,
tempLimitsMax: 29,
hysteresis: 0.2,
tempSensor: ‘cityron-pu-3_9/Main Temperature’,
// tempSensor: ‘wb-msw-v3_170/Temperature’,
actuator: ‘invert-heater-for-bedroom/Enabled’,
};

// Step 4: init algorithm
try {
var isInitSuccess = scenario.init(scenarioName, cfg);

if (!isInitSuccess) {
  log.error('Init operation aborted for scenario: "{}"', scenarioName);
  return;
}

log.debug('Initialization successful for: "{}"', scenarioName);

} catch (error) {
log.error(
‘Exception during scenario initialization: “{}” for scenario: “{}”’,
error.message || error,
scenarioName
);
}
}

main();

/*
defineRule({
whenChanged: [“wb-gpio/EXT1_K1”, “wb-gpio/EXT1_K2”, “wb-gpio/EXT1_K3”],
then: function(newValue, devName, cellName) {
devName = !newValue;
}
});
*/

defineRule({
whenChanged: [“wbsc_bedroom_heating/target_temperature”],
then: function(newValue, devName, cellName){
dev[“cityron-pu-3_9/Temperature Setpoint”] = newValue;
}
});

defineRule({
whenChanged: [“cityron-pu-3_9/Temperature Setpoint”],
then: function(newValue, devName, cellName){
dev[“wbsc_bedroom_heating/target_temperature”] = newValue;
}
});

Если чуть позже передёрнуть правило, то всё заработает:

19-03-2026 10:27:23.337	INFO: [rule info] [WBSC‑base-mod/bedroom_heating]: Scenario "bedroom heating" base initialization completed
19-03-2026 10:27:17.710	ERROR: [rule error] Error in getting device: Device with given ID doesn't exist
19-03-2026 10:27:17.155	INFO: reloading file: /etc/wb-rules/thermostats.js
19-03-2026 10:27:17.147	INFO: LiveRemoveFile: /etc/wb-rules/thermostats.js.disabled
19-03-2026 10:27:14.151	INFO: reloading file: /etc/wb-rules/thermostats.js.disabled
19-03-2026 10:27:14.130	INFO: LiveRemoveFile: /etc/wb-rules/thermostats.js

Добрый день,
Рекомендую обновиться и проверить сохраняется ли проблема.
Так же прошу уточнить, насколько нагружен контроллер во время работы? посмотреть можно через
htop

контроллер не нагружен, вот такая картина постоянно, обновление последнее стоит:

PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
10477 root      20   0  110248  16020   7836 S  16.1   1.6  22:14.70 wb-mqtt-serial
 2467 root      20   0  813428  32328  18708 S   9.8   3.2  18:05.24 wb-rules

Добрый день!

По архиву видно, что действительно связана с порядком инициализации после загрузки. Сценарий bedroom_heating стартует раньше, чем в MQTT появляется контрол cityron-pu-3_9/Main Temperatureт:

Рекомендую проверить шину /dev/ttyMOD1: в архиве видны задержки опроса и предупреждение Register read rate limit is exceeded.

Обсужу с коллегами даный вопрос и вернусь к вам с дополнгительными рекомендациями.

Добрый день!

Дело не в /dev/ttyMOD1: попробовал cityron с другой шины использовать в скрипте, результат такой же.

Добрый день.
А задержки опроса после смены шины остаются?

как это посмотреть?

Добрый день,
Можено в логах системы посмотреть, так как появление датчика в системе спустя минуту не здоровое поведение системы.

Добрый день.

У меня четыре шины: щит, первый этаж, второй этаж и TCP/IP через WB-MIO.

Ошибки сыпятся по всем. Прочитал про ограничение на кол-во читаемых регистров с шины и ради эксперимента для шины и всех устройств в щите установил скорость 115200. Результата это не дало, каждый раз после переконфигурирования wb-mqtt-serial или его ручного рестарта вылезает такое:

25-03-2026 01:29:26.404	WARNING: [modbus] Failed to write register <holding: 5>: Serial protocol error: illegal data address
25-03-2026 01:29:24.023	WARNING: [serial client] <192.168.0.7:23> Register read rate limit is exceeded
25-03-2026 01:29:21.711	WARNING: [serial client] </dev/ttyRS485-1 115200 8 N 2> Register read rate limit is exceeded
25-03-2026 01:29:20.700	WARNING: [serial client] </dev/ttyMOD1 9600 8 N 1> Register read rate limit is exceeded
25-03-2026 01:29:20.303	WARNING: [serial client] </dev/ttyRS485-2 9600 8 N 2> Register read rate limit is exceeded

Как только после рестарта mqtt-serial приходит в себя, read rate limit не наблюдается.

Добрый день!

Тут скорее вопрос в том, почему сам датчик долго инициализируется.

Для проверки можно временно заменить контрол датчика на другой, например на 1-Wire или любой другой, который гарантированно быстро появляется после загрузки. Это позволит понять, стабильно ли работает сценарий в целом. Если с другим датчиком сценарий будет работать стабильно, то останется проверить физическое подключение и сам датчик.

Технически можно сделать дополнительное правило, которое будет перезапускать службу, чтобы сценарий заново увидел датчик. Но это, на мой взгляд, костыльное решение. Лучше всё же понять, почему датчику требуется так много времени на инициализацию.

Добрый день.

Поменял на MSW3, результат тот же.

Последовательность такая:

23:38:49 - загрузился wb-rules
23:38:49 - загрузился mqtt-serial и начал искать девайсы
23:39:32 - тайм-аут в сценарии
23:40:13 - проинитился 170-ый MSW (замена CITYRONу)

Это на 2602, на 2507 wb-rules значительно раньше загружался, и разница по времени между загрузкой сценария и инитом датчика была несколько минут.

Приведу еще тайминги после загрузки mqtt-serial и момента начала поиска девайсов на шине. Дело в том, что девайс за девайсом коннектятся буквально за доли секунд, а вот до этого непонятно, что происходит:

25-03-2026 23:39:26.631	INFO: [mqtt] subscription succeeded (message id 1)
25-03-2026 23:39:26.620	INFO: [mqtt] connection estabilished with code "0" <success>
25-03-2026 23:39:21.989	INFO: [serial config] "WB-LED 115" channel "Input 1 Double Press Counter" override property "enabled"
25-03-2026 23:39:21.989	INFO: [serial config] "WB-LED 115" channel "Input 1 Long Press Counter" override property "enabled"
25-03-2026 23:39:21.978	INFO: [serial config] "WB-LED 115" channel "Input 1 Single Press Counter" override property "enabled"
25-03-2026 23:39:21.120	INFO: [serial config] "WB-MR6CU 204" channel "FW Version" override property "enabled"
25-03-2026 23:39:21.101	INFO: [serial config] "WB-MR6CU 204" channel "HW Batch Number" override property "enabled"
25-03-2026 23:38:49.721	INFO: [mqtt] UNIX socket exists, using it for connection
25-03-2026 23:38:49.707	INFO: [mqtt] Default host and port detected, checking if UNIX socket exists on /var/run/mosquitto/mosquitto.sock

30 секунд прошло с момента старта mqtt-serial

25-03-2026 23:40:10.679	INFO: [serial device] device modbus:1 is connected
25-03-2026 23:40:10.670	INFO: [modbus] Init setup register "Actual Phase L3": <modbus:1:holding: 5282><-- 2 (0x2)
25-03-2026 23:40:10.670	INFO: [modbus] Init setup register "Actual Phase L2": <modbus:1:holding: 5281><-- 3 (0x3)
25-03-2026 23:40:10.668	INFO: [modbus] Init setup register "Baud rate": <modbus:1:holding: 110><-- 1152 (0x480)
25-03-2026 23:40:10.666	INFO: [modbus] Continuous read enabled [slave_id is 100]
25-03-2026 23:40:10.661	INFO: [modbus] Continuous read enabled [slave_id is 1]
25-03-2026 23:40:10.624	INFO: [mqtt] subscription succeeded (message id 4953)
25-03-2026 23:40:10.618	INFO: [mqtt] subscription succeeded (message id 4951)
25-03-2026 23:40:10.616	INFO: [mqtt] subscription succeeded (message id 4949)
25-03-2026 23:40:10.613	INFO: [mqtt] subscription succeeded (message id 4947)
25-03-2026 23:40:10.609	INFO: [mqtt] subscription succeeded (message id 4945)

и ещё 30 секунд шли какие-то подписки до момента начала подключения первого устройства.

23:40:10 - modbus 1
23:40:13 - наш modbus 170
2026-03-25 23:38:49
[WBSC-devicesControl-init]: Start initialisation "devicesControl" type scenarios
2026-03-25 23:38:49
[WBSC-helper]: Input config path: "/etc/wb-scenarios.conf"
2026-03-25 23:38:50
[WBSC-helper]: The input config contains: "{"scenarios":[],"configVersion":1}"
2026-03-25 23:38:50
[WBSC-helper]: "scenarios" array is empty
2026-03-25 23:38:50
[WBSC-lightControl-init]: Start initialisation "lightControl" type scenarios
2026-03-25 23:38:50
[WBSC-helper]: Input config path: "/etc/wb-scenarios.conf"
2026-03-25 23:38:50
[WBSC-helper]: The input config contains: "{"configVersion":1,"scenarios":[]}"
2026-03-25 23:38:50
[WBSC-helper]: "scenarios" array is empty
2026-03-25 23:38:50
[WBSC-thermostat-init]: Start initialisation "thermostat" type scenarios
2026-03-25 23:38:50
[WBSC-helper]: Input config path: "/etc/wb-scenarios.conf"
2026-03-25 23:38:50
[WBSC-helper]: The input config contains: "{"configVersion":1,"scenarios":[]}"
2026-03-25 23:38:50
[WBSC-helper]: "scenarios" array is empty
2026-03-25 23:38:50
[WBSC-schedule-init]: Start initialisation "schedule" type scenarios
2026-03-25 23:38:50
[WBSC-helper]: Input config path: "/etc/wb-scenarios.conf"
2026-03-25 23:38:50
[WBSC-helper]: The input config contains: "{"configVersion":1,"scenarios":[]}"
2026-03-25 23:38:50
[WBSC-helper]: "scenarios" array is empty
2026-03-25 23:39:27
failed to SetValue for unexisting control wb-mao4_68/Channel 2 Switch: true
2026-03-25 23:39:27
failed to SetValue for unexisting control wb-mao4_68/Channel 2 Dimming Level: 60
2026-03-25 23:39:32
[WBSC‑base-mod/bedroom_heating]: Controls not ready within timeout: wb-msw-v3_170/Temperature
2026-03-25 23:39:32
[WBSC‑base-mod/bedroom_heating]: Linked controls not ready in 60s: wb-msw-v3_170/Temperature

25-03-2026 23:40:13.564	INFO: [modbus] Init setup register "Output 4": <modbus:177:holding: 941><-- 0 (0x0)
25-03-2026 23:40:13.564	INFO: [modbus] Init setup register "Output 3": <modbus:177:holding: 940><-- 0 (0x0)
25-03-2026 23:40:13.564	INFO: [modbus] Init setup register "Output 2": <modbus:177:holding: 939><-- 0 (0x0)
25-03-2026 23:40:13.564	INFO: [modbus] Init setup register "Output 1": <modbus:177:holding: 938><-- 0 (0x0)
25-03-2026 23:40:13.564	INFO: [modbus] Init setup register "Baud rate": <modbus:177:holding: 110><-- 1152 (0x480)
25-03-2026 23:40:13.564	INFO: [modbus] Init setup register "Safety Mode Trigger": <modbus:177:holding: 19><-- 0 (0x0)
25-03-2026 23:40:13.564	INFO: [modbus] Continuous read enabled [slave_id is 93:1]
25-03-2026 23:40:13.564	INFO: [modbus] Init setup register "Mode": <modbus:177:holding: 14><-- 0 (0x0)
25-03-2026 23:40:13.564	INFO: [modbus] Init setup register "Mode": <modbus:177:holding: 13><-- 0 (0x0)
25-03-2026 23:40:13.564	INFO: [modbus] Init setup register "Mode": <modbus:177:holding: 12><-- 0 (0x0)
25-03-2026 23:40:13.564	INFO: [modbus] Init setup register "Mode": <modbus:177:holding: 11><-- 0 (0x0)
25-03-2026 23:40:13.564	INFO: [modbus] Init setup register "Mode": <modbus:177:holding: 10><-- 0 (0x0)
25-03-2026 23:40:13.564	INFO: [modbus] Init setup register "Mode": <modbus:177:holding: 9><-- 0 (0x0)
25-03-2026 23:40:13.564	INFO: [modbus] Init setup register "Safety Poll Timeout (s)": <modbus:177:holding: 8><-- 10 (0xa)
25-03-2026 23:40:13.564	INFO: [modbus] Init setup register "Outputs State After Power On": <modbus:177:holding: 6><-- 1 (0x1)
25-03-2026 23:40:13.564	INFO: [modbus] Init setup register "disable legacy input mode control": <modbus:177:holding: 5><-- 0 (0x0)
25-03-2026 23:40:13.564	INFO: [modbus] Continuous read enabled [slave_id is 177]
25-03-2026 23:40:13.564	INFO: [serial client] Events are disabled for <modbus:131: reboot>
25-03-2026 23:40:13.564	INFO: [serial client] Events are enabled for <modbus:131:input: 283>
25-03-2026 23:40:13.564	INFO: [serial client] Events are enabled for <modbus:131:input: 280>
25-03-2026 23:40:13.564	INFO: [serial device] device modbus:131 is connected
25-03-2026 23:40:13.564	INFO: [modbus] Init setup register "CO₂ Sensor Enabled": <modbus:131:coil: 3><-- 1 (0x1)
25-03-2026 23:40:13.128	INFO: [modbus] Init setup register "CO₂ Baseline Calibration": <modbus:131:holding: 95><-- 1 (0x1)
25-03-2026 23:40:13.128	INFO: [modbus] Continuous read enabled [slave_id is 131]
25-03-2026 23:40:13.128	INFO: [serial device] device modbus:184 is connected
25-03-2026 23:40:13.128	INFO: [serial client] Events are disabled for <modbus:184: reboot>
25-03-2026 23:40:13.128	INFO: [serial client] Events are enabled for <modbus:184:input: 283>
25-03-2026 23:40:13.128	INFO: [serial client] Events are enabled for <modbus:184:input: 280>
25-03-2026 23:40:13.128	INFO: [modbus] Continuous read enabled [slave_id is 184]
25-03-2026 23:40:13.128	INFO: [serial client] Events are disabled for <modbus:170: reboot>
25-03-2026 23:40:13.128	INFO: [serial client] Events are enabled for <modbus:170:input: 39>
25-03-2026 23:40:13.128	INFO: [serial client] Events are enabled for <modbus:170:input: 37>
25-03-2026 23:40:13.128	INFO: [serial client] Events are enabled for <modbus:170:input: 36>
25-03-2026 23:40:13.128	INFO: [serial client] Events are enabled for <modbus:170:input: 35>
25-03-2026 23:40:13.128	INFO: [serial client] Events are enabled for <modbus:170:input: 34>
25-03-2026 23:40:13.128	INFO: [serial client] Events are enabled for <modbus:170:input: 33>
25-03-2026 23:40:13.128	INFO: [serial client] Events are enabled for <modbus:170:input: 32>
25-03-2026 23:40:13.128	INFO: [serial client] Events are enabled for <modbus:170:discrete: 7>
25-03-2026 23:40:13.128	INFO: [serial client] Events are enabled for <modbus:170:discrete: 5>
25-03-2026 23:40:13.128	INFO: [serial client] Events are enabled for <modbus:170:discrete: 4>
25-03-2026 23:40:13.128	INFO: [serial client] Events are enabled for <modbus:170:discrete: 3>
25-03-2026 23:40:13.128	INFO: [serial client] Events are enabled for <modbus:170:discrete: 2>
25-03-2026 23:40:13.128	INFO: [serial client] Events are enabled for <modbus:170:discrete: 1>
25-03-2026 23:40:13.128	INFO: [serial client] Events are enabled for <modbus:170:discrete: 0>
25-03-2026 23:40:13.128	INFO: [serial client] Events are enabled for <modbus:170:coil: 5>
25-03-2026 23:40:13.128	INFO: [serial client] Events are enabled for <modbus:170:coil: 4>
25-03-2026 23:40:13.128	INFO: [serial client] Events are enabled for <modbus:170:coil: 3>
25-03-2026 23:40:13.128	INFO: [serial client] Events are enabled for <modbus:170:coil: 2>
25-03-2026 23:40:13.128	INFO: [serial client] Events are enabled for <modbus:170:coil: 1>
25-03-2026 23:40:13.128	INFO: [serial client] Events are enabled for <modbus:170:coil: 0>
25-03-2026 23:40:12.964	INFO: [serial device] device modbus:170 is connected
25-03-2026 23:40:12.964	INFO: [modbus] Init setup register "Output 6": <modbus:170:holding: 951><-- 0 (0x0)
25-03-2026 23:40:12.964	INFO: [modbus] Init setup register "Output 5": <modbus:170:holding: 950><-- 0 (0x0)
25-03-2026 23:40:12.964	INFO: [modbus] Init setup register "Output 4": <modbus:170:holding: 949><-- 0 (0x0)
25-03-2026 23:40:12.964	INFO: [modbus] Init setup register "Output 3": <modbus:170:holding: 948><-- 0 (0x0)
25-03-2026 23:40:12.964	INFO: [modbus] Init setup register "Output 2": <modbus:170:holding: 947><-- 0 (0x0)
25-03-2026 23:40:12.964	INFO: [modbus] Init setup register "Output 1": <modbus:170:holding: 946><-- 0 (0x0)
25-03-2026 23:40:12.964	INFO: [modbus] Init setup register "Output 6": <modbus:170:holding: 943><-- 0 (0x0)
25-03-2026 23:40:12.964	INFO: [modbus] Init setup register "Output 5": <modbus:170:holding: 942><-- 0 (0x0)
25-03-2026 23:40:12.964	INFO: [modbus] Init setup register "Output 4": <modbus:170:holding: 941><-- 0 (0x0)
25-03-2026 23:40:12.964	INFO: [modbus] Init setup register "Output 3": <modbus:170:holding: 940><-- 0 (0x0)
25-03-2026 23:40:12.964	INFO: [modbus] Init setup register "Output 2": <modbus:170:holding: 939><-- 0 (0x0)
25-03-2026 23:40:12.964	INFO: [modbus] Init setup register "Output 1": <modbus:170:holding: 938><-- 0 (0x0)
25-03-2026 23:40:12.964	INFO: [modbus] Init setup register "Baud rate": <modbus:170:holding: 110><-- 1152 (0x480)
25-03-2026 23:40:12.964	INFO: [modbus] Init setup register "Safety Mode Trigger": <modbus:170:holding: 19><-- 0 (0x0)
25-03-2026 23:40:12.964	INFO: [modbus] Init setup register "Mode": <modbus:170:holding: 13><-- 0 (0x0)
25-03-2026 23:40:12.964	INFO: [modbus] Init setup register "Mode": <modbus:170:holding: 12><-- 0 (0x0)
25-03-2026 23:40:12.964	INFO: [modbus] Init setup register "Mode": <modbus:170:holding: 10><-- 0 (0x0)
25-03-2026 23:40:12.964	INFO: [modbus] Init setup register "Mode": <modbus:170:holding: 9><-- 0 (0x0)
25-03-2026 23:40:12.964	INFO: [modbus] Init setup register "Outputs State After Power On": <modbus:170:holding: 6><-- 1 (0x1)
25-03-2026 23:40:12.964	INFO: [modbus] Init setup register "disable legacy input mode control": <modbus:170:holding: 5><-- 0 (0x0)
25-03-2026 23:40:12.964	INFO: [modbus] Continuous read enabled [slave_id is 170]

Для диагностики проблемы пришлите, пожалуйста, архив с диагностической информацией контроллера. Создание архива описано в документации.

сегодняшний

приложен диагностический архив, доступен только сотрудникам поддержки
(245,0 КБ)