本帖最后由 letsgo 于 2017-10-14 14:25 编辑
大家好,前面那篇帖子讲了如何利用curl命令将cpu内部温度实时上传,并进行一个实时监测。那么本篇帖子将讲解如何用python语言编程上传数据到yeelink平台,并且对python编程也有一个简单的认识。本篇帖子主要有两个部分:
一、利用python编程实现一个简单的数据上传;
二、在一的基础上实现开机自启动并且将数据写入一个文件里面。
一、利用python编程实现一个简单的数据上传
前面已经分析了yeelink平台的数据格式,下面直接上代码。
- # -*- coding: utf-8 -*-
- import requests
- import json
- # 打开文件
- file = open("/sys/class/thermal/thermal_zone0/temp")
- # 读取结果,并转换为浮点数
- temp = float(file.read()) / 1000
- # 关闭文件
- file.close()
- # 向控制台打印结果
- print "temp : %.1f" %temp
-
- # 设备URI
- apiurl = 'http://api.yeelink.net/v1.1/device(装置)/1949/sensor(传感器)/2510/datapoints'
- # 用户密码, 指定上传编码为JSON格式
- apiheaders = {'U-ApiKey': 'ffa3826972d6cc7ba5b17e104ec5xxxx', 'content-type': 'application/json'}
- # 字典类型数据,在post过程中被json.dumps转换为JSON格式字符串 {"value": 25.1}
- payload = {'value': temp}
- #发送请求
- r = requests.post(apiurl, headers=apiheaders, data=json.dumps(payload))
-
- # 打印返回码
- print "response status: %d" %r.status_code
见下图:
这里做一个简单的分析:
1、import requests:这个是python的一个HTTP客户端库,跟urllib,urllib2类似, 使用requests更为方便快捷。
2、import json:将数据转化为json格式所需要的库。
3、r = requests.post();这个函数就是发送POST请求,里面参数包括url,HTTP头部以及发送的数据(json格式)。
data=json.dumps(payload)):
发送请求时通过dumps方法进行转化,完成字典到JSON字符串的转换。
4、payload = {'value': temp} 负载数据写成python字典格式。
5、其中r.status_code :状态响应码,如果为200的话说明响应正常。
二、修改上面代码实现开机自启动并且1min上传一次数据
代码如下:
- # -*- coding: utf-8 -*-
- import requests //
- import json
- import time
- data= open("test.txt", "w")
- data.write("connect to yeelinkn");
- data.close()
- while True:
- data.write("connect to yeelinkn");
- data.close()
- while True://缩进要求一致
- file = open("/sys/class/thermal/thermal_zone0/temp")//打开获取温度文件
- temp = float(file.read()) / 1000 //得到的数值再除以1000就是温度值了
- file.close()
- print "temp : %.1f" %temp
- apiurl = 'http://api.yeelink.net/v1.1/device/360915/sensor/411974/datapoints'
- apiheaders = {'U-ApiKey': '45714a7db325e8081b912cb245d99d2f', 'content-type': 'application/json'}
- payload = {"value": temp}
- r = requests.post(apiurl, headers=apiheaders, data=json.dumps(payload))
- data= open("test.txt", "a")
- strTime = time.strftime('%Y-%m-%d:%H-%M-%S',time.localtime(time.time()))//格式化当前时间
- data.writelines(strTime + "n")
- strTemp = "temp : %.1f" %temp + "n" //字符串格式
- data.writelines(strTemp)
- data.writelines(str(r.status_code) + "n") //r.status_code:状态响应码,为200说明响应成功
- data.close()
- time.sleep(1*60) //1s在test.txt里面更新一次数据
然后输入命令:
python ./test.py
由于我的是一秒向我的test.txt(同一级目录新建的)发送cpu内部温度。
然后再cat test.txt,查看里面的内容,见下图:
代码分析:
1、strTime = time.strftime('%Y-%m-%d:%H-%M-%S',time.localtime(time.time())):格式化当前时间
2、str(r.status_code):将状态码转化为字符串
3、
writelines() 方法用于向文件中写入一序列的字符串,这一序列字符串可以是由迭代对象产生的,如一个字符串列表,换行需要制定换行符 n。
三、修改etc/rc.local实现开机自启动
1、首先新建一个start.sh文件内容里面写上:
- #!/bin/bash
- cd /root/cpu //所在路径
- python yeelink_cpu.py &
注:
(1)、&表示脚本后台运行
(2)、sudo chmod a+x start.sh
2、修改etc/rc.local文件:
vim /etc/rc.local
然后在exit 0 前面写上这么一句话:
3、查看该脚本是否在后台运行:
ps aux | grep yeelink_temp.py
红箭头所示即为进程号。(返回结果中还包括grep过滤指令,yeelink_temp.py的PID为955)
如果想杀掉进程的话,输入这个命令就行了:
kill -s 9 xxxx(xxxx为你的进程号)
关于ps aux | grep xxxx以及杀死进程的使用方法请参考这篇文章:
http://www.cnblogs.com/robertoji/p/5555449.html
四、参考资料
http://blog.csdn.net/xukai871105/article/details/38349209
http://www.cnblogs.com/tangdongchu/p/4229049.html
http://www.zhidaow.com/post/python-requests-install-and-brief-introduction
五、分析与总结
从上一篇帖子用curl的命令接入yeelink平台,到这篇帖子用python编程将数据上传到yeelink平台上。自己也熟悉了yeelink平台的基本协议,同时对python编程也有了初步的认识,对于python编程不像c语言用大括号表示对齐或者是否写完,而是采用缩进格式一体化,如果两条相同语句缩进大小不同就会报错。同时在这篇帖子也介绍了如何开机自启动,再也不需要手动打开,这样会方便很多。这篇帖子就介绍到这里,谢谢大家!