TP-Link smart plug HS100/HS110

Others (MiLight, Hue, Toon etc...)
reddo
Posts: 26
Joined: Thursday 01 September 2016 12:18
Target OS: Raspberry Pi
Domoticz version:
Location: The Netherlands
Contact:

Re: TP-Link smart plug HS100/HS110

Post by reddo » Friday 07 October 2016 17:56

-rwxrwxrwx 1 pi pi 3159 Oct 6 17:33 tplink_smartplug.py

but with filezilla I can change it anyway I want but it does not help a bit.

Also made an Sh script on and off that calls the python script on but also, no joy. :evil:
-Domoticz-RFLink-PVoutput-Solarmeter-SBFSpot-ESPEasy-Volumio with spotify connect-

MikeF
Posts: 227
Joined: Sunday 19 April 2015 0:36
Target OS: Raspberry Pi
Domoticz version: V4.9700
Location: UK
Contact:

Re: TP-Link smart plug HS100/HS110

Post by MikeF » Saturday 08 October 2016 11:28

Clutching at straws here: have you successfully run other Domoticz commands from switches? have you got security enabled?

reddo
Posts: 26
Joined: Thursday 01 September 2016 12:18
Target OS: Raspberry Pi
Domoticz version:
Location: The Netherlands
Contact:

Re: TP-Link smart plug HS100/HS110

Post by reddo » Saturday 08 October 2016 17:08

Dunno, will try another scriot but then still.... what is caausing the 'not running' ?

Switch is not secured.

Got Domoticz running on a PI2 now instead of a 3 but no difference.

So, maybe, a little setup a dummy switch for dummies anyone ? Might be something wrong there......
-Domoticz-RFLink-PVoutput-Solarmeter-SBFSpot-ESPEasy-Volumio with spotify connect-

uronito
Posts: 24
Joined: Tuesday 04 October 2016 20:45
Target OS: Raspberry Pi
Domoticz version:
Contact:

Re: TP-Link smart plug HS100/HS110

Post by uronito » Monday 10 October 2016 9:40

Thanks @MikeF!!!!!

:D

reddo
Posts: 26
Joined: Thursday 01 September 2016 12:18
Target OS: Raspberry Pi
Domoticz version:
Location: The Netherlands
Contact:

Re: TP-Link smart plug HS100/HS110

Post by reddo » Monday 10 October 2016 18:05

Turned out... I had an error in the python script I think. Copied all the lines in to a file and saved that with notepad++ to the python file, which apparently is no good. Now, downloaded the python file, wacked it on the pi and .... working !!!

Thanks for the patience MikeF !!
-Domoticz-RFLink-PVoutput-Solarmeter-SBFSpot-ESPEasy-Volumio with spotify connect-

doaerts
Posts: 1
Joined: Friday 18 November 2016 17:18
Target OS: -
Domoticz version:
Contact:

Re: TP-Link smart plug HS100/HS110

Post by doaerts » Friday 18 November 2016 17:34

Hi guys

I'm trying to get the python script running (on Windows), but no luck so far...

When using python 3, I get the error message:
"could not connect to host <ip> 9999 "

I also tried using python 2.7, which gives me the error message:
"AttributeError: 'module' objest has no attribute 'inet_pton'"

I'm not a Python expert, could anyone point me in the right direction?

reddo
Posts: 26
Joined: Thursday 01 September 2016 12:18
Target OS: Raspberry Pi
Domoticz version:
Location: The Netherlands
Contact:

Re: TP-Link smart plug HS100/HS110

Post by reddo » Monday 12 December 2016 19:07

doaerts wrote:Hi guys

I'm trying to get the python script running (on Windows), but no luck so far...

When using python 3, I get the error message:
"could not connect to host <ip> 9999 "

I also tried using python 2.7, which gives me the error message:
"AttributeError: 'module' objest has no attribute 'inet_pton'"

I'm not a Python expert, could anyone point me in the right direction?
Can't help you with scripting but.. the HS100's just stopped working through domoticz, get an error each time I want to switch them. Strange thing is, I can still switch from the command line... :evil:

Changed nothing, updated nothing, just happened..
-Domoticz-RFLink-PVoutput-Solarmeter-SBFSpot-ESPEasy-Volumio with spotify connect-

jonohunt
Posts: 7
Joined: Wednesday 21 December 2016 11:18
Target OS: Raspberry Pi
Domoticz version:
Contact:

Re: TP-Link smart plug HS100/HS110

Post by jonohunt » Thursday 22 December 2016 16:10

I've followed the instructions here and am having trouble getting it working with my HS100 plugs.

If I run this from the command line I get:

