当記事では、ElgatoのStream DeckからSwitchBotデバイスとシーンを操作する方法を解説いたします。
SwitchBotデバイスやシーン自体の設定方法については割愛いたします。
また当記事ではStream Deckプラグインで対応可能なSwitchBot API v1.0を使用しています。
記事作成時点での最新版は v1.1となっており、今の所提供終了予定等はないと思われますが、SwitchBotが提供を終了した場合は、当記事の内容では操作できなくなりますのでその際はご了承ください。
使用環境について
当記事の内容は以下の製品とバージョンを使用して作成しています。
バージョンや製品が違うと設定方法などが変わる可能性があるのでご注意ください。
なお、API NinjaプラグインがWindows専用のため、Windows環境以外では使用不可能と思われます。
- Stream Deck MK.2
- ソフトウェア 6.8.1
- ファームウェア 1.02.000
- API Ninja(Stream Deck用プラグイン)
- バージョン 1.3
- SwitchBotアプリ
- Android版
- アプリバージョン 9.5
- SwitchBot API
- v1.0
- Windows 11 24H2
トークンの取得
まずはSwitchBotを外部から動かすためにトークンというものを取得します。
スマホのSwitchBotアプリを開き、プロフィール>基本データと選択し、アプリバージョンが記載されている画面を開きます。
アプリバージョンと記載されている部分を10回ほど連打すると、開発者向けオプションが表示されます。

開発者向けオプションが表示されたら選択してください。

「トークンを取得」ボタンをタップしてトークンをコピーし、何らかの方法でPCに連携してメモしておいてください。

デバイス・シーンIDの取得
次は操作したいデバイス・シーンのIDが必要になりますので、それぞれ後述の取得方法を確認してください。
コードが記載されているので、右上のボタンからコピーし、PowerShellを起動してペーストしてください。
コードブロックの右上ボタンからコピー

ペーストすると「トークンを入力してください:」と表示される

先ほど取得したトークンを貼り付けてエンターを押すとデバイス・シーンIDが取得できる

表示された、使いたいデバイス・シーンのIDをメモしておいてください。
※リモコンデバイスはリモコンデバイスIDがデバイスIDとなります。
以上でSwitchBot側の準備は完了です。
デバイスを操作する
$authToken = Read-Host -Prompt "トークンを入力してください"
$headers = @{
"Authorization" = $authToken
"Content-Type" = "application/json; charset=utf8"
}
$response = Invoke-WebRequest -Uri "https://api.switch-bot.com/v1.0/devices" -Method GET -Headers $headers
$utf8Content = [System.Text.Encoding]::UTF8.GetString($response.RawContentStream.ToArray())
$json = $utf8Content | ConvertFrom-Json
$deviceList = $json.body.deviceList
$deviceOutput = ""
foreach ($device in $deviceList) {
$deviceOutput += "デバイス名: $($device.deviceName)`n"
$deviceOutput += "デバイスタイプ: $($device.deviceType)`n"
$deviceOutput += "デバイスID: $($device.deviceId)`n"
$deviceOutput += "-------------------------" + "`n"
}
$infraredRemoteList = $json.body.infraredRemoteList
foreach ($remote in $infraredRemoteList) {
$deviceOutput += "リモコンデバイス名: $($remote.deviceName)`n"
$deviceOutput += "リモコンデバイスID: $($remote.deviceId)`n"
$deviceOutput += "リモコンのタイプ: $($remote.remoteType)`n"
$deviceOutput += "ハブデバイスID: $($remote.hubDeviceId)`n"
$deviceOutput += "-------------------------" + "`n"
}
Write-Output $deviceOutput
シーンを操作する
$authToken = Read-Host -Prompt "トークンを入力してください"
$headers = @{
"Authorization" = $authToken
"Content-Type" = "application/json; charset=utf8"
}
$response = Invoke-WebRequest -Uri "https://api.switch-bot.com/v1.0/scenes" -Method GET -Headers $headers
$utf8Content = [System.Text.Encoding]::UTF8.GetString($response.RawContentStream.ToArray())
$json = $utf8Content | ConvertFrom-Json
$sceneList = $json.body
foreach ($scene in $sceneList) {
Write-Output "シーン名: $($scene.sceneName)"
Write-Output "シーンID: $($scene.sceneId)"
Write-Output "-------------------------"
}
Stream DeckにAPI Ninjaプラグインを導入する
Stream Deckを開き、API Ninjaというプラグインを導入していきます。
右上のカラフルなボタンをクリックするとブラウザでElgatoのマーケットプレイスが開きます。

