UNPKG

obniz

Version:

obniz sdk for javascript

128 lines (127 loc) 4.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class EMDCB { constructor() { this._peripheral = null; } static info() { return { name: 'EMDCB', }; } /** */ static isDevice(peripheral) { if (peripheral.adv_data[2] === 0xda && peripheral.adv_data[3] === 0x03) { return true; } else { return false; } } /** */ static getData(peripheral) { const results = this.analyzeData(peripheral); let data; if (results.commissioning_info) { data = { address: peripheral.address, commissioning_info: results.commissioning_info, }; } else { data = { address: peripheral.address, energy_level: results.energy_level, light_level_solar_cell: results.light_level_solar_cell, light_level_sensor: results.light_level_sensor, occupancy_status: results.occupancy_status, }; } return data; } /** */ static analyzeData(peripheral) { const sensorData = peripheral.adv_data.slice(8, -4); let i = 0; let isDescriptor = true; let dataLength = 1; let typeId = 0; const results = {}; while (i < sensorData.length) { if (isDescriptor) { const descriptor = sensorData[i]; switch (descriptor >> 6) { case 0: dataLength = 1; break; case 1: dataLength = 2; break; case 2: dataLength = 4; break; case 3: dataLength = 1; // extended break; default: throw new Error('data that cannot be analyzed'); } typeId = descriptor & 0b111111; isDescriptor = false; i += 1; } else { let data = 0; switch (dataLength) { case 0x01: if (typeId === 0x3e) { dataLength = 22; } else { data = sensorData[i]; } break; case 0x02: data = (sensorData[i + 1] << 8) + sensorData[i]; break; default: throw new Error('data that cannot be analyzed'); } switch (typeId) { case 0x01: results.backup_battery_voltage = data / 2; break; case 0x02: results.energy_level = data / 2; break; case 0x04: results.light_level_solar_cell = data; break; case 0x05: results.light_level_sensor = data; break; case 0x20: if (data === 1) { results.occupancy_status = false; } else if (data === 2) { results.occupancy_status = true; } break; case 0x3e: results.commissioning_info = peripheral.adv_data.slice(9); break; default: throw new Error('data that cannot be analyzed'); } i += dataLength; isDescriptor = true; } } return results; } } exports.default = EMDCB;