Проблемы при динамическом создании устройств

Задача: получить JSON, разобрать его и на основе полученных данных создать необходимое число виртуальных устройств, если они пока не существуют, заполнить их контролами, если они не существуют, или обновить данные контролов …

Проблема 1, если создать устройство без cells, то потом в него контролы не добавляются, хотя переменная содержит объект, с ошибкой - виртуальное устройство не существует (но не существует только cells в объекте, то есть даже текст ошибки неверен).
Это явно ошибка, так как должен создаться автоматически, если не существует (вероятно, при создании виртуального устройства, но и при добавлении контрола тоже, наверное …).
То есть код не работает (не добавляются контролы):

              dv = defineVirtualDevice(dId, { title: wData[j].name }); 

Рабочий код:

              dv = defineVirtualDevice(dId, { title: wData[j].name, cells: {} }); 

(детально не разбирался, ошибка не критическая, но раз уж создал тут тему …)

Проблема 2.
Виртуальное устройство нужно создать только тогда, когда его не существует. Виртуальные устройства могут добавляться динамически (удалять по идее тоже, но это “редчайшее” событие). И имя устройства на момент запуска скрипта не известно …

На сейчас работает такой код:

var dv = getDevice(dId);
if (!dv) { 
  dv = defineVirtualDevice(dId, { title: wData[j].name, cells: {} }); 
}

Но, при первом запуске возникает ошибка на первой строчке, что устройство не существует в логах. При этом метода проверки на существование без ошибки - нет, оборачивание в тру тоже не помогает - ошибка все равно возникает …

Как корректно проверить устройство на существование (имя устройства динамическое)?

Это неправда.
Давно использую такую обертку. makeNewVirtualControl
Например Шаблон для электрокарниза - #6 от пользователя BrainRoot

В вашем коде поиском находится только в одном месте создание устройства.
И оно “как работает” в моем примере.

Я у себя уже везде добавил так, как работает, лишняя строчка кода погоды не делает, но это “не правильно” и ошибка (если действительно так)

По первой проблеме, вероятно, в коде просто тупо в тру добавляется контрол к “существующему” cells. А так как его не существует возникает исключение с текстом ошибки не соответствующей ситуации …
Но повторюсь, не критично … но лишняя строчка кода …

И (не проверял детально) виртуальное устройство без cells не отображается и в UI (а с ним пустым отображается, просто как заголовок).

В общем если это так (по хорошему нужно чистое правило создать без наворотов для проверки), то это не критичная ошибка, которую неплохо бы исправить …

По 2 пункту … Вообще отсутвуют методы проверки на существование, задания и чтения title … Для большинства случаев устройства динамически не меняются и не добавляются, но … зачем тогда громкое название АПИ? В общем эти методы строго обязательны, имхо, но может и не срочно/критично … При разных интеграциях заранее неизвестно ни кол-во устройство, ни их точное содержимое … И изменения происходят с той стороны и должны отображаться в контроллере (но редко, конечно, и конечно можно все руками, без всяких апи …)

Проблему решил, создал переменную в которую на старте заношу 0 и если число виртуальных устройств, полученных по АПИ не соответствует переменной, то запускаю процедуру создания устройства, а если соответствует - обновления …
Недостаток - две функции практически идентичных. Но я их сократил до минимума и каждая для заполнения контролов вызывает уже одну и туже функцию …
Так что обходится, но … “не правильно”.

Ну и если со стороны АПИ создать новое и удалить одно старое устройство, то скрипт не заметит и будут совсем “красные” ошибки … событие “редкое” и лечится перезапуском правила, но все же …

Я про то что создавать “устройство”, само по себе большого смысла не имеет. Ну да, будет пустое. И как раз оно так и создается, с пустым cells: {}.

А, кажется понял. Да, если из одного скрипта уделить созданное (этим же или другим) устройство - это практически не обработать.