Raspberry Pi 2で実現するスマートハウス

2017年3月30日

Raspberry Pi 2を使った我が家の自動化システムを紹介します。
ひとり暮らしの1Kマンションでやっています。活用例の一つとしてご覧ください。

やっていること

  • 外出時にリモコンのボタンで照明が消灯し、「いってらっしゃい」と喋る
  • 帰宅時にリモコンのボタンで照明が点灯し、「おかえりなさい」と喋る
    • リモコンのボタンを押さなくてもiPhoneの存在が検知できれば帰宅したと見なす
    • リモコンが万一機能しなくてもNFCタグのタッチで同じ事ができる
  • リモコンの[PC起動]ボタンを押すとデスクトップPC、液晶ディスプレイ、DAC(アンプ)の電源が一斉に入る
  • リモコンの[TV起動]ボタンを押すとTVチューナー、液晶ディスプレイ、DAC(アンプ)の電源が一斉に入り、自動でNHKが選局される
  • リモコンでエアコンとサーキュレーターを同時にON/OFFできる
  • 朝になると外気温と室温、湿度などを声で教えてくれる
  • 日の出・日の入り時に鐘の音を流す
  • 夜7時になるとNHKラジオの7時のニュースが流れる
  • 寝る時間が近づくと直接照明が間接照明に変わる
  • メンテナンス時にリモコンでRaspberry Piの電源を落とせる

以下で順に説明していきます。

構成

全体構成図

使っているもの

  • Raspberry Pi 2 Model B (5,500円くらい)
    • Bluetoothアダプタ
    • Wi-Fiアダプタ
  • HUIS REMOTE CONTROLLER (25,000円)
    ボタン配置をカスタマイズできる学習リモコンです
  • Philips Hue (22,464円)
    ネットワークに接続して使うAPI付きLED照明です
  • netatmo Weather Station (17,280円)
    気温や湿度を10分ごとに記録してくれるデバイスです
  • IRKit (7,700円)
    据え置きして使うAPI付き学習リモコンです
  • Bluetoothスピーカー (3,000円くらい)
  • NFCリーダー(PaSoRi) (2,605円)
  • NFCタグ (10枚入り1,319円)
  • 赤外線センサ (100円)
  • iPhone
    ※在宅検知用

プログラムは基本的にシェルスクリプトで、一部Pythonも使っています。

各機能の解説

ここからは各機能についてやっていることを説明していきます。

在宅管理

  • 外出時にリモコンのボタンで照明が消灯し、「いってらっしゃい」と喋る
  • 帰宅時にリモコンのボタンで照明が点灯し、「おかえりなさい」と喋る
    • リモコンのボタンを押さなくてもiPhoneの存在が検知できれば帰宅したと見なす
    • リモコンが万一機能しなくてもNFCタグのタッチで同じ事ができる

このシステムの目玉、在宅管理システムと照明の連動です。

我が家の照明はシーリングライト(直接照明)とPhilips Hue(間接照明)があります。外出時はどちらの照明が付いていようと強制的に消灯します。帰宅時はシーリングライトかHueのどちらかを点灯させます。夕方~夜はシーリングライト、遅い時間(寝る時間が近い場合)はHueです。
我が家のシーリングライトはリモコンに対応していなかったため、リモコンスイッチを後付けして制御可能にしました。これを付けた分天井との間に隙間が空いて地震の時などに危なっかしいです。発泡スチロールを挟んで揺れを吸収するようにしていますが、それでも不安定になるのでオススメはしません。

無理やりリモコンスイッチを挟んだシーリングライトの裏側

Raspberry PiがIRKitのAPIを叩き、IRKitからシーリングライトへON/OFF信号を送ります。Hueは直接Raspberry PiがAPIを叩いています。
シーリングライト(直接照明)のとき

Hue(間接照明)のとき

