Synology DS216jにhomebridgeをインストールする

久しぶりの更新。まだ生きてます。

唐突ですが、時代はいまやスマートホーム()! 常時起動させているNAS、DS216jにhomebridgeを入れて、Siriから格安Wi-Fi対応学習リモコン経由で家電を音声操作しちゃおう!と思い立ちました。

超ざっくり処理の流れを説明すると、

iPhone(Siri) → homebridge(DS216j) → Wi-fi対応リモコン(RM mini3(eRemote mini)など) → 家電機器

となります。homebridgeはnode.jsで動くプログラムで、node.jsがパッケージセンターに公式に用意されていることから、さくっと30分くらいでインストール終わるんじゃね?と最初は思っていましたがhomebridgeがエラーを吐いて動かない。てこでも動かない。opkg環境を構築してソースからビルドしても動かない。dockerコンテナなら超さくっとインストールできるぜ?なんて情報もありましたが、上位機種じゃないとだめ。というわけでdocker全盛?の2018年にchroot監獄です。この記事を書くのも含めて結局トータル12時間くらいかかったという・・・。こんなに苦労するなら転がってるラズパイに環境構築すればよかったと後悔していなくもないです。

というわけで、homebridgeと学習リモコンの設定はぶっちゃけチョロなので、苦労したhomebridgeのインストール手順のみとなりますがまとめました。ここ↓
Setup Homebridge on Synology NAS without Docker
の手順を参考にしましたが結構アレンジしてます。というかせざるを得なかった。 同じCPUアーキテクチャの後継機種DS218jでも同じ手順が使えそうですね。

とここで注意事項。以下の手順でNASに入れるdebian-chrootパッケージは、DSM6.0以降のDiskStation(以降DS)に入れてアンインストールすると、DSが”brick(煉瓦化)”(日本でいうところの文鎮)する致命的な不具合が報告されています。対処方法は2018年10月19日現在、完全に確立されていないようです。したがって、

以下の手順を実施してもたらされる全ての結果の責任は手順実施者が負うことを認識してください。
責任を自分で負えないのであれば以下の手順を絶対に行わないでください。
実施する場合も必ずのNAS上にあるデータのバックアップを取ってください。

それではスタート

0. administratorsグループに所属するユーザをNAS上に作成しておく

1. Enable SSH your NAS. (いきなり英語でびっくりした?調査中英語ばっかりで疲れたのでこの疲れをおすそ分け)
なお、22番ポート以外のポートを使うように設定しておく。(10022など。以降、10022番ポートに設定した前提で手順を記載する)

2. コントロールパネル→ファイルサービス→詳細→「Bonjourサービスの検出を有効にする」のチェックを外して適用する

(chroot環境のmDNSを有効化するためDS側は無効にする)

3. パッケージセンター→設定→全般→トラストレベルを「Synology Inc.および信用された製造元」に変更、パッケージソースタブで場所「http://packages.synocommunity.com/」、名前は適当にsynocommunityとかにして追加してOK

4. パッケージセンターの検索バーに「python」と入力してエンターを押す。コミュニティカテゴリのPythonをインストール

5. ここにアクセスし、「5.2 armada38x」をクリックしてdebian-chroot.v7.f5644[armada38x].spkをダウンロードする。

6. 5.でダウンロードしたファイルをパッケージセンターから手動インストールする。

7. teratermなどでNASにsshログイン(10022番ポート)する。ログインユーザは0.で作成したユーザ

8. rootになる

【ネイティブDS環境】$ sudo -i

9. debian chrootを発動する

【ネイティブDS環境】# /var/packages/debian-chroot/scripts/start-stop-status chroot

10. aptデータベースを更新

【chroot環境】# apt-get update

11. 必要なツール類をインストール

