qrt
Version:
Air Quality Toolkit
105 lines (91 loc) • 1.91 kB
JavaScript
const dayjs = require('dayjs');
const helpers = require('../helpers');
module.exports = {
parseRaw(raw) {
if (typeof raw !== 'string') {
throw new Error('Raw must be an string');
}
const { dataString, version, firmwareVersion, status } =
helpers.device.info;
const splittedRaw = raw.split(',');
const pipes = splittedRaw[28].split('|');
return {
DUI: dataString === 'MQA' ? splittedRaw[3] : splittedRaw[4],
dataString: splittedRaw[dataString.pos],
version: splittedRaw[version.pos],
firmwareVersion: splittedRaw[firmwareVersion.pos],
status: splittedRaw[status.pos],
};
},
parseAvgKey(key, avgType) {
if (typeof key !== 'string') {
throw new Error('Key must be an string');
}
const avgTypeConfigs = {
'10mn': {
length: 6,
positions: {
DUI: 0,
year: 1,
month: 2,
day: 3,
hour: 4,
minute: 5,
},
},
'1h': {
length: 5,
positions: {
DUI: 0,
year: 1,
month: 2,
day: 3,
hour: 4,
},
},
'8h': {
length: 5,
positions: {
DUI: 0,
year: 1,
month: 2,
day: 3,
hour: 4,
},
},
'1d': {
length: 4,
positions: {
DUI: 0,
year: 1,
month: 2,
day: 3,
},
},
'1m': {
length: 3,
positions: {
DUI: 0,
year: 1,
month: 2,
},
},
};
const avgConfig = avgTypeConfigs[avgType];
if (!avgConfig) {
throw new Error('Invalid avg type');
}
const keyParts = key.split('!');
if (!keyParts.length || avgConfig.length !== keyParts.length) {
throw new Error('Invalid key format');
}
const positions = avgConfig.positions;
return dayjs(0)
.year(keyParts[positions.year])
.month(keyParts[positions.month] - 1)
.date(keyParts[positions.day] || 1)
.hour(keyParts[positions.hour] || 0)
.minute(keyParts[positions.minute] || 0)
.toISOString();
},
};