import json from dataclasses import dataclass @dataclass class HFBandCondition: """Data class representing HF propagation conditions for certain bands and time of day.""" # Band name, e.g. "80m-40m", "20m-17m", "10m-6m" band: str = None # Time of day: "day" or "night" time: str = None # Propagation condition: "Good", "Fair", or "Poor" condition: str = None @dataclass class VHFCondition: """Data class representing a VHF propagation condition.""" # Phenomenon name, e.g. "E-Skip", "Sporadic E" phenomenon: str = None # Geographic location this applies to, e.g. "Europe", "N America" location: str = None # Condition description, e.g. "Band Closed", "Enhanced", "Good" condition: str = None @dataclass class SolarConditions: """Data class representing current solar and propagation conditions.""" # Time the data was last updated at the source, UTC seconds since UNIX epoch updated: float = None # Solar Flux Index (SFI) sfi: int = None # A-index (daily geomagnetic activity) a_index: int = None # K-index (3-hour geomagnetic activity) k_index: int = None # X-ray flux class, e.g. "B2.3", "C1.0" x_ray: str = None # Proton flux proton_flux: int = None # Electron flux electron_flux: int = None # Aurora activity level aurora: int = None # Latitude in degrees of the aurora boundary aurora_latitude: float = None # Sunspot count sunspots: int = None # Solar wind speed in km/s solar_wind: float = None # Interplanetary magnetic field strength in nT magnetic_field: float = None # Geomagnetic field condition, e.g. "Quiet", "Unsettled", "Active", "Storm" geomag_field: str = None # Geomagnetic background noise level, e.g. "S0", "S1", "S2" geomag_noise: str = None # HF band propagation conditions hf_conditions: list = None # list[HFBandCondition] # VHF propagation phenomena vhf_conditions: list = None # list[VHFCondition] def to_json(self): """JSON serialise""" return json.dumps(self, default=lambda o: o.__dict__, sort_keys=True)