Monitorer batteries Pylontech

je viens de vérifier, j’ai utilisé le logiciel secure crt dispo ici: SecureCRT

et quand tu mets l’ip + port et que tu te connectes, tu envoies la commande pwr et ça fonctionne:

Je viens de faire le test, j’ai aucun retour de la commande pwr

image

Ce qui est curieux c’est que le voyant « Active-1 » ne soit allumé.

Active 1 ne s’allume que lorsqu’il y a une communication

Si secure crt se connecte bien à ton hf mais que les batteries ne repondent pas il faut chercher du côté de la connectique entre ton hf et tes batteries

C’est fou, je communique très bien avec le câble, je le connecte au HF.
Avec le logiciel secure crt j’arrive bien a me connecter mais aucun retour des batteries.

Nous sommes bien d’accord, dans le logiciel secure crt je tape pwr dans la fenêtre blanche et je fait entrer.
A ce moment là, la commande est envoyé ?

Oui mais si tu es bien connecté aux accus alors tu dois avoir « pylon> » au début de la ligne, regarde sur ma copie d’écran. Donc là on dirait que cela ne va pas jusqu’aux batteries

Ok oui je comprends, c’est ce que j’avais vu.

Bonjour, je reviens ici car j’ai suffisamment avancer mais pas encore fonctionnel.
J’arrive désormais a récupérer les valeurs de batterie après le HF mais rien sur le Jeedom.
Est-ce que quelqu’un peu me venir en aide svp ?

ça avance c’est bien :wink:

Tu as un log des infos renvoyées par tes batteries? ça doit être un pb de décalage entre ce que tes batteries renvoient et ce que le script attend

Des Log ?
Non uniquement de information via Putty par exemple.
Je ne suis pas certain que ce soit cela que tu attends ?

oui c’est ça. Comme c’est sur mon 1er post ici

Je viens de faire le test, voici ce que j’ai :

pylon_debug>pwr
@
Power Volt   Curr   Tempr  Tlow   Thigh  Vlow   Vhigh  Base.St  Volt.St  Curr.St  Temp.St  Coulomb  Time                 B.V.St   B.T.St   MosTempr M.T.St
1     48420  -599   21500  20300  20600  3227   3230   Dischg   Normal   Normal   Normal   19%      2023-10-22 15:09:19  Normal   Normal  19900    Normal
2     48417  -574   20800  20000  20300  3226   3230   Dischg   Normal   Normal   Normal   19%      2023-10-22 15:09:19  Normal   Normal  19800    Normal
3     -      -      -      -      -      -      -      Absent   -        -        -        -        -                    -        -
4     -      -      -      -      -      -      -      Absent   -        -        -        -        -                    -        -
5     -      -      -      -      -      -      -      Absent   -        -        -        -        -                    -        -
6     -      -      -      -      -      -      -      Absent   -        -        -        -        -                    -        -
7     -      -      -      -      -      -      -      Absent   -        -        -        -        -                    -        -
8     -      -      -      -      -      -      -      Absent   -        -        -        -        -                    -        -
9     -      -      -      -      -      -      -      Absent   -        -        -        -        -                    -        -
10    -      -      -      -      -      -      -      Absent   -        -        -        -        -                    -        -
11    -      -      -      -      -      -      -      Absent   -        -        -        -        -                    -        -
12    -      -      -      -      -      -      -      Absent   -        -        -        -        -                    -        -
13    -      -      -      -      -      -      -      Absent   -        -        -        -        -                    -        -
14    -      -      -      -      -      -      -      Absent   -        -        -        -        -                    -        -
15    -      -      -      -      -      -      -      Absent   -        -        -        -        -                    -        -
16    -      -      -      -      -      -      -      Absent   -        -        -        -        -                    -        -
Command completed successfully

ok, je regarde ça dès que je peux

Désolé de te relancer, as-tu eu le temps de regarder stp ?

Oups, désolé j’ai oublié…

Je vois ça ce soir

c’est exactement le même affichage que pour mes batteries, il y a des infos en lus mais rien de problématique. Par contre je viens de m’apercevoir que j’avais modifié le script suite à une mise à jour de jeedom.

Script mis à jour:

#!/usr/bin/python

import time
import os
import json
import requests
from requests.auth import HTTPDigestAuth
import pprint
import sys
import socket


def question_pylon(): # interroge le BMS Pylontech avec une commande pwr
	# Connect the socket to the port where the server is listening
	HOST = '192.168.1.18' #mettre l adresse IP interrogation BMS
	PORT = 8899 #mettre le port
	server_address = (HOST, PORT)
	try:
#	print >>sys.stderr, 'connecting to %s port %s' % server_address
		client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
		client.connect(server_address)    
#	print 'Connexion vers ' + HOST + ':' + str(PORT) + ' reussie.'
	except socket.error, e:
		return 'erreur'
		sys.exit(1)
	message = 'pwr'
	client.settimeout(3)
	n = client.send(message + chr(13))
	try:
		resp = client.recv(1024)
		resp2 = client.recv(1024)
		resp3 = client.recv(1024)
		resp += resp2 + resp3
	except socket.timeout:
		return 'erreur'
		sys.exit(1)
