はじめに
自分の部屋はスイッチ類が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プリンターでベッド用スタンドを作成
てきとーに作成しました。印刷用の素材を削減しつつ様々なサイズに対応するために、ビニタイをたくさん使用しました。見た目が良くないです。
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に設定しました。
没入モードの設定
ナビゲーションバーとステータスバーが邪魔なのでGravityBoxを使用して消します。没入モードのON/OFFは電源ボタン長押しで出てくるメニューで選択できます。
充電LEDの無効化
常に充電しているため必要ない上に、眩しいので無効化します。GravityBoxで無効化します。この設定だと無効化できませんでした。
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をスマホ起動時に起動させる」
を参考にしました。
スクリーンセーバの設定
真っ黒の画面に時計を表示したかったんですが、画面回転をせずに縦画面のまま横に倒して使用するので、対応したスクリーンセーバアプリが見つかりませんでした。そのため、真っ黒な画像のみが入ったフォルダを作成して、そのフォルダをフォトフレームとすることで、真っ黒な画面にしました。
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の接続を行います。
完成!
おわりに
設定することが多くて大変でした。これで寝るときに一気に便利になります。