TP-Link smart plug HS100/HS110

Forum pour tous les autres objets : sondes météo, capteurs, actionneurs ...
Vous avez un besoin mais vous ne savez pas quel matériel choisir ? C'est ici.
chrisG4269
Messages : 29
Inscription : 30 mars 2017, 21:27

TP-Link smart plug HS100/HS110

Message par chrisG4269 »

Bonjour
j'ai profité de la promo amazon pour débuter en domotique ( HS = 15.99 )
config : raspberry pi 3 jessie lite, raspian, tp link h100
Quelqu'un aurait il la solution pour intégrer cette prise dans domoticz
J ai copier le scipt suivant dans /usr/bin
https://raw.githubusercontent.com/softS ... artplug.py

que faut il faire merci
QcVictor
Messages : 79
Inscription : 17 janv. 2015, 14:52

Re: TP-Link smart plug HS100/HS110

Message par QcVictor »

Salut
Moi j'utilise ceux script nommer "tplink-smartplug.py" a placer dans le dossier

Code : Tout sélectionner

/home/pi/domoticz/scripts/python

Code : Tout sélectionner

#!/usr/bin/env python
# 
# TP-Link Wi-Fi Smart Plug Protocol Client
# For use with TP-Link HS-100 or HS-110
#  
# by Lubomir Stroetmann
# Copyright 2016 softScheck GmbH 
# 
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# 
#      http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# 
#
import socket
import argparse

version = 0.1

# Check if IP is valid
def validIP(ip):
	try:
		socket.inet_pton(socket.AF_INET, ip)
	except socket.error:
		parser.error("Invalid IP Address.")
	return ip 

# Predefined Smart Plug Commands
# For a full list of commands, consult tplink_commands.txt
commands = {'info'     : '{"system":{"get_sysinfo":{}}}',
			'on'       : '{"system":{"set_relay_state":{"state":1}}}',
			'off'      : '{"system":{"set_relay_state":{"state":0}}}',
			'cloudinfo': '{"cnCloud":{"get_info":{}}}',
			'wlanscan' : '{"netif":{"get_scaninfo":{"refresh":0}}}',
			'time'     : '{"time":{"get_time":{}}}',
			'schedule' : '{"schedule":{"get_rules":{}}}',
			'countdown': '{"count_down":{"get_rules":{}}}',
			'antitheft': '{"anti_theft":{"get_rules":{}}}',
			'reboot'   : '{"system":{"reboot":{"delay":1}}}',
			'reset'    : '{"system":{"reset":{"delay":1}}}'
}

# 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

# Parse commandline arguments
parser = argparse.ArgumentParser(description="TP-Link Wi-Fi Smart Plug Client v" + str(version))
parser.add_argument("-t", "--target", metavar="<ip>", required=True, help="Target IP Address", type=validIP)
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument("-c", "--command", metavar="<command>", help="Preset command to send. Choices are: "+", ".join(commands), choices=commands) 
group.add_argument("-j", "--json", metavar="<JSON string>", help="Full JSON string of command to send")
args = parser.parse_args()

# Set target IP, port and command to send
ip = args.target
port = 9999
if args.command is None:
	cmd = args.json
else:
	cmd = commands[args.command]



# 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
	print "Received: ", decrypt(data[4:])
except socket.error:
	quit("Cound not connect to host " + ip + ":" + str(port))
Lui attribué les droits d’exécution:

Code : Tout sélectionner

chmod a+x tplink-smartplug.py
Tu crée une switch virtuel, avec comme: on action

Code : Tout sélectionner

script:///home/pi/domoticz/scripts/python/tplink-smartplug.py -t 192.168.1.63 -c on
et off action

Code : Tout sélectionner

script:///home/pi/domoticz/scripts/python/tplink-smartplug.py -t 192.168.1.63 -c off
(remplace l'ip par celui de ton DZ et fait une réservation DHCP dans ton routeur pour t'assurer que l'adresse de tes plug ne change pas)
Source: http://www.domoticz.com/forum/viewtopic.php?t=13290
Darkangel54360
Messages : 9
Inscription : 16 juil. 2018, 09:46

Re: TP-Link smart plug HS100/HS110

Message par Darkangel54360 »

Bonjour,

Je remonte ce post, mais je viens juste confirmer le fonctionnement pour mes 2 prises TP Link HS100.

Merci beaucoup
jibe
Messages : 3
Inscription : 03 déc. 2018, 21:53

Re: TP-Link smart plug HS100/HS110

Message par jibe »

hello,

Je test domoticz sur PC (installation sous Windows) et je ne parviens pas à exécuter les commandes 'ON' et 'OFF'. Sous Windows j'utilise DOS, mais j'imagine que mon problème viens de là... Une idée ?
chris80
Messages : 5
Inscription : 29 nov. 2015, 18:57

Re: TP-Link smart plug HS100/HS110

Message par chris80 »

Bonjour à toutes et tous.
J'ai installé cette prise et j'arrive a la contrôler avec son appli Android.
J'ai suivi scrupuleusement le tuto pour l'installer dans Domoticz sur Raspberry PI3.
J'ai procédé par copier/coller pour éviter le fautes de frappe et mis la bonne adresse IP dans les actions On/Off de l'interrupteur virtuel de Domoticz et pourtant cela ne fonctionne pas.
Quelqu'un peut il me dire comment je peux debugger çà et trouver mon erreur ?

Merci
@+
Chris
Domoticz sur RaspberryPi3 - RFXCom - Zwave
grdsek
Messages : 15
Inscription : 30 nov. 2017, 14:23
Localisation : loire atlantique

Re: TP-Link smart plug HS100/HS110

Message par grdsek »

bonjour,
c'est curieux car pour ma par ça fonctionne parfaitement.
eJ'ai cependant besoin d'une aide: je souhaite être prévenu quand la prise est allumée manuellement (pas par l'interface domoticz) via les notifications prowl. Cela fonctionne quand j'actionne la prise par domoticz, mais pas quand j'appuie directement sur le bouton. Est-il possible de récupérer l'état de la prise par un script toute les min?
Merci pour les réponses
domoticz sur Pi3, RFXCOM , Hue bridge et interrupteur DIO
lordzurp
Messages : 1
Inscription : 02 juin 2019, 09:37
Localisation : Lyon, France

Re: TP-Link smart plug HS100/HS110

Message par lordzurp »

Bonjour les gars!

c'est mon premier post sur ce forum (mais pas le premier sur un tableau ...)

Je viens de faire une nouvelle installation de mon RPI avec Domoticz, et enfin mis en place une méthode propre pour gérer la prise HS110

J'ai commencé avec ce plugin: https://github.com/dahallgren/domoticz-tplink-smartplug, un peu modifié avec quelques morceaux de code utiles trouvés sur le forum EN, et une pincée de code maison

Je devais gérer les 2 versions de HS110, la v1 qui parle en unités complètes et la v2 qui travaille avec des millis

voici le résultat: https://github.com/lordzurp/domoticz-tplink-smartplug

Nouveau type d'appareil

Code : Tout sélectionner

 <option label = "HS100" value = "HS100" default = "true" />
                <option label = "HS110" value = "HS110" default = "false" />
                <option label = "HS110v2" value = "HS110v2" default = "false" />
changement du type de périphérique Domoticz pour reporter correctement la consommation d'énergie

Code : Tout sélectionner

            Domoticz.Device (Name = "(W)", Unité = 4, Type = 243, Sous-type = 29). Créer ()
résultats arrondis, pour éviter les résultats débiles comme 2.377066 W [/ i], et ajout de la consommation totale d'énergie rapportée par la prise

Code : Tout sélectionner

 Devices [2] .Update (nValue = 0, sValue = str (round (realtime_result ['current'], 2)))
                Périphériques [3] .Update (nValue = 0, sValue = str (round (realtime_result ['voltage'], 2)))
                Périphériques [4] .Update (nValue = 0, sValue = str (round (realtime_result ['power'], 2)) + +; ";" + str (realtime_result ['total'] * 1000))
une nouvelle branche pour la v2, avec une division par 1000

Code : Tout sélectionner

 si Paramètres ["Mode1"] == "HS110v2":
            [...]
                Périphériques [2] .Update (nValue = 0, sValue = str (round (realtime_result ['current_ma'] / 1000,2)))
                Périphériques [3] .Update (nValue = 0, sValue = str (round (realtime_result ['voltage_mv'] / 1000,2)))
                Périphériques [4] .Update (nValue = 0, sValue = str (round (realtime_result ['power_mw'] / 1000,2)) + ";" + str (realtime_result ['total_wh']))
et quelques corrections mineures pour fonctionner avec le nouveau type v2

j'espère que cela fonctionnera sur votre système :)

PS : désolé pour la grammaire, c'est la traduction automatique de mon message sur la board EN :oops:
Image
Un gus et ses serveurs, dans la cave
dom75
Messages : 1
Inscription : 29 juil. 2019, 10:34

Re: TP-Link smart plug HS100/HS110

Message par dom75 »

Bonjour,

j'avais des connections en attente a moitié fermé, en LAST_ACK pour tout dire, je pense qu'il faudrait deplacer le

sock.close() dans un finally, car en cas d'expction le sock.close ne se fait pas

data = sock.recv(1024)
Domoticz.Debug('data len: {}'.format(len(data)))
# il etait ici le sock.close
except socket.error as e:
Domoticz.Log('send command error: {}'.format(str(e)))
raise
finally:
sock.close()


bon, j'avoue je suis pas bon en python, mais ca semble marcher et ca semble cohérent
siloliver
Messages : 2
Inscription : 03 mai 2020, 19:14

Re: TP-Link smart plug HS100/HS110

Message par siloliver »

Bonjour à tous,

Je remonte ce sujet, car j'essaye pas tout les moyens de faire fonctionner mon TP-Link HS110.
Mais malheureusement je n'y arrive pas!!
A mon avis je m'y prend mal avec la création du script.
J'ai créer le fichier via Filezilla et mi sous le répertoire python.
Est-ce correct? Pourriez-vous m'aider svp.
siloliver
Messages : 2
Inscription : 03 mai 2020, 19:14

Re: TP-Link smart plug HS100/HS110

Message par siloliver »

2020-05-03 19:47:24.586 Status: Executing script: /home/pi/domoticz/scripts/HS110.py
2020-05-03 19:47:24.624 Error: Error executing script command (/home/pi/domoticz/scripts/HS110.py). returned: 32512

J'obtiens ceci quand j'execute le script

Pourriez-vous m'aider?
Répondre