「いってらっしゃい」と喋るのはフリー素材として公開されている声データを使用しています。MP3を再生するだけです。元々はOpenJTalkで合成音声を都度生成していたのですが、我が家に来た人が「声が気持ち悪い」というので変更しました。
赤外線リモコンによる制御の実現方法はこちらの記事を、NFCタグによる制御の実現方法はこちらの記事を参照してください。
帰宅の自動検知はいつも持ち歩いているiPhoneの存在をBluetooth経由で確認することで実現しています。外出してから30分間待機して、その後ポーリング(hcitool使用)を開始し、存在が確認されたら帰宅とみなして照明を点灯します。無駄なポーリングを抑えるために待機処理は不在時のみ行います。
10秒ごとにポーリングしていて、うちの環境だとだいたい玄関の扉を開けた瞬間に検知してくれるので、暗くなった部屋に入らないで済みとても便利です。

PC周りの一斉電源ON

  • リモコンのボタンを押すとデスクトップPC、液晶ディスプレイ、DAC(アンプ)の電源が一斉に入る

液晶ディスプレイとDACは赤外線リモコンで制御できるため、IRKitに信号を学習させ、Raspberry PiからAPIを叩くようにしています。PCの電源ONはWake on Lan(WoL)を利用しています。

TV周りの一斉電源ON

  • リモコンのボタンを押すとTVチューナー、液晶ディスプレイ、DAC(アンプ)の電源が一斉に入り、自動でNHKが選局される

我が家にはTVがなく、TVチューナーと液晶ディスプレイとDACが分担してTVとして機能しています。いずれも赤外線リモコンが使えるのでIRKitに信号学習させて一斉制御しています。液晶ディスプレイもDACも外部入力が複数ありセレクター機能を備えているので、どの端子がセレクトされていようとTV用のセレクトに戻す必要があります。そのため電源を入れた後にセレクト信号を送るまで、sleepを挟みながら順番に信号を送るようにしています。
このシステムが動くまではHUISをいちいち機器に向けて複数のボタンを押していました。HUISにはマクロ機能がありますが、正確に受光口に向けないと機能しない機器があるのであまり頼りになりませんでした。

エアコン周りの一斉電源ON/OFF

  • リモコンでエアコンとサーキュレーターを同時にON/OFFできる

サーキュレーターと書いてますが実際には扇風機を使っています。エアコンも扇風機もIRKitに信号学習させています。
もしエアコンの細かい機能を使おうとすると現在状態の管理が必要になって非常に面倒くさいのですが、我が家では全部の設定を[自動]に固定していて温度設定だけをチョコチョコいじるだけなので状態管理を入れなくてもあまり困っていません。
在宅管理と連動させていません。短い外出の場合など、必ずしもエアコンをOFFにする場合だけではないからです。

温度を声でお知らせ

  • 朝になると外気温と室温、湿度などを声で教えてくれる

netatmo connectにアップロードされている我が家の気温情報をAPIで取得し、それをOpenJTalkでメイさんが喋ってくれます。実現方法はこちらを参照してください。
cronで定時に実行されるようにしています。リモコンでもトリガーできます。不在時は起動しません。
外気温と室温の差に応じてエアコンを制御しようとしたのですが断念しました。人がやる時は今後の外出予定や今後の天気の見込みなどで判断するため、ルール化ができませんでした。
湿度に応じて加湿器を制御したいのですが、我が家にある加湿器はリモコンに非対応なので不可能でした。将来balmudaのRainを買うようなことがあればいじりたいと思います。

日の出・日の入りの管理

  • 日の出・日の入り時に鐘の音を流す

ビットラボのAPIから緯度経度に応じた日の出・日の入りの時間を取得できるので、現在時刻と比較して判定する処理を行っています。我が家のある東京だと日の出は4:20~7:00頃、日の入りは16:20~19:10頃の範囲に収まるので、処理もその間で起動する設定にしています。不在時は起動しません。

NHKラジオの再生

  • 夜7時になるとNHKラジオの7時のニュースが流れる

