📡

IRKit のサービスが停止したのでローカルネットワークに繋げた話

2023/01/23に公開

株式会社 IVRy (アイブリー) 社員番号 7 番 エンジニアのボルドーです。

今回は 昨年(2022年)11月末にサービスを終了した IRKitこちらの記事で紹介されていた方法 にて IRKit のサーバーを介さずローカルネットワーク内で引き続き使えるようにしてみたので紹介したいと思います。


サービス停止の影響

サービスが停止するとどうなるのかというと、前述の記事内の転載となりますが以下の通りです。

終了後、出荷時のファームウェアでお使いいただいている方は、IRKitのサーバを通して赤外線を送信することができなくなります。IRKitにはローカルネットワークのAPIがありますが、それは(工場出荷時のファームウェアでは)IRKitがサーバに接続している時に、ローカルネットワークからのレイテンシーを短くするために使うAPIで、サーバに接続できない場合には無効です。

引き続き利用できるようにする[1]ための対応

IRKit はオープンソースとして公開されています。

そのため、ソースコードを書き換えてファームウェアを更新することで全ての処理がローカルネットワーク内で完結できるように設定し直すことが可能です。

私は以下の対応を行いました。

ファームウェア更新方法の補足

1. Arduino IDE をダウンロード

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.templateversion.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 した際のキャプチャ

ショートカットアプリに設定する

  1. ショートカットアプリに IRKit というディレクトリを作成
  2. その中に操作名を付けて 1つずつ取得した信号を設定
    • リクエストヘッダーには X-Requested-With に任意の文字列を設定します
    • 設定項目は format: raw, freq: 38, data: [xxx,xxx,xxx...] といった具合です(data に取得した信号が入る)
    • iOS は Bonjourの.localホスト名を解決可能なクライアントなので、ローカルIP を指定せずに IRKit の .local を指定しました[2]
  3. ウィジェットにショートカットを追加して、1 で作成した「IRKit」ディレクトリを表示する


ショートカット作成例


ウィジェット追加例

これで晴れて今まで通りスマートフォンから数タップで家電の操作が可能になりました。めでたい🎉


We are hiring!!

最後に、IVRy では一緒に働く仲間を絶賛募集中です。
今の所 順調に成長してきていますが、今後の更なる成長のためには圧倒的に仲間が不足しています。皆さまのご応募お待ちしております!

カジュアルに話を聞きたいという方は私の Meety から面談を申し込んでいただければ色々お話します。

代表の奥西とも話せます!

脚注
  1. 本記事で「引き続き利用できるようにする」とは、以下のことが引き続き行えることを指すものとします。従来 IRKitアプリ for iOS にて提供されていたように登録したリモコン信号をスマートフォンを数タップ操作するだけで IRKit から発信できること。 ↩︎

  2. IP が固定化されているのであれば直接設定した方が早いので、メモ帳アプリ等に IPアドレス を定義して、それを読み込むフローを組むと簡単です ↩︎

IVRyテックブログ

Discussion