import argparse import json import logging import sys from .app import DEFAULT_CONFIG, LOG, CameraControlBridge, load_config_or_env def main(argv=None): parser = argparse.ArgumentParser() parser.add_argument("--config", default=DEFAULT_CONFIG) parser.add_argument("--serve", action="store_true") parser.add_argument("--list", action="store_true") parser.add_argument("--check", action="store_true") parser.add_argument("--publish-discovery", action="store_true") parser.add_argument("--action", metavar="ID") parser.add_argument("command", nargs="?") parser.add_argument("--all-off", action="store_true") args = parser.parse_args(argv) logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s") bridge = CameraControlBridge(load_config_or_env(args.config)) if args.list: bridge.list_actions() return 0 if args.check: return bridge.check() if args.all_off: print(json.dumps(bridge.all_off(), indent=2)) return 0 if args.action: if not args.command: print("missing command", file=sys.stderr) return 2 print(json.dumps(bridge.execute_action(args.action, args.command, publish=False), indent=2)) return 0 if args.publish_discovery: for credential in bridge.credentials: try: bridge.mqtt.connect(credential.get("username"), credential.get("password")) bridge.publish_discovery() bridge.mqtt.disconnect_cleanly() return 0 except Exception as exc: LOG.warning("publish discovery failed using %s: %s", credential["source"], exc) return 1 bridge.serve() return 0