Заметил странное поведение wb-rules, обращение к контролу через dev возвращает старое значение, пример скрипта:
defineRule("cpu_test_rule", {
whenChanged: "hwmon/CPU Temperature",
then: function (newValue, devName, cellName) {
log("{}/{} => new={} dev={} dev2={}", devName, cellName, newValue, dev["hwmon/CPU Temperature"], dev["hwmon"]["CPU Temperature"]);
}
})
Вывод в лог:
Oct 27 12:54:37: INFO: [rule info] hwmon/CPU Temperature => new=69.269 dev=73.45 dev2=73.45
Oct 27 12:54:47: INFO: [rule info] hwmon/CPU Temperature => new=69.156 dev=73.45 dev2=73.45
Oct 27 12:54:57: INFO: [rule info] hwmon/CPU Temperature => new=69.947 dev=73.45 dev2=73.45
Oct 27 12:55:07: INFO: [rule info] hwmon/CPU Temperature => new=68.365 dev=73.45 dev2=73.45
Oct 27 12:55:17: INFO: [rule info] hwmon/CPU Temperature => new=68.252 dev=73.45 dev2=73.45
Было настроено правило через wb-scenarios:
{
"configVersion": 1,
"scenarios": [
{
"actuator": "wb-mr6c_60/K5",
"componentVersion": 1,
"hysteresis": 1,
"name": "Теплый пол в комнате",
"scenarioType": "thermostat",
"targetTemperature": 70,
"temperatureLimits": {
"max": 90,
"min": 15
},
"temperatureSensor": "hwmon/CPU Temperature"
}
]
}
Перезапуск wb-rules не помогает:
Oct 27 13:04:05 wirenboard wb-rules[7224]: INFO: [engine] Starting sync loop
Oct 27 13:04:06 wirenboard wb-rules[7224]: WARNING: [rule warning] DAC: no config file
Oct 27 13:04:06 wirenboard wb-rules[7224]: INFO: all rule files are loaded
Oct 27 13:04:07 wirenboard wb-rules[7224]: WARNING: [frontend] failed to remove external control wbsc_teplyy_pol_v_komnate/current_temperature: No such control
Oct 27 13:04:07 wirenboard wb-rules[7224]: WARNING: [frontend] failed to remove external control wbsc_teplyy_pol_v_komnate/rule_enabled: No such control
Oct 27 13:04:07 wirenboard wb-rules[7224]: WARNING: [frontend] failed to remove external control wbsc_teplyy_pol_v_komnate/target_temperature: No such control
Oct 27 13:04:07 wirenboard wb-rules[7224]: WARNING: [frontend] failed to remove external control wbsc_teplyy_pol_v_komnate/target_temperature: No such control
Oct 27 13:04:07 wirenboard wb-rules[7224]: WARNING: [frontend] failed to remove external control wbsc_teplyy_pol_v_komnate/actuator_status: No such control
Oct 27 13:04:07 wirenboard wb-rules[7224]: WARNING: [frontend] failed to remove external control wbsc_teplyy_pol_v_komnate/actuator_status: No such control
Oct 27 13:04:07 wirenboard wb-rules[7224]: WARNING: [frontend] failed to remove external control wbsc_teplyy_pol_v_komnate/actuator_status: No such control
Oct 27 13:04:07 wirenboard wb-rules[7224]: WARNING: [frontend] failed to remove external control wbsc_teplyy_pol_v_komnate/actuator_status: No such control
Oct 27 13:04:08 wirenboard wb-rules[7224]: ERROR: [rule error] Error in getting device: Device with given ID doesn't exist
Oct 27 13:04:13 wirenboard wb-rules[7224]: INFO: [rule info] [WBSC‑base-mod/teplyy_pol_v_komnate]: Scenario "Теплый пол в комнате" base initialization completed
Oct 27 13:04:16 wirenboard wb-rules[7224]: INFO: [rule info] hwmon/CPU Temperature => new=69.043 dev=74.015 dev2=74.015
Oct 27 13:04:26 wirenboard wb-rules[7224]: INFO: [rule info] hwmon/CPU Temperature => new=68.93 dev=74.015 dev2=74.015
При этом виртуальное устройство из wb-scenarios показывает правильное значение.
Если обнулить сценарии echo '{"configVersion": 1,"scenarios": []}' > /etc/wb-scenarios.conf и перезапустить wb-rules проблема сохраняется.
Помогает только один способ touch /etc/wb-rules/rules.js:
Oct 27 13:08:34 wirenboard wb-rules[9142]: INFO: [rule info] hwmon/CPU Temperature => new=68.478 dev=68.817 dev2=68.817
Oct 27 13:08:44 wirenboard wb-rules[9142]: INFO: [rule info] hwmon/CPU Temperature => new=70.399 dev=68.817 dev2=68.817
Oct 27 13:08:54 wirenboard wb-rules[9142]: INFO: [rule info] hwmon/CPU Temperature => new=68.704 dev=68.817 dev2=68.817
Oct 27 13:08:57 wirenboard wb-rules[9142]: INFO: reloading file: /etc/wb-rules/rules.js
Oct 27 13:09:04 wirenboard wb-rules[9142]: INFO: [rule info] hwmon/CPU Temperature => new=68.478 dev=68.478 dev2=68.478
Oct 27 13:09:14 wirenboard wb-rules[9142]: INFO: [rule info] hwmon/CPU Temperature => new=68.704 dev=68.704 dev2=68.704
Oct 27 13:09:24 wirenboard wb-rules[9142]: INFO: [rule info] hwmon/CPU Temperature => new=68.478 dev=68.478 dev2=68.478
Если перезагрузить wb-rules, то проблема возвращается:
Oct 27 13:11:52 wirenboard wb-rules[12763]: INFO: [rule info] hwmon/CPU Temperature => new=67.574 dev=67.574 dev2=67.574
Oct 27 13:12:02 wirenboard wb-rules[12763]: INFO: [rule info] hwmon/CPU Temperature => new=66.67 dev=67.574 dev2=67.574
Oct 27 13:12:12 wirenboard wb-rules[12763]: INFO: [rule info] hwmon/CPU Temperature => new=67.122 dev=67.574 dev2=67.574
Oct 27 13:12:22 wirenboard wb-rules[12763]: INFO: [rule info] hwmon/CPU Temperature => new=66.67 dev=67.574 dev2=67.574
Oct 27 13:12:32 wirenboard wb-rules[12763]: INFO: [rule info] hwmon/CPU Temperature => new=67.009 dev=67.574 dev2=67.574
Версия ПО последняя
Wiren Board 7.2.1, release unstable.latest (as testing)
Linux wirenboard 5.10.35-wb180 #1 SMP Mon Sep 1 07:21:40 UTC 2025 armv7l GNU/Linux
...
Calculating upgrade... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.