TapHome

OpenWeather

Packet Parser → HTTP
Eingereicht von
Zuletzt aktualisiert: 03. 2026
OpenWeather

OpenWeather ist ein Wetterdatenanbieter, der globale Wetterinformationen über eine REST API bereitstellt. Die TapHome-Vorlage verbindet sich mit der kostenlosen OpenWeather API v2.5 über HTTPS und liest aktuelle Wetterbedingungen, eine 3-Stunden-Vorhersage und eine 24-Stunden-Vorhersage für einen konfigurierten Standort.

Die Vorlage führt alle 5 Minuten zwei API-Aufrufe durch — einen für das aktuelle Wetter und einen für die 5-Tage-/3-Stunden-Vorhersage. Sie stellt 18 schreibgeschützte Geräte bereit, die Lufttemperatur, gefühlte Temperatur, Luftfeuchtigkeit, atmosphärischen Druck, Sichtweite, Windgeschwindigkeit und Wetterbedingungen abdecken. Alle Temperaturen sind in Celsius (metrische Einheiten) und ein kostenpflichtiges Abonnement ist nicht erforderlich.

Konfiguration

API-Schlüssel erhalten
  1. Registrieren Sie ein kostenloses Konto auf openweathermap.org — keine Kreditkarte erforderlich
  2. Nach der Registrierung wird der API-Schlüssel (APPID) per Bestätigungs-E-Mail zugesandt
  3. Der Schlüssel ist auch auf der Kontoseite unter dem Tab API key verfügbar
  4. Neue Schlüssel werden automatisch aktiviert, typischerweise innerhalb von 10 Minuten bis 2 Stunden

Die kostenlose Stufe erlaubt 60 Aufrufe pro Minute und 1.000.000 Aufrufe pro Monat. Die TapHome-Vorlage führt etwa 576 Aufrufe pro Tag durch (2 Aufrufe alle 5 Minuten), was innerhalb der kostenlosen Limits liegt.

Import-Parameter

Beim Import der Vorlage in TapHome sind drei Parameter erforderlich:

ParameterBeschreibungBeispiel
latitudeBreitengrad des Standorts in Dezimalgrad48.1778
longitudeLängengrad des Standorts in Dezimalgrad17.1426
appidOpenWeather API-Schlüssel vom Konto-Dashboarda1b2c3d4e5f6...

Um die Koordinaten eines Standorts zu ermitteln, klicken Sie mit der rechten Maustaste auf Google Maps und wählen Sie die Koordinaten aus dem Kontextmenü.

API-Endpunkte

Das Modul verbindet sich mit api.openweathermap.org über HTTPS (Port 443) und ruft pro Abfragezyklus zwei Endpunkte auf:

1
2
GET /data/2.5/weather?units=metric&lat={latitude}&lon={longitude}&appid={AppId}
GET /data/2.5/forecast?units=metric&lat={latitude}&lon={longitude}&appid={AppId}&cnt=9

Die erste Anfrage liefert aktuelle Wetterbedingungen. Die zweite liefert eine Vorhersageliste, wobei list[0] der nächste 3-Stunden-Slot und list[8] der +24-Stunden-Slot ist (8 x 3h = 24h).

Gerätefunktionen

Die Vorlage stellt 18 schreibgeschützte Geräte bereit, die in drei Gruppen organisiert sind: aktuelles Wetter (6 Geräte), 3-Stunden-Vorhersage (6 Geräte) und 24-Stunden-Vorhersage (6 Geräte). Jede Gruppe bietet die gleichen sechs Messungen.

