muninプロトコルとプラグイン作成 – 組み込みLinuxとArduinoと・・・

 先日の記事でBeagleBone Black(BBB)を自宅の制御サーバにする件、徐々に環境移行をしていて、今回はそれ関係でmuninのプラグインを開発してみた。
 従来は制御ボードのAPIを叩くCで組んだWindowsプログラムだったのだけど、サーバを組み込みLinux(Ubuntu on BBB)に移した関係で諸々の書き換え・作り替えを実施している。
 特に大きいのがセンサーを長々と配線して直接繋ぐ形から、センサーの側にマイコンを置いてデータ化して中央のBBBに集約する形にしている。

 昨今は、ワンチップマイコン(それも8ビット機)を割と簡単にネットワーク接続することが出来る(ネットワークコントローラにTCP/IPまで組み込まれている)ので、大きめのUSBメモリ位のサイズのユニットが普通にイーサネットに繋がって、HTTP等でデータ交換出来てしまうのだ。

 今回は試作として、Arduino大気圧センサーモジュールイーサネットシールドを組み合わせた簡易HTTPサーバとそのmuninプラグインを制作した(温度センサーだけでかまわなかったのだが、単機能センサーよりもBMP085気圧センサーの方が安かった・・・)
 HTTPについては、このブログを見ている人なら基本部分はおわかりかと思う。
GET /sensor.dat HTTP/1.1 とか送って、200 OKとか返すわけだけど、muninは結構利用していてもプロトコル自体はあまり知らないと思う。
私も知らなかったので、軽く調査してみたところ、簡単な仕組みだったのでプラグインを作ってみた。

muninプラグインを作る場合のポイント
・muninプラグインはmuninサーバ側(munin-cron)は基本的に何も作る必要なく、munin-node側さえ書けば動く
・muninプラグインはどんな言語でも作ることが出来る(特別なライブラリを必要としない)
・munin-nodeはポート4949で普通に平文テキスト形式で通信するので、munin-nodeプログラムを使わず直接ノードを構築することも簡単(Arduino上にも簡単に実装出来る)

 munin-nodeを叩くとある程度対話的に操作可能なインタフェイスがある。
ローカルホストのデフォルト設定のmunin-nodeに接続するなら、

でOK。

繋ぐと・・・

とか、帰ってくる。

とりあえず、Enterキーとか押してみると・・・

とか、普通にコマンドリストが帰ってきた。

それぞれ実行してみた。

capはmunin-nodeの機能の話?
versionとquitはそのまんまだね。
listは動作しているプラグインのリスト表示。
nodesは取得出来るノード名のリスト表示。
configはプラグインの設定を得られる(config プラグイン名)
fetchはプラグインの値を得られる(fetch プラグイン名)

 最低限の動作は、listにプラグイン名が出て、configでプラグインの情報を得て、fetchでプラグインの値を取得する。
1,プラグイン名は、/etc/munin/plugins/以下のファイル名で自明。
 今回試作するプラグインは、気圧センサーの値を取得するので
/etc/munin/plugins/env.barometic
と言うプラグインファイルを作成した。 このファイルは、実行可能である必要がある(chmod +x env.barometic)
 munin的にはperlが基本だろうけど、今回は簡単にshellで作成、と言うことで

で書き始め。

でPHPプログラムでもOKだね。

2,config情報はプラグインの第1引数にconfigと与えた場合の戻り値そのまま
なので、第1引数をifして、先のconfigの戻り値みたいなテキストを戻す。

 これで、実行権限を付けてmunin-nodeを再起動すれば、次回のmunin-cronが回ってきたときにはグラフ一覧ページに追加される。
 データ系列を追加するなら、

みたいに、.前の名前を変えて列挙していく。

3,fetchの戻り値は引数無しで実行した場合の戻り値
なので、引数チェックが引っかからなかった場合に

 今回はネットワーク上の192.168.0.123にArduinoで作ったセンサーユニットがあって、/getPをHTTPで取得するとパスカル単位の気圧がただ出力されるようにしてあるので、それをhPaに変換(100で割るだけ)して出力している。

 センサーユニットが192.168.0.124, 192.168.0.125にもある場合、

これで、123~125の3個のセンサーを読んできて1枚のグラフにまとめてプロットするプラグインが完成。

BBBのADCを利用する場合・・・

 これで、BBBのADCの0~7の生電圧を記録してグラフ化出来る。
 組み込みマイコンで1からグラフ描画とかを作るのは非常に面倒だが、Linuxの利点である既存のOSS(今回はmunin)利用によって、簡単にグラフ化してWebインタフェイスで見られる訳だ。
 ADCにLM35温度センサーをぶら下げているならば、LM35の特性は10mV/degCなので、そのままでも気温の10倍の値が表示されるし、value=expr $value / 10を挟めばぴったりセ氏温度になる。
 AC712電流センサーをつければ、殆どプログラムらしいプログラムを書くこと無くWebインタフェイスでグラフ表示可能な電力計ができあがってしまう。

↓PC置き場に設置したArduinoセンサーノードをBBB上のmuninで監視してみる。
温度

気圧計

 ネットワーク接続センサー・ロガー等の設計・試作、量産対応可能です(デバイスからインターネット連動システムまで全般対応可能)
 お問い合わせください。 > inquiry at studioes.net

(268)


カテゴリー: LAMP[Linux, Apache, MySQL, PHP]   パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です