récupération des données via python, conversion HEXA décimal...

Plus d'informations
24 Aoû 2022 11:21 #1 par Defaliz
bonjour,
je récupère via python les données du MSun
mon problème est la conversion hexa --> décimal de EnPV_J et EnPV_P
les données hexa sont respectivement fffffffd et fffe3371 ce qui donne sur l'interface Msun : -0,3Wh et -11790,3Wh
mais avec python la réponse est pour les 2 : 4294967293
je n'ai pas de problème pour EnConso
comment convertir correctement ? (peut-être lié au nombre négatif ? )
merci

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
24 Aoû 2022 11:27 #2 par patrick
Salut Alain,
Je ne connais pas le Python mais à mon avis tu dois avoir le résultat de la conversion dans une variable non signée au lieu d'une signée.
Si tu peux mettre le bout de code ici je t'en dirais +.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
24 Aoû 2022 11:45 #3 par Defaliz
Merci patrick,
avec un convertisseur en ligne comme celui là www.rapidtables.org/fr/convert/number/hex-to-decimal.html
je converti bien la valeur 436 qui devient 1078 et qui correspond à ma valeur sur le msun
mais pour les 2 autres valeurs fffffffd et fffe3371 c'est faux..
voici mon code

import xml.etree.ElementTree as ET
import urllib.request
data = urllib.request.urlretrieve("http://10.3.141.26/status.xml", "status.xml") # l'adresse du MsunPV
root = ET.parse('status.xml').getroot()

#on recupere les infos des compteurs
for x in root.findall('cptVals'):
vals_txt=x.text
print(vals_txt)
compteurs=vals_txt.split(';')

conso_jour = int(compteurs[0],16)/10
inj_PV = int(compteurs[1],16)/10
inj_PV_jour = int(compteurs[2],16)/10
inj_totale = int(compteurs[3],16)/10

print("ConsoEnedis/jour : " + str(conso_jour) + " W/h")
print("Injection PV : " + str(inj_PV) + " W/h")
print("Injection PV /jour : " + str(inj_PV_jour) + " W/h")
print("Injection PV Totale : " + str(inj_totale) + " W/h")

et le résultat
43a;0;fffffffd;fffe3371;0;0;0;0;
ConsoEnedis/jour : 108.2 W/h
Injection PV : 0.0 W/h
Injection PV /jour : 429496729.3 W/h
Injection PV Totale : 429484939.3 W/h

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
24 Aoû 2022 12:08 #4 par patrick
Il n'y a pas de solution simple: stackoverflow.com/questions/1375897/how-...-of-a-long-in-python
J’essaierai:
conso_jour =inj_PV = inj_PV_jour = inj_totale = -1 pour faire comprendre à Python qu'on attend des entiers signés.
Puis ton code:
conso_jour = int(compteurs[0],16)/10
inj_PV = int(compteurs[1],16)/10
inj_PV_jour = int(compteurs[2],16)/10
inj_totale = int(compteurs[3],16)/10

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
24 Aoû 2022 12:47 #5 par Defaliz
déclaré les variables -1 n'a pas fonctionné...
j'ai regardé le lien que tu m'a envoyé et j'ai trouvé une des réponses qui fonctionne !

import ctypes
inj_totale = inj_totale & 0xFFFFFFFF
inj_totale = ctypes.c_long(inj_totale).value / 10

tout fonctionne !!!
merci encore Patrick

Connexion ou Créer un compte pour participer à la conversation.

Propulsé par Kunena