0 前言
本文通過python文件IO操作獲得樹莓派CPU溫度信息,通過python request庫週期性向yeelink平臺上傳溫度,修改rc.local腳本使得該python腳本在開機時便在後臺運行,向平臺每5分鐘上報一次溫度信息。
網上查閱了很多關於linux開機啓動的博文,嘗試了幾遍居然發現方法都無法實現開機啓動效果。我想可能是操作系統或開發環境的微小差異產生的,如果發現博文中的內容存在問題,請及時留言,我查證之後定當修改。
【相關博文】
1 修改python腳本
修改【樹莓派學習筆記——獲取樹莓派CPU溫度】一文中的python腳本,由單次運行變爲間隔運行,間隔時間爲5分鐘。由於該腳本將在後臺運行,所以每次上傳CPU溫度參數之後,把溫度參數寫到同目錄中的txt文件中,驗證該腳本是否在成功運行,上傳的參數是否正常等(yeelink平臺沒有列表功能,所有歷史數據查看比較麻煩)
【python腳本】
-
-
-
import requests
-
import json
-
import time
-
-
def main():
-
fileRecord = open("result.txt", "w")
-
fileRecord.write("connect to yeelink\n");
-
fileRecord.close()
-
while True:
-
-
file = open("/sys/class/thermal/thermal_zone0/temp")
-
-
temp = float(file.read()) / 1000
-
-
file.close()
-
-
-
apiurl = 'http://api.yeelink.net/v1.1/device/1949/sensor/2510/datapoints'
-
-
apiheaders = {'U-ApiKey': 'ffa3826972d6cc7ba5b17e104ec59fa3', 'content-type': 'application/json'}
-
-
payload = {'value': temp}
-
-
r = requests.post(apiurl, headers=apiheaders, data=json.dumps(payload))
-
-
-
fileRecord = open("result.txt", "a")
-
strTime = time.strftime('%Y-%m-%d:%H-%M-%S',time.localtime(time.time()))
-
fileRecord.writelines(strTime + "\n")
-
strTemp = "temp : %.1f" %temp + "\n"
-
fileRecord.writelines(strTemp)
-
fileRecord.writelines(str(r.status_code) + "\n")
-
fileRecord.close()
-
-
time.sleep(5*60)
-
-
if __name__ == '__main__':
-
main()
-
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內容如下:
-
#!/bin/sh -e
-
#
-
# rc.local
-
#
-
# This script is executed at the end of each multiuser runlevel.
-
# Make sure that the script will "exit 0" on success or any other
-
# value on error.
-
#
-
# In order to enable or disable this script just change the execution
-
# bits.
-
#
-
# By default this script does nothing.
-
-
# Print the IP address
-
_IP=$(hostname -I) || true
-
if [ "$_IP" ]; then
-
printf "My IP address is %s\n" "$_IP"
-
fi
-
-
# 向yeelink上傳樹莓派CPU溫度
-
/home/pi/python-works/yeelink-temp/auto-start.sh start
-
-
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×cale=3600
返回的數據爲兩個數組,一個代表數據點,一個爲UNIX時間戳。從API和返回數據的格式上看並沒有追求RESTFul結構,不知道是不是開發人員換了,所以風格變化了。
【參考資料】
【3】http://blog.csdn.net/xukai871105/article/details/38349519 --CSDN博客