TapHome

OpenWeather

Packet Parser → HTTP
Dodane przez
Ostatnia aktualizacja: 03. 2026
OpenWeather

OpenWeather to dostawca danych pogodowych oferujący globalne informacje meteorologiczne poprzez REST API. Szablon TapHome łączy się z darmowym OpenWeather API v2.5 przez HTTPS i odczytuje aktualne warunki pogodowe, prognozę 3-godzinną i prognozę 24-godzinną dla skonfigurowanej lokalizacji.

Szablon wykonuje dwa wywołania API co 5 minut — jedno dla aktualnej pogody i jedno dla prognozy 5-dniowej/3-godzinnej. Udostępnia 18 urządzeń tylko do odczytu obejmujących temperaturę powietrza, temperaturę odczuwalną, wilgotność, ciśnienie atmosferyczne, widoczność, prędkość wiatru i warunki pogodowe. Wszystkie temperatury podawane są w stopniach Celsjusza (jednostki metryczne), a płatna subskrypcja nie jest wymagana.

Konfiguracja

Uzyskanie klucza API
  1. Zarejestruj darmowe konto na openweathermap.org — karta kredytowa nie jest wymagana
  2. Po rejestracji klucz API (APPID) zostanie wysłany w e-mailu potwierdzającym
  3. Klucz jest również dostępny na stronie konta w zakładce API key
  4. Nowe klucze aktywują się automatycznie, zazwyczaj w ciągu od 10 minut do 2 godzin

Darmowy plan pozwala na 60 wywołań na minutę i 1 000 000 wywołań miesięcznie. Szablon TapHome wykonuje około 576 wywołań dziennie (2 wywołania co 5 minut), co mieści się w darmowych limitach.

Parametry importu

Podczas importu szablonu w TapHome wymagane są trzy parametry:

ParametrOpisPrzykład
latitudeSzerokość geograficzna lokalizacji w stopniach dziesiętnych48.1778
longitudeDługość geograficzna lokalizacji w stopniach dziesiętnych17.1426
appidKlucz API OpenWeather z dashboardu kontaa1b2c3d4e5f6...

Aby znaleźć współrzędne lokalizacji, kliknij prawym przyciskiem myszy na Google Maps i wybierz współrzędne z menu kontekstowego.

Punkty końcowe API

Moduł łączy się z api.openweathermap.org przez HTTPS (port 443) i wywołuje dwa punkty końcowe w każdym cyklu:

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

Pierwsze żądanie zwraca aktualne warunki pogodowe. Drugie zwraca listę prognoz, gdzie list[0] to następny 3-godzinny slot, a list[8] to slot +24 godziny (8 x 3h = 24h).

Możliwości urządzeń

Szablon udostępnia 18 urządzeń tylko do odczytu, zorganizowanych w trzech grupach: aktualna pogoda (6 urządzeń), prognoza 3-godzinna (6 urządzeń) i prognoza 24-godzinna (6 urządzeń). Każda grupa zapewnia te same sześć pomiarów.

Temperatura i wilgotność
  • Current Air Temperature — aktualna temperatura w stopniach Celsjusza z wilgotnością jako wartością drugorzędną (API zwraca 0–100%, przeliczone na stosunek 0–1 dla TapHome)
  • Current Feels Like Temperature — temperatura odczuwalna uwzględniająca chłodzenie wiatrem i wilgotność. Funkcja wilgotności jest wyłączona (zwraca NaN) — używana jest tylko wartość temperatury
  • Forecast (+3h) Air Temperature — temperatura i wilgotność dla następnego 3-godzinnego slotu prognozy. Zawiera atrybut serwisowy Forecast Date pokazujący znacznik czasu punktu danych
  • Forecast (+3h) Feels Like Temperature — temperatura odczuwalna dla następnego 3-godzinnego slotu
  • Forecast (+24h) Air Temperature — temperatura i wilgotność dla slotu prognozy +24h. Zawiera atrybut serwisowy Forecast Date
  • Forecast (+24h) Feels Like Temperature — temperatura odczuwalna dla slotu +24h
