Je viens de lancer un script python basique
#!/usr/bin python3
# coding: utf8
from datetime import date, timedelta, datetime
import re, time, socket, mysql.connector
#Paramètres de la connexion à la base de données Mysql
config = {
'user': 'XXXXX',
'password': 'XXXXX',
'host': 'localhost',
'database': 'domotique',}
#Périodes de la variable
time.localtime()
Commande = '*#18*51*511#'
Dieze = '#'
yesterday = date.today() - timedelta(1)
Mois = '10' # date à modifier pour les imports manuels !
Jour = '19' # date à modifier pour les imports manuels !
string_date = time.strftime("%Y-" + Mois + "-" + Jour + " " + "0:0:0.00000")
date = datetime.strptime(string_date, "%Y-%m-%d %H:%M:%S.%f")
Timestamp = time.mktime(date.timetuple())
Message = Commande + Mois + Dieze + Jour + Dieze + Dieze
#Paramètres de connexion à la passerelle BUS/SCS
buffer_size =2048 #Taille du buffer se référer à la doc python sur les socket
ip_F455='192.168.XXX.XXX' #@IP de la passerelle
port_F455=XXXXX #Port pour commande opennwebnet
#ouverture du socket
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((ip_F455,port_F455))
data=s.recv(buffer_size)
DataDecode=data.decode('UTF-8')
print (DataDecode + " = Retour de connexion")
s.send(b"*99*9##")#ouverture d'une session COMMAND
data=s.recv(buffer_size)
DataDecode=data.decode('UTF-8')
print (DataDecode + " = Retour d'ouverture de commande")
MessageEncode = Message.encode('UTF-8')
s.send(MessageEncode)
print (Message + " = Commande envoyée")
retour = ""
while True:
try:
data=s.recv(buffer_size)
if data:
retour += data.decode('UTF-8')
if retour[-6:] == "*#*1##":
break
else:
s.close()
break
except:
print("error")
s.close()
break
data = {}
pattern = "(\*\#\d+\*\d+\*\d+#\d+\#\d+\*\d+\*\d+\#{2})"
for result in re.findall(pattern, retour):
result = result[2:-2].split("#")[2].split("*")
heure = int(result[1])
conso = int(result[2])
data[heure] = conso
print (heure)
print (conso)
#Connexion à la Bdd mysql
conn = mysql.connector.connect(**config)
cursor = conn.cursor()
# Ajout d'une ligne dans la Bdd
loggit = "INSERT INTO consommation (date_releve, timemysql, heure, watt_heure) VALUES (%s, %s, %s, %s)"
cursor.execute(loggit, (date, Timestamp, heure, conso))
conn.commit()
cursor.close()
conn.close()
Il permet de mettre à jour manuellement la conso électrique de la journée (saisi du jour et du mois dans le script).
Normalement il faut 2 secondes pour avoir les deux premières lignes (connexion et retour ACK du serveur domotique), puis en grand max 2 secondes j'ai les 25 données (1 par heure + un total).
Là il me faut plus d'une seconde pour avoir chaque retour horaire.
Avec la commande top sur une autre fenêtre ssh, j'ai le processus python par moment entre 20 et 50, mais je ne m'approche pas des 100 même avec plusieurs processus.
Peut-être que la commande top, est pas top... pour voir en direct.
Edit :
Le problème vient de mysql.
Si je lance ce même script mais sans l'enregistrement dans mysql, j'obtiens les résultats en 6,28 secondes, contre 41,81 secondes avec l'enregistrement dans mysql...