TapHome

OpenWeather

Packet Parser → HTTP
Autor
Posljednje ažuriranje: 03. 2026
OpenWeather

OpenWeather je pružatelj vremenskih podataka koji preko REST API-ja nudi vremenske informacije za cijeli svijet. Predložak TapHome spaja se preko HTTPS-a na besplatni API OpenWeather v2.5 i za postavljenu lokaciju očitava trenutačne vremenske uvjete, prognozu za 3 sata i prognozu za 24 sata.

Predložak svakih 5 minuta šalje dva poziva API-ju: jedan za trenutačno vrijeme i jedan za prognozu za 5 dana u koracima od 3 sata. Daje 18 uređaja samo za čitanje: temperaturu zraka, osjetnu temperaturu, vlažnost, atmosferski tlak, vidljivost, brzinu vjetra i vremenske uvjete. Sve temperature su u Celzijevim stupnjevima (metričke jedinice), a plaćena pretplata nije potrebna.

Konfiguracija

Dobivanje API ključa
  1. Registrirajte besplatni korisnički račun na openweathermap.org — kreditna kartica nije potrebna
  2. Nakon registracije API ključ (APPID) stiže u e-poruci s potvrdom
  3. Ključ je dostupan i na stranici korisničkog računa, na kartici API key
  4. Novi ključevi aktiviraju se automatski, obično u roku od 10 minuta do 2 sata

Besplatni paket dopušta 60 poziva u minuti i 1 000 000 poziva mjesečno. Predložak TapHome šalje približno 576 poziva dnevno (2 poziva svakih 5 minuta), što je znatno ispod ograničenja besplatnog paketa.

Parametri uvoza

Pri uvozu predloška u TapHome potrebna su tri parametra:

ParametarOpisPrimjer
latitudeZemljopisna širina lokacije u decimalnim stupnjevima48.1778
longitudeZemljopisna dužina lokacije u decimalnim stupnjevima17.1426
appidAPI ključ OpenWeather iz korisničkog računa (dashboard)a1b2c3d4e5f6...

Koordinate lokacije pronaći ćete tako da u Google Maps desnom tipkom miša kliknete na mjesto i u kontekstnom izborniku odaberete koordinate.

Krajnje točke API-ja

Modul se spaja na api.openweathermap.org preko HTTPS-a (port 443) i u svakom ciklusu očitavanja poziva dvije krajnje točke:

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

Prvi zahtjev vraća trenutačne vremenske uvjete. Drugi vraća popis prognoza u kojem je list[0] sljedeći termin od 3 sata, a list[8] termin za +24 sata (8 x 3 h = 24 h).

Mogućnosti uređaja

Predložak daje 18 uređaja samo za čitanje podijeljenih u tri skupine: trenutačno vrijeme (6 uređaja), prognoza za 3 sata (6 uređaja) i prognoza za 24 sata (6 uređaja). Svaka skupina daje istih šest mjerenja.

Temperatura i vlažnost
  • Trenutačna temperatura zraka — trenutačna temperatura u Celzijevim stupnjevima s vlažnošću kao drugom vrijednošću (API vraća 0–100 %, a za TapHome se pretvara u omjer 0–1)
  • Trenutačna osjetna temperatura — prividna temperatura koja uzima u obzir hlađenje vjetrom i vlažnost. Mjerenje vlažnosti je isključeno (vraća NaN), koristi se samo vrijednost temperature
  • Prognoza (+3 h) temperature zraka — temperatura i vlažnost za sljedeći termin prognoze od 3 sata. Uključuje servisni atribut Datum prognoze s vremenskom oznakom podatka
  • Prognoza (+3 h) osjetne temperature — osjetna temperatura za sljedeći termin od 3 sata
  • Prognoza (+24 h) temperature zraka — temperatura i vlažnost za termin prognoze +24 h. Uključuje servisni atribut Datum prognoze
  • Prognoza (+24 h) osjetne temperature — osjetna temperatura za termin +24 h
