Smart Life対応スマートプラグの電源をAPIで操作する
はじめに
スマートプラグ、利用していますか?
Amazon EchoやGoogle Home、スマホなどから電源をOn/Offできて便利です👍
私は主にタイマーで、設定時刻に照明を自動点灯/消灯させて使っています💡
今回はこのスマートプラグを、APIで操作する方法について調べてみました。
APIの確認
私が使用しているスマートプラグは「Smart Life」というスマホアプリに対応しています。
(Smart Lifeアプリ:App Store、Google Play)
「Smart Life」はTuya社が提供しているアプリのため、
「Tuya IoT Platform」というサービスのAPIが利用可能でした。
APIの利用手順
Tuya IoT Platformには各種SDKが用意されていますが、
ここではトークンを発行してAPIを実行する手順についてご紹介します。
-
アカウント作成画面から、Tuya IoT Platformのアカウントを作成します。
個人開発用で試用版を1ヶ月利用できます。試用期間は申請により延長可能です。 - Platform管理画面にログインして「Cloud」サービスのプロジェクトを作成します。
Development Methodは「Smart Home」を選択します。
他項目は任意ですが、Data CenterによりAPIのエンドポイントが変わります。
- プロジェクトの「Overview」画面で、「Client ID」と「Client Secret」を取得します。
トークンの発行やAPIの実行で利用するためです。 - 「スマートプラグ」をデバイス登録します。
「Devices > Link Tuya App Account」の「Add App Account」ボタンを
クリックして表示されるQRコードを、スマホアプリ「Smart Life」で読み取ります。
「Read/Write」権限を付与し、スマートプラグを「Tuya IoT Platform」に紐づけます。
登録すると表示される「Device ID」を、API実行時に利用するため取得しておきます。 - トークン発行APIを実行して、トークンを取得します。
次の章で詳細を記載します! - 取得したトークンを指定して、デバイス操作のAPIを実行します。
次の次の章で詳細を記載します!!
補足1:ブラウザからデバイス操作
「Devices >{登録したデバイス}> Debug Device」からデバッグ画面を開くと、
ブラウザからデバイスのスイッチ操作を試したり、操作ログを閲覧できます!
補足2:PostmanからAPI簡易実行
以下ページにPostmanのインポート用ファイルが用意されています。
「API Package」と「API Environment Package」のファイルをダウンロードし、Postmanでインポートすると、簡単にデバイス操作などのAPIを実行できます!
API実行に必要な処理が「Pre-request Script」にインポートされるため、
クライアントIDなど環境情報を設定したら「Send」ボタンを押すだけです🙌
トークンの発行
Tuya APIを実行する際は、ヘッダーで「sign(署名)」の送信が必要です。
以下手順でsignを生成し、トークン発行APIを実行します。
- signに必要な情報を用意します。
- クライアントID:1KAD46OrT9HafiKdsXeg(例)
- タイムスタンプ:1588925778000(例)
- APIのメソッド:GET
- APIのURL:/v1.0/token?grant_type=1
- 用意した情報を、以下のように連結します。
{クライアントID}{タイムスタンプ(13桁)}{対象APIのメソッド}
{ボディ送信内容のハッシュ値(SHA256)}
{対象APIのURL}
※GETメソッドではボディを送信しないため、ボディ送信内容のハッシュ値は固定で
「e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
」になります。
↓
1KAD46OrT9HafiKdsXeg1588925778000GET
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
/v1.0/token?grant_type=1
- 連結した文字列と秘密鍵(Client Secret)で、HMAC-SHA256のハッシュ値を取得します。
- ハッシュ値の小文字を大文字に変換したものが「sign」です。
- ヘッダーに以下項目を指定し、トークン発行APIを実行します。
- client_id:1KAD46OrT9HafiKdsXeg(例)
- t:1588925778000(例)
※sign生成時のタイムスタンプ - sign_method:HMAC-SHA256
- sing:9E48A3E93B302EEECC803C7241985D0A34EB944F40FB573C....(例)
- 成功すると応答で、トークン(access_token)を取得できます。
このトークンをデバイス操作APIの実行に使用します。
デバイス操作APIの実行
デバイス操作APIを実行する際は、新たにsignの生成が必要です。
以下手順でsignを生成し、デバイス操作APIを実行します。
- signに必要な情報を用意します。
- クライアントID:1KAD46OrT9HafiKdsXeg(例)
- タイムスタンプ:1588925888000(例)
※トークン期限内の時刻であれば発行と異なる時刻で可 - トークン:3f4eda2bdec17232f67c0b188af3eec1(例)
※トークン発行APIで取得したもの - デバイスID:87707085bcddc23a5fa3(例)
- APIのメソッド:POST
- APIのURL:/v1.0/devices/{デバイスID}/commands
- ボディの送信内容:
{"commands":[{"code":"switch_1","value":true}]}
(例)
※参考:スイッチ操作コマンド
- ボディの送信内容をハッシュ値(SHA256)に変換します。
HMAC-SHA256ではなくSHA256のため、この処理に秘密鍵は使用しません。
⇒00c2368c059275b6f529e038fc079d641a933173858053bf72070d768d072f0e
(例) - 用意した情報を、以下のように連結します。
{クライアントID}{トークン}{タイムスタンプ(13桁)}{対象APIのメソッド}
{ボディ送信内容のハッシュ値(SHA256)}
{対象APIのURL}
↓
1KAD46OrT9HafiKdsXeg3f4eda2bdec17232f67c0b188af3eec11588925888000POST
00c2368c059275b6f529e038fc079d641a933173858053bf72070d768d072f0e
/v1.0/devices/87707085bcddc23a5fa3/commands
- 連結した文字列と秘密鍵(Client Secret)で、HMAC-SHA256のハッシュ値を取得します。
- ハッシュ値の小文字を大文字に変換したものが「sign」です。
- ヘッダーに以下項目、ボディにsign生成時と同じスイッチ操作コマンドを指定し、
デバイス操作APIを実行します。- client_id:1KAD46OrT9HafiKdsXeg(例)
- t:1588925888000(例)
- sign_method:HMAC-SHA256
- sing:9E48A3E93B302EEECC803C7241985D0A34EB944F40FB573C....(例)
- access_token:3f4eda2bdec17232f67c0b188af3eec1(例)
- Content-Type:application/json
- 成功すると操作コマンド通り、スイッチのOn/Offが切り替わります!✨
おわりに
これでAPIを実行できる環境であれば、
どこからでも電源のOn/Offを切り替えられるようになりました!
そう、コラボフローの申請書カスタマイズからでも🎵
因みに有料プランは高額だったため、試用期間後の継続利用は断念です😢
Discussion