Catch non payload modbus messages (#49910)

This commit is contained in:
jan iversen 2021-05-02 00:03:52 +02:00 committed by GitHub
parent 9e43239240
commit 7ac05110ca
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

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