Atmosferski tlak i vidljivost
  • Trenutačni tlak zraka — atmosferski tlak u hPa
  • Trenutačna vidljivost — vidljivost u metrima (najviše 10 000 m)
  • Prognoza (+3 h) tlaka zraka — atmosferski tlak za sljedeći termin od 3 sata
  • Prognoza (+3 h) vidljivosti — vidljivost za prognozu od 3 sata
  • Prognoza (+24 h) tlaka zraka — atmosferski tlak za termin +24 h
  • Prognoza (+24 h) vidljivosti — vidljivost za prognozu od 24 sata

Uređaji Prognoza (+3 h) vidljivosti i Prognoza (+24 h) vidljivosti u trenutačnoj verziji predloška imaju zamijenjene indekse podataka. Uređaj +3 h čita iz list[8] (položaj za 24 h), a uređaj +24 h čita iz list[0] (položaj za 3 h). Vrijednosti su zamijenjene dok se to ne ispravi u nekom budućem ažuriranju predloška.

Brzina vjetra
  • Trenutačna brzina vjetra — brzina vjetra u m/s
  • Prognoza (+3 h) brzine vjetra — brzina vjetra za sljedeći termin od 3 sata
  • Prognoza (+24 h) brzine vjetra — brzina vjetra za termin +24 h
Vremenski uvjeti

Tri uređaja s prekidačem s više vrijednosti prikazuju kategoriju vremenskih uvjeta:

  • Trenutačno vrijeme — trenutačni vremenski uvjeti
  • Prognoza (+3 h) vremena — vremenski uvjeti za sljedeći termin od 3 sata
  • Prognoza (+24 h) vremena — vremenski uvjeti za termin +24 h

Svaki od tih uređaja preslikava polje API-ja weather[0].main u jednu od 7 kategorija:

Vrijednost prekidačaOznakaSkupine vremenskih uvjeta u API-ju
0VedroClear
1OblačnoClouds
2KišaRain
3RosuljaDrizzle
4GrmljavinaThunderstorm
5SnijegSnow
6Atmosferske pojaveMist, Smoke, Haze, Dust, Fog, Sand, Ash, Squall, Tornado

Ako API vrati nepoznatu skupinu vremenskih uvjeta, prekidač se postavlja na 0 (Vedro). Vrijednosti prekidača 7, 8 i 9 definirane su u konfiguraciji predloška, ali u logici skripte nemaju preslikavanje — to su neiskorištena rezervirana mjesta.

Dodatne mogućnosti

API OpenWeather daje i smjer vjetra, udare vjetra, postotak naoblake, količinu kiše i snijega (1 h) te vrijeme izlaska i zalaska sunca. Vlažnost je dostupna samo kao druga vrijednost na senzorima temperature, a ne kao zaseban uređaj. Mogu se dodati u nekom budućem ažuriranju predloška.

Rješavanje problema

Svi uređaji prikazuju NaN ili nemaju podataka
  1. Provjerite ima li TapHome Core pristup internetu — predložak zahtijeva odlaznu HTTPS vezu prema api.openweathermap.org
  2. Provjerite je li API ključ valjan — za test u pregledniku otvorite https://api.openweathermap.org/data/2.5/weather?lat=48.18&lon=17.14&appid=YOUR_KEY&units=metric
  3. Aktivacija novih API ključeva može potrajati do 2 sata nakon registracije
  4. Provjerite jesu li zemljopisna širina i dužina ispravne decimalne koordinate (ne stupnjevi/minute/sekunde)
Podaci prognoze čine se netočnima

API za prognozu vraća podatke u koracima od 3 sata. Uređaji +3 h čitaju prvi termin prognoze (list[0]), a to je sljedeći dostupni blok od 3 sata, ne točno 3 sata od sada. Slično tome, uređaji +24 h čitaju list[8] (9. termin), što je otprilike 24 sata unaprijed.

Imajte na umu zamjenu indeksa vidljivosti opisanu u upozorenju iznad — ako se čini da su vrijednosti vidljivosti +3 h i +24 h zamijenjene, riječ je o poznatoj grešci predloška.

Pogreška u nazivu uređaja