#	print 'Recu :', resp
#	print 'Recu2 :', resp2
#	reponse = str(resp.text)
	reponse = resp
#	print 'Deconnexion.'
	client.close()
#	print 'rep = ', resp
	return reponse

 
ipjeedom = '192.168.1.17' #adresse IP de votre jeedom
cmdapi = 'xxxxxxxxxxxxx' #cle API a prendre dans le virtuel que l on veut mettre a jour
cmdidbat = ['1468','1470','1471','1472'] #valeurs des cmdid pour la batterie 1 tension, intensite, temperature, SOC
cmdidbat += ['1473','1474','1475','1476'] #valeurs des cmdid pour la batterie 2 tension, intensite, temperature, SOC
cmdidbat += ['1477','1478','1479','1480'] #valeurs des cmdid pour la batterie 3 tension, intensite, temperature, SOC
cmdidbat += ['1481','1482','1483','1484'] #valeurs des cmdid pour la batterie 4 tension, intensite, temperature, SOC
#cmdidbat += ['1468','1470','1471','1472'] #valeurs des cmdid pour la batterie 5 tension, intensite, temperature, SOC
#cmdidbat += ['1468','1470','1471','1472'] #valeurs des cmdid pour la batterie 6 tension, intensite, temperature, SOC
#cmdidbat += ['1468','1470','1471','1472'] #valeurs des cmdid pour la batterie 7 tension, intensite, temperature, SOC
#cmdidbat += ['1468','1470','1471','1472'] #valeurs des cmdid pour la batterie 8 tension, intensite, temperature, SOC
cmdidretour = '1499' #valeur de la cmd retour d etat connexion
rep = question_pylon()
if (rep == 'erreur'):
	requests.get('http://'+ipjeedom+'/core/api/jeeApi.php?plugin=virtual&apikey='+cmdapi+'&type=event&id='+cmdidretour+'&value=erreur')
else:
	requests.get('http://'+ipjeedom+'/core/api/jeeApi.php?plugin=virtual&apikey='+cmdapi+'&type=event&id='+cmdidretour+'&value=')
	x = rep.find("1     ")-1 # cherche le 1er 
	for i in range(4): #remplacer range(4) par range(x) en fonction du nombre x de batteries installees
	  try:
	  	tension = str(float(rep[x+7+(141*i):x+12+(141*i)]) / 1000)      # tension 3 chiffres apres la virgule sinon prendre x+11 au lieu de x+12 et diviser par 100 au lieu de 1000
	  	intens=str(float(rep[x+14+(141*i):x+20+(141*i)]) /1000)      # intensite
	  	temper=str(float(rep[x+21+(141*i):x+26+(141*i)]) /1000)      # temperature
	  	soc=rep[x+92+(141*i):x+95+(141*i)]      # soc
	  	requests.get('http://'+ipjeedom+'/core/api/jeeApi.php?plugin=virtual&apikey='+cmdapi+'&type=event&id='+cmdidbat[i*4]+'&value='+tension)
	  	requests.get('http://'+ipjeedom+'/core/api/jeeApi.php?plugin=virtual&apikey='+cmdapi+'&type=event&id='+cmdidbat[1+(i*4)]+'&value='+intens)
	  	requests.get('http://'+ipjeedom+'/core/api/jeeApi.php?plugin=virtual&apikey='+cmdapi+'&type=event&id='+cmdidbat[2+(i*4)]+'&value='+temper)
	  	requests.get('http://'+ipjeedom+'/core/api/jeeApi.php?plugin=virtual&apikey='+cmdapi+'&type=event&id='+cmdidbat[3+(i*4)]+'&value='+soc)
	  except:
	  	requests.get('http://'+ipjeedom+'/core/api/jeeApi.php?plugin=virtual&apikey='+cmdapi+'&type=event&id='+cmdidretour+'&value=erreur')
#tte

par contre comme tu as plus d’info il faut que tu remplaces dans les formules tension, intensité, soc et température tous les 141 par des 156

Bonjour, merci @Noyax37

J’ai fait la modif des parties du code, j’ai peu être loupé quelque chose ?
Car pour le moment aucune remonté.

#!/usr/bin/python

import time
import os
import json
import requests
from requests.auth import HTTPDigestAuth
import pprint
import sys
import socket


def question_pylon(): # interroge le BMS Pylontech avec une commande pwr
	# Connect the socket to the port where the server is listening
	HOST = '192.168.0.40' #adresse IP du HF2221
	PORT = 8899
	server_address = (HOST, PORT)
	try:
#	print >>sys.stderr, 'connecting to %s port %s' % server_address
		client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
		client.connect(server_address)    
#	print 'Connexion vers ' + HOST + ':' + str(PORT) + ' reussie.'
	except socket.error, e:
		return 'erreur'
		sys.exit(1)
	message = 'pwr'
	client.settimeout(3)
	n = client.send(message + chr(13))
	try:
		resp = client.recv(1024)
		resp2 = client.recv(1024)
		resp3 = client.recv(1024)
		resp += resp2 + resp3
	except socket.timeout:
		return 'erreur'
		sys.exit(1)
