月別アーカイブ: 10月 2013

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

(796)


カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | コメントをどうぞ

BBBにWordPressを導入してみた – BeagleBone BlackでUbuntuServerテスト編

 昨日書いたとおり、自宅の制御系マスターとしてBeagleBone Blackを購入したわけだけど、どのくらいの能力があるのか試したくて1台のBBBにWordpressを導入してみた。

 環境セットアップの手順をメモっておく。
1,Ubuntu導入
 BBBのデフォルトOSはAngstromLinuxだけど、マイコン最適化で色々削られているし、ユーザ情報が少ないので、最近いじり始めたUbuntuを導入してみることに。
 組み込み系の物でOSを入れると言えば、ソースコードかき集めてきてビルドしてライターで焼いてとなるわけだけど、BBBについては、事前にパッケージングされたイメージが結構出回っていて、これをSDカードに書き込んでやるだけでいい。

 今回は、こちらから、Ubuntu12.04LTSのイメージを取得してきた。
 xz形式なので、いったんVPS上にダウンロードして展開して(新しい圧縮形式で、xzプログラムが必要なので。 apt-get install xz とか、 yum install xz とかする)、gz圧縮し直してPCにダウンロードした。

 展開したファイルは約2GBで、ディスクのローイメージ(パーティション情報なんかも含むイメージ)なので、Win32DiskImagerでmicroSDHCカードに書き込む。

2,Ubuntu起動
 BBBの基板上にあるmicroSDHCカードを挿入して電源を投入すると、BBBのローダーがmicroSDHCにブート処理を回して起動してくれる。

 EoUは動作しないので、HDMI(uHDMI)にディスプレイ、USBにキーボードを接続しておいた方が便利だが、とりあえずなら、DHCPサービスが動いているネットワークにLAN接続しておけばDHCPクライアントが動作してsshがデフォルトで使える。 Angstromほど起動は速くないから、コンソールを繋いでいない場合は2分くらい?待つ。

 起動が完了したら、sshで接続する。 ポートは通常の22で、ユーザとパスワードはubuntu/ubuntuがデフォルトである。 ubuntuユーザはsudo出来る。

3,普通にUbuntuとして使う
 まぁ、ここまで来れば、殆ど普通のUbuntuが入ったサーバと変わらない。 KDEとか設定すればHDMIでXも出来るけどもっさりだし、おとなしくルータの横に並べて設置(ルータのUSBポートから電源取れるし)して、リモート操作だ。

 まずは、パスワード設定
#passwd
 ネットワークのアドレスを固定する場合は
#vi /etc/network/interfaces
で設定を書く。
我が家ではDHCPサーバの方にこちらのMACアドレスを書いて固定払い出しにした(別のネットワークに繋ぐのにDHCPのが楽だから)

 SDカードの空き領域を何とかする(パーティションを切っているから、2GBより大きいSDカードに入れている場合、空き領域がもったいない) rootファイルシステムを拡張しちゃうのもありだけど、今回は、新しいパーティションを切って/varにポイントした。
#fdisk /dev/mmcblk0
#mkfs.ext3 /dev/mmcblk0p3
※通常の/dev/sdとかじゃなく、/dev/mmcblkになる。 ここにはmicroSDスロットとeMMCがぶら下がっていて、起動に使ったデバイスがmmcblk0で使わなかった方が1になる。 この状態でmmcblk1に下手に手を出すとROM焼きしないといけなくなる可能性もアルので注意。
今回はプライマリの3番パーティションにすべての残り領域を設定した。

#mv /var /var.tmp
#mkdir /var
#mount /dev/mmcblk0p3 /var
#mv /var.tmp/* /var/
#vi /etc/fstab
/dev/mmcblk0p3 /var auto defaults 0 1

 色々導入する。
 普通にaptでパッケージ管理出来るので、とりあえずリストを更新。
#apt-get update

