UNPKG

ojousima.ble_influx_gw

Version:

Read BLE advertisements, parse data and relay data to InfluxDB

93 lines (92 loc) 3.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var influx_1 = require("influx"); var Noble = require("noble"); var ojousima_ruuvi_endpoints_ts_1 = require("ojousima.ruuvi_endpoints.ts"); var os = require("os"); var accelerationdata_1 = require("./accelerationdata"); var batterydata_1 = require("./batterydata"); // Setup database connection var batteryDB = new influx_1.InfluxDB(batterydata_1.BatteryOptions); batteryDB.getDatabaseNames().then(function (names) { var dbname = batterydata_1.BatteryOptions.database ? batterydata_1.BatteryOptions.database : 'misc'; if (0 > names.indexOf(dbname)) { return batteryDB.createDatabase(dbname); } }); // Setup database connection var accelerationDB = new influx_1.InfluxDB(accelerationdata_1.AccelerationOptions); batteryDB.getDatabaseNames().then(function (names) { var dbname = accelerationdata_1.AccelerationOptions.database ? accelerationdata_1.AccelerationOptions.database : 'misc'; if (0 > names.indexOf(dbname)) { return accelerationDB.createDatabase(dbname); } }); // Setup scanning Noble.on('stateChange', function (state) { if (state !== 'poweredOn') { Noble.stopScanning(); } else { Noble.startScanning([], true); } }); Noble.on('discover', function (peripheral) { var advertisement = peripheral.advertisement; var id = peripheral.id; var localName = advertisement.localName; var txPowerLevel = advertisement.txPowerLevel; var manufacturerData = advertisement.manufacturerData; var serviceData = advertisement.serviceData; var serviceUuids = advertisement.serviceUuids; var rssi = peripheral.rssi; var timestamp = Date.now(); if (undefined === manufacturerData) { return; } // Parse manufacturer ID var view = new DataView(manufacturerData.buffer); var manufacturerID = view.getUint16(0, true); // If ID is Ruuvi Innovations 0x0499 if (0x0499 === manufacturerID) { var data = Uint8Array.from(peripheral.advertisement.manufacturerData.slice(2)); // If data is acceleration data if (0xac === data[0]) { try { var AccelerationData = ojousima_ruuvi_endpoints_ts_1.dfacparser(data); var sample = accelerationdata_1.AccelerationBroadcastToInflux(AccelerationData); if (undefined === sample.tags) { sample.tags = {}; } if (undefined === sample.fields) { sample.fields = {}; } sample.tags.gatewayID = os.hostname(); sample.tags.address = id; sample.fields.rssi = rssi; var tx = [sample]; batteryDB.writePoints(tx); } catch (e) { } } // If data is battery data if (0xba === data[0]) { try { var BatteryData = ojousima_ruuvi_endpoints_ts_1.dfbaparser(data); var sample = batterydata_1.BatteryBroadcastToInflux(BatteryData); if (undefined === sample.tags) { sample.tags = {}; } if (undefined === sample.fields) { sample.fields = {}; } sample.tags.gatewayID = os.hostname(); sample.tags.address = id; sample.fields.rssi = rssi; var tx = [sample]; batteryDB.writePoints(tx); } catch (e) { } } } });