Air Quality Agent
Overview
The Air Quality Agent monitors environmental conditions across HCMC, collecting data on pollutants (PM2.5, PM10, NO2, SO2, CO, O3) and correlating air quality with traffic density and patterns.
Features
- Real-time AQI Monitoring: Track Air Quality Index across multiple stations
- Pollutant Analysis: Monitor PM2.5, PM10, NO2, SO2, CO, O3 levels
- Health Impact Assessment: Calculate health risks based on AQI levels
- Traffic-AQI Correlation: Link traffic congestion to pollution levels
- Predictive Modeling: Forecast air quality based on traffic patterns
- Historical Analysis: Long-term air quality trend analysis
Architecture
graph TB
A[Air Quality Stations] --> D[AQ Agent]
B[OpenWeatherMap AQ API] --> D
C[IQAir API] --> D
D --> E[AQI Calculator]
E --> F[Health Assessor]
E --> G[MongoDB Storage]
F --> H[Alert System]
G --> I[Traffic Correlator]
Configuration
File: config/data_sources.yaml
air_quality_sources:
openweathermap:
api_key: "${OPENWEATHER_API_KEY}"
endpoint: "/air_pollution"
iqair:
api_key: "${IQAIR_API_KEY}"
base_url: "https://api.airvisual.com/v2"
monitoring_stations:
- id: "AQ_DIST1"
name: "District 1 Station"
lat: 10.7769
lon: 106.7009
pollutants: ["PM2.5", "PM10", "NO2", "SO2", "CO", "O3"]
- id: "AQ_DIST3"
name: "District 3 Station"
lat: 10.7819
lon: 106.6893
pollutants: ["PM2.5", "PM10", "NO2"]
update_intervals:
realtime: 300 # 5 minutes
historical: 3600 # 1 hour
thresholds:
pm25:
good: 12
moderate: 35
unhealthy_sensitive: 55
unhealthy: 150
very_unhealthy: 250
hazardous: 500
pm10:
good: 54
moderate: 154
unhealthy_sensitive: 254
unhealthy: 354
very_unhealthy: 424
hazardous: 604
Usage
Basic Usage
from src.agents.data_collection.air_quality_agent import AirQualityAgent
# Initialize agent
agent = AirQualityAgent()
# Get current AQI
aqi_data = agent.get_current_aqi(
lat=10.7769,
lon=106.7009
)
print(f"AQI: {aqi_data.aqi}")
print(f"Level: {aqi_data.level}")
print(f"Main Pollutant: {aqi_data.main_pollutant}")
print(f"Health Message: {aqi_data.health_message}")
Detailed Pollutant Analysis
# Get all pollutant levels
pollutants = agent.get_pollutant_levels(
lat=10.7769,
lon=106.7009
)
print(f"PM2.5: {pollutants.pm25} µg/m³")
print(f"PM10: {pollutants.pm10} µg/m³")
print(f"NO2: {pollutants.no2} µg/m³")
print(f"SO2: {pollutants.so2} µg/m³")
print(f"CO: {pollutants.co} µg/m³")
print(f"O3: {pollutants.o3} µg/m³")
Health Impact Assessment
# Assess health risks
health_assessment = agent.assess_health_impact(aqi=aqi_data)
print(f"Risk Level: {health_assessment.risk_level}")
print(f"Affected Groups: {', '.join(health_assessment.affected_groups)}")
print(f"Recommendations: {health_assessment.recommendations}")
print(f"Outdoor Activity Safety: {health_assessment.outdoor_safety}")
Traffic-AQI Correlation
# Analyze traffic impact on air quality
correlation = agent.analyze_traffic_aqi_correlation(
time_range="30d",
location="District 1"
)
print(f"Traffic-AQI Correlation: {correlation.coefficient}")
print(f"Peak Pollution Hours: {correlation.peak_hours}")
print(f"Traffic Contribution: {correlation.traffic_contribution_pct}%")