- 適用製品:デイリーステーション
APIご利用に関する参考リンク:https://github.com/OpenWonderLabs/SwitchBotAPI
SwitchBotのSkills(スキル)を最新バージョン1.0.5 にアップデート:https://clawhub.ai/switchbot-dev/switchbot-cloudapi#versions
1.デイリーステーションカスタムページとは
SwitchBotデイリーステーションは、温度、湿度、天気などの標準データを表示できるだけでなく、カスタムページにも対応しています。SwitchBot OpenAPIを利用すると、任意のテキスト内容をデバイスに送信でき、デイリーステーションをデスク上の情報表示パネルとして活用できます。
主な利用例:
- 家族用の伝言板やリマインダー
- リアルタイムデータのダッシュボード(電気料金、空気品質、株価など)
- 誕生日のカウントダウンやペットのごはんリマインダー
- 定期実行スクリプトと組み合わせて、表示内容を自動更新
2.設定方法
2.1 事前準備
SwitchBot アプリで開発者向けのTokenと Keyを取得します。
- SwitchBotアプリを起動します。
- プロフィール→設定→基本データ→アプリバージョンまで進みます。
- アプリバージョン(例えば 6.24)を数回(5回~15回)連続タップすると「開発者向けオプション」が出てきます。
- 「開発者向けオプション」をタップして、次の画面でトークン情報がございます。
Device IDを取得します。
デバイス一覧のインターフェースを呼び出し、デイリーステーションの deviceID を取得します。
curl -s https://api.switch-bot.com/v1.1/devices \
-H "Authorization: ご自分のToken" \
-H "sign: 署名" \
-H "t: タイムスタンプ" \
-H "nonce: ランダム文字列" | python3 -m json.tool出てきた結果の中から、deviceType が "WoIOSensor" である、または “Weather Station” という文字が含まれているデバイスを探し、その deviceID を記録します。
2.2 API 説明
エンドポイント:`POST https://api.switch-bot.com/v1.1/devices/{deviceId}/commands`
リクエストボディ:
{
"command": "customPage",
"parameter": "表示したいテキスト",
"commandType": "command"
}認証方法v1.1
各リクエストには、以下の HTTP Headers が必要です。
| タイトル | 説明 |
Authorization |
ご自分のToken |
sign |
HMAC-SHA256署名、Base64エンコード |
t |
現在のタイムスタンプ(ミリ秒) |
nonce |
ランダムな文字列 (例えば UUID) |
署名アルゴリズム:
sign = Base64( HMAC-SHA256( secret, token + t + nonce ) )
3.テキスト形式と制限事項
| 最大文字数 | 約 300 バイト(UTF-8 エンコード)
| 改行 | ⚠️ 非対応。\n、\r\n、<br> はいずれも無効です。テキストは画面幅に応じて自動折り返しされます |
| 言語 | 日本語、中国語、英語、およびその混在に対応 |
| Emoji | 基本的な emoji に対応(例:✅🎂🐱📅🏠)。emoji は通常4バイトを占めます |
| テキスト超過時 | statusCode: 190、メッセージ "invalid params" が返されます |
| 空テキスト | 空文字列を送信するとページをクリアできます |
表示を見やすくするためのヒント
改行には対応していないため、読みやすくするには以下のような区切りを使うことをおすすめします。
- 絵文字で区切る:``📅日付 🌡温度 💨空気質`
- 縦線で区切る:`日付|温度|空気質`
- スペースと記号で区切る:`[日付] [温度] [空気質]`
4. 活用例
🏠 家族のリマインダー
① 家族の伝言板
📋家族のお知らせ 今夜7時に家族で食事 鍵を忘れずに 宅配便は玄関の棚に 洗濯物を干してね② 誕生日・記念日のカウントダウン
🎂お母さんの誕生日まであと15日 💍結婚記念日まであと32日 📅お父さんの健診6/20 赤ちゃんの予防接種6/15③ ごみ出しリマインダー
🗑今日は水曜日 燃えるゴミの日 明日:資源ゴミ 金曜日:不燃ゴミ 朝8時までに集積所へ出してね🐱 ペットのお世話
④ ペットのごはんリマインダー
🐱ねこ 前回ごはん:08:30 次回ごはん:18:30 トイレ掃除:今朝済み✅ 駆虫:6/1予定 フード残量:約3日分🚄 交通・お出かけ
⑤ 通勤情報
🚇JR山手線 朝ラッシュ:通常運行 通勤予想42分 🚌都バス[渋谷行] 始発6:00 終発22:30 現在:3駅先⑥ 新幹線・フライトリマインダー
✈️明日のフライト NH011 羽田→伊丹 07:35出発 第2ターミナル 5:30出発がおすすめ 天気:目的地晴れ12°C📊 マーケット情報
📈日本株 日経平均:38456↑0.8% TOPIX:2653↑1.2% マザーズ:742↑1.5% ドル円:154.32 更新:14:58🌤 天気・環境
⑧ 天気 + 空気品質
🌤東京 今日:くもり25°C/18°C 空気:良好AQI72 PM2.5:48 明日:小雨22°C/16°C 紫外線:弱 💧湿度65%⚡ エネルギー管理
⑨ 家庭の電力モニタリング
⚡今月の電力:186kWh 従量料金:第1段階(残り84kWh) 月末予測:245kWh 昨日:6.2kWh 電気代約¥30/kWh 年間累計:¥38,700📬 メール・宅配便
⑩ メール + 配送情報のまとめ
📬メール 今日受信:12通 未読:3通(1通重要) 📦宅配便 ヤマト:配達中14:00頃 Amazon:発送済み明日届く 佐川:受取済み🏠 スマートホーム連携
⑪ 室内環境パネル
🏠リビング24.5°C💧58% CO2:620ppm✅ 寝室23.1°C💧62% エアコン:冷房26°C運転中 空気清浄機:自動 フィルター寿命78%💪 ヘルスケア
⑫ 健康チェック
💪今日の健康 水分:1200ml/2000ml 歩数:6580歩 座りっぱなし注意:そろそろ動こう!体重:今週-0.3kg 睡眠:7h12m5. 応用:自動定期更新
定期実行スクリプトを利用すると、デイリーステーションをリアルタイム情報ダッシュボードとして活用できます。さまざまなデータソースから情報を自動取得し、表示内容を自動更新できます。
6. よくある問題と対処方法
❌ statusCode: 190 — "invalid params"
原因:テキストが 300 bytes の上限を超えています。
❌ statusCode: 100 だが画面が変わらない
デイリーステーションでカスタムページにスワイプしているか確認してください。カスタムページはデフォルト画面ではありません。
デバイスの表示更新に少し時間がかかる場合があるため、数秒お待ちください。
deviceID が正しいか確認してください。
❌ 401 Unauthorized
Token が正しいか、余分なスペースが入っていないか確認してください。
署名アルゴリズムを確認してください:HMAC-SHA256(secret, token + t + nonce) → Base64
`t` が秒ではなく、ミリ秒のタイムスタンプ(13桁)であることを確認してください。
システム時刻が正確であることを確認してください。時刻のずれが大きいと認証に失敗する場合があります。
❌ Signature Error(sign が正しくない)
よくある間違い:
連結順は必ず token + t + nonce です。secret + token + ... ではありません。
secret は HMAC のキーであり、連結する文字列には含めません。
最終結果は Base64 でエンコードする必要があります。
改行などの余分な文字が混入していないことを確認してください。
❌ 改行が反映されない
これは正常です。テストにより、`\n`、`\r\n`、`<br>` では改行できないことが確認されています。テキストは画面幅に応じて自然に折り返されます。見やすくするため、絵文字や記号を区切りとして使うことをおすすめします。
❌ 一部の絵文字が正しく表示されない
デイリーステーションの画面は基本的なemoji(Unicode BMP 範囲内)に対応していますが、複雑な合成emoji(肌色修飾子、ZWJ シーケンスなど)は正しく表示されない場合があります。シンプルな emoji の使用をおすすめします:✅❌📅🌤🏠💧⚡📬🐱🎂📊💪🚇
💡 その他のヒント
ページをクリアする:parameter として空文字列 `""` を送信します。
API 呼び出し頻度:レート制限を避けるため、1分に1回を超えないことをおすすめします。
複数のデバイス:複数のデイリーステーションがある場合は、それぞれの deviceId を使って個別に呼び出す必要があります。
コメント
0件のコメント
サインインしてコメントを残してください。