hazyair-plantower
Version:
Library for Plantower sensors.
56 lines (44 loc) • 1.45 kB
JavaScript
const Protocol = require('./protocol');
const device = require('./device');
var Plantower = function (model, dev) {
this.model = model;
if (Object.keys(device).indexOf(model) === -1) {
throw new Error('unsupport device model ' + model);
}
this.protocol = new Protocol(dev);
};
Plantower.prototype.read = function () {
let model = device[this.model];
let promise = null;
if (model.defaultMode === 'passive') {
promise = this.protocol.write(model.requestData);
} else {
promise = Promise.resolve();
}
return promise.
then(() => this.protocol.read()).
then(data => {
let responseMap = model.responseMap;
let ret = {};
let index = 0;
responseMap.forEach((field) => {
let val = 0;
for (let j = 0; j < field.len; j++) {
val = val * 256 + data[index];
index++;
}
ret[field.key] = {
value: field.formatter ? field.formatter(val) : val,
unit: field.unit || null
};
});
if (ret.error && ret.error.value !== 0) {
return Promise.reject(ret.error.value);
}
ret.model = this.model;
ret.timestamp = Date.now();
return ret;
});
};
module.exports = Plantower;
;