Pb python depuis montée vers Jeedom V4

Bonjour,

Je viens de m’apercevoir que mes qq lignes de codes dans le plugins script ne fonctionne plus.
Le code en question:

import socket
import sys
import struct
import time
import binascii
 
host = '192.168.1.4'
port = 3000

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
inputHex = binascii.unhexlify("fd022001015d")
remote_ip = socket.gethostbyname(host)
s.connect((host, port))
s.send(inputHex)

Lorsque j’execute, j’ai cette erreur:

[2021-02-17 13:49:00][ERROR] : Erreur exécution de la commande [Système][Relay 16 Ports][HPEXT1-ON] : Erreur sur python /var/www/html/core/php/../../plugins/script/data/Relay1ON.py 2>&1 valeur retournée : 1. Détails : Traceback (most recent call last):   File "/var/www/html/core/php/../../plugins/script/data/Relay1ON.py", line 13, in <module>     s.connect((host, port))   File "/usr/lib/python2.7/socket.py", line 228, in meth     return getattr(self._sock,name)(*args) socket.error: [Errno 113] No route to host
[2021-02-17 13:49:00][ERROR] : Erreur exécution de la commande [Système][Relay 16 Ports][HPEXT1-OFF] : Erreur sur python /var/www/html/core/php/../../plugins/script/data/Relay1OFF.py 2>&1 valeur retournée : 1. Détails : Traceback (most recent call last):   File "/var/www/html/core/php/../../plugins/script/data/Relay1OFF.py", line 13, in <module>     s.connect((host, port))   File "/usr/lib/python2.7/socket.py", line 228, in meth     return getattr(self._sock,name)(*args) socket.error: [Errno 113] No route to host

Je ne sais pas trop d’où cela vient, je pensais à un souci de version Python ?

root@Ubuntu-Jeedom:~# $ ls /usr/bin/python*
$ : commande introuvable
root@Ubuntu-Jeedom:~# ls /usr/bin/python*
/usr/bin/python            /usr/bin/python2-config    /usr/bin/python3.6m         /usr/bin/python3m-config
/usr/bin/python2           /usr/bin/python3           /usr/bin/python3.6m-config  /usr/bin/python-config
/usr/bin/python2.7         /usr/bin/python3.6         /usr/bin/python3-config
/usr/bin/python2.7-config  /usr/bin/python3.6-config  /usr/bin/python3m
root@Ubuntu-Jeedom:~# alias python=/usr/local/bin/python2.7

(je sais je suis sur ubuntu :) ) 
J'ai executé une commande au hazard  :-/ sans résultat

Merci pour votre aide.

Bonjour,

Non cela ne semble pas être un problème python mais un problème réseau:

L’hôte que vous essayez de joindre n’existe pas ou en tout cas il n’y a pas de route y menant.
Donc il faudrait donner plus de détails sur votre installation.

Mais ceci dit, je ne comprend pas pourquoi vous faite:

host = '192.168.1.4'
port = 3000
....
remote_ip = socket.gethostbyname(host)
s.connect((host, port))

la variable host est déjà l’ip donc pourquoi faire un gethostbyname(host) ?

1 « J'aime »

Ça ça ressemble fortement à l’ip en mode Access point de votre module …

dans quelle classe de réseau fonctionne votre Jeedom ?

Il faut activer le mode client plus que le mode AP sur votre module …

ça devrait resembler a un truc comme ça :

from network  import WLAN,STA_IF

ssid ='votressid'
mot_de_passe = '1234567890'
WLAN(STA_IF).active(1)
WLAN(STA_IF).connect(ssid, mot_de_passe)

print("Attente du réseau WiFi")
at=0
while not WLAN(STA_IF).isconnected(): #Boucle d'attente de connexion wifi
    sleep(1)
    af='Attente wifi ' + str(at)
    print(af)
    at+=1
    pass

print("Le wifi est connecté")

