TP-LINK TAPO P100/P105/P110をLinux/Windowsから直接制御する

ESP32用に作成したライブラリをLinux/Windows用に移殖しコマンドライン・アプリとして実行できるようにしてみた。

TP-LINK TAPO P100/P105をESP32から直接制御する

ESP32用からの変更点は、次の通り。
・JSONライブラリをArduino_JSONからPC向けとしては有名なnlohmann-jsonへ変更。
・HTTPライブラリをESP32/library/HTTPClientから独自作成の簡易型HTTPライブラリへ変更。
・MBEDTLSライブラリは、最新版(2.24.0)に差し替え。

base64ライブラリだが現在DL可能な最新版(1.2.1)については何か問題があるようだ。encode&decode或いはdecode&encodeにより元データが正確に復元できないことがある。パディングが不正になることを発見したのでデータバイト数の計算ミスなのかもしれない。結局、ESP32に含まれていたlibb64でないと正しく動作しなかったのでそのまま流用させてもらった。

しかし、未だにmakeの呪文のような記述方法は全く理解できない。とりあえず私の開発環境では動いているのだが何か間違ってるかも...

【対応ファームウェア】
P110M: 1.1.0 Build 231009 Rel.155719 以前
P105: 1.4.1 Build 20231103 Rel. 36519 以前

【修正】
2023-12-28
上記ファームウェア(Build 231009)以降に対応したものは下記を見るべし。
TP-LINK Tapo P105/P110M のKlapプロトコル対応版 (Windows/Linux)

2023-12-12
P110Mの最新ファームウェア(Build 231009)以降では通信プロトコルが変更されため1003エラーが発生します。動作中のP110Mをお持ちの方はTAPOアプリの自動更新をオフに設定することを推奨します。

2023-12-11
ダウンロード用のtapo.exe(tapo.zip)を動的リンクで生成していたために私の開発環境以外では動作しないことが判明。静的リンクに変更したものに差し替えした。気づくの遅すぎ!!m(_ _)m

2023-09-15
P110Mの電力モニター機能(getEnergyUsage)に対応。

2023-09-14
httpclient.hの不具合により[Tapo P110M]が動作しなかったため修正。

【ダウンロード(Download)】
tapo.exe (Windows実行形式 – Microsoft defender スキャン済み)
tapo app (ソースコード)
libraries (参照ライブラリ)

【フォルダ構成】
tapo/
+ json-develop/ … nlohmann-jsonの最新版(3.9.1)
+ libb64/ … ESP32に含まれているものを同梱
+ mbedtls-2.24.0/ … mbedtlsの最新版(2.24.0)
※ libb64は、最新版(1.2.1)では動作しないことに注意すべし!

【コンパイル(Compile)】
Downloadした圧縮ファイル2個を適当なフォルダ内に展開し次の事前準備を行った後にmakeを実行する。

【Linux – コンパイルの事前準備】
mbedtls-2.24.0に移動後、下記コマンドを実行しmbedtlsライブラリを生成する。

make no_test

【Windows(MinGW) – コンパイルの事前準備】
mbedtls-2.24.0に移動後、下記コマンドを実行しmbedtlsライブラリを生成する。

mingw32-make CC=gcc no_test WINDOWS=1

※makeが途中で失敗してもlibrary/libmbedcrypt.aが生成されていればOK。それしか使わないから...(-_-;)
※うまくいかない場合は、最後の参考情報を見て自己解決するべし。

【コマンドライン・アプリ(Command-Line App)】

【ライブラリ(Library)】

【参照ライブラリ】
libb64
JSONライブラリ – nlohmann/json
ARMmbed/mbedtls

【参考情報】
mbedtls – Knowledge Base / Compiling and Building

【関連投稿】
TP-LINK WiFiスマートプラグをESP32(Arduino)から制御する
TP-LINK WiFiスマートプラグをLinux/Windowsから直接制御する
TP-LINK TAPO P100/P105をESP32から直接制御する
TP-LINK TAPO P100/P105/P110をLinux/Windowsから直接制御する