aptで普通に入れたい物を入れていく。
今回入れた物
vim 定番エディタ
libtime-format-perl, make, gcc UnixBenchに必要
telnet, inetutils-tools, inetutils-traceroute, dnsutils, dstat, sysv-rc-conf 管理系のコマンド類
php5, php-apc, php5-mysql, mysql, nginx WordPressに必要(Apache2でも一応動くけどそれなりに重い。 lightを使うほどひどくも無いのでnginxを入れた)
postfix, munin 何となく入れてみた

 SDカードのフラッシュの耐久性でsqlとかおそらく即死するとは思うんだけど、更新とかtmp_to_diskを押さえれば大丈夫かな・・・ 本格的にやるなら、高耐久性のデバイスをUSBにぶら下げる(SLCのSSDとか)か、データファイルを一定期間ごとに移して、アドレスをずらしていくとかしないと厳しいとは思う。

 後は普通にWordpress導入手順
#mysql -p
で、wordpressユーザとDBを作成。

#cd /usr/share/nginx/www
#wget http://ja.wordpress.org/wordpress-3.6.1-ja.tar.gz
#tar xzf wordpress-3.6.1-ja.tar.gz

 nginxの設定は、/etc/nginx/sites-available/defaultsとかを修正。
 自動起動設定とかは、sysv-rc-configで設定。 今回は、mysql, nginx, postfix, munin-nodeを自動起動化。
 後は、普通にブラウザで繋いでセットアップ完了。
 iptablesのルールも無いから、ちゃんと使うなら入れた方が良いかもしれない? まぁ、うちはNetscreen管理のDMZ配置でポリシー管理されているから、こっちに入れる必要も無いだろうな。

 そんなわけで、こちらで公開してみます。
 案外、いけるでしょ?

(519)


カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | コメントをどうぞ

マイクロLinuxマシン BeagleBone Blackを買った

 ハイパフォーマンス・常時稼働を要求する処理は基本的にGMOクラウドVPS等のVPSで行っているわけだけど、どうしても家に装置が無いと困る事もある。
 テレビレコーダ等の専用ハードウェアが必要なもの、高速・大容量性が必要なファイルサーバ等が代表であるけど、我が家では制御系の物も必要である(環境モニタ、扉開閉確認、電源操作等)

 基本的に、末端の装置はAVRとかの8ビットマイコンで開発・構築して、親機はPCIバス接続のロジックインタフェイスカードを入れたマシンだったのだけど、インタフェイスカードが不調になってきた。
インタフェイスカード買い換えかなと思うものの、PCIのインタフェイスは将来性が微妙、ならば親機ごとPCIeかなとも思うのだけど、一式で50万くらいでちょっとためらい。
 よくよく考えると、必要な機能・性能を考えると、最近の組み込み用のハードならいける感じがする。

 パワフルなマイコンと言えばRaspberryPi(パワーレスなPCとも)が手元に何台か有るんだけど、入出力ポート数が足りない。
何か無いかなと検索してみると、最近はPi的なボードが色々あるらしい。
 その中で目を付けたのはBeagleBoard系のボードであるBeagleBone Black(BBB)

 入出力が大量に引き出されているから、ピンヘッダでPIOもI2CもSPIもいけるけど49ドルとお安い。

 BBBは、A8アーキテクチャの1GHzプロセッサを中心に、512MBの主記憶(DDR3L)と2GB不揮発(eMMC)がオンボード搭載、microSDスロット、USBのホスト・デバイス、FE、HDMI等揃っている。
 パッケージを開けると、ボードとUSBケーブルとCD-ROMだけの超シンプルさ。
 USBケーブルをPCに入れて電源投入すると複合デバイスが検出されて、ストレージデバイスの中にはドキュメント等が収まっている。 EoU(Ethernet over USB)のネットワークも出てきて、192.168.7.1がPCに割り振られて、192.168.7.2にBBBが稼働していて、HTTPやSSHで覗くことが出来る。
 とりあえず、デフォルトのOSはAngstromLinuxなんだけど、扱い慣れていないのでUbuntu12.04をインストールした。

 まぁ、細かい話は別にするとして、とりあえず、このブログ的にはサーバ能力はどうなのよ?ってところで、UnixBenchを実行してみた。

 システム140位というわけで、マイクロプランのVPSの1/10にも満たない。
 まぁ、高度な分析処理はVPSまかせにするので、センサーノードの情報を集めてVPSに定期送信できれば問題ないので、必要十分な性能ではある。

(557)


カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | コメントをどうぞ