Задача - считать вывод запускаемой программы, разобрать его и записать в поля виртуального устройства.
DomParser не поддерживается, будем вручную.
//02_15_test_02.js
defineVirtualDevice("mbus", {
title: "Mbus OUT", //
cells: {
Energy : {
type : "text",
value : "",
readonly: false,
},
Power : {
type : "text",
value : "",
readonly: false,
},
}
});
//var oParser = new DOMParser();
log.info ("START 02_15_test_02.js")
// Запуск shell-команды с захватом вывода
runShellCommand("ls /etc", //сюда и записываем "mbus-serial-request-data /dev/ttyRS485-2 -d"
{
captureOutput: true, //Захватывать stdout
captureErrorOutput: true, //Захватывать stderr (если нужно)
exitCallback: function (exitCode, capturedOutput, capturedErrorOutput) //Функция, в которую попадает вывод
{
log("cmd output: " + capturedOutput); //строка полностью
capturedArray = capturedOutput.split("\n"); //Разбиваем полученную строку по символу переноса строки.
capturedArray.forEach(function(item, index){ //Для каждой строки
var tmpstring = item.trim(); //порежем пробелы
switch(tmpstring) {
case "<Unit>Energy (MJ)</Unit>": //Одно из условий
dev["mbus"]["Energy"] = capturedArray[index+1] //Выводим СЛЕДУЮЩУЮ строку в поле. ну и обработать как надо, если надо.
case "<Unit>Power (100 W)</Unit>": //Одно из условий
//log.info("index", index)
dev["mbus"]["Power"] = capturedArray[index+1] //ну и обработать как надо
//log.info(capturedArray[index+1])
}
})
log("cmd Erroroutput: " + capturedErrorOutput); //Если нужен вывод stderr
}
})
Вот пример как раз нужного. Упаковать запуск внешнего приложения и парсинг в функцию - и вызывать по таймеру.