#!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)