Добрый день.
Словил странное состояние виртуального устройства, в котором его невозможно корректно создать.
Именно устройство с конкретным именем и конкретным топиком heat_out_store/targetTemperature.
Пример кода:
var deviceName = 'heat_out_store';
var cellName = 'targetTemperature';
var topic = "{}/{}".format(deviceName, cellName);
var device = defineVirtualDevice(deviceName, {
title: "Термостат: Уличная кладовка",
cells: {
targetTemperature: {
type: "value",
value: 24,
title: "Уставка",
order: 1,
max: 30,
min: 15,
readonly: false
}
}
});
log(">>> Test1 - dev[{}]: {}",topic, dev[topic]);
var cell = device.getControl(cellName);
log(">>> Test2 - cell = {}", cell);
var val = cell.getValue();
log(">>> Test3 - val = {}", val);
Логи выдают такую ошибку:
Apr 08 01:43:16 wirenboard-AC6A3GB6 wb-rules[4864]: INFO: reloading file: /etc/wb-rules/experiments.js
Apr 08 01:43:16 wirenboard-AC6A3GB6 wb-rules[4864]: INFO: [rule info] >>> Test1 - dev[heat_out_store/targetTemperature]: null
Apr 08 01:43:16 wirenboard-AC6A3GB6 wb-rules[4864]: INFO: [rule info] >>> Test2 - cell = [object Object]
Apr 08 01:43:16 wirenboard-AC6A3GB6 wb-rules[4864]: ERROR: getValue (heat_out_store/targetTemperature) failed: This control is incomplete
Apr 08 01:43:16 wirenboard-AC6A3GB6 wb-rules[4864]: WARNING: warning: failed to load /etc/wb-rules/experiments.js: Error: error error (rc -100)
anon native strict preventsyield
F /etc/wb-rules/experiments.js:22 preventsyield
Apr 08 01:43:16 wirenboard-AC6A3GB6 wb-rules[4864]: INFO: [rule info] _update_git_status started!
меняю одну букву в названии устройства или топике и все создается нормально:
heat_out_store1/targetTemperature
var deviceName = 'heat_out_store1';
var cellName = 'targetTemperature';
var topic = "{}/{}".format(deviceName, cellName);
var device = defineVirtualDevice(deviceName, {
title: "Термостат: Уличная кладовка",
cells: {
targetTemperature: {
type: "value",
value: 24,
title: "Уставка",
order: 1,
max: 30,
min: 15,
readonly: false
}
}
});
log(">>> Test1 - dev[{}]: {}",topic, dev[topic]);
var cell = device.getControl(cellName);
log(">>> Test2 - cell = {}", cell);
var val = cell.getValue();
log(">>> Test3 - val = {}", val);

Apr 08 01:45:11 wirenboard-AC6A3GB6 wb-rules[4864]: INFO: reloading file: /etc/wb-rules/experiments.js
Apr 08 01:45:11 wirenboard-AC6A3GB6 wb-rules[4864]: INFO: [rule info] >>> Test1 - dev[heat_out_store1/targetTemperature]: 24
Apr 08 01:45:11 wirenboard-AC6A3GB6 wb-rules[4864]: INFO: [rule info] >>> Test2 - cell = [object Object]
Apr 08 01:45:11 wirenboard-AC6A3GB6 wb-rules[4864]: INFO: [rule info] >>> Test3 - val = 24
Apr 08 01:45:16 wirenboard-AC6A3GB6 wb-rules[4864]: INFO: [rule info] _update_git_status started!
Пробовал перегружать правила, перегружать serial-mqtt, даже контроллер перегрузил, это не помогло. Где-то закешировалось сломанное состояние устройства, во флеш памяти (раз перезагрузка контроллера не помогла).
Где еще может хранится состояния виртуальных устройств?
Нашел файл wbrules-vdev.db, но формат у него мне не известный (sqlite не открыл).
diag_output_AC6A3GB6_2025-04-08-02.02.00.zip (440,2 КБ)


