🔌

Smart Life対応スマートプラグの電源をAPIで操作する

2023/06/27に公開

はじめに

スマートプラグ、利用していますか?
Amazon EchoやGoogle Home、スマホなどから電源をOn/Offできて便利です👍

私は主にタイマーで、設定時刻に照明を自動点灯/消灯させて使っています💡
今回はこのスマートプラグを、APIで操作する方法について調べてみました。

APIの確認

私が使用しているスマートプラグは「Smart Life」というスマホアプリに対応しています。
(Smart Lifeアプリ:App StoreGoogle Play

「Smart Life」はTuya社が提供しているアプリのため、
Tuya IoT Platform」というサービスのAPIが利用可能でした。
https://developer.tuya.com/en/docs/iot/api-reference?id=Ka7qb7vhber64

APIの利用手順

Tuya IoT Platformには各種SDKが用意されていますが、
ここではトークンを発行してAPIを実行する手順についてご紹介します。

  1. アカウント作成画面から、Tuya IoT Platformのアカウントを作成します。
    個人開発用で試用版を1ヶ月利用できます。試用期間は申請により延長可能です。
  2. Platform管理画面にログインして「Cloud」サービスのプロジェクトを作成します。
    Development Methodは「Smart Home」を選択します。
    他項目は任意ですが、Data CenterによりAPIのエンドポイントが変わります。
  3. プロジェクトの「Overview」画面で、「Client ID」と「Client Secret」を取得します。
    トークンの発行やAPIの実行で利用するためです。
  4. 「スマートプラグ」をデバイス登録します。
    「Devices > Link Tuya App Account」の「Add App Account」ボタンを
    クリックして表示されるQRコードを、スマホアプリ「Smart Life」で読み取ります。
    「Read/Write」権限を付与し、スマートプラグを「Tuya IoT Platform」に紐づけます。
    登録すると表示される「Device ID」を、API実行時に利用するため取得しておきます。
  5. トークン発行APIを実行して、トークンを取得します。
    次の章で詳細を記載します!
  6. 取得したトークンを指定して、デバイス操作のAPIを実行します。
    次の次の章で詳細を記載します!!

補足1:ブラウザからデバイス操作

「Devices >{登録したデバイス}> Debug Device」からデバッグ画面を開くと、
ブラウザからデバイスのスイッチ操作を試したり、操作ログを閲覧できます!

https://developer.tuya.com/en/docs/iot/debug?id=Kat5sq6hd1hjt

補足2:PostmanからAPI簡易実行

以下ページにPostmanのインポート用ファイルが用意されています。
https://developer.tuya.com/en/docs/iot/set-up-postman-environment?id=Ka7o385w1svns

「API Package」と「API Environment Package」のファイルをダウンロードし、Postmanでインポートすると、簡単にデバイス操作などのAPIを実行できます!
API実行に必要な処理が「Pre-request Script」にインポートされるため、
クライアントIDなど環境情報を設定したら「Send」ボタンを押すだけです🙌

トークンの発行

Tuya APIを実行する際は、ヘッダーで「sign(署名)」の送信が必要です。
以下手順でsignを生成し、トークン発行APIを実行します。

  1. signに必要な情報を用意します。
    • クライアントID:1KAD46OrT9HafiKdsXeg(例)
    • タイムスタンプ:1588925778000(例)
    • APIのメソッド:GET
    • APIのURL:/v1.0/token?grant_type=1
  2. 用意した情報を、以下のように連結します。
{クライアントID}{タイムスタンプ(13桁)}{対象APIのメソッド}
{ボディ送信内容のハッシュ値(SHA256)}

{対象APIのURL}

※GETメソッドではボディを送信しないため、ボディ送信内容のハッシュ値は固定で
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855」になります。
 ↓

1KAD46OrT9HafiKdsXeg1588925778000GET
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

/v1.0/token?grant_type=1
  1. 連結した文字列と秘密鍵(Client Secret)で、HMAC-SHA256のハッシュ値を取得します。
  2. ハッシュ値の小文字を大文字に変換したものが「sign」です。
  3. ヘッダーに以下項目を指定し、トークン発行APIを実行します。
    • client_id:1KAD46OrT9HafiKdsXeg(例)
    • t:1588925778000(例)
      ※sign生成時のタイムスタンプ
    • sign_method:HMAC-SHA256
    • sing:9E48A3E93B302EEECC803C7241985D0A34EB944F40FB573C....(例)
  4. 成功すると応答で、トークン(access_token)を取得できます。
    このトークンをデバイス操作APIの実行に使用します。

https://developer.tuya.com/en/docs/iot/new-singnature?id=Kbw0q34cs2e5g

デバイス操作APIの実行

デバイス操作APIを実行する際は、新たにsignの生成が必要です。
以下手順でsignを生成し、デバイス操作APIを実行します。

  1. signに必要な情報を用意します。
    • クライアントID:1KAD46OrT9HafiKdsXeg(例)
    • タイムスタンプ:1588925888000(例)
      ※トークン期限内の時刻であれば発行と異なる時刻で可
    • トークン:3f4eda2bdec17232f67c0b188af3eec1(例)
      ※トークン発行APIで取得したもの
    • デバイスID:87707085bcddc23a5fa3(例)
    • APIのメソッド:POST
    • APIのURL:/v1.0/devices/{デバイスID}/commands
    • ボディの送信内容:{"commands":[{"code":"switch_1","value":true}]}(例)
      ※参考:スイッチ操作コマンド
  2. ボディの送信内容をハッシュ値(SHA256)に変換します。
    HMAC-SHA256ではなくSHA256のため、この処理に秘密鍵は使用しません。
    00c2368c059275b6f529e038fc079d641a933173858053bf72070d768d072f0e(例)
  3. 用意した情報を、以下のように連結します。
{クライアントID}{トークン}{タイムスタンプ(13桁)}{対象APIのメソッド}
{ボディ送信内容のハッシュ値(SHA256)}

{対象APIのURL}

1KAD46OrT9HafiKdsXeg3f4eda2bdec17232f67c0b188af3eec11588925888000POST
00c2368c059275b6f529e038fc079d641a933173858053bf72070d768d072f0e

/v1.0/devices/87707085bcddc23a5fa3/commands
  1. 連結した文字列と秘密鍵(Client Secret)で、HMAC-SHA256のハッシュ値を取得します。
  2. ハッシュ値の小文字を大文字に変換したものが「sign」です。
  3. ヘッダーに以下項目、ボディにsign生成時と同じスイッチ操作コマンドを指定し、
    デバイス操作APIを実行します。
    • client_id:1KAD46OrT9HafiKdsXeg(例)
    • t:1588925888000(例)
    • sign_method:HMAC-SHA256
    • sing:9E48A3E93B302EEECC803C7241985D0A34EB944F40FB573C....(例)
    • access_token:3f4eda2bdec17232f67c0b188af3eec1(例)
    • Content-Type:application/json
  4. 成功すると操作コマンド通り、スイッチのOn/Offが切り替わります!✨

https://developer.tuya.com/en/docs/cloud/e2512fb901?id=Kag2yag3tiqn5

おわりに

これでAPIを実行できる環境であれば、
どこからでも電源のOn/Offを切り替えられるようになりました!

そう、コラボフローの申請書カスタマイズからでも🎵

因みに有料プランは高額だったため、試用期間後の継続利用は断念です😢

有料プラン

コラボスタイル Developers

Discussion