AI_ES6环境检测器
本帖最后由 pidtfork 于 2020-10-28 18:16 编辑AI_ES6环境检测器
封装了一个方法用来获取AI_ES6的环境检测数据
1.实例化AI_ES6,参数1是接口连接中控的端口,参数2是定时查询环境数据的时间间隔2. 设置设备ID,必须调用此方法设置设备ID,接收到数据将对比设置的ID,相同才处理。3.注册回调监听,定时触发回调,传入当前环境信息
var AIES6 = new AI_ES6(COM1,10); //设备接COM1,每10S查询一次
AIES6.setID(2); //设备出厂默认ID是3,所以在接上设备必须调用此方法设置ID,否则不触发回调
AIES6.on(function(data) {
console.log(data);
}
回调出入的对象格式如下
number为当前环境值
name 为当前检测对象的名称
unit 为当前环境值的单位
level 为当前环境值相较国标的等级
level 取值在 HCHO 和 TVOC 中可能为 "正常、轻微、严重、危险"四种情况
level 取值在 PM25 和 AQI 中可能为 "优、良、轻度污染、中度污染、重度污染、严重污染"五种情况
下面 json 中 unit 、 level 键值为""的,将永久为""
{
HCHO: { number: 0.028, name: '甲醛', unit: 'mg/m3', level: '正常' },
TVOC: { number: 0.192, name: '有机挥发气体', unit: 'mg/m3', level: '正常' },
PM25: { number: 4, name: 'PM2.5', unit: 'ug/m3', level: '优' },
TEMP: { number: 32.8, name: '温度', unit: '℃', level: '' },
HUM: { number: 73, name: '湿度', unit: '%', level: '' },
AQI: { number: 5, name: '空气质量指数', unit: '', level: '优' },
PM1: { number: 3, name: 'PM1', unit: 'ug/m3', level: '' },
PM10: { number: 6, name: 'PM10', unit: 'ug/m3', level: '' },
CO2: { number: 508, name: '二氧化碳', unit: 'ppm', level: '' }
}
源码如下
/**
* @description AI_ES6
* @author pidtfork
* @date 2019-7-10
* @param {String} port AI_ES6连接端口,默认BUS
* @param {Number} time 自动查询时间,默认5S
*/
function AI_ES6(port, time) {
this.port = port || "BUS";
this.intervalTime = time || 5;
this.id = 1;
this.idStr = ITOA(this.id);
this.dataInfo = {};
this.setID = function (id) {
this.id = id;
this.idStr = ITOA(this.id);
this.send("\x01\x25" + this.idStr + "\x55\xAA");
}
this.send = function (text) {
sendCodeString(this.port, text);
}
this.arrEvent = [];
this.on = function (callback) {
if (typeof callback == "function") {
this.arrEvent.push(callback);
}
}
this.getLevel = function (obj, value) {
for (var key in obj) {
if (value <= obj) {
return key;
}
}
return "ERROR";
}
this.STOI = function (str) {
str = "" + str;
var addNumber = 0;
var count = 0;
for (var i = str.length - 1; i >= 0; i--) {
addNumber += str.charCodeAt(i) * Math.pow(2, count * 8);
count++;
}
return addNumber;
}
this.receiveData = function (data) {
if (data.indexOf(this.idStr + "\x03\x12") != -1) {
var ambient = {
"HCHO": {
"number": 0,
"name": "甲醛",
"unit": "mg/m3",
"level": ""
},
"TVOC": {
"number": 0,
"name": "有机挥发气体",
"unit": "mg/m3",
"level": ""
},
"PM25": {
"number": 0,
"name": "PM2.5",
"unit": "ug/m3",
"level": ""
},
"TEMP": {
"number": 0,
"name": "温度",
"unit": "℃",
"level": ""
},
"HUM": {
"number": 0,
"name": "湿度",
"unit": "%",
"level": ""
},
"AQI": {
"number": 0,
"name": "空气质量指数",
"unit": "",
"level": ""
},
"PM1": {
"number": 0,
"name": "PM1",
"unit": "ug/m3",
"level": ""
},
"PM10": {
"number": 0,
"name": "PM10",
"unit": "ug/m3",
"level": ""
},
"CO2": {
"number": 0,
"name": "二氧化碳",
"unit": "ppm",
"level": ""
}
};
ambient.HCHO.number = this.STOI(data.substring(3, 5)) / 1000;
ambient.TVOC.number = this.STOI(data.substring(5, 7)) / 1000;
ambient.PM25.number = this.STOI(data.substring(7, 9));
ambient.TEMP.number = this.STOI(data.substring(9, 11)) / 10;
ambient.HUM.number = this.STOI(data.substring(11, 13));
ambient.AQI.number = this.STOI(data.substring(13, 15));
ambient.PM1.number = this.STOI(data.substring(15, 17));
ambient.PM10.number = this.STOI(data.substring(17, 19));
ambient.CO2.number = this.STOI(data.substring(19, 21));
//level 为国标
var HCHOLevel = {
"正常": 0.1,
"轻微": 2,
"严重": 5,
"危险": Number.MAX_VALUE
};
ambient.HCHO.level = this.getLevel(HCHOLevel, ambient.HCHO.number);
var TVOCLevel = {
"正常": 0.6,
"轻微": 3,
"严重": 25,
"危险": Number.MAX_VALUE
};
ambient.TVOC.level = this.getLevel(TVOCLevel, ambient.TVOC.number);
var PM25Level = {
"优": 35,
"良": 75,
"轻度污染": 115,
"中度污染": 150,
"重度污染": 250,
"严重污染": Number.MAX_VALUE
};
ambient.PM25.level = this.getLevel(PM25Level, ambient.PM25.number);
var AQILevel = {
"优": 50,
"良": 100,
"轻度污染": 150,
"中度污染": 200,
"重度污染": 300,
"严重污染": Number.MAX_VALUE
};
ambient.AQI.level = this.getLevel(AQILevel, ambient.AQI.number);
this.dataInfo = ambient;
for (var j = 0; j < this.arrEvent.length; j++) {
this.arrEvent(ambient);
}
}
}
setStringReceive(this.port, (function (self) {
return function (data) {
self.receiveData(data);
}
})(this));
this.init = function () {
setComBaud(this.port, 9600, "N", 8, 1);
var self = this;
delay(self.intervalTime, function () {
self.send(self.idStr + "\x03\x00\x00\x00\x09\x85\xCC");
delay(self.intervalTime, arguments.callee)
});
}
this.init();
}
var AIES6 = new AI_ES6();
// var AIES6 = new AI_ES6(COM1,10); //设备接COM1,每10S查询一次
AIES6.setID(2); //设备出厂默认ID是3,所以在接上设备必须调用此方法设置ID,否则不触发回调
AIES6.on(function (data) {
console.log(data);
// 返回数据格式为json参考下面json
// number 为当前环境值
// name 为当前检测对象的名称
// unit 为当前环境值的单位
// level 为当前环境值相较国标的等级
// level 取值在 HCHO 和 TVOC 中可能为 "正常、轻微、严重、危险"四种情况
// level 取值在 PM25 和 AQI 中可能为 "优、良、轻度污染、中度污染、重度污染、严重污染"五种情况
// 下面 json 中 unit 、 level 键值为""的,将永久为""
// {
// HCHO: { number: 0.028, name: '甲醛', unit: 'mg/m3', level: '正常' },
// TVOC: { number: 0.192, name: '有机挥发气体', unit: 'mg/m3', level: '正常' },
// PM25: { number: 4, name: 'PM2.5', unit: 'ug/m3', level: '优' },
// TEMP: { number: 32.8, name: '温度', unit: '℃', level: '' },
// HUM : { number: 73, name: '湿度', unit: '%', level: '' },
// AQI : { number: 5, name: '空气质量指数', unit: '', level: '优' },
// PM1 : { number: 3, name: 'PM1', unit: 'ug/m3', level: '' },
// PM10: { number: 6, name: 'PM10', unit: 'ug/m3', level: '' },
// CO2 : { number: 508, name: '二氧化碳', unit: 'ppm', level: '' }
// }
})
//其他方法用不上了
页:
[1]