TapHome

OpenWeather

Packet Parser → HTTP
Dodane przez
Ostatnia aktualizacja: 04. 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)Geograficzna długość geograficzna lokalizacji stacji pogodowej w stopniach dziesiętnych (ustawiana podczas importu)
latitude (string)Geograficzna szerokość geograficzna lokalizacji stacji pogodowej w stopniach dziesiętnych (ustawiana podczas importu)
AppId (string)Klucz API OpenWeather (uzyskaj bezpłatny klucz na 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