Bridge Monitoring Challenge · DB InfraGO & Autobahn GmbH · DB mindbox
Bw 03 · km 1.572 · Köln-Nippes · line 2620 (S-Bahn Köln–Neuss). Continuous prestressed concrete girder, 3 spans (25.55 + 38.72 + 29.50 m), plan curve r = 500 m. Continuous measurement: dynamic — 3× dilatometer (125 Hz) + 2× accelerometer (500 Hz); static — 2× station (inclination, temperatures, 2× dilatometer; every 10 min). All times are local (Cologne, ).
Left — traffic light: each check compares a measured value from the last 24 h against a warning and an alarm threshold and the overall state is the worst individual check; thresholds are in the Settings tab and the defaults are showcase values, not calibrated structural limits. Click any check to open the data behind it — the charts jump to the same 24 h window. Right: the key figures of the installation and of the last 24 h.
Axes 10–40 per the as-built drawings (axis 10 = Köln side, axis 40 = Neuss side; fixed bearing at axis 30, Maurer DB 130 / DB 80 expansion joints, two bearings per axis); all instrumentation sits on axes 30 and 40 and the span between them. Click a marker to jump to the device charts; “edit positions” lets you fine-tune marker placement.
Longitudinal section
Plan view (per the as-built Draufsicht; travelling towards Neuss — left bearings at the top, right bearings at the bottom)
Observations from the nearest station of the German weather service (DWD), served through the open Bright Sky API. Weather is the main driver of everything the static measurement sees, so the air temperature is plotted together with the temperature of the structure — the concrete follows the air with a delay and a damped amplitude, and that difference is what makes the bridge bend.
How much the bridge is actually being worked by the traffic, built from the deflection uz estimated for every detected crossing (SRIMS, see the Dynamic measurement tab) — the deflection is the structural response to the train, so its distribution is the load spectrum the structure sees.
The traffic light above answers “is anything over a limit right now?”; this section answers “does the bridge still behave the way it used to, given the same temperature and the same traffic?”. Every monitored quantity is compared against its own expected relationship to the others (thermal expansion model, typical traffic response), and only the deviation from that expectation is plotted — so weather and normal traffic are removed, and what remains is a change of the structure or of a sensor.
When each device was recording. Drag to zoom, double-click to reset — applies to all charts (they are synchronised). Chart height can be adjusted by dragging its bottom-right corner.
Three units, 2 channels each, 125 Hz. Overview shows a 1 s min–max envelope; zooming below ~10 minutes automatically loads the raw 125 Hz signal. Conversion to mm: displacement = scale × (V − zero). Default scale comes from the on-site step calibration of 19 Aug 2026 (assuming a 40 mm step — to be confirmed); zero can be set from a chart window (Analyse button), empty zero = display relative to the first sample. Signals are despiked with a 5-sample median filter (removes periodic electrical spikes of the ADC — see the noise panel in Dynamic analysis below); original CSV samples are unchanged. Calibration is in the Settings tab.
Two units, 500 Hz, burst recording (files of ~60 s). The first chart shows the peak-to-peak amplitude in every second; dots mark detected events. Zooming below ~10 minutes loads the raw 500 Hz signal. The FFT button computes the spectrum and natural frequencies from the current window.
Automatic detection from the dynamic measurements. Vibration events: contiguous seconds with peak-to-peak acceleration ≥ 15 mg. Displacement events: short-term deviation of a dilatometer channel from its rolling baseline (≥ 6× noise level, min. ~0.25 mm). Detection starts after the installation was completed (19 Aug 2026, 20:00 local). Events within 30 s of each other share a crossing group number. Click a row to zoom the charts above to that event (raw signal loads automatically); tick rows and press Compare to overlay their responses below.
Applies the SRIMS methodology (STATOTEST + CTU Prague, project TM05000045): mid-span deflection is estimated from the sum of the longitudinal bearing displacements at both ends of the span as uz = k · ux · l / h; train load then follows linearly from deflection after calibration on known trains. Crossings are detected on the raw 125 Hz dilatometer signals (Savitzky–Golay smoothing, threshold ≥ max(6× noise, 0.8 mV ≈ 0.03 mm)) and require a coincident response on at least two units (axes 30 and 40 within 3 s) plus a confirmation: either coincident vibration on the accelerometers (≥ 15 mg — the accelerometer acts as the train trigger, as in the SRIMS concept) or, when no accelerometer was recording, a position outside the :00/:30 phase of the periodic electronics bumps. For the instrumented span 30–40: ux = |axis 30 longitudinal (DIL 3 ch2)| + |axis 40 longitudinal (mean of DIL 4/5 ch2)|. Caveat: the methodology was validated on simply supported spans — this bridge is a continuous curved girder. The default k = 0.36 is an ESTIMATED value (showcase project): computed from a continuous three-span line model of this bridge (constant EI, lever arm h/2), giving k ≈ 0.35–0.38 depending on the load position (the simple-span table value would be 0.32); it has not been calibrated by an FEM model or a load test yet, so the deflections below are indicative. Values prefixed ≥ are partial: DIL 3 (axis 30) was not recording during the crossing, so ux contains only the axis 40 contribution (lower bound) — for full SRIMS evaluation the three dilatometer units should record simultaneously (align their recording schedules in the firmware). Click a row to zoom the charts above to the crossing. The parameters k, l, h and the weight calibration are in the Settings tab. The methodology is being developed in cooperation with the Fraunhofer Institute for Integrated Circuits IIS.
Response trends: each dot is the peak response of one detected event — a stable response to comparable trains indicates unchanged structural behaviour, a long-term increase may indicate a developing problem (bearing friction, stiffness change). Event comparison: select events in the table above and press Compare — their responses overlay here on a common time axis. Spectra and noise diagnostics below. (The FFT tool for natural frequencies is on the axis charts above.)
Two stations, DEV_1596 (axis 30) and DEV_1597 (axis 40), period ~10 min: X/Y inclination (ADXL355), two dilatometers SOP-KPM-R-50 on a 24-bit ADC (longitudinal displacement of the left/right bearing), internal temperature (TMP112) and an external probe (DS18B20). DEV_1596 additionally provides a liquid inclinometer (ready-made ° values, data type Unit) and a hygrometer. Calibration and the spike filter are in the Settings tab.
The dominant driver of static quantities is temperature. The scatter charts show each measurement against the structure temperature (external probe) with a fitted linear thermal response — a stable slope and a narrow band indicate normal behaviour. The residual chart removes the fitted thermal component: what remains should stay near zero; a persistent drift or a step indicates a non-thermal change (bearing restraint, settlement, sensor problem).
Public DB timetable for station Köln Geldernstr./Parkgürtel — the bridge sits between Köln-Nippes and this station (~500 m south of it), so every train serving the station crosses the bridge (single-track line 2620, S6 and S11 in both directions; S6 short-turns terminating at Nippes never reach the bridge and are automatically excluded). Sources: IRIS planned timetable + live departure board with real delays; the logger polls every 5 minutes. Public sources only expose the schedule a few hours back, so the live log only grows from the moment it was started (28 Aug 2026); the days before that — and any hour the logger missed — are reconstructed from the published timetable (GTFS of DELFI/gtfs.de) and marked timetable in the log, because the S-Bahn runs a clockface schedule that repeats week to week. The reconstruction was checked against a fully logged day and reproduced it exactly: same number of trains and the same split by line and direction. Reconstructed entries carry no delay, so a train that ran late will be matched to a crossing only within the wider ±6 min tolerance. Freight and empty-stock runs are not in the public passenger timetable: a measured crossing without a matched train (typically at night) is most likely one of those. Each train is paired with the dynamic measurement (detected crossing → estimated deflection uz, vibration) and with the static measurement (structure temperature and bearing displacement from the static stations at the time of passage). Click a row in the train log to expand the train details — typical rolling stock with a photo, estimated weight and the paired measurements; from there you can jump to the measured crossing in the charts.
Everything that controls how the measurements are evaluated. The values are
shared — pressing Save stores them on the server (config.json) and everyone opening
the dashboard gets them. Changes take effect immediately in the charts even before saving.
Unsaved changes — the new values are already applied to the charts, but they live only in this browser until you press Save in the panel you edited.
Saved on the server ✓ — everyone opening the dashboard from now on gets these values.