Finds the farm fires satellites miss after 4 p.m., traces whose smoke is reaching your city, and drafts the alert for the district that can act.
| Hour (IST) | Detections |
|---|
Every part of the problem statement, the features that meet it, a live check against this running app, and the automated tests that prove it. A test fails if any listed proof stops existing.
| # | Track 02 asks for | What DhuanTrace does | Live check now | Proof | |
|---|---|---|---|---|---|
| Checking… | |||||
Districts ranked by how many people breathe their smoke now or within 24 hours. Farmers mostly burn between 4 and 7 p.m., so teams sent before 4 p.m. can prevent the next round.
| # | District | People exposed | AQI added | Fires | |
|---|---|---|---|---|---|
| Loading… | |||||
Pulls NASA's true-colour VIIRS image over a fire cluster and asks Gemini whether the smoke drifts the way our wind model predicts. Yellow rings are satellite fire detections; the blue arrow is the model's smoke direction.
The model's AQI at each CPCB station compared with what that station reports right now.
| Station | CPCB | Model | Diff |
|---|
Every CPCB station and citizen sensor is compared with what the CAMS model plus traced farm-fire smoke expects. Places far above the rest point to a local source: a factory, burning garbage, dust. Citizen reports, nearby industry and NASA's satellite layers for aerosol and NO₂ are added as evidence. In the satellite pictures the circle is the spot; the app compares it with the ring around it. These are daily daytime views of the whole air column, not ground readings.
Checking every measuring point…
The worst air along each industrial corridor, hour by hour, with an alert when it moves into a worse CPCB category or jumps by 50+ in six hours.
Forecasting corridors…
Every hour the app writes down its forecast for 3, 6, 12 and 24 hours ahead, before that time comes. When it arrives, the forecast is checked against the CPCB reading. Nothing is filled in or changed afterwards.
| Ahead | Checked | DhuanTrace | CAMS | Stays same | Right category |
|---|
How much farm-fire smoke Madhya Pradesh receives from each neighbouring state, and how much of its smoke reaches big cities across the border. States can read this as an open bulletin at /api/interstate.
| State | Into this region | From this region |
|---|---|---|
| Loading… | ||
Each city learns how far the CAMS forecast is off at its own CPCB stations and shares only its model weights, never its data. The average (FedAvg) corrects forecasts for every city, including ones without history.
| City node | Samples | CAMS | Own model | Shared |
|---|
Other states join by posting their weights to /api/federated/update; the shared model is at /api/model.
Saved alerts move from drafted to resolved. Six hours after action, the app compares the AQI change with the change the model expected from weather alone.
No alerts saved yet. Draft one below and press Save to alert log.
Four separate programs, each with its own process, port and memory, stand in for the regions and neighbouring states of this node (named in the table). Each keeps its own air-quality history. The coordinator sends out the shared model; each node trains on its own data and sends back five numbers. Every message is signed, and any reply carrying anything beyond the protocol's fields is refused.
| Node | Process | Rows kept at node | CAMS | Alone | Shared | Shared + own tuning | As a new member |
|---|
Real deployment: run node fednode.js on each state's server with FED_REGION and a shared FED_SECRET, and list their addresses in FED_PEERS. Protocol: dhuantrace.fednet/1.
This is a draft for an official to check and send. DhuanTrace never sends an alert by itself, and it names districts, never farmers.
Each city node publishes its forecast and fire attribution in one open JSON format, so neighbouring cities and states can load each other's results. Machine endpoint:
Loading…
Each data source says whether it is live or on labelled sample data, and why. Request counts and response times are measured by the server itself. API reference: API docs · /api/openapi.json
| Source | State | Detail |
|---|
| Busiest endpoints | Calls | Median | 95% | Refused |
|---|