Uređaj br. 17 u predlošku nazvan je „Forecast (+24h)Weather” (nedostaje razmak ispred „Weather”). To je kozmetički problem u XML-u predloška i ne utječe na rad. Uređaj se u tablici uređaja TapHome prikazuje ispravno, pod dopunjenim nazivom.

Dostupni uređaji

OpenWeather Modul
Prilagođene varijable
longitude (string)Zemljopisna dužina lokacije meteorološke postaje u decimalnim stupnjevima (postavlja se pri uvozu)
latitude (string)Zemljopisna širina lokacije meteorološke postaje u decimalnim stupnjevima (postavlja se pri uvozu)
AppId (string)API ključ OpenWeather (besplatni ključ nabavite na openweathermap.org/api)

OpenWeather

Čitanje (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
Trenutačni tlak zraka Varijabla Samo za čitanje
numeric Jedinica: hPa json_path

Trenutačni tlak zraka

Čitanje
IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"main.pressure"))
Čitanje (modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Trenutačna temperatura zraka Senzor temperature Samo za čitanje

Trenutačna temperatura i vlažnost — vlažnost se dijeli sa 100 (API vraća 0–100 %, TapHome očekuje omjer 0–1)

numeric Jedinica: °C json_path

Trenutačna temperatura zraka

Čitanje vlažnosti
IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"main.humidity") / 100)
Čitanje (modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Čitanje temperature
IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"main.temp"))
Trenutačna osjetna temperatura Senzor temperature Samo za čitanje

Osjetna temperatura koja uzima u obzir hlađenje vjetrom i vlažnost — mjerenje vlažnosti je isključeno (vraća NaN)

numeric Jedinica: °C json_path

Trenutačna osjetna temperatura

Čitanje vlažnosti
NaN
Čitanje (modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Čitanje temperature
IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"main.feels_like"))
Trenutačna vidljivost Varijabla Samo za čitanje

Vidljivost u metrima (najviše 10 000 m)

numeric Jedinica: m json_path

Trenutačna vidljivost

Čitanje
IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"visibility"))
Čitanje (modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Trenutačno vrijeme Prekidač s više vrijednosti Samo za čitanje

Vremenski uvjeti kao prekidač s više vrijednosti — Vedro, Oblačno, Kiša, Rosulja, Grmljavina, Snijeg, Atmosferske pojave

string multi_value_switch
Vrijednosti / stanja: Clear · Clouds · Rain · Drizzle · Thunderstorm · Snow · Atmosphere

Trenutačno vrijeme

Čitanje stanja sklopke
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);
Čitanje (modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Trenutačna brzina vjetra Varijabla Samo za čitanje
numeric Jedinica: m/s json_path

Trenutačna brzina vjetra

Čitanje
IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"wind.speed"))
Čitanje (modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Prognoza (+3 h) tlaka zraka Varijabla Samo za čitanje
numeric Jedinica: hPa json_path

Prognoza (+3 h) tlaka zraka

Čitanje
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].main.pressure"))
Čitanje (modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Prognoza (+3 h) temperature zraka Senzor temperature Samo za čitanje

Temperatura i vlažnost za sljedeći termin prognoze od 3 sata — uključuje servisni atribut Datum prognoze

numeric Jedinica: °C json_path
Servisni atributi
Datum prognozeVremenska oznaka podatka prognoze (dt_txt iz odgovora API-ja)

Prognoza (+3 h) temperature zraka

Čitanje vlažnosti
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].main.humidity") / 100)
Čitanje (modul)
IF(ISNULL(Daily) | Daily = "error", ADDERROR("Failed to read data "));
Čitanje temperature
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].main.temp"))
Servisni atributi
Forecast Date
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].dt_txt"))
Prognoza (+3 h) osjetne temperature Senzor temperature Samo za čitanje

Osjetna temperatura za sljedeći termin prognoze od 3 sata — mjerenje vlažnosti je isključeno (vraća NaN)

numeric Jedinica: °C json_path

Prognoza (+3 h) osjetne temperature

Čitanje vlažnosti
NaN
Čitanje (modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Čitanje temperature
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].main.feels_like"))
Prognoza (+3 h) vidljivosti Varijabla Samo za čitanje

