diff --git a/fichero_printer/config.yaml b/fichero_printer/config.yaml index 8206cba..aa37482 100644 --- a/fichero_printer/config.yaml +++ b/fichero_printer/config.yaml @@ -1,11 +1,34 @@ name: "Fichero Printer" version: "0.1.37" -host_dbus: true +name: "Fichero Printer" +description: "REST API for Fichero D11s thermal label printer with BLE and Classic Bluetooth support" +url: "https://github.com/your-repo/fichero-printer" +startup: "application" +boot: "auto" host_network: true +host_dbus: true +host_pid: true devices: - /dev/rfcomm0 + - /dev/ttyACM0 environment: DBUS_SYSTEM_BUS_ADDRESS: "unix:path=/host/run/dbus/system_bus_socket" + FICHERO_PORT: "8765" + FICHERO_ADDR: "" + FICHERO_TRANSPORT: "ble" + FICHERO_CHANNEL: "1" +options: + port: 8765 + address: "" + transport: "ble" + channel: 1 + log_level: "info" +schema: + port: int(1024,65535) + address: str? + transport: list(ble|classic) + channel: int(1,30) + log_level: list(trace|debug|info|warning|error|fatal) slug: "fichero_printer" description: "REST API for the Fichero D11s (AiYin) thermal label printer over Bluetooth" url: "https://git.leuschner.dev/Tobias/Fichero" diff --git a/fichero_printer/fichero/api.py b/fichero_printer/fichero/api.py index 878c1cf..21f413c 100644 --- a/fichero_printer/fichero/api.py +++ b/fichero_printer/fichero/api.py @@ -46,11 +46,14 @@ from fichero.printer import ( # Global connection settings (env vars or CLI flags at startup) # --------------------------------------------------------------------------- -_DEFAULT_ADDRESS: str | None = os.environ.get("FICHERO_ADDR") +# Try to get from options first (Home Assistant add-on), then env vars +_DEFAULT_ADDRESS: str | None = os.environ.get("FICHERO_ADDR") or "" # Default to BLE transport (most reliable for Fichero/D11s printers) # Set FICHERO_TRANSPORT=classic to force Classic Bluetooth (RFCOMM) _DEFAULT_CLASSIC: bool = os.environ.get("FICHERO_TRANSPORT", "").lower() == "classic" _DEFAULT_CHANNEL: int = int(os.environ.get("FICHERO_CHANNEL", "1")) +_DEFAULT_PORT: int = int(os.environ.get("FICHERO_PORT", "8765")) +_DEFAULT_LOG_LEVEL: str = os.environ.get("LOG_LEVEL", "info").lower() _PAPER_MAP = {"gap": 0, "black": 1, "continuous": 2} @@ -586,7 +589,7 @@ def main() -> None: parser = argparse.ArgumentParser(description="Fichero Printer API Server") parser.add_argument("--host", default="127.0.0.1", help="Bind host (default: 127.0.0.1)") - parser.add_argument("--port", type=int, default=8765, help="Bind port (default: 8765)") + parser.add_argument("--port", type=int, default=_DEFAULT_PORT, help=f"Bind port (default: {_DEFAULT_PORT})") parser.add_argument("--address", default=_DEFAULT_ADDRESS, metavar="BLE_ADDR", help="Default BLE address (or set FICHERO_ADDR env var)") parser.add_argument("--classic", action="store_true", default=_DEFAULT_CLASSIC, @@ -594,12 +597,15 @@ def main() -> None: parser.add_argument("--channel", type=int, default=_DEFAULT_CHANNEL, help="Default RFCOMM channel (default: 1)") parser.add_argument("--reload", action="store_true", help="Enable auto-reload (development)") + parser.add_argument("--log-level", choices=["trace", "debug", "info", "warning", "error", "fatal"], + default=_DEFAULT_LOG_LEVEL, help="Set log level (default: info)") args = parser.parse_args() # Push CLI overrides into module-level defaults so all handlers pick them up _DEFAULT_ADDRESS = args.address _DEFAULT_CLASSIC = args.classic _DEFAULT_CHANNEL = args.channel + _DEFAULT_PORT = args.port # Pass the app object directly when not reloading so that the module-level # globals (_DEFAULT_ADDRESS etc.) set above are visible to the handlers.