Ciśnienie atmosferyczne i widoczność
  • Current Air Pressure — ciśnienie atmosferyczne w hPa
  • Current Visibility — dystans widoczności w metrach (maksymalnie 10 000 m)
  • Forecast (+3h) Air Pressure — ciśnienie atmosferyczne dla następnego 3-godzinnego slotu
  • Forecast (+3h) Visibility — widoczność dla prognozy 3-godzinnej
  • Forecast (+24h) Air Pressure — ciśnienie atmosferyczne dla slotu +24h
  • Forecast (+24h) Visibility — widoczność dla prognozy 24-godzinnej

Urządzenia Forecast (+3h) Visibility i Forecast (+24h) Visibility mają zamienione indeksy danych w obecnej wersji szablonu. Urządzenie +3h odczytuje z list[8] (pozycja 24h), a urządzenie +24h odczytuje z list[0] (pozycja 3h). Wartości są odwrócone do czasu poprawki w przyszłej aktualizacji szablonu.

Prędkość wiatru
  • Current Wind Speed — prędkość wiatru w m/s
  • Forecast (+3h) Wind Speed — prędkość wiatru dla następnego 3-godzinnego slotu
  • Forecast (+24h) Wind Speed — prędkość wiatru dla slotu +24h
Warunki pogodowe

Trzy urządzenia przełącznika wielowartościowego wyświetlają kategorię warunków pogodowych:

  • Current Weather — aktualne warunki pogodowe
  • Forecast (+3h) Weather — warunki pogodowe dla następnego 3-godzinnego slotu
  • Forecast (+24h) Weather — warunki pogodowe dla slotu +24h

Każde urządzenie pogodowe mapuje pole API weather[0].main na jedną z 7 kategorii:

Wartość przełącznikaEtykietaGrupy pogodowe API
0ClearClear
1CloudsClouds
2RainRain
3DrizzleDrizzle
4ThunderstormThunderstorm
5SnowSnow
6AtmosphereMist, Smoke, Haze, Dust, Fog, Sand, Ash, Squall, Tornado

Jeśli API zwróci nierozpoznaną grupę pogodową, przełącznik ustawia się domyślnie na 0 (Clear). Wartości przełącznika 7, 8 i 9 są zdefiniowane w konfiguracji szablonu, ale nie mają mapowania w logice skryptu — są to nieużywane elementy zastępcze.

Dodatkowe możliwości

API OpenWeather dostarcza również dane o kierunku wiatru, porywach wiatru, procentowym zachmurzeniu, objętości opadów deszczu i śniegu (1h) oraz godzinach wschodu/zachodu słońca. Wilgotność jest udostępniana jedynie jako wartość drugorzędna na czujnikach temperatury, nie jako samodzielne urządzenie. Te funkcje mogą zostać dodane w przyszłej aktualizacji szablonu.

Rozwiązywanie problemów

Wszystkie urządzenia pokazują NaN lub brak danych
  1. Sprawdź, czy TapHome Core ma dostęp do internetu — szablon wymaga wychodzącego połączenia HTTPS do api.openweathermap.org
  2. Zweryfikuj, czy klucz API jest prawidłowy — otwórz https://api.openweathermap.org/data/2.5/weather?lat=48.18&lon=17.14&appid=YOUR_KEY&units=metric w przeglądarce w celu testu
  3. Nowe klucze API mogą wymagać do 2 godzin na aktywację po rejestracji
  4. Potwierdź, że wartości szerokości i długości geograficznej są poprawnymi współrzędnymi dziesiętnymi (nie stopnie/minuty/sekundy)
Dane prognozy wydają się nieprawidłowe

API prognozy zwraca dane w 3-godzinnych interwałach. Urządzenia +3h odczytują pierwszy slot prognozy (list[0]), który jest następnym dostępnym 3-godzinnym blokiem — nie dokładnie 3 godziny od teraz. Podobnie urządzenia +24h odczytują list[8] (9. slot), co odpowiada w przybliżeniu 24 godzinom do przodu.

