實現家庭室內溫度遠程監控只是「智能家居」的初步,目的是下班前若是發現家裏溫度太高,可提早用手機發送指令提早5-10分鐘打開空調降溫。python
一、樹莓派(Raspberry Pi)一個git
二、DS18B20溫度傳感器一個(淘寶大概5元左右)web
三、4.7k電阻一個 或 DS18B20模塊一個(筆者用,淘寶1.5元一個,其實就是店家幫忙把電阻焊好了,接線稍好看些)。api
四、杜邦線三根(雙頭母)數組
一、首先升級內核(可忽略,但若是版本較老,可能影響設備讀取)服務器
apt-get updateapt-get upgrade
二、確認設備是否生效curl
sudo modprobe w1-gpio sudo modprobe w1-therm cd /sys/bus/w1/devices/ ls
顯示結果:ide
pi@raspberrypi:~$ cd /sys/bus/w1/devices/ pi@raspberrypi:/sys/bus/w1/devices$ ls28-00000494cb79 w1_bus_master1
28-00000494cb79
就是筆者外接的溫度傳感器設備,但並非每一個客戶端都顯示同樣的,這個是傳感器的序列號。post
三、查看當前溫度學習
cd 28-00000494cb79cat w1_slave
顯示結果:
70 01 4b 46 7f ff 10 10 e1 : crc=e1 YES70 01 4b 46 7f ff 10 10 e1 t=23000
第二行的t=23000
就是當前的溫度值,要換算成攝氏度,除以1000,即當前溫度爲23000/1000=23攝氏度。
文件存放:/home/pi/temperature.py
內容以下:
#/home/pi/temperature.py#打開溫度傳感器文件t file = open("/sys/bus/w1/devices/28-00000494cb79/w1_slave")#讀取文件全部內容text = tfile.read()#關閉文件tfile.close()#用換行符分割字符串成數組,並取第二行secondline = text.split("\n")[1]#用空格分割字符串成數組,並取最後一個,即t=23000temperaturedata = secondline.split(" ")[9]#取t=後面的數值,並轉換爲浮點型temperature = float(temperaturedata[2:])#轉換單位爲攝氏度temperature = temperature / 1000#打印值print temperature 在命令行運行,便可得出結果數值: python /home/pi/temperature.py
yeelink是國內比較知名的免費物聯網數據平臺,國外有COSM(https://cosm.com)。
申請yeelink帳號及添加設備和傳感器,以及API的學習,本文跳過,請你們自行去學習一下。
根據yeelink API的規則,咱們須要提供一個文本文件,內容爲一段JSON,以下:
{ 「timestamp」:」2012-03-15T16:13:14″, 「value」:294.34}
若未指定timestamp, 服務器會自動加上當前時間,因此本文的操做不添加該字段
一、修改python,將溫度值用JSON格式保存到一個文本文件,所有以下:
#/home/pi/temperature.pytfile = open("/sys/bus/w1/devices/28-00000494cb79/w1_slave")text = tfile.read() tfile.close() secondline = text.split("\n")[1] temperaturedata = secondline.split(" ")[9] temperature = float(temperaturedata[2:]) temperature = temperature / 1000res = '{"value":%f}' %temperature output = open('/home/pi/datafile.txt', 'w') output.write(res) output.close
python將溫度值寫入:/home/pi/datafile.txt
二、新增yeelink.sh腳本
文件位置:/home/pi/yeelink.sh
內容以下:
sudo python /home/pi/temperature.py curl --request POST --data-binary @"/home/pi/datafile.txt" --header "U-ApiKey:XXXXXXXXXXXXXXXX" http://api.yeelink.net/v1.0/device/1969/sensor/2533/datapoints
將U-ApiKey:XXXXXXXXXXXXXXXX替換爲自已帳戶的API Key。
後面的URL也須要替換爲本身申請的傳感器URL。
三、添加到計劃任務
#爲腳本增長可執行權限sudo chmod +x yeelink.sh#將腳本加入cronjob(計劃任務)sudo crontab -e#在cornjob文件中添加下面一行,並保存(表示10分鐘執行一下腳本,時間可自行修改)*/10 * * * * /home/pi/yeelink.sh
完了!
個人溫度傳感器數據展現頁面:http://www.yeelink.net/devices/1969
補充
執行以下操做,把傳感器加入到開機啓動裏面,這樣每次開機就可使用傳感器了:
把命令sudo modprobe w1-gpio sudo modprobe w1-therm 加到/etc/rc.local文件中exit以前;
參考文檔:
http://www.cl.cam.ac.uk/freshers/raspberrypi/tutorials/temperature/
http://blog.turningdigital.com/2012/09/raspberry-pi-ds18b20-temperature-sensor-rrdtool/