11.08.2016

マイナーツァーゲンのカバン

私のお気に入りTVシリーズのひとつであるHBOのSilicon Valleyで話題になった"マイナーツァーゲンのカバン". 原文では"Meinertzhagen's haversack(マイナーツァーゲンの雑嚢)"と書きます. ここではマイナーツァーゲンとは誰か,その人のカバンが何なのか,そしてTVシリーズ"Silicon Valley"とどうつながっているのかを紹介したいと思います. シーズン3エピソード3のネタバレが含まれているためご注意ください.

マイナーツァーゲンとは誰?

右の方がRichard Meinertzhagen(リチャード・マイナーツァーゲン)少佐です. 生没年は1878-1967. 鳥類学に興味があったようです. 彼は第一次世界大戦にてイギリスの情報部員,いわゆるスパイとして活動していました. 少佐と呼びましたが,今回の主題であるカバンと関わる時期に少佐であっただけで,最終的には大佐にまで昇進しています(1918年8月). 中東ではアラビアのロレンスでおなじみのトーマス・エドワード・ロレンスとも知り合い,後にカバンが絡む作戦を決行するに至ります.

彼のカバンが何なのか?

時は1917年,イギリス軍はオスマン軍の攻撃によりガザ侵攻に失敗,段々と疲弊して行きます. ロレンスとマイナーツァーゲンはエルサレム奪回の足掛かりとしてベエル・シェバ侵攻を提案. ここでイギリス軍は敵であるオスマン軍を出し抜くための偽装工作を行います. マイナーツァーゲンは偽の計画書を入れたカバンを持ち,敵の陣地へ踏み込みました. 敵のパトロール隊に見つかったマイナーツァーゲンは慌てて逃げるフリをしてカバンを置き去りにします.
この時置いていったカバンこそ,今回の主題であるマイナーツァーゲンのカバンです. カバンの中にはベエル・シェバ侵攻は陽動作戦であり,ガザ侵攻が本当の目的であると書かれた偽の計画書に加え,偽の暗号表や個人装備も入れられ,偽物と気づかれないよう入念に偽装されたものでした. また,カバンには事前に馬の血が付けられており,あたかもマイナーツァーゲンが負傷しながらも,命からがら逃げ切ったような演出も施され,見事オスマン軍はこの偽計画を信じ込んでしまいます. ベエル・シェバ侵攻が陽動作戦であると信じたオスマン軍はガザの防衛戦を強化,手薄になったベエル・シェバへイギリス軍が本攻撃を仕掛け,結果ベエル・シェバ侵攻を果たします. ガザの後方連絡線を押さえられたオスマン軍はガザから撤退,その後の追撃戦で勝利を収めたイギリス軍はエルサレム奪回を成し遂げたのでありました.

Silicon Valleyとのつながりは?

ジャレッドは偽装工作という意味合いで"マイナーツァーゲンのカバン"という言葉を出しました. "役を演じろ"と言っていましたね. "プラットフォーム"をつくれるからと楽しそうに仕事をしては敵(ジャック・バーカー)に悟られてしまう. "箱"を嫌々つくっているように役を演じないと(ディネシュのチェーンも嫌々からかわないと...)バレてしまう,ということです. 確かに"マイナーツァーゲン"がカバンをわざと置き去りにした時のように,役を演じろ!というわけです.
そして,いざ出社しますがハプニングが起きます. リチャードが機密書類を敵の前で落としてしまうのです(敵の部下が拾うという点でも一致します). マイナーツァーゲンの場合は偽の機密書類でしたが,こちらの場合は正真正銘,本物の機密書類です. 奇しくも名前は同じリチャード(リチャード・ヘンドリックスとリチャード・マイナーツァーゲン!). イギリス軍のリチャードは偽の書類を敵に見せつけ自軍を成功へと導きましたが,現代のリチャードはただのヘマで敵に書類を見せつけてしまった,というなんとも皮肉な終わり方だったのです. 素晴らしいシナリオ! よく出来ています. この回を観て,やはりこのTVシリーズは面白い!と再確認しました.
10.31.2016

Siriで赤外線リモコン操作を実現する

前回の記録: SiriでArduinoを操作する
前回の記録ではSiriに喋りかけることでArduinoに取り付けられたLEDを制御した. 今回はArduinoに赤外線LEDと受光素子を取り付け,学習リモコンとして利用することで,Siriによるリモコン操作を実現する. 例えば送風機やTV,照明器具などなど...赤外線リモコンで操作できる家電をSiriでも操作できるようにする.

