method.js
@@ -131,6 +131,10 @@
    mac = mac.toLowerCase();
    this.updateDeviceLastUpdated(db, mac, function(data) {});
    //通过版本号来判断传感器数据的协议格式
    //var ver = this.toDec(fields[18]) * 256 + this.toDec(fields[19]); //版本号
    var x1  = this.toDec(fields[20]) * 256 + this.toDec(fields[21]); //PM2.5数据
    var x2  = this.toDec(fields[22]) * 256 + this.toDec(fields[23]); //PM10
    var x3  = this.toDec(fields[24]) * 256 + this.toDec(fields[25]); //0.1升0.3um量
@@ -160,7 +164,10 @@
    var p3 = this.toDec(fields[47]);
    var p4 = this.toDec(fields[48]);
    var fei = this.toDec(fields[58]);
    var ferval = this.toDec(fields[59]);
    //var ferval = this.toDec(fields[59]);
    var feival = this.toDec(fields[71]) == 0 ? (this.toDec(fields[72]) * 256 + this.toDec(fields[73])) : -1 * (this.toDec(fields[72]) * 256 + this.toDec(fields[73]));
    var t = this.toDec(fields[56]);
    var aqi = this.toDec(fields[60]) * 256 + this.toDec(fields[61]); //AQI
@@ -169,68 +176,35 @@
    var _config = global.configs[mac];
    if(_config == null) {
        _config = {
            mac: mac,
            address: "江苏省昆山市摩瑞尔电器",
            location: {

                lat:31.430616,
                lng:120.988327

            },
            notice: {
                tel: "15950198162",

                email: "it01@moral.org.cn",

                open_id: "o-RTuwvMHWotyirPHLmdSB_dKoQU"
            }
        }
        configs[mac] = _config;
        _config = config.ALARM_DEFAULTS;
        _config.mac = mac;
        global.configs[mac] = _config;
    }
    var current = moment();
    queue.pushToMQ('ex_data_screen', {
    var sensor_data = {
        mac: mac,
        location: _config.location,
        data: {
            x0: ferval,
            x0: feival,
            x1: x1,  //PM2.5 - (单位:ppm)
            x2: x3,  //PM2.5 - 0.1升0.3um量
            x3: x9,  //甲醛
            x4: x11, //温度
            x5: x10, //湿度
            x6: x14  //光线强度
        },
        time: current.valueOf()
    });
            x6: x14,  //光线强度
    if(x1 > 250) {
        var level = 1;
        if(x1 > 750) {
            level = 3;
        } else if(x1 > 500) {
            level = 2;
        }
        queue.pushToMQ('ex_data_alarm', {
            mac: mac,
            address: _config.address,
            location: _config.location,
            data:{
                x0: ferval,
                x1: x1,  //PM2.5
                x2: x3,  //PM2.5
                x3: x9,  //甲醛
                x4: x11, //温度
                x5: x10, //湿度
                x6: x14  //光照强度
            },
            level: level,
            notice: _config.notice,
            time: moment.valueOf()
        });
    }
            mcu: mcu
        },
        options: _config.options,
        time: current.valueOf()
    };
    queue.pushToMQ('ex_data_screen', sensor_data);
    var rank = 0;
    if(s > 0) {
        rank = this.random(1000, 99999);//this.random(1000, 99999999);
        rank = this.random(100200, 102000);//this.random(1000, 99999999);
        db.collection("device_ranks").insertOne({
            mac: mac,
            rank: rank,
@@ -246,6 +220,7 @@
        }, function(err, result) { });
    }
    var _this = this;
    db.collection("data").insertOne({
        mac: mac,
        x1: x1,
@@ -275,10 +250,40 @@
        mcu: mcu,
        day: current.format('YYYYMMDD'),
        created: current.valueOf()
    }, function(err, result) {
    }, function(err, doc) {
        if (err) return;
        callback(result, rank);
        var level1 = _this.getLevel(x1,  _config['options'][1]);
        var level2 = _this.getLevel(x9,  _config['options'][2]);
        var level3 = _this.getLevel(x11, _config['options'][3]);
        var level4 = _this.getLevel(x10, _config['options'][4]);
        var level5 = _this.getLevel(x14, _config['options'][5]);
        var level = Math.max(level1, level2, level3, level4, level5);
        if(level > 0) {
            sensor_data._id = doc.insertedId;
            sensor_data.level = level;
            sensor_data.notice = _config.notice;
            sensor_data.address = _config.address;
            sensor_data.data.levels = [level1, level2, level3, level4, level5];
            queue.pushToMQ('ex_data_alarm', sensor_data);
        }
        callback(doc, rank);
    });
};
module.exports.getLevel = function(val, option) {
    var level = 0;
    if(option == null || option.length < 3) return level;
    if(val > option[0]) {
        var level = 1;
        if(val > option[2]) {
            level = 3;
        } else if(val > option[1]) {
            level = 2;
        }
    }
    return level;
};
module.exports.updateDeviceSleep = function(db, data, callback) {
@@ -352,73 +357,38 @@
};
module.exports.initConfigs = function(db) {
    var _address = config.ALARM_DEFAULTS.address;
    var _location = config.ALARM_DEFAULTS.location;
    var _options = config.ALARM_DEFAULTS.options;
    db.collection("devices").find().toArray(function(err, docs) {
        docs.forEach(function(doc) {
            var mac = doc.mac;
            if(mac != null) {
                var address = doc.address || "";
                var location = doc.location || {};
                var notice = doc.notice;
                if(notice == null || notice == {}) {
                    var userID = doc.userID;
                    db.collection("users").find({"_id": userID}).limit(1).next(function(err, user){
                        if(user) {
                            global.configs[mac] = {
                                mac: mac,
                                address: address,
                                location: location,
                                notice: {
                                    tel: user.username,
                                    email: user.email,
                                    open_id: user.open_id
                                }
                            }
                        }
                    });
                } else {
                    global.configs[mac] = {
                        mac: mac,
                        address: address,
                        location: location,
                        notice: notice
            var address = doc.address || _address;
            var location = doc.location || _location;
            var options = doc.options || _options;
            var notice = doc.notice;
            var config = {
                mac: mac,
                address: address,
                location: location,
                notice: notice,
                options: options
            };
            if(notice == null || notice == {}) {
                var userID = doc.userID;
                db.collection("users").find({"_id": userID}).limit(1).next(function(err, user){
                    if(user) {
                        config["notice"] = {
                            tel: user.username,
                            email: user.email,
                            open_id: user.open_id
                        };
                        global.configs[mac] = config;
                    }
                }
                });
            } else {
                global.configs[mac] = config;
            }
        });
    });
};
/////////////////////////////////////////////////
module.exports.insertDocument2 = function(db, data, rank, callback) {
    var fields = data.match(/.{2}/g);
    var mac = fields[6] + fields[7] + fields[8] + fields[9] + fields[10] + fields[11]; //Mac
    var x01 = this.toDec(fields[20]) * 256 + this.toDec(fields[21]); //PM2.5数据
    var x02 = this.toDec(fields[24]) * 256 + this.toDec(fields[25]); //PM2.5数据
    var x09 = this.toDec(fields[32]) * 256 + this.toDec(fields[33]); //甲醛
    var x10 = this.toDec(fields[34]) * 256 + this.toDec(fields[35]); //湿度
    var x11 = this.toDec(fields[36]) * 256 + this.toDec(fields[37]); //温度
    var x14 = this.toDec(fields[42]) * 256 + this.toDec(fields[43]); //光线强度
    var fei = this.toDec(fields[58]);
    var ferval = this.toDec(fields[59]);
    var aqi = this.toDec(fields[60]) * 256 + this.toDec(fields[61]);
    var ddv = this.toDec(fields[62]) * 256 + this.toDec(fields[63]);
    var mcu = this.toDec(fields[64]) + this.toDec(fields[65]) / 100;
    db.collection("devices").find({ mac: mac }).limit(1).next(function(err, doc){
        if (err) return;
        var app = 0;
        var app_status = doc.app_status;
        var app_last_updated = doc.app_last_updated;
        if(app_status == 1 && app_last_updated != null && Date.now() - app_last_updated <= 30000) {
            app = 1;
        }
        db.collection(config.COLLECTION).insertOne({ mac: mac.toLowerCase(), data: data + ' - PM2.5:' + x01 + ', 甲醛:' + x09 + ', 湿度:' + x10 + ', 温度:' + x11 + ', 个数:' + x02 + ', FEI:' +  ferval + ', 评级:' + fei + ', 光照:' + x14 + ', AQI:' + aqi + ', 电池电压:' + ddv + ', MCU温度:' + mcu + ', APP:' + app, date: Date.now() }, function(err, doc) {
            if (err) return;
            callback(doc);
        });
    });
};
};