← zurück zur Startseite

API-Doku

Messwerte und Verläufe lassen sich ohne Anmeldung als JSON abrufen.

Schnellstart

aktuell

/api/current.php

Letzte Messwerte beider Stationen.

status

/api/status.php

Anzahl der Stationen, Datenalter und Zeit der letzten Meldung.

verlauf

/api/history.php?hours=24

Verlaufspunkte als Zeitreihe. hours ist eine Dezimalzahl in Stunden.

spektrum

/api/spectrum.php?hours=24

Z-bewertete Terzbänder von 20 Hz bis 20 kHz.

live

/api/live.php

Neue DNMS-Detailmessungen als Server-Sent Events.

zugriff

GET · JSON

Ohne API-Schlüssel, bis zu 120 Anfragen pro Minute und IP-Adresse.

meta

generated_at

Jede Antwort enthält Zeitstempel, Zeitzone und kurze Feldhinweise im Block meta.

zeitraum

hours

Übliche Werte sind 0.5, 24, 168 und 720.

auswahlintervall

sample_interval

Optional in Minuten, zum Beispiel sample_interval=15. Je Station bleibt der letzte vorhandene Messpunkt des Zeitfensters erhalten.

schema

OpenAPI 3.1

OpenAPI mit Endpunkten, Parametern und Datenfeldern.

Frequenzspektrum

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.

Live-Daten

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.

Aktuelle Werte

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.

Status

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
    }
  ]
}

Verlauf

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.

Feldbedeutung

Luft

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.

Schall

noise, noise_min, noise_max sind A-bewertet.

noise_z, noise_z_min, noise_z_max zeigen die Z-Bewertung.

Hinweise

Weiterverwendung

Felder können fehlen oder null sein. Bei Weiterverwendung bitte wetter381.de als Quelle nennen.

Kompatibilität

/api/latest.php dient älteren Clients. Für neue Integrationen sind /api/current.php und /api/status.php vorgesehen.