目指すところ

↑クリックでAmazonへ↑
今回は部屋についたペンダントライト(照明器具)をSiriで操作できるようにする. 部屋にある照明器具はそのままでは赤外線操作に対応していないので,Panasonicが販売しているスイッチ(通称ほたるスイッチ)を購入した(右図). これは壁に取り付けられるプッシュスイッチだが,下のスイッチのみ赤外線リモコンでOn/Offの切り替えが出来るという代物. このスイッチに対応したリモコンの赤外線信号をArduinoに覚えさせ,Siriのコマンドに応じて照明器具をOn/Offできるようする.

用意するもの (用意したもの)

  • Arduino UNO R3
  • Ethernetシールド
  • USBケーブル(A-B)
  • ブレッドボード
  • ジャンパワイヤ(導線)
  • あればプッシュボタン
  • 受光素子: TSOP38238
  • 赤外線(IR)LED: YSL-R531FR1C-F1
  • 上で説明したほたるスイッチと対応リモコン
Ethernetシールドは今のうちにArduinoに取り付ける. 受光素子とIR-LEDは千石電商さんより購入. 38kHzに対応している赤外線受光素子はTSOP38238が有名らしい. この38kHzとはほとんどの赤外線リモコンが変調に利用している周波数,すなわち38kHzの信号を受け取れる受光素子が学習リモコンにはベストということになる(今回の用途にぴったり!). 赤外線LED(IR-LED)は基本的にはどのようなものでも大丈夫. 私が購入したLEDは940nmまわりで光り,指向性も緩やかなため,ある程度角度がついても赤外線通信ができる品. この他,Arduinoと接続するためにブレッドボードと数本のワイヤが必要. また,プッシュボタンがあると学習したリモコンコードを試す時に重宝する(無くても良い).

ハードウェア

配線は上図を参照(Ethernetシールドの上から配線して問題ない). 私はブレッドボードで動作を確認した後,基盤へはんだ付けをして,Arduinoシールドを自作した(詳細は後述). シールドの自作は日常使いに対応した気分になるのでおすすめ. 下の写真は配線済みのもの. 私はLEDを2個並列につなげてみた. 1個でも十分なのだが,LEDの指向性を更に広げるため,2個のLEDをハの字状に配置する魂胆(注:写真はハの字状に向ける前に撮ったもの).

ライブラリの準備

z3t0/Arduino-IRremote | GitHub.com Arduinoで赤外線通信を実現するためのライブラリである"Arduino-IRremote"がGitHubにて公開されているので,上記リンクよりダウンロード. GitHubをよく知らない方は緑色の"Clone or downloads"ボタンをクリックして"Download ZIP"するとよい.
ZIPでダウンロード出来たら早速展開. 出てきたフォルダを"IRremote"へ名称変更しておくと良い. そのフォルダをArduinoのプロジェクトフォルダ内にある"libraries"フォルダ内へ移動(上図参照). 続いてライブラリ間の競合を避けるため,ArduinoアプリをFinderで表示したら右クリックで"Show Package Contents(パッケージの内容を表示)"を選択し,"Contents > Java > libraries"内にある"RobotIRremote"フォルダを削除する(同じく上図参照). Windowsの場合は"C:\Program Files (x86)\Arduino\libraries"フォルダ内の同フォルダを削除でOK. これでArduinoを学習リモコンにするための準備が整った.

Homebridgeの設定変更

前回の記録で,homebridge-httpを次のように設定した.
  • "on_url": "http://192.168.11.5?9=ON"
  • "off_url": "http://192.168.11.5?9=OFF"
これは"Arduino(192.168.11.5)の9ピンをON/OFFにしてください"という意味を持たせるためだった. 今回は"LightというアクセサリをON/OFFにしてください"という意味合いにするため,次のように変更したい.
  • "on_url": "http://192.168.11.5?Light=ON"
  • "off_url": "http://192.168.11.5?Light=OFF"
この設定変更を行わず,後で紹介するHomeBridgeIRControllerスケッチの次の部分を編集するだけでも,もちろん良い.
if (getKey == "Light")
               ↓