【chroot環境】# apt-get install build-essential
【chroot環境】# apt-get install chkconfig
【chroot環境】# apt-get install python2.7
【ネイティブDS環境】$ sudo -i
【ネイティブDS環境】# cd /volume1/@appstore/python/lib/python2.7/site-packages
【ネイティブDS環境】# pip install --upgrade pip
【ネイティブDS環境】# pip install --upgrade setuptools
【ネイティブDS環境】# pip install pyextdirect
【ネイティブDS環境】# cd /usr/lib/python2.7/site-packages/
【ネイティブDS環境】# cp -pR pyextdirect /volume1/@appstore/python/lib/python2.7/site-packages/

12. 作業用ディレクトリを作成して移動する

【chroot環境】# mkdir ~/work
【chroot環境】# cd ~/work

13. node.jsのソースをhttp://nodejs.org/dist/からダウンロードして展開(お好きなバージョンをどうぞ。動かなくても知らんけどne)

【chroot環境】# wget http://nodejs.org/dist/latest-v8.x/node-v8.12.0.tar.gz
【chroot環境】# tar xvzf node-v8.12.0.tar.gz

14. node.jsをビルドしてインストール。(2~3時間かかるので昼寝でもしてね)

【chroot環境】# cd node-v8.12.0
【chroot環境】# ./configure
【chroot環境】# make -j2
【chroot環境】# make install

15. homebridgeに必要なマルチキャストDNS関連のパッケージをインストールして起動

【chroot環境】# apt-get install libavahi-compat-libdnssd-dev
【chroot環境】# cd /
【chroot環境】# mount -t proc proc proc/
【chroot環境】# /etc/init.d/dbus start
【chroot環境】# /etc/init.d/avahi-daemon start

16. homebridgeをインストール

【chroot環境】# npm config set python /usr/bin/python2.7
【chroot環境】# npm install -g --unsafe-perm homebridge

あとは自分の学習リモコンに応じて必要なプラグインもここらへんでインストールしておく。私の場合は

【chroot環境】# npm install -g homebridge-broadlink-rm

17. homebridgeをサービスとして起動するように設定

【chroot環境】# useradd -s /bin/false -b /var/run homebridge
【chroot環境】# cd ~/work
【chroot環境】# wget https://gist.githubusercontent.com/gregwym/d7b31606758acfb61896f588d13c3dda/raw/a7350fe13df3f99312bdaea85aca0cc4a1389e8f/init.d.homebridge.sh
【chroot環境】# cp init.d.homebridge.sh /etc/init.d/homebridge
【chroot環境】# chmod 755 /etc/init.d/homebridge

18. homebridge起動確認。1回起動してすぐに停止させる。この操作によりchroot環境の/var/run/homebridge配下に.homebridge/が作成される。せっかちな人向け(for the impatient)が笑いをさそう

【chroot環境】# service homebridge start
[ ok ] Starting HomeKit support for the impatient: homebridge.
【chroot環境】# service homebridge status
[ ok ] homebridge is running.
【chroot環境】# service homebridge stop
[ ok ] Stopping HomeKit support for the impatient: homebridge.

19. いったんログアウトしてchroot環境を抜ける(teratermを閉じる)

20. NASにsshログイン(10022番ポート)する。ログインユーザは0.で作成したユーザ

21. rootになる

【ネイティブDS環境】$ sudo -i

22. /var/packages/debian-chroot/scripts/start-stop-statusのバグ?を修正する。
(start-stop-status start(またはstop)はDSM6.0環境では正常動作はしていない。
しかし、DS起動時に呼ばれ/procや/dev/ptsをchroot環境にマウントする処理をしてくれるので有用)

【ネイティブDS環境】# vi /var/packages/debian-chroot/scripts/start-stop-status

73行目付近のexit 1をexit 3に変更する
(省略)
    status)
        if daemon_status; then
            echo ${DNAME} is running
            exit 0
        else
            echo ${DNAME} is not running
            exit 1 ←←←←←←←←←←←←←←←← ここをexit 3に変更する
        fi
        ;;
(省略)

