# Получение полного списка устройств

**URL:** <https://support.wirenboard.com/t/poluchenie-polnogo-spiska-ustrojstv/10998>\
**Category:** Rule Engine\
**Created:** [April 19, 2022, 9:59am UTC](https://support.wirenboard.com/t/poluchenie-polnogo-spiska-ustrojstv/10998 "2022-04-19T09:59:58Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![AncientAsgard](https://support.wirenboard.com/user_avatar/support.wirenboard.com/ancientasgard/32/28563_2.png) [@AncientAsgard](https://support.wirenboard.com/u/AncientAsgard)\
**Post date:** [April 19, 2022, 9:59am UTC](https://support.wirenboard.com/t/poluchenie-polnogo-spiska-ustrojstv/10998/1 "2022-04-19T09:59:58Z")

</div>

Здравствуйте.  
Каким образом из скрипта wb-rules я могу получить список ВСЕХ устройств, отображаемых на странице “Каналы MQTT”?

---

<div class="post-metadata">

**Author:** ![BrainRoot](https://avatars.discourse-cdn.com/v2/letter/b/c2a13f/32.png) [@BrainRoot](https://support.wirenboard.com/u/BrainRoot)\
**Post date:** [April 19, 2022, 4:13pm UTC](https://support.wirenboard.com/t/poluchenie-polnogo-spiska-ustrojstv/10998/2 "2022-04-19T16:13:05Z")

</div>

Добрый день.  
Вызвать mosquitto\_sub для пути devices/+ и распарсить его вывод, проще всего.

---

<div class="post-metadata">

**Author:** ![AncientAsgard](https://support.wirenboard.com/user_avatar/support.wirenboard.com/ancientasgard/32/28563_2.png) [@AncientAsgard](https://support.wirenboard.com/u/AncientAsgard)\
**Post date:** [April 20, 2022, 9:56am UTC](https://support.wirenboard.com/t/poluchenie-polnogo-spiska-ustrojstv/10998/3 "2022-04-20T09:56:35Z")

</div>

А каким образом `mosquitto_sub` можно вызвать из скрипта?

Тем более, насколько я понимаю, это интерактивная команда, которая будет выводить сообщения, по мере их поступления в топики. Если в топики никто не писал, то вывод для них и не появится. Да и как понять, когда необходимо остановить выполнение команды?..

```auto
trackMqtt("/devices/+", function(msg) { log(msg.topic); });

```

не выводит ничего. Да и не понятно, как эта асинхронная штука будет в одноразовом скрипте работать (скрипт вызывается один раз для регистрации устройств в Home Assistant)…

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

---

<div class="post-metadata">

**Author:** ![BrainRoot](https://avatars.discourse-cdn.com/v2/letter/b/c2a13f/32.png) [@BrainRoot](https://support.wirenboard.com/u/BrainRoot)\
**Post date:** [April 20, 2022, 4:42pm UTC](https://support.wirenboard.com/t/poluchenie-polnogo-spiska-ustrojstv/10998/4 "2022-04-20T16:42:19Z")

</div>

> [@AncientAsgard](#):
>
> А каким образом `mosquitto_sub` можно вызвать из скрипта?

> **[GitHub - wirenboard/wb-rules at 9aad8d1d71dd65e1aa5452971e1b5272659c1963](https://github.com/wirenboard/wb-rules/tree/9aad8d1d71dd65e1aa5452971e1b5272659c1963#%D0%97%D0%B0%D0%BF%D1%83%D1%81%D0%BA-%D0%B2%D0%BD%D0%B5%D1%88%D0%BD%D0%B8%D1%85-%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D0%B2)**
>
> 9aad8d1d71dd65e1aa5452971e1b5272659c1963

Достаточно вызвать

```auto
timeout 2 mosquitto_sub -v -t /devices/+/controls/+/meta/type

```

чтобы не выводить значения И, собственно, все.  
Вот тут пример по работе с внешними программами: [Как работать с базой данных HIstory. wb-mqtt-db - #73 от пользователя BrainRoot](https://support.wirenboard.com/t/kak-rabotat-s-bazoj-dannyh-history-wb-mqtt-db/1399/73)

---

<div class="post-metadata">

**Author:** ![BrainRoot](https://avatars.discourse-cdn.com/v2/letter/b/c2a13f/32.png) [@BrainRoot](https://support.wirenboard.com/u/BrainRoot)\
**Post date:** [April 20, 2022, 4:43pm UTC](https://support.wirenboard.com/t/poluchenie-polnogo-spiska-ustrojstv/10998/5 "2022-04-20T16:43:33Z")

</div>

Да, если есть желание “как веб-интерфейс” - то можно через mqtt rpc вызывать, вот тут пример: [формат запроса rpc - #4 от пользователя KSK](https://support.wirenboard.com/t/format-zaprosa-rpc/680/4)

---

<div class="post-metadata">

**Author:** ![AncientAsgard](https://support.wirenboard.com/user_avatar/support.wirenboard.com/ancientasgard/32/28563_2.png) [@AncientAsgard](https://support.wirenboard.com/u/AncientAsgard)\
**Post date:** [April 21, 2022, 8:58am UTC](https://support.wirenboard.com/t/poluchenie-polnogo-spiska-ustrojstv/10998/6 "2022-04-21T08:58:28Z")

</div>

Вот первый подход с mosquitto\_sub рабочий и более практичен чем через rpc (там парсить куда сложнее). Выводим все девайсы и их дочерние контролы:

```auto
var command = "timeout 2 mosquitto_sub -v -t /devices/+/controls/+/meta/type";
runShellCommand(command, {
    captureOutput: true,
    exitCallback: function(exitCode, capturedOutput) {
        if (exitCode !== 0 && exitCode !== 124) {
            log.warning("Command exited with code: {}", exitCode);
            return;
        }

        var devices = {};
        capturedOutput.split(/\r?\n/).forEach(function (entry) {
            var parts = entry.match("/devices/(.+)/controls/(.+)/meta/type (.+)");

            if (parts != null && parts.length === 4) {
                var device = parts[1];
                var control = parts[2];
                var control_type = parts[3];
                if (!(device in devices)) {
                    devices[device] = {};
                }

                devices[device][control] = control_type;
            }
        });
        log(JSON.stringify(devices, null, 2));
    }
});

```

---

<div class="post-metadata">

**Author:** ![BrainRoot](https://avatars.discourse-cdn.com/v2/letter/b/c2a13f/32.png) [@BrainRoot](https://support.wirenboard.com/u/BrainRoot)\
**Post date:** [April 21, 2022, 9:07am UTC](https://support.wirenboard.com/t/poluchenie-polnogo-spiska-ustrojstv/10998/7 "2022-04-21T09:07:02Z")

</div>

> [@AncientAsgard](#):
>
> более практичен чем через rpc (там парсить куда сложнее)

А вот тут не соглашусь. парсить можно так: [MQTT топик от внешнего устройства - #16 от пользователя BrainRoot](https://support.wirenboard.com/t/mqtt-topik-ot-vneshnego-ustrojstva/10838/16)  
То есть получаем объект и перебираем его.

Но в общем реализации равнозначны, да.

---

<div class="post-metadata">

**Author:** ![system](https://support.wirenboard.com/uploads/default/original/2X/5/5ac90dc8a7bdff486d3494a19ec6aaa6f6cc5d36.png) [@system](https://support.wirenboard.com/u/system)\
**Post date:** [April 28, 2022, 9:07am UTC](https://support.wirenboard.com/t/poluchenie-polnogo-spiska-ustrojstv/10998/8 "2022-04-28T09:07:29Z")

</div>

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