if (getKey == "9")
この変更を行えば,RPiの設定をいじくる必要はまったく無い. ただ,後でこのスケッチを見返したときに,"なんで9なんだっけ?"とならないようにHomebridgeの設定を変更したいというだけの話.
まずはSSHでRPiへ接続.
ssh ユーザー名@ホスト名.local
おそらくHomebridgeをデーモン化してあると思うので次の場所にある設定ファイルを開く.
nano /var/homebridge/config.json
設定ファイル中の次の箇所を変更する("9"を"Light"へ変更).
...
"on_url": "http://192.168.11.5?9=ON",
"off_url": "http://192.168.11.5?9=OFF"
...
↓ 次のように編集
...
"on_url": "http://192.168.11.5?Light=ON",
"off_url": "http://192.168.11.5?Light=OFF"
...
Ctrl+Xを押したらyを押し,Enterで保存. 次のコマンドでHomebridgeサーバーを再起動する.
sudo systemctl restart homebridge
パスワードを入力してEnterで再起動. 以上で設定変更完了. SSHをlogoutして良い.

赤外線コードの受信 - 学習

ArduinoをPCにUSB接続して,Arduinoアプリケーションを開き,メニューバーの"Tools > Board"と"Tools > Port"がそれぞれ"Arduino/Genuino UNO"と"Arduinoの接続されたUSBポート"になっていることを確認したら,次のスケッチをArduinoへアップロード. IRreceiver.ino | GitHub.com 何らかの都合によりコンパイルエラーになっても,何度か試すうちに(Arduinoのリセットボタンを押したりUSBケーブルをつなぎ直したりすると)うまくアップロードできる場合があるので,めげずに試そう. 正常にアップロード出来たら"Tools > Serial Monitor (Shift+Cmd+M)"を選択しシリアルモニターを開く. さあ,リモコンを受光素子へ向け,ボタンを押してみよう. 私はスイッチをON(点灯)にするボタンを押した. するとシリアルモニターにコードが表示されるはず. これが今リモコンから送信されたIR信号である. Arduinoに取り付けられたプッシュボタンを押すと,直前に受信したIR信号をLEDから送信してくれる. これで動作確認を行える.
一番上の行がIR信号
この調子で,続けてリモコンの消灯ボタンも取得してみよう. この2つのコード(点灯と消灯)はそれぞれ分かるようにテキストエディタやメモ帳なりにコピペしておこう.
例)
On信号 {3350, 1800, 400, 450, ... , 350};
Off信号 {3350, 1800, 350, 550, ... , 350};

[補足] IR信号について

上で表示されるコードは受光素子が受け取ったIR信号を数値にしたものなので,多少の誤差が生じる. 同じIR信号を受信しても,環境光や反射の関係か,微妙に値が変わる場合があるのだ. しかし,赤外線リモコン機器はそういった誤差も許容できるように作ってあるため,特に問題はない(±100くらいのバラ付きは出る). また,特にエアコンのリモコンに多いが,電源のONとOFFが同じボタンであっても,ON時とOFF時に違う信号を出力するリモコンがある. ボタンがひとつでも内部で複数の信号を切替えて出力している機種があるため注意が必要.

赤外線コードの送信 - 再現

HomeBridgeIRController | GitHub.com 上記リンクからIR信号送信用のスケッチを入手. 入手したら次の項目を編集する.
  • IPアドレス: Homebridgeのstatus_urlなどと合わせる.
  • MACアドレス: Ethernetシールド背面にあるシールに書かれている.
  • On信号: 取得した点灯用IR信号の配列.
  • Off信号: 取得した消灯用IR信号の配列.
コメントで"// TODO: ..."と書かれた場所が変更箇所. MACアドレスは2桁づつに区切って入力(参考ページ). On/Off信号は次のようになれば良い.
...
unsigned int on_code[] = {3400, 1800, ... , 350};
unsigned int off_code[] = {3350, 1850, ... , 350};
...
変更できたらArduinoへアップロード. これで先程のリモコンの機能をそっくり真似たArduinoが出来上がる. EthernetシールドのLANポートをHomebridgeが走るRaspberry Piと同じネットワークへ接続することで,Siriのコマンドに対応したIR信号を送信してくれるようになる.
試しに,"Hey Siri, Lights On."と喋ってみると,ほたるスイッチがOnになり照明器具が点灯した! もちろんHomeアプリからの操作もできる. シーンを設定しておけば"Good night."とSiriに言うだけで電気を消してくれるし,"Good morning."で電気をつけてくれる. 素晴らしい!
HomeアプリでLightアクセサリをプレスすると上右図のようになる. "Details"をタップしてから,各アクセサリのアイコンをタップすることで,お好みのアイコンへと変更することができるので試してみよう. もちろん私はペンダントライトを選んだ. わかりやすい!

