TP-LINK Tapo P105/P110M のKlapプロトコル対応版 (Windows/Linux)

お待たせしました!って誰も待ってないか...v(-_-;)

P105/P110MのKlapプロトコル(最新ファーム)対応版を作ってみた。

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

※ESP32対応版は下記を参照。
TP-LINK Tapo P110M のKlapプロトコル対応版 (ESP32)

ちなみにKlapプロトコル専用なので古いファームには下記投稿のコマンドを使用する必要がある。
TP-LINK TAPO P100/P105/P110をLinux/Windowsから直接制御する

【既知の問題】
現状ではセッション開始後の最初のリクエストがときどきHTTP-403エラーになるという不具合が残されている。セッション開始のためのハンドシェーク処理は成功するもののその後のリクエストがなぜかエラーになってしまいハンドシェークからやり直さないとリカバリーできないという現象でリクエストが成功した場合にはその後も問題はない。時間をかけて調べてみたが今のところ原因不明...orz

【セッション復元機能】
試験では通常0~2回、まれに最大5回までのリトライで成功してはいるがコマンド実行毎に新たにセッションを開始するとリトライにより実行時間にかなり悪影響を与えてしまう。

改善策としてセッション情報を保存/復元できるようにしてみたところ効果バツグン。通常ならコマンド実行毎に3回の通信が必要なところセッション復元できれば1回の通信で済むから3倍速となる。

セッション情報は次の場所に”tapo2-xxx.xxx.xxx.xxx”の名前でデバイス毎に保存され間違って削除されても問題はない。

linux: /var/tmp
windows: TEMP或いはTMP環境変数が示すフォルダ

【参照ライブラリ】
libb64は変更なし。(というか変更してはいけない)
json-developを3.11.3にアップデート。
mbedtlsを2.28.6にアップデート。

※mbedtlsの現在の最新はV3系であるが環境依存ファイルを生成するためにpythonやperlが必須となってしまったため断念しV2系の最新にアップデート。

【コンパイルの事前準備】
適当なフォルダにsources.zipを展開する。展開されたmbedtls-2.28.6フォルダに入って次のコマンドを実行する。

linux: make no_test
windows(MSYS2-MinGW): make CC=gcc no_test WINDOWS=1

【コンパイル】
展開先フォルダでmakeを実行する。再コンパイルするときはmakeする前にmake cleanを実行する。

【ダウンロード】
sources.zip
tapo2.exe (windows-x64)

【修正履歴】
2024-01-13
昨日からP105を回し続けているがエラーもなく別端末からの排他制御エラー(-1012)も発生しなくなったようだ。ということは現状でOKということかな?ふと気になって参考にさせて頂いたplugp100で試してみたらP105の電源オンオフは出来なかった。もしかして世界初のP105のKlapプロトコル対応?...それはともかく昨日はお天気も良くロケットも気持ちよさそうに飛び立っていって良き日であった。(^o^)
と思っていたらいきなりP105がエラーばかり起こして何もできなくなった。TAPOアプリからの操作も出来ない。でも暫く待ってたら復旧した。普段はそう頻繁にオンオフすることはないだろうという前提であれば大丈夫なのかな...(-_-;)

2024-01-12
P105の挙動が怪しい。HTTPリクエストの送信処理を変更してみたところだいぶましにはなったような気もするがごくまれにP105がハングアップしてしまうことがある。P105にはタイミングバグがあるのかな?もしそうだとすると厄介だ。P110Mは一日中ぶん回しても問題ないのに...
P105の-1301エラーは処理遅延の警告みたいであるが頻繁に出てウザイので無視するように修正。

2024-01-11
昨日はうまく動作していたP105が今日はなぜか-1012エラーで動かない...orz
そういえばP105のon/off操作にはterminalUUID指定が必要なことを思い出し実装を追加してみたところうまく動作するようにはなったが端末Aからon/off操作した後に端末Bからon/off操作しようとしても2分経過しないと-1012エラーになってしまう。なぜだろう?
とりあえず動作するようにはなったので再公開。(-_-;)
ちなみにP105はHWの処理能力が足りないのか不安定っぽい。これから購入する人はP110Mのほうが安定してるのでお勧め。

2024-01-10
mbedtlsの使い方のミスによるメモリーリークの修正、及び、通信毎にソケットを接続切断するように修正。
★★★昨日までにDLした方は入れ替えをお願いします。★★★

2024-01-09
httpclint.hが、ごちゃごちゃしてだいぶ見苦しなってきたので整理整頓&修正を行った。

2024-01-08
細かな改良。

2023-12-28
HTTP処理を改良しリトライの処理時間を短縮してみた。リトライしたのがわからないぐらいにはなった。かな。

2023-12-26
軽微なバグを修正。RaspberryPi/Ubuntu/Windowsで動作を確認。

2023-12-25
セッションタイムアウト値が間違っていたので修正。

【ソースコード】

“TP-LINK Tapo P105/P110M のKlapプロトコル対応版 (Windows/Linux)” への9件の返信

  1. おお!素晴らしいソフトウェアを見つけた!と思い
    早速使わせていただきましが。が…

    P105を使っています。
    ファームウェアは
    1.4.1 Build 20231103 Rel. 36519
    です。

    tapo.exe だと
    TAPO Status: [1003]
    でダメなようでした。

    tapo2.exe(2024-01-09) だと
    [tapo2.h:309] HttpClient::request(292, “POST”, “app/handshake2”, 000000c8略, 32) = -1
    [tapo2.h:246] HttpClient::request(292, “POST”, “app/handshake1”, 00007ff6略, 16) = -1
    [tapo2.h:246] HttpClient::request(292, “POST”, “app/handshake1”, 00007ff6略, 16) = -1
    [tapo2.h:246] HttpClient::request(292, “POST”, “app/handshake1”, 00007ff6略, 16) = -1
    [tapo2.h:246] HttpClient::request(292, “POST”, “app/handshake1”, 00007ff6略, 16) = -2
    [tapo2.h:246] HttpClient::request(292, “POST”, “app/handshake1”, 00007ff6略, 16) = -2
    [tapo2.h:246] HttpClient::request(292, “POST”, “app/handshake1”, 00007ff6略, 16) = -2
    [tapo2.h:246] HttpClient::request(292, “POST”, “app/handshake1”, 00007ff6略, 16) = -2
    [tapo2.h:246] HttpClient::request(292, “POST”, “app/handshake1”, 00007ff6略, 16) = -2
    [tapo2.h:246] HttpClient::request(292, “POST”, “app/handshake1”, 00007ff6略, 16) = -2
    と表示され、ダメなようでした。
    (何の数字かかりませんが念の為、数値を略しました。)

    このファームウェアもKlapとやらなのでしょうか?
    何とか動作させることはできませんでしょうか?

    ( https://github.com/achetronic/tapogo も何でか動かないし…泣)

    1. コメントありがとうございます。
      P105の最新ファームでは試したことはありませんが、tapo.exeで1003エラーが出るということは新しいプロトコル(Klap)に変更されたものと思われます。
      調べてみると日本以外では数年前からKasa/Tapoとも既に変更されているみたいですが、なぜか日本だけ?が昨年から変更されつつあるようです。
      P110Mでも原因不明なエラーは出ますがリトライにより解消されるとの判断から公開したのですがまだまだ何かあるようですね...
      handshake1/handshake2での-1エラーはデバイス側からいきなり接続を切られると発生します。デバイスをコンセントから抜き差しすると正常に動作するようになることがありますが、それはさておき現状ではリトライ中の接続断には対応できていないのでそのへんの改良が必要みたいですね。検討してみたいと思いますのでお待ちください。

    2. 手持ちのP105のファームを”1.4.1 Build 20231103 Rel. 36519″にアッブデートし、ついさきほど公開した最新版で試したところうまく動作しました。
      P110は通信毎に接続を切らないタイプのサーバーですがP105は通信毎に接続を切るタイプのサーバーですのでどちらにも対応できるようにしてみました。
      試してみてください。

  2. 超早の対応、ありがとうございます!
    P105
    1.4.1 Build 20231103 Rel. 36519
    にて一応動作しました。

    なのですがどうも、一度でもAndroidのTapoアプリ(3.1.605)からON/OFFを行うと、以降 tapo2.exe にて
    [tapo2.h:105] TAPO Error Code (-1012)
    というエラーが出て、ON/OFF操作できなくなってしまいました。

    その後、P105をコンセントプラグから一度抜いて挿し直すと、再び tapo2.exe にてON/OFF可能になります。

    なお同じ上記ファームウェアの3台のP105で試しましたが、どれも同じ動作でした。
    ちなみにON/OFF操作できない状態でもINFOは取れます。

    他の方はどうでしょうか?

    1. 試して頂いてありがとうございます。
      -1012はP105の仕様みたいで2分経過するまで待つ必要があります。誤動作ではないため回避方法はありません。
      また、動作には問題ないようなのですがP105はHWの処理性能が低すぎて内部処理が間に合わない状況になると-1301エラーが返されることがあります。
      それらが気になるようなら安定して動作するP110Mをお勧めします。

    2. ごめんなさい。間違ってました。
      もう一度動作確認してみたらtapoアプリから操作後でも問題ありませんでした。
      本日、気になる点があり何度か更新&UPしたため途中の版を試されたのだと思います。
      再度DLして試してみてください。

    3. たびたびすいません。
      TAPOアプリ操作後に-1012が出ることもあるようです。
      条件はわかりませんが...

  3. はじめまして。ずっと前からお礼を言わななくちゃと思っていました。
    前のプロトコルからありがたく利用させて頂いています。
    本当に、待っていました!です。
    VisualStudio2022に移植して、1/13版にて複数端末からP105を制御できました。
    ファームは1.4.1 Build 20231103 Rel. 36519です。
    うちにはP105が10台以上あって生活機能の一部になっているのでこの神ツールが無ければ途方に暮れるところでした。ありがとうございます。
    今後のキャッチアップにもご期待しております。

    1. コメント&使って頂いてありがとうございます。
      P110Mのほうがいいですよ!とお勧めしたいところですがP105が10台とは...それだけ数があると買い替えるのも大変ですね。P105はクセがありすぎるので個人的には安心して使えるHS105を今でもメインで使っているのですが入手が難しくなったのと電力モニターが可能になるといろいろ面白そうなことができそうなので対応してみました。クラウドベースだと停電などインターネットが使えない緊急時に役に立たないのが辛すぎるので個人的に調べて作ってみたのが始まりです。何かのお役に立てれば幸いです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


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