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 の操作が可能になります。