茱萸note

電子工作の備忘録と旅行の記録

IoT Raspberry Pi スマートプラグ 電子工作

Tp-Link のスマートプラグ『Tapo P105』を PC・Raspberry Pi から直接操作する

投稿日:2020年12月26日 更新日:

 

Tp-Link のスマートプラグ『Tapo P105』をアプリや IFTTT といった外部サービスを用いずに、PC・Raspberry Pi から直接操作してみます。


目次


先日 Tp-Link のスマートプラグ『Tapo P105』が定価で1400円で買えることを知り、衝動買いしました。ヨドバシカメラで買うと10%ポイント還元なので実質1260円ほどで買えます。

Tp-Link からは HS105 というスマートプラグが先に発売されており、HS105 に関しては Raspberry Pi で動かした等の記事が散見されます。『Tapo P105』に関してはあまりなさそうなのでここに書きます。

Tp-Link 製品をインターネットに繋ぎたくない

Tp-Link 製品、福岡大学のNTPサーバーをただの疎通確認として使用するなど、悪い話も聞きます。なので、私はこのスマートプラグをインターネットから遮断させた環境で使いたいと思うのです。

当然ながら、このスマートプラグは Wi-Fi に接続する必要があります。また、スマートプラグをセットアップする際にスマホにアプリをインストールしたり、アカウント作成が必要です。そして、スマホアプリからスマートプラグを操作するには、両者が同一の Wi-Fi(LAN)内に接続する or 両方がインターネットに接続していることが必須なようです。裏を返せば、セットアップさえ済ませば、スマートプラグと操作元の端末(スマホ・今回の場合 Raspberry Pi)が同一の LAN 内に居さえいれば、インターネットから隔絶された環境でも動くということです。実際、スマホアプリをインストールした後、インターネット接続のないLAN内でスマートプラグのセットアップをしましたが、動きました。今は『スマートプラグ→インターネット』のパケットをルーターで遮断して使っています。なんか橙色のエラーランプは点きっぱなしですが、一応 ON/OFF はできています。

PC・Raspberry Pi からどうやって動かすか?

Raspberry Pi などのいわゆる IoT デバイスから、Tp-Link スマートプラグを操作するには、一般的には IFTTT などのサービス経由で操作します。この方法では、常時スマートプラグを Tp-Link Cloud に接続しておく必要があります。

先述の通り、スマートプラグをインターネットに接続したくないので、この方法は使いたくないです。

Raspberry Pi から Tp-Link スマートプラグを操作する他の方法として、直接操作する方法が挙げられます。「そんなことできるのか?」と思うかも知れませんが、インターネットから隔絶された環境であってもスマホアプリでスマートプラグの操作が可能なので、理論上は可能な気がします。

実際に可能です。PyP100 という Python ライブラリを少しいじれば、Raspberry Pi や PC から Tp-Link のスマートプラグ『Tapo P100』が操作可能です。

PyP100 ライブラリで Tapo P105 を動かす

オリジナルの PyP100 ライブラリを Tapo P105 で使うには、少々手を加える必要があります。Fork して手を加えた後のライブラリを↓にあげておきます。

このソースコードを Clone or ダウンロードして.zipを解凍してください。

pip3 install PyP100 するとオリジナルのライブラリがインストールされてしまい Tapo P105 では動きません。

ダウンロードしたソースコードの『PyP100』フォルダがライブラリの実態です。

必要なライブラリをインストールします。

pip3 pycryptodome pkcs7 requests

以下のような Python コードを書いて、実行します。『Tapo P105』の IP アドレスと Tp-Link ID のメールアドレスとパスワードを適切に記入してください。

# -*- coding: utf-8 -*-
import time
from PyP100 import PyP100

p105 = PyP100.P100('192.168.X.X', 'email@gmail.com', 'Password123') # Creating a P105 plug object

p105.handshake() # Creates the cookies required for further methods 
p105.login() # Sends credentials to the plug and creates AES Key and IV for further methods
p105.getMacAddress() # Get MacAddress and Set terminalUUID

p105.turnOn() # Sends the turn ON request
time.sleep(5)
p105.turnOff() # Sends the turn OFF request

これで、PC or Raspberry Pi から Tapo P105 の ON/OFF 操作ができるようになりました。

Alexa と Raspberry Pi を連携させさえすれば、Tp-Link の公式スキルを用いずとも、Alexa から Tapo P105 の操作が可能になります。

-電子工作
-, , ,


comment

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

関連記事

権限のない環境でvirtualenvを入れる

sudoが使えない、root権限のない環境でvirtualenvを入れます。

【上級者向け】Ubuntuをデュアルブートする《その2:USBメモリ・外付けHDDにUbuntuを入れる》

WindowsとUbuntuでデュアルブートさせたいけど、Ubuntuは空っぽのUSBメモリ・外付けHDDに入れたい人向けの説明です。(超)上級者向け。

ESP8266 と AWS IoT を連携させる【Alexa×Arduino その1】

AWS IoT Core と ESP8266 を連携させて、AWS から ESP8266 の LED を操作できるようにします。最終的には、Alexa を搭載した Amazon Echo 等を使って ESP8266(Arduino)を制御するのが目標です。

Raspberry Pi で Windows PC をシャットダウン or スリープモードにする

Windows PC を Raspberry Pi から遠隔操作してシャットダウン or スリープモードにします。

C言語でのマイコンプログラミングのお作法

マイコンのプログラムをC言語で書く際に心がけるべきこと、知っておくべき知識について述べます。