23. パッケージセンターからDebian Chrootを開き、「実行」をクリックする。(間違ってもアンインストールを選んでクリックしないこと!

24. chroot環境に直接sshできる環境を構築する。(chroot環境に直接sshする場合は22番ポートで接続する環境となる)

【ネイティブDS環境】# /var/packages/debian-chroot/scripts/start-stop-status chroot
【chroot環境】# apt-get install ssh

25. chroot環境にsshログインするためのユーザ(例:mainte)を作成する

【chroot環境】# useradd mainte -m
【chroot環境】# passwd mainte

26. chroot環境でsshしたユーザがrootにsuできるように、rootのパスワードを設定する

【chroot環境】# passwd

27. いったんログアウトしてchroot環境を抜ける(teratermを閉じる)

28. NASにsshログイン(10022番ポート)する。ログインユーザは0.で作成したユーザ

29. rootになる

【ネイティブDS環境】$ sudo -i

30. chroot後にchroot環境で各種サービスが自動起動するように設定する

サービス起動スクリプトを作成

【ネイティブDS環境】# vi /usr/local/debian-chroot/var/chroottarget/root/service_start.sh

以下の内容で作成
#!/bin/sh
service dbus start
service avahi-daemon start
service homebridge start
service ssh start

作成したスクリプトに実行権を付与

【ネイティブDS環境】# chmod 755 /usr/local/debian-chroot/var/chroottarget/root/service_start.sh

「/var/packages/debian-chroot/scripts/start-stop-status chroot」実行時に上記スクリプトを実行するように修正する

【ネイティブDS環境】# vi /var/packages/debian-chroot/scripts/start-stop-status

78行目付近の「chroot ${CHROOTTARGET}/ /bin/bash」行をコメントアウトし、
下記のように「chroot ${CHROOTTARGET}/ /bin/bash -c "/root/service_start.sh"」行を追加する
(省略)
    chroot)
#        chroot ${CHROOTTARGET}/ /bin/bash ←←←←←←←←←←←←←←←←←←←← コメントアウト
        chroot ${CHROOTTARGET}/ /bin/bash -c "/root/service_start.sh" ←←←←←←←← 追加
(省略)

31. NAS起動時に自動的にchrootするようにする

【ネイティブDS環境】# vi /etc/rc.local

以下の内容で作成。/bin/sleep 60はいらないかも
#!/bin/sh
/bin/sleep 60
/var/packages/debian-chroot/scripts/start-stop-status chroot

作成したファイルに実行権を付与

【ネイティブDS環境】# chmod 755 /etc/rc.local

32. NASを再起動する

【ネイティブDS環境】# reboot

33. NAS起動後chroot環境が自動で出来上がっているので、sshログイン(22番ポート)する。ログインユーザは25.で作成したユーザ

32. rootになる

【chroot環境】$ su -

34. あとはネット上にごろごろしているhomebridgeの設定方法を参考にしてconfig.jsonをがしがし書く。config.jsonは/var/run/homebridge/.homebridge/に配置。homebridgeの停止・起動・再起動は、以下のようにserviceコマンドで。

【chroot環境】# service homebridge stop
【chroot環境】# service homebridge start
【chroot環境】# service homebridge restart

補足. homebridge-broadlink-rmでリモコンを学習させる(サービス起動時に標準出力の内容を確認する方法を確立するのが面倒くさかったのでrootで通常起動する方法)

【ネイティブDS環境】$ su -
【chroot環境】# service homebridge stop
【chroot環境】# cp -R /var/run/homebridge/.homebridge /root/
【chroot環境】# chown -R root:root /root/.homebridge

/root/.homebridge/config.jsonは起動に必要な最低限の内容にする

【chroot環境】# vi /root/.homebridge/config.json
{
        "bridge": {
                "name": "Homebridge",
                "username":"34:EA:34:AA:AA:AA", ←自分の環境にあわせる
                "port": 51826,
                "pin": "999-99-999"
        },
        "description": "Homebridge",
        "platforms": [
                {
                        "platform": "BroadlinkRM",
                        "name": "Broadlink RM",
                        "accessories": [
                                {
                                        "name": "テレビ",
                                        "type": "switch",
                                        "data": {
                                                "on": "",
                                                "off": ""
                                        }
                                }
                        ]
                }
        ]
}

