UNPKG

datacake-nodes

Version:

a collection of datacake nodes for node-red

102 lines (88 loc) 4.18 kB
module.exports = function(RED) { var mqtt = require("mqtt"); var util = require("util"); var isUtf8 = require('is-utf8'); var url = require('url'); function DatacakeDeviceOutpuNode(config) { RED.nodes.createNode(this, config); var node = this; var globalContext = this.context().global; // Retrieve the config node, where the device is configured node.datacake_configuration = RED.nodes.getNode(config.datacake_configuration); node.log("Datacake - Device Output: Starting Device Output"); node.device_id = config.device_id; node.connected = false; if(typeof(config.device_id) !== 'undefined' && config.device_id != ""){ node.device_id = config.device_id.split("#")[0]; node.product_slug = config.device_id.split("#")[1]; } else { node.device_id = ""; node.product_slug = ""; } node.field_id = config.field_id; if(!node.datacake_configuration) { node.warn("Datacake - Device Output: No Configuration"); node.status({fill:"red",shape:"ring",text:"no configuration"}); } else { node.log("Datacake - Device Output: Starting connection"); node.log("Datacake - Device Output: Device ID: " + node.device_id); node.log("Datacake - Device Output: Product Slug " + node.product_slug); node.log("Datacake - Device Output: Field Name " + node.field_id); var globalVariable = 'mqtt_client' + node.datacake_configuration.workspace_id; if(typeof(globalContext.get(globalVariable)) === 'undefined'){ var client = mqtt.connect('mqtt://mqtt.datacake.co', { port: 1883, username: node.datacake_configuration.api_token, password: node.datacake_configuration.api_token, }); globalContext.set(globalVariable, client); } else { var client = globalContext.get(globalVariable); } client.on('connect', function () { node.connected = true; node.log("Datacake - Device Output: Verbindung erfolgreich."); node.status({fill:"green",shape:"dot",text:"connected"}); }); node.on('input', function(msg, send, done) { let product_slug = ""; let device_id = ""; let field_id = ""; let hasConfiguration = true; if(node.product_slug != "" && node.device_id != "") { product_slug = node.product_slug; device_id = node.device_id; } else if(msg.payload.productSlug != "" && msg.payload.deviceId != ""){ product_slug = msg.payload.productSlug; device_id = msg.payload.deviceId; } else { hasConfiguration = false; } if(node.field_id != ""){ field_id = node.field_id; } else if(msg.payload.fieldName != ""){ field_id = msg.payload.fieldName; } else { hasConfiguration = false; } if(hasConfiguration){ var topic = 'dtck-pub/' + product_slug + '/' + device_id + '/' + field_id; client.publish(topic, msg.payload.toString()); if (done) { done(); } node.log("Datacake - Device Output: Sent Data to " + topic); node.status({fill:"green",shape:"dot",text:"connected"}); } else { node.log("Datacake - Device Output: Konfiguration fehlerhaft."); node.status({fill:"red",shape:"ring",text:"disconnected"}); } }); node.on('close', function() { client.end() }); } } RED.nodes.registerType("datacake-device-output", DatacakeDeviceOutpuNode); }