From 0e5a22a481b517084f4648c374b1e4edbf9c48cc Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Fri, 4 Feb 2022 22:56:20 +0100 Subject: [PATCH] improve error handling --- opcua2mqtt/OpcUaRequester.py | 26 ++++++++++++++++---------- opcua2mqtt/config.json | 2 +- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/opcua2mqtt/OpcUaRequester.py b/opcua2mqtt/OpcUaRequester.py index 665aa2d..27ec40e 100644 --- a/opcua2mqtt/OpcUaRequester.py +++ b/opcua2mqtt/OpcUaRequester.py @@ -1,5 +1,5 @@ import asyncio -from asyncua import Client +from asyncua import Client, ua import threading from loguru import logger from DataObject import DataObject @@ -24,15 +24,21 @@ class OpcUaRequester(threading.Thread): async def opcUaRequesterInnerLoop(self): while not self.killBill: - async with Client(url=self.url, timeout=10.0) as client: - for nodeSpec in self.nodes: - logger.debug(f"Trying {self.name} {self.url} ns={nodeSpec['ns']};{nodeSpec['n']}") - node = client.get_node(f"ns={nodeSpec['ns']};{nodeSpec['n']}") - value = await node.read_value() - displayName = nodeSpec['d'] if ('d' in nodeSpec) else (await node.read_display_name()).Text - logger.debug(f"Got: {displayName=} = {value=}") - self.queue.put(DataObject(self.name, nodeSpec['ns'], displayName, value)) - await asyncio.sleep(self.delay) + try: + async with Client(url=self.url, timeout=10.0) as client: + for nodeSpec in self.nodes: + try: + logger.debug(f"Trying {self.name} {self.url} ns={nodeSpec['ns']};{nodeSpec['n']}") + node = client.get_node(f"ns={nodeSpec['ns']};{nodeSpec['n']}") + value = await node.read_value() + displayName = nodeSpec['d'] if ('d' in nodeSpec) else (await node.read_display_name()).Text + logger.debug(f"Got: {displayName=} = {value=}") + self.queue.put(DataObject(self.name, nodeSpec['ns'], displayName, value)) + except ua.UaError as e: + logger.error(f"UaError in inner OPC-UA loop: {type(e)} {e}") + await asyncio.sleep(self.delay) + except TimeoutError as e: + logger.error(f"Timeout in inner OPC-UA loop") def run(self): loop = asyncio.new_event_loop() diff --git a/opcua2mqtt/config.json b/opcua2mqtt/config.json index 5b62da6..46eb227 100644 --- a/opcua2mqtt/config.json +++ b/opcua2mqtt/config.json @@ -14,7 +14,7 @@ { "ns": 0, "n": "i=345", "d": "pv" }, { "ns": 0, "n": "i=348", "d": "sv" }, { "ns": 0, "n": "i=351", "d": "tv" }, - { "ns": 0, "n": "i=354", "d": "qv" } + { "ns": 0, "n": "i=35400", "d": "qv" } ] }, {