UNPKG

node-red-contrib-kbr-ebus

Version:

KBR Gmbh - nodes for accessing ebus devices

81 lines (61 loc) 2.81 kB
module.exports = function(RED) { var ebus= require("./ebus"); const EbusDevice=require('./ebusDeviceBase') function KBREbusDevice(config) { RED.nodes.createNode(this,config); var node=this; if(typeof config.version == "string") config.version=config.version.split('.') var device=new EbusDevice(config) // console.log("EBUSDEVICE:",JSON.stringify(device)) const properties=node.context('properties') if(properties) device.setProperties(properties) let detector=new ebus.TelexDetector(); node.status({text:`[${device.address}]:${device.name}(${device.classId})`}); node.on("close", function() { }); node.on('input', function(msg) { if(msg.control){ device.controlDevice(msg.control) return } let telex=msg.payload if(Buffer.isBuffer(msg.payload)){ telex=null detector.detect(msg.payload,function(detected){ telex=detected; }) if(!telex) return } try{ const result=device.processTelex(telex) node.status({text:`[${device.address}]:${device.name}(${device.classId})`}); node.context('properties',device.properties) switch(result){ case undefined: case null: return case true: return node.send([{payload:Buffer.from([0x06])}]);// ACK case false: return node.send([{payload:Buffer.from([0x15])}]);// NAK case -1: return node.send([undefined,{payload:telex,properties:device.properties,states:device.states}])//Extern verarbeiten default: if(Buffer.isBuffer(result)){ console.log("Answer:",result) const answer=ebus.createTelex(device.address,telex.from,result) return node.send([{payload:answer}]);//Telex-Antwort } break } }catch(err){ console.error(err) } return node.send([{payload:Buffer.from([0x18])}]);//CAN }); } RED.nodes.registerType("kbr-ebus-device",KBREbusDevice); }