Zwróć uwagę na zamianę indeksów widoczności opisaną w ostrzeżeniu powyżej — jeśli wartości widoczności +3h i +24h wydają się zamienione, jest to znany błąd szablonu.

Literówka w nazwie urządzenia

Urządzenie nr 17 w szablonie nosi nazwę “Forecast (+24h)Weather” (brak spacji przed “Weather”). Jest to problem kosmetyczny w XML szablonu, który nie wpływa na funkcjonalność. Urządzenie jest wyświetlane poprawnie w tabeli urządzeń TapHome z wykorzystaniem wzbogaconej nazwy.

Dostępne urządzenia

OpenWeather Moduł
Zmienne niestandardowe
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

Odczyt (moduł)
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
Aktualne ciśnienie atmosferyczne Zmienna Tylko do odczytu
numeric Jednostka: hPa json_path

Aktualne ciśnienie atmosferyczne

Odczyt
IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"main.pressure"))
Odczyt (moduł)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Aktualna temperatura powietrza Czujnik temperatury Tylko do odczytu

Aktualna temperatura i wilgotność — wilgotność dzielona przez 100 (API zwraca 0–100%, TapHome oczekuje stosunku 0–1)

numeric Jednostka: °C json_path

Aktualna temperatura powietrza

Odczyt wilgotności
IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"main.humidity") / 100)
Odczyt (moduł)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Odczyt temperatury
IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"main.temp"))
Aktualna temperatura odczuwalna Czujnik temperatury Tylko do odczytu

Temperatura odczuwalna uwzględniająca chłód wiatru i wilgotność — funkcja wilgotności wyłączona (zwraca NaN)

numeric Jednostka: °C json_path

Aktualna temperatura odczuwalna

Odczyt wilgotności
NaN
Odczyt (moduł)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Odczyt temperatury
IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"main.feels_like"))
Aktualna widoczność Zmienna Tylko do odczytu

Odległość widoczności w metrach (maksymalnie 10 000 m)

numeric Jednostka: m json_path

Aktualna widoczność

Odczyt
IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"visibility"))
Odczyt (moduł)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Aktualna pogoda Przełącznik wielowartościowy Tylko do odczytu

Stan pogody jako przełącznik wielowartościowy — bezchmurnie, pochmurnie, deszcz, mżawka, burza, śnieg, atmosfera

string multi_value_switch
Wartości / Stany: Clear · Clouds · Rain · Drizzle · Thunderstorm · Snow · Atmosphere

Aktualna pogoda

Odczyt stanu przełącznika
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);
Odczyt (moduł)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Aktualna prędkość wiatru Zmienna Tylko do odczytu
numeric Jednostka: m/s json_path

Aktualna prędkość wiatru

Odczyt
IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"wind.speed"))
Odczyt (moduł)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Prognoza (+3h) Ciśnienie atmosferyczne Zmienna Tylko do odczytu
numeric Jednostka: hPa json_path

Prognoza (+3h) Ciśnienie atmosferyczne

Odczyt
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].main.pressure"))
Odczyt (moduł)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Prognoza (+3h) Temperatura powietrza Czujnik temperatury Tylko do odczytu

Temperatura i wilgotność dla następnego 3-godzinnego slotu prognozy — zawiera atrybut serwisowy Data prognozy

numeric Jednostka: °C json_path
Atrybuty serwisowe
Data prognozyZnacznik czasu punktu danych prognozy (dt_txt z odpowiedzi API)

Prognoza (+3h) Temperatura powietrza

Odczyt wilgotności
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].main.humidity") / 100)
Odczyt (moduł)
IF(ISNULL(Daily) | Daily = "error", ADDERROR("Failed to read data "));
Odczyt temperatury
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].main.temp"))
Atrybuty serwisowe
Forecast Date
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].dt_txt"))
Prognoza (+3h) Temperatura odczuwalna Czujnik temperatury Tylko do odczytu

