読者です 読者をやめる 読者になる 読者になる

スマートメータのBルート接続とRaspberry PiとZabbix3.0で電力消費量をモニタリングする

最近暑くなってきてエアコン回すようになったので、消費電力が気になってきました。

スマートメータへ聞きに行く。

最初はカレントトランスとADコンバータ使って電流測ろうって思っていたんですが、家の電気メーターがスマートメータになってた。

先達
chappnet.hateblo.jp
www.higebu.com
d.hatena.ne.jp

どうやらいけそう。自分で計測メカ作ろうとすると校正がめんどいんですよね。

ということで、Raspberry PiにWi-SUN通信でスマートメータと会話して消費電力情報を取ってきてもらうことにしました。

Bルート接続

東電Webから申し込めます。

何故かパスワードがメールできてIDは手紙で来る。普通逆でしょ。東京都水道局のWebサービスはIDがメールできてパスワードが圧着葉書で来ました。

アレだなぁと思うけど他社はこんなものではなく、例えば関電は申し込みからお手紙。申込システムを作るお金が勿体無いんですかね。

Wi-SUN接続をどうするか

ROHMのモジュールBP35A1ぐらいしか入手できなさそう。
www.rohm.co.jp

で、USBドングルで探すと上記のBP35A1を仕込んだROHMのWSR35A1-00がヒットする。
www.rohm.co.jp

こいつはぷらっとホームの通販で買えた。Web上では「納期お問い合わせ」って書いてあるけどすぐに発送されました。
online.plathome.co.jp
ちなみに価格が税込み16200になっていますが、実際に買うと送料1000円(+消費税80円)かかって総計は17280円になります。

他にも探すと東芝のドングルとか出てるんだけど買い方がわからん。

届きました。

繋いでみる。

[walkure@altair]~% dmesg
(中略)
[    3.370616] usb 1-1.2.1: new full-speed USB device number 6 using dwc_otg
[    3.518316] usb 1-1.2.1: New USB device found, idVendor=0403, idProduct=6001
[    3.527341] usb 1-1.2.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[    3.538313] usb 1-1.2.1: Product: FT232R USB UART
[    3.544866] usb 1-1.2.1: Manufacturer: FTDI
[    3.550802] usb 1-1.2.1: SerialNumber: ほげほげ

BP35A1とUSBの変換は、この手の用途で定番のFT232を使っているようです。なので、デバドラなどを探す必要が無いから楽。

楽なんですが、定番なのでFT232を複数個ぶら下げるとttyUSBが区別できなくなる。
そこで、udevでデバイパーミッションの設定をする際のATTRSにidVendorとidProductと、もう一つserialを加えて識別することに。serialは前掲のdmesgにも出てますし、udevadm infoで見ても良い*1

[walkure@altair]~% cat /etc/udev/rules.d/61-FT232.rules
ATTRS{idVendor}=="0403",ATTRS{idProduct}=="6001",ATTRS{serial}=="ほげほげ",KERNEL=="ttyUSB*",SYMLINK+="ttyWiSUN",MODE="0666"

udev周りの参考
http://kuma35-memo.readthedocs.io/en/latest/fix-devicename.html

で、デバイスが見えたところでターミナルエミュレータminicom使って適当にお話が出来るのを確認。

観測する

minicomで情報取れたので、前掲のblogとECHONET Liteの仕様書、そしてSKSTACKの説明を元にちまちまとperlで読み出す実装を書いてみた。

スマートメータとUDP(SKSTACKがtelnetで伝えてくる)で会話して、Zabbixエージェントで観測することを前提にしています。ログ取りの選択肢はいくつかありますが、最近仕事でZabbixと戯れてるのでZabbixにしました。

github.com

Zabbixでグラフ書くとこんな感じになります。Zabbixには室内と室外の気温も監視させてるので、エアコンの動きがわかって面白いですね。
f:id:W53SA:20160819230044p:plain

電気代は描画するとこんな感じになります。
f:id:W53SA:20160819230416p:plain
月途中からの観測開始なので、先月分の電気代請求書に書いてあったメータ読み値を別途DB放り込んで算出しています。ちなみに締め日はWeb見たら割とバラバラだったんですが実装では26日固定です。

電気代が(たとえば)4000円越えたら警告みたいなことを最初考えてたんですが警告されたところで暑いもんは暑いんだしどうしよって感じ。

*1:ID_SERIAL_SHORTにあたる。

プロキシ環境変数を設定するランチャを作った

最近はUnityと戦っていたりします。で、Webとの通信を見るためにFiddler使いたいなぁと調べたらUnityはプロキシ設定を環境変数http_proxyから取ってくる。