rootでhomebridgeを起動する。ホームアプリからbridgeが認識されない場合は一度bridgeを削除してもういちど登録する。ホームアプリから学習モードをONにして学習させれば結果が標準出力に表示される。学習したデータを控えたらCTRC+Cで終了する

【chroot環境】# homebridge

おわり。長いねw

FOSTEX PM0.3

スピーカーは視聴距離ごとに用意しなきゃ!こたつにいるときにもタブレット端末やノートPCの音声をいい音で楽しみたい!でもリーズナブルな価格で!というわけで、アクティブスピーカー、FOSTEXのPM0.3を購入しました。

FOSTEXといえば、ヤマハやデノンなどにスピーカーをOEM供給している(出典Wikipedia)というメーカー。音が良くないわけがない!ネットで評判をささっと調べると低音が出ないという声多数。そりゃ再生周波数帯域のスペックが110Hz〜20kHzだから出るわけない。w 夜に至近距離でしっとりとした音を楽しみたい。低音なんかが出ると一戸建てとはいえ隣の部屋にも人がいるわけで逆に都合が悪い。
という自分の希望を高次元で両立しているPM0.3。価格が3倍程度のBOSEのM2と比較(どちらもスピーカーからの距離40cm程度)すると、低音は確かにM2とは比較になりませんが中高域や解像感はM3よりもむしろ印象が良く、コストパフォーマンスの高さが光ります。サランネットがなく、ボリューム等がすべて本体背面に配置されているため、正面からみたときのデザインが良いのもお気に入り。よく言われている付属ケーブルが粗悪という件も、私が購入した個体についてはまったく不具合はありません。発売されてから結構経っているので対策されたのかもしれません。5段階評価4.5くらいの満足度ですね。(^^)

PM0.3

SONY SRS-BTD70

心を入れ替えてこれから更新するぞ!なんつって。

ベッドで横になっているときに気軽に iPod touch の音を鳴らすことが出来るアクティブスピーカーが欲しい!ケーブル大嫌い人間なので、乾電池駆動が可能で完全ケーブルレスな、手頃な価格のもの!そしてちゃんとしたメーカーのもの、という条件を満たしたのはこのBluetooth対応アクティブスピーカー SRS-BTD70 。 それではどこかで見たような項目でレビュー。

【デザイン】
良くはないけど、我慢出来るレベル。SONYなんだからもうちょっと頑張って欲しい気が。

【音質】
6000円弱で買えるこのサイズのスピーカーならこんなものでしょう。割と低音が出ます。ステレオ感は乏しい。

【入出力端子】
Bluetooth対応でケーブルレスでご機嫌環境。ただしコーデックがSBCにしか対応していないので、遅延はそれなりにある。音ゲーなどは無理。通常の動画鑑賞は我慢の範囲内。ステレオミニジャック入力があるので有線も可。

【品質】
本体はプラスチッキーですが、電池を入れたときの重量感はどしっとしてます。買ってから結構経ちましたが、特に問題は発生していません。

【サイズ】
500mlペットボトルサイズでコンパクト。ベッドの枕元に置くのにはもってこいの大きさです。

【総評】
ケーブル嫌いで、USB充電も嫌いな私にとってはまさにうってつけの製品です。乾電池での駆動時間の長さ(単3形アルカリ乾電池3本で約15時間)も素晴らしい。私はeneloopで使用しています。いくら機能や性能が良くても、頻繁に充電しなければいけないような使い勝手の悪い製品は私の購入選択肢には入りません。値段も安く使用頻度もそれなりでかなり満足度が高いです。

大きくてもいいから乾電池駆動が出来て音質が良くてAAC/aptXにも対応したやつがいいんだ、金に糸目はつけん!というブルジョアな方は、クリプシュのKMC3なんていかがでしょうか。4万円くらいするのできっと音質はいいと思います。w

SRS-BTD70