#!/usr/bin/env python3 from pymodbus.client import ModbusTcpClient NODES = [ {"machine_id": "CORT-01", "source_node": "wise-cort-00", "ip": "10.43.54.249"}, {"machine_id": "CORT-00", "source_node": "wise-cort-01", "ip": "10.43.54.251"}, {"machine_id": "CORT-02", "source_node": "wise-cort-02", "ip": "10.43.54.55"}, ] UNIT = 1 def u32_lo_hi(lo, hi): return (lo & 0xFFFF) + ((hi & 0xFFFF) << 16) for node in NODES: print() print("==================================================") print(node["machine_id"], node["source_node"], node["ip"]) print("==================================================") client = ModbusTcpClient(node["ip"], port=502, timeout=3) if not client.connect(): print("ERROR: no conecta") continue try: rr_di = client.read_discrete_inputs(address=0, count=2, device_id=UNIT) if rr_di.isError(): print("ERROR DI:", rr_di) else: print("DI0 marcha:", bool(rr_di.bits[0])) print("DI1 estado:", bool(rr_di.bits[1])) rr_cnt = client.read_holding_registers(address=0, count=4, device_id=UNIT) if rr_cnt.isError(): print("ERROR counter:", rr_cnt) else: regs = rr_cnt.registers di0_counter = u32_lo_hi(regs[0], regs[1]) di1_counter = u32_lo_hi(regs[2], regs[3]) print("DI0 counter:", di0_counter) print("DI1 counter:", di1_counter) print("raw counter:", regs) rr_energy = client.read_holding_registers(address=1000, count=20, device_id=UNIT) if rr_energy.isError(): print("ERROR energy:", rr_energy) else: print("Energy registers OK, first values:", rr_energy.registers[:6]) finally: client.close()