おまけ: Arduinoシールドをつくる

Switch ScienceさんからArduino用バニラシールド基板ピンソケットセットを購入,各部品をはんだ付けして上のように配線をした(注:上図は基盤を上から見た図). これでブレッドボードのときと同じ配線を持つシールドの完成である. 名付けてIRシールド! 下に完成写真を載せる. 私は欲張ってLEDを2個つけているが,もちろん配線図通りの1個でも十分だ. Ethernetシールドの上から取り付けると,LANポートが若干干渉するが,動作に問題はないので良しとする.
9.13.2016

SiriでArduinoを操作する

TL;DR (目次も兼ねる)

  • SiriでArduinoを操作する
  • しかしSiriとArduinoを直接結ぶのは困難
  • そこでSiri-Arduino間にRaspberry Piを仲介人として置く
  • Raspberry Pi上ではHomebridge(Node.jsベース)を走らせる
  • HomebridgeがSiriのコマンドを扱いやすい通信に変えてくれる
  • Homebridgeはプラグイン(npmよりインストール可能)により種種の通信へ対応できる
  • 今回はRPiとArduino間をHTTPで通信させる
  • Arduinoのスケッチはここのものを使う(少し変更を加える).
  • おまけはHomebridgeのDaemon化

iOSのSiriでArduinoに取り付けられたLED(以後Lightと呼ぶ)を操作してみたいと思い立った. 調べてみたところ,どうやらHomeKit経由で操作すると良いようだ. HomeKitは家電を管理/制御するためのiOS向けフレームワーク(データベースでもある). HomeKitならばSiriによる家電制御も可能であることから,ArduinoをHomeKitに準拠した家電として認識させることが出来れば勝ちとなる. しかしAppleはHomeKitの仕様をオープンには公開していない. そこで今回は非公式ながらもHomeKitを忠実に実装したHomebridgeと呼ばれるAPIを利用し,iOSとArduinoの仲介人になってもらう. ArchLinuxをインストールしたRaspberry Pi Model B+(以後RPi)があるので,HomebridgeはこのRPi上で動かすことにした(ArchLinuxのインストール方法はここを参照).
iPhoneが家電を制御する時に出す信号を"HomeKit"と記したものが上の接続図. HomeKit信号はLANを通ってRPiに入る. RPiで走っているHomebridgeサーバーが信号の意味を解釈して,それに対応する処理を行う. 今回は同LANに繋がる機器(今回はArduino)へHTTPリクエストを送るようセットアップする. これはHomebridgeのプラグインの一である"homebridge-http"により実現できる. 送り先はIPアドレスで指定する. ArduinoはEthernetシールドを追加することでWebサーバーとして機能するので,RPi-Arduino間はHTTP通信とした. Homebridgeのプラグインは種種あるのでArduino以外の機器とでも比較的簡単に通信させることが出来る. 例えばスマートTVへXMLを送信することが出来るので,LAN経由の操作が出来たり,Siriのコマンドに対応したシェルスクリプトをRPi上で実行させることも出来る. もちろんRPiのGPIOを操作することも意味する. これらはnpm(Node.js Package Manager)よりプラグインとして提供されているので好みのプラグインをインストールすることでお望みの通信を実現できる. 可能性は大きい. さて,概念の説明はこのくらいにして実際にセットアップをして行こう. まずはRPiを起動させよう. 私は手元のMacからSSH接続でRPiをセットアップする.
ssh ユーザー名@ホスト名.local
パスワードを入力してログインしよう. まずはパッケージの更新から.
sudo pacman -Syu
次にC++コンパイラ(C++14対応のもの)をインストールする.
sudo pacman -S clang
インストールを終えたら次のコマンドを入力して確認.
g++ -v
出力最後の行に"gcc version 6.1.1 ..."などと表示されればOK. 続けてgitとmake,avahiもインストールしよう.
sudo pacman -S git make avahi
これで準備は完了. お次はHomebridgeのベースであるNode.jsをインストール(参考元).
wget https://nodejs.org/dist/v6.2.2/node-v6.2.2-linux-armv6l.tar.gz
tar -xvf node-v6.2.2-linux-armv6l.tar.gz
cd node-v6.2.2-linux-armv6l
sudo cp -R * /usr/local/
RPi2のモデルBとRPi3の場合は"armv6l"の部分を"armv7l"へ変更する.
node -v
とし"v6.2.2"と表示されればNode.jsとnpmのインストール完了. 次はHomebridge本体とHTTP通信を行うためのプラグインをインストールする.
sudo npm update -g npm
sudo npm install -g homebridge --unsafe-perm
sudo npm install -g homebridge-http
最後はHomebridgeの設定ファイルを用意,編集する.
cd /usr/local/lib/node_module/homebridge
cp config-sample.json ~/.homebridge/config.json
cd ~/.homebridge
nano config.json
次のように編集する.
{
    "bridge": {
        "name": "Homebridge",
        "username": "CC:22:3D:E3:CE:30",
        "port": 51826,
        "pin": "031-45-154"
    },
    
    "description": "This is an example configuration file with one fake accessory and one fake platform. You can use this as a template for creating your own configuration file containing devices you actually own.",
    
    "accessories": [
        {
            "accessory": "Http",
            "name": "Light",
            "switchHandling": "yes",
            "http_method": "GET",
            "on_url": "http://192.168.11.5?9=ON",
            "off_url": "http://192.168.11.5?9=OFF",
            "status_url": "http://192.168.11.5",
            "service": "Light",
            "brightnessHandling": "",
            "brightness_url": "",
            "brightnesslvl_url": "",
            "sendimmediately": "",
            "username": "",
            "password": ""
        }
    ],
    
    "platforms": []
}
bridgeのpinはiOSデバイスとペアリングする時に入力するPIN番号. デフォルト値で問題無いが,気になる方は任意の数字へ変更しよう. accessoriesの中にはプラグインの設定を入力して行く. プラグインごとに設定例があるためそれを参考にする(今回はhomebridge-httpというプラグインなのでこちらを参考にした). "on_url","off_url","status_url"にあるIPアドレスはArduinoのIPアドレスと合わせる. Ctrl+Xを押し,Yを押したらEnterで保存. これで"Light"(ArduinoにつながったLEDを想定)という名前のアクセサリが追加される. Siriに"Turn on the Light(Lightをオンにして)"と言うとon_urlへHTTPリクエストが送られ,"Turn off the Light(Lightをオフにして)"と言えばoff_urlをリクエストする. 設定ファイルに間違いが無ければ次のコマンドでHomebridgeを立ち上げよう.
homebridge
数行の*** WARNING ***が表示されるが無視して問題ない. 枠で囲われた8桁の数字がPINコードになる(設定ファイルの6行目で設定した値).
Sep 11 11:44:00 RPi homebridge[1638]: Scan this code with your HomeKit App on your iOS device to pair with Homebridge:
Sep 11 11:44:00 RPi homebridge[1638]:
Sep 11 11:44:00 RPi homebridge[1638]:     ┌------------┐
Sep 11 11:44:00 RPi homebridge[1638]:     │ 031-45-154 │
Sep 11 11:44:00 RPi homebridge[1638]:     └------------┘
Sep 11 11:44:00 RPi homebridge[1638]:
Sep 11 11:44:00 RPi homebridge[1638]: [9/11/2016, 11:44:00 AM] Homebridge is running on port 51826.
このPINコードをiOSのHomeアプリに入力することでペアリングが完了する.
iOSデバイス上でHomeアプリを立ち上げたら"Add Accessory(アクセサリーの追加)"をタップ. 同一LAN上にあるHomebridgeサーバー(RPi)が表示されるのでそれをタップ. Homebridge自体が非公式APIなので認証されていない旨のアラートが出るが"Add Anyway(追加)"を選択する. ここでPINコードの入力を行う. カメラを使った文字認識も使えるが,相手がディスプレイなので上手く認識されない可能性があるため"Enter Code Manually(手動でコードを入力)"をタップ. 8桁のPINコードを入力し,合っていればペアリングは完了する. 追加したアクセサリ(Homebridge)の詳細が表示されるがデフォルトで"Next(次へ)". 続いてLight(homebridge-httpプラグイン)が表示されるのでデフォルトのまま"Done(完了)"をタップ. 以上でHomeKitサイドの設定は完了. 後はHomebridgeとArduino間の通信を上手くやれば良い.

HomeアプリでLightをオンにすると"http://192.168.11.5?9=ON"へアクセスされるようになった. Webサーバーとして動作しているArduino(IPアドレスは192.168.11.5とする)がこれの意味を解釈し,指定されたピンの状態を変えられれば良い. これには以前ここでつくったスケッチがそのまま使える. スケッチ内のIPアドレスをHomebridgeで設定したものに合わせよう. このスケッチではGETメソッドのキーと値により対応するピンの状態を変更させる. "?9=ON"は9番ピンをHIGHに,"?9=OFF"は9番ピンをLOWにする. 今回はsendBackHttpResponse()に変更を加え,ピンの状態をHomeアプリから確認出来るようにしよう.
void sendBackHttpResponse(EthernetClient client)
{
  // HTTPヘッダ
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html; charset=UTF-8");
  client.println("Connection: close");
  client.println();
  
  // ペイロード
  int pinState = digitalRead(ledPin);
  client.println(pinState);
}
HTTPレスポンスとして1か0を送ることによりhomebridge-httpは通信先の状態がONかOFFかを判断出来る(status_urlはこの判断を行うためのアドレス). これでArduinoにつながったLEDの状態を返してやればHomeアプリで確認出来るようになる寸法. ArduinoとRPiとiOSデバイスが同一LAN上にあることを確認したらSiriを立ち上げて一言"Turn on the Light(Lightをオンにして)". Siriの信号がRPi上のHomebridgeへ届き,HomebridgeがLightという名前のアクセサリーに対応した処理を行い(指定のURLにアクセスし),ArduinoはHTTPアクセスを受け取ってピンの状態を変化させる. 夢がかなった.
もちろんHomeアプリやコントロールセンターの3ページ目からも操作可能.
HomeアプリのスイッチをタップでLEDを点灯/消灯
スイッチをプレスすると大きなスライドスイッチが現れる
コントロールセンターの3ページ目からも同様の操作が可能

