esphome/proto/pzem.py
2025-05-27 12:27:23 +02:00

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)