BH1750 Munin Plugin [Raspberry Pi]
BH1750を買ってみた。。。の続き…
Munin Plugin,ざっくりとGoogle検索してみたのですが,見つけられなかったので,簡単な物を作ってみました。
なんとなくグラフを書いているので,良しとします(笑
数値が低いのは,センサーが日陰にあるため。
日向に設置すると数千lx位は出ます。
矩形型に立ち上がっているのは室内照明が点灯したため。
その後,1時間毎に自動で照明の光量を落とす様に制御しています。
スクリプトは,プラグインとセンサーから値を取得する物と2つ。
値取得スクリプトは,先日作成した動作確認サンプルを調整。 設置場所は,どこでもOK(と思う)。 ただし,プラグインで値取得スクリプトを叩いているので,その辺は要調整。
値取得スクリプト ”/home/pi/Scripts/bh1750.py”
#!/usr/bin/env python # for Munin Plugin import smbus import time # Set Your Value bus = smbus.SMBus(1) # Rev 2 Pi uses 1 DEVICE = 0x23 # Default device I2C address MEAS_MODE = 0x20 # 1lx resolution. Time typically 120ms MTREG = 69 # sensor sensitivity (31 to 254, Default 69) POWER_DOWN = 0x00 # No active state POWER_ON = 0x01 # Power on RESET = 0x07 # Reset data register value def convertToNumber(data, mode, mt): result = (data[1] + (256 * data[0])) / 1.2 * (69.0 / mt) if mode == 0x11 or mode == 0x21: result = result / 2 return (result) def readLight(addr, mode, mt): # Read data from I2C interface if (mode & 0x20): bus.write_byte(addr, POWER_ON) time.sleep(0.1) # Set sensor sensitivity if mt != 69: h = mt >> 5 | 0x40 l = mt & 0x1f | 0x60 bus.write_byte(addr, h) bus.write_byte(addr, l) data = bus.read_i2c_block_data(addr, mode) if data[0]==0 and data[1]==0: time.sleep(1) data = bus.read_i2c_block_data(addr, mode) return convertToNumber(data, mode, mt) def main(): addr = DEVICE mode = MEAS_MODE mt = MTREG bus.write_byte(addr, POWER_ON) bus.write_byte(addr, RESET) time.sleep(0.1) lightLevel = readLight(addr, mode, mt) #print("Light Level : " + format(lightLevel,'.2f') + " lx") print(format(lightLevel,'.2f')) if __name__=="__main__": main()
Munin Plugin "/usr/share/munin/plugins/i2c_bh1750"
#!/bin/bash #%# family=auto #%# capabilities=autoconf # sensor read script sensor_in=$(sudo python /home/pi/Scripts/bh1750.py) if [ "$1" = "autoconf" ]; then if [ -n "${sensor_in}" ]; then echo yes exit 0 else echo no exit 0 fi fi if [ "$1" = "config" ]; then echo "graph_title BH1750 Illuminance" echo "graph_vlabel lx" echo "graph_args -l 0" echo "graph_category sensors" echo "illuminance.label Illuminance [lx]" echo "illuminance.info Illuminance." echo "illuminance.draw LINE2" exit 0 fi echo "illuminance.value ${sensor_in}"
Muninプラグインのお作法に法って,プラグインに実行権限追加と所定の場所へリンクを張る。
pi@raspberrypi:~ $ sudo chmod +x /usr/share/munin/plugins/i2c_bh1750 pi@raspberrypi:~ $ sudo ln -s /usr/share/munin/plugins/i2c_bh1750 /etc/munin/plugins/i2c_bh1750
プラグインの実行権限指定を追加します。
i2c_*
はプラグインのファイル名です。
当方は,BH1750の他,BME280も繋いでいるので,ワイルドカードで指定しています。
pi@raspberrypi:~ $ sudo nano /etc/munin/plugin-conf.d/munin-node : 末尾に以下2行追加 [i2c_*] user root
これで,Muninを再起動すれば,グラフを作ってくれると思います。
今時,クラウド使うのが流行りと言うか,当たり前の様ですが,当方,出来れば宅内でクローズしたい派です(笑
タグ:ラズパイ
コメント 0