Считывание показаний через MBUS и передача через MQTT Landis+Gyr Ultraheat UH50

Все получилось, но пришлось обратится к товарищу который явно больше разбирается в программировании чем я )))

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);
                }
            }
        });
    }
});

1 лайк