53 lines
1.9 KiB
Python
Executable File
53 lines
1.9 KiB
Python
Executable File
#!python
|
|
# Importez les modules nécessaires de PyModbus
|
|
from pymodbus.client import ModbusSerialClient
|
|
import time
|
|
from datetime import datetime
|
|
|
|
# Paramètres de communication série Modbus
|
|
serial_port = "/dev/ttyUSB0"
|
|
# Adresses Modbus des PZEM-OO4T
|
|
pzems = [4]
|
|
|
|
|
|
|
|
# Main
|
|
# Créez une instance du client Modbus
|
|
client = ModbusSerialClient(port=serial_port, baudrate=9600, stopbits=1, bytesize=8, parity='N')
|
|
# Ouvrez la connexion série
|
|
client.connect()
|
|
|
|
while True:
|
|
for pzem in pzems:
|
|
print(f"PZEM : {pzem}")
|
|
try:
|
|
data = client.read_input_registers(0, 10, slave=pzem)
|
|
if data:
|
|
voltage = data.getRegister(0) / 10.0 # [V]
|
|
current = (data.getRegister(1) + (data.getRegister(2) << 16)) / 1000.0 # [A]
|
|
power = (data.getRegister(3) + (data.getRegister(4) << 16)) / 10.0 # [W]
|
|
energy = data.getRegister(5) + (data.getRegister(6) << 16) # [Wh]
|
|
frequency = data.getRegister(7) / 10.0 # [Hz]
|
|
powerFactor = data.getRegister(8) / 100.0
|
|
alarm = data.getRegister(9) # 0 = no alarm# La réponse contient les valeurs lues
|
|
print("********************************")
|
|
print("ID pince : " + str(pzem))
|
|
print("Valeurs lues : " + str(data.registers))
|
|
print('Voltage [V]: ', voltage)
|
|
print('Current [A]: ', current)
|
|
print('Power [W]: ', power) # active power (V * I * power factor)
|
|
print('Energy [Wh]: ', energy)
|
|
print('Frequency [Hz]: ', frequency)
|
|
print('Power factor []: ', powerFactor)
|
|
print('Alarm : ', alarm)
|
|
else:
|
|
maintenant = datetime.now()
|
|
date_heure = maintenant.strftime("%Y-%m-%d %H:%M:%S")
|
|
print(f"{date_heure} --> ERREUR : Aucune réponse.")
|
|
except Exception as e:
|
|
maintenant = datetime.now()
|
|
date_heure = maintenant.strftime("%Y-%m-%d %H:%M:%S")
|
|
print(f"{date_heure} --> ERREUR {e}")
|
|
time.sleep(1)
|
|
|