#	print 'Recu :', resp
#	print 'Recu2 :', resp2
#	reponse = str(resp.text)
	reponse = resp
#	print 'Deconnexion.'
	client.close()
#	print 'rep = ', resp
	return reponse

 
ipjeedom = '192.168.0.30'
cmdapi = 'XXXXXXXXXX' #cle API a prendre dans le virtuel que l on veut mettre a jour
cmdidbat = ['2853','2854','2855','2856'] #valeurs des cmdid pour la batterie 1 tension, intensite, temperature, SOC
#cmdidbat += ['1473','1474','1475','1476'] #valeurs des cmdid pour la batterie 2 tension, intensite, temperature, SOC
#cmdidbat += ['1477','1478','1479','1480'] #valeurs des cmdid pour la batterie 3 tension, intensite, temperature, SOC
#cmdidbat += ['1481','1482','1483','1484'] #valeurs des cmdid pour la batterie 4 tension, intensite, temperature, SOC
#cmdidbat += ['1468','1470','1471','1472'] #valeurs des cmdid pour la batterie 5 tension, intensite, temperature, SOC
#cmdidbat += ['1468','1470','1471','1472'] #valeurs des cmdid pour la batterie 6 tension, intensite, temperature, SOC
#cmdidbat += ['1468','1470','1471','1472'] #valeurs des cmdid pour la batterie 7 tension, intensite, temperature, SOC
#cmdidbat += ['1468','1470','1471','1472'] #valeurs des cmdid pour la batterie 8 tension, intensite, temperature, SOC
cmdidretour = '3590' #valeur de la cmd retour d etat connexion
rep = question_pylon()
if (rep == 'erreur'):
	requests.get('http://'+ipjeedom+'/core/api/jeeApi.php?plugin=virtual&apikey='+cmdapi+'&type=virtual&id='+cmdidretour+'&value=erreur')
else:
	requests.get('http://'+ipjeedom+'/core/api/jeeApi.php?plugin=virtual&apikey='+cmdapi+'&type=virtual&id='+cmdidretour+'&value=')
	x = rep.find("1     ")-1 # cherche le 1er 
	for i in range(1): #remplacer range(4) par range(x) en fonction du nombre x de batteries installees
	  tension = str(float(rep[x+7+(156*i):x+12+(156*i)]) / 1000)      # tension 3 chiffres apres la virgule sinon prendre x+11 au lieu de x+12 et diviser par 100 au lieu de 1000
	  intens=str(float(rep[x+14+(156*i):x+19+(156*i)]) /1000)      # intensite
	  temper=str(float(rep[x+21+(156*i):x+26+(156*i)]) /1000)      # temperature
	  soc=rep[x+92+(156*i):x+94+(156*i)]      # soc
	  requests.get('http://'+ipjeedom+'/core/api/jeeApi.php?plugin=virtual&apikey='+cmdapi+'&type=virtual&id='+cmdidbat[i*4]+'&value='+tension)
	  requests.get('http://'+ipjeedom+'/core/api/jeeApi.php?plugin=virtual&apikey='+cmdapi+'&type=virtual&id='+cmdidbat[1+(i*4)]+'&value='+intens)
	  requests.get('http://'+ipjeedom+'/core/api/jeeApi.php?plugin=virtual&apikey='+cmdapi+'&type=virtual&id='+cmdidbat[2+(i*4)]+'&value='+temper)
	  requests.get('http://'+ipjeedom+'/core/api/jeeApi.php?plugin=virtual&apikey='+cmdapi+'&type=virtual&id='+cmdidbat[3+(i*4)]+'&value='+soc)
     except:
	  requests.get('http://'+ipjeedom+'/core/api/jeeApi.php?plugin=virtual&apikey='+cmdapi+'&type=event&id='+cmdidretour+'&value=erreur')
#tte

Tu as quand même 100 en tension. Il doit y avoir un décalage qq part, ce n’est peut être pas 156 qu’il faut mais là ça va être à toi de trouver. Regarde dans ton terminal quelle est la tension réellement mesurée pour voir si tu peux identifier le décalage

@Noyax37

A oui désolé, les 100 c’est moi pendant un essai, j’ai mi cette valeur via le lien afin de voir si cela fonctionne depuis → http://‹ +ipjeedom+ ›/core/api/jeeApi.php?plugin=virtual&apikey=‹ +cmdapi+ ›&type=virtual&id=‹ +cmdidretour+ ›&value=erreur’

Donc ici c’est pas un décalage, dommage :slightly_frowning_face:

Ah zut, ce qui me gênait pour debugee c’est que ne savais pas faire des logs. Alors les tte que tu vois à la fin ça sert à créer une erreur pour faire afficher un message à jeedom. Enlève le # devant et sauvegarde ça va relancer le script

Pour créer une alerte et tester des paramètres tu peux essayer un truc comme ça :

$.fn.showAlert({message: "{{Le nom de l'équipement ne peut pas être vide !}}", level: 'warning'});