| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- """Production entry point using paho-mqtt and pyserial."""
- import argparse
- import logging
- import signal
- import threading
- from .bridge import Bridge
- from .config import Config
- def main() -> None:
- parser = argparse.ArgumentParser(description="Motian MQTT / MAVLink telemetry and serial bridge")
- parser.add_argument("--config", required=True, help="path to JSON configuration")
- parser.add_argument("--debug", action="store_true")
- args = parser.parse_args()
- logging.basicConfig(level=logging.DEBUG if args.debug else logging.INFO,
- format="%(asctime)s %(levelname)s %(name)s: %(message)s")
- import paho.mqtt.client as mqtt
- import serial
- config = Config.from_file(args.config)
- client = mqtt.Client(callback_api_version=mqtt.CallbackAPIVersion.VERSION2,
- client_id=config.client_id, protocol=mqtt.MQTTv311)
- if config.mqtt_username is not None:
- client.username_pw_set(config.mqtt_username, config.mqtt_password())
- if config.mqtt_tls:
- client.tls_set(ca_certs=config.mqtt_ca_file,
- certfile=config.mqtt_cert_file, keyfile=config.mqtt_key_file)
- client.reconnect_delay_set(min_delay=1, max_delay=30)
- client.max_queued_messages_set(1)
- bridge = Bridge(config, client, serial.serial_for_url)
- done = threading.Event()
- def shutdown(signum: int, frame: object) -> None:
- done.set()
- signal.signal(signal.SIGINT, shutdown)
- signal.signal(signal.SIGTERM, shutdown)
- bridge.start()
- try:
- done.wait()
- finally:
- bridge.stop()
- if __name__ == "__main__":
- main()
|