Raspberry Pi をスマートリモコン化 -その2-

Raspberry Pi をスマートリモコン化 -その1-」では、赤外線学習リモコンボード RPi-IREX の設定方法を紹介しましたが、今回はその続きで iPhone の Siri を使った音声入力によって  RPi-IREX をコントロールし、テレビや照明を操作できるようになるまでの設定方法を紹介します。

まず、iPhone の Siri を使うことで音声で HomeKit 対応アクセサリをコントロールすることができます。RPi-IREX 自体は HomeKit に直接対応していないのですが、RaspberryPi で Homebridge を動かすことで HomeKit に対応することができ、Siri から RPi-IREX をコントロールして、テレビや照明をつけたり、消したりすることができるようになるわけです。

では、Homebridge の設定を始めましょう。

目次

前置き:

当初、ラトックさんのダウンロードページに Homebridge の設定方法が載っていなかったので、自分で調べて対応したのですけれども、後日 GitHub の方に Homebridge の設定があることを見つけました。

ラトックさん、せっかく資料を用意されているのに置いてある場所が分かりづらくて勿体無いですよ。

その場所はこちらです。内容は自分で調べた設定方法とほぼ同じものでした。

https://github.com/ratocsystems/rpi-irex/tree/master/homebridge

分かりやすい資料なので、こちらを見れば設定できるかと思いますが、自分で調べた設定方法も記載しておきます。(一部内容が異なります。)

 

Homebridge の設定:

 

Node.js アップデート:

Node.js をアップデートします。

$ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
$ sudo apt-get install -y nodejs

 

Avahi のインストール:

Homebridge の前に Avahi をインストールします。

$ sudo apt-get install -y libavahi-compat-libdnss

 

Homebridge のインストール:

Homebridge をインストールします。

$ sudo npm install -g --unsafe-perm homebridge

 

homebridge-cmd プラグインのインストール:

RPi-IREX  は、homebridge-cmdプラグインを使ってコントロールすることにしますので、homebridge-cmdプラグインをインストールします。

$ sudo npm install -g homebridge-cmd

 

Homebridge 起動確認:

Homebridge が起動できることを確認します。

$ homebridge  
      :
Scan this code with your HomeKit app on your iOS device to pair with Homebridge:
      :
    QR code
      :
Or enter this code with your HomeKit app on your iOS device to pair with Homebridge:

    ┌────────────┐
    │ 031-45-154 │
    └────────────┘

QR コードと PIN コードが表示されればOKです。(ここでは、QR コードを省略しています。)

起動確認ができれば、「Ctrl+C」 で終了します。

 

config.json 設定:

Homebridge の設定ファイルである config.json を作成していきます。

赤外線リモコン信号ファイルを作成:

ここでは、テレビと照明とエアコン(暖房)の電源オン/オフに対応することにします。

以下、root で /root/RPi-IREX で作業を行います。

$ sudo su
# cd /root/RPi-IREX

 

なお、「RaspberryPi をスマートリモコン化 -その1-」でも使った irexIn.py, irexOut.py は /root/RPi-IREX に存在するものとします。

 

テレビ:

テレビの電源ボタンの赤外線リモコン信号ファイルを作成します。

テレビの場合、電源オンとオフはリモコンの同じボタンですので、下記のコマンドを入力後にテレビのリモコンの電源ボタンを押して、オンとオフ共通の赤外線リモコン信号ファイルを作成します。

# python3 irexIn.py -d /dev/ttyS0 -f tvOn.json

テレビの場合、赤外線リモコンでは残念ながらオンとオフの区別はできません。

 

照明:

照明の赤外線リモコン信号ファイルを作成します。

手元の照明の場合、電源オン(全灯)とオフ(消灯)はそれぞれリモコンの別のボタンに割り当てられています。このため、オンとオフそれぞれの赤外線リモコン信号ファイルを作成しました。

# python3 irexIn.py -d /dev/ttyS0 -f lightOn.json
# python3 irexIn.py -d /dev/ttyS0 -f lightOff.json

照明によっては、電源オンとオフがテレビと同じように同じリモコンのボタンに割り当てられている場合もあります。この場合は、TV と同じようにオンとオフの区別はできません。(もちろんですが、赤外線リモコンが付属しない照明機器では、コントロールできません。)

 

エアコン:

エアコンの赤外線リモコン信号ファイルを作成します。

エアコンの場合、テレビや照明と異なり、赤外線リモコン信号はかなり複雑なものになっています。電源オンボタンも、単純に電原をオンする信号だけではなく、暖房と冷房で異なりますし、温度設定、風向きなどの信号も含まれます。また、2回信号を送って両方共届いた場合に受け付けるようになっているため、他と比べてエアコンの信号は長くなっています。

エアコンの赤外線リモコン信号を学習する前に、リモコンの風向きや温度設定を行っておきます。その上で、赤外線リモコン信号ファイルを作成します。(暖房のオンとオフ)

# python3 irexIn.py -d /dev/ttyS0 -f airconOn.json
# python3 irexIn.py -d /dev/ttyS0 -f airconOff.json

 

config.json 作成:

/root/.homebredge/config.json を以下の内容で作成します。

