Вот первый подход с 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));
}
});