動機
- ここ数年、Sleep Numberベッドへのローカルネットワークアクセスの可能性を探ってきた
- HomeKit経由でベッド設定を制御できる homebridge プラグインを作成した
- Sleep Number から API リクエスト頻度が高すぎるため、プラグインを無効化してほしいと依頼された
- ローカルネットワークアクセスによってサーバーを迂回する方法を見つけることを決意した
事前準備
- Sleep Number Hub のモデル番号: 360SIQ01D
- UART to TTY デバイスおよびその他のハードウェアツールが必要
- USB-A フラッシュドライブが必要
ルートアクセス権の取得
- J16 ヘッダーに UART デバイスを接続
- UART デバイスにコンソールを接続(baud rate: 115200)
- ハブの電源を入れ、2秒以内に <SPACE> を押して自動起動シーケンスを停止
- ブート環境変数を編集
- 初回起動時に "let_me_root" ファイルのあるフラッシュドライブを挿入
- ルートパーティションを rw で再マウントし、
let_me_root ファイルを追加
- SSH アクセスを設定
ローカルネットワーク制御および監視サーバーの作成
- Python 2.7.18 を使って HTTP サーバーを設定
/bam/scripts ディレクトリ内のスクリプトを実行できる HTTP サーバースクリプトを作成
- スクリプトをハブにコピーして実行
rc.d スクリプトの追加
/real.root パーティションに rc.d スクリプトを追加
- スクリプトをハブにコピーし、適切な場所へ移動
- 必要なシンボリックリンクを追加
便利なコマンド
/bio スクリプトからさまざまなベッド制御コマンドを利用可能
- 例のコマンド:
arg=PSNL: ベッド左側の最後に設定された Sleep Number 値を取得
arg=PSNS&arg=L100: ベッド左側の Sleep Number を 100 に設定
次のステップ
/bam ルートディレクトリのベッド制御機能を調査
- SSH トンネル経由で Sleep Number サーバーと通信するハブのセキュリティ問題を検討
- SleepIQ アプリを置き換えられるシンプルな Web アプリを作成
付録: ハブの元の U-Boot 環境変数
baudrate=115200
bootcmd=run find_board_name; run set_bootargs;setenv boot_mmcdev 0; run bootcmd_mmc;setenv boot_mmcdev 1; run bootcmd_mmc
- その他の変数...
GN⁺の意見
- このガイドは Sleep Number ベッドへのローカルネットワークアクセスを可能にし、ユーザーにより多くの制御権を与える
- ハブのセキュリティ問題を考えると、外部インターネット接続を切断するのが望ましい
- 類似の機能を提供する他のスマートホーム製品も存在する
- 新しい技術を導入する際は、セキュリティと保守の問題を慎重に検討する必要がある
1件のコメント
Hacker News のコメント
昔はスマート機能のないベッドを使っていた
Sleep Number サーバーと SSH トンネル経由で通信するハブに興味がある
Eight Sleep Pod 3 にアクセスする似たような方法がある
Eight Sleep のベッドをハックする話だと思っていた
次はランサムウェアについての冗談
インターネットが切れてベッドの温度を調整できない状況は不便だ
Sleep Number のベッドは買わないと決めた
ベッドが Linux を動かす必要があるのか疑問に思う
はんだ付け工具を買い物リストに追加することを勧める