node-red-contrib-enocean
Version:
an enocean node for node-red
89 lines (80 loc) • 2.3 kB
JavaScript
// const RadioERP1 = require('@enocean-js/radio-erp1').RadioERP1
module.exports = RED => {
function EnOceanButtonNode (config) {
RED.nodes.createNode(this, config)
// this.serialport = RED.nodes.getNode(config.serialport)
this.encoding = config.encoding
this.delay = config.delay
var node = this
node.payload = {
meta: {
eep: node.encoding,
channel: 22,
type: 'data'
},
data: {}
}
node.on('input', async function (msg) {
// node.btn = RadioERP1.from({ eep: 'f6-03-01', payload: [0], id: node.serialport.baseId + msg.payload.channel })
node.payload.meta.channel = msg.payload.channel
func[msg.payload.event](node, msg.payload.button)
})
}
RED.nodes.registerType('enocean-btn', EnOceanButtonNode)
}
var func = {
click: btnClick,
down: btnDown,
release: release
}
async function btnClick (node, btn) {
await btnDown(node, btn)
await delay(node.delay)
await release(node)
}
async function release (node) {
node.payload.data = { R1: 0, EB: 0 }
node.payload.meta.eep = node.encoding
if (node.payload.meta.eep.split('-')[1] === '02') {
node.payload.meta.status = 0b00100000
} else {
node.payload.meta.status = 0b00000000
}
node.send({ payload: node.payload })
// node.btn.payload = node.btn.encode({ R1: 0, EB: 0 }, { eep: 'f6-03-01', status: 0x0 })
// await node.serialport.sender.send(node.btn.toString())
}
async function btnDown (node, btn) {
node.payload.data = { R1: btn, EB: 1 }
node.payload.meta.eep = node.encoding
if (node.payload.meta.eep.split('-')[1] === '02') {
node.payload.meta.status = 0b00110000
} else {
node.payload.meta.status = 0b00010000
}
node.send({ payload: node.payload })
// node.btn.payload = node.btn.encode({ R1: btn, EB: 1 }, { eep: 'f6-03-01', status: 0b00010000 })
// await node.serialport.sender.send(node.btn.toString())
}
function delay (x) {
return new Promise((resolve, reject) => {
setTimeout(resolve, x)
})
}
// {
// "meta": {
// "eep": "a5-12-04",
// "channel": 3
// "type": "data", // teach-in
// "direction": 1,
// "data": 0,
// "status": 0
// },
// "teach-in":{
// "type": "4BS"
// },
// "data": {
// "TMP": 21
// }
// }
// node.send()