Controller/tsgrain_controller/__main__.py

65 lines
1.6 KiB
Python

import signal
import sys
import os
import traceback
import argparse
import pathlib
from tsgrain_controller import __version__, application
from tsgrain_controller.io import io_factory
def _get_io_types() -> str:
io_types = [t.name for t in io_factory.IoType]
return '|'.join(io_types)
def _parse_args():
parser = argparse.ArgumentParser(description='TSGRain Controller')
parser.add_argument('--config',
dest='cfg',
type=pathlib.Path,
help='Pfad der Konfigurationsdatei')
parser.add_argument('--io', dest='io', help=f'IO-Typ: {_get_io_types()}')
return parser.parse_args()
def run():
print(f'TSGRain Controller {__version__}\n')
args = _parse_args()
io_type = io_factory.IoType.MCP23017
if args.io:
try:
io_type = io_factory.IoType[args.io.upper()]
except KeyError:
print(f'IO-Typ {args.io} ungültig. Verwende {_get_io_types()}')
sys.exit(1)
cfg_path = None
if args.cfg:
cfg_path = args.cfg.resolve()
app = application.Application(io_type, cfg_path=cfg_path)
def _signal_handler(sig, frame): # pylint: disable=unused-argument
app.stop()
print('Exited.')
sys.exit(0)
def _except_handler(etype, value, tb):
traceback.print_exception(etype, value, tb)
os.kill(os.getpid(), signal.SIGKILL)
signal.signal(signal.SIGINT, _signal_handler)
signal.signal(signal.SIGTERM, _signal_handler)
sys.excepthook = _except_handler
app.start()
signal.pause()
if __name__ == '__main__':
run()