人が使わない間のウォシュレット電力を削減する(owntracksによるスマホの位置情報とmqtt通信)

| コメント(0)

ずっと人が居ない時も暖め続ける電力を減らすため、ついでに会社の学習時間(なぜか年間学習時間が義務付け...時間は確保しないくせに)を稼ぐため。
実施するにあたり以下のURLを参考にした。
http://qiita.com/mfujita/items/fb4130efb6583b54f681

利用するもの

  1. CloudMQTT(MQTTのブローカー、わかりにくいけどここにデータが集まってくる、ハブみたいなもの) 。paypalアカウントが必要です。
    rasperry piにブローカーを導入しても実現可能だけれど、接続までの道のりが遠い。
    このサービスはpayaplアカウントを持っていれば無料だし、画面から接続状態を目視できるので初心者的にはわかりやすかった。
    気になるなら最終的にrasperry piにブローカーを導入してCloudMQTTから切替ればよいと思う。
    (MQTTは規格品だから接続先を切り替えるだけで以後の処理はうまくいくはず。)
  2. androidスマホにowntracksソフト(google play 0yen)
  3. rasperry pi
  4. rasperry piにnode.jsを導入するためのnvm
  5. rasperry piにnode.js
  6. rasperry piにnode.jsで使うMQTT library

androidにowntracksというソフトを導入すると、指定サーバに定期的に位置情報を書き込むことが出来る。プロトコルはMQTT

MQTT is a machine-to-machine (M2M)/"Internet of Things" connectivity protocol.
「MQTTは機械と機械を繋ぐ、IOT用の接続プロトコル」みたいな感じ。HTTPはオーバーヘッドが大きく、小規模大量通信に向かない、そこでMQTTができたらしい。


今回は2まで行う

  1. ひとまず1のCloudMQTTを登録する。これはpaypalアカウントが必要なので注意すること。
    https://www.cloudmqtt.com/にアクセスし、右上の"plans"から"Cute Cat"を選ぶ。
    これは10コネクションまでのフリーアカウント(ただしpaypal登録しないと有効にならない)。
    サインアップしてpaypalアカウントを登録するとCloudMQTT Consoleからユーザー名パスワードでMQTT通信できるようになる

    CloutMQTTConsole.png

  2. 次にスマホへowntracksをインストールする。google playから導入すればよい。
    インストール後の初回起動時にpublicかprivateか選択する。publicでは独自にデータ収集できないため、privateを選択する。
    接続先サーバはCloudMQTT Consoleにある情報(server,username,password,port)を指定する。
    Use WebSocketsはOFF、めんどうなのでTLS(SSL)とか使わない。
    IdentificationのAuthenticationはON、もちろんUsernameとPasswordとportを登録、DeviceIDはスマホ固体を管理するユニークなものにする。TrackerIDはそのまま(意味がわからない)。

これでスマホからCloudMQTTへ通信が開始されている。
CloudMQTTのWebsocket UIへアクセスし、しばらく待つ(スマホから指示しても10秒くらい経たないと表示されない、遅いみたい)とデータが表示される。
下の図ではWebコンソールと、一足先にrasperry piからCloudMQTTへ接続してのデータ取得が表示されている(もちろんスマホから位置情報が登録されると両方に出てくる)

mqtt.png
取得できるMessage(文字列)は
owntracks/zkjk    /lgl23    {"_type":"location","tid":"23","t":"u"    ,"acc":884,"lat":35.7167418,"tst":1466485801,"lon":139.7283276,"batt":47}
こんな感じ、前半のものが「Topic(トピック)」と呼ばれるデータのくくり?
owntracks(固定)/username(MQTTCloudのもの)/DeviceID(スマホで設定したもの)
DeviceIDを含むので端末の動きを追うにはTopicで絞込みを行えばよい。その他の文字列は

  • lat:緯度(latitude)
  • tst:UNIXタイムスタンプ  →で日付時刻に変換できる http://url-c.com/tc/  または「echo 1466489615 | awk '{print strftime("%Y-%m-%d %H:%M:%S", $1)}'」のようにして変換できる。
  • lon:経度(longitude)
  • batt:バッテリー量

これでひとまずスマホの緯度経度が取得できる。Websocket UIを良く見ると左側に入力欄があり、ここでTopicとMessageを指定すると、MQTT通信されたようにデータが書き込みされる。
(今回は実施していないrasperry piからCloudMQTTへ接続してのデータ取得で取得される)
今後開発するデータ処理系のテストに役立つはず。

コメントする

このブログ記事について

このページは、powerpcが2016年6月21日 14:19に書いたブログ記事です。

ひとつ前のブログ記事は「インラインドリッパー発見」です。

次のブログ記事は「WacacoのMINIPRESSOをオーダー(ハンディエスプレッソマシン)」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。