Как в собственном конфиге сделать выбор выхода из списка?

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

    "relay":{
        "type":"string",
        "title":"Управляемый выход",
        "description": "При отказе можно сменить на запасной",
        "propertyOrder":2,
        "enum":["wb-mr6c_30/K1","wb-mr6c_30/K2","wb-mr6c_30/K3"],
        "default":"WB-MR6C Реле 1",
        "options":{"enum_titles":["WB-MR6C Реле 1","WB-MR6C Реле 2","WB-MR6C Реле 3"]}
    }

Но тут привязано к адресу, а хотелось бы список доступных выходов и из них выбирать.

То есть задача - перебрать все устройства в /devices/# ?
Надо учесть, что тип выхода моет быть как “switch” так и “range”, для диммеров. Ну и “switch” может использоваться как индикатор.
То есть - нигде не указано, что данный контрол - это выход.

Интересует тип DO(Discrete Output) - который может принимать значения 0 и 1.
А вообще было бы интересно тип как фильтр чтобы можно было выбрать заранее какие выходы показать для выбора.

Путь к перебору существующих контролов:

//02_15_test_01.js
log.info ("START!!!")
// Запуск shell-команды с выводом топиков
    runShellCommand("mosquitto_sub -v -t '/devices/+/controls/+' -C 100",
        {
      captureOutput: true, //Захватывать stdout
      captureErrorOutput: true, //Захватывать stderr (если нужно)
      exitCallback: function (exitCode, capturedOutput, capturedErrorOutput) //Функция, в которую попадает вывод
            {
                //log("cmd output: " + capturedOutput); //строка полностью
                capturedArray = capturedOutput.split("\n"); //Разбиваем полученную строку по символу переноса строки.
                capturedArray.forEach(function(item){ //Для каждой строки
                  log.info ("Massiv!!!", item)
                  log("Topic: " + item.split(" ")[0]) // topic
                  log("value: " + item.split(" ")[1]) // value
                })
                log("cmd Erroroutput: " + capturedErrorOutput); //Если нужен вывод  stderr
            }
         })

Ну естественно задавать можно какие угодно условия.

На самом деле я ожидал чего-то такого, прямо в схеме конфига:

"relay":{
        "type":"string",
        "title":"Управляемый выход",
        "description": "При отказе можно сменить на запасной",
        "propertyOrder":2,
        "enum":"{{ devices.filter(function(x){return x.title.inclides('wb-mr6c')}).outputs.filter(function(x){return x.title.inclides('K')}) }}",
        "default":"WB-MR6C Реле 1",
        "options":{"enum_titles":"{{ devices.filter(function(x){return x.title.inclides('wb-mr6c')}).outputs.filter(function(x){return x.title.inclides('K')}).map(function(x){return x.device.title+" "+x.title}) }}"}
    }

А в интерфейсе мы видим список из всех входов устройств типа WB-MR6C
тоесть confed самостоятельно нам их находит и фильтрует согласно макроса.

Да, потому как они описаны в шаблоне именно этого устройства. Если нужно перебрать входы одного, конкретного экземпляра устройсва - да.

нет нужно все эеземляры устройств, просто пример корявый. может можно топики как то перечислить а там регуляркой выдрать. Смысл получить массив для использования в dev[] и их
понятных имен для отображения в selecte. Чтобы схему конфига не править с добавлением нового устройства и использовать одну и ту-же схему в разных проектах без предварительной правки.

В будущем можно будет сделать библиотеку стандартных скиптов с конфигами для типовых задач, что значительно снизит порог вхождения в автоматизацию. Нужен терморегулятор - поставь из библиотеки и укажи ему термометр и выходы.