搭建简易的物联网服务端和客户端-移动家庭能力平台【2】(二十四)

36 阅读2分钟

**这平台报废了?反正没看到他审核过了。有需求去云片网吧,后面有时间我写个云片网的接入 **---2017/10/27

上一篇,对于试验项目对接移动家庭能力平台进行了介绍。这次我们来连接数据库,进行定时请求接口的操作。 代码地址:github.com/ZZES-ZVD/No… 2017.8.6

搭建简易的物联网服务端和客户端目录

移动家庭能力平台【2】

1.引入相关的nodejs模块

crypto是nodejs内置的,另外两个需要install npm install --save request npm install --save mysql

引入

var crypto = require('crypto')//加密模块
var request = require('request')//http请求模块
var mysql = require('mysql')//mysql模块

2.配置数据库

// 数据库配置
var conn = mysql.createConnection({
	host:'填入ip',
	user:'root',
	password:'root',
	database:'nodemysql',
	port:3306
});
//连接数据库
conn.connect();

3.生成Authorization

此函数用于生成请求所需要的Autoorization字符串

function getAuth(){
	var md5 = crypto.createHash('md5');//引入md5加密
	var apikey = "你的apikey";
	var secretKey = "你的secretKey ";
	var time = new Date().getTime();//获取时间戳
	var addStr = apikey + secretKey + time;//拼接字符串
	var md5Str = md5.update(addStr).digest('hex')//md5加密
	var jsonStr = '{"apiKey": "'+apikey+'","time": "'+time+'","sign":"'+md5Str+'"}'//拼接json
	var finalStr = new Buffer(jsonStr).toString('base64')//base64编码
	return finalStr;	
}

4.请求api接口

通过request模块请求api接口(以模板短信api为例) 函数接受三个参数,即为请求body里templateParameter所需要的三个参数 具体请求参数,可以查看open.home.komect.com/dev/develop…

1.配置请求参数

function sendMsg(p2,p3,p4){
	//短信模板请求参数设置
	var options = {
		url:"http://open.home.komect.com/api/v1/sms/send",
		method: 'POST',
		headers:{
			"content-type":"application/json",
			"Authorization": getAuth()
		},
		body:{
		    messageSign: '治电科技',
		    mobile: '手机号',
		    needReceipt: 0,
		    receiptNotificationURL: '',
		    templateId: 1344,
		    templateParameter: { param1: 'klren', param2: p2, param3: p3, param4: p4   }
		},
		json: true 
	}

2.发送请求

	request(options, function(error, response,body){
		if (error) throw new Error(error);
		if(body.resultCode === 200){
			console.log("send success")
		}else {
			console.log("send fail")
		}
		console.log(body);
	})
}

5.获取数据库中数据

获取数据库中温湿度和位置状态,并调用上面的sendMsg()函数进行请求发送

function getData(){
	conn.query('SELECT * FROM pet', function(err,rows,fields){
		console.log(rows[rows.length-1]);
		tem = rows[rows.length-1].tem;
		hum = rows[rows.length-1].hum;
		let indoorStatus = rows[rows.length-1].indoor;
		if (indoorStatus == 1) {
			indoor = "在"
		}else{
			indoor = "不在"
		}
		sendMsg(tem,hum,indoor)
	})
}

6.定时发送请求

之前文章介绍过这个模块。我们定时到下午15点

function scheduleRecurrenceRule(){
	var rule = new schedule.RecurrenceRule();
	rule.hour = 15;
	schedule.scheduleJob(rule, function(){
		console.log('scheduleRecurrenceRule:'+new Date());
		getData();
	})
}

7.测试结果展示

1.命令行打印

命令行打印.png

2.接受到短信

接受到短信.png

@治电小白菜20170806