本帖最后由 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[key]) {
- 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[j](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: '' }
- // }
- })
- //其他方法用不上了
复制代码
|