試作システムの概要

概略の仕様

試作しようとしているシステムの概要は以下のような感じです。

用意するもの

  • Edge device: センシング用マイコン+ネットワーク接続
  • MQTT ブローカ: 通信プロトコルはMQTTを使いますので、ブローカが必要です。
  • Core device: linux 計算機

動作

  • センサで状態を数値化(現状、温度とアナログ計測装置のモニタ電圧(直流)を想定)
  • 規定の時間毎(1分〜1時間ぐらい)に送信
  • Core Deviceでデータを保持
  • 規定の時間毎(数時間)に経時変化をグラフ化し指定されたユーザにメールで返信

その他

  • 現状ではEdge deviceのコントロールは考えていません。
  • 接続はSSHを使ったポートフォワーディング
  • Edge device、 MQTTブローカにはRaspberry Piを使用

Edgeデバイスのこと

Raspberry Piはアナログ入力ポート(ADコンバータ)が少ないので増設します。
OSがSDカードに乗っているのでSDカードの寿命がどれぐらいか気になるところですが、今回の試作で実際のSDカードへのアクセス量の実績が出れば、それで寿命が想定できると思います。工業用のSDカードはめちゃくちゃ高いので、きちんと設計してから必要な容量を購入したいです。一応目標としては、最低でも5年ぐらいは連続動作するようなものがほしいですね。
将来的には、mbedに移行したいと思っています。RaspberryPiは値段は十分に安いですが、ちょっとオーバースペック的なところがあり、ミニマムにした時にどこまで削ぎ落とせるかという点では、mbedぐらいの規模がコストやメンテナンス、応用範囲を考えるとベストなサイズじゃないかという感じがします。特に、OSがリリースされれば開発しやすさも変わるかな、とちょっと期待しています。

プロトコルのこと

2年ほど前、このシステムのフィジビリティテストみたいなことで最初のシステムをプロトタイピングしたのですが、その時にはMQTTのことを知らずに、メールでデータを送るシステムをつくりました。httpでも良かったのかもしれませんが、プッシュでデータを送るとなるとちょっと面倒かなあ、と思ったのとApachサーバを立てることになり、ちょっと面倒だ(というかこれでくじけるかも)と感じたので、gmailのアカウントを作ってEdge deviceはそこに対してメールすればそれでおしまい、というような構成にしました。
Edge device のプログラミングで使ったpythonは、幸いなことにモジュールがすごく良く完備されていて、データを読み込んでメールするまでの処理がほんの60行程度のコードで収まってしまいました。初めてのpythonでしたが、1日程度でざっくり動くものができ、2〜3日でだいたい完成しました。
ただ、リアルタイム性を求めないような用途、たとえば1時間に1回程度のサンプリングならこれでも十分ですが、たとえば1分に1回とか、10秒に1回となるとメールでいちいち送ってはいられません。まとめて1000個分のデータを送るとか言うような、バッチ処理的アプローチも考えましたが、あまり面白くないなあとおもいつつ、フィジビリティテストのプロトタイピングは終わりました。
そしてつい最近、MQTTというプロトコルの存在を知り、「ああ、これだ!」という直感で飛びつきました。

Coreデバイスのこと

コアデバイスという呼び方でいいのかどうかわかりませんが、データを集計する側のセットアップです。
こちらは定番でubuntuを使うことにします。昔々はFreeBSDを使っていたのですが、しばらくunix系OSから離れているうちにlinuxがすごく使いやすくなっていたのでそちらに転向しました。
この上で使うのはシェルとgnuplot程度です。(それと、ps2pdf)