auto update

dependabot/npm_and_yarn/ushio/www/session/lodash-4.17.15
iotcat 5 years ago
parent 74338fbb93
commit de66c8e79d
  1. 2
      yimian/iot/mqtt/smartfarm/autoStart.sh
  2. 4
      yimian/iot/mqtt/smartfarm/index.js
  3. 252
      yimian/iot/mqtt/smartfarm/mqtt-server.js

@ -1,2 +1,2 @@
#!/bin/bash #!/bin/bash
forever /home/yimian/iot/mqtt/smartfarm/mqtt-server.js forever /home/yimian/iot/mqtt/smartfarm/index.js

@ -0,0 +1,4 @@
const smartfarm = require('./mqtt-server');
var broker = smartfarm.broker();

@ -1,158 +1,212 @@
const mosca = require('mosca');
const mysql = require('mysql');
const fs = require('fs');
var g_MaxWaitTime = 10000
var settings = {
port: 30032
};
var server = new mosca.Server(settings);
var connection = mysql.createConnection({ var mqtt_server = function (o_params) {
var o = {
MaxWaitTime: 10000,
port: 30032,
sql: {
host: 'cn.db.yimian.xyz', host: 'cn.db.yimian.xyz',
user: 'smartfarm', user: 'smartfarm',
password : fs.readFileSync("smartfarm.db.key").toString().replace(/\s+/g,""), password: null,
port: '3306', port: '3306',
database: 'smartfarm' database: 'smartfarm'
}); },
debug: true,
};
/* merge paras */
Object.assign(o, o_params);
/* require packages */
const mosca = require('mosca');
const mysql = require('mysql');
const fs = require('fs');
const redis = require('redis');
/* tmp global var */
var cache = {
node0: {
status: null,
batteryLevel: null,
waterSwitch: null,
temperature: null,
humidity: null,
BeginTime: null,
EndTime: null
},
node1: {
status: null,
batteryLevel: null,
waterSwitch: null,
temperature: null,
humidity: null,
BeginTime: null,
EndTime: null
},
station: {
status: null,
batteryLevel: null,
waterSwitch: null,
temperature: null,
humidity: null,
BeginTime: null,
EndTime: null
},
waterSys: {
status: null,
batteryLevel: null,
waterSwitch: null,
temperature: null,
humidity: null,
BeginTime: null,
EndTime: null
}
}
connection.connect(); /* mqtt ini */
var mqtt_broker = new mosca.Server({port: o.port});
/* mysql ini */
var sqlCnt = mysql.createConnection({
host : o.sql.host,
user : o.sql.user,
password : o.sql.password || fs.readFileSync("smartfarm.db.key").toString().replace(/\s+/g,""),
port: o.sql.port,
database: o.sql.database
});
sqlCnt.connect();
/* redis ini */
var rc = redis.createClient();
rc.on("error", function (err) {
console.log("Redis Error " + err);
});
server.on('published', function (packet, client) { /* mqtt events */
mqtt_broker.on('published', function (packet, client) {
switch (packet.topic) { switch (packet.topic) {
/* node0 */
case 'res/node0/status': case 'res/node0/status':
//console.log(packet.payload.toString()); tools.cache.push('status', packet.payload.toString(), 'node0');
pushElement('status', packet.payload.toString(), node0Cache, storeNode0Data);
break; break;
case 'res/node0/batteryLevel': case 'res/node0/batteryLevel':
//console.log(packet.payload.toString()); tools.cache.push('batteryLevel', packet.payload.toString(), 'node0');
pushElement('batteryLevel', packet.payload.toString(), node0Cache, storeNode0Data);
break; break;
case 'res/node0/waterSwitch': case 'res/node0/waterSwitch':
//console.log(packet.payload.toString()); tools.cache.push('waterSwitch', packet.payload.toString(), 'node0');
pushElement('waterSwitch', packet.payload.toString(), node0Cache, storeNode0Data);
break; break;
case 'res/node0/temperature': case 'res/node0/temperature':
//console.log(packet.payload.toString()); tools.cache.push('temperature', packet.payload.toString(), 'node0');
pushElement('temperature', packet.payload.toString(), node0Cache, storeNode0Data);
break; break;
case 'res/node0/humidity': case 'res/node0/humidity':
//console.log(packet.payload.toString()); tools.cache.push('humidity', packet.payload.toString(), 'node0');
pushElement('humidity', packet.payload.toString(), node0Cache, storeNode0Data);
break; break;
/* node 1*/
case 'res/node1/status': case 'res/node1/status':
//console.log(packet.payload.toString()); tools.cache.push('status', packet.payload.toString(), 'node1');
pushElement('status', packet.payload.toString(), node1Cache, storeNode1Data);
break; break;
case 'res/node1/batteryLevel': case 'res/node1/batteryLevel':
//console.log(packet.payload.toString()); tools.cache.push('batteryLevel', packet.payload.toString(), 'node1');
pushElement('batteryLevel', packet.payload.toString(), node1Cache, storeNode1Data);
break; break;
case 'res/node1/waterSwitch': case 'res/node1/waterSwitch':
//console.log(packet.payload.toString()); tools.cache.push('waterSwitch', packet.payload.toString(), 'node1');
pushElement('waterSwitch', packet.payload.toString(), node1Cache, storeNode1Data);
break; break;
case 'res/node1/temperature': case 'res/node1/temperature':
//console.log(packet.payload.toString()); tools.cache.push('temperature', packet.payload.toString(), 'node1');
pushElement('temperature', packet.payload.toString(), node1Cache, storeNode1Data);
break; break;
case 'res/node1/humidity': case 'res/node1/humidity':
//console.log(packet.payload.toString()); tools.cache.push('humidity', packet.payload.toString(), 'node1');
pushElement('humidity', packet.payload.toString(), node1Cache, storeNode1Data);
break; break;
} }
}); });
var node0Cache = {
status: null,
batteryLevel: null,
waterSwitch: null,
temperature: null,
humidity: null,
BeginTime: null,
EndTime: null,
}
var node1Cache = {
status: null,
batteryLevel: null,
waterSwitch: null,
temperature: null,
humidity: null,
BeginTime: null,
EndTime: null,
}
/* tools */
var tools = {
cache:{
push: function(t, s, name){
var obj = cache[name];
var f = tools.sql[name].push;
rc.hset('sf/'+name, t, s);
if(obj.BeginTime && (new Date()).valueOf() - obj.BeginTime > o.MaxWaitTime) tools.obj.reset(o);
if(tools.obj.getNum(obj, null) == Object.keys(obj).length){
var pushElement = function(t, s, o, f){ obj.BeginTime = (new Date()).valueOf();
if(o.BeginTime && Date.parse(new Date()) - o.BeginTime > g_MaxWaitTime) objReset(o); rc.hset('sf/'+name, 'BeginTime', obj.BeginTime);
if(getNumInObj(o, null) == Object.keys(o).length){
o.BeginTime = Date.parse(new Date());
} }
if(o.hasOwnProperty(t)) o[t] = s; if(obj.hasOwnProperty(t)) obj[t] = s;
if(getNumInObj(o, null) == 1){ if(tools.obj.getNum(obj, null) == 1){
o.EndTime = Date.parse(new Date()); obj.EndTime = (new Date()).valueOf();
console.log(o); rc.hset('sf/'+name, 'EndTime', obj.EndTime);
f(o); rc.publish('sf/chnnel/'+name, 'ok');
console.log(obj);
if(o.debug){
rc.hkeys("sf/"+name, function (err, replies) {
console.log(replies.length + " replies:");
replies.forEach(function (reply, i) {
rc.hget("sf/"+name, reply, function(err, res){
console.log(reply+': '+res);
});
});
});
} }
f(obj);
};
var objReset = function(o){
for(i in o){
o[i] = null;
} }
},
},
obj: {
reset: function(obj){
for(i in obj){
obj[i] = null;
} }
},
getNum: function(obj, t){
var getNumInObj = function(o, t){
var c = 0; var c = 0;
for(i in o){ for(i in obj){
if(obj[i] == t) c ++;
if(o[i] == t) c ++;
} }
return c; return c;
} },
},
var sql = 'SELECT * FROM api'; sql: {
node0:{
connection.query(sql,function (err, result) { push: (obj)=>{tools.sql.node.push(0, obj)},
},
node1:{
push: (obj)=>{tools.sql.node.push(1, obj)},
},
node:{
push: function(id, obj){
var addSql = 'INSERT INTO node(timestamp,id,status,qos,batterylevel,waterswitch,temperature,humidity) VALUES(?,?,?,?,?,?,?,?)';
var addSqlParams = [new Date(obj.BeginTime).toISOString().slice(0, 19).replace('T', ' '), id, obj.status, 1, obj.batteryLevel, obj.waterSwitch, obj.temperature, obj.humidity];
sqlCnt.query(addSql,addSqlParams,function (err, result) {
tools.obj.reset(obj);
if(err){ if(err){
console.log('[SELECT ERROR] - ',err.message); console.log('[INSERT ERROR] - ',err.message);
return; return;
} }
console.log(result);
}); });
},
},
},
}
return o;
};
var storeNode0Data = (o)=>{storeNodeData(0, o)};
var storeNode1Data = (o)=>{storeNodeData(1, o)};
var storeNodeData = function(id, o){
var addSql = 'INSERT INTO node(timestamp,id,status,qos,batterylevel,waterswitch,temperature,humidity) VALUES(?,?,?,?,?,?,?,?)';
var addSqlParams = [new Date(o.BeginTime).toISOString().slice(0, 19).replace('T', ' '), id, o.status, 1, o.batteryLevel, o.waterSwitch, o.temperature, o.humidity];
connection.query(addSql,addSqlParams,function (err, result) { /* exports */
objReset(o); exports.broker = mqtt_server;
if(err){
console.log('[INSERT ERROR] - ',err.message);
return;
}
});
}

Loading…
Cancel
Save