UNPKG

ojousima.ruuvi_endpoints.ts

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