Catch non payload modbus messages (#49910)

This commit is contained in:
jan iversen
2021-05-02 00:03:52 +02:00
committed by Paulus Schoutsen
parent dabd398c6d
commit 22e62fa61a

View File

@@ -5,7 +5,6 @@ import threading
from pymodbus.client.sync import ModbusSerialClient, ModbusTcpClient, ModbusUdpClient from pymodbus.client.sync import ModbusSerialClient, ModbusTcpClient, ModbusUdpClient
from pymodbus.constants import Defaults from pymodbus.constants import Defaults
from pymodbus.exceptions import ModbusException from pymodbus.exceptions import ModbusException
from pymodbus.pdu import ExceptionResponse, IllegalFunctionRequest
from pymodbus.transaction import ModbusRtuFramer from pymodbus.transaction import ModbusRtuFramer
from homeassistant.const import ( from homeassistant.const import (
@@ -237,8 +236,8 @@ class ModbusHub:
result = self._client.read_coils(address, count, **kwargs) result = self._client.read_coils(address, count, **kwargs)
except ModbusException as exception_error: except ModbusException as exception_error:
self._log_error(exception_error) self._log_error(exception_error)
return None result = exception_error
if isinstance(result, (ExceptionResponse, IllegalFunctionRequest)): if not hasattr(result, "registers"):
self._log_error(result) self._log_error(result)
return None return None
self._in_error = False self._in_error = False
@@ -251,9 +250,8 @@ class ModbusHub:
try: try:
result = self._client.read_discrete_inputs(address, count, **kwargs) result = self._client.read_discrete_inputs(address, count, **kwargs)
except ModbusException as exception_error: except ModbusException as exception_error:
self._log_error(exception_error) result = exception_error
return None if not hasattr(result, "registers"):
if isinstance(result, (ExceptionResponse, IllegalFunctionRequest)):
self._log_error(result) self._log_error(result)
return None return None
self._in_error = False self._in_error = False
@@ -266,9 +264,8 @@ class ModbusHub:
try: try:
result = self._client.read_input_registers(address, count, **kwargs) result = self._client.read_input_registers(address, count, **kwargs)
except ModbusException as exception_error: except ModbusException as exception_error:
self._log_error(exception_error) result = exception_error
return None if not hasattr(result, "registers"):
if isinstance(result, (ExceptionResponse, IllegalFunctionRequest)):
self._log_error(result) self._log_error(result)
return None return None
self._in_error = False self._in_error = False
@@ -281,9 +278,8 @@ class ModbusHub:
try: try:
result = self._client.read_holding_registers(address, count, **kwargs) result = self._client.read_holding_registers(address, count, **kwargs)
except ModbusException as exception_error: except ModbusException as exception_error:
self._log_error(exception_error) result = exception_error
return None if not hasattr(result, "registers"):
if isinstance(result, (ExceptionResponse, IllegalFunctionRequest)):
self._log_error(result) self._log_error(result)
return None return None
self._in_error = False self._in_error = False
@@ -296,9 +292,8 @@ class ModbusHub:
try: try:
result = self._client.write_coil(address, value, **kwargs) result = self._client.write_coil(address, value, **kwargs)
except ModbusException as exception_error: except ModbusException as exception_error:
self._log_error(exception_error) result = exception_error
return False if not hasattr(result, "registers"):
if isinstance(result, (ExceptionResponse, IllegalFunctionRequest)):
self._log_error(result) self._log_error(result)
return False return False
self._in_error = False self._in_error = False
@@ -311,9 +306,8 @@ class ModbusHub:
try: try:
result = self._client.write_coils(address, values, **kwargs) result = self._client.write_coils(address, values, **kwargs)
except ModbusException as exception_error: except ModbusException as exception_error:
self._log_error(exception_error) result = exception_error
return False if not hasattr(result, "registers"):
if isinstance(result, (ExceptionResponse, IllegalFunctionRequest)):
self._log_error(result) self._log_error(result)
return False return False
self._in_error = False self._in_error = False
@@ -326,9 +320,8 @@ class ModbusHub:
try: try:
result = self._client.write_register(address, value, **kwargs) result = self._client.write_register(address, value, **kwargs)
except ModbusException as exception_error: except ModbusException as exception_error:
self._log_error(exception_error) result = exception_error
return False if not hasattr(result, "registers"):
if isinstance(result, (ExceptionResponse, IllegalFunctionRequest)):
self._log_error(result) self._log_error(result)
return False return False
self._in_error = False self._in_error = False
@@ -341,9 +334,8 @@ class ModbusHub:
try: try:
result = self._client.write_registers(address, values, **kwargs) result = self._client.write_registers(address, values, **kwargs)
except ModbusException as exception_error: except ModbusException as exception_error:
self._log_error(exception_error) result = exception_error
return False if not hasattr(result, "registers"):
if isinstance(result, (ExceptionResponse, IllegalFunctionRequest)):
self._log_error(result) self._log_error(result)
return False return False
self._in_error = False self._in_error = False