Temperatura odczuwalna dla następnego 3-godzinnego slotu prognozy — funkcja wilgotności wyłączona (zwraca NaN)

numeric Jednostka: °C json_path

Prognoza (+3h) Temperatura odczuwalna

Odczyt wilgotności
NaN
Odczyt (moduł)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Odczyt temperatury
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].main.feels_like"))
Prognoza (+3h) Widoczność Zmienna Tylko do odczytu

Znany problem: czyta z list[8] zamiast list[0] — wartości widoczności zamienione z Prognoza (+24h)

numeric Jednostka: m json_path

Prognoza (+3h) Widoczność

Odczyt
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].visibility"))
Odczyt (moduł)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Prognoza (+3h) Pogoda Przełącznik wielowartościowy Tylko do odczytu

Stan pogody dla następnego 3-godzinnego slotu prognozy — to samo 7-kategoriowe mapowanie co Aktualna pogoda

string multi_value_switch
Wartości / Stany: Clear · Clouds · Rain · Drizzle · Thunderstorm · Snow · Atmosphere

Prognoza (+3h) Pogoda

Odczyt stanu przełącznika
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);
Odczyt (moduł)
IF(ISNULL(Daily) | Daily = "error", ADDERROR("Failed to read data "));
Prognoza (+3h) Prędkość wiatru Zmienna Tylko do odczytu
numeric Jednostka: m/s json_path

Prognoza (+3h) Prędkość wiatru

Odczyt
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].wind.speed"))
Odczyt (moduł)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Prognoza (+24h) Ciśnienie atmosferyczne Zmienna Tylko do odczytu
numeric Jednostka: hPa json_path

Prognoza (+24h) Ciśnienie atmosferyczne

Odczyt
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].main.pressure"))
Odczyt (moduł)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Prognoza (+24h) Temperatura powietrza Czujnik temperatury Tylko do odczytu

Temperatura i wilgotność dla slotu prognozy +24h — zawiera atrybut serwisowy Data prognozy

numeric Jednostka: °C json_path
Atrybuty serwisowe
Data prognozyZnacznik czasu punktu danych prognozy (dt_txt z odpowiedzi API)

Prognoza (+24h) Temperatura powietrza

Odczyt wilgotności
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].main.humidity") / 100)
Odczyt (moduł)
IF(ISNULL(Daily) | Daily = "error", ADDERROR("Failed to read data "));
Odczyt temperatury
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].main.temp"))
Atrybuty serwisowe
Forecast Date
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].dt_txt"))
Prognoza (+24h) Temperatura odczuwalna Czujnik temperatury Tylko do odczytu

Temperatura odczuwalna dla slotu prognozy +24h — funkcja wilgotności wyłączona (zwraca NaN)

numeric Jednostka: °C json_path

Prognoza (+24h) Temperatura odczuwalna

Odczyt wilgotności
NaN
Odczyt (moduł)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Odczyt temperatury
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].main.feels_like"))
Prognoza (+24h) Widoczność Zmienna Tylko do odczytu

Znany problem: czyta z list[0] zamiast list[8] — wartości widoczności zamienione z Prognoza (+3h)

numeric Jednostka: m json_path

Prognoza (+24h) Widoczność

Odczyt
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].visibility"))
Odczyt (moduł)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Prognoza (+24h) Prędkość wiatru Zmienna Tylko do odczytu
numeric Jednostka: m/s json_path

Prognoza (+24h) Prędkość wiatru

Odczyt
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].wind.speed"))
Prognoza (+24h) Pogoda Przełącznik wielowartościowy Tylko do odczytu

Stan pogody dla slotu prognozy +24h — to samo 7-kategoriowe mapowanie co Aktualna pogoda

string multi_value_switch
Wartości / Stany: Clear · Clouds · Rain · Drizzle · Thunderstorm · Snow · Atmosphere

Prognoza (+24h) Pogoda

Odczyt stanu przełącznika
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);
Połączenie: Packet Parser → HTTP
Możliwe ulepszenia (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

Źródła