Repository navigation
Expand file tree
/
Copy pathmain.py
More file actions
61 lines (49 loc) · 1.91 KB
/
Copy pathmain.py
File metadata and controls
61 lines (49 loc) · 1.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import asyncio
import logging
import os
from dotenv import load_dotenv
from pathlib import Path
from core import Core, configure_logging
load_dotenv(override=True)
def require_env(key: str) -> str:
if key not in os.environ:
raise KeyError(f"Missing required environment variable: {key}. Add it to .env or your shell environment.")
return os.environ[key]
def require_env_int(key: str) -> int:
return int(require_env(key))
def require_env_log_level(key: str) -> int:
level_name = require_env(key).strip().upper()
level = getattr(logging, level_name, None)
if not isinstance(level, int):
raise ValueError(
f"Invalid logging level '{level_name}' for {key}. "
"Use one of: DEBUG, INFO, WARNING, ERROR, CRITICAL."
)
return level
async def main():
logger = configure_logging(
level=require_env_log_level("LOG_LEVEL"),
log_directory=require_env("LOG_DIRECTORY")
)
core = Core(
logger=logger,
message_host=require_env("MESSAGE_HOST"),
mavlink_connection_string=require_env("MAVLINK_CONNECTION_STRING"),
mavlink_baud=require_env_int("MAVLINK_BAUD"),
mavlink_timesync=True, # we're always going to use timesync
telem_out_port=require_env_int("TELEM_OUT_PORT"),
telem_out_topic_prefix=require_env("TELEM_OUT_TOPIC_PREFIX"),
telem_interval_ms=require_env_int("TELEM_INTERVAL_MS"),
request_in_port=6580,
request_in_topics=[require_env("REQUEST_IN_TOPIC")],
status_out_port=require_env_int("STATUS_OUT_PORT"),
status_out_topic=require_env("STATUS_OUT_TOPIC"),
mission_directory=Path(require_env("MISSION_FILE_DIRECTORY")).absolute()
)
await core.start()
await asyncio.Event().wait() # Wait forever
if __name__ == "__main__":
try:
asyncio.run(main())
except KeyboardInterrupt:
print("\nProgram interrupted.")