SSブログ

BH1750 Munin Plugin [Raspberry Pi]

BH1750を買ってみた。。。の続き…

Munin Plugin,ざっくりとGoogle検索してみたのですが,見つけられなかったので,簡単な物を作ってみました。


i2c_bh1750-day.png

なんとなくグラフを書いているので,良しとします(笑
数値が低いのは,センサーが日陰にあるため。
日向に設置すると数千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) 
共通テーマ:趣味・カルチャー

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。