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

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

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));
    }
});
1 лайк