ojousima.ble_influx_gw
Version:
Read BLE advertisements, parse data and relay data to InfluxDB
93 lines (92 loc) • 3.58 kB
JavaScript
;
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) { }
}
}
});