Temperatur und Luftfeuchtigkeit
  • Current Air Temperature — aktuelle Temperatur in Celsius mit Luftfeuchtigkeit als Sekundärwert (API liefert 0–100 %, umgerechnet auf ein Verhältnis von 0–1 für TapHome)
  • Current Feels Like Temperature — gefühlte Temperatur unter Berücksichtigung von Windchill und Luftfeuchtigkeit. Die Feuchtigkeitsfunktion ist deaktiviert (liefert NaN) — nur der Temperaturwert wird verwendet
  • Forecast (+3h) Air Temperature — Temperatur und Luftfeuchtigkeit für den nächsten 3-Stunden-Vorhersage-Slot. Enthält ein Serviceattribut Forecast Date mit dem Zeitstempel des Datenpunkts
  • Forecast (+3h) Feels Like Temperature — gefühlte Temperatur für den nächsten 3-Stunden-Slot
  • Forecast (+24h) Air Temperature — Temperatur und Luftfeuchtigkeit für den +24h-Vorhersage-Slot. Enthält ein Serviceattribut Forecast Date
  • Forecast (+24h) Feels Like Temperature — gefühlte Temperatur für den +24h-Slot
Atmosphärischer Druck und Sichtweite
  • Current Air Pressure — atmosphärischer Druck in hPa
  • Current Visibility — Sichtweite in Metern (maximal 10.000 m)
  • Forecast (+3h) Air Pressure — atmosphärischer Druck für den nächsten 3-Stunden-Slot
  • Forecast (+3h) Visibility — Sichtweite für die 3-Stunden-Vorhersage
  • Forecast (+24h) Air Pressure — atmosphärischer Druck für den +24h-Slot
  • Forecast (+24h) Visibility — Sichtweite für die 24-Stunden-Vorhersage

Die Geräte Forecast (+3h) Visibility und Forecast (+24h) Visibility haben in der aktuellen Vorlagenversion vertauschte Datenindizes. Das +3h-Gerät liest von list[8] (die 24h-Position) und das +24h-Gerät liest von list[0] (die 3h-Position). Die Werte sind vertauscht, bis dies in einem zukünftigen Vorlagen-Update korrigiert wird.

Windgeschwindigkeit
  • Current Wind Speed — Windgeschwindigkeit in m/s
  • Forecast (+3h) Wind Speed — Windgeschwindigkeit für den nächsten 3-Stunden-Slot
  • Forecast (+24h) Wind Speed — Windgeschwindigkeit für den +24h-Slot
Wetterbedingungen

Drei Mehrwert-Schalter-Geräte zeigen die Kategorie der Wetterbedingung an:

  • Current Weather — aktuelle Wetterbedingung
  • Forecast (+3h) Weather — Wetterbedingung für den nächsten 3-Stunden-Slot
  • Forecast (+24h) Weather — Wetterbedingung für den +24h-Slot

Jedes Wettergerät ordnet das API-Feld weather[0].main einer von 7 Kategorien zu:

SchalterwertBezeichnungAPI-Wettergruppen
0ClearClear
1CloudsClouds
2RainRain
3DrizzleDrizzle
4ThunderstormThunderstorm
5SnowSnow
6AtmosphereMist, Smoke, Haze, Dust, Fog, Sand, Ash, Squall, Tornado

Wenn die API eine nicht erkannte Wettergruppe zurückgibt, wird der Schalter auf 0 (Clear) gesetzt. Die Schalterwerte 7, 8 und 9 sind in der Vorlagenkonfiguration definiert, haben aber keine Zuordnung in der Skriptlogik — sie sind ungenutzte Platzhalter.

Weitere Funktionen

Die OpenWeather API bietet auch Windrichtung, Windböen, Bewölkungsgrad in Prozent, Regen- und Schneevolumen (1h) sowie Sonnenauf- und -untergangszeiten. Die Luftfeuchtigkeit wird nur als Sekundärwert an Temperatursensoren bereitgestellt, nicht als eigenständiges Gerät. Diese können in einem zukünftigen Vorlagen-Update hinzugefügt werden.

Fehlerbehebung

