使用Raspberry Pi 紀錄壓力、高度變化

cacti-bmp180-raspberry-pi-pressure
BMP180搭配Raspberry Pi 所記錄的氣壓
最近天氣不錯,氣壓穩定、變化不大
上一篇文章完成以Raspberry Pi使用BMP180取得大氣壓力及溫度,接者就是要做長期觀測天氣數據。作法,如同DHT22/AM2302溫濕度感測器一樣,搭配網管軟體-Cacti達到。

依舊先說明我的環境,我只有一片Raspberry Pi,所以Cacti和DHT22都是在同一片Raspberry Pi上。

先說明要完成使用Cacti搭配BMP180紀錄大氣壓力、溫度、高度的步驟(作法上和紀錄DHT22的相同)
  1. 安裝cacti
  2. 撰寫產生氣壓、溫度、高度資料的python程式
  3. 設定排程定期取得氣壓、溫度、高度
  4. 讓cacti取得上述資料的shell script
  5. 設定cacti以下template
    1. Data Input Methods
    2. Data Templates
    3. Graph Templates
註:如果使用我的template,就只需要處理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

程式中我做了些調整,這是因為和天氣觀測的知識有關,說明如下~
  1. 一般紀錄氣象的氣壓都是採用百帕(hPa)作為單位,因此上面的程式我刻意除100以轉換成百帕(hPa)。可參考氣壓- 維基百科
  2. 官方範例提供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後即可設定、使用~
  1. cacti_data_template_bmp085.xml
  2. cacti_graph_template_bmp085-pressure.xml,繪製大氣壓力圖檔之用
  3. cacti_graph_template_bmp085-altitude.xml,繪製高度圖檔之用
註:溫度已經藉由DHT22取得,因此這裡就不使用BMP180繪製溫度的圖表

風和日麗時氣壓變化不大。如果採用Cacti預設的參數,產生圖氣壓根本看不出變化。因此在cacti_graph_template_bmp085-pressure.xml中,我刻意將Lower Limit (--lower-limit)設定成980。如此才能讓圖表有明顯變化。
註:配套措施,也調整 Unit Grid Value (--unit/--y-grid) ,設定為 "10:2"
cacti-bmp180-raspberry-pi-pressure
BMP180搭配Raspberry Pi 所記錄的氣壓
因為氣壓數據變化不大,只好設定圖表Lower Limit為980
讓圖表的趨勢比較明顯

這作法,其實有個缺點…就是當颱風來襲時,氣壓會劇烈變化、大幅下降(越強的颱風氣壓越低),當低於980 hPa時Cacti就不會畫於圖表之上。另外,如果您是住在山上或稍有高度之處,因為高度越高氣壓越低,也許,980對您來說可能也是太高,需要調低~這點,請使用我所做template的人要注意一下~
cacti-bmp180-raspberry-pi-altitude
BMP180的高度依據氣壓所計算,因此隨者氣壓上升,高度就下降…
對我來說,參考價值偏低…


留言