Monitorización Ingeteam 3play
Hola estimados, tengo ahora mismo un script de python (Pymodbus) que se logra conectar con el inversor ingeteam 30 tl 3play, y le estoy haciendo consultas, sin embargo, las respuestas son algo ambiguas segun la documentación que entrega ingeteam.
Les dejo aquí la documentación:
el _G es el protocolo de los inputs
Start Address = 0 | 1
MB Modicon Address = 30001 | 30002 | 30003
Display order = 1
Show when = always
Description = Actual Date. Year (Uint16). | Actual Date. Month of the Year.(Uint16). | Actual Date. Day of the month.(Uint16).
Magnitude = Year | Month | Day
Aqui les dejo el codigo: Este segun la documentación, extrae el año el mes y el dia que tiene el inversor pero me arroja numeros cambiantes cada ves que lo ejecuto, desde 6543 a 228 raro
Código:
from pymodbus.client.sync import ModbusTcpClient as ModbusClient
from pymodbus.constants import Endian
from pymodbus.payload import BinaryPayloadDecoder as Decoder
import datetime as dt
import time
fecha = dt.datetime.now()
fecha = fecha.strftime("%Y-%m-%d %H:%M:%S")
intentos = 3
cont_intentos = 0
# Conexion a Inversor xxx.xxx.xx.xxx
client1 = ModbusClient('xxx.xxx.xx.xxx', port=502)
try:
print('Conectando a Ingeteam xxx.xxx.xx.xxx')
c1=client1.connect()
print('Estado conexion: ' + str(c1) + ', a IP: xxx.xxx.xx.xxx')
while (c1 == True and cont_intentos < intentos):
try:
print('Obteniendo datos de inversor')
result = client1.read_input_registers(30001, 1, unit=1)
decoder = Decoder.fromRegisters(result.registers, wordorder=Endian.Little, byteorder=Endian.Little)
ano = decoder.decode_16bit_uint()
result = client1.read_input_registers(30002, 1, unit=1)
decoder = Decoder.fromRegisters(result.registers, wordorder=Endian.Little, byteorder=Endian.Little)
mes = decoder.decode_16bit_uint()
result = client1.read_input_registers(30003, 1, unit=1)
decoder = Decoder.fromRegisters(result.registers, wordorder=Endian.Little, byteorder=Endian.Little)
dia = decoder.decode_16bit_uint()
print('Ano: '+str(ano) +' Mes: ' + str(mes) + ' Dia: ' + str(dia))
except Exception as e:
print('Error al obtener datos: ' + str(e))
cont_intentos = cont_intentos + 1
break
print('Desconectando de Inversor xxx.xxx.xx.xxx')
close=client1.close()
except Exception as e:
print('Error al conectar: ' + str(e))