定時向yeelink上傳樹莓派CPU溫度

0 前言
   本文通過python文件IO操作獲得樹莓派CPU溫度信息,通過python request庫週期性向yeelink平臺上傳溫度,修改rc.local腳本使得該python腳本在開機時便在後臺運行,向平臺每5分鐘上報一次溫度信息。
    網上查閱了很多關於linux開機啓動的博文,嘗試了幾遍居然發現方法都無法實現開機啓動效果。我想可能是操作系統或開發環境的微小差異產生的,如果發現博文中的內容存在問題,請及時留言,我查證之後定當修改。

    【相關博文】
    【樹莓派學習筆記——索引博文】——更多博文請關注。

1 修改python腳本
    修改【樹莓派學習筆記——獲取樹莓派CPU溫度】一文中的python腳本,由單次運行變爲間隔運行,間隔時間爲5分鐘。由於該腳本將在後臺運行,所以每次上傳CPU溫度參數之後,把溫度參數寫到同目錄中的txt文件中,驗證該腳本是否在成功運行,上傳的參數是否正常等(yeelink平臺沒有列表功能,所有歷史數據查看比較麻煩)
    【python腳本】
[python] view plaincopy
  1. #!/usr/bin/env python  
  2. # -*- coding: utf-8 -*-  
  3. import requests  
  4. import json  
  5. import time  
  6.   
  7. def main():  
  8.     fileRecord = open("result.txt""w")  
  9.     fileRecord.write("connect to yeelink\n");  
  10.     fileRecord.close()  
  11.     while True:  
  12.         # 打開文件  
  13.         file = open("/sys/class/thermal/thermal_zone0/temp")  
  14.         # 讀取結果,並轉換爲浮點數  
  15.         temp = float(file.read()) / 1000  
  16.         # 關閉文件  
  17.         file.close()  
  18.   
  19.         # 設備URI  
  20.         apiurl = 'http://api.yeelink.net/v1.1/device/1949/sensor/2510/datapoints'  
  21.         # 用戶密碼, 指定上傳編碼爲JSON格式  
  22.         apiheaders = {'U-ApiKey''ffa3826972d6cc7ba5b17e104ec59fa3''content-type''application/json'}  
  23.         # 字典類型數據,在post過程中被json.dumps轉換爲JSON格式字符串 {"value": 48.123}  
  24.         payload = {'value': temp}  
  25.         #發送請求  
  26.         r = requests.post(apiurl, headers=apiheaders, data=json.dumps(payload))  
  27.   
  28.         # 向控制檯打印結果  
  29.         fileRecord = open("result.txt""a")  
  30.         strTime = time.strftime('%Y-%m-%d:%H-%M-%S',time.localtime(time.time()))  
  31.         fileRecord.writelines(strTime + "\n")  
  32.         strTemp = "temp : %.1f" %temp + "\n"  
  33.         fileRecord.writelines(strTemp)  
  34.         fileRecord.writelines(str(r.status_code) + "\n")  
  35.         fileRecord.close()  
  36.           
  37.         time.sleep(5*60)  
  38.   
  39. if __name__ == '__main__':  
  40.     main()  
  41.       


2 開機啓動——增加腳本
    【auto-start.sh】
    #!/bin/bash 
    cd /home/pi/python-works/yeelink-temp 
    python yeelink-temp.py &     
    【提醒】
    【1】&表示腳本後臺運行
    【2】sudo chmod a+x auto-start.sh
    
3 開機啓動——修改/etc/rc.local
    在exit 0之前增加一行,內容爲/home/pi/path/to/auto-start.sh start,請修改爲auto-start.sh所在目錄。修改之後的rc.local內容如下:
[plain] view plaincopy
  1. #!/bin/sh -e  
  2. #  
  3. # rc.local  
  4. #  
  5. # This script is executed at the end of each multiuser runlevel.  
  6. # Make sure that the script will "exit 0" on success or any other  
  7. # value on error.  
  8. #  
  9. # In order to enable or disable this script just change the execution  
  10. # bits.  
  11. #  
  12. # By default this script does nothing.  
  13.   
  14. # Print the IP address  
  15. _IP=$(hostname -I) || true  
  16. if [ "$_IP" ]; then  
  17.   printf "My IP address is %s\n" "$_IP"  
  18. fi  
  19.   
  20. # 向yeelink上傳樹莓派CPU溫度  
  21. /home/pi/python-works/yeelink-temp/auto-start.sh start  
  22.   
  23. exit 0  
    【必要的驗證】
    可通過ps指令查看該腳本是否在後臺運行,保證萬無一失。
    ps aux | grep yeelink-temp.py

圖1 ps aux執行返回結果
    請注意返回結果中還包括grep過濾指令,yeelink-temp.py的PID爲2836。

    【可能的後悔】
    如果發現調試存在問題可通過kill指令終止進程,此時yeelink-temp.py的進程PID爲2836
    kill -s 9 2836

4 運行結果
    【平臺查看】

圖2 平臺查看
    【本地查看】
    本地記錄被保存到result.txt文件中。在15分鐘的時間內關閉了空調,室內溫度快速升高,而樹莓派的CPU溫度由42.2上升到47.1度。

圖3 本地查看

5 總結和參考資料
    【1】修改rc.local可使linux在開機之後自動執行用戶程序。
    【2】當關閉房間空調之後,樹莓派CPU溫度從42.2度上升至47.1度,符合實際預期,說明實驗成功了。
    【3】再做一個保存溫度到數據庫的例子,再做一個RESTFul API讀取溫度歷史數據的例子。
    【吐槽】
    yeelink平臺對於歷史數據的處理存在一些問題的。我本以爲可以通過API把傳感器的歷史數據獲得,並可設定查詢時間,閱讀了yeelink平臺的文檔我居然發現並沒有此功能。在yeelink的用戶中心中,我打開的網頁調試工具,發現網頁調用的API爲sensor-data?sensor_id=2510&timescale=3600
    返回的數據爲兩個數組,一個代表數據點,一個爲UNIX時間戳。從API和返回數據的格式上看並沒有追求RESTFul結構,不知道是不是開發人員換了,所以風格變化了。
    【參考資料】
【3】http://blog.csdn.net/xukai871105/article/details/38349519 --CSDN博客
發佈了13 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章