Capteur de courant / tension / watt / conso PZEM-004T V3.0

Salut david et les autres

Ce n'est pas une "issue" mais un partage qui est intéressant...

Je travail sur l'utilisation du capteur de tension/courant PZEM-004T dejas bien connus sur le net avec pvmonit. https://www.amazon.fr/PZEM-004T-Multim%C3%A8tre-num%C3%A9rique-Affichage-Adaptateur/dp/B074QKPJVB

J'ai enfin réussi a le faire fonctionner sans passer par un arduino mais via un adaptateur rs232/USB

Voici comment :

Installation des dependances :

sudo pip install pyserial
sudo pip3 install -U pymodbus

Puis création d'un code python sudo vi /opt/PvMonit/bin/pzem_004t.py

Dans lequel on trouve :

#!/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/ttyUSB0", stopbits = 1, 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 ('V: ' + calc (result.registers[0:1], 10) + 'V')
        print ('A: ' + calc (result.registers[1:3], 1000) + 'A')
        print ('P: ' + calc (result.registers[3:5], 10) + 'W')
        print ('E: ' + calc (result.registers[5:7], 1) + 'Wh')
        print ('F: ' + calc (result.registers[7:8], 10) + 'Hz')
        print ('f: ' + calc (result.registers[8:9], 100))
        print ('a: ' + calc (result.registers[9:10], 1))
    finally:
        client.close()
    #end try
#end if

Dans la ligne client = ModbusClient (method = "rtu", port="/dev/ttyUSB0", stopbits = 1, bytesize = 8, parity = 'N', baudrate = 9600) On remplace /dev/ttyUSB0 par le bon port utilisé par le capteur ( /dev/ttyUSB1 dans mon cas puisque le ttyUSB0 est utilisé par le cable victron)

Test du script :

pi@raspberrypi:~ $ sudo python3 /opt/PvMonit/bin/pzem_004t.py
V: 230.0V
A: 0.043A
P: 0.9W
E: 2Wh
F: 50.0Hz
f: 0.09
a: 0
pi@raspberrypi:~ $ 

Voila pour l’instant... il me reste a écrire le script php pour intégrer tout ca dans pvmonit ...

Enfin ... si j'y arrive ... car je suis toujours autant larguer en php...

Edited by akoirium