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

У меня как раз ПУЛЬС СТА-15-М-**Rs-485, т.е. если у меня на на порту весят какие то устройства другие, я должен их перевесить на другой порт, а этот выделить только под протокол modbus?

Подскажите, что может быть.

запускаю команду mbus-serial-scan -d -b 2400 /dev/ttyRS485-2

находятся какие-то девайсы

запускаю команду, по найденному адресу:

mbus-serial-request-data -d -b 2400 /dev/ttyRS485-2 130

но падает с ошибкой, что может быть? можете подсказать?

попробуй по вторичному адресу (серийному номеру счетчика).
mbus-serial-scan-secondary -d -b 2400 /dev/ttyRS485-2 24015622FFFFFFFF

24015622 заменить на свой серийник. серийник+FFFFFFFF

var MBUS_SERIAL = '/usr/bin/mbus-serial-request-data'
var XMLLINTER = '/usr/bin/xmlstarlet'
var DEVICE = '-b 2400 /dev/ttyMOD1 240156222D63010C'


var METRICS = {
    0: {
        name: 'Energy',
        multiplier: 0.000008598452,  //0.000239 (0,000008598452 - 10вт в гкал)
    },
    1: {
        name: 'CurrentPower',
        multiplier: 10
    },
    2: {
        name: 'Volume',
        multiplier: 0.01
    },
    3: {
        name: 'Power',
        multiplier: 10
    },
    4: {
        name: 'VolumeFlow',
        multiplier: 0.001
    },
    5: {
        name: 'FlowTemperature',
        multiplier: 0.01
    },
    6: {
        name: 'ReturnTemperature',
        multiplier: 0.01
    }
  //,
   // 7: {
    //    name: 'Time',
    //    multiplier: 1
    //}
}

defineVirtualDevice("Pulse", {
    title: "Пульс СТА (СТМ)",
    cells: {
        Energy: {
            type: "heat_energy",
            value: 0
        },
        CurrentPower: {
            type: "power",
            value: 0
        },
        Volume: {
            type: "water_consumption",
            value: 0
    	},
        Power: {
            type: "power",
            value: 0
        },
    	VolumeFlow: {
            type: "water_flow",
            value: 0
    	},
        FlowTemperature: {
            type: "temperature",
            value: 0
        },
        ReturnTemperature: {
            type: "temperature",
            value: 0
        }
      //,
        //Time: {
          //  type: "text",
            //value: "0"
        //}
    }
});

defineRule('ultraheat_cron', {
    when: cron('@every 300s'), // interval
    then: function () {
        var mbusCmd = MBUS_SERIAL + " " + DEVICE + " | " + XMLLINTER + " sel -T -t -v '/MBusData/DataRecord/Value' -n";
      
     runShellCommand(mbusCmd, {
            captureOutput: true,
            exitCallback: function (exitCode, capturedOutput) {
              

                capturedArray = capturedOutput.split("\n");
                for (var id in METRICS) {
                    var metricName = METRICS[id]['name'];
                    var metricValue = capturedArray[id];
                    dev.Pulse[metricName] = Number((Number(metricValue) * METRICS[id]['multiplier']).toFixed(3));
                   
                }
              
            }
        });
    }
});

Добавил округление до 3х знаков в выводе.

1 лайк