NHKネットラジオらじる★らじるが流れます。cronで起動させています。リモコンでトリガーを引くこともできます。不在時は起動しません。
実現方法はこちらの記事を参照してください。
リモコンのボタンを押してから再生開始・停止に数秒の時間がかかるので、リアクションとなる音を鳴らしてから再生開始・停止するようにしています。

照明の切り替え

  • 寝る時間が近づくと直接照明が間接照明に変わる

cronで起動させています。リモコンでトリガーを引くこともできます。不在時は起動しません。

リモートシャットダウン

  • メンテナンス時にリモコンでRaspberry Piの電源を落とせる

開発やメンテナンス時のための機能です。定位置に置いたり卓上に置いたり電源をON/OFFさせる必要があるときにいちいちターミナル開いてシャットダウンして……というのが面倒なのでリモコンでトリガー引けるようにしました。本当にシャットダウン中なのか分かりにくいので、認識したらまず音を鳴らしてからシャットダウン処理に入るようにしています。

そのほか

このシステム、セキュリティリスクを考慮して外部からのアクセスは受け付けていません。やるとすれば帰宅が近づくとエアコンがONになる仕組みなんかを作りたいですが、今のところ後回しになっています。
うまくやればRaspberry Pi 2に赤外線発信機能を付けてIRKitをお払い箱にできるのですが、先にIRKitを導入していて、家電をすべて制御できるベストポジションに設置してしまっているのでそのままシステムに組み込んでいます。Raspberry Pi本体の設置場所が制限を受けないのでこれはこれで満足しています。

断念したこと

在宅管理とエアコンの連動
前述の通り、短い外出の場合などで必ずしもエアコンをOFFにする場合だけではないのでルール化できませんでした。
朝になると自動でカーテンを開け、夜になると閉める
ニトリの電動カーテン(12,072円)を購入しましたが、非力すぎて満足に開け閉めできませんでした。カーテンが重いのかと思って薄くて軽いのを買ったのですけどそれでもダメだったようで、現在は家の片隅でホコリを被っています。
常に身につけているFitbit ChargeHRを帰宅判定デバイスに加える
そもそもコイツのMACアドレスをどうやって確認すればよいのか分かりません。誰か教えてください。
スマートロックの導入
まだ現在の技術では解錠に時間がかかるらしいのと、そもそも誤作動した場合どちらに転んでも困るのが確実なので見送りました。

やろうとしていること

  • 一定以上の地震を検知したらNHKラジオを再生する
  • Bluetoothリモコンでの制御
    いちいち赤外線リモコンを一定の方向に向けるのが面倒
  • Juliusを使った音声認識
    真夜中に起きたときなど、暗い中リモコンを探し回るのが面倒なので声で操作したい
  • HomeKitを使った音声認識
    いまのところ使いどころのないSiriに出番を与えたい

こんな感じで置いています


テーブルの下にダイソーで買ってきたワイヤーネットを置き、ワイヤーカゴを2つぶら下げて、Raspberry Piとスピーカーをそれぞれ収納しています。合計324円。
通信はすべて無線(Wi-Fi/Bluetooth/赤外線)なので、接続されているのは電源用USBケーブルのみです。無線だと取り回しが良くて楽ですね。
カゴから取り出すとこんな感じ。
上に長く伸びているのは赤外線センサです。

Raspberry Pi 2の外観

Raspberry Pi 2には無線機能がないため、後付けでWi-FiアダプタとBluetoothアダプタを刺しています。NFCリーダーと合わせるとUSB端子4個中3個まで埋まってしまっています。
こちらはHUIS REMOTE CONTROLLERのボタン配置です。よく使うボタンはほぼ一画面にまとめています。

関連

Raspberry Pi 2からBluetoothでスピーカーに音を飛ばす
Raspberry Pi 2でNFCタグを読み取って音を鳴らす
Raspberry Pi 2とnetatmoで室温を声でお知らせ
Raspberry Pi 2を赤外線リモコンで操作可能にする
Raspberry Pi 2をリモコン操作してNHKラジオを聴く

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です