/api/current.php
Letzte Messwerte beider Stationen.
Messwerte und Verläufe lassen sich ohne Anmeldung als JSON abrufen.
/api/current.phpLetzte Messwerte beider Stationen.
/api/status.phpAnzahl der Stationen, Datenalter und Zeit der letzten Meldung.
/api/history.php?hours=24Verlaufspunkte als Zeitreihe. hours ist eine Dezimalzahl in Stunden.
/api/spectrum.php?hours=24Z-bewertete Terzbänder von 20 Hz bis 20 kHz.
/api/live.phpNeue DNMS-Detailmessungen als Server-Sent Events.
Ohne API-Schlüssel, bis zu 120 Anfragen pro Minute und IP-Adresse.
generated_atJede Antwort enthält Zeitstempel, Zeitzone und kurze Feldhinweise im Block meta.
hoursÜbliche Werte sind 0.5, 24, 168 und 720.
sample_intervalOptional in Minuten, zum Beispiel sample_interval=15. Je Station bleibt der letzte vorhandene Messpunkt des Zeitfensters erhalten.
OpenAPI mit Endpunkten, Parametern und Datenfeldern.
https://wetter381.de/api/spectrum.php?hours=24
Jeder Punkt enthält die 31 Z-bewerteten Terzbänder. Die Schlüssel in spectrum_z sind die Mittenfrequenzen in Hertz.
{
"ok": true,
"hours": 24,
"sample_interval_minutes": null,
"selection_method": "raw_points_up_to_limit",
"maximum_points": 1000,
"meta": {
"weighting": "Z",
"unit": "dB",
"frequencies_hz": [20, 25, 31.5, 40, 50, 63, 80, 100]
},
"points": [
{
"time": "2026-08-20T15:20:37+02:00",
"interval": "primary",
"spectrum_z": {
"20": 33.65,
"25": 36.11,
"31.5": 35.57,
"40": 32.35
}
}
]
}
interval unterscheidet das reguläre Messintervall (primary) vom kurzen, ereignisgesteuerten Detailintervall (detail).
sample_interval arbeitet wie beim übrigen Verlauf: Pro Zeitfenster bleibt der letzte vorhandene Punkt erhalten, ohne Mittelwertbildung. Der Endpunkt liefert höchstens 1.000 Punkte.
https://wetter381.de/api/live.php?once=1
/api/live.php liefert etwa alle fünf Sekunden ein Ereignis vom Typ spectrum. Enthalten sind LAeq, LAmax, LZeq, LZmax und die 31 Z-bewerteten Terzbänder. Die Verbindung wird regelmäßig erneuert.
const stream = new EventSource('https://wetter381.de/api/live.php');
stream.addEventListener('spectrum', event => {
const measurement = JSON.parse(event.data);
console.log(measurement.time, measurement.summary.noise_z);
});
Für einen einzelnen Datensatz genügt /api/live.php?once=1.
https://wetter381.de/api/current.php
Beispielantwort, gekürzt:
{
"ok": true,
"updated_at": "2026-06-22T12:02:52+02:00",
"station": {
"name": "wetter381.de",
"area": "Heidberg, Braunschweig"
},
"meta": {
"generated_at": "2026-06-22T12:02:52+02:00",
"license": "Private Sensordaten; Quellenangabe wetter381.de erbeten.",
"timezone": "Europe/Berlin",
"pressure_reduction_elevation_m": 105,
"note": "Private Messstationen im Heidberg in Braunschweig. Die Werte sind keine amtlichen Messdaten.",
"fields": {
"pm25": "Feinstaub PM2.5 in µg/m³",
"pressure": "Stationsdruck in hPa, nicht auf Meereshöhe umgerechnet",
"pressure_sea_level": "Auf Meereshöhe reduzierter Luftdruck in hPa",
"noise": "LAeq in dB"
},
"data_age_seconds": 97
},
"sensors": [
{
"sensor_key": "dnms",
"sensor_name": "Schallpegel",
"kind": "noise",
"received_at": "2026-06-22T12:01:15+02:00",
"summary": {
"noise": 35.5,
"noise_min": 34.41,
"noise_max": 36.43,
"noise_z": 45.96
}
}
]
}
Nicht jede Station liefert jedes Feld. Die API verwendet einheitliche
Feldnamen wie pm25, pm10, temperature,
pressure, noise oder noise_z.
https://wetter381.de/api/status.php
Beispielantwort, gekürzt:
{
"ok": true,
"station": {
"name": "wetter381.de",
"area": "Heidberg, Braunschweig"
},
"meta": {
"generated_at": "2026-06-22T12:02:52+02:00",
"license": "Private Sensordaten; Quellenangabe wetter381.de erbeten.",
"timezone": "Europe/Berlin",
"sensor_count": 2,
"data_age_seconds": 97
},
"sensors": [
{
"sensor_key": "dnms",
"sensor_name": "Schallpegel",
"kind": "noise",
"received_at": "2026-06-22T12:01:15+02:00",
"data_age_seconds": 97
}
]
}
https://wetter381.de/api/history.php?hours=24
Beispielantwort, gekürzt:
{
"ok": true,
"hours": 24,
"sample_interval_minutes": 15,
"bucket_minutes": 15,
"selection_method": "last_point_per_sensor_interval",
"maximum_points": 2000,
"station": {
"name": "wetter381.de",
"area": "Heidberg, Braunschweig"
},
"meta": {
"generated_at": "2026-06-22T12:02:52+02:00",
"license": "Private Sensordaten; Quellenangabe wetter381.de erbeten.",
"timezone": "Europe/Berlin",
"data_age_seconds": 97
},
"points": [
{
"time": "2026-06-22T12:01:15+02:00",
"sensor_key": "dnms",
"sensor_name": "Schallpegel",
"kind": "noise",
"summary": {
"noise": 35.5,
"noise_min": 34.41,
"noise_max": 36.43
}
}
]
}
hours kann auch kurze Fenster wie 0.5 oder längere Zeiträume wie
168 oder 720 enthalten. sample_interval wählt je Station
den letzten vorhandenen Messpunkt eines Zeitfensters aus. Es werden keine Mittelwerte
berechnet. Antworten enthalten höchstens 2.000 gleichmäßig ausgewählte Punkte.
bucket bleibt als veralteter Alias erhalten.
pm25 und pm10 sind Feinstaubwerte in µg/m³.
temperature ist in °C. pressure enthält den Stationsdruck in hPa.
pressure_sea_level wird mit Druck, Temperatur und 105 Metern Sensorhöhe auf Meereshöhe reduziert. Vorhandene Feuchtewerte fließen in die Berechnung ein.
noise, noise_min, noise_max sind A-bewertet.
noise_z, noise_z_min, noise_z_max zeigen die Z-Bewertung.
Die Daten sind private Messwerte aus dem Heidberg, keine amtliche Messung. Hardware, Aufstellung und Messgrenzen
Felder können fehlen oder null sein. Bei Weiterverwendung bitte wetter381.de als Quelle nennen.
/api/latest.php dient älteren Clients. Für neue Integrationen sind /api/current.php und /api/status.php vorgesehen.