From e0393a63538737a303a265afec64305a07537d26 Mon Sep 17 00:00:00 2001 From: Xavier Beaudouin Date: Mon, 17 Oct 2022 21:22:06 +0200 Subject: [PATCH] Better way to make this working --- plugin.py | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/plugin.py b/plugin.py index 117b085..02c631f 100644 --- a/plugin.py +++ b/plugin.py @@ -7,7 +7,7 @@ Requirements: 2. pymodbus AND pymodbusTCP """ """ - + @@ -329,30 +329,40 @@ def DumpConfigToLog(): # get Modbus 32 bits values def getmodbus32(register, client): value = 0 - attempts = 0 - while attempts < 2: + try: + data = client.read_holding_registers(register, 2) + Domoticz.Debug("Data from register "+str(register)+": "+str(data)) + decoder = BinaryPayloadDecoder.fromRegisters(data, byteorder=Endian.Big, wordorder=Endian.Big) + value = decoder.decode_32bit_int() + except: + Domoticz.Error("Error getting data from "+str(register) + ", try 1") try: data = client.read_holding_registers(register, 2) Domoticz.Debug("Data from register "+str(register)+": "+str(data)) decoder = BinaryPayloadDecoder.fromRegisters(data, byteorder=Endian.Big, wordorder=Endian.Big) value = decoder.decode_32bit_int() except: - Domoticz.Error("Error getting data from "+str(register) + ", try "+ str(attempts)) - attempts += 1 + Domoticz.Error("Error getting data from "+str(register) + ", try 2") + return value # get Modbug 16 bits values def getmodbus16(register, client): value = 0 - attempts = 0 - while attempts < 2: + try: + data = client.read_holding_registers(register, 1) + Domoticz.Debug("Data from register "+str(register)+": "+str(data)) + decoder = BinaryPayloadDecoder.fromRegisters(data, byteorder=Endian.Big, wordorder=Endian.Big) + value = decoder.decode_16bit_int() + except: + Domoticz.Error("Error getting data from "+str(register) + ", try 1") try: data = client.read_holding_registers(register, 1) Domoticz.Debug("Data from register "+str(register)+": "+str(data)) decoder = BinaryPayloadDecoder.fromRegisters(data, byteorder=Endian.Big, wordorder=Endian.Big) value = decoder.decode_16bit_int() except: - Domoticz.Error("Error getting data from "+str(register) + ", try "+ str(attempts)) - attempts += 1 + Domoticz.Error("Error getting data from "+str(register) + ", try 2") + return value