PZEM-017
Salut David. J'ai enfin reçus mon capteur Pzem-017 et son shunt 300A
Je l'ai donc câblé sur mon installation avec l'adaptateur Rs485/usb fourni qui semble bien être reconnus sur dev/ttyusb2.
je me suis donc dis qu'il me suffisait de reprendre le script python du Pzem-004t trouvé sur le net (puisque je n'en trouve pas pour le pzem-017) et l'adapter pour ce dernier...
je l'ai donc repris, modifié le /dev/tty et le bitstop a 2 comme indiquer sur la notice, et commenté certaines lignes pour tenter de lire que le voltage de la batterie :
#!/usr/bin/python3
import pymodbus
import serial
import math
from pymodbus.pdu import ModbusRequest
from pymodbus.client.sync import ModbusSerialClient as ModbusClient
from pymodbus.transaction import ModbusRtuFramer
def calc (registers, factor):
format = '%%0.%df' % int (math.ceil (math.log10 (factor)))
if len(registers) == 1:
return format % ((1.0 * registers[0]) / factor)
elif len(registers) == 2:
return format % (((1.0 * registers[1] * 65535) + (1.0 * registers[0])) / factor)
#endif
#end calc
client = ModbusClient (method = "rtu", port="/dev/ttyUSB2", stopbits = 2, bytesize = 8, parity = 'N', baudrate = 9600)
#Connect to the serial modbus server
connection = client.connect()
if client.connect ():
try:
result = client.read_input_registers (0x0000, 10, unit = 0x01)
print ('{', end='')
print ('"V": ' + calc (result.registers[0:1], 10) + ', ', end='')
# print ('"A": ' + calc (result.registers[1:3], 1000) + ', ', end='')
# print ('"P": ' + calc (result.registers[3:5], 10) + ', ', end='')
# print ('"E": ' + calc (result.registers[5:7], 1) + ', ', end='')
# print ('"F": ' + calc (result.registers[7:8], 10) + ', ', end='')
# print ('"f": ' + calc (result.registers[8:9], 100) + ', ', end='')
# print ('"a": ' + calc (result.registers[9:10], 1), end='')
print ('}')
finally:
client.close()
#end try
#end if
Mais... bien sur il y a un "mais" si non ca aurais été trop simple ... Il semblerais qu'il y a un souci de lecture des registres et je doit avouer que la je suis complètement largué !!!
voila ce que me retourne le lancement du script :
pi@raspberrypi:~ $ sudo python3 /opt/PvMonit/bin/pzem_0017.py
{Traceback (most recent call last):
File "/opt/PvMonit/bin/pzem_0017.py", line 28, in <module>
print ('"V": ' + calc (result.registers[0:1], 10) + ', ', end='')
AttributeError: 'ModbusIOException' object has no attribute 'registers'
pi@raspberrypi:~ $
J'ai bien tenter de comparer les notices fournies avec le pzem-004t (que je t'avais dejas envoyer) et le pzem-017 ... il y a bien de subtiles différences mais je ne vois pas quoi modifier pour avoir un script python correct pour lire les données du 017 ...
voici donc la notice du 017 :
Du coup... si tu peut m'aider (encore...!) sur ce coup je t'en serais vraiment très reconnaissant !!!