у нас какие-то разные устройства? почему поведение прямо противоположное? откуда у меня такой результат?
код
Summary
function makeNewVirtualControl(vdName, nameControl, typeControl){ if (getDevice(vdName) === undefined) { defineVirtualDevice(vdName, { title: vdName, cells: {}, }) } else{ log.debug("Устройство "+vdName+" уже есть.") } //Тут проверим есть ли уже контрол и если нет - создадим. if (!getDevice(vdName).isControlExists(nameControl)) { log.debug("Контрола "+nameControl+" нет, создаем.") getDevice(vdName).addControl(nameControl, typeControl); } else{ log.debug("Контрол "+nameControl+" уже есть.") } }function getControlTest(topic){
counter += 1;
var val = getControl(topic)
log(“test.js ({}): getControl(‘{}’) = {} [{}]”, counter, topic, JSON.stringify(val), typeof val )
}
function getDeviceTest(dv,ctrl){
counter += 1;
var val = null;
try {
val = getDevice(dv).isControlExists(ctrl)
} catch (error) {
val = ‘error’
log.error(error.message, error.name, error.stack);
}
log(“test.js ({}): getDevice(‘{}’).isControlExists(‘{}’) = {} [{}]”, counter, dv, ctrl, JSON.stringify(val), typeof val )
}makeNewVirtualControl(“devName”, “cellName”, {type: “text”, value:‘Hello’, readonly: true})
var counter = 0
log(“test.js: ====== тестируем реальное устройство” )
getControlTest(‘fl0-box2_2-D18/Input 1’)
getControlTest(‘fl0-box2_2-D18/undefinedCell’)
getControlTest(‘undefinedDev/undefinedCell’)getDeviceTest(‘fl0-box2_2-D18’,‘Input 1’)
getDeviceTest(‘fl0-box2_2-D18’,‘undefinedCell’)
getDeviceTest(‘undefinedDev’,‘undefinedCell’)log(“test.js: !!! тестируем виртуальное устройство” )
getControlTest(‘devName/cellName’)
getControlTest(‘devName/undefinedCell’)
getControlTest(‘undefinedDev/undefinedCell’)
getDeviceTest(‘devName’,‘cellName’)
getDeviceTest(‘devName’,‘undefinedCell’)
getDeviceTest(‘undefinedDev’,‘undefinedCell’)
результат
Summary
11-03-2026 20:13:43.762 INFO: reloading file: /etc/wb-rules/test.js
11-03-2026 20:13:42.806 INFO: [rule info] test.js (12): getDevice('undefinedDev').isControlExists('undefinedCell') = "error" [string]
11-03-2026 20:13:42.805 ERROR: [rule error] invalid base value TypeError TypeError: invalid base value
duk_hobject_props.c:2000
getDeviceTest /etc/wb-rules/test.js:40
F /etc/wb-rules/test.js:72 preventsyield
11-03-2026 20:13:42.805 ERROR: [rule error] Error in getting device: Device with given ID doesn't exist
11-03-2026 20:13:42.804 INFO: [rule info] test.js (11): getDevice('devName').isControlExists('undefinedCell') = false [boolean]
11-03-2026 20:13:42.802 INFO: [rule info] test.js (10): getDevice('devName').isControlExists('cellName') = true [boolean]
11-03-2026 20:13:42.801 INFO: [rule info] test.js (9): getControl('undefinedDev/undefinedCell') = undefined [undefined]
11-03-2026 20:13:42.801 ERROR: [rule error] Error in getting device: Device with given ID doesn't exist
11-03-2026 20:13:42.801 INFO: [rule info] test.js (8): getControl('devName/undefinedCell') = undefined [undefined]
11-03-2026 20:13:42.800 ERROR: getControl(): no such control 'undefinedCell'
11-03-2026 20:13:42.799 INFO: [rule info] test.js (7): getControl('devName/cellName') = {"__cellId":"cellName","__deviceId":"devName"} [object]
11-03-2026 20:13:42.799 INFO: [rule info] test.js: !!!!!! тестируем виртуальное устройство
11-03-2026 20:13:42.798 INFO: [rule info] test.js (6): getDevice('undefinedDev').isControlExists('undefinedCell') = "error" [string]
11-03-2026 20:13:42.798 ERROR: [rule error] invalid base value TypeError TypeError: invalid base value
duk_hobject_props.c:2000
getDeviceTest /etc/wb-rules/test.js:40
F /etc/wb-rules/test.js:60 preventsyield
11-03-2026 20:13:42.798 ERROR: [rule error] Error in getting device: Device with given ID doesn't exist
11-03-2026 20:13:42.794 INFO: [rule info] test.js (5): getDevice('fl0-box2_2-D18').isControlExists('undefinedCell') = false [boolean]
11-03-2026 20:13:42.792 INFO: [rule info] test.js (4): getDevice('fl0-box2_2-D18').isControlExists('Input 1') = true [boolean]
11-03-2026 20:13:42.792 INFO: [rule info] test.js (3): getControl('undefinedDev/undefinedCell') = undefined [undefined]
11-03-2026 20:13:42.788 ERROR: [rule error] Error in getting device: Device with given ID doesn't exist
11-03-2026 20:13:42.786 INFO: [rule info] test.js (2): getControl('fl0-box2_2-D18/undefinedCell') = undefined [undefined]
11-03-2026 20:13:42.786 ERROR: getControl(): no such control 'undefinedCell'
11-03-2026 20:13:42.784 INFO: [rule info] test.js (1): getControl('fl0-box2_2-D18/Input 1') = {"__cellId":"Input 1","__deviceId":"fl0-box2_2-D18"} [object]
11-03-2026 20:13:42.781 INFO: [rule info] test.js: ====== тестируем реальное устройство
11-03-2026 20:13:42.774 ERROR: [rule error] Error in getting device: Device with given ID doesn't exist
1.в этом коде - для теста.
2.чтобы не получать краши, если устройство еще не успело создаться при загрузке.
3.поведение для всех устройств должно быть одинаковым и предсказуемым
если вы с такими ситуациями не сталкивались, это не значит, что никому это не нужно… например, я создаю клоны счетчиков с увеличенным коэффициентом трансформации, а потом еще до кучи мне нужно суммировать эти показания в один общий счетчик и считать суммарное потребление. т.е создаю на каждый реальный счетчик по виртуальному, а потом создаю еще один виртуальный счетчик, который суммирует 3 виртуальных.