Real-time environmental signals from the physical space — occupancy, flow, air quality, noise, and crowd density — feeding every channel simultaneously. The sensory object turns a static destination record into a living, responsive system that adapts routing and messaging as conditions change.
The sensory object carries time-stamped readings from physical sensors attached to or near a destination. Downstream systems — routing engines, digital signs, mobile apps — consume these readings to adapt their output to current conditions without human intervention.
The sensory object sits alongside place and status at the root level. One sensory object is emitted per sensor reading — high-frequency sensors may push multiple objects per minute. The sensor_location_id links each reading to its physical anchor in the record graph.
Measurement fields align with OGC SensorThings API conventions. Environmental indicators follow ISO 37120 smart city metrics. Privacy fields (anonymised, privacy_mode, retention_period) are mandatory to support GDPR compliance.
Globally unique identifier of the physical sensor device that produced this reading. Immutable — assigned at sensor registration and never changed even if the sensor is relocated. Consumers use this to group readings by source, detect rogue devices, and correlate readings across time.
Format: RFC 4122 UUID v4 — Immutable after registration
"sensor_id": "b4c5d6e7-0000-4000-e000-000000000005"Classification of the physical sensor technology. Determines which measurement fields are expected and which privacy rules apply. Camera-based sensors always require privacy_mode and anonymised to be set.
Identifier of the system, platform, or integration that submitted this sensor reading to the WIM. Used for data lineage tracing — distinguishing readings from a building management system versus a third-party IoT platform versus a direct device push. Helps operations teams debug conflicting readings from overlapping sensor coverage zones.
Max: 64 chars — Convention: SYSTEM-VENDOR-ID slug
"sensor_source": "BMS-SIEMENS-DESIGO-01"UUID of the WIM place record representing the physical location of this sensor. Links the reading into the spatial graph, enabling routing engines to use live sensor data when computing paths through the environment.
Operational health state of the sensor at the time of this reading. Consumers must treat readings from degraded or offline sensors as unreliable and fall back to cached values or defaults. Routing engines should not block paths based on data from offline sensors.
The physical or derived quantity that this sensor reading represents. When a single sensor produces multiple measurement types (e.g. a combined CO₂ and temperature device), one sensory object is emitted per measurement type with the same sensor_id.
The raw numeric value of the measurement. Interpretation depends on measurement_unit — do not use this field without the accompanying unit. For boolean-style measurements (queue detected: yes/no), use 1 and 0.
Precision: up to 4 decimal places — Negative values allowed (e.g. temperature)
"measurement_value": 47SI or domain-standard unit symbol for the measurement value. Consumers must validate this field before displaying or acting on measurement_value. Use SI notation where applicable; domain-specific units (dB, lux, AQI) follow their governing standard.
Examples: count, dB, lux, °C, ppm, %, m/s, AQI, dBm
"measurement_unit": "count"UTC timestamp of when the physical measurement was taken by the sensor — not when it was received or processed by the WIM. Consumers must use this field (not message receipt time) when ordering readings, computing deltas, or deciding whether data is stale. Staleness threshold is application-defined; typical wayfinding systems treat readings older than 5 minutes as expired.
Format: ISO 8601 — Timezone: always UTC (Z)
"measured_at": "2026-04-22T14:31:07Z"Estimated number of people currently present in the sensor's coverage zone. Derived from the sensor reading; may be a raw count (people counters, pressure mats) or an estimate (camera-based density calculation). Routing engines use this to flag zones as full and compute alternative routes.
Min: 0 — Not a crowd density score — use crowd_density for normalised pressure
Number of people who passed through the sensor zone since the previous reading interval. Represents throughput, not presence — used to compute corridor load, identify bottlenecks, and predict upstream congestion. Should be interpreted alongside direction_of_flow.
Min: 0 — Interval: defined by the sensor's reporting cadence
"people_flow_count": 12Dominant direction of pedestrian movement detected by the sensor during the measurement interval. Used by routing engines to identify contra-flow conditions, plan one-way routing in congested corridors, and inform signage systems that display directional guidance arrows.
Ambient noise level in decibels (dB SPL), averaged over the measurement interval. Used by accessibility routing to avoid high-noise zones for users with sensory sensitivities, and by voice channel systems to adapt audio output volume. Typical indoor thresholds: quiet <45 dB, moderate 45–65 dB, loud >65 dB.
Unit: dB SPL — Range: 0–140 — Precision: 1 decimal place
"noise_level_db": 58.3Ambient light level in lux at the sensor location. Used for accessibility routing (low-stimulation paths prefer lower lux) and for building management integration (automated lighting control). EN 12464-1 defines recommended lux levels per space type.
Unit: lux — Range: 0–100,000 — Standard: EN 12464-1
"light_level_lux": 320Ambient air temperature in degrees Celsius at the sensor location. Used for comfort-aware routing, building management integration, and indoor mapping displays. Always expressed in Celsius regardless of the facility's locale — convert for display in consuming applications.
Unit: °C — Precision: 1 decimal place — Range: −30 to 80
"temperature_c": 21.5Composite indoor air quality score. The scale used is system-defined — operators must declare their AQI scale in site configuration. Common scales: 0–500 (US EPA), 0–500 (EU CAQI). Lower is better. Used for health-aware routing and to trigger ventilation alerts in building management systems.
Unit: AQI (scale operator-defined) — Lower = better air quality
"air_quality_index": 42CO₂ concentration in parts per million (ppm). The primary indicator of indoor air quality in occupied spaces. ASHRAE 62.1 recommends keeping indoor CO₂ below 1,100 ppm. Readings above 1,500 ppm trigger ventilation alerts in conforming building management systems. Used by health-sensitive routing to avoid poorly ventilated zones.
Unit: ppm — Ambient baseline: ~420 ppm — Alert threshold: 1,100 ppm (ASHRAE 62.1)
"co2_ppm": 680Relative humidity as a percentage (0–100%). Used for comfort-aware routing and building management. WHO and ASHRAE recommend indoor relative humidity between 30–60% for human comfort and infection control. Values outside this range may trigger HVAC alerts in integrated building management systems.
Unit: % — Range: 0–100 — Comfort band: 30–60% (WHO / ASHRAE)
"humidity_percentage": 44.2Structural vibration level at the sensor location, expressed in mm/s peak particle velocity (PPV). Used to detect crowd stamping events in stadia or concert venues, monitor structural health, and trigger safety alerts. Values above 15 mm/s PPV typically indicate abnormal crowd behaviour.
Unit: mm/s PPV — Alert threshold: site-defined
"vibration_level": 0.8Normalised crowd density score for the sensor zone, expressed as a float between 0.0 (empty) and 1.0 (at or beyond safe capacity). Derived from occupancy_count divided by the zone's maximum safe capacity, which is configured per place record. Routing engines use this to reroute visitors away from zones above 0.8.
Range: 0.0 (empty) – 1.0 (capacity) — Reroute threshold: typically 0.8
"crowd_density": 0.62Whether the sensor has detected a stationary queue in its coverage zone. When true, digital signage systems display queue warnings and routing engines may propose alternative destinations. Distinct from occupancy_count — high occupancy does not always imply a queue.
Identifier of the Bluetooth beacon whose signal contributed to or triggered this reading. When populated, consumers can use this to correlate the sensor reading with indoor positioning data from a beacon network. Used for proximity-based notifications and fine-grained position confirmation.
Max: 64 chars — Format: UUID or iBeacon/Eddystone major-minor identifier
"beacon_id": "BCNX-F3-LEVEL2-042"Received signal strength indicator (RSSI) in dBm for the strongest detected Wi-Fi access point at the sensor location. Used for indoor positioning calibration and to assess dead-zone risk for mobile wayfinding apps. Typical indoor range: −30 dBm (excellent) to −90 dBm (marginal).
Unit: dBm — Range: −100 to 0 — Higher (less negative) = stronger signal
"wifi_signal_strength": -62People count estimate produced by a camera-based computer vision system for the sensor zone. Distinct from occupancy_count in that it specifically identifies the originating technology. Always requires anonymised to be true — WIM does not permit publishing non-anonymised camera counts.
Min: 0 — Requires: anonymised: true
Privacy processing mode applied to the data from this sensor. Mandatory for all sensor types; must always be explicitly set — no default. Camera and Wi-Fi probe sensors must use aggregate_only or anonymised — publishing individual-level data from these sensor types is prohibited under WIM policy and GDPR Article 25.
Explicit declaration of whether any personally identifiable information has been removed or was never present in this reading. Must be true for all camera, Wi-Fi probe, and Bluetooth sensor readings published via the WIM API. Consumers must reject readings where this is false and sensor_type implies individual tracking capability.
Maximum duration in seconds that this sensor reading may be stored by any consuming system. After this period, consumers must delete the reading from all caches and persistent stores. Set by the data controller in accordance with the facility's GDPR retention policy. The WIM platform enforces this value server-side — published readings are purged automatically.
Unit: seconds — Min: 60 — Max: 31,536,000 (1 year) — Typical: 86,400 (24h)
"retention_period": 86400sensory object — exampleA fully populated Sensor Data object from a LiDAR people-counter in a hospital corridor. Required fields always present; optional environmental and detection fields shown with representative values.