51 lines
1.7 KiB
Python
51 lines
1.7 KiB
Python
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
|