Merci pour vos retours.
Alors le device en question est une carte relais que je commande en niveau 2 modèle OSI en envoyant des trames sur les @mac.
C’est ce type de produit:
https://www.amazon.fr/SainSmart-Ethernet-Contrôle-Distance-Serveur/dp/B00NBGGCHK/ref=cm_cr_arp_d_product_top?ie=UTF8

En effet la route semble KO, savez vous comment je peux faire pour tester l’envoi de trame depuis un pc dans un premier temps ?`

Merci

Si tu ne maîtrise pas le code ou le protocole utiliser par cette carte il va être difficile de t’aider …

A tu des informations à ce sujet en complément ?

ça ça veut juste dire qu’elle a une connectique Ethernet …

Depuis ta box, un ping sur cette ip simplement, ca fonctionne ou pas?

Désolé, 2 ans plus tard je réponds …

J’ai fait une install toute fraiche de jeedom et je rencontre le meme problème: (cela fonctionnait avant)
Ce code en pyhon executé via le plugin script

import socket
import sys
import struct
import time
import binascii
 
host = '192.168.1.4'
port = 3000

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
inputHex = binascii.unhexlify("fd022001005d")
remote_ip = socket.gethostbyname(host)
s.connect((host, port))
s.send(inputHex)

Je me demande si cela n’est pas une histoire de version:

root@jeedom:/home/jc# python3 --version
Python 3.9.2
root@jeedom:/home/jc# pip3 --version
pip 23.3.1 from /usr/local/lib/python3.9/dist-packages/pip (python 3.9)
root@jeedom:/home/jc# 

Il doit y avoir une histoire de python en V2 ?

Merci

Comme à chaque demande: page santé jeedom?

Si debian 11 python va s’exécuter avec python3 à présent donc tous les scripts python écrit pour le plugin script qui devaient être écrit pour python2 doivent être revu pour s’exécuter avec python3

exact, j’ai pas eu le reflexe:

Merci. Mais dans mon script j’ai du mal à comprendre ce qui va changer. si je fais un // la commande tail fonctionne en debian 10 ou 11 :slight_smile:

je ne comprend pas le rapport avec tail, ce n’est pas du python.


concernant le script, je ne sais pas vu que je ne connais pas le script
la version de python qui exécutera le script est différente, les librairies utilisées (les import) aussi, c’est tout ca qui doit être vérifié et modifié/corrigé si besoin

Mon exemple n’étant peut etre pas le mieux.
Pour le script c’est ceci, juste envoyer un code ascii.

Je vais voir ce qui change alors en V3

Après recherche j’ai l’impression que mon souci ne se situe pas au niveau du code:

root@jeedom:/home/jc# python3 /var/www/html/plugins/script/data/Relay1OFF.py
root@jeedom:/home/jc# python /var/www/html/plugins/script/data/Relay1OFF.py
bash: python : commande introuvable
root@jeedom:/home/jc# ln -sf python2.7 python
root@jeedom:/home/jc# python /var/www/html/plugins/script/data/Relay1OFF.py
bash: python : commande introuvable
root@jeedom:/home/jc# 

A minima la commande python devrait fonctionner ln -sf python2.7 python ? (python2.7 est installé)

Bonsoir,

Si cette commande fonctionne, il est inutile de créer la commande python.

Peut-être que python 2.7 n’existe plus sur votre OS. Quel est votre OS? Debian 10 ou 11 ?
Sur ma Debian 11, la commande python n’existe pas:
image

Pour faire exécuter un script python3 par le plugin script, il faut:

  • l’extension du fichier ne doit pas être .py .
    .PY est recommandé

  • Il suffit d’éditer le script python Relay1OFF.PY et d’ajouter sur la première ligne le shebang de python3:

#!/usr/bin/env python3

import socket
import sys
...
  • le fichier Relay1OFF.PY doit être exécutable.

Je m’auto-cite: Script Python et import de requests impossible - #2 par jpty

PS: Pour éviter de renommer et modifier tous les scripts python, vous pouvez créer la commande python qui pointe vers python3:
image

5 « J'aime »

J’ai fais ce que tu as dis à la lettre et cela fonctionne.
Donc j’ai remove python2. :slight_smile:

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