Home AssistantとSwitchBotで構築するオーディオスマートホーム
目次
Marantz PM6006のInputの切り替えをめんどくさがって今までミキサーでまとめていたんだけど、ちょっと思うところがあってきちんと切り替えるようにした。
そうすると、当たり前なんだけどLP/CD/Networkでそれぞれ切り替えないといけない。デスクからアンプのところまでは2歩ぐらいなのだけどデスクにいながら切り替えたい。(レコードからNetworkとか)

やったことの全体像
段階的にステップアップしていった記録です。
- SwitchBot Hub 3 → スマホからリモコン操作
- Stream Deck → ワンボタンで切り替え
- Home Assistant → Roon再生やレコード再生に連動して自動切り替え
使った機器はこんな感じ。
- アンプ:Marantz PM6006
- ネットワークプレーヤー:WiiM Pro
- レコードプレーヤー:AT-LP70XBT
- CDプレーヤー:Cambridge Audio AXC25
- スマートデバイス:SwitchBot Hub 3、Tapo P110M(スマートプラグ)
Step 1. SwitchBot スマートリモコン ハブ3
まずは手っ取り早く、Marantz PM6006のリモコンを登録してSwitchBotから操作できるようにする。これで少なくともiPhoneやそういうデバイスから操作できる。ここまでならリモコンで良くね?って感じ。

Step 2. Stream Deckで1ボタン切り替え
次はStream DeckからSwitchBotのシーンを呼び出してワンボタンで切り替えられるようにする。

右下の3つ。CD/PHONO/Roon。
Stream Deckの拡張にSwitchBotとの連携も簡単にできるものがあるけどそれだとデバイスのOn/Offのトグルのみに限られてしまう。
だでSwitchBot APIからシーンIDを送れるシェルを作り、それをAutomatorでAPPにする。
#!/bin/bash
TOKEN="XXXXXXXXX"
SCENE_ID="XXXXXXXXX"
curl -X POST "https://api.switch-bot.com/v1.0/scenes/${SCENE_ID}/execute" \
-H "Authorization: ${TOKEN}" \
-H "Content-Type: application/json"
osascript -e 'display notification "PM6006_WiiM を実行しました" with title "SwitchBot"'
Step 3. Home Assistantの導入(自動で切り替わってほしい)
ここまででもまあリモコンで良くないか?感があるので、(デスクからリモコンを排除できるメリットやスマホやタブレットから操作できるメリットはある)
やりたかったのはこういうこと。
Roonを再生させたらアンプが勝手にNetworkに切り替わる
LPレコードで再生を始めたらアンプがPHONOに切り替わる
Roonを再生するのはデスクやゴロゴロしているとき&レコードを再生するのはレコードプレーヤーの再生ボタンを押さなきゃいけないのでそこまでいく。
ここまでくると、複数条件かつサービス連携になってくる。というわけで様々なスマートホームデバイスを一括管理できるHome Assistantを導入。
Home Assistantのメリット
SwitchBot公式アプリだけだと「手動トリガー」が基本 →例えば「レコードを再生したら自動でアンプ入力を切り替える」みたいな条件付き自動化はアプリ単体ではできない。
複数サービスの連携ができる万能ハブが欲しかった →SwitchBot、Tapo、Roon、Apple Home、…色んなスマート家電やオーディオ機器を、一元管理・連携したかった。
ローカルで動くから、反応が速くて安定するし自由度も高い →クラウド依存じゃないので遅延や外部要因が減り、カスタマイズもやりたい放題。
APIやWebhook経由で細かい「もし◯◯なら△△する」が無限に作れる →オーディオ以外のスマートホーム化にも拡張しやすい
Home Assistantのインストール
(ここがハードル高くない?)うちは余った自作PCをマイクラサーバー用に動かしていたのでそこにVirtualBoxでインストールしました。ミニPCやラズパイあたりがベターかもしれない。
レコードプレーヤーの再生検知
うちのレコードプレーヤー(Audio-Technica AT-LP70XBT BS)はリモコンがないタイプだったので、再生/停止情報を何かしらどこかで判断しないといけない。
というわけで、電力がWi-Fiでとれるスマートプラグをかまします。
リアルタイムで数字と取るにはWi-Fiタイプがいい(?)らしく、Bluetooth接続だとラグができる&Home Assistantを入れたPCに届かないといけない。のでSwichbotのスマートプラグではなくTP-Linkのほうを選びました。(もともと使ってたんだけど。安いから)

Step 4. 入力切替の完全自動化
SwitchBotシーンとHome AssistantのREST API連携
Home Assistantからシーンを動作させられるように。
# configuration.yaml の一部
rest_command:
pm6006_wiim:
url: "https://api.switch-bot.com/v1.0/scenes/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/execute"
method: POST
headers:
Authorization: "YOUR_SWITCHBOT_TOKEN"
Content-Type: "application/json"
pm6006_lp:
url: "https://api.switch-bot.com/v1.0/scenes/yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/execute"
method: POST
headers:
Authorization: "YOUR_SWITCHBOT_TOKEN"
Content-Type: "application/json"
Roon API(Roon Extension)
これはRoonの再生状態をHome Assistantで取得できるようにする拡張機能で、「Roonの再生が始まったらアンプを自動で切り替える」といった連携自動化を可能にする。
ここもちょっとめんどくさいんだけど、先程Home AssistantをいれたPCとかに同じ用にRoon Extensionを動くようにDockerを使って起動させておく。
自動化のためのyamlを書く
# automation.yaml の例
- alias: Roon再生可能になったらPM6006をWiiMに
trigger:
- platform: state
entity_id: sensor.roon_state
to: "playing"
for:
seconds: 2
action:
- service: rest_command.pm6006_wiim
mode: single
- alias: LPプレーヤーが動いたらPM6006をLPに
trigger:
- platform: numeric_state
entity_id: sensor.recordplayer_current
above: 0.056
for:
seconds: 5
action:
- service: rest_command.pm6006_lp
mode: single
- alias: LPプレーヤーが停止したらPM6006をWiiMに戻す
trigger:
- platform: numeric_state
entity_id: sensor.recordplayer_current
below: 0.056
for:
seconds: 10
condition:
- condition: state
entity_id: sensor.roon_state
state: "playing"
action:
- service: rest_command.pm6006_wiim
mode: single
まとめ
どちゃくそ大変な構築でした。でもSwitchBotハブとPCがあれば基本構築できるはず。これが終わったら便利な世の中が待ってるんだ…の気持ちで頑張った。ありがとうChatGPT。
今回はアンプの切り替えにしか使っていないけど、
帰宅したら(人感センサー(ハブ3))→Roon再生スタート
とかとか(なんだろ)
とかも色々できるのです。
まあ楽しかったです。

使っている主な機器・構成
- オーディオシステム:Marantz PM6006、WiiM Pro、AT-LP70XBT、Cambridge Audio AXC25
- スマートデバイス:SwitchBot Hub 3、Tapo P110M(スマートプラグ)
- 自動化システム:Home Assistant(Windows)、Roon