{
    "bridge": {
        "name": "Homebridge",
        "username": "00:00:00:00:00:00",
        "port": 51826,
        "pin": "031-45-154"
    },
    "accessories": [
        {
            "accessory": "CMD",
            "name": "TV",
            "on_cmd": "/usr/bin/python3 /root/RPi-IREX/irexOut.py -d /dev/ttyS0 -f /root/RPi-IREX/tvOn.json",
            "off_cmd": "/usr/bin/python3 /root/RPi-IREX/irexOut.py -d /dev/ttyS0 -f /root/RPi-IREX/tvOn.json"
        },
        {
            "accessory": "CMD",
            "name": "light",
            "on_cmd": "/usr/bin/python3 /root/RPi-IREX/irexOut.py -d /dev/ttyS0 -f /root/RPi-IREX/lightOn.json",
            "off_cmd": "/usr/bin/python3 /root/RPi-IREX/irexOut.py -d /dev/ttyS0 -f /root/RPi-IREX/lightOff.json"
        },
        {
            "accessory": "CMD",
            "name": "aircon",
            "on_cmd": "/usr/bin/python3 /root/RPi-IREX/irexOut.py -d /dev/ttyS0 -f /root/RPi-IREX/airconOn.json",
            "off_cmd": "/usr/bin/python3 /root/RPi-IREX/irexOut.py -d /dev/ttyS0 -f /root/RPi-IREX/airconOff.json"
        }
    ]
}

 

なお、username は、実行環境の MAC アドレス(ただし、大文字)に差し替えて下さい。以下のコマンドで大文字に変換した MAC アドレスが得られます。

# cat /sys/class/net/eth0/address | tr '[:lower:]' '[:upper:]'

 

ここでは、”TV”, “light”, “aircon” の名前で3つの accessory を定義しています。それぞれの accessory は、homebridge-cmd プラグイン(accessory が CMD)を使用します。homebridge-cmd プラグインでは、オンの時に実行するコマンドを on_cmd に、オフの時に実行するコマンドを off_cmd に設定することができます。そのため、on_cmd, off_cmd に  irexOut.py でそれぞれの赤外線信号を送信するコマンドを設定します。

 

Homebridge の起動:

準備が整ったので、Homebridge を root で起動します。

# homebridge

 

 

ホームアプリケーションの設定:

iPhone の Wi-Fi を Homebridge を起動している RaspberryPi と同じネットワークに接続します。

 

Homebridge の登録:

「ホーム」アプリケーションを起動します。

 

 

アクセサリを追加します。

Homebridge 起動時に表示される QRコードを撮影して登録するか、「コードを手動で入力」をタップしてコードを手入力します。(私はコードの入力の方で登録しました。)

Homebridge を登録する際に「このアクセサリは認定されていない…」とメッセージが出ますが、「このまま追加」を選びます。これで、Homebridge がホームアプリケーションに登録されました。

Homebridge  の場所をここではリビングルームに設定しています。

  • 部屋: リビングルーム

 

アクセサリにライトとテレビと暖房が登録されます。

それぞれのアクセサリの名前、部屋、タイプを編集します。

 

ライトアクセサリの設定:

  • 名前: ライト
  • 部屋: リビングルーム
  • タイプ: ライト
  • よく使う項目に含める: オン

 

 

部屋は、「ダイニングルーム」「キッチン」「ベッドルーム」等、幾つかの候補がリストアップされていますが、ここでは「リビングルーム」を選択します。

 

タイプは「ライト」「ファン」「スイッチ」の3種類から選べます。ここでは「ライト」を選択します。

 

 

テレビアクセサリの設定:

  • 名前: テレビ
  • 部屋: リビングルーム
  • タイプ: スイッチ
  • よく使う項目に含める: オン

 

 

暖房アクセサリの設定:

  • 名前: 暖房
  • 部屋: リビングルーム
  • タイプ: スイッチ
  • よく使う項目に含める: オン

 

 

ホームアプリケーション:

 

マイホーム:

よく使うアクセサリに「ライト」「テレビ」「暖房」を登録しています。それぞれのアクセサリをタップすることで、オン/オフを切り替えることができるので、動作確認してみましょう。

 

注意点としては、赤外線リモコンのコントロールでは、ライトやテレビ、エアコンの状態を取得することはできないので、アクセサリで「オン」の状態になっていても、実際のライトやテレビは「オフ」の場合もあります。そのため、アクセサリに示される状態は信用することはできません。

 

リビングルーム:

リビングルームのアクセサリに「ライト」「テレビ」「暖房」が登録させています。それぞれのアクセサリをタップすることで、オン/オフを切り替えることもできます。

 

コントロールセンター:

iPhone 画面下部から上方向にスワイプすることで、コントロールセンターを表示することができますが、iOS 12.X では、ここにホームアイコンが登録されています。

タップするとよく使うアクセサリが表示されるので、これらをタップすることでライトやテレビ、暖房をつけたり消したりできます。

 

Siri からのコントロール:

Siri の設定を行います。

「設定」>「Siriと検索」の「”Hey Siri”を聞き取る」「ホームボタンを押してSiriを使用」「ロック中にSiriを許可」をオンにします。

これで、iPhone に「Hey Siri, ライトつけて」と話しかけることでライトをつけることができるようになりました。ライトを消す場合は、「Hey Siri, ライト消して」。ただし、テレビは「Hey Siri, テレビオン」「Hey Siri, テレビオフ」と言わないと残念ながら反応してくれません。(これについては -その3- で対応方法を示します。)

 

 

関連記事: