40-clients/ucepsa/edge-oee-demo/revpi/edge-oee/probe_3_wise_nodes.py
2026-06-25 18:51:33 +02:00

56 lines
1.8 KiB
Python
Executable File

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