File "tplink-smartplug.py", line 22
import socket
^
IndentationError: unexpected indent


(I just coped the code from here and pasted it into a file called 'tplink-smartplug.py'.


If I press the switches in Domoticz's web page it shows this n the logs:

2016-12-22 14:04:31.566 Executing script: /home/pi/domoticz/scripts/tplink-smartplug.py
2016-12-22 14:04:31.658 Error: Error executing script command (/home/pi/domoticz/scripts/tplink-smartplug.py). returned: 256



Is this a problem with the script, or could I be doing something wrong?

Maybe one of you who have it working could add a link to download your version of the script and I could try that?

Edit:
I've gone through the steps again from the start and managed to get this working OK :)

rebelo
Posts: 13
Joined: Tuesday 17 January 2017 14:04
Target OS: Raspberry Pi
Domoticz version: 3.5877
Location: Portugal
Contact:

Re: TP-Link smart plug HS110 - send energy data to Domoticz

Post by rebelo » Tuesday 17 January 2017 14:12

MikeF wrote:I have now created a python script to send energy data from the TP-Link HS110 Smart Plug to Domoticz:
Spoiler: show

Code: Select all

#!/usr/bin/env python
# 
# TP-Link Wi-Fi Smart Plug Protocol Client
# For use with TP-Link HS110: energy monitor
# 
# Gets current power (W) and cumulative energy (kWh)
# and sends to Domoticz

import socket
import argparse
import json
import urllib
import urllib2

# ip, port, and command for HS110
ip = '<IP of HS110>'
port = 9999
cmd = '{"emeter":{"get_realtime":{}}}'

# Domoticz command stub and IDx of HS110
baseURL = 'http://<Domoticz IP:port>/json.htm?type=command&param=udevice&nvalue=0'
HSIdx = <Domoticz IDx of HS110>

# Encryption and Decryption of TP-Link Smart Home Protocol
# XOR Autokey Cipher with starting key = 171
def encrypt(string):
	key = 171
	result = "\0\0\0\0"
	for i in string: 
		a = key ^ ord(i)
		key = a
		result += chr(a)
	return result

def decrypt(string):
	key = 171 
	result = ""
	for i in string: 
		a = key ^ ord(i)
		key = ord(i) 
		result += chr(a)
	return result

def domoticzrequest (url):
   request = urllib2.Request(url)
#   request.add_header("Authorization", "Basic %s" % base64string)
   response = urllib2.urlopen(request)
   return None;

# Send command and receive reply 
try:
	sock_tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
	sock_tcp.connect((ip, port))
	sock_tcp.send(encrypt(cmd))
	data = sock_tcp.recv(2048)
	sock_tcp.close()
	
#	print "Sent:     ", cmd
	result = decrypt(data[4:])
	jsonData = json.loads(result)
#	print "Received: "
#	print json.dumps(jsonData, indent=4, sort_keys=True)
	power = jsonData['emeter']['get_realtime']['power']
	total = jsonData['emeter']['get_realtime']['total'] * 1000
#	print power, total
except socket.error:
	quit("Cound not connect to host " + ip + ":" + str(port))

# Send data to Domoticz
try:
    url = baseURL + "&idx=%s&svalue=%s;%s" % (HSIdx, power, total)
    domoticzrequest(url)
except urllib2.URLError, e:
	print e.code
Create a virtual sensor with sensor type 'Electric (Instant+Counter)', and insert its IDx and the IP addresses of your HS110 and Domoticz server in the script. Then set up a crontab entry to run the script every 5 or 10 minutes, as you prefer.

It will appear in the Utilities page - here's an example:
Image
@MikeF
Tks a lot for this.
Getting though as 401 error even when run from the command line.
Script copied/ edited via nano and chmoded a+x.
Believe it is something regarding authorization but can not find solution.
Any hint from You?

rebelo
Posts: 13
Joined: Tuesday 17 January 2017 14:04
Target OS: Raspberry Pi
Domoticz version: 3.5877
Location: Portugal
Contact:

Re: TP-Link smart plug HS100/HS110

Post by rebelo » Tuesday 17 January 2017 14:20

reddo wrote:
doaerts wrote:Hi guys

I'm trying to get the python script running (on Windows), but no luck so far...

When using python 3, I get the error message:
"could not connect to host <ip> 9999 "

I also tried using python 2.7, which gives me the error message:
"AttributeError: 'module' objest has no attribute 'inet_pton'"

I'm not a Python expert, could anyone point me in the right direction?
Can't help you with scripting but.. the HS100's just stopped working through domoticz, get an error each time I want to switch them. Strange thing is, I can still switch from the command line... :evil:

Changed nothing, updated nothing, just happened..
@reddo

See if this can help You.
Have lost a few hours trying to make this work.
Like You command line was ok but nothing else.
And finaly have found(I think) that editing the scripts in windows even with notepad+ and uploading them via FileZilla did not work.
Using the pi inbuilt nano editor and chomd via commmand line did the trick.

Enjoy :-)

MikeF
Posts: 227
Joined: Sunday 19 April 2015 0:36
Target OS: Raspberry Pi
Domoticz version: V4.9700
Location: UK
Contact:

Re: TP-Link smart plug HS110 - send energy data to Domoticz

Post by MikeF » Monday 23 January 2017 13:07

rebelo wrote: Getting though as 401 error even when run from the command line.
Script copied/ edited via nano and chmoded a+x.
Believe it is something regarding authorization but can not find solution.
Any hint from You?
I've never used authorisation on Domoticz, so don't know, I'm afraid - try without?

rebelo
Posts: 13
Joined: Tuesday 17 January 2017 14:04
Target OS: Raspberry Pi
Domoticz version: 3.5877
Location: Portugal
Contact:

Re: TP-Link smart plug HS110 - send energy data to Domoticz

Post by rebelo » Tuesday 24 January 2017 20:30

MikeF wrote:
rebelo wrote: Getting though as 401 error even when run from the command line.
Script copied/ edited via nano and chmoded a+x.
Believe it is something regarding authorization but can not find solution.
Any hint from You?
I've never used authorisation on Domoticz, so don't know, I'm afraid - try without?
Tks but what i ment by authorization was abt the error, 401, i get in the command line.
Never mind will try again.

hitech2207
Posts: 3
Joined: Wednesday 15 February 2017 10:19
Target OS: Raspberry Pi
Domoticz version:
Contact:

Re: TP-Link smart plug HS100/HS110

Post by hitech2207 » Wednesday 15 February 2017 10:27

Hello,

First time reply on this forum but follower since months. :)

I have setup a new Domoticz server on a raspberry pi and it works like i charm.

I still need to read all tutorials and manuals to get it under control.

I have a smartplug HS100 and not HS110.

Meaning that i don't have the energy meter in it.

I am getting these errors when i launch the script:

~/Desktop $ python tplink-smartplug.py -c on
Traceback (most recent call last):
File "tplink-smartplug.py", line 63, in <module>
power = jsonData['emeter']['get_realtime']['power']
KeyError: 'get_realtime'

I tried to remove the energy meter script lines from the given python script without success.

Can someone help me out and provide me a script that just turns on and off the HS100 without any error?

Thank you :)

rebelo
Posts: 13
Joined: Tuesday 17 January 2017 14:04
Target OS: Raspberry Pi
Domoticz version: 3.5877
Location: Portugal
Contact:

Re: TP-Link smart plug HS100/HS110

Post by rebelo » Wednesday 15 February 2017 10:54

@ hitech2207

You have the links in this post
https://raw.githubusercontent.com/softS ... artplug.py
and
https://github.com/softScheck/tplink-smartplug

Check them out.

Rebelo

hitech2207
Posts: 3
Joined: Wednesday 15 February 2017 10:19
Target OS: Raspberry Pi
Domoticz version:
Contact:

Re: TP-Link smart plug HS100/HS110

Post by hitech2207 » Wednesday 15 February 2017 12:08

Hi Rebelo,

I was able to successfully launch this script and my light on from my raspberry terminal. :D

Now i need to find out how i can implement this in domoticz correctly.

I used this on cmd but nothing happens..

for ON:

script:///home/pi/Desktop/tplink-smartplug.py -t 192.168.1.22 -c on

for OFF:

script:///home/pi/Desktop/tplink-smartplug.py -t 192.168.1.22 -c off

This doesn't work.

When i use in terminal:

python /home/pi/Desktop/tplink-smartplug.py -t 192.168.1.22 -c on

it works..

What is wrong?

Thank you

rebelo
Posts: 13
Joined: Tuesday 17 January 2017 14:04
Target OS: Raspberry Pi
Domoticz version: 3.5877
Location: Portugal
Contact:

Re: TP-Link smart plug HS100/HS110

Post by rebelo » Wednesday 15 February 2017 20:39

Well, path looks ok.
And assuming that You are putting the cmd lines on the virtual switch that You have created.

If so check the script permissions and try to chmod it a+x.

Are you editing the scripts in windows even with notepad+ and uploading/ changing permissions via FileZilla?
I believe that was my mistake at that time.
Using the pi inbuilt nano editor and chomd via commmand line did the trick.

Let me know.

hitech2207
Posts: 3
Joined: Wednesday 15 February 2017 10:19
Target OS: Raspberry Pi
Domoticz version:
Contact:

Re: TP-Link smart plug HS100/HS110

Post by hitech2207 » Wednesday 15 February 2017 21:06

Hi Rebelo,

sudo chmod a+x did the trick :)

Concerning the scripts i always use the terminal on my mac to ssh into the raspberry pi and sudo nano the scripts.

Thanks again :)

rebelo
Posts: 13
Joined: Tuesday 17 January 2017 14:04
Target OS: Raspberry Pi
Domoticz version: 3.5877
Location: Portugal
Contact:

Re: TP-Link smart plug HS100/HS110

Post by rebelo » Wednesday 15 February 2017 21:10

Good job :D , enjoy it.

User avatar
marcotini
Posts: 36
Joined: Thursday 16 February 2017 18:51
Target OS: Raspberry Pi
Domoticz version: Beta
Contact:

Re: TP-Link smart plug HS110 - send energy data to Domoticz

Post by marcotini » Wednesday 22 February 2017 23:23

MikeF wrote:I have now created a python script to send energy data from the TP-Link HS110 Smart Plug to Domoticz:
Spoiler: show

Code: Select all

#!/usr/bin/env python
# 
# TP-Link Wi-Fi Smart Plug Protocol Client
# For use with TP-Link HS110: energy monitor
# 
# Gets current power (W) and cumulative energy (kWh)
# and sends to Domoticz

import socket
import argparse
import json
import urllib
import urllib2

# ip, port, and command for HS110
ip = '<IP of HS110>'
port = 9999
cmd = '{"emeter":{"get_realtime":{}}}'

# Domoticz command stub and IDx of HS110
baseURL = 'http://<Domoticz IP:port>/json.htm?type=command&param=udevice&nvalue=0'
HSIdx = <Domoticz IDx of HS110>

# Encryption and Decryption of TP-Link Smart Home Protocol
# XOR Autokey Cipher with starting key = 171
def encrypt(string):
	key = 171
	result = "\0\0\0\0"
	for i in string: 
		a = key ^ ord(i)
		key = a
		result += chr(a)
	return result

def decrypt(string):
	key = 171 
	result = ""
	for i in string: 
		a = key ^ ord(i)
		key = ord(i) 
		result += chr(a)
	return result

def domoticzrequest (url):
   request = urllib2.Request(url)
#   request.add_header("Authorization", "Basic %s" % base64string)
   response = urllib2.urlopen(request)
   return None;

# Send command and receive reply 
try:
	sock_tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
	sock_tcp.connect((ip, port))
	sock_tcp.send(encrypt(cmd))
	data = sock_tcp.recv(2048)
	sock_tcp.close()
	
#	print "Sent:     ", cmd
	result = decrypt(data[4:])
	jsonData = json.loads(result)
#	print "Received: "
#	print json.dumps(jsonData, indent=4, sort_keys=True)
	power = jsonData['emeter']['get_realtime']['power']
	total = jsonData['emeter']['get_realtime']['total'] * 1000
#	print power, total
except socket.error:
	quit("Cound not connect to host " + ip + ":" + str(port))

# Send data to Domoticz
try:
    url = baseURL + "&idx=%s&svalue=%s;%s" % (HSIdx, power, total)
    domoticzrequest(url)
except urllib2.URLError, e:
	print e.code
Create a virtual sensor with sensor type 'Electric (Instant+Counter)', and insert its IDx and the IP addresses of your HS110 and Domoticz server in the script. Then set up a crontab entry to run the script every 5 or 10 minutes, as you prefer.

It will appear in the Utilities page - here's an example:
Image
Can you explain how to do that? Because when I create the virtual sensor and put the script in /script/ I don't know what else to do.
Screen Shot 2017-02-22 at 22.22.42.png
Screen Shot 2017-02-22 at 22.22.42.png (216.54 KiB) Viewed 3984 times

ikek
Posts: 3
Joined: Sunday 05 February 2017 18:15
Target OS: Windows
Domoticz version:
Contact:

Re: TP-Link smart plug HS100/HS110

Post by ikek » Wednesday 08 March 2017 16:24

Did you ever found the solution?
I have exactly the same problem. Strange thing is: I created a Domoticz environment on a Windows computer. The script did id not work with python 2.7.4 but works fine with python 3.4 (I have modified the script for python3). However, if I run python3 on the raspberry with the same script it is still not working...

Post Reply

Who is online

Users browsing this forum: Bing [Bot] and 4 guests