おうちハック
micropython
ha-bridge

ホームオートメーション器機制御の4段階

この記事は おうちハック Advent Calendar 2017 の8日目の記事です。

第0段階 序

3年ほど前ですが自宅を建て替える機会があったので、せっかくなので可能な限りはホームオートメーションの機能を備えられるようにしようと、検討することにしました。
大手メーカーの作っているHAシステムのカタログなんかもちらっとは見ましたが、いかんせん高く付くのは見え見えでそれでいて将来的なビジョンも感じられないものですから、ちょっと導入出来るものはないなぁということになり困ってしまいましたね。日本製のもので言うと当時と今とで特に変わっていないように思います。
照明からなにからなにまでスマートフォンをリモコン代わりにして制御できる事が理想でしたがどうにもそれはあきらめざるを得ないという結論になったので、後からなんとか出来そうな部分は後で考えることにし、どうしても最初からやっておきたい機能として玄関の電気錠に絞って導入を検討することにしました。

電気錠については、MIWAがちゃんとした製品を出しています。ネットでもある程度の情報は得られましたが、自分にとって本当に導入したい機能、そして使い勝手であるかはなかなか判断できなかったので、ショールームにも足を運び実物を触ったり細かい部分を質問したりして確認しました。特に役に立ったのは電気錠のカギ(RFIDのような無線タグ)の登録方法について訪ねたら説明書のコピーをとって渡してくれた事です。これで内心はこのMIWAの製品を導入する方向で決定したのですが、まだシステム構成を具体的に決めないといけません。

ここで一つ大事なこととして言っておきたいのは導入すると決めたら、断固としてそう決めたという態度をとるべきだという事です。そうでないと、値段だったりデザインだったりその他いろいろな手間がかかる部分が障害となって無かったことになってしまいがちですよ。一般家庭に電気錠を導入するという例もそうそうないわけですから、ほおって置いても誰もシステム構成をうまく決めてくれたりしません。なので自分で調べて全部決めます。たとえば電気錠ユニット+シリンダーは上下二つに二重化したものが標準構成となっていますが、1ユニットだけにしてコストを削減する事も出来ます。ドアノブは上下のユニットを連結するようなごついデザインのものがさも標準であるかのようにカタログに載っていますが、通常のドアノブと組み合わせる事も出来ます。戸に取り付ける無線タグのカギのリーダー装置は戸の外側だけのボタンがあるものと内外両側にボタンがあるものがあり選ぶことが出来ます。それから電源の供給を兼ねた制御装置が別に必要でこれはセキュリティーの根幹でもあるため室内に取り付けるのですがこれにも室内からの操作が出来るボタンパネル付きのものとないものがあります。大変ですが、電気屋さんも建具屋さんも大工さんも施工経験がないわけですから、分かる範囲の事を全部調べて正しく発注できるようにしてあげないといけません。

とまあ、電気錠だけでこれだけ考える事があるので他の家電製品も全部ホームオートメーションが出来るように細かく指定して発注するのは無理でしょうという事にも調べているうちに気付いた訳です。大工さんも建具屋さんも電気屋さんもみんなが優秀だったのでトラブルもなく思った通りの形で玄関の電気錠周りが完成しました。

第1段階 HA端子 + 手動 = スイッチとLED

前節で電気錠の制御装置について触れましたがこれについては操作パネルがついていないものを選択しました。操作パネルは照明のスイッチと同様の規格化されたサイズですが正方形なので嵩張ります。それは見た目も良くないので制御装置は丸ごと壁の内側のスペースに取り付けて見えないようにしてしまいました。操作パネルのない制御装置にもHA端子が付いているのでこれを使って操作パネルを自作しようという魂胆です。実はPanasonic製のカメラ付きインターホンがHA端子の機器と接続して制御するための端子(要別売オプション=型番CZ-TA2)を持っている事が分かったので最初はそれを繋いで動作試験をしました。特別な事はなにもないのでこれについての詳細は省きます。

さてスイッチです。HA端子の仕様はまだ一般公開されていない様ですが、以下のようになっている事は判明しています。



C1,C2が制御のための信号で、M1,M2がモニターのための信号です。電気錠とインターホンの組み合わせで言うとC1,C2がインターホンから電気錠への信号。M1,M2が電気錠からインターホンへの信号です。どちらのペアもフォトカプラを介して機器同士を接続することになっています。

フォトカプラとは何かというと電気信号を光に変換し、その光を光に反応して電流を流す素子に渡してまた電気信号に変えるという半導体部品です。中に赤外線LEDとフォトトランジスタが入っています。間で光に変換しているので電気的には絶縁されるという所がミソです。HA機器同士を繋ぐ場合、通常は必ずフォトカプラを用いるのですが、今回は電源を用いない回路をHA端子に繋ぐためフォトカプラはばっさり省略してしまう事ができます。

回路図(準備中)

というわけで、まずはC1,C2端子にスイッチを直結すると電気錠の開閉ができるようになります。MIWAの電気錠に関してはこれだけの簡単な事で本当に開け閉めができるんですよ。

開け閉めできるようになったのはいいのですが、今開いているのか閉まっているのか分からないと意外にというか当然不便に感じてきます。そこでM1とM2端子のモニター信号を人間の目に見えるようにしてやります。これも簡単LEDと抵抗を繋ぐだけ。んで、写真の様なLED付きの特製スイッチを作成しました。HA端子は、電圧が一通りに決まっているわけではなく、器機によってある程度自由に設計できるようにしているようですが、電気錠の制御ユニットの場合は、電圧が5VだったのでLEDの電流制限抵抗は、3kΩとしました。


↓音で動作を確認して下さい。


HA端子の仕様が思ったより単純で簡単にできそうという雰囲気を感じてもらえると良いです。

第2段階 HA端子 + マイコン制御

電気錠のHA端子は人間が適当にスイッチを押しても反応してくれましたが、すべての機器がそうである訳ではありません。もう一つHA端子を備えた機器としてここで取り上げるのは電気式床暖房です。床暖房については専門の工務店に取り付けを依頼していましたが、そのときにHA端子を利用できるようにしてくれるように頼んでありました。で、その仕様はいざハックしようかなと思った時になって初めて調べた訳ですが、PanasonicのWTF47214WKを設置してくれてありました。電気錠の制御装置と同様に壁の内側の空間に設置してあります。これが前節でも言及したフォトカプラそのものです。商品仕様書が参考になるので是非一読して下さい。仕様を見ると動作電圧に若干の不安がありますが、実際に試すと3.3V-I/Oのマイコンと直結して問題なく動作してくれる事が分かりました。

↓WTF47214WK商品仕様書より引用

Screenshot-2017-12-8 Microsoft PowerPoint - WTF47214WK ppt - 2012022400100583 PDF.png

床暖房の信号が電気錠と違うところは、スイッチを押したときの時間が正確に200ms~300msでないと反応しないところです。ちょっと頑張れば手で入力して反応させることも出来ないではないですが、100%成功されるのは割と難しいです。なので人間の代わりにマイコンに操作してもらいます。このあたりは他の人がされていのとだいたい同じようなハックだと思うので詳細は省きますが、ソースコードだけ示します。

ソースコード(GitHub)

ESP8266にMicroPythonをインストールし、プログラムはPythonで書いています。
インターフェースは、HTTPでスマートホンのブラウザから操作するようにしました。名前解決のために自宅のルータのDHCPにMAC指定でアドレスを固定し、ルータのDNSにそのアドレス登録しています。

第3段階 シリアルインターフェース

電気錠と床暖房の制御が出来たあと、夏になったのでエアコンの制御がやりたくなりました。うちのエアコンはDaikin製です。手が回らなかったのでエアコンについてはホームオートメーションを意図した指定は何もしていませんでしたが、調べてみると最近のDaikinの製品はだいたい無線LANアダプタが取り付けられるようになっているとの事でした。うちの機種の場合は加えて無線LANアダプタを取り付けるための別売りアダプタ基板も必要でした。つまりうちのは一番機能を絞ったシンプルなモデルという事ですが、それでも無線LANアダプタを取り付ける余地があるというのだからありがたい限りです。少々余計な出費の様な気もしましたが、前節までのようにホームオートメーションが実現してきてしまったので、ここは手をつけるしかないの一択です。

純正の無線LANアダプターと取り付けに必要な脚立!を購入して試してみました。スマホ用のアプリが提供されているのでそれを使えば当然制御が出来ます。それから調べてみるとスマホアプリとエアコンの無線LANアダプターの通信仕様を解析したページが存在していました。

ael-code / daikin-control (GitHub)

市販のものを使うだけではつまらないので、床暖房と同様に制御できるようにESP8266+MicroPythonで無線LANアダプタを自作してみます。無線LANアダプタとエアコン本体の通信はシリアル通信=UARTですが、電圧が5VであるためESP8266に直結するわけにはいきません。FETを使ってオープンコレクタ出力に仕立てるのですか、ESP8266のちょっと煩わしい仕様のためにいろいろ試行錯誤してしまいました。MicroPythonの場合シリアルポートはREPL(コマンドループ)のためのシリアルコンソールとして利用されるようになっているため、ここも改造してREPLはWebREPLだけが有効になるようにハックしました。最近のMicroPythonではハックしなくても同じ事が出来るようになっているかもしれませんがまだ調べていません。オープンコレクタ化をFETだけで簡単に構成するためにシリアル通信の極性を反転するようにしましたがこれについてもMicroPythonのハックが必要でした。純正の無線LANアダプタでも同じですが、エアコン本体から電源が供給されるため別途電源が必要ないですし、無線LANで通信するため他の回路に電気的に接続していないという安心感があって良いです。

Daikinエアコンのシリアルポートの仕様 (準備中)

回路図(準備中)

ソースコード(準備中)

最近AmazonのEchoを手に入れたのでAlexa経由でエアコンを制御する実験もしてみました。これには、ha-bridge (GitHub) というJavaで書かれたオープンソースのソフトを使います。アレクサからの指示をコマンドライン呼び出しに変換できるので、wget を実行するシェルスクリプトを呼び出すという簡単な方法でアレクサとエアコンの連携が出来ました。Javaなのでビルド済みの.jarを拾ってくればパソコンでもNano-Pi Neoでも動かす事が出来ます。(たぶん純正の無線LANアダプタでも同じ仕組みでアレクサとの連携が出来るはずなので今度試してみよう。)

↓Nano-Pi で動く ha-bridge の様子。(外見だけ)


ESP8266をエアコンの方で使ってしまったので、床暖房の制御は、Nano-Pi Neo の方に改めて組み込む予定ですがまだやっていません。

第4段階 2線式双方向通信

エアコンまで出来たので次に目をつけたのがお風呂の給湯器です。うちのはリンナイ製でした。もともと親機リモコンと子機リモコンがセットになっていて親機リモコンは通常浴室に取り付けますが、子機リモコンを台所等に取り付ける事によってわざわざ浴室まで行かなくても追い炊き等の機能を使えるという設計なのですが、子機リモコンを台所周りに取り付けるのは見た目に鬱陶しいということで取り付けないで物置に置いてありました。調べてみると使う電線は2本の銅線からなる2芯ケーブルであれば良く、さらに極性も考えなくて良い=つまりプラスとマイナスを区別する必要が無いという配線作業自体は実にお手軽なものだったことが分かったのでさっくりと自分で給湯器本体に接続して目立たないように室内に引き込みました。ちなみに使ったのは余っていて使う予定のない電話線。

どんな様子で通信しているのか、オシロスコープで見てみたところ12Vの電源に400kHzで変調された赤外線リモコンと同様の信号がやりとりされている様子でした。と、ここまでは調べたのですが、いまのところここまで。未完ですが、そのうち出来る見こみです。もし答えを知っている人が居たら教えて下さい。追い炊きボタンを押すだけならMicrobot Push等を設置するのでもいいのですが、それではつまらないと思うので。

これからも、おうちハックを進展させたいと思います。

※準備中の部分はアドベントカレンダーが満了するまでを目途に補完していきたい。