Alle Geräte zeigen NaN oder keine Daten
  1. Stellen Sie sicher, dass der TapHome Core Internetzugang hat — die Vorlage erfordert ausgehende HTTPS-Verbindungen zu api.openweathermap.org
  2. Überprüfen Sie, ob der API-Schlüssel gültig ist — öffnen Sie https://api.openweathermap.org/data/2.5/weather?lat=48.18&lon=17.14&appid=YOUR_KEY&units=metric im Browser zum Testen
  3. Neue API-Schlüssel können bis zu 2 Stunden nach der Registrierung zur Aktivierung benötigen
  4. Bestätigen Sie, dass die Breiten- und Längengrade korrekte Dezimalkoordinaten sind (nicht Grad/Minuten/Sekunden)
Vorhersagedaten scheinen falsch zu sein

Die Vorhersage-API liefert Daten in 3-Stunden-Intervallen. Die +3h-Geräte lesen den ersten Vorhersage-Slot (list[0]), der der nächste verfügbare 3-Stunden-Block ist — nicht exakt 3 Stunden ab jetzt. Ebenso lesen die +24h-Geräte list[8] (den 9. Slot), der etwa 24 Stunden voraus liegt.

Beachten Sie den oben beschriebenen vertauschten Sichtweite-Index — wenn die Sichtweitewerte von +3h und +24h vertauscht erscheinen, handelt es sich um den bekannten Vorlagenfehler.

Tippfehler im Gerätenamen

Gerät Nr. 17 in der Vorlage heißt “Forecast (+24h)Weather” (fehlende Leerstelle vor “Weather”). Dies ist ein kosmetisches Problem im Vorlagen-XML und beeinträchtigt die Funktionalität nicht. Das Gerät wird in der TapHome-Gerätetabelle korrekt mit seinem angereicherten Namen angezeigt.

Verfügbare Geräte

OpenWeather Modul
Benutzerdefinierte Variablen
longitude (string)Geographic longitude of the weather station location in decimal degrees (set during import)
latitude (string)Geographic latitude of the weather station location in decimal degrees (set during import)
AppId (string)OpenWeather API key (obtain free key at openweathermap.org/api)

OpenWeather

Lesen (Modul)
responseJson := "error";
Daily := "error";

VAR path := "data/2.5/weather?units=metric&lat=" + latitude + "&lon=" + longitude + "&appid=" + AppId;
VAR response := SENDHTTPREQUEST(path);

IF response.IsSuccess
    responseJson := response.Content;
ELSE
    VAR contentJson := response.Content;
    VAR errCode := response.StatusCode;
    VAR message := PARSEJSON(contentJson, "message");
    #ADDERROR("Failed to read data - (" + errCode + ") " + message);
END

path := "data/2.5/forecast?units=metric&lat=" + latitude + "&lon=" + longitude + "&appid=" + AppId + "&cnt=9";
response := SENDHTTPREQUEST(path);

IF response.IsSuccess
    Daily := response.Content;
ELSE
    contentJson := response.Content;
    errCode := response.StatusCode;
    message := PARSEJSON(contentJson, "message");
    #ADDERROR("Failed to read data - (" + errCode + ") " + message);
END
Aktueller Luftdruck Variable Nur lesen
numeric Einheit: hPa json_path

Aktueller Luftdruck

Lesen
IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"main.pressure"))
Lesen (Modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Aktuelle Lufttemperatur Temperatursensor Nur lesen

Aktuelle Temperatur und Luftfeuchtigkeit — Feuchtigkeit wird durch 100 geteilt (API liefert 0–100 %, TapHome erwartet 0–1 Verhältnis)

numeric Einheit: °C json_path

Aktuelle Lufttemperatur

Luftfeuchtigkeit lesen
IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"main.humidity") / 100)
Lesen (Modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Temperatur lesen
IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"main.temp"))
Aktuelle gefühlte Temperatur Temperatursensor Nur lesen

Gefühlte Temperatur unter Berücksichtigung von Windchill und Luftfeuchtigkeit — Feuchtigkeitsfunktion deaktiviert (gibt NaN zurück)

numeric Einheit: °C json_path

Aktuelle gefühlte Temperatur

Luftfeuchtigkeit lesen
NaN
Lesen (Modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Temperatur lesen
IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"main.feels_like"))
Aktuelle Sichtweite Variable Nur lesen

Sichtweite in Metern (maximal 10.000 m)

numeric Einheit: m json_path

Aktuelle Sichtweite

Lesen
IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"visibility"))
Lesen (Modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Aktuelles Wetter Mehrwertschalter Nur lesen

Wetterbedingung als Mehrwertschalter — klar, bewölkt, Regen, Nieselregen, Gewitter, Schnee, Atmosphäre

string multi_value_switch
Werte / Zustände: Clear · Clouds · Rain · Drizzle · Thunderstorm · Snow · Atmosphere

Aktuelles Wetter

Schaltzustand lesen
IF(ISNULL(responseJson) | responseJson = "error")
    return(NaN);
END

VAR weather := PARSEJSON(responseJson, "weather[0].main");
SWITCH(weather, "Clear", 0, "Clouds", 1, "Rain", 2, "Drizzle", 3, "Thunderstorm", 4, "Snow", 5, "Mist", 6, "Smoke", 6, "Haze", 6, "Dust", 6, "Fog", 6, "Sand", 6, "Ash", 6, "Squall", 6, "Tornado", 6, 0);
Lesen (Modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Aktuelle Windgeschwindigkeit Variable Nur lesen
numeric Einheit: m/s json_path

Aktuelle Windgeschwindigkeit

Lesen
IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"wind.speed"))
Lesen (Modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Vorhersage (+3h) Luftdruck Variable Nur lesen
numeric Einheit: hPa json_path

Vorhersage (+3h) Luftdruck

Lesen
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].main.pressure"))
Lesen (Modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Vorhersage (+3h) Lufttemperatur Temperatursensor Nur lesen

Temperatur und Luftfeuchtigkeit für den nächsten 3-Stunden-Vorhersageslot — enthält Serviceattribut Vorhersagedatum

numeric Einheit: °C json_path
Serviceattribute
VorhersagedatumZeitstempel des Vorhersagedatenpunkts (dt_txt aus API-Antwort)

Vorhersage (+3h) Lufttemperatur

Luftfeuchtigkeit lesen
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].main.humidity") / 100)
Lesen (Modul)
IF(ISNULL(Daily) | Daily = "error", ADDERROR("Failed to read data "));
Temperatur lesen
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].main.temp"))
Serviceattribute
Forecast Date
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].dt_txt"))
Vorhersage (+3h) Gefühlte Temperatur Temperatursensor Nur lesen

Gefühlte Temperatur für den nächsten 3-Stunden-Vorhersageslot — Feuchtigkeitsfunktion deaktiviert (gibt NaN zurück)

numeric Einheit: °C json_path

Vorhersage (+3h) Gefühlte Temperatur

Luftfeuchtigkeit lesen
NaN
Lesen (Modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Temperatur lesen
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].main.feels_like"))
Vorhersage (+3h) Sichtweite Variable Nur lesen

Bekanntes Problem: liest von list[8] statt list[0] — Sichtweitenwerte mit Vorhersage (+24h) vertauscht

numeric Einheit: m json_path

Vorhersage (+3h) Sichtweite

