使用Raspberry Pi 紀錄壓力、高度變化
上一篇文章完成以Raspberry Pi使用BMP180取得大氣壓力及溫度,接者就是要做長期觀測天氣數據。作法,如同DHT22/AM2302溫濕度感測器一樣,搭配網管軟體-Cacti達到。
依舊先說明我的環境,我只有一片Raspberry Pi,所以Cacti和DHT22都是在同一片Raspberry Pi上。
先說明要完成使用Cacti搭配BMP180紀錄大氣壓力、溫度、高度的步驟(作法上和紀錄DHT22的相同)
KEY1:VAL1 KEY2:VAL2
程式中我做了些調整,這是因為和天氣觀測的知識有關,說明如下~
原本以為讀取BMP180的氣壓、溫度、高度速度很快,應該不需採用上述方式。沒想到,有時仍會有問題,因此最後還是採用上述模式…
因為Cacti是每五分鐘來抓資料,因此我的排程就故意往前一分鐘,設定為每小時的4分、9分取氣壓、溫度、高度.....
註:我是使用Raspbian Stretch Lite,Cacti被安裝於/usr/share/cacti/
shell script內容如下…
風和日麗時氣壓變化不大。如果採用Cacti預設的參數,產生圖氣壓根本看不出變化。因此在cacti_graph_template_bmp085-pressure.xml中,我刻意將Lower Limit (--lower-limit)設定成980。如此才能讓圖表有明顯變化。
註:配套措施,也調整 Unit Grid Value (--unit/--y-grid) ,設定為 "10:2"
這作法,其實有個缺點…就是當颱風來襲時,氣壓會劇烈變化、大幅下降(越強的颱風氣壓越低),當低於980 hPa時Cacti就不會畫於圖表之上。另外,如果您是住在山上或稍有高度之處,因為高度越高氣壓越低,也許,980對您來說可能也是太高,需要調低~這點,請使用我所做template的人要注意一下~
依舊先說明我的環境,我只有一片Raspberry Pi,所以Cacti和DHT22都是在同一片Raspberry Pi上。
先說明要完成使用Cacti搭配BMP180紀錄大氣壓力、溫度、高度的步驟(作法上和紀錄DHT22的相同)
- 安裝cacti
- 撰寫產生氣壓、溫度、高度資料的python程式
- 設定排程定期取得氣壓、溫度、高度
- 讓cacti取得上述資料的shell script
- 設定cacti以下template
- Data Input Methods
- Data Templates
- Graph Templates
步驟一:安裝cacti
安裝過程中,會詢問用於cacti登入的密碼#安裝cacti
sudo apt-get update
sudo apt-get install cacti
不過,這樣方式所安裝的Cacti版本非常舊。我的是 0.8.8h+ds1-10,但當時Cacti官網上卻已經出到 1.1.38 。步驟二:撰寫產生氣壓、溫度、高度資料的python程式
假設程式放於 /pi/BMP085.py,以下為程式內容。#!/usr/bin/python
import Adafruit_BMP.BMP085 as BMP085
sensor = BMP085.BMP085(busnum=1)
#sensor.read_sealevel_pressure()/100 是為了轉換成百帕(hPa)
print('temp:{0:0.1f} pressure:{1:0.1f} altitude:{2:0.1f}'.format(sensor.read_temperature(), sensor.read_sealevel_pressure()/100, sensor.read_altitude()))
這裡產生的資料,後續是藉由Cacti Data Input Methods方式取得。因此輸出格式,必須符合Cacti Data Input Methods的規範。格式如下…KEY1:VAL1 KEY2:VAL2
程式中我做了些調整,這是因為和天氣觀測的知識有關,說明如下~
- 一般紀錄氣象的氣壓都是採用百帕(hPa)作為單位,因此上面的程式我刻意除100以轉換成百帕(hPa)。可參考氣壓- 維基百科
- 官方範例提供read_pressure()、及read_sealevel_pressure()兩種氣壓數據。我採用後者,原因可參考氣壓的基本知識(二)
步驟三:設定排程定期取得氣壓、溫度、高度
在Raspberry Pi 搭配Cacti監控溫濕度文章中曾提及,因為讀取DHT22數據要2秒,因此我採取先以排程事先產生數據到一個temp檔案,之後再將該temp內的數據給予Cacti。原本以為讀取BMP180的氣壓、溫度、高度速度很快,應該不需採用上述方式。沒想到,有時仍會有問題,因此最後還是採用上述模式…
因為Cacti是每五分鐘來抓資料,因此我的排程就故意往前一分鐘,設定為每小時的4分、9分取氣壓、溫度、高度.....
#設定排程
sudo crontab -e
#增加以下設定
4,9,14,19,24,29,34,39,44,49,54,59 * * * * /pi/BMP085.sh
shell script(/pi/BMP085.sh)的內容如下…#將氣壓、溫度、高度數據寫入temp檔案
/pi/BMP085.py > /tmp/BMP085.dat
步驟四:讓cacti取得上述資料的shell script
在上一步驟已經可以產生數據寫入temp檔案,在這步驟就是將temp檔案的內容丟給Cacti。因此,我做了一個shell script,檔案放在 /usr/share/cacti/site/scripts/BMP085.sh註:我是使用Raspbian Stretch Lite,Cacti被安裝於/usr/share/cacti/
shell script內容如下…
#讀取temp檔案內容
cat /tmp/BMP085.dat
步驟五:設定Cacti,讓Cacti看懂資料格式
我採用shell script方式讓Cacti讀取資料,因此要設定Data Input Methods。為了簡化設定,以下提供Data Templates、Graph Templates。將Templates匯入Cacti後即可設定、使用~- cacti_data_template_bmp085.xml
- cacti_graph_template_bmp085-pressure.xml,繪製大氣壓力圖檔之用
- cacti_graph_template_bmp085-altitude.xml,繪製高度圖檔之用
風和日麗時氣壓變化不大。如果採用Cacti預設的參數,產生圖氣壓根本看不出變化。因此在cacti_graph_template_bmp085-pressure.xml中,我刻意將Lower Limit (--lower-limit)設定成980。如此才能讓圖表有明顯變化。
註:配套措施,也調整 Unit Grid Value (--unit/--y-grid) ,設定為 "10:2"
這作法,其實有個缺點…就是當颱風來襲時,氣壓會劇烈變化、大幅下降(越強的颱風氣壓越低),當低於980 hPa時Cacti就不會畫於圖表之上。另外,如果您是住在山上或稍有高度之處,因為高度越高氣壓越低,也許,980對您來說可能也是太高,需要調低~這點,請使用我所做template的人要注意一下~
留言