Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 17 additions & 7 deletions src/metar_map/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,30 @@

if __name__ == "__main__":
config = load_config()
icao_codes: list[str] = config.get("icao_codes", [])
raw_icao_codes: list[str] = config.get("icao_codes", [])
refresh_time: int = int(config.get("refresh_time", 1800))
brightness: float = float(config.get("brightness", 0.15))
led_map = [
(i, code) for i, code in enumerate(raw_icao_codes) if code and code.strip()
]
filtered_icao_codes = [code for _, code in led_map]
client = MetarClient()
builder = LEDPatternBuilder()
controller = LEDController(num_leds=len(icao_codes))
controller = LEDController(num_leds=len(raw_icao_codes), brightness=brightness)
logger = Logger()
logger.info(f"Metar Map started up with the following settings:")
logger.info("Metar Map started up with the following settings:")
logger.info(f"{config}")
try:
while True:
metar_data = client.get_metar(icao_codes)
for i, data in enumerate(metar_data):
metar_data = client.get_metar(filtered_icao_codes)
metar_lookup = {d.icao: d for d in metar_data if d.icao}
for led_index, icao in led_map:
data = metar_lookup.get(icao)
logger.debug("----------------------------------------")
logger.debug(f"Index: {i}")
logger.debug(f"LED Index: {led_index} ICAO: {icao}")
if not data:
logger.warning(f"No METAR data for `{icao}`. Skipping...")
continue
if data.flight_category is None:
logger.warning(
f"Flight category for `{data.icao}` was None. Skipping..."
Expand All @@ -31,7 +41,7 @@
lightning=data.lightning,
snow=bool(data.snow),
)
controller.update_patterns(i, patterns)
controller.update_patterns(led_index, patterns)
logger.debug(f"ICAO: {data.icao}")
logger.debug(f"Flight Category: {data.flight_category}")
for pattern in patterns:
Expand Down
19 changes: 17 additions & 2 deletions src/metar_map/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from typing import Optional
import requests

from metar_map.logger import Logger
from metar_map.config import load_config


Expand Down Expand Up @@ -29,6 +30,7 @@ def __init__(self, config_path: Optional[str] = None):
config = load_config(config_path=config_path)
self.base_url: str = config.get("base_url", "")
self.metar_endpoint: str = config.get("endpoints", {}).get("metar", "")
self._logger = Logger()

def get_metar(self, ids: list[str]) -> list[MetarData]:
"""
Expand All @@ -37,9 +39,10 @@ def get_metar(self, ids: list[str]) -> list[MetarData]:
try:
ids_param = ",".join(ids)
url = f"{self.base_url}{self.metar_endpoint}?ids={ids_param}&format=json"
self._logger.debug(f"Making request for metar data with url `{url}`")
response = requests.get(url, timeout=10)
response.raise_for_status()
return [
payload = [
MetarData(
icao=item.get("icaoId"),
name=item.get("name"),
Expand All @@ -53,5 +56,17 @@ def get_metar(self, ids: list[str]) -> list[MetarData]:
)
for item in response.json()
]
except Exception:
self._logger.debug(f"Payload: {payload}")
return payload
except Exception as e:
self._logger.error(f"An error occurred querying for metar data: {e}")
return []


if __name__ == "__main__":
client = MetarClient()
config = load_config()
codes = config.get("icao_codes", [])
for code in codes:
print(f"- {code}")
print(client.get_metar(config.get("icao_codes", [])))
1 change: 1 addition & 0 deletions src/metar_map/static/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ icao_codes:
- KRDU
- KCLT
refresh_time: 1800
brightness: 0.15
led_patterns:
VFR:
color: GREEN
Expand Down