Lesen
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].visibility"))
Lesen (Modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Vorhersage (+3h) Wetter Mehrwertschalter Nur lesen

Wetterbedingung für den nächsten 3-Stunden-Vorhersageslot — gleiche 7-Kategorien-Zuordnung wie Aktuelles Wetter

string multi_value_switch
Werte / Zustände: Clear · Clouds · Rain · Drizzle · Thunderstorm · Snow · Atmosphere

Vorhersage (+3h) Wetter

Schaltzustand lesen
IF(ISNULL(Daily) | Daily = "error")
    return(NaN);
END

VAR weather := PARSEJSON(Daily, "$.list[0].weather[0].main");
SWITCH(weather, "Clear", 0, "Clouds", 1, "Rain", 2, "Drizzle", 3, "Thunderstorm", 4, "Snow", 5, "Mist", 6, "Smoke", 6, "Haze", 6, "Dust", 6, "Fog", 6, "Sand", 6, "Ash", 6, "Squall", 6, "Tornado", 6, 0);
Lesen (Modul)
IF(ISNULL(Daily) | Daily = "error", ADDERROR("Failed to read data "));
Vorhersage (+3h) Windgeschwindigkeit Variable Nur lesen
numeric Einheit: m/s json_path

Vorhersage (+3h) Windgeschwindigkeit

Lesen
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].wind.speed"))
Lesen (Modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Vorhersage (+24h) Luftdruck Variable Nur lesen
numeric Einheit: hPa json_path

Vorhersage (+24h) Luftdruck

Lesen
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].main.pressure"))
Lesen (Modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Vorhersage (+24h) Lufttemperatur Temperatursensor Nur lesen

Temperatur und Luftfeuchtigkeit für den +24h-Vorhersageslot — enthält Serviceattribut Vorhersagedatum

numeric Einheit: °C json_path
Serviceattribute
VorhersagedatumZeitstempel des Vorhersagedatenpunkts (dt_txt aus API-Antwort)

Vorhersage (+24h) Lufttemperatur

Luftfeuchtigkeit lesen
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].main.humidity") / 100)
Lesen (Modul)
IF(ISNULL(Daily) | Daily = "error", ADDERROR("Failed to read data "));
Temperatur lesen
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].main.temp"))
Serviceattribute
Forecast Date
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].dt_txt"))
Vorhersage (+24h) Gefühlte Temperatur Temperatursensor Nur lesen

Gefühlte Temperatur für den +24h-Vorhersageslot — Feuchtigkeitsfunktion deaktiviert (gibt NaN zurück)

numeric Einheit: °C json_path

Vorhersage (+24h) Gefühlte Temperatur

Luftfeuchtigkeit lesen
NaN
Lesen (Modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Temperatur lesen
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].main.feels_like"))
Vorhersage (+24h) Sichtweite Variable Nur lesen

Bekanntes Problem: liest von list[0] statt list[8] — Sichtweitenwerte mit Vorhersage (+3h) vertauscht

numeric Einheit: m json_path

Vorhersage (+24h) Sichtweite

Lesen
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].visibility"))
Lesen (Modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Vorhersage (+24h) Windgeschwindigkeit Variable Nur lesen
numeric Einheit: m/s json_path

Vorhersage (+24h) Windgeschwindigkeit

Lesen
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].wind.speed"))
Vorhersage (+24h) Wetter Mehrwertschalter Nur lesen

Wetterbedingung für den +24h-Vorhersageslot — gleiche 7-Kategorien-Zuordnung wie Aktuelles Wetter

string multi_value_switch
Werte / Zustände: Clear · Clouds · Rain · Drizzle · Thunderstorm · Snow · Atmosphere

Vorhersage (+24h) Wetter

Schaltzustand lesen
IF(ISNULL(Daily) | Daily = "error")
    return(NaN);
END

VAR weather := PARSEJSON(Daily, "$.list[8].weather[0].main");
SWITCH(weather, "Clear", 0, "Clouds", 1, "Rain", 2, "Drizzle", 3, "Thunderstorm", 4, "Snow", 5, "Mist", 6, "Smoke", 6, "Haze", 6, "Dust", 6, "Fog", 6, "Sand", 6, "Ash", 6, "Squall", 6, "Tornado", 6, 0);
Verbindung: Packet Parser → HTTP
Mögliche Verbesserungen (7)
  • Current Humidity (standalone) — Humidity is only exposed as secondary value on temperature sensors, not as standalone device
  • Wind Direction — Wind direction in degrees available in API but not implemented in template
  • Wind Gust — Wind gust speed available in API but not implemented in template
  • Cloudiness — Cloudiness percentage available in API but not implemented
  • Rain Volume (1h) — Rain volume for last 1 hour in mm, available in API
  • Snow Volume (1h) — Snow volume for last 1 hour in mm, available in API
  • Sunrise / Sunset — Unix timestamps for sunrise and sunset available in API

Quellen