65 lines
1.6 KiB
Python
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()
|