Je voudrais mettre en place un programme python pour interagir avec ma borne de recharge. Elle a un port rs232 que j’ai relié à mon Pi.
Depuis minicom, j’ai confirmé que le lien était fonctionnel mais je ne suis pas doué en programmation. Le programme que je teste ne donne rien et je ne comprends pas pourquoi.
Si un participant du forum pourrrait me faire un retour
#! /usr/bin/env python
import requests
import time
import serial
ser = serial.Serial(
port='/dev/ttyUSB1',
baudrate=115200,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS
)
if ser.isOpen():
ser.close()
ser.open()
ser.isOpen()
ser.write("$GG*B2\r") #commande renvoyant OK puis 2 valeurs numérique. Il faut validrr zvec enter d'ou le \r
out = ''
# let's wait one second before reading output (let's give device time to answer)
time.sleep(1)
while ser.inWaiting() > 0:
out += ser.read(40)
if out != '':
print(">>" + out)
ser.close()
Que donne l’exécution de ce script dans un terminal ssh hors de jeedom ?
je suis pas sur que requests soit en python 2
il vaudrait mieux modifier ta 1 er ligne avec une directive python 3
#! /usr/bin/env python3
pi@covid:~$ python
Python 2.7.16 (default, Oct 10 2019, 22:02:15)
[GCC 8.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named requests
>>> exit()
pi@covid:~$ python3
Python 3.7.3 (default, Jul 25 2020, 13:03:44)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>>
>>>
celui-ci va te renvoyer True en console
il te faut faire
if ser.isOpen():
ser.close()
ser.open()
if ser.isOpen():
ser.write("$GG*B2\r")
out = ''
time.sleep(1)
while ser.inWaiting() > 0:
out += ser.read(40)
if out != '':
print(">>" + out)
ser.close()
de préference dans la partie visible de www-data
donc ou tu veut a partir de
/var/www/html/dossierscript/monfichier.py par exemple
n’oublie pas de lui mettre des droits si tu veut l’exécuter directement avec un shebang sans python3 devant.
Sauf si tu utilise php pour écrire et executer ton script
$script = 'monpython.py'; //Nom du fichier python
$chemin = '/var/www/html/python'; // Dossier à utiliser
if (1){ //metre à 1 la 1er fois, une fois que le fichier existe et n'est plus modifier mettre a 0
// Script python
$python = <<<'EOD'
#! /usr/bin/env python3
import requests
from sys import argv
from bs4 import BeautifulSoup
res = requests.get("https://www.meteoblue.com/fr/meteo/semaine/villecresnes_france_2968823")
soupe=BeautifulSoup(res.content, "html.parser")
print(soupe.find_all(class_ ="current_description")[0].span.next.next.next.next.split()[0],end='')
#fin du script python3
EOD;
mkdir($chemin); // creation du dossier
file_put_contents($chemin.'/'.$script, $python); // Ecriture du fichier
}
$reponse = shell_exec('python3 '.$chemin.'/'.$script); // execution du script
$scenario->setLog('Vitesse du vent : '.$reponse.' Kmh'); // recuperation des paramètres de retour du script
// cet exemple nécéssite l'installation de la librairie BeautifulSoup, en ssh faire : pip3 install bs4
Mais pour Tonio il suffirait de remplacer la partie de generation du fichier py par son script.
Il est alors possible de passer des paramètres dans ce même fichier et d’utiliser le scenario pour se faire (par exemple donner la puissance de charge!)
Là on aurait alors automatiser la puissance de charge par rapport à une production photovoltaique !
J’ai ajouté le 3 qui manquait à Python; mais toujours rien en sortie…
Depuis une fenêtre SSH j’arrive bel et bien à faire un echo sur le port série et cela fonctionne.
Il y a python 3.7.3
Mais depuis mon scénario on dirait que le code ne s’exécute pas…