UNPKG

grunig-nodes

Version:

Grünig Nodes Library

140 lines (117 loc) 6.31 kB
module.exports = function(RED) { function MQTT_InfluxDB_Write(config) { RED.nodes.createNode(this, config); var node = this; // Nachrichtenverarbeitungsfunktion node.on('input', function(msg) { // Einstellungen speichern var topicPath = config.topicPath || ""; // Standardwert verwenden, wenn nicht vorhanden var funct = config.function || ""; // Variable umbenannt von 'varfunction' zu 'funct' var comEnabled = config.comEnabled || "false"; var format = config.format || ""; var type = config.typeDB || ""; var communication = msg.payload.Communication || false; if (funct === "Write_MQTT"){ this.status({fill:"blue",shape:"dot",text:"write MQTT..."}); for (var i = 1; i <= 15; i++) { // Speichern der Datenwerte var variableName = "data" + i; var dataString = config[variableName]; if (dataString !== undefined) { // Trennen von Name und Datentyp var parts = dataString.split(/\s*\[\s*/); var name = parts[0].trim(); // Name ist der erste Teil // Überprüfen, ob ein Datentyp vorhanden ist var dataUnit = ""; if (parts.length > 1) { dataUnit = parts[1].replace(']', '').trim(); // Datentyp ist der zweite Teil ohne das schließende eckige Klammern [] } } // Speichern des Topics var topic = "GRUNIG/" + msg.payload.MachineID + topicPath + "/" + name; // 'path' durch 'topicPath' ersetzt var topicInclude = topicPath.replace(/\//g, "."); // 'path' durch 'topicPath' ersetzt // Prüfen, ob der Name und das Topic im Nachrichten-Topic enthalten sind if (msg.topic.includes(name) && msg.topic.includes(topicInclude)){ var value = msg.payload.Value; // Kommunikation überprüfen und Wert auf 0 setzen, wenn nicht aktiviert if (comEnabled === "true" && !communication){ value = 0; } // Speichern der Ausgabe-Beschreibung basierend auf dem gewählten Format var dataMsg; if (format === "format_alarm") { let output; switch (value) { case 1: output = "ALARM_STATE_ACTIVE"; break; case 2: output = "ALARM_STATE_ACKNOWLEDGE"; break; case 3: output = "ALARM_STATE_INACTIVE"; break; default: output = "ALARM_STATE_NONE"; } dataMsg = { payload: { "value": value, "description": output }, topic: topic }; } else if (format === "format_unit") { dataMsg = { payload: { "value": value, "unit": dataUnit }, topic: topic }; } // Überprüfen, ob Name, Wert und Daten definiert sind und dann Nachricht senden if (name !== "" && name !== undefined && value !== undefined && value !== "") { node.send(dataMsg); } } } } else if (funct === "Write_DB"){ this.status({fill:"yellow",shape:"dot",text:"write InfluxDB..."}); for (var i = 1; i <= 15; i++) { // Speichern der Datenwerte var variableName = "data" + i; var dataString = config[variableName]; // Speichern des Topics var topic = topicPath + "/" + dataString; var value; if (msg.topic.includes(topic)){ if (msg.payload.Value && typeof msg.payload.Value === 'object' && 'value' in msg.payload.Value){ value = msg.payload.Value.value } else{ value = msg.payload.Value; } //******************** */ var obj1 = {}; obj1[dataString] = value; var obj2 = { _type: type }; var dataMsg = [obj1, obj2]; // Rückgabe des msg-Objekts if (dataString !== "" && dataString !== undefined && value !== undefined && value !== "" && type !== undefined) { msg.payload = dataMsg; node.send(msg); } } } } else{ node.warn("No action selected"); } }); } // Node-Typ registrieren RED.nodes.registerType("MQTT-InfluxDB-Write", MQTT_InfluxDB_Write); };