導入
以前投稿したLinux Deploy上でHomebridgeを実行するやつですが、pingができなかったり、rebootできなかったり、安定性が微妙(使用機材の問題)だったので、Termux上で実行できないか試してみました。
手順
0. Termuxのインストールやレポジトリの設定、SSHの設定、pkg upgrade
ここら辺は自分で調べてみてください
1. node.jsのインストールpkg install nodejs
2. pythonのインストールpkg install python
3. Homebridgeのインストールnpm install -g --unsafe-perm homebridge homebridge-config-ui-x
npmのアップデートの案内とか出ますが、うっかりアップデートすると動かなくなったりするので気をつけてください。
4. ディレクトリの作成mkdir ~/.homebridge
4. config.jsonの作成
vim(ディフォルトでは入っていないのでpkg install vim
)やnano等のテキストエディタでconfig.jsonを作成vim ~/.homebridge/config.json
この中に
{
"bridge": {
"name": "Homebridge",
"username": "CC:22:3D:E3:CE:30",
"port": 51826,
"pin": "031-45-154"
},
"platforms": [
{
"name": "Config",
"port": 8080,
"auth": "form",
"theme": "auto",
"tempUnits": "c",
"lang": "ja",
"platform": "config",
"log": {
"method": "file",
"path": "/data/data/com.termux/files/home/.homebridge/homebridge.log"
}
}
]
}
と記述します。vimの場合書き込みが終わったらescを押して、:wqで保存してvimを閉じましょう。
5. 実行homebridge -I | tee ~/.homebridge/homebridge.log
これで実行できるはずです。http://端末のIPアドレス:8080にアクセスすると、セットアップが起動するはずです。初期設定が終わったら次に進んでください。停止するには、UI上の再起動ボタンか、実行しているコンソールでctrl+cをしてください。インポートを行った際は、UI設定のLog Viewer Setupから、Log MethodをFrom File、Log File Pathを/data/data/com.termux/files/home/.homebridge/homebridge.logにしてください。
(6). Expected `concurrency` to be a number from 1 and upというエラーが出て、プラグインやUI設定が開けない場合
自分はこれにぶち当たりました。どうやら、p-limitとかいうモジュールへの変数がちゃんと定義されていないのかわかりませんが、とりあえずvim /data/data/com.termux/files/usr/lib/node_modules/homebridge-config-ui-x/node_modules/p-limit/index.js
で開いてあげて、p-limitの制作者には申し訳ないですが、
'use strict';
const Queue = require('yocto-queue');
const pLimit = concurrency => {
concurrency = 1000; //←を追加
if (!((Number.isInteger(concurrency) || concurrency === Infinity) && concurrency > 0)) {
throw new TypeError('Expected `concurrency` to be a number from 1 and up');
}
と言った感じに5行目に追加してあげます。本当なら、このモジュールを使用している方のコードを変えるべきなんですが、探すのが面倒だったのでこれで妥協します。
このあと、exit
とかでTermuxを再起動してください。
Homebridge実行スクリプトの作成
homebridge -I | tee ~/.homebridge/homebridge.log
で実行しているとHomebridgeの再起動時に自動的には起動しないため、
7. Homebridge実行用スクリプトの作成vim .homebridge/home_bridge-run.sh
中身は
#!/data/data/com.termux/files/usr/bin/bash
while :
do
homebridge -I | tee ~/.homebridge/homebridge.log
done
とします。
あとは、Termux:Bootや手動実行などで実行してください。と言いたいところですが、うまくいかなかったので次に記事にまとめます。
終わりに
残念ながらTermuxではpingモジュール(people x等に使われる)が使えなさそうなので、大人しくx86のネイティブUbuntuマシーンでHomebridgeを実行することにします。
もしかしてnode.jsのpingモジュール、Androidじゃ動かない?
— Unagi Dojyou (@Unagi_Dojyou) November 24, 2022
なんか、変数の受け渡しが上手いっていないっぽいんだけど、謎だな pic.twitter.com/jsrR0ln802