グローバルに設定するとこの環境変数を読む他のアプリケーションと競合します。例えばdropboxFiddlerのメモリを食い尽くすとか。

要はプロセスが上がってくる際に環境変数が設定されてればいいので、簡単なランチャを書きました。

github.com

やってることは単純でSetEnvironmentVariable環境変数設定してCreateProcessで子プロセス生成して即座に終了するだけ。この程度で.NET使うの牛刀感溢れるのでWTL使ってさくっと作りました。

ここ数年で買ったモノたち

特に意味は無いんですが、なんとなく。

一応、時期順に並べたつもり。

続きを読む

京大マイコンクラブと旅するわたし

この記事はKMC Advent Calendar 2015 17日目の記事です。

何故か参加ボタンをポチってしまったwalkureです。TwitterとかのIDは取れなかったのでW53SA*1
今は東京で何故か土木っぽいことしてます。

昨日は京大マイコンクラブに東京の大学生が入った話 - 型想い三年でした。

で。

ポチった最初はnode.js/地震計とか書こうと思ってたんですけど、今月に入ってから四時間の通勤電車で精神力が消費される日々になってしまい毎日しんどくて現在休止中。。。。。。。。

ということで、他の人達とは毛色の違うことを書くことにしました。

*1:当時使ってた携帯

続きを読む

艦これ専ブラのソースをgithubに投げた

長らく専ブラいじれてないというか日々消耗してなんもできてないのでソース公開しました。

コピペした部分は記憶とソースコードの記録にあるかぎり書いたのですが、なんか足らなかったら指摘してください。

今のところ、遠征と時々演習を回すことしかしてないですね。朝遠征回して夜帰ってきて演習回すとかそんな感じで。

ShadowsocksでURI検閲HTTPプロキシを越える

中南海による言論統制システム金盾を越える為にいろんなVPNソフトウェアがありますが、その一つにSOCKSv5プロトコルを暗号化して飛ばすShadowsocksがあります。最近では開発者の家に警察がやってきてソースコードgithubから消すのを強要される事件がありましたが、既にもりもりforkされていました。サーバもpipに残ってるしOSSって強いね。作者さんは無事でしょうか、、、、

さて、日本でもネットワークによっては検閲プロキシなどの壁が存在するので当然壁を壊しにゆきます。昼休みぐらい艦これさせろ。

HTTPプロキシを越える手段としては、CONNECTメソッドがあります。この手で壁を超える際に使うのはstoneが有名です。CONNECTメソッドの詳細はRFC 2817あたりですが、簡単に言うと「指定のホストへの通信を中継する機能がある」わけです。なんに使うかって言うとRFCにあるようにSSL通信で、SSL通信はバイナリデータをサーバとクライアントの間でやりとりする必要があります。

CONNECTメソッドの動きは簡単で、CONNECTでリクエストを投げると、HTTPレスポンスが返ってきた後にリクエストで指定したホスト:ポートへのtcp接続を中継してくれます。stone使った場合のはこんな感じ。

Shadowsocksと一緒にstone起動してもいいんですが、せっかくソース公開してるので改造してCONNECTリクエスト投げて、HTTPレスポンスを無視する機能をTCPリレー部分に突っ込んでみました。これだと単にShadowsocks.exeを起動するだけで壁を越えてくれます。やったね。

ソースはforkしたgithubに突っ込んでバイナリもreleaseしてみた*1しれっとレゾルバがIPv6アドレス無視するようにしてありますが、これはデバッグ中にpolipo使ってたけど127.0.0.1でしかbindしてくれなくてlocalhostで解決した際に最初に::1が返ってくるとコネクション貼れない場合があったんですが最高に馬鹿っぽい感じがしますねこれ。

これで晴れて壁を越えて世界の知にアクセスできるヤッターとか思ってたけど、出口設置したさくらVPS2ch.netからブロック*2されてるオチもあったり。

*1:Tag打たないとDraftから先に進まないって知らなくて暫くハマった。

*2:分裂騒動の影響ですね。

HttpListenerを使ってFiddlerCoreを代替してみた

今年の春先にFiddlerCore艦これの専ブラに使うのはライセンス的にダメなんちゃうって話が出たので、KCBrで使っていた部分だけを代替するものを.NET Frameworkが持ってるHttpListenerを使ってさくっと作って取っ替えました。

最初はTcpListnerでも少し書いてたけど、既に十分検証されていて使用可能なコードがあるのに自分で書くのは馬鹿すぎるので止めました。

続きを読む