This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
iot_ha [2014/08/19 23:17] jap [Wireless sensors] |
iot_ha [2014/08/22 23:09] jap [Telldus to MQTT Bridge] |
||
---|---|---|---|
Line 50: | Line 50: | ||
- | | + | ==== Telldus to MQTT Bridge ==== |
+ | |||
+ | Simple node.js bridge compatible with GaianDB and JSON databases. Requirements: net, mqtt. | ||
+ | |||
+ | npm install mqtt | ||
+ | |||
+ | |||
+ | Package: {{:telldus-mqtt.tgz|}} | ||
+ | |||
+ | telldus-mqtt.js: | ||
+ | <code> | ||
+ | /*** | ||
+ | * Telldus-MQTT bridge | ||
+ | * Parse messages from telldus-core and publish to local MQTT broker. | ||
+ | * | ||
+ | * Jaakko Ala-Paavola 2014-08-22 | ||
+ | */ | ||
+ | |||
+ | var net = require('net'); | ||
+ | var mqtt = require('mqtt'); | ||
+ | |||
+ | var lasttime = 0, lastid = 0; | ||
+ | |||
+ | var publisher = mqtt.createClient(1883,'localhost'); | ||
+ | var telldus = net.createConnection('/tmp/TelldusEvents'); | ||
+ | telldus.setEncoding('utf-8'); | ||
+ | |||
+ | telldus.on('connect' , function () { | ||
+ | console.log("Connected to Tellstick."); | ||
+ | }); | ||
+ | |||
+ | telldus.on('data', function(data) { | ||
+ | var pos = data.indexOf("TDRawDeviceEvent"); | ||
+ | if (pos > -1) | ||
+ | { | ||
+ | var measure={}, keyval=[]; | ||
+ | var arr = data.substr(data.indexOf(":",pos)+1).split(";"); | ||
+ | for (var i=0; i<arr.length; i++) { | ||
+ | keyval[i] = arr[i].split(":"); | ||
+ | measure[keyval[i][0]] = keyval[i][1]; | ||
+ | } | ||
+ | |||
+ | if ( measure.class == "sensor" && | ||
+ | measure.protocol == "mandolyn" && | ||
+ | measure.model == "temperaturehumidity" ) | ||
+ | { | ||
+ | // prevent duplicates | ||
+ | var now = new Date().getTime(); | ||
+ | |||
+ | if (data.id != lastid || now > lasttime+1000) | ||
+ | { | ||
+ | var topic = "gdb/sensor/temperature/"+measure.id+"/celsius"; | ||
+ | console.log(topic+": "+measure.temp); | ||
+ | publisher.publish(topic, measure.temp); | ||
+ | |||
+ | var topic = "gdb/sensor/humidity/"+measure.id+"/RH"; | ||
+ | console.log(topic+": "+measure.humidity); | ||
+ | publisher.publish(topic, measure.humidity); | ||
+ | |||
+ | lastid = data.id; | ||
+ | lasttime = now; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | }); | ||
+ | </code> |