Friday, July 11, 2014

RaspberryPiで電力ロガー/ 全体構想 ~ ここまでできた。



漠然とこんなことをやろうとしていて、ゴールを決めないとキリがないことに気がついた。
いったん整理しよう。

すでにできていること:
  • RaspberryPi で配電盤の電流を検出する(MCP3002を使用)
  • 測定した電流値(2秒ごとの値)を RaspberryPi 内のSQLサーバーに記録する
  • 測定したデータをRaspberryPi 内のWebサーバーから公開する
    (Bootstrap(タブレットでも操作しやすい、フラットUI)、Flotr2を使用(画像ではなくて、スケール操作のできるグラフ)、ダイナミックドメインにより外部へ公開)

ここまでやってわかったこと:
  • 交流電源は電流センサーだけでは電力は測定できない(マイコンで1000Hz以上の周期で測定し積分計算すればできるが、RaspberryPiでは無理)
    だから、表示はW(ワット)ではなくて、VA(ボルトアンペア)。電気代の計算には使えないが、短期長期の経時的変化を観察する=”見える化”には役立つ。
  • RaspberryPi で SQLのIOが輻輳すると、トランザクションの消失、測定の欠損が発生する。輻輳させない処理などロジックに工夫の余地があるかもしれないが、CPUパワーには限度がある。そうは言ってもクラッシュやフリーズもなくある意味堅牢に動き続けている。

まだできていないこと(したいこと):
  • クラウドSQLサーバーに記録できるようにする
    (5分間平均値を記録して保存する?2秒データでも直接クラウドに書く?
    → レスポンスによる)
    5分データから月間・年間推移を表示する
  • RaspberryPi から宅内機器のON/OFFができるようにする
  • あと1つセンサーを追加する(3線式単相なので、全電力を測るには2個のセンサーが必要)
  • 汎用A/DコンバータICではなく、電力取得専用ICに代えて、力率を考慮した電力が取得できるようにする
  • 制御のオプションとして、PWM調光
  • オマケ機能(天気予報、地震速報、センサーによる温度の表示)
上から4つまでできたら、とりあえずゴール。

Eco-Pi Graphのキャプチャー

プログラム構成はだいたいこんな感じ。


センサーが1個しかないし。


どこまで行けるか。

Thursday, July 10, 2014

Bootstrap + BootstrapSwitch がわかりにくかったのでメモしとく。

BootstrapSwitchは、Bootstrap本来のデザインを損なわずに実装できるスライドスイッチ(フリップスイッチ)プラグイン。
BootstrapSwitch2は、スイッチの枠の隅が欠けたように見えて、イマイチ。
BootstrapSwitch3では、デザインは改善されたが、すぐに使えそうなコード付きのサンプルがネットで見つけにくい。というかほぼ無い。

サンプル(非公式?):
http://www.jque.re/plugins/version3/bootstrap.switch/
やりたいことが実現できそうなので使いたいが、情報も知識も少なくどうしたものか。
本家サイトにサンプルコードがあるが、説明がそっけなく実装しようとしてもうまくいかない。しかも公式ドキュメントの記述が誤っている模様で難儀する。
で、上記のサンプルで動作している現物を手元に取り込んで必要なコードを抜き書いてみた。自分用テンプレートみたいなもの。
これはキャプチャ画像。
ようやくちゃんと実装ができたのでいろいろ試したところ、操作フィーリングもよいし、内部的にもきちんと動いているようにみえる。 ちなみに、他にもいくつか試して採用できなかったブラグインもある。 Switchery…スイッチの状態をdisableにできない。Flat UI…スライドスイッチだけを導入できずページ全体のデザインが変わってしまう。など。

バージョン:
Bootstrap 3.2.0
(http://getbootstrap.com/)
Bootstrap Switch 3
(http://www.bootstrap-switch.org/)

実装の方法:
bootstrap-switch.orgからダウンロードした bootstrap-switch-master.zip に含まれる2つのファイルをすでにBootstrapが使える環境に追加する。
static/js/bootstrap-switch.js
static/stylesheets/bootstrap-switch.css
(ダウンロード元:https://github.com/nostalgiaz/bootstrap-switch)

実装したコード。
やりたいことは、スイッチの色を変える、スイッチが押されたことを取得する(onClickイベント)、スイッチの状態を取得する(statusメソッド)、スイッチを無効化する(setActiveオプション)。など。
---------------------------- ----------------------------
このブログ本文にHTMLリストを表示するときの参考
http://www.netyasun.com/syntaxhighlighter/source-escape.html
※ コード中、<br>が反映されていません。

Tuesday, July 1, 2014

RaspberryPiで電力ロガー/電流センサー+MCP3002/測定→記録→表示の準備

前段階のブレッドボード基板からユニバーサル基板に。少し進化。
1本の電流を観測&記録&表示できるようになった。


プログラムを変更
・計測結果をコンソールへ表示するだけ → SQLite3ファイルに保存
・測定値の取得は理論と計算だけに基づく → 実測値もいれて実態に近くする
・init.d/に起動/終了スクリプトを追加して、電源ON時に自動起動できるようにした
[未対応] 2秒に1件を連続して書き込むと、何件かごとにSDカードへの書き込みが間に合わなくなるようで、データが飛ぶ。 データが欠損してもグラブ描画などには支障ないが、測定間隔をもっと短くした場合を含めて書き込みは10~20秒ごととか5件、10件ごとにまとめたほうがよいかも。

表示。
グラフ表示用プログラム
・Pythonによるcgi
・グラフの参考: Rickshaw (リキシャ)
( http://code.shutterstock.com/rickshaw/ )
・RaspberryPiのwebサーバーにPythonプログラム本体を置き、クライアントのプラウザから開くと、SQLite3からデータを読み込んで、ブラウザにJavaScriptを含んだHTMLを返す。グラフ用のデータは、SQLite3から読み込んだデータを、Pythonのリスト配列→JavaScriptの配列(オブジェクト)に変換してHTMLに埋める方式(埋め込みなので、更新が難儀)
・現状では、グラフ更新のために全体をリロードする必要あり >>> HTMLを主体にPythonを呼び、データはJSON渡しにするよう変更する
・10,000件のデータを読み込むのに数分かかる >>> グラフは10,000プロットあっても大丈夫。更新データだけ配列に追加できる方式に変更する
・レイアウト、コンテンツ :見た目をよくする、ボタンを追加
・現状の記録方式では、SQLite3ファイルが際限なく大きくなるので、順次、秒単位データ→分単位、時間単位の平均値データに置き換える必要あり
------------------------------------------------------------- -------------------------------------------------------------
プロジェクトの名前はEco-Pi(エコパイ)にしよう。
-------------------------------------------------------------
このブログ本文にHTMLリストを表示するときの参考
http://www.netyasun.com/syntaxhighlighter/source-escape.html