创客神器NanoPi
直播中

letsgo

9年用户 64经验值
擅长:控制/MCU
私信 关注
[经验]

【NanoPi NEO Plus2开发板试用体验】+10.cpu温度实时监测(2)

本帖最后由 letsgo 于 2017-10-14 14:25 编辑

大家好,前面那篇帖子讲了如何利用curl命令将cpu内部温度实时上传,并进行一个实时监测。那么本篇帖子将讲解如何用python语言编程上传数据到yeelink平台,并且对python编程也有一个简单的认识。本篇帖子主要有两个部分:
一、利用python编程实现一个简单的数据上传;
二、在一的基础上实现开机自启动并且将数据写入一个文件里面。

一、利用python编程实现一个简单的数据上传
   前面已经分析了yeelink平台的数据格式,下面直接上代码。
   
  1.     # -*- coding: utf-8 -*-   
  2.     import requests   
  3.     import json   
  4.     # 打开文件   
  5.     file = open("/sys/class/thermal/thermal_zone0/temp")   
  6.     # 读取结果,并转换为浮点数   
  7.     temp = float(file.read()) / 1000   
  8.     # 关闭文件   
  9.     file.close()   
  10.     # 向控制台打印结果   
  11.     print "temp : %.1f" %temp   
  12.       
  13.     # 设备URI   
  14.     apiurl = 'http://api.yeelink.net/v1.1/device(装置)/1949/sensor(传感器)/2510/datapoints'   
  15.     # 用户密码, 指定上传编码为JSON格式   
  16.     apiheaders = {'U-ApiKey': 'ffa3826972d6cc7ba5b17e104ec5xxxx', 'content-type': 'application/json'}   
  17.     # 字典类型数据,在post过程中被json.dumps转换为JSON格式字符串 {"value": 25.1}   
  18.     payload = {'value': temp}   
  19.     #发送请求   
  20.     r = requests.post(apiurl, headers=apiheaders, data=json.dumps(payload))
  21.       
  22.     # 打印返回码  
  23.     print "response status: %d" %r.status_code  
   见下图:

    1.png
   这里做一个简单的分析:
   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上传一次数据
    代码如下:
   

  1. # -*- coding: utf-8 -*-
  2. import requests //
  3. import json
  4. import time

  5. data= open("test.txt", "w")
  6. data.write("connect to yeelinkn");
  7. data.close()
  8. while True:
  9. data.write("connect to yeelinkn");
  10. data.close()
  11. while True://缩进要求一致
  12.      file = open("/sys/class/thermal/thermal_zone0/temp")//打开获取温度文件
  13.      temp = float(file.read()) / 1000                                      //得到的数值再除以1000就是温度值了
  14.      file.close()
  15.      print "temp : %.1f" %temp
  16.      apiurl = 'http://api.yeelink.net/v1.1/device/360915/sensor/411974/datapoints'
  17.      apiheaders = {'U-ApiKey': '45714a7db325e8081b912cb245d99d2f', 'content-type':  'application/json'}
  18.      payload = {"value": temp}
  19.      r = requests.post(apiurl, headers=apiheaders, data=json.dumps(payload))

  20.      data= open("test.txt", "a")
  21.      strTime = time.strftime('%Y-%m-%d:%H-%M-%S',time.localtime(time.time()))//格式化当前时间
  22.      data.writelines(strTime + "n")
  23.      strTemp = "temp : %.1f" %temp + "n"             //字符串格式
  24.      data.writelines(strTemp)
  25.      data.writelines(str(r.status_code) + "n")          //r.status_code:状态响应码,为200说明响应成功
  26.      data.close()
  27.      time.sleep(1*60)                                              //1s在test.txt里面更新一次数据

   然后输入命令:
              python ./test.py
      2.png
     由于我的是一秒向我的test.txt(同一级目录新建的)发送cpu内部温度。      
     然后再cat test.txt,查看里面的内容,见下图:

      3.png
      
    代码分析:
      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文件内容里面写上:     
  1. #!/bin/bash
  2.   cd /root/cpu  //所在路径
  3.   python yeelink_cpu.py &
      注:
      (1)、&表示脚本后台运行      
      (2)、sudo chmod a+x start.sh

    2、修改etc/rc.local文件:
         vim /etc/rc.local   
         然后在exit 0  前面写上这么一句话:

          4.png
    3、查看该脚本是否在后台运行:
         ps aux | grep yeelink_temp.py
          6.png
         红箭头所示即为进程号。(返回结果中还包括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语言用大括号表示对齐或者是否写完,而是采用缩进格式一体化,如果两条相同语句缩进大小不同就会报错。同时在这篇帖子也介绍了如何开机自启动,再也不需要手动打开,这样会方便很多。这篇帖子就介绍到这里,谢谢大家!

更多回帖

发帖
×
20
完善资料,
赚取积分