TP-Link スマートコンセントをAPIから操作(2)

前回はnode.jsベースのtplink-smarthome-apiというAPIを試したが、まだまだ理解できていないし、テレビの見過ぎを防止するために時間をカウントして消すという方法ができそうにない。他にPythonベースのAPIを見つけた。

Reverse Engineering the TP-Link HS110

書いている内容が理解できないのは自分の英語のレベルが低いせいだけではない。タイトルにある通り、リバースエンジニアリングで解析しているとのことだ。やっていることはとても真似できそうにもないが、pythonで書かれているスクリプトは非常にわかりやすかった。

プラグへ通信データを送受信するときは0x85 (171)を先頭キーとして、暗号化しているとのことだ。また、スクリプトはPython2ベースとのこと。

コマンド名を入れるやり方とJSONで書くやり方2種類用意されている。
コマンド名指定で電源ON

$ python2.7 tplink_smartplug.py -t 192.168.0.2 -c on
Sent: {"system":{"set_relay_state":{"state":1}}}
Received: {"system":{"set_relay_state":{"err_code":0}}}
JSON指定で電源ON
$ python2.7 tplink_smartplug.py -t 192.168.0.2 -j '{"system":{"set_relay_state":{"state":1}}}'
Sent: {"system":{"set_relay_state":{"state":1}}}
Received: {"system":{"set_relay_state":{"err_code":0}}}

コマンドは以下のものがある。

CommandDescription
onTurns on the plug
offTurns off the plug
infoReturns device info
cloudinfoReturns cloud connectivity info
wlanscanScan for nearby access points
timeReturns the system time
scheduleLists configured schedule rules
countdownLists configured countdown rules
antitheftLists configured antitheft rules
rebootReboot the device
resetReset the device to factory settings
energyReturn realtime voltage/current/power

最後の項目にあるenargyなら、電流値を見てテレビがついているかわかるかと思ったが、HS105は対応していないらしい。

$ python2.7 tplink_smartplug.py -t 192.168.0.2 -c energy
Sent: {“emeter”:{“get_realtime”:{}}}
Received: {“emeter”:{“get_realtime”:{“err_code”:-1,”err_msg”:”module not support”}}}

ちなみにpyton3で試したら2と3との互換の関係でできなかった。原因がわかったらまた報告します。

TP-Link スマートコンセントHS-105をAPIから操作(1)

前回ためしたTP-Link スマートコンセントはタイマー機能では使えるようになったが、ONしている時間の累積時間で電源を切るという機能はなさそうだ。いろいろ調べていると、APIでがいぶから操作できることが分かった。メーカからではないがAPIを開発して公表している人がいた。

まず見つけたのは tplink-smarthome-api https://github.com/plasticrake/tplink-smarthome-api   Node.jsベースで開発していてgithubで公開している。まだパソコンにnode.jsをインストールしてなかったので下記手順に沿ってインストール。 https://qiita.com/kyosuke5_20/items/c5f68fc9d89b84c0df09

npm install -g tplink-smarthome-api  

でインストールができる。ヘルプを開くには  

tplink-smarthome-api --help  

detailsとかgetInfoとかで情報は出せた。   他にコマンドは

電源OnとOFF

$ tplink-smarthome-api sendCommand 192.168.0.2:9999 '{"system":{"set_relay_state":{"state":1}}}'
Sending to 192.168.0.2:9999...
response:
{ err_code: 0 }
lmjs $ tplink-smarthome-api sendCommand 192.168.0.2:9999 '{"system":{"set_relay_state":{"state":0}}}'
Sending to 192.168.0.2:9999...
response:
{ err_code: 0 }

時間を取得

$ tplink-smarthome-api sendCommand 192.168.0.2:9999 '{"time":{"get_time":{}}}'
Sending to 192.168.0.2:9999...
response:
{ year: 2018,
  month: 10,
  mday: 26,
  hour: 23,
  min: 12,
  sec: 44,
  err_code: 0 }

TP-Link スマートコンセント HS105を試してみた

どうしても夜だらだらとテレビを見てしまう。しかし、なかなか自分でやめることができない。見過ぎたら自動的にテレビを見れなくする方法がないか考えていたところ、コンセントで自動的に電源を切る方法を思いついた。探してみるとスマートコンセントというものがあることを知った。

【Amazon Alexa認定取得製品】 TP-Link WiFi スマートプラグ 遠隔操作 直差しコンセント Echo シリーズ Googleホーム対応 音声コントロール コンパクト ハブ不要 3年保証 HS105

スペックは次の通り

  • Wi-Fi経由でスマホを使って設定する
  • スケジュールを組んでON/OFFできる
  • タイマー設定しOFFすることができる
  • Alexaでコントロールできる
  • 100VAC 50/60Hz 14A
    ( 電源容量は重要なスペックだと思うが商品が届くまでわからなかった。)

Amazonで購入し、次の日に到着した。設定は簡単。スマホでKasaをインストール。Wi-fiでコンセント本体に接続し、IPアドレスや名前を設定。そして家のWi-fiに接続しアプリを立ち上げれば、ON/OFFができたり、スケジュールが設定できる。スケージュールは平日は夜8時半にOFFし、毎日朝6時半にONするようにした。

やってみたら効果てきめん。テレビの見過ぎを防ぐことができた。

出来れば3時間連続で見たら、テレビを切るような感じにしたかったが、そういう機能は見つからなかった。

Kasa メイン画面
メイン画面
Kasa スケジュール画面
スケジュール画面