Получение в коде правила значения title виртуального устройства

Созданы виртуальные устройства. Хочется в коде получить значения поля title из них (в частности, для использования в уведомлениях).

Попробуйте получить значение топика meta, там должны быть эти параметры.

myTitle = getDevice(<id девайса>).getTitle()


Не работает. “Ошибка правила: TypeError: call target not an object”
В GitHub - wirenboard/wb-rules: Rule engine for Wiren Board написано, что для устройства такой функции нет.

Я так понял, что meta в json публикуется только при старте устройства.
Но по моему вопросу есть meta/name и в консоли из него можно получить title. Но в коде не получается. dev[‘устройство/meta/name’] дает пустую строку.

Да, публикуется при создании устройства, но т.к. он persistance, то можно на него подписаться и получить значение. Попробуйте функцию `trackMqtt().

В консоли на mosquitto_sub -t ‘/devices/xxxx/meta’ ответа нет. В описании trackMqtt указано, что функция вызывается при изменении значения.
Код
trackMqtt(“/devices/xxxx/meta”, function(message){
log.info(“name: {}, value: {}”.format(message.topic, message.value))
});
ничего не выдает.

у меня через консольного клиента получилось

image

я только поменял символ апострофа

Для реального устройства работает. Мне нужно для виртуального.

Самое время предоставить дополнительную информацию: версию контроллера, используемого ПО и диагностический архив.

Welcome to Wiren Board 7.3.4 (s/n A4L2CELO), release wb-2304 (as stable)
diag_output_A4L2CELO_2023-06-27-09.33.40.zip (108,5 КБ)

Точно, я ошибся, прошу прощения. Наверное, сейчас, можно получить и использовать в сообщениях идентификатор устройства.

Тогда как вариант - я могу сделать не виртуальные устройства на каждый датчик, а одно устройство, в нем три канала и уже смотреть в коде на заголовки каналов?
В общем случае схема такая - есть три датчика температуры 1-wire. Хочется иметь тоже три привязанных к ним вирутальных устройства со статусами “холодно, нормально, жарко” (для каждого - свои пороги мин и макс температур) и тревога (= не нормально). И поскольку сами датчики имеют не очень понятный ID, хочется для визуальной составляющей и уведомлений использовать title.

Ну так как-то:

//06_27_test_02.js


function makeNewVirtualPool(vdName, nameControl, typeControls, orderControl){
  //log.info("GetDevice", getDevice("vdName"))
  if (getDevice(vdName) === undefined) {
    log.info("Define new")
    defineVirtualDevice(vdName, {
      title: vdName,
      cells: {

      },
    })
  }
 
    //Тут проверим есть ли уже контрол и если нет - создадим.
    if (!getDevice(vdName).isControlExists(nameControl)) {
      log.info("Контрола нет, создаем.")
      getDevice(vdName).addControl(nameControl, {
        type: typeControls,
         min: 10,
        max: 50,
        value: 1,
        readonly: false,
        order: orderControl
      });
    }
 
}


makeNewVirtualPool("Temp_1", "test1", "range", 1);
makeNewVirtualPool("Temp_1", "test2", "range", 2);

При необходимости добавьте в функцию создание правил.

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

Один раз описать функцию - проще чем три раза описывать однотипное и отом ловить ошибки.

Если удалить в процессе работы - то GitHub - wirenboard/wb-rules: Rule engine for Wiren Board

Спасибо!

Эта тема была автоматически закрыта через 7 дней после последнего ответа. В ней больше нельзя отвечать.