NOTICE: All information contained herein is, and remains
the property of TechnoCore Automate.
Updated : 2026-03-16
ObjServiceWeather retrieves current weather observations from METAR
(Meteorological Aerodrome Report) stations via the pymetar library.
METAR is the international standard for weather reporting at airports
and weather stations worldwide.
This is the core weather service using aviation-grade data. For
OpenWeatherMap integration with forecasts, air quality, and solar
correlation, see package.gekkoridge/ObjServiceOpenWeather.
METAR reports are published by NOAA (National Oceanic and Atmospheric
Administration) and updated every 30-60 minutes. Data is fetched from:
https://tgftp.nws.noaa.gov/data/observations/metar/decoded/
No API key required. No rate limits.
South African METAR stations:
| Code | Location |
|---|---|
| FACT | Cape Town International |
| FAJS | OR Tambo International (Johannesburg) |
| FALE | King Shaka International (Durban) |
| FAPE | Port Elizabeth Airport |
| FAGM | Rand Airport (Germiston) |
| FALA | Lanseria International |
| FABB | Bram Fischer International (Bloemfontein) |
Full list: aviationweather.gov
Each METAR reading provides:
| Field | Attribute | Type | Description |
|---|---|---|---|
| Temperature | _Temp |
float | Celsius |
| Humidity | _Humid |
float | Relative humidity (%) |
| Wind speed | _Windspeed |
float | m/s (0 if calm) |
| Wind direction | _Winddirection |
str | Compass direction (N, NNE, etc.) |
| Station name | _Stationname |
str | Full station name |
| Observation time | _Time |
str | ISO timestamp |
| Raw report | _Payload |
str | Full METAR text |
Readings are persisted to either SQL or MongoDB depending on the
get_domongo() configuration.
data_weather_current — latest reading per station (REPLACE INTO):
| Column | Description |
|---|---|
| Station | METAR station code |
| StationName | Full station name |
| Readtime | Observation timestamp |
| Temperature | Celsius |
| Windspeed | m/s |
| WindDirection | Compass direction |
| Humidity | Relative humidity (%) |
| Lasttouch | DB write timestamp |
data_weather_history — time-series (INSERT INTO):
Same columns as data_weather_current, appended on each reading.
Collection track_weather with fields: station, station_name,
read_time, temp, wind_speed, wind_direction, humidity,
createdAt.
The process(context) method supports:
| Command | Context Keys | Result Keys |
|---|---|---|
report |
station (default: FACT) |
_weather_result (JSON), _weather_temp, _weather_humidity, _weather_wind |
render |
station |
_weather_result (JSON) |
The legacy run_workflow_direct(guid, param1) method is preserved
for backward compatibility with existing workflow definitions.
# Fetch weather for Cape Town International (default)
python ObjServiceWeather.py report
# Fetch weather for a specific station
python ObjServiceWeather.py report FAJS
# Fetch multiple stations
python ObjServiceWeather.py stations "FACT,FAJS,FALE"
pymetar — METAR report fetching and parsingInstall: pip install pymetar
from ObjServiceWeather import ObjServiceApi
svc = ObjServiceApi()
svc.get_report("FACT")
print(f"{svc._Stationname}: {svc._Temp}°C")
print(f"Wind: {svc._Windspeed} m/s {svc._Winddirection}")
print(f"Humidity: {svc._Humid}%")
# JSON output
print(svc.render("FACT"))
# Multiple stations
svc.get_report("FACT,FAJS,FALE")
Updated : 2026-03-16
cythonize -3 -a -i ObjServiceWeather.py
Compiling /home/axion/projects/axion/factory.service/package.core/ObjServiceWeather.py because it changed..[1/1] Cythonizing /home/axion/projects/axion/factory.service/package.core/ObjServiceWeather.py
Updated : 2026-03-16