ojousima.ruuvi_endpoints.ts
Version:
Experiments with RuuviTags and TS
65 lines (64 loc) • 2.77 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.df3parser = void 0;
var ruuvitagbroadcast_1 = require("./ruuvitagbroadcast");
var humidityStart = 1;
var humidityEnd = humidityStart + 1;
var temperatureStart = humidityEnd;
var temperatureEnd = temperatureStart + 2;
var pressureStart = temperatureEnd;
var pressureEnd = pressureStart + 2;
var accelerationXStart = pressureEnd;
var accelerationXEnd = accelerationXStart + 2;
var accelerationYStart = accelerationXEnd;
var accelerationYEnd = accelerationYStart + 2;
var accelerationZStart = accelerationYEnd;
var accelerationZEnd = accelerationZStart + 2;
var batteryStart = accelerationZEnd;
var batteryEnd = batteryStart + 2;
var df3parser = function (data) {
var robject = new ruuvitagbroadcast_1.RuuviTagBroadcast();
if (3 !== data[0]) {
throw new Error('Not DF3 data');
}
var humidity = data[humidityStart];
humidity /= 2; // scale
robject.humidityRh = humidity;
var temperatureBytes = data.slice(temperatureStart, temperatureEnd);
var temperature = temperatureBytes[0]; // Full degrees
temperature += temperatureBytes[1] / 100.0; // Decimals
if (temperature > 128) {
// Ruuvi format, sign bit + value
temperature = temperature - 128;
temperature = 0 - temperature;
}
robject.temperatureC = temperature;
var pressureBytes = data.slice(pressureStart, pressureEnd); // uint16_t pascals
var pressure = pressureBytes[0] * 256 + pressureBytes[1];
pressure += 50000; // Ruuvi format
robject.pressurePa = pressure;
var accelerationBytes = data.slice(accelerationXStart, accelerationXEnd); // milli-g
var accelerationX = accelerationBytes[0] * 256 + accelerationBytes[1];
if (accelerationX > 32767) {
accelerationX -= 65536;
} // two's complement
accelerationBytes = data.slice(accelerationYStart, accelerationYEnd); // milli-g
var accelerationY = accelerationBytes[0] * 256 + accelerationBytes[1];
if (accelerationY > 32767) {
accelerationY -= 65536;
} // two's complement
accelerationBytes = data.slice(accelerationZStart, accelerationZEnd); // milli-g
var accelerationZ = accelerationBytes[0] * 256 + accelerationBytes[1];
if (accelerationZ > 32767) {
accelerationZ -= 65536;
} // two's complement
robject.accelerationXG = accelerationX / 1000.0;
robject.accelerationYG = accelerationY / 1000.0;
robject.accelerationZG = accelerationZ / 1000.0;
var batteryBytes = data.slice(batteryStart, batteryEnd); // milli volts
var battery = batteryBytes[0] * 256 + batteryBytes[1];
robject.batteryVoltageV = battery / 1000.0;
robject.dataFormat = 3;
return robject;
};
exports.df3parser = df3parser;