grunig-nodes
Version:
Grünig Nodes Library
85 lines (73 loc) • 3.88 kB
JavaScript
module.exports = function(RED) {
function Modbus_Read (config) {
RED.nodes.createNode(this, config);
var node = this;
// Nachrichtenverarbeitungsfunktion
node.on('input', function(msg) {
// Einstellungen speichern
var mqttPath = config.mqttPath || ""; // Standardwert verwenden, wenn nicht vorhanden
var comEnabled = config.comEnabled || "false";
var format = config.format || "";
var communication = msg.payload.Communication || false;
var machineID = msg.payload.MachineID;
var value;
for (var i = 1; i <= 15; i++) {
// Speichern der Datenwerte
var variableName = "data" + i;
var dataString = config[variableName];
if (dataString !== undefined && dataString !== "") {
if (format === "format_unit"){
// Trennen von Name, Zahl und Symbol
var match = dataString.match(/([^[\]]+)\s*\[(\d+)\]\s*\[([^\]]+)\]/);
if (match !== null && match.length === 4){
var name = match[1].trim(); // Name
var payload = parseInt(match[2].trim()); // Zahl (als Integer)
var unit = match[3].trim(); // Symbol
}
if (communication === false && comEnabled === "true") {
value = 0;
}
else {
value = msg.payload.Value[payload];
}
dataMsg = {
payload: {
'value': value,
'unit': unit
},
topic: "GRUNIG/" + machineID + "/" + mqttPath + "/" + name
};
}
else if (format === "format_payload"){
// Extrahiere den Text und den Inhalt in den eckigen Klammern
var match = dataString.match(/([^[\]]+)\s*\[(\S+)\]/);
if (match !== null && match.length === 3){
var name = match[1].trim(); // Text vor den eckigen Klammern
var payload = parseInt(match[2].trim()); // Inhalt der eckigen Klammern
}
if (communication === false && comEnabled === "true") {
value = 0;
}
else {
value = msg.payload.Value[payload];
}
dataMsg = {
payload: value,
topic: "GRUNIG/" + machineID + "/" + mqttPath + "/" + name
};
}
else{
node.warn("no format selected");
}
//******************** */
// Rückgabe des msg-Objekts
if (name !== "" && name !== undefined && value !== undefined && value !== ""){
node.send(dataMsg);
}
}
}
});
}
// Node-Typ registrieren
RED.nodes.registerType("Modbus-Read", Modbus_Read);
};