Все получилось, но пришлось обратится к товарищу который явно больше разбирается в программировании чем я )))
Meter.js
var MBUS_SERIAL = '/usr/local/bin/mbus-serial-request-data'
var XMLLINTER = '/usr/bin/xmlstarlet'
var DEVICE = '/dev/ttyRS485-2'
var METRICS = {
2: {
name: 'Energy',
multiplier: 0.000239,
},
4: {
name: 'CurrentPower',
multiplier: 100
},
5: {
name: 'VolumeFlow',
multiplier: 0.001
},
6: {
name: 'FlowTemperature',
multiplier: 1
},
7: {
name: 'ReturnTemperature',
multiplier: 1
},
8: {
name: 'TemperatureDifference',
multiplier: 0.1
},
11: {
name: 'FabricationNumber',
multiplier: 1
}
}
defineVirtualDevice("ultraheat", {
title: "Ultraheat T550 (UH50)",
cells: {
Energy: {
type: "heat_energy",
value: 0
},
CurrentPower: {
type: "power",
value: 0
},
VolumeFlow: {
type: "water_flow",
value: 0
},
FlowTemperature: {
type: "temperature",
value: 0
},
ReturnTemperature: {
type: "temperature",
value: 0
},
FabricationNumber: {
type: "value",
value: 0
},
TemperatureDifference: {
type: "temperature",
value: 0
}
}
});
defineRule('ultraheat_cron', {
when: cron('@every 600s'), // interval
then: function () {
var mbusCmd = MBUS_SERIAL + " " + DEVICE + " -d | " + XMLLINTER + " sel -T -t -v '/MBusData/DataRecord/Value' -n";
runShellCommand(mbusCmd, {
captureOutput: true,
exitCallback: function (exitCode, capturedOutput) {
// log.info('ultraheat: var captureOutput: ' + capturedOutput);
capturedArray = capturedOutput.split("\n");
for (var id in METRICS) {
var metricName = METRICS[id]['name'];
var metricValue = capturedArray[id];
dev.ultraheat[metricName] = Number(metricValue) * METRICS[id]['multiplier'];
// log.info('ultraheat: var captureOutput metric[' + metricName + ']: ' + metricValue);
}
}
});
}
});