通過yeelink平台監控樹莓派溫度,是很多派友入門第一課。作為一名剛入手樹莓派裸機不久的新手,在沒有其他硬件支持的情況,通過yeelink平台來監控樹莓派CPU溫度變化,也是我學習樹莓派、學習智能硬件的第一步。
實現思路
“通過yeelink平台監控樹莓派CPU溫度變化”的實現思路很簡單,編寫一段Python小程序(SNAPPY UBUNTU CORE系統中默認安裝了Python 2.7.9),獲取樹莓派的CPU溫度並將其上傳到yeelink平台上,然后在線監控樹莓派的溫度變化,如果溫度過高則發送郵件提醒。
實現步驟
第1步:編寫Python程序,每隔60秒獲取樹莓派CPU溫度
這段程序實現起來比較簡單,將以下代碼保存為01cpu_temp.py,通過python 01cpu_temp.py即可執行。
#coding=utf-8 import time #得到CPU溫度 def get_cpu_temp(): cpu_temp_file = open( "/sys/class/thermal/thermal_zone0/temp" ) cpu_temp = cpu_temp_file.read() cpu_temp_file.close() return float(cpu_temp)/1000 def main(): while True: strftime=time.strftime("%Y-%m-%dT%H:%M:%S") print "time:",strftime print "cpu_temp:",get_cpu_temp() #休眠60秒 time.sleep(60) if __name__ == '__main__': main()
第2步:成為yeelink平台開發者,並完成樹莓派設備及傳感器的配置
1)注冊用戶,獲得API KEY
yeelink是一個免費開放的物聯網雲平台,主要提供傳感器數據的接入,存儲和展現服務,為所有的開源軟硬件愛好者、制造型企業,提供一個物聯網項目的平台,使得硬件和制造業者能夠在不關心服務器實現細節和運維的情況下,擁有交付物聯網化的電子產品的能力。對於愛好者和開發者來說,Yeelink提供了一系列的工具包和開發包,使得小朋友都能夠使用Yeelink制作物聯網玩具,人人都可以成為夢想實現者,使用從Yeelink網站上下載的代碼,結合開源硬件或Yeelink專用硬件,幾乎無需任何編程,就能制作出相當復雜的iPhone遙控開關,遙控熱水器,或者是PM2.5檢測器之類的DIY作品。
yeelink平台地址是http://www.yeelink.net/,注冊很簡單,注冊之后,我們可以在“賬戶設置”中獲得專屬的API KEY。
API KEY非常重要,下一步修改python程序上傳數據到yeelink平台會用到。
2)新增設備
在“我的設備”中增加新的設備,我新增的自用設備名為“Raspberry Pi 2 Model B”。
3)新增傳感器
在“管理設備”頁面中,新增數值型傳感器,並命名為“CPU溫度傳感器”。
新增完傳感器之后,我們會在傳感器的右邊,數據曲線下方發現一條URL信息:
URL: http://api.yeelink.net/v1.0/device/19283/sensor/33814/datapoints
這是一條非常重要的信息,下一步修改python程序上傳數據到yeelink平台會用到。
http://api.yeelink.net/v1.0/:表示的是API版本為v1.0;
device/19283:表示我們剛才添加的設備編號是19283;
sensor/33814:表示我們剛才添加的傳感器編號是22814;
datapoints:表示數據點集合,一個datapoint是由key和value組成的鍵值對,數值型傳感器的key為timestamp, value為數值;
更詳細的我們可以查看yeelink平台的API文檔http://www.yeelink.net/develop/api。
4)新增傳感器觸發動作
新增傳感器觸發動作,實現CPU溫度預警:在數據大於48的時候,通過郵件通知我“樹莓派溫度超過了48攝氏度,需要降溫!!!!”。
第3步:修改python小程序,定時上傳數據到yeelink平台
相對於第1步的程序,主要增加yeelink api配置和upload_cpu_temp_to_yeelink()兩段代碼。
將此程序命名為02upload_cpu_temp_to_yeelink.py,然后通過python 02upload_cpu_temp_to_yeelink.py執行,即可每隔60秒向yeelink平台上傳CPU溫度數據。
#coding=utf-8 import time import json import requests #yeelink api配置 api_url='http://api.yeelink.net/v1.0' api_key='api_key' #請填入專屬的api key api_headers={'U-ApiKey':api_key,'content-type': 'application/json'} raspi_device_id=19283 cpu_sensor_id=33814 #得到CPU溫度 def get_cpu_temp(): cpu_temp_file = open( "/sys/class/thermal/thermal_zone0/temp" ) cpu_temp = cpu_temp_file.read() cpu_temp_file.close() return float(cpu_temp)/1000 #上傳CPU溫度到yeelink def upload_cpu_temp_to_yeelink(): url=r'%s/device/%s/sensor/%s/datapoints' % (api_url,raspi_device_id,cpu_sensor_id) strftime=time.strftime("%Y-%m-%dT%H:%M:%S") print "time:",strftime cpu_temp=get_cpu_temp() print "cpu_temp:",cpu_temp data={"timestamp":strftime , "value": cpu_temp} res=requests.post(url,headers=api_headers,data=json.dumps(data)) print "status_code:",res.status_code def main(): while True: upload_cpu_temp_to_yeelink() #休眠60秒 time.sleep(60) if __name__ == '__main__': main()
第4步:在線查看CPU溫度數據以及溫度預警
通過http://www.yeelink.net/devices/19283(可修改設備編號),即可在線查看樹莓派的溫度數據。
圖中的波峰超過了50度,是因為我使用了吹風機來臨時增加樹莓派的溫度,從而達到觸發溫度超過48度時候發送郵件預警的目的。
但是今天不知道yeelink服務器還是QQ郵箱出了什么原因,並沒有收到郵件預警,只好先粘貼出一張前幾天實現截圖來證明。
學習總結
該例子雖然簡單,但是整個過程以及yeelink平台架構值得我們深入研究與學習,未來一定的物聯網的時代、雲數據時代。
Python入門與進階學習:http://www.imooc.com/course/list?c=python
理解restful架構:http://kb.cnblogs.com/page/114905/