Poznati problem: čita iz list[8] umjesto iz list[0] — vrijednosti vidljivosti zamijenjene su s Prognozom (+24 h)

numeric Jedinica: m json_path

Prognoza (+3 h) vidljivosti

Čitanje
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].visibility"))
Čitanje (modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Prognoza (+3 h) vremena Prekidač s više vrijednosti Samo za čitanje

Vremenski uvjeti za sljedeći termin prognoze od 3 sata — isto preslikavanje u 7 kategorija kao Trenutačno vrijeme

string multi_value_switch
Vrijednosti / stanja: Clear · Clouds · Rain · Drizzle · Thunderstorm · Snow · Atmosphere

Prognoza (+3 h) vremena

Čitanje stanja sklopke
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);
Čitanje (modul)
IF(ISNULL(Daily) | Daily = "error", ADDERROR("Failed to read data "));
Prognoza (+3 h) brzine vjetra Varijabla Samo za čitanje
numeric Jedinica: m/s json_path

Prognoza (+3 h) brzine vjetra

Čitanje
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].wind.speed"))
Čitanje (modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Prognoza (+24 h) tlaka zraka Varijabla Samo za čitanje
numeric Jedinica: hPa json_path

Prognoza (+24 h) tlaka zraka

Čitanje
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].main.pressure"))
Čitanje (modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Prognoza (+24 h) temperature zraka Senzor temperature Samo za čitanje

Temperatura i vlažnost za termin prognoze +24 h — uključuje servisni atribut Datum prognoze

numeric Jedinica: °C json_path
Servisni atributi
Datum prognozeVremenska oznaka podatka prognoze (dt_txt iz odgovora API-ja)

Prognoza (+24 h) temperature zraka

Čitanje vlažnosti
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].main.humidity") / 100)
Čitanje (modul)
IF(ISNULL(Daily) | Daily = "error", ADDERROR("Failed to read data "));
Čitanje temperature
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].main.temp"))
Servisni atributi
Forecast Date
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].dt_txt"))
Prognoza (+24 h) osjetne temperature Senzor temperature Samo za čitanje

Osjetna temperatura za termin prognoze +24 h — mjerenje vlažnosti je isključeno (vraća NaN)

numeric Jedinica: °C json_path

Prognoza (+24 h) osjetne temperature

Čitanje vlažnosti
NaN
Čitanje (modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Čitanje temperature
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].main.feels_like"))
Prognoza (+24 h) vidljivosti Varijabla Samo za čitanje

Poznati problem: čita iz list[0] umjesto iz list[8] — vrijednosti vidljivosti zamijenjene su s Prognozom (+3 h)

numeric Jedinica: m json_path

Prognoza (+24 h) vidljivosti

Čitanje
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].visibility"))
Čitanje (modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Prognoza (+24 h) brzine vjetra Varijabla Samo za čitanje
numeric Jedinica: m/s json_path

Prognoza (+24 h) brzine vjetra

Čitanje
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].wind.speed"))
Prognoza (+24 h) vremena Prekidač s više vrijednosti Samo za čitanje

Vremenski uvjeti za termin prognoze +24 h — isto preslikavanje u 7 kategorija kao Trenutačno vrijeme

string multi_value_switch
Vrijednosti / stanja: Clear · Clouds · Rain · Drizzle · Thunderstorm · Snow · Atmosphere

Prognoza (+24 h) vremena

Čitanje stanja sklopke
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);
Povezivanje: Packet Parser → HTTP
Moguća poboljšanja (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

Izvori

Pronašli ste problem s ovim predloškom uređaja?

Recite nam što ne radi, što nedostaje ili kako bi se predložak trebao ponašati. Vaše povratne informacije pomažu nam da katalog bude točan.

Provjerio TapHome

Želite ovo koristiti u svojoj centralnoj jedinici TapHome Core?

Otvorite ovaj predložak na portalu Customer Portal kako biste ga primijenili na jedan od svojih domova ili predložili poboljšanje i poslali ga natrag u katalog.

Otvorite na portalu