上部の検索に「Ninja」とか「API」と入力すると、画像のアイコンのプラグインが出てきます。

「Get」ボタンを押してインストールを開始します。

ブラウザやStream Deckアプリで色々出てくると思いますが、進めていってください。

(画像は別プラグインのインストールですが、同じような画面が出てくると思います)

インストールが終わったら一覧にAPI Ninjaが追加されたことを確認してください。

Stream Deckにボタンを追加する
一覧からAPI Ninjaを任意の場所にドラッグ・アンド・ドロップしてボタンを追加します。
任意の名前やアイコンを設定してください。

残りは以下のように設定していきます。
設定が必要な箇所のみ記載するので、記載のない箇所は空欄でOKです。
■Request Type
「POST」を選択
■API URL
・デバイスを操作する場合
デバイスを操作する場合は、以下をコピペして、<デバイスID>部分を先ほどメモしたデバイスIDに置き換えてください。
https://api.switch-bot.com/v1.0/devices/<デバイスID>/commands
・シーンを操作する場合
シーンを操作する場合は、以下をコピペして、<シーンID>部分を先ほどメモしたシーンIDに置き換えてください。
https://api.switch-bot.com/v1.0/scenes/<シーンID>/execute
■Content Type
「application/json」を選択
ここまででこのようになります

■Headers
以下をコピペして、<トークン>部分を最初に取得したトークンに置き換えてください。
Authorization:<トークン>
■Data
シーンを操作する場合は入力不要です。
デバイスを操作する場合は、パラメータで操作を指示してあげる必要があり、少し複雑になります。
また、SwitchBotデバイスの操作は各々パラメータが用意されており、リモコンデバイスの操作でも一部操作対象によって必要なパラメータが違います。
使用する事が多そうな例をいくつか記載しておきます。
操作ができない、対象がない場合は下記APIのドキュメントをご参照ください。
見てもわからない場合はコメントにてご質問いただければ回答可能な場合はご回答させていただきます。
・(リモコン)デバイスの電源をON/OFFする
「command」をONにする時は「turnOn」、OFFにする時は「turnOff」で指定します。
証明のON/OFFはこちらで対応可能です。
{
"command": "turnOn",
"parameter": "default",
"commandType": "command"
}
・エアコンの操作
パラメータは左から、カンマ区切りで「温度」、「運転モード」、「風量」、「ON/OFF」となっています。
それぞれ以下のように指定します。
- 温度
数字で指定 - 運転モード
1:自動、2:冷房、3:乾燥、4:送風、5:暖房 - 風量(ファンスピード)
1:自動、2:低速、3:中速、4:高速 - ON/OFF
電源ON:on、電源OFF:off
{
"command": "setAll",
"parameter": "25,1,1,on",
"commandType": "command"
}
以下はリモコンデバイスのシーリングライトを電源ONにする時の設定内容例です。
※自宅の環境で動作確認済みです。

以上で設定完了になります。
後は実際にStream Deckのボタンを押して、動作するか確認してみてください。
最後に
デスクにいる時間が長い人はSwitchBotで操作可能なデバイスが全て手元で操作できて、リモコンを探したりデスクに置いておく必要がなくなるので非常に便利です。
まだStream Deck、SwitchBotを使っていない、という方は是非オススメしたいです。
どちらも単体でも便利な製品なので、購入を検討してみてください。
コメント