RPiの電源ONでHomebridgeを走らせる

停電や障害が発生してRPiが再起動した場合,今のままではHomebridgeは勝手に起動してくれない. 次の手順でHomebridgeをDaemon化すればHomebridgeは勝手に起動するようになるので稼働率がだいぶ高まる. 参考元はこちら. 以後"ユーザー名"とあるところはログイン中のユーザー名に置き換えよう. 大まかな手順は次の通り.
  1. /var/内にhomebridgeフォルダを作成
  2. homebridge設定ファイルを上フォルダ内へコピー
  3. /etc/default/内に設定ファイルの在り処を書く
  4. /etc/systemd/system/内にhomebridgeをサービスとして設定
  5. homebridgeサービスを起動して状態を確認
sudo mkdir /var/homebridge
sudo chown ユーザー名 /var/homebridge/
cp ~/.homebridge/config.json /var/homebridge/
sudo nano /etc/default/homebridge
最後のコマンドは手順3にあたる. ここには次の内容を書き込む.
# Defaults / Configuration options for homebridge
# The following settings tells homebridge where to find the config.json file and where to persist the data (i.e. pairing and others)
HOMEBRIDGE_OPTS=-U /var/homebridge

# If you uncomment the following line, homebridge will log more
# You can display this via systemd's journalctl: journalctl -f -u homebridge
# DEBUG=*
重要なのは3行目. Homebridgeの設定ファイル(config.json)の在り処を書き記しておく. 続いてHomebridgeをサービスとして設定して行こう.
sudo nano /etc/systemd/system/homebridge.service
次の内容を書き込む.
[Unit]
Description=Node.js HomeKit Server
After=syslog.target network-online.target

[Service]
Type=simple
User=ユーザー名
EnvironmentFile=/etc/default/homebridge
ExecStart=/usr/local/bin/homebridge $HOMEBRIDGE_OPTS
Restart=on-failure
RestartSec=10
KillMode=process

[Install]
WantedBy=multi-user.target
これで自動起動するサービス,すなわちHomebridgeについて設定することが出来た. 後は次のコマンドでサービスを有効化し起動させれば良い.
sudo systemctl daemon-reload
sudo systemctl enable homebridge
sudo systemctl start homebridge
以後,Homebridgeの設定を変更するには/var/homebridge/config.jsonを編集すれば良い. 編集後は次のコマンドでサービスを再起動して設定を適用する.
sudo systemctl restart homebridge
次のコマンドでサービスの状態を知ることが出来る.
systemctl status homebridge
Homebridgeが出力するログは次のコマンドで読むことができる.
journalctl -f -u homebridge

再追加するときHomeアプリでHomebridgeが見つからない場合は...

都合により再度HomeアプリにHomebridgeを追加する際,Homebridgeが見つからない場合がある. その場合は/var/homebridge/persist/を削除すると上手く行く.
rm -R /var/homebridge/persist/
sudo systemctl restart homebridge
もう一度Homeアプリの"Add Accessory"をタップすればHomebridgeが表示されるようになるはず.