UNPKG

ojousima.ruuvi_endpoints.ts

Version:
65 lines (64 loc) 2.77 kB
"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;