LoginSignup
8
7

More than 5 years have passed since last update.

GoでシリアルポートからUSBを操作してHEMSを作って電力見える化!

Last updated at Posted at 2017-12-24

クリスマスイブだというのにQiita書いてます。こんにちは。
記事を書き終わったら子供の枕元にプレゼントを仕込むミッションですね。

ここしばらくGoを書いていないのでちょっとリハビリを兼ねて少し変わった感じの構成でコードを書いてみました。
普段AppengineのWebのプログラミングばかりだったので手ごわかった・・・完成してないけど。

HEMSとは

HEMSとは「Home Energy Management System(ホーム エネルギー マネジメント システム)」の略です。

519cf937-51bf-1bd3-48d8-af8f770fac93.jpg

参考 : http://www2.panasonic.biz/es/densetsu/aiseg/hems/about/index.html

つかったもの

  • Go
  • Mac (本当はラズパイで動かしたいがまだそこまでいってない)
  • GE 富士電機製スマートメータ(家についてるやつ。ついてなかったら東京電力に連絡すればつけてくれるはず)

ce40fc4c-64d5-b6ae-335f-85ecb667f308.jpg

  • ROHM Wi-SUN USBドングル (WSR35A1-00)

3a5f863c-17e2-ecb6-3f54-f076998ef272.png

 たけぇ。。。

事前に用意すること

  • Bルートサービスの開通を「東電パワーグリッド」という会社に申請する。

Bルートとは?

スマートメーターで計測したデータを、お客さま宅内のHEMS機器へ送信するサービスです。

6fa67199-1003-7185-c944-d3033cb0f066.png

goでROHM Wi-SUN USBドングル (WSR35A1-00) を操作し、スマートメータから電力を読み取るコードを書く。

ここ最近goを触っていなかったのと、普段AppengineでのWebアプリケーションばかり書いていたのでいろいろ戸惑いながらそこそこ動くところまで書いたものはこちら。

ハマったところ

  • USBとのやり取りをfor文の中でやるようにしていたら、たまに応答が帰ってこないことがあり、永遠に待ち続けるのでgoroutineで非同期に
    • for文でsleepではなく、tickerを利用する。
  • tickerをselectしているところで同期的に処理するとやっぱりブロックしてしまうのでgoroutineに。
  • 内部的に応答で受け取ったコードが期待する値でない場合には再実行が必要なのでchannelに値が入ったことをトリガに実行するように。
    • 定期実行なんだけど、たまにリトライが必要。
  • 自宅でしか実行できない & 長時間動かしているとなんか応答がおかしくなるなどあってデバッグがしんどい。

まだできていないこと

  • 出力をGASやらGAEに送ってBQなどに投入する。(手元の別ブランチでは動いている)
  • たまに応答が返ってこないというパターンの場合のタイムアウト処理入れてない。

イメージ

2年ぐらい前に作った時点ではこんなグラフが出るようになっていました。
githubに上がっているコードはサーバサイドに投げる処理は抜いてます。

58e511f9-3e22-d9f7-a28e-10d280a8c015.png

さいごに

goのアドベントカレンダーなのに、goのコードを一行も出さなかったけど良かったんだろうか・・・汗
いつもWebアプリケーションのコードばかりなので、たまにはこういうのも刺激になって良いな〜と。

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7