node-red-contrib-kbr-ebus
Version:
KBR Gmbh - nodes for accessing ebus devices
81 lines (61 loc) • 2.81 kB
JavaScript
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);
}