Synthetic Smart City IoT Dataset — Source-Dominated Air Quality, 672 Rows
Abstract
"Free CC0 synthetic dataset: 672 rows of UTCI thermal comfort, PM2.5 and NO2 air quality, occupancy and LAeq noise. Source-Dominated Air Quality."
Description
Overview
Synthetic urban public-space IoT time series generated by the IoTSyn v4.4.0 reference engine (Smart City & Public Spaces Edition). A coupled physical–stochastic model produces meteorology (solar geometry, cloud/precipitation Markov chains, AR(1) air temperature with a nocturnal urban-heat-island term, and a Weibull wind field induced through a Gaussian copula), human presence (a state-modulated non-homogeneous Poisson arrival process with LogNormal dwell times and infinite-server occupancy), road traffic, species-resolved air quality from a well-mixed mass-balance box model (PM2.5 and NO2, with separate physical and sensor columns), environmental noise composed in the energy domain (LAeq), and UTCI thermal comfort. A three-way separation between physical truth, sensor observation, and decision output is preserved throughout, and a multi-hazard decision layer emits an ordinal urban risk vector (thermal, air quality, noise, crowding), operational action levels, risk episodes, and provenance-tagged behaviour-change strategy objects. All randomness derives from named substreams of a portable MT19937 generator; identical configuration and seed reproduce byte-identical output. Each dataset ships with machine-readable sidecars: normalized scenario, domain validation report, risk episodes, and the strategy file.
672 data points, 64 columns. Config: IoTSyn v4.4.0 engine; master_seed: 88; Capacity: 500; Controls: preset=source_dominated_air_quality; EXTENDED (non-normative).
Column Schema
| Column | Description |
|---|---|
timestamp | string_iso8601 — interval start, explicit UTC offset |
step_duration_seconds | integer, s |
day_type | enum {weekday | weekend | holiday} |
cloud_state | enum {clear | partly_cloudy | overcast} |
cloud_fraction | float, dimensionless — range 0..1 |
precipitation_mm_h | float, mm/h — >=0; exactly 0 when dry |
air_temperature_c | float, degC |
vapour_pressure_pa | float, Pa |
relative_humidity_pct | float, % — 0..100 after roundoff clamp |
wind_speed_10m_m_s | float, m/s |
wind_speed_pedestrian_m_s | float, m/s |
mean_radiant_temperature_c | float, degC |
crowd_state | enum {quiet | normal | busy | event} |
crowd_state_mechanism | enum {stochastic | forced} |
offered_arrivals_count | integer, persons |
admitted_arrivals_count | integer, persons |
rejected_arrivals_count | integer, persons |
deferred_arrivals_count | integer, persons |
deferred_timeout_count | integer, persons |
queue_length_persons | integer, persons — 0 unless capacity_mode=defer_fifo |
occupancy_persons | integer, persons |
operational_capacity_ratio | float, dimensionless |
audience_general_public_persons | integer, persons |
audience_families_persons | integer, persons |
audience_elderly_persons | integer, persons |
audience_students_persons | integer, persons |
audience_commuters_persons | integer, persons |
audience_event_attendees_persons | integer, persons |
dominant_audience | enum, nullable {general_public | families | elderly | students | commuters | event_attendees} |
traffic_flow_vehicles_h | float, vehicles/h |
pm25_emission_ug_s | float, ug/s |
pm25_background_ug_m3 | float, ug/m3 |
pm25_physical_ug_m3 | float, ug/m3 |
pm25_sensor_raw_ug_m3 | float, ug/m3 |
pm25_sensor_calibrated_ug_m3 | float, ug/m3, nullable |
pm25_rolling_24h_ug_m3 | float, ug/m3, nullable — null until complete window |
pm25_rolling_complete | boolean |
no2_emission_ug_s | float, ug/s |
no2_background_ug_m3 | float, ug/m3 |
no2_physical_ug_m3 | float, ug/m3 |
no2_sensor_raw_ug_m3 | float, ug/m3 |
no2_sensor_calibrated_ug_m3 | float, ug/m3, nullable |
no2_rolling_24h_ug_m3 | float, ug/m3, nullable — null until complete window |
no2_rolling_complete | boolean |
LAeq_15min_dBA | float, dB(A), nullable — column name embeds the declared window; null until complete window unless warm-up supplies history |
noise_window_complete | boolean |
utci_c | float, degC |
utci_stress_category | enum {extreme cold stress | very strong cold stress | strong cold stress | moderate cold stress | slight cold stress | no thermal stress | moderate heat stress | strong heat stress | very strong heat stress | extreme heat stress} |
utci_input_clamped | boolean |
wbgt_outdoor_c | float, degC, nullable |
thermal_risk_level | enum, nullable {low | caution | high_risk | severe} |
air_quality_risk_level | enum, nullable {low | caution | high_risk | severe} |
noise_risk_level | enum, nullable {low | caution | high_risk | severe} |
crowding_risk_level | enum, nullable {low | caution | high_risk | severe} |
overall_action_level | enum, nullable {low | caution | high_risk | severe} |
dominant_issue | enum, nullable {thermal | air_quality | noise | crowding} |
co_dominant_issues | json_array_of_enum {thermal | air_quality | noise | crowding} |
elevated_issues | json_array_of_enum {thermal | air_quality | noise | crowding} |
elevated_hazard_count | integer |
compound_risk_flag | boolean |
risk_completeness_fraction | float, dimensionless |
overall_action_level_provisional | boolean |
risk_communication_template_id | string |
risk_communication_message | string |
Mathematical Models
- Meteorology:
AR(1) air temperature + sinusoidal diurnal cycle + nocturnal urban-heat-island (Oke); Magnus–WMO saturation vapour pressure; Weibull 10 m wind via an AR(1) Gaussian copula (Sklar), pedestrian wind through a log profile - Thermal comfort:
UTCI operational polynomial (Bröde et al. 2012) from air temperature, mean radiant temperature, 10 m wind and vapour pressure; clamp-and-flag domain policy; 10 scientific categories plus a coarser 4-level operational band - Air quality:
Single well-mixed box mass balance with ventilation exchange, deposition and chemical first-order loss and a traffic-driven source; exact exponential one-step update; mean-preserving log-normal sensor observation model; 24 h rolling means - Presence:
Discrete-time Markov-modulated NHPP arrivals with thermal/rain/wind deterrence; exact per-interval Poisson counts with sorted uniform offsets; LogNormal dwell; infinite-server occupancy reconstructed from events; largest-remainder audience allocation - Noise:
A-weighted equivalent continuous level (LAeq) over a declared window, summed in the energy (intensity) domain per ISO 1996 - Risk & strategy:
Conservative-max hazard vector with compound-risk indicators; compound priority score H·log10(1 + person-minutes / E_ref); ex-post, provenance-tagged behaviour-change strategies
Use Cases
- Thermal-comfort (UTCI) and heat-risk analytics
- Air-quality (PM2.5 / NO2) exposure and sensor calibration / drift research
- Occupancy and arrivals (NHPP) estimation benchmarks with exact ground truth
- Environmental-noise (LAeq) exposure analysis
- Multi-hazard urban risk aggregation and decision-support research
Reproducibility
Seed: 88. Same seed + parameters = identical output. IoTSyn v3.1.
Machine-readable Sidecars
- Normalized scenario + controls (reproducibility): scenario.json
- Domain validation report (recomputed invariants & coverage): validation.json
- Elevated-risk episodes: episodes.json
- Behaviour-change strategy file (priority-ranked, provenance-tagged): strategy.json
Sample Data (18 rows · 64 columns)
| # | timestamp | step_duration_seconds | day_type | cloud_state | cloud_fraction | precipitation_mm_h | air_temperature_c | vapour_pressure_pa | relative_humidity_pct | wind_speed_10m_m_s | wind_speed_pedestrian_m_s | mean_radiant_temperature_c | crowd_state | crowd_state_mechanism | offered_arrivals_count | admitted_arrivals_count | rejected_arrivals_count | deferred_arrivals_count | deferred_timeout_count | queue_length_persons | occupancy_persons | operational_capacity_ratio | audience_general_public_persons | audience_families_persons | audience_elderly_persons | audience_students_persons | audience_commuters_persons | audience_event_attendees_persons | dominant_audience | traffic_flow_vehicles_h | pm25_emission_ug_s | pm25_background_ug_m3 | pm25_physical_ug_m3 | pm25_sensor_raw_ug_m3 | pm25_sensor_calibrated_ug_m3 | pm25_rolling_24h_ug_m3 | pm25_rolling_complete | no2_emission_ug_s | no2_background_ug_m3 | no2_physical_ug_m3 | no2_sensor_raw_ug_m3 | no2_sensor_calibrated_ug_m3 | no2_rolling_24h_ug_m3 | no2_rolling_complete | LAeq_15min_dBA | noise_window_complete | utci_c | utci_stress_category | utci_input_clamped | wbgt_outdoor_c | thermal_risk_level | air_quality_risk_level | noise_risk_level | crowding_risk_level | overall_action_level | dominant_issue | co_dominant_issues | elevated_issues | elevated_hazard_count | compound_risk_flag | risk_completeness_fraction | overall_action_level_provisional | risk_communication_template_id | risk_communication_message |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2026-07-14T00:00:00+01:00 | 900 | weekday | clear | 0.32 | 0 | 24.95 | 1,729.79 | 54.91 | 0.89 | 0.33 | 22.90 | normal | stochastic | 6 | 6 | 0 | 0 | 0 | 0 | 15 | 0.03 | 4 | 5 | 1 | 1 | 2 | 2 | families | 117.21 | 10,139.84 | 8 | 16.10 | 15.73 | 27.27 | true | 16,674.93 | 14 | 26.73 | 24.54 | 43.78 | true | 55.27 | true | 24.34 | no thermal stress | false | low | high_risk | caution | low | high_risk | air_quality | ["air_quality"] | ["air_quality"] | 1 | false | 1 | false | action_high_risk | Overall action level high_risk; dominant issue air_quality. | |||
| 2 | 2026-07-14T00:15:00+01:00 | 900 | weekday | partly_cloudy | 0.41 | 0 | 24.37 | 1,633.18 | 53.67 | 0.87 | 0.32 | 22.59 | normal | stochastic | 10 | 10 | 0 | 0 | 0 | 0 | 16 | 0.03 | 9 | 3 | 1 | 2 | 1 | 0 | general_public | 119.98 | 10,331.71 | 8 | 16.43 | 16.40 | 27.33 | true | 16,997.28 | 14 | 27.26 | 32.61 | 43.94 | true | 54.41 | true | 23.72 | no thermal stress | false | low | high_risk | low | low | high_risk | air_quality | ["air_quality"] | ["air_quality"] | 1 | false | 1 | false | action_high_risk | Overall action level high_risk; dominant issue air_quality. | |||
| 3 | 2026-07-14T00:30:00+01:00 | 900 | weekday | partly_cloudy | 0.59 | 2.74 | 23.61 | 1,734.66 | 59.65 | 1.25 | 0.46 | 22.39 | normal | stochastic | 2 | 2 | 0 | 0 | 0 | 0 | 9 | 0.02 | 4 | 2 | 0 | 2 | 1 | 0 | general_public | 116.96 | 10,122.44 | 8 | 14.25 | 14.13 | 27.36 | true | 16,645.70 | 14 | 23.87 | 26.39 | 43.96 | true | 55.44 | true | 23.11 | no thermal stress | false | low | high_risk | caution | low | high_risk | air_quality | ["air_quality"] | ["air_quality"] | 1 | false | 1 | false | action_high_risk | Overall action level high_risk; dominant issue air_quality. | |||
| 4 | 2026-07-14T00:45:00+01:00 | 900 | weekday | partly_cloudy | 0.74 | 1.69 | 22.58 | 1,723.75 | 63.11 | 0.57 | 0.21 | 21.80 | normal | stochastic | 4 | 4 | 0 | 0 | 0 | 0 | 8 | 0.02 | 2 | 2 | 0 | 2 | 2 | 0 | 131.70 | 11,146.03 | 8 | 20.06 | 22.51 | 27.49 | true | 18,365.33 | 14 | 32.91 | 28.75 | 44.09 | true | 56.88 | true | 22.86 | no thermal stress | false | low | high_risk | caution | low | high_risk | air_quality | ["air_quality"] | ["air_quality"] | 1 | false | 1 | false | action_high_risk | Overall action level high_risk; dominant issue air_quality. | ||||
| 5 | 2026-07-14T01:00:00+01:00 | 900 | weekday | partly_cloudy | 0.48 | 0 | 22.52 | 1,671.66 | 61.42 | 0.94 | 0.35 | 20.95 | busy | stochastic | 21 | 21 | 0 | 0 | 0 | 0 | 27 | 0.05 | 8 | 9 | 1 | 6 | 2 | 1 | families | 137.98 | 11,582.29 | 8 | 16.92 | 17.29 | 27.54 | true | 19,098.24 | 14 | 28.11 | 30.45 | 44.19 | true | 55.84 | true | 22.19 | no thermal stress | false | low | high_risk | caution | low | high_risk | air_quality | ["air_quality"] | ["air_quality"] | 1 | false | 1 | false | action_high_risk | Overall action level high_risk; dominant issue air_quality. | |||
| 6 | 2026-07-14T01:15:00+01:00 | 900 | weekday | overcast | 0.68 | 0 | 22.75 | 1,529.83 | 55.43 | 0.32 | 0.12 | 21.80 | busy | stochastic | 10 | 10 | 0 | 0 | 0 | 0 | 28 | 0.06 | 10 | 8 | 2 | 6 | 1 | 1 | general_public | 137.13 | 11,523.01 | 8 | 24.81 | 24.55 | 27.65 | true | 18,998.65 | 14 | 40.19 | 36.31 | 44.36 | true | 54.54 | true | 22.55 | no thermal stress | true | low | high_risk | low | low | high_risk | air_quality | ["air_quality"] | ["air_quality"] | 1 | false | 1 | false | action_high_risk | Overall action level high_risk; dominant issue air_quality. | |||
| 7 | 2026-07-14T01:30:00+01:00 | 900 | weekday | overcast | 0.78 | 0 | 22.72 | 1,549.70 | 56.24 | 0.29 | 0.11 | 22.05 | busy | stochastic | 12 | 12 | 0 | 0 | 0 | 0 | 23 | 0.05 | 9 | 5 | 2 | 5 | 2 | 0 | general_public | 154.74 | 12,745.78 | 8 | 27.93 | 30.83 | 27.86 | true | 21,052.90 | 14 | 45.04 | 38.64 | 44.56 | true | 57.65 | true | 22.66 | no thermal stress | true | low | high_risk | caution | low | high_risk | air_quality | ["air_quality"] | ["air_quality"] | 1 | false | 1 | false | action_high_risk | Overall action level high_risk; dominant issue air_quality. | |||
| 8 | 2026-07-14T01:45:00+01:00 | 900 | weekday | partly_cloudy | 0.59 | 0 | 22.42 | 1,577.77 | 58.31 | 0.30 | 0.11 | 21.19 | busy | stochastic | 14 | 14 | 0 | 0 | 0 | 0 | 26 | 0.05 | 14 | 6 | 0 | 3 | 2 | 1 | general_public | 189.62 | 15,167.93 | 8 | 31.32 | 28.71 | 27.97 | true | 25,122.12 | 14 | 50.55 | 52.34 | 44.85 | true | 55.26 | true | 22.30 | no thermal stress | true | low | high_risk | caution | low | high_risk | air_quality | ["air_quality"] | ["air_quality"] | 1 | false | 1 | false | action_high_risk | Overall action level high_risk; dominant issue air_quality. | |||
| 9 | 2026-07-14T02:00:00+01:00 | 900 | weekday | partly_cloudy | 0.38 | 0 | 21.60 | 1,546.79 | 60.11 | 0.49 | 0.18 | 19.73 | busy | stochastic | 9 | 9 | 0 | 0 | 0 | 0 | 21 | 0.04 | 8 | 3 | 2 | 3 | 2 | 3 | general_public | 175.39 | 14,180.05 | 8 | 25.13 | 23.88 | 28.04 | true | 23,462.49 | 14 | 40.98 | 45.47 | 45.08 | true | 57.23 | true | 21.35 | no thermal stress | true | low | high_risk | caution | low | high_risk | air_quality | ["air_quality"] | ["air_quality"] | 1 | false | 1 | false | action_high_risk | Overall action level high_risk; dominant issue air_quality. | |||
| 10 | 2026-07-14T02:15:00+01:00 | 900 | weekday | partly_cloudy | 0.46 | 0 | 20.84 | 1,544.86 | 62.90 | 0.35 | 0.13 | 19.22 | normal | stochastic | 13 | 13 | 0 | 0 | 0 | 0 | 23 | 0.05 | 6 | 7 | 3 | 3 | 2 | 2 | families | 166.38 | 13,554.13 | 8 | 27.45 | 27.58 | 28.18 | true | 22,410.95 | 14 | 44.46 | 42.60 | 45.28 | true | 57.15 | true | 20.80 | no thermal stress | true | low | high_risk | caution | low | high_risk | air_quality | ["air_quality"] | ["air_quality"] | 1 | false | 1 | false | action_high_risk | Overall action level high_risk; dominant issue air_quality. |
Showing first 10 of 18 sample rows
Data Visualization Interactive
Numeric Trends
Category Distribution
Machine-Readable Artifacts JSON
This dataset ships companion files alongside the CSV. Together they make the run independently reproducible and auditable without re-running the generator.
Cite This Dataset
IoTSyn Generated (2026). Synthetic Smart City IoT Dataset — Source-Dominated Air Quality, 672 Rows. [Dataset]. IoTSyn Generated. https://iotsyn.com/view.php?uid=iotsyn_6a641ddc32a451.23134771
Source: IoTSyn Generated (2026)
Indexed by IoTDataset.com on Jul 28, 2026
Ready to Start Your Research?
Download this dataset directly from the official repository and start building your next breakthrough project.