homebridgeでsiriから家電コントロール2


はじめに

本記事はhomebridgeでsiriから家電コントロールの最新版として投稿させてもらいます。
動作環境としてはRaspbianのjessieを想定しています。
大まかな流れは、上記記事を参考に。

以下が最新情報となっています。
説明は、逆の3,2,1と追って説明します。

1.iOS10から登場した「ホーム」に対応
2.homebridge-irkitの最新版に対応(これで長い赤外線コマンドでもOK。エアコンとかも動くよ!)
3.最新インストール作業に対応(それなりに簡略化できたと思う)

最新インストール作業(Step1)

基本に立ち戻り、公式を覗くところからスタートしました。
まずはRunning HomeBridge on a Raspberry Piの記載の流れで実施。

homebridgeの導入に関しては、公式の方法でなく以下で導入。
sudo npm install -g homebridge
基本的には上記で導入できるはず。
homebridgeのパスは/usr/bin/homebridgeになる。

プラグイン類は以下で導入。問題なく入るはず。

sudo npm install -g homebridge-philipshue
sudo npm install -g homebridge-netatmo
sudo npm install -g homebridge-cmd
sudo npm install -g homebridge-irkit
sudo npm install -g homebridge-ifttt

最後に起動スクリプトを作成。
以下を/etc/init.d/homebridgeに配置する。
パーミッションは0755で、最後にsudo insserv -d homebridgeをお忘れなく。

/etc/init.d/homebridge
#!/bin/sh
### BEGIN INIT INFO
# Provides: homebridge
# Required-Start:    $network $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

dir="/home/pi"
cmd="DEBUG=* /usr/bin/homebridge"
user="pi"

name=`basename $0`
pid_file="/var/run/$name.pid"
stdout_log="/var/log/$name.log"
stderr_log="/var/log/$name.err"

get_pid() {
    cat "$pid_file"
}

is_running() {
    [ -f "$pid_file" ] && ps `get_pid` > /dev/null 2>&1
}

case "$1" in
    start)
    if is_running; then
        echo "Already started"
    else
        echo "Starting $name"
        cd "$dir"
        if [ -z "$user" ]; then
            sudo $cmd >> "$stdout_log" 2>> "$stderr_log" &
        else
            sudo -u "$user" $cmd >> "$stdout_log" 2>> "$stderr_log" &
        fi
        echo $! > "$pid_file"
        if ! is_running; then
            echo "Unable to start, see $stdout_log and $stderr_log"
            exit 1
        fi
    fi
    ;;
    stop)
    if is_running; then
        echo -n "Stopping $name.."
        kill `get_pid`
        for i in {1..10}
        do
            if ! is_running; then
                break
            fi

            echo -n "."
            sleep 1
        done
        echo

        if is_running; then
            echo "Not stopped; may still be shutting down or shutdown may have failed"
            exit 1
        else
            echo "Stopped"
            if [ -f "$pid_file" ]; then
                rm "$pid_file"
            fi
        fi
    else
        echo "Not running"
    fi
    ;;
    restart)
    $0 stop
    if is_running; then
        echo "Unable to stop, will not attempt to start"
        exit 1
    fi
    $0 start
    ;;
    status)
    if is_running; then
        echo "Running"
    else
        echo "Stopped"
        exit 1
    fi
    ;;
    *)
    echo "Usage: $0 {start|stop|restart|status}"
    exit 1
    ;;
esac

exit 0

homebridge-irkitの最新版に対応(Step2)

homebridge-irkitのjsonの記載方法が変更になっているので対応する。
ついでに、長い赤外線コマンドも送信できるよう修正されている模様。
知らぬ間に今まで送信できなかった長めのエアコンコマンドまで送信ができた。
irkit_urlirkit_hostになっていた。

1.変更前

config.json
{
    "accessory": "IRKit",
    "name": "Regza",
    "irkit_url": "http://<IRKIT_ADDRESS>/messages",
    "on_form": {"format":"raw","freq":38,"data":[<COMMAND>]},
    "off_form": {"format":"raw","freq":38,"data":[<COMMAND>]}
}

1.変更後

config.json
{
    "accessory": "IRKit",
    "name": "Regza",
    "irkit_host": "<IRKIT_ADDRESS>",
    "on_form": {"format":"raw","freq":38,"data":[<COMMAND>]},
    "off_form": {"format":"raw","freq":38,"data":[<COMMAND>]}
}

iOS10から登場した「ホーム」に対応(Step3)

いよいよ再度の目玉。
iOS10からhomkit標準で対応になった「ホーム」での動作を確認する。

Step1とStep2が完了していれば、何もせずに動作するはず。
コード入力はカメラからの取り込みではなく、手入力をする。(起動スクリプトで起動させているので)

下にスライドさせると、デバイスのダイジェストが表示されるみたい。
このあたりの操作感は標準ならではという感じ。

部屋単位でデバイスを分類すると表示もわかりやすい。

さいごに

iOS10でhomekitにようやく標準で対応してきて、使い勝手も向上していい感じになった。
amazon echoやgoogle homeなど、ライバルが出現してきているのでappleとしても力を入れてきたのかな?と思います。
追記では、色々保留になってるIFTTT連携とかネタを見つけたらやってみるつもりです。