Android端末をHomeKitのコントローラにする

投稿者: | 2月 15, 2024

はじめに

自分の部屋はスイッチ類がHomebrdigeを使用したスマートホームになっています。ベッドにコントローラを置いたら便利だな、ってことで作成しました。以前にも作成しましたがそれを更に進化させた感じです。以前の記事↓
Androidタブレット(チャレンジタッチ)をHomeKitのコントローラとして使う

要件

以前立てた、iPod 6 thのVNCサーバを映す
・ 寝ているときは画面を暗く(黒く)する
・ 暗いときもタップを一回すれば、コントロール画面を映す
・ 寝ていないとき以外は明るくする

寝ているか寝ていないかは、Termuxで実装するhttpスイッチのON/OFFで判定(ON/OFFは手動で設定)します。

行ったこと一覧

・ 端末選定
・ 3Dプリンターでベッド用スタンドを作成
・ Xperia Z1(SOL23)をAndroid5に無理やりアップデート&Root化
・ いらないシステムアプリを掃討
・ 画面DPI変更
・ Xposed(とGravityBox、Xinstaller)の導入
・ 画面の最低輝度の変更
・ 没入モードの設定
・ 充電LEDの無効化
・ Termuxの導入
・ Termux上のPythonでhttp経由のスイッチを作成
・ Homebridgeにスイッチの登録
・ Termux:Bootの導入
・ スクリーンセーバの設定
・ VNCクライアントの設定
・ MacroDroidのインストール
・ MacroDroidにて画面の明るさを変更するマクロを作成
・ MacroDroidにて起動時のマクロを作成

端末選定

かなり迷いました。
・ Termuxを使用するためAndroid5以降が必須
・ 安価な端末
・ Root化が可能
・ できたら、Google Homeを使用したいため、Android9以降
・ Google Homeを使用するなら、VNCサーバにしたいので、使用するアプリ(XQ-VNCServer)の関係でAndroid12以下

今回は安価なAndroid9、10あたりの端末が用意できなかったので、Google Homeは諦めて、
Xperia Z1 (SOL23)
を使用しました。

3Dプリンターでベッド用スタンドを作成

てきとーに作成しました。印刷用の素材を削減しつつ様々なサイズに対応するために、ビニタイをたくさん使用しました。見た目が良くないです。

印刷した3Dモデル
組み上げたところ

Xperia Z1(SOL23)をAndroid5に無理やりアップデート&Root化

国内のキャリアから発売されたXperia Z1はAndroid4.4までしかアップデートできません。それをAndroid5にしつつ、Root化もしました。
こちらのサイトを参考にしました。
Hone.のたま~に戯言「XPERIA Z1 SOL23 ROOT&TWRP導入メモ」

いらないシステムアプリを掃討

やる必要はないと思います。なんとなく、ランチャーをきれいにしたかった&通知が来ないようにしたかったため、行いました。使用したアプリは、システムアプリ削除です。

画面DPI変更

これもやる必要ありません。なんとなく、画面の情報量を増やしたかったからやりました。使用したアプリは、Easy DPI Changerです。

Xposed(とGravityBox、Xinstaller)の導入

GravityBoxは、画面の最低輝度の変更に、XinstallerはTermux:Bootの導入に必要です。
方法は2024年にXposedのインストールを行うを見てください。

画面の最低輝度の変更

そのままだと、画面の明るさのシークバーを最低にしてもそこそこ明るく、寝るときに邪魔です。GravityBoxを使用すれば、その最低輝度を変更できます。1にすると、真っ暗になったため、2に設定しました。

明るさの最小値を2に設定

没入モードの設定

ナビゲーションバーとステータスバーが邪魔なのでGravityBoxを使用して消します。没入モードのON/OFFは電源ボタン長押しで出てくるメニューで選択できます。

没入モードに設定

充電LEDの無効化

常に充電しているため必要ない上に、眩しいので無効化します。GravityBoxで無効化します。この設定だと無効化できませんでした。

充電のLEDを無効化

Termuxの導入

F-Droidとかで配布されているのはAndroid7以上でしかインストールできません。ちょっとAndroid5用のものをインストールする必要があります。方法はAndroid5,6にTermuxをインストールするを見てください。

Termux上のPythonでhttp経由のスイッチを作成

Xperia Z1の画面の明暗のON/OFFをするためのスイッチです。Termux上のPythonで
・ http://IPアドレス/onにアクセス(get)するとファイルの内容が1になる。
・ http://IPアドレス/offにアクセス(get)するとファイルの内容が0になる。
・ http://IPアドレス/onoff_statusにアクセス(get)するとファイルの内容(0か1)が返ってくる。
という動作をするプログラムを実行します。switchserver.pyはホームディレクトリに作成しました。
詳しくはPythonで簡単なhttp経由のスイッチを作成するを見てください。

Homebridgeにスイッチの登録

先程作成したスイッチをHomebridgeに登録して、HomeKitでON/OFFできるようにします。このスイッチがONのとき、Zperia Z1の画面が暗くなり、OFFのときは明るくなるようにします。
使用したプラグインはHomebridge Http Switchです。Configに、

{
    "accessory": "HTTP-SWITCH",
    "name": "睡眠",
    "switchType": "stateful",
    "onUrl": {
        "url": "http://XperiaZ1のIP:8000/on",
        "method": "GET"
    },
    "offUrl": {
        "url": "http://XperiaZ1のIP:8000/off",
        "method": "GET"
    },
    "statusUrl": {
        "url": "http://XperiaZ1のIP:8000/onoff_status",
        "method": "GET"
    }
}

を追加しました。このタイミングで、IPアドレスの固定も行いました。

Termux:Bootの導入

Android5,6にTermuxをインストールするのアドオンのインストールの方法でインストールしました。先程書いたPythonのスクリプトを実行するために、~/.termux/boot/start-switchserver.shに

python switchserver.py &

と記述しました。Termux:Bootの使い方は
lisz-works「Termux:Bootでsshdをスマホ起動時に起動させる」
を参考にしました。

スクリーンセーバの設定

真っ黒の画面に時計を表示したかったんですが、画面回転をせずに縦画面のまま横に倒して使用するので、対応したスクリーンセーバアプリが見つかりませんでした。そのため、真っ黒な画像のみが入ったフォルダを作成して、そのフォルダをフォトフレームとすることで、真っ黒な画面にしました。

フォトフレームを選択
真っ黒な画像のみが入ったkabeフォルダを参照

VNCクライアントの設定

正直どのアプリを使っても大差は無いですが、Androidタブレット(チャレンジタッチ)をHomeKitのコントローラとして使うでチャレンジタッチに導入したMocha VNC Liteを使用しました。接続時にパスワードを設定していないのに関わらず、パスワードを求められることがありますが、適当な文字を打てば接続できます。アプリ自体のクオリティが少し低くて、クラッシュしたり、バグって設定の表示が重なったりと、ちょっと難ありです。なにか良いVNCクライアントアプリがあったら教えてください。

画面回転の設定

VNCで接続してみたところ、上下が逆だったので、画面回転を制御するアプリRotation Controlをインストールしました。Google Playで配布されているものはAndroid8以上でないとインストールできないので、ここからAndroid4以上でも使用できる旧バージョン(1.0)をインストールしました。

MacroDroidのインストール

普通にGoogle Play経由からダウンロードすると、有料なので、昔の無料の時代のもの(5.35.12)をダウンロードしました。ここでダウンロードできます。

MacroDroidにて画面の明るさを変更するマクロを作成

自身(http://localhost/onoff_status)にgetリクエストを飛ばし、1だったら画面の輝度を最小にしてスクリーンセーバを起動、0だったら画面の輝度を自動調整にする、って感じです。

画面の明るさを変更するマクロ

MacroDroidにて起動時のマクロを作成

起動時に、WiFiの接続、画面をつけっぱなしにする設定、VNCの接続を行います。

起動時に実行されるマクロ

完成!

完成!

おわりに

設定することが多くて大変でした。これで寝るときに一気に便利になります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)