Est-il possible de récupérer la valeur de retour d'une fonction python pour un script de type 'info'

Bonjour,

Nouveau sur la communauté Jeedom je tente en lisant les différents tutos et les forums de mettre sur pied une solution domotique acceptable.

Pour mes prises connectées TAPO P100 de Tp-link, j’ai trouvé les librairies pythons qui vont bien.

J’arrive a allumer et a éteindre les prises.
J’ai créer un script python qui renvoie une valeur TRUE ou FALSE en fonction de l’état de la prise, mais je n’arrive pas à utiliser cette valeur dans Jeedom pour qu’elle soit afficher. en mode info binaire ou autre la valeur retournée par la fonction est ignorée.

Quelqu’un sait-il comment procéder.

Par avance merci

PS voici le script que j’utilise :

#!/usr/bin/env python3

def action(chaine):
  a = chaine.find("device_on")
  a = a +11
  chaine = chaine[a:]
  chaine = chaine[:4]
  if chaine == "true":
    return True
  else:
    return False
 
  

from PyP100 import PyP100

p100 = PyP100.P100("192.168.0.xxx","xxxxxxxxxxxx@gmail.com","MotDePasse") 
p100.handshake() 
p100.login()
  
text = p100.getDeviceInfo()
  
action (text)

Bonsoir @Jeff75

je ne vois dans ce script aucun élément qui retourne quelque chose

ajoutez

print("test retour")

ou dans votre cas

print(action(text))

a la fin du script et vérifiez que vous recevez bien ce texte …

et je suis pas certain que l’appel a la fonction soit correctement écrit …

action (text)
vs
action(text)

il serait aussi plus convenable
de mettre les imports en début de fichier

from PyP100 import PyP100

la ça pose pas de problème mais si le code se complique …

dernier conseil testez votre script en dehors de jeedom

vous verez mieux les erreurs et ce qu’il retourne

bonne soirée

Une fois encore merci @olive

J’ai suivi tes conseils et tout marche à merveille.
Je peux commander les inters et avoir un retour sur leur état. Pour cela j’appelle la fonction p100.getDeviceInfo() et j’isole dans la chaine le fragment qui donne l’état de l’interrupteur pour en tirer une boolénne False ou True.

SI certains utilisent des P100 de Tp-link je peux vous proposer mon code (surement très améliorable ;-))

1 « J'aime »

Parfait oublie pas de solutionner le sujet.

Bonne nuit

Salut @Jeff75. Je suis très intéressé par ton code car je n’ai jamais réussi à intégrer ma P100 sous Jeedom. Merci d’avance.

Salut @Patag

Je l’ait pas tester mais il y a un tuto ici :

Bonne journée

Merci @olive

Bon, chez moi ça veut rien savoir. Ca fonctionne nickel en ligne de commande (RPI4 64bits) mais dans un script Jeedom, le bazar me remonte une erreur d’import du module PyP100:

Erreur exécution de la commande [Système][Tapo][On] : Erreur sur python /var/www/html/plugins/script/data/P100On.py 2>&1 valeur retournée : 1. Détails : Traceback (most recent call last): File "/var/www/html/plugins/script/data/P100On.py", line 3, in from PyP100 import PyP100 ImportError: No module named PyP100

Je vais encore gratter un peu…

Bonsoir
tu n’a pas installer la librairie PyP100 …

ouvre un ssh

sudo pip3 install PyP100

Merci @olive mais

Ca fonctionne nickel en ligne de commande (RPI4 64bits)…

comme dit dans le message précédent.
Bonne fin de soirée. Je verrai ça demain

Voila comment j’ai intégrer mes P100.

1- j’ai installer les librairies avec la commande : pip3 install PyP100
2- j’ai copier les librairies dans le dossier script de Jeedom : /var/www/html/plugins/script/data/
3- je créer un script action « ON » dont voici le code :

#!/usr/bin/env python3

from PyP100 import PyP100

p100 = PyP100.P100("192.168.0.xxx","identifiant","motdepasse")
p100.handshake() 
p100.login() 
p100.turnOn() 

bien sur il faut mettre la bonne adresse IP (qu’il vaut mieux passer en fixe sur son routeur) et les bons identifiants et mot de passe.

Je crée ensuite un script OFF (type action aussi)

#!/usr/bin/env python3

from PyP100 import PyP100

p100 = PyP100.P100("192.168.0.xxx","identifiant","motdepasse")
p100.handshake() 
p100.login() 
p100.turnOff() 

enfin pour connaitre l’état de la prise j’utilise la commande p100.getDeviceInfo()

cette commande renvoie un texte assez long avec a l’intérieur une info de type « device_on »=…
c’est cette info que l’on va récupérer et envoyer à Jeedom.

On créé donc une commande script de type info binaire dont le code est le suivant :

#!/usr/bin/env python3


from PyP100 import PyP100
  
  
def action(chaine):
  a = chaine.find("device_on")
  a = a +11
  chaine = chaine[a:]
  chaine = chaine[:4]
  if chaine == "true":
    print("True")
  else:
    print("False")
  return
  

p100 = PyP100.P100("192.168.0..xxx","identifiant","motdepasse")

p100.handshake() 
p100.login()
  
text = p100.getDeviceInfo()
  
action(text)

vous récupérerez la valeur 1 si la prise est allumée et 0 dans le cas contraire.

En espérant que cela puisse vous servir.

Bon week end

1 « J'aime »

Il te faut placer la bibliothèque PyP100 dans le dossier data de script :

/var/www/html/plugins/script/data/

1 « J'aime »

Merci @Jeff75. J’ai tout fait comme indiqué, mais j’ai toujours des erreurs d’import de modules Python sous Jeedom (4.1.24 64bits) alors que tout fonctionne en ligne de commande. A n’y rien comprendre… ou bug Jeedom/plugin ? A propos, quelle est ta config ?

Erreur exécution de la commande [Système][Tapo][Off] : Erreur sur python /var/www/html/plugins/script/data/P100Off.py 2>&1 valeur retournée : 1. Détails : Traceback (most recent call last): File "/var/www/html/plugins/script/data/P100Off.py", line 3, in from PyP100 import PyP100 File "/var/www/html/plugins/script/data/PyP100/PyP100.py", line 73 decode: bytes = b64decode(key.encode("UTF-8")) ^ SyntaxError: invalid syntax

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.