improve error handling

This commit is contained in:
Wolfgang Hottgenroth
2022-02-04 22:56:20 +01:00
parent 34be24869a
commit 0e5a22a481
2 changed files with 17 additions and 11 deletions

View File

@ -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()

View File

@ -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" }
]
},
{