IRKit のサービスが停止したのでローカルネットワークに繋げた話
株式会社 IVRy (アイブリー) 社員番号 7 番 エンジニアのボルドーです。
今回は 昨年(2022年)11月末にサービスを終了した IRKit を こちらの記事で紹介されていた方法 にて IRKit のサーバーを介さずローカルネットワーク内で引き続き使えるようにしてみたので紹介したいと思います。
サービス停止の影響
サービスが停止するとどうなるのかというと、前述の記事内の転載となりますが以下の通りです。
終了後、出荷時のファームウェアでお使いいただいている方は、IRKitのサーバを通して赤外線を送信することができなくなります。IRKitにはローカルネットワークのAPIがありますが、それは(工場出荷時のファームウェアでは)IRKitがサーバに接続している時に、ローカルネットワークからのレイテンシーを短くするために使うAPIで、サーバに接続できない場合には無効です。
[1]ための対応
引き続き利用できるようにするIRKit はオープンソースとして公開されています。
そのため、ソースコードを書き換えてファームウェアを更新することで全ての処理がローカルネットワーク内で完結できるように設定し直すことが可能です。
私は以下の対応を行いました。
-
https://github.com/irkit/device/pull/6 の内容を最新の master ブランチに追従させる(*1)
- 2015年に提出された PR(Pull Request) なのでその方が良いと判断しました
-
useCloudControl を false にする
-
LED の点灯モードについても追加されているのでお好みで設定します(私は
LED_QUIET
にしました)
-
LED の点灯モードについても追加されているのでお好みで設定します(私は
- ファームウェアを更新する
- 更新方法は How to update firmware を参考にしました
- iPhone の「ショートカット」アプリに各信号を設定してウィジェットに追加する
ファームウェア更新方法の補足
Arduino IDE をダウンロード
1.2. micro USB で PC と IRKit を接続
私は Mac を使用しているので以下のような画面が表示されました。「続ける」をクリック後無事認識されてホッとしました。
3. Arduino IDE に IRKit 用の設定を行う
Arduino IDE のメニューバーから Tools -> Board -> "Arduino Leonardo" を選択します。
Tools -> Board -> "Arduino Leonardo" を選択
続いて、README と同じものはなかったですが、Tools -> Serial Port -> "/dev/cu.usbmodemXXXX" を選択します。
Tools -> Serial Port -> "/dev/cu.usbmodemXXXX" を選択
4. Aurduino IDE で今回書き込む *1のソースコード を開く
その後 version.template
を version.c
と改名します。
バージョン名は自由に設定して問題ないと思います。
5. IRKit にファームウェアを書き込む
書き込みが完了すると RAM の使用状況等が出力されて無事 IRKit サーバーへのアクセスがなくなりました。
IRKit への書き込みが成功
IRKit を 自宅WiFi に接続する
こちらについては私は IRKit サーバーが稼働している際に IRKitアプリ for iOS で接続設定をしたため、従来の方法で設定を行いました。
しかし、現在は IRKit サーバーが停止しているため、IRKit アプリを使った接続(WiFi の SSID と password を IRKit に設定する)はファームウェアに直接書き込むか、IRKit Device HTTP API(IRKit本体 の API) を使用して設定する必要があります。具体的には POST /wifi を使用して設定します。
(引っ越し等の際に毎回書き込むのは大変なので API を使って書き換え可能にしておくことをおすすめします。)
IRKit をアプリを介さずに使用する
ストアに公開されている IRKit アプリはサーバーを介しているため、サービス停止と共に機能しなくなっています。そのため、従来と同じ使い方をするためにはスマートフォンから手軽に信号を送信できなくてはいけません。
そこで、私は iOS アプリの「ショートカット」を介して POST /messages を行うようにしました。
まずは操作に使用したいリモコンの信号を取得する
GET /messages で IRKit が最後に受信した信号を取得できるので、操作に使用したいリモコン信号を全て IRKit に向けて発信 => GET /messages
で取得を繰り返します。
curl した際のキャプチャ
ショートカットアプリに設定する
- ショートカットアプリに IRKit というディレクトリを作成
- その中に操作名を付けて 1つずつ取得した信号を設定
- リクエストヘッダーには
X-Requested-With
に任意の文字列を設定します - 設定項目は format: raw, freq: 38, data: [xxx,xxx,xxx...] といった具合です(data に取得した信号が入る)
- iOS は Bonjourの.localホスト名を解決可能なクライアントなので、ローカルIP を指定せずに IRKit の .local を指定しました[2]
- リクエストヘッダーには
- ウィジェットにショートカットを追加して、1 で作成した「IRKit」ディレクトリを表示する
ショートカット作成例
ウィジェット追加例
これで晴れて今まで通りスマートフォンから数タップで家電の操作が可能になりました。めでたい🎉
We are hiring!!
最後に、IVRy では一緒に働く仲間を絶賛募集中です。
今の所 順調に成長してきていますが、今後の更なる成長のためには圧倒的に仲間が不足しています。皆さまのご応募お待ちしております!
カジュアルに話を聞きたいという方は私の Meety から面談を申し込んでいただければ色々お話します。
代表の奥西とも話せます!
-
本記事で「引き続き利用できるようにする」とは、以下のことが引き続き行えることを指すものとします。従来 IRKitアプリ for iOS にて提供されていたように登録したリモコン信号をスマートフォンを数タップ操作するだけで IRKit から発信できること。 ↩︎
-
IP が固定化されているのであれば直接設定した方が早いので、メモ帳アプリ等に IPアドレス を定義して、それを読み込むフローを組むと簡単です ↩︎
Discussion