2022-02-09 18:07:11 +01:00

93 lines
2.1 KiB
Python

from MqttPublish import MqttPublish
from OpcUaRequester import OpcUaRequester
from Statistics import StatisticsCollector
from loguru import logger
import argparse
import json
import threading
import queue
import signal
deathBell = threading.Event()
def exceptHook(args):
global deathBell
logger.error("Exception in thread caught: {}".format(args))
deathBell.set()
logger.error("rang the death bell")
def terminateHook(sig, frame):
global deathBell
logger.error("SIGINT received")
deathBell.set()
logger.error("rang the death bell")
logger.info("opcua2mqtt bridge starting")
parser = argparse.ArgumentParser(description="opcua2mqtt")
parser.add_argument('--config', '-f',
help='Config file, default is $pwd/config.json',
required=False,
default='./config.json')
args = parser.parse_args()
with open(args.config) as f:
config = json.load(f)
queue = queue.Queue()
statsThread = StatisticsCollector(config, queue)
statsThread.start()
logger.info("StatisticsCollector started")
publishThread = MqttPublish(config, statsThread, queue)
publishThread.start()
logger.info("MqttPublish started")
opcuaThreads = []
for o in config['opcua']:
if o['enabled'] != 'true':
continue
ot = OpcUaRequester(o, statsThread, queue)
ot.start()
logger.info(f"OpcUaRequester thread for {o['name']} started")
opcuaThreads.append(ot)
threading.excepthook = exceptHook
logger.info("Threading excepthook set")
signal.signal(signal.SIGINT, terminateHook)
logger.info("SIGINT handler set")
logger.info("opcua2mqtt bridge is running")
deathBell.wait()
logger.error("opcua2mqtt bridge is dying")
publishThread.stop()
logger.error("publishThread stopped")
statsThread.stop()
logger.error("statsThread stopped")
for ot in opcuaThreads:
ot.stop()
logger.error(f"opcua thread {ot.name} stopped")
publishThread.join()
logger.error("publishThread joined")
statsThread.join()
logger.error("statsThread joined")
for ot in opcuaThreads:
ot.join()
logger.error(f"opcua thread {ot.name} joined")
logger.error("opcua2mqtt bridge is terminated")