pidtfork 发表于 2020-10-28 18:11:20

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]
查看完整版本: AI_ES6环境检测器