Tuyaのスマート機器をNode-REDからアクセスする

追記(2021/07/05): ふと気づくとSmartLife Airアプリにログインできなくなっていた。Smartlife.nzでは問題なくログインできたし,Node-REDのノードでも引き続き問題なくログインできたにもかかわらず,だ。Node-red-contrib-smartlifeairのGithubレポジトリで指示されているように,パスワードリセットをリクエストして,同じパスワードを設定することで解消した。


Tuyaが直接,あいはOEM提供するスマート機器を我が家では使うという結論が早い段階でなされ,スマートプラグを実際に購入した

Tuya製品選択の理由の一つは,多くがESP32やESP8266を採用していて,やろうと思えば,ESPHomeやTasmotaのような代替ファームウェアに書き換えができること。しかも,Tuya Convertで,配線をする必要なくOTAでファームウェア書き換えができる可能性がある。だが,この記事ではファームウェアの書き換えを行わない場合を考える。

その場合,TuyaのSmart LifeとIFTTTとの連携は大きなプラスポイントだったが( “IFTTT resumes support for Tuya Smart Life and Wink, gains 22 other new services” ),IFTTTの方が実質有料化したため,メリットが大きく損なわれてしまった。

IFTTTの代替自動化システムの中でもNode-REDに注目し,無料VPSサービス上にインストールして使えるようにしたので,Node-REDで操作できないか試みてみる。

TuyAPIに依存したカスタムノード

カスタムノードでTuyaのスマート機器を扱えるものがないか探してみるといくつか見つかる。この記事を書いた時点で更新が新しい順に以下:

どれもTuyAPIというJavaScriptライブラリを使用しており,そのライブラリ使用のために必要な情報を取得しなければならない。ところがその最初のステップすらできない。Tuyaの開発者アカウントを取得して,それからプロジェクトを開始する,というステップなのだが,開発者アカウントは取得できても,プロジェクトを開始するにはメンバーシップをアップグレードしなくてはならない。 3ヶ月は無料だが,それが終了すると全ての特権を失う,と。

TuyAPIにイッシューとして上げてみたが( “Stuck at the First Step of Getting Keys at IoT.Tuya.com · Issue #369 · codetheweb/tuyapi” ),Tuya側の話なので彼らにはどうしようもできない,無料アカウントを3ヶ月起きに取得し直したら,といった返答。そんなことをしてクラウド経由でデバイスにアクセスするためのキーを再取得するのを3ヶ月ごとに繰り返すのはいくらなんでも非現実的。

SmartLife Airを使う方法

実は,この記事を書こうと考えたもともとのきっかけはnode-red-contrib-smartlifeairというカスタムノードの存在に気づいたこと。そこからさらに調べて上のカスタムノードの存在に気づき,そちらの方がいい選択肢に思えたのでそちらで進めてみようとしたのだが,それが駄目なのならこちらを試してみる。

この方法ではTuyaのOEM機器やサービスを再販していると思われるニュージーランドの会社の提供するSmart Life AirというサービスにTuya機器を再登録する必要があった。

念のためTuya自身によるSmart Lifeアプリからスマートプラグの登録を削除し,SmartLife Airアプリに再登録。おそらくはSmart Lifeアプリをベースに作られているだろうから当然だが,やはりパーミッションの許可を求める画面が出なかった。おそらくはそれが出ればAPのSSIDの入力を省けたのだろうが,手入力でクリア。

node-red-contrib-smartlifeairカスタムノードの説明では,SmartLife Airアプリでアカウント作成・機器登録をしたのち,SmartLife Airのサイトでアカウントを作成し,そこで双方のアカウントをリンクさせる,という手順を指示している。自分は先にSmartLife Airのサイトでアカウントを作成し,次にSmartLife Airアプリで同じメールアドレスでアカウントを作成しようとした。そうすると,このアドレスでは既にアカウントがあるのでログインするか,と問われ了承すると,ログイン画面に遷移。正しいパスワードを何度入力しても,「メールアドレスが正しくないか,パスワードが誤っている」と言われる。「パスワードを忘れた」リンクをたどると,パスワードが「再設定」でき,アプリのアカウントが作成できたようでログインできた。

SmartLife Airのサイトは何をするものかよくわからない。以下にログインした状態の画面を示す。”Set & Refresh Account Details” ボタンを押すと右に登録済みの機器が表示される。ちなみに,node-red-contrib-smartlifeairカスタムノードの指示に従って,米国サーバに登録したはずなのに,このボタンを押すとなぜかカナダのサーバに登録してあるかのような表示がなされる。

Node-red-contrib-smartlifeairカスタムノードを使う

Node-red-contrib-smartlifeairは “Device-Node” というノード一種しか提供しない。そのプロパティーは以下。そのスクリーンショットには含まれていないが,この上部にSmartLife Airにログインするための情報を入力するところがある。

アウトプットとして “All Output Channels as JSON” を選択して得られた出力を末尾に掲載する

ドキュメントに “Please change a status before you select the device, Backend has to receive at least one update in order to pop up in the list.” とあるのでそうする。

Sonoff機器を操作するためのカスタムノードは達成したいことに応じて複数種類のノードが用意されており,見通しが良かった。それに比べるとノードが1種類しか用意しておらず不親切な印象。Sonoff機器を操作するためのカスタムノードでは状態変化の通知を受けるためのノードEvent Listenerが用意されているのだが,それに相当するものはパッと見あたらないため,ポーリングしないと状態検知は検出できないのかと思ったが,その唯一のDevice-Nodeで状態変化通知によるイベント駆動が実現できるとわかってホッとした。いずれにせよ,状態変化の通知を受けるのも,状態を変化させるのも,同じノードで行うというのは親切設計とはいえない。

LEDの状態検知,およびその点灯・消灯はMQTTからできるようになった。しかし肝心の電源の入り・切りについては,そのDevice-Nodeで入力はとして電源入り切りを操作できる選択肢が出てこない…。なんでだよ…。

とりあえず作者に問い合わせて様子見することにする。その他,Node-RED Forumにも’smartlifeair’に関するスレッドがわずかながらある

作者から返事があり,それはこのスマートプラグでは本質的に提供されてない機能とのこと。ただ,回避策のヒントをもらいそれが実際うまく行った

”All Output Channels as JSON” による出力

{"bright_value":180,
 "colour_data":"{\"h\":136.0,\"s\":255.0,\"v\":62.0}",
 "countdown":0,
 "flash_scene_1":"{\"bright\":255,\"frequency\":80,\"hsv\":[{\"h\":120.0,\"s\":255.0,\"v\":255.0}],\"temperature\":255}",
 "flash_scene_2":"{\"bright\":255,\"frequency\":128,\"hsv\":[{\"h\":0.0,\"s\":255.0,\"v\":255.0},{\"h\":120.0,\"s\":255.0,\"v\":255.0},{\"h\":240.0,\"s\":255.0,\"v\":255.0},{\"h\":0.0,\"s\":0.0,\"v\":0.0},{\"h\":0.0,\"s\":0.0,\"v\":0.0},{\"h\":0.0,\"s\":0.0,\"v\":0.0}],\"temperature\":255}",
 "flash_scene_3":"{\"bright\":255,\"frequency\":80,\"hsv\":[{\"h\":0.0,\"s\":255.0,\"v\":255.0}],\"temperature\":255}",
 "flash_scene_4":"{\"bright\":255,\"frequency\":5,\"hsv\":[{\"h\":0.0,\"s\":255.0,\"v\":255.0},{\"h\":120.0,\"s\":255.0,\"v\":255.0},{\"h\":60.0,\"s\":255.0,\"v\":255.0},{\"h\":300.0,\"s\":255.0,\"v\":255.0},{\"h\":240.0,\"s\":255.0,\"v\":255.0},{\"h\":0.0,\"s\":0.0,\"v\":0.0}],\"temperature\":255}",
 "power":false,
 "scene_data":"{\"h\":0.0,\"s\":0.0,\"v\":0.0}",
 "switch_led":false,
 "temp_value":255,
 "work_mode":"colour"}

 

Tuyaのスマート機器をNode-REDからアクセスする」への4件のフィードバック

  1. ピンバック: Node-REDでSmartLife Airカスタムノードで給電がコントロールできないTuya製プラグをなんとか | あくまで暫定措置としてのブログ
  2. ピンバック: スマホバッテリを容量いっぱいまで充電させないようにする | あくまで暫定措置としてのブログ
  3. ピンバック: TuyaがOEM提供した電力計機能つきのスマートプラグをNode-REDでコントロール…できなかった | あくまで暫定措置としてのブログ
  4. ピンバック: TuyAPIを使ったNode-REDでのTuya機器の制御に再挑戦…が断念 | あくまで暫定措置としてのブログ

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください