2017/09/05 参考サイト追加
2017/03/05 homebridgeを自動起動させる方法に関して追記・参考サイトの追加
自宅IoTに挑戦
引越しを機に家庭内IoTに挑戦しようと思い立ちました。なんせ自宅IoT友の会の部員ですからね!
というわけで、「家庭内IoT」とか「おうちハック」と名前が付く記事を見かけるとひたすらブクマし続ける日々を過ごしていました。いい加減、これだけ集めれば十分だろと思いやってみたら、案の定色々ハマってしまったところや、自分なりに気づくところがあったので一度まとめて記事にしてみます。
今回、参考にしたサイトとか参考にしなかったサイトに関しては、本記事の一番最後にまとめています。
家庭内IoTをしてできたこと
まずは、どんなことができるようになったかを紹介しようと思います。
暗くて、エアコンのついていない寒い書斎
ここで、例えばぬくぬくしたお布団の中で、iPhoneのSiriたんに対して喋りかけます「書斎ON」
Siriタンが何やら反応してくれます
なんということでしょう!書斎の明かりがついて、エアコンが動作を始めました
続いて、Siriたんに話しかけます「室温ON」
@karaage0703 現在の温度は18.8度 湿度は33.4% 気圧は1016.5hPa です
— lemon_chan_bot (@lemon_chan_bot) 2017年2月11日
BotがTwitter経由で室温を教えてくれました。
まだ、寒いのでしばらく待ってもう一度話しかけます。
@karaage0703 現在の温度は20.4度 湿度は31.6% 気圧は1016.5hPa です
— lemon_chan_bot (@lemon_chan_bot) 2017年2月11日
だいぶあったかくなりましたね。
これで、重い腰を上げてぬくぬくした布団からホカホカした書斎に移動ができます。
と、まあこんな感じのことが可能になります。他にも例えば、外から帰ってきたとき、家に近づいたらSiriたん経由で部屋のエアコンを動かして家に帰るまでに適度な温度にしておく、といったようなことも可能になります。
これ以降、このような仕組みをどうやって実現するかの説明とやってみて感じたこと等になります。例によってわからない人には宇宙語が続きますので興味ある方のみご覧下さい。
自宅IoTのセットアップ方法
ここから自宅IoTのセットアップを説明していきます。
必要なハードウェア
Raspberry Pi 3。今回はRaspberry Pi 3でやりましたが、Raspberry Pi2でも多分Raspberry Pi Zeroでもできると思います。必要な周辺機器やセットアップは以下記事を参照ください。
iPhone(iOS10以上が必要)
iRMagician 赤外線送受信モジュールです。
VIR-USB赤外線学習リモコンセット(iRMagicianで認識できなかったリモコンのために使用)
秋月電子のBME280モジュール AK-BME280
Apple TV(家の外から制御する場合に必要。無くてもOK)
Raspberry Piセットアップ
まずは、Raspberry Piをセットアップします。例によって下記記事参照に基本的なセットアップを完了させてください。
その後、以下コマンドで自宅IoTのために必要なライブラリをインストールしていきます。
$ sudo apt-get install libavahi-compat-libdnssd-dev $ wget https://nodejs.org/dist/v4.3.2/node-v4.3.2-linux-armv6l.tar.gz $ tar -xvf node-v4.3.2-linux-armv6l.tar.gz $ cd node-v4.3.2-linux-armv6l $ sudo cp -R * /usr/local/
以下コマンドでインストールされていることを確認しましょう。以下のようにバージョン表示されればOKです。
$ node -v v4.3.2 $ npm -v 2.14.12
ここでインストールしたのは、この後インストールするhomebridgeに必要なnode.jsというものです。気になる方はnode.jsで調べてみるとよいかと思いますが、特に気にしなくてもOKです。私も気にしてないので、node.jsが何か全然分かっていません。
homebridge/homebridge-cmd インストール
続いて、homebridgeという、Raspberry PiとAppleの「Home Kit」というネット経由で家電を制御する仕組みとRaspberry Piを橋渡しするソフトをインストールします。必要なライブラリがインストールされていれば、以下コマンドでインストールできます。
$ sudo npm install -g homebridge
ついでに、homebridgeでコマンドラインを実行させるhomebridge-cmd
プラグインをインストールします
$ sudo npm install homebridge-cmd -g
これで、Raspberry PiにHomebridgeがインストールされました。
irMagician
続いて、irMagicianという赤外線送受信モジュールを使います。以前、リモコンを使ったシンセサイザを作ったりしました。
Raspberry Piで以下コマンド実行して必要なライブラリを事前にインストールしてください。私の場合は既にインストール済みでした。
$ sudo apt-get install python-pip $ sudo pip install pyserial
以下でirMagician用のクライアントソフトをダウンロード
$ git clone https://github.com/netbuffalo/irmcli.git
これで準備ができたので、リモコンを学習させます。Raspberry PiとIRMagicianを接続して、以下のようにライトのリモコンをIRMagicianに向けます。
この状態で以下のコマンドをうった直後に、ライトのリモコンをオンにします。
$ sudo python irmcli.py -c Capturing IR... ... 88
上記のように表示されたらOK
続いて、動作確認。irMagicianをライトに向けて以下のコマンドを入力します。
$ sudo python irmcli.py -p
Playing IR...
... Done !
これでライトが点灯すればOK
以下コマンドで、学習させたリモコンの信号をファイルに書き出します。
$ sudo python irmcli.py -s -f light_on.json Saving IR data to light_on.json ... Done !
ファイルに書き出しておけば、以下のようにファイルを読み込むことで好きなリモコンの信号を呼び出します。
$ sudo python irmcli.py -p -f light_on.json Playing IR with light_on.json ... ... Done !
同じ要領で、制御したい家電(エアコン、テレビ等リモコンで制御できる機器)を好きなだけ学習させてファイルに書き出しておきましょう。
homebridge設定と起動
ここでいよいよhomebridgeを起動して、iPhoneから家電を制御してみようと思います。設定ファイルを作成するため、Raspberry Piのハードウェアアドレスを調べます。以下コマンドを実行します。
$ ifconfig
ずらずらずらと表示されますが、ハードウェアアドレスのところをメモってください
wlan0 Link encap:イーサネット ハードウェアアドレス b8:27:eb:ed:6b:08 inetアドレス:192.168.10.105 ブロードキャスト:192.168.10.255 マスク:255.255.255.0
以下の設定ファイルのusername
のところに、上記のハードウェアアドレスを入力します。また、accessary
のところには、先ほどのリモコン制御に使ったコマンドを入力します。
{ "bridge": { "name": "Raspi3_Jules", "username": "B8:27:EB:ED:6B:08", "port": 51821, "pin": "031-45-155" }, "description": "Living Room", "accessories": [ { "accessory": "CMD", "name": "照明", "on_cmd": "sudo python /home/pi/GitHub/irmcli/irmcli.py -p -f /home/pi/GitHub/irmcli/light_on.json", "off_cmd": "sudo python /home/pi/GitHub/irmcli/irmcli.py -p -f /home/pi/GitHub/irmcli/light_on_mid.json" } ] }
続いて、homebridgeを起動します。homebridgeというコマンドを入力すると、以下のようにずらずら表示されます。
$ homebridge *** WARNING *** The program 'node' uses the Apple Bonjour compatibility layer of Avahi. *** WARNING *** Please fix your application to use the native API of Avahi! *** WARNING *** For more information see <http://0pointer.de/avahi-compat?s=libdns_sd&e=node> *** WARNING *** The program 'node' called 'DNSServiceRegister()' which is not supported (or only supported partially) in the Apple Bonjour compatibility layer of Avahi. *** WARNING *** Please fix your application to use the native API of Avahi! *** WARNING *** For more information see <http://0pointer.de/avahi-compat?s=libdns_sd&e=node&f=DNSServiceRegister> [2017-02-08 23:58:37] Loaded plugin: homebridge-cmd [2017-02-08 23:58:37] Registering accessory 'homebridge-cmd.CMD' [2017-02-08 23:58:37] --- [2017-02-08 23:58:37] Loaded config.json with 1 accessories and 0 platforms. [2017-02-08 23:58:37] --- [2017-02-08 23:58:37] Loading 1 accessories... [2017-02-08 23:58:37] [照明] Initializing CMD accessory... Scan this code with your HomeKit App on your iOS device to pair with Homebridge: ┌────────────┐ │ 031-45-155 │ └────────────┘ [2017-02-08 23:58:37] Homebridge is running on port 51821.
Raspberry Piはこの状態でOK。ちなみにここらへんの設定は、ほぼ参考サイトのままです。
homebridge自動起動設定
Raspberry Piを起動するたびにhomebridgeを起動するのも面倒なので、電源を入れると自動で起動してくれると便利ですね。いくつかやり方があるみたいですが、私は一番簡単な /etc/rc.local
を使う方法にしました。
まずは、以下コマンドでScreen
をインストールします(既にインストールされているかもです)
$ sudo apt-get update $ sudo apt-get install screen
あとは/etc/rc.local
をエディタで開きましょう。下記はvimエディタで開く例です
$ sudo vim /etc/rc.local
/etc/rc.local
のexit 0
という行の直前に以下を追加すればOKです。
su -c "screen -dmS homebridge homebridge" -s /bin/sh pi
Raspberry Piの自動起動の仕組み自体は、以下の記事を参考にして見てください。 http://hendigi.karaage.xyz/2016/11/auto-boot/
また、Homebridgeを自動起動させる他の方法に関しては、以下公式情報を参照しましょう(英語ページになります)。
Running Homebridge on a Raspberry Pi · homebridge/homebridge Wiki · GitHub
Siriと連携
ここから、いよいよSiriとの連携です。iPhoneでホーム
アプリを起動します。もしなければ、おそらくiOSのバージョンが古いので、iOS10以上にアップデートしてください。
起動すると、以下のようにRaspberry Piが見つかります。
タップすると次のような画面が表示されるので、次へをタップ
次のように表示されたら、完了をタップ
ホームアプリに照明が無事追加されたらOK
ここで、Siriに「照明をオン」もしくは「照明をオフ」と話しかける
正しく連携できていれば、これで照明をSiri経由で制御できるようになります。
ここで使う「照明」といった機器の名前、参考にしたサイトによっては決められたものしかダメという情報もあったのですが、homebridge
の設定ファイルのname
のところに好きな名前をつければ、私が試した限りでは日本語含むどんな名前でもいけそうでした。ちなみに、私が試したのは「書斎」「室温」という名前をつけて、「書斎をオン」としたら書斎のエアコンと電気をオンすることができました。
VIR-USB赤外線学習リモコンセット
irMagicianで色々な機器を学習させていたのですが、日立のエアコンが学習できませんでした。ネットで調べたら、日立のエアコンは信号が長く学習が難しいタイプのようです。絶望しかけたのですが、家にたまたま、OMMF2016で購入したVIR-USB赤外線学習リモコンセットが転がっていたので試してみることにしました。基本的には、一般販売はしていないようです。説明書は以下になります。
こんなキットで販売していました
自分で半田付けする必要があります。スイッチが1個足りなかったので手持ちのやつを使いました
完成!
ソフトウェアのダウンロードは以下からできます。今回は、Raspberry Pi用のソフトをダウンロード
VIR-USB 接続赤外線学習リモコン - PukiWiki
ダウンロードしたファイルを、Raspberry Piに移動したら、以下コマンドを実行して、ソフトを使えるようにしましょう。
$ unzip V-IR-raspi-27.zip $ chmod 755 V-IR
学習したリモコン信号のファイルへの記録は以下
$ sudo ./V-IR R living_aricon_on.ir
記録したファイルを読み出すには以下
$ sudo ./V-IR S living_aricon_on.ir
このモジュールだと、難関だった日立のエアコンでも難なく学習することができました!あとは、iRMagicianと同様の要領でHomebridgeを使ってSiri経由からリモコンを操作できるようになります。
気をつけることとしては、連続して2つのコマンド実行する(例えば、エアコンをオンした直後にライトを点けようとする)と、デバイスエラーが発生することです。1秒程度間にsleepを挟んでやることで回避しました。
VIR-USBのソフトのライセンスに関して
VIR-USBのソフトのライセンスが気になっていたので、作者さんとtwitterでやりとりしたところ、なんとソフトの再配布はOKとのことです。これで更に便利に使えますね!早速自分のGitHubのリポジトリにアップしてしまいました。
@karaage0703 ソフトのライセンスについては何も考えていませんでした。再配布も改造も全く問題ありませんので、ご自由にやっていただいて OK です。
— milkaulait (@milktolait) 2017年3月3日
室内温度・湿度を取得してtwitter経由で通知
続いて、Siri経由で室内の温度・湿度・気圧を取得してtwitter経由で通知できるようにします。といってもやったことは、ほぼ以下のままです。
こんな感じになりました。
記事を参考に、tweet_sensor_data.py
というコマンドで温度・湿度をtweetできるようにしたら、homebridgeの設定ファイルに以下のようにアクセサリを追加するだけでOKです。
"accessory": "CMD", "name": "室内温度", "on_cmd": "python ~/home-iot/tweet_sensor_data.py" , "off_cmd": "python ~/home-iot/tweet_sensor_data.py"
これで「室内温度オン」とSiriたんに言うと、室内温度・湿度・気圧をbotがツイートしてくれます。ちなみに「室内温度オフ」とSiriたんに言っても同じようにツイートしてくれます。これはhomebridgeに基本オンとオフのコマンドしかないため、そのような仕様にしています。
同様の要領で、「室内写真オン」で部屋の写真を撮影してtweetするといったことも簡単にできます。
今回はtwitterで通知しますが、あまり公開したくないプライベートな内容もあると思いますので、その場合はLINEやSlackなどで通知させるようにすればよいかなと思います(やり方は検索すれば色々出てくると思います)。サービスの連携が面倒くさければ、単純にメールを送るとかでもよいかもしれませんね。
Apple TVを使って家の外から機器操作
すみません、実はこれはまだ試せていません。家に第三世代の使ってないApple TVがあるのでいずれやってみる予定です。以下を参照にすればできる(はずです!)
Raspberry PiとSiriで家電の音声制御 おまけ Apple TVを使った宅外制御 | MUDAなことをしよう。
また、試せたら追記します。これで家の外からでもRaspberry Piにつながった機器やセンサの操作が可能になる(はず!)
気づいたこと・問題点
やはり自分で実際にやってみると気づいたこととか問題点が色々ありました。
- Siriの音声認識での操作はわりと便利
- 学習リモコンは使用するモジュールによってうまく学習できない場合もあるから注意
- 複数機器制御するとき、モジュールの置く位置と電源の引き回しが悩ましい
Siriの音声認識での操作はわりと便利
iPhoneのSiriは、天気予報とかでたまに使ったりしていたのですが、デバイスが操作できると結構便利ですね。今後音声認識での機器操作はトレンドになってくるかもしれませんね。CEREVOの社長さんによるとAmazon Alexaが来そうとのことですが、日本は取り残されそうな感じですね。
学習リモコンは使用するモジュールによってうまく学習できない場合もあるから注意
学習リモコン学習できなかったときは、かなりテンション下がって挫折しそうになりました。ネットで情報多いのはIRKitというデバイスを使う例です。
このデバイスの方式は、ほとんどのリモコンを学習できるようなので良さそうです。きちんとパッケージングされているのも使いやすくてよいですね。Raspberry Pi+Homebridgeにも対応しているので、Siri連携も簡単にできる(ようです)。私は、手持ちにデバイスがあったので今回は購入しませんでしたが、0からやるならこちらの方がよいかなと思います。
複数機器制御するとき、モジュールの置く位置と電源の引き回しが悩ましい
つらいなと感じたのは、Raspberry Piでリモコンを制御するときの電源の引き回しです。複数の機器を制御する場合、リモコンの指向性の関係で置ける場所が制限されてしまいます(理想的には部屋の真ん中になる)。家電機器の方がHomekitなり、Amazon Alexaなりのプラットフォームに対応してくれれば一番良いのですが、そうそう家電を買い換えるものでもないですし、日本だと機器が対応するのに何年かかるやら…なので、当分(10年くらい?)は、こうやってハックするしかないのかなと思っています。
単三電池2個くらいで2年くらいもつIRKitみたいなデバイスで、小さくて安いやつがあれば最高なんだけどと思ったり。BLEとか使えば技術的にはできそうな気はしますが…悩ましいです。
まとめ
というわけで何番煎じか分かりませんが、自宅IoTやってみました。Raspberry Piの設定から含めて1から説明して、センサ情報の取得までやっている記事はそこまでないようだったので、多少は意味ある記事になった(と思いたいです)。
今回作成したもの(といっても学習したデータや、設定ファイルがほとんどですが)は、GitHubにアップします。
リモコンの学習データは、それぞれの家庭の機器に合わせて作成し直さないと意味ないと思いますが、設定ファイルに関しては参考になることもあるのではないかなと思います。こうやって自分の家庭に合わせて1家庭に1リポジトリあると便利そうですね。
で、実際のところ使っているかというと、前述の電源をどう引き回すかの悩みなどがあり、実は今のところ使っていません。正直やることに対してセットアップも大変ですし、自分でスイッチ押すかタイマーかければ良いじゃんという話もあります(それを言ってしまうと身も蓋もないですが)。
ただ、Siri経由でRaspberry Piをどこからでも操作できるRaspberry Pi+Homebridgeの組み合わせは色々できそうな可能性を感じたので、何か思いついたら家電制御に限らず色々試していきたいなと思います。
リンク:Raspberry Pi 3
リンク:irMagician
リンク:BME280使用センサモジュール
リンク:IRKit
参考リンク
node.js関連
Installing Node.js on a Raspberry Pi 3
Installing Node.js v4.0.0 on a Raspberry Pi (All Models)
irMagician単体
irMagicianで家電制御に挑戦してみた | がじノート | gaji's notebook, gadget & PC & Photo
irMagician + Raspberry Pi + homebridge
irMagician + Raspberry Pi + HomeKitで家電を遠隔&音声制御する - YSNHatenaBlog
iOS10「ホーム」アプリと「Raspberry Pi + irMagician」でお手軽家電操作。 - Qiita
IRKit + Raspberry Pi + homebridge
Siri - Raspberry Pi - iRKit でエアコン操作 - rochefort's blog
Siri + IRKit + Homebridge でエアコンを操作すると快適 - rochefort's blog
https://datahotel.io/archives/725
homebridge
Running Homebridge on a Raspberry Pi · homebridge/homebridge Wiki · GitHub
Raspberry Piで先取りHomekit Vol.3 | ウダ2Blog
おうちハック
おうちハックはどこから来て、どこへ行くのか - yumulog
おうちハック Advent Calendar 2016 - Qiita
子どもがいる家庭で使うRaspberryPi&Slack | もやし工房
おうちで使っているhomebridgeプラグイン一覧 - ワタナベ書店
[おうちハック]Amazon Dash Button をお風呂場で使う呼び出しボタンとして使う - たるこすの日記
GOROmanさんのおうちハック #おうちハック - Togetter