import logging import tomllib from argparse import ArgumentParser from pathlib import Path from hasspy.mqtt import HassClient, HassSystemClient, HassUserClient def main() -> None: parser = ArgumentParser( prog="HassPy", description="Home Assistant MQTT client", ) parser.add_argument("-c", "--config", help="Path to configuration file") parser.add_argument( "-v", "--verbose", help="Enable verbose logging", action="count", default=0 ) parser.add_argument("-u", "--user", help="User mode client", action="store_true") args = parser.parse_args() if args.config: config_file = Path(args.config) else: config_file = next( ( x for x in (Path("/etc/hasspy.toml"), Path("/etc/hasspy/config.toml")) if x.exists() ), Path("config.toml"), ) if not config_file or not config_file.exists(): raise FileNotFoundError("No configuration file found") with open(config_file, "rb") as file: config = tomllib.load(file) if isinstance(config.get("log_level"), str): config["log_level"] = getattr(logging, config["log_level"]) logging.basicConfig( level=config.get("log_level", logging.INFO) - (args.verbose * 10) ) ha: HassClient if not args.user: ha = HassSystemClient( "orchomenos", config=config, ) else: ha = HassUserClient( "orchomenos", config=config, ) ha.loop_forever() if __name__ == "__main__": main()