茱萸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

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

関連記事

Alexa で ESP8266 を制御する ―― プログラムの解説編【Alexa×Arduino その3】

Alexa で ESP8266 を制御するプログラムの解説です。

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

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

【Ubuntu】【Python】virtualenvを使う

UbuntuでPythonのパッケージ管理をしやすくするためにvirtualenvを導入します。

プロキシ設定が必要な学内LANに接続するときに役に立つスクリプト

プロキシ設定が必要な学内 or 社内LANに接続する際のプロキシ設定の切り替えをしやすくするスクリプトを用意します。

Arduinoもどき

Arduinoは普通に買うと高いので、互換品を作ってしまいます。