From ae194356b182211ad5e167180058c08b0a8d2299 Mon Sep 17 00:00:00 2001 From: Oliver Levett Date: Thu, 15 Jan 2015 20:12:32 +0000 Subject: [PATCH] Initial commit --- .gitignore | 2 ++ app.coffee | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++ index.js | 2 ++ package.json | 17 ++++++++++++++++ 4 files changed, 76 insertions(+) create mode 100644 .gitignore create mode 100644 app.coffee create mode 100644 index.js create mode 100644 package.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..82d30cc --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ + +node_modules/ diff --git a/app.coffee b/app.coffee new file mode 100644 index 0000000..df47a80 --- /dev/null +++ b/app.coffee @@ -0,0 +1,55 @@ +mqtt = require("mqtt") +serialport = require "serialport" +SerialPort = serialport.SerialPort +convertHex = require('convert-hex') + +class Packet + constructor: (@status, @hardwareId, @size, rawVersion, rawType, rawPayload) -> + if rawPayload + @payload = new Buffer(convertHex.hexToBytes(rawPayload)) + else + @payload = null + @version = parseInt(rawVersion) + @type = parseInt(rawType) + +class TemperaturePacket + constructor: -> + @temperature = 0 + + @decode: (payload) -> + temperaturePacket = new TemperaturePacket() + console.log payload + temperaturePacket.temperature = payload.readInt16LE(0) / 10 + temperaturePacket + +class PacketDispatcher + constructor: -> + @serialPort = new SerialPort "/dev/tty.usbserial-A6007oLa", + baudrate: 115200 + parser: serialport.parsers.readline('\r\n') + @serialPort.on 'open', @open + @client = mqtt.connect "tcp://192.168.0.112" + + open: => + @serialPort.on 'data', @onPacketArrived + + onPacketArrived: (data) => + rawPacket = String(data).trim().split(':') + packet = new Packet(rawPacket[0], rawPacket[2], rawPacket[3], rawPacket[4], rawPacket[5], rawPacket[6]) + + + payload = @decodePayload(packet) + @dispatchPayload(packet, payload) + + decodePayload: (packet) => + if packet.status is 'OK' + if packet.type is 1 + if packet.version is 1 + TemperaturePacket.decode(packet.payload) + + + dispatchPayload: (packet, payload) => + console.log 'dispatching', payload, 'from', packet.hardwareId + @client.publish("RF24HOME/#{packet.hardwareId}", JSON.stringify(payload)) + +packetDispatcher = new PacketDispatcher() \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..77a9f8d --- /dev/null +++ b/index.js @@ -0,0 +1,2 @@ +require('coffee-script/register'); +require('./app'); \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..54abefa --- /dev/null +++ b/package.json @@ -0,0 +1,17 @@ +{ + "name": "rf24-mqtt-bridge", + "version": "0.0.1", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "coffee-script": "^1.8.0", + "convert-hex": "^0.1.0", + "mqtt": "^0.3.13", + "serialport": "^1.4.10" + } +}