UBAINS

 找回密码
 立即注册
搜索
热搜: UBAINS
查看: 1944|回复: 0

[学习笔记] AI_ES6环境检测器

[复制链接]

10

主题

11

帖子

447

积分

版主

Rank: 7Rank: 7Rank: 7

积分
447
QQ
发表于 2020-10-28 18:11:20 | 显示全部楼层 |阅读模式
本帖最后由 pidtfork 于 2020-10-28 18:16 编辑

AI_ES6环境检测器

封装了一个方法用来获取AI_ES6的环境检测数据

1.实例化AI_ES6,参数1是接口连接中控的端口,参数2是定时查询环境数据的时间间隔
2. 设置设备ID,必须调用此方法设置设备ID,接收到数据将对比设置的ID,相同才处理。
3.  注册回调监听,定时触发回调,传入当前环境信息

  1. var AIES6 = new AI_ES6(COM1,10); //设备接COM1,每10S查询一次
  2. AIES6.setID(2); //设备出厂默认ID是3,所以在接上设备必须调用此方法设置ID,否则不触发回调

  3. AIES6.on(function(data) {
  4.     console.log(data);
  5. }

复制代码

回调出入的对象格式如下
number为当前环境值
name 为当前检测对象的名称
unit 为当前环境值的单位
level 为当前环境值相较国标的等级
level 取值在 HCHO 和 TVOC 中可能为 "正常、轻微、严重、危险"四种情况
level 取值在 PM25 和 AQI 中可能为 "优、良、轻度污染、中度污染、重度污染、严重污染"五种情况
下面 json 中 unit 、 level 键值为""的,将永久为""
  1. {
  2.   HCHO: { number: 0.028, name: '甲醛', unit: 'mg/m3', level: '正常' },
  3.   TVOC: { number: 0.192, name: '有机挥发气体', unit: 'mg/m3', level: '正常' },
  4.   PM25: { number: 4, name: 'PM2.5', unit: 'ug/m3', level: '优' },
  5.   TEMP: { number: 32.8, name: '温度', unit: '℃', level: '' },
  6.   HUM: { number: 73, name: '湿度', unit: '%', level: '' },
  7.   AQI: { number: 5, name: '空气质量指数', unit: '', level: '优' },
  8.   PM1: { number: 3, name: 'PM1', unit: 'ug/m3', level: '' },
  9.   PM10: { number: 6, name: 'PM10', unit: 'ug/m3', level: '' },
  10.   CO2: { number: 508, name: '二氧化碳', unit: 'ppm', level: '' }
  11. }
复制代码


源码如下


  1. /**
  2. * @description AI_ES6
  3. * @author pidtfork
  4. * @date 2019-7-10
  5. * @param {String} port AI_ES6连接端口,默认BUS
  6. * @param {Number} time 自动查询时间,默认5S
  7. */
  8. function AI_ES6(port, time) {
  9.     this.port = port || "BUS";
  10.     this.intervalTime = time || 5;
  11.     this.id = 1;
  12.     this.idStr = ITOA(this.id);
  13.     this.dataInfo = {};
  14.     this.setID = function (id) {
  15.         this.id = id;
  16.         this.idStr = ITOA(this.id);
  17.         this.send("\x01\x25" + this.idStr + "\x55\xAA");
  18.     }
  19.     this.send = function (text) {
  20.         sendCodeString(this.port, text);
  21.     }
  22.     this.arrEvent = [];
  23.     this.on = function (callback) {
  24.         if (typeof callback == "function") {
  25.             this.arrEvent.push(callback);
  26.         }
  27.     }
  28.     this.getLevel = function (obj, value) {
  29.         for (var key in obj) {
  30.             if (value <= obj[key]) {
  31.                 return key;
  32.             }
  33.         }
  34.         return "ERROR";
  35.     }
  36.     this.STOI = function (str) {
  37.         str = "" + str;
  38.         var addNumber = 0;
  39.         var count = 0;
  40.         for (var i = str.length - 1; i >= 0; i--) {
  41.             addNumber += str.charCodeAt(i) * Math.pow(2, count * 8);
  42.             count++;
  43.         }
  44.         return addNumber;
  45.     }
  46.     this.receiveData = function (data) {
  47.         if (data.indexOf(this.idStr + "\x03\x12") != -1) {
  48.             var ambient = {
  49.                 "HCHO": {
  50.                     "number": 0,
  51.                     "name": "甲醛",
  52.                     "unit": "mg/m3",
  53.                     "level": ""
  54.                 },
  55.                 "TVOC": {
  56.                     "number": 0,
  57.                     "name": "有机挥发气体",
  58.                     "unit": "mg/m3",
  59.                     "level": ""
  60.                 },
  61.                 "PM25": {
  62.                     "number": 0,
  63.                     "name": "PM2.5",
  64.                     "unit": "ug/m3",
  65.                     "level": ""
  66.                 },
  67.                 "TEMP": {
  68.                     "number": 0,
  69.                     "name": "温度",
  70.                     "unit": "℃",
  71.                     "level": ""
  72.                 },
  73.                 "HUM": {
  74.                     "number": 0,
  75.                     "name": "湿度",
  76.                     "unit": "%",
  77.                     "level": ""
  78.                 },
  79.                 "AQI": {
  80.                     "number": 0,
  81.                     "name": "空气质量指数",
  82.                     "unit": "",
  83.                     "level": ""
  84.                 },
  85.                 "PM1": {
  86.                     "number": 0,
  87.                     "name": "PM1",
  88.                     "unit": "ug/m3",
  89.                     "level": ""
  90.                 },
  91.                 "PM10": {
  92.                     "number": 0,
  93.                     "name": "PM10",
  94.                     "unit": "ug/m3",
  95.                     "level": ""
  96.                 },
  97.                 "CO2": {
  98.                     "number": 0,
  99.                     "name": "二氧化碳",
  100.                     "unit": "ppm",
  101.                     "level": ""
  102.                 }
  103.             };
  104.             ambient.HCHO.number = this.STOI(data.substring(3, 5)) / 1000;
  105.             ambient.TVOC.number = this.STOI(data.substring(5, 7)) / 1000;
  106.             ambient.PM25.number = this.STOI(data.substring(7, 9));
  107.             ambient.TEMP.number = this.STOI(data.substring(9, 11)) / 10;
  108.             ambient.HUM.number = this.STOI(data.substring(11, 13));
  109.             ambient.AQI.number = this.STOI(data.substring(13, 15));
  110.             ambient.PM1.number = this.STOI(data.substring(15, 17));
  111.             ambient.PM10.number = this.STOI(data.substring(17, 19));
  112.             ambient.CO2.number = this.STOI(data.substring(19, 21));
  113.             //level 为国标
  114.             var HCHOLevel = {
  115.                 "正常": 0.1,
  116.                 "轻微": 2,
  117.                 "严重": 5,
  118.                 "危险": Number.MAX_VALUE
  119.             };
  120.             ambient.HCHO.level = this.getLevel(HCHOLevel, ambient.HCHO.number);
  121.             var TVOCLevel = {
  122.                 "正常": 0.6,
  123.                 "轻微": 3,
  124.                 "严重": 25,
  125.                 "危险": Number.MAX_VALUE
  126.             };
  127.             ambient.TVOC.level = this.getLevel(TVOCLevel, ambient.TVOC.number);
  128.             var PM25Level = {
  129.                 "优": 35,
  130.                 "良": 75,
  131.                 "轻度污染": 115,
  132.                 "中度污染": 150,
  133.                 "重度污染": 250,
  134.                 "严重污染": Number.MAX_VALUE
  135.             };
  136.             ambient.PM25.level = this.getLevel(PM25Level, ambient.PM25.number);
  137.             var AQILevel = {
  138.                 "优": 50,
  139.                 "良": 100,
  140.                 "轻度污染": 150,
  141.                 "中度污染": 200,
  142.                 "重度污染": 300,
  143.                 "严重污染": Number.MAX_VALUE
  144.             };
  145.             ambient.AQI.level = this.getLevel(AQILevel, ambient.AQI.number);
  146.             this.dataInfo = ambient;
  147.             for (var j = 0; j < this.arrEvent.length; j++) {
  148.                 this.arrEvent[j](ambient);
  149.             }
  150.         }
  151.     }
  152.     setStringReceive(this.port, (function (self) {
  153.         return function (data) {
  154.             self.receiveData(data);
  155.         }
  156.     })(this));
  157.     this.init = function () {
  158.         setComBaud(this.port, 9600, "N", 8, 1);
  159.         var self = this;
  160.         delay(self.intervalTime, function () {
  161.             self.send(self.idStr + "\x03\x00\x00\x00\x09\x85\xCC");
  162.             delay(self.intervalTime, arguments.callee)
  163.         });
  164.     }
  165.     this.init();
  166. }

  167. var AIES6 = new AI_ES6();
  168. // var AIES6 = new AI_ES6(COM1,10); //设备接COM1,每10S查询一次

  169. AIES6.setID(2); //设备出厂默认ID是3,所以在接上设备必须调用此方法设置ID,否则不触发回调


  170. AIES6.on(function (data) {
  171.     console.log(data);
  172.     // 返回数据格式为json参考下面json
  173.     // number 为当前环境值
  174.     // name 为当前检测对象的名称
  175.     // unit 为当前环境值的单位
  176.     // level 为当前环境值相较国标的等级
  177.     // level 取值在 HCHO 和 TVOC 中可能为 "正常、轻微、严重、危险"四种情况
  178.     // level 取值在 PM25 和 AQI 中可能为 "优、良、轻度污染、中度污染、重度污染、严重污染"五种情况
  179.     // 下面 json 中 unit 、 level 键值为""的,将永久为""

  180.     // {
  181.     //     HCHO: { number: 0.028, name: '甲醛', unit: 'mg/m3', level: '正常' },
  182.     //     TVOC: { number: 0.192, name: '有机挥发气体', unit: 'mg/m3', level: '正常' },
  183.     //     PM25: { number: 4, name: 'PM2.5', unit: 'ug/m3', level: '优' },
  184.     //     TEMP: { number: 32.8, name: '温度', unit: '℃', level: '' },
  185.     //     HUM : { number: 73, name: '湿度', unit: '%', level: '' },
  186.     //     AQI : { number: 5, name: '空气质量指数', unit: '', level: '优' },
  187.     //     PM1 : { number: 3, name: 'PM1', unit: 'ug/m3', level: '' },
  188.     //     PM10: { number: 6, name: 'PM10', unit: 'ug/m3', level: '' },
  189.     //     CO2 : { number: 508, name: '二氧化碳', unit: 'ppm', level: '' }
  190.     // }
  191. })

  192. //其他方法用不上了



复制代码


高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

Archiver|手机版|小黑屋|BBS.UBAINSYUN.COM

GMT+8, 2024-4-24 14:30 , Processed in 0.035299 second(s), 19 queries .

Powered by UBAINS! X3.4

© 2001-2017 UBAINS Inc.

快速回复 返回顶部 返回列表