ojousima.ruuvi_endpoints.ts
Version:
Experiments with RuuviTags and TS
66 lines (65 loc) • 2.41 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.dfbaparser = void 0;
var batterybroadcast_1 = require("./batterybroadcast");
var versionStart = 1;
var versionEnd = versionStart + 1;
var temperatureStart = versionEnd;
var temperatureEnd = temperatureStart + 2;
var humidityStart = temperatureEnd;
var humidityEnd = humidityStart + 2;
var simpleStart = humidityEnd;
var simpleEnd = simpleStart + 2;
var radioStart = simpleEnd;
var radioEnd = radioStart + 2;
var droopStart = radioEnd;
var droopEnd = droopStart + 2;
var measurementStart = droopEnd;
var measurementEnd = measurementStart + 2;
var dfbaparser = function (data) {
var robject = new batterybroadcast_1.BatteryBroadcast();
if (0xba !== data[0]) {
throw new Error('Not DF BA data');
}
robject.dataFormat = 0xba;
var version = data[versionStart];
robject.version = version;
var temperatureBytes = data.slice(temperatureStart, temperatureEnd);
var temperature = temperatureBytes[0] * 256 + temperatureBytes[1];
// two's complement
if (temperature > 32767) {
temperature -= 65536;
}
// Temperature is in units of 0.005 C -> divide by 200
robject.temperatureC = temperature / 200;
var humidityBytes = data.slice(humidityStart, humidityEnd);
var humidity = humidityBytes[0] * 256 + humidityBytes[1];
// Humidity is in units of 0.0025 % -> divide by 400
robject.humidityRh = humidity / 400;
var simpleBytes = data.slice(simpleStart, simpleEnd);
var simple = simpleBytes[0] * 256 + simpleBytes[1];
// two's complement
if (simple > 32767) {
simple -= 65536;
}
robject.simpleVoltageV = simple / 1000;
var radioBytes = data.slice(radioStart, radioEnd);
var radio = radioBytes[0] * 256 + radioBytes[1];
// two's complement
if (radio > 32767) {
radio -= 65536;
}
robject.radioVoltageV = radio / 1000;
var droopBytes = data.slice(droopStart, droopEnd);
var droop = droopBytes[0] * 256 + droopBytes[1];
// two's complement
if (droop > 32767) {
droop -= 65536;
}
robject.droopVoltageV = droop / 1000;
var measurementBytes = data.slice(measurementStart, measurementEnd);
var measurement = measurementBytes[0] * 256 + measurementBytes[1];
robject.measurementSequence = measurement;
return robject;
};
exports.dfbaparser = dfbaparser;