Сопоставление каналов виртуальных устройств физическим после перезагрузки

у нас какие-то разные устройства? почему поведение прямо противоположное? откуда у меня такой результат?

код

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 виртуальных.

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