前回の測定部の記事はこちらを御覧ください。
今回はこのテキストデータを見やすいグラフにしよう!という表示部のテストです。
当初はMQTTを使ってGraphiteやGrafanaへデータを・・・なんて色々頑張っていました。けれどなんだかそればっかりに力がかかって一向に進みません。InfluxDBとかもかじってみたけれど。ということでもっとシンプルにグラフ化してくれる外部データストレージ&フロントエンドサービスがあればいいのよね、と探してみたらありました。
AT&T M2X: Build solutions for the Internet of Things
AT&T M2X provides time-series data storage, device management, message brokering, event triggering, alarming, and data visualization for your industrial Internet of Things (IOT) products and services.
これはIoTデバイス向けのデータ格納とグラフィカルな表示、イベントに対するトリガーなどを提供するサービスの様です。10デバイスまでのStandard PLANなら無料で利用できる上、送信側はLinuxコマンドであるcurlでhttpを投げればいいという簡単さ。
早速使ってみます。
M2Xのはじめかた
AT&T M2X: Sign Upから適当に情報を入力してサインアップ。GitHubアカウントでも連携作成できるみたい。メールアクティベーションの後、サインインすると「物理デバイスか?仮想デバイスか?」を聞いてきます。今回はRaspberry Piなので左の”Device”を選択。
次にデバイス名をつけます。
自由なんですがラズパイが何個もある人は困りますね。MACアドレスでも・・・と思ったら書いてないし。結局オーディオジャックの形で区別して”Raspberry Pi Black”とかにしました。
Define your deviceにて”Raspberry Pi”を選択。
StreamIDも自由ですが、curlのアクセスURLに含まれるのでスペース禁止&適当な長さで。Display NameはM2Xの画面上でのグラフタイトルになります。
今回は電力なのでStream TypeはNumeric(数字),Unit & Symbolは”watt”にしました(SYMBOLは勝手に入りました)。
するとコードが生成されるので、これをコピペしてRaspbian上で実行してみます。うまくいけばM2Xに「40」の値が入ったグラフが作成されるはず。
セッティング変更と結果グラフ
あとは前回のepower.rb(前回のsample.rbから改名)の数字だけを定期に飛ばせばいいわけです。出力結果をcutコマンドで抽出してもいいですが、今回は素直にrubyのファイルを書き換えました。
loop do 中略 puts "#{Time.now.strftime("%Y-%m-%d %H:%M:%S")}, #{eo} V,#{io} A,#{pow} W," sleep 1 end ↓ puts "#{pow}"
このepower.rbを実行し、curlでM2Xに投げるシェルスクリプトpi2m2x.shを作ります。
#!/bin/sh epower=$(ruby /usr/local/etc/piper/epower.rb) curl -i -X PUT http://api-m2x.att.com/v2/devices/xxxxxxxdevice IDxxxxxxx/streams/e_power/value -H "X-M2X-KEY: xxxxxxxxxPRIMARY API KEYxxxxxxxxx" -H "Content-Type: application/json" -d "{ \"value\": \"$epower\" }"
このpi2m2x.shをcronに登録。と思ってcrontab-eしたら急に質問がでてびっくり
Select an editor. To change later, run 'select-editor'. 1. /bin/ed 2. /bin/nano <---- easiest 3. /usr/bin/vim.tiny
初回は編集に使うエディタを選べ、ということみたい。間違えた場合は”select-editor”で再設定できます。そうして以下の行を追加。rootで作ったのでユーザー名は書いていません。
* * * * * /usr/local/etc/piper/pi2m2x.sh 2>&1 | logger -t pi2m2x -p local0.info
テストもかねて標準出力を>/dev/nullに捨てず、loggerでsyslogに載せるようにしました。
毎分送って大丈夫かな・・・とちょっと心配ですが今のところお怒りメールなどは来ていません。
そうしてできたのがこのグラフ
とても簡単。苦労なし。
測定サンプルとしてメインPCをの消費電力をプロットしてみました。アイドル時は38Wでブレイドアンドソウルを動かしたところで最大数値については194.8W。感覚的にもうちょっと高いはず?とも思います。ワットチェッカーを併設して計算式でのキャリブレーションをもうちょっと進めてみようと思います。
あとは細かなところで時刻表示がUTCになっています。そこをJTSにしたいんだけど設定項目が見つかりませんでしt。試しにLocationを日本にしてみたけど変わってくれないし…。設定項目がないところを見ると、curlからのputの際にtimezoneかlocationヘッダをつけると反映されるのかもしれません。
→追記
FAQを検索したら書いてありました
[FAQ] Display charts with local timezone? – Forums Blogs Events News | AT&T Developer Program
A: There’s an enhancement in the development queue (coming soon!) to display times based on the timezone selected for the logged in user. In the mean time, as you’ve mentioned, all times are displayed as UTC.
もうちょっとでチャート画面がバージョンアップされて、ログインユーザーのタイムゾーンに合わせて変更される。それまではUTCで(統一して)表示される。とのこと。
それはさておき今後の課題は
- CTL-10を2つ接続して200Vを測定可能に
- 実際に家のブレーカーに設置
- 余ってるGPIOピンで温度センサも接続
3.はぜひやりたい。でもそうなるとrubyで温度測定のコード書かなければなりません。M2XへのPUTはRubyのサンプルコードもあるので、全部統合できればいいですね。
2015/11/22 追記
M2Xにはどの程度の頻度でデータを投げていいんだろう?まさか無制限で数秒ごとになげていいわけもないし。と思っていたら、フリープランの制限について書いてありました。
100,000個/月までとの事。これを一月31日と考えると
- 1日:3225個
- 1時間:134個
- 1分間:2.2個
なので毎分データを投げるような場合は最大2種類まで、という事になります。これは1デバイスあたりの制限なので、別のデバイス(ID)に分ければ倍増させる事はできそう。
初回:Raspberry Piとクランプセンサで家の消費電力を測ろう(測定部) | 徒労日記
最終回:Raspberry Piとセンサで家の消費電力を測ってM2Xでグラフ化する(設置編) | 徒労日記