TapHome

OpenWeather

Packet Parser → HTTP
Trimis de
Ultima actualizare: 03. 2026
OpenWeather

OpenWeather este un furnizor de date meteo care oferă informații despre vreme la nivel global printr-un API REST. Șablonul TapHome se conectează prin HTTPS la OpenWeather API v2.5 gratuit și citește vremea curentă, o prognoză pentru 3 ore și o prognoză pentru 24 de ore pentru locația configurată.

Șablonul face două apeluri API la fiecare 5 minute — unul pentru vremea curentă și unul pentru prognoza pe 5 zile, la intervale de 3 ore. Oferă 18 dispozitive numai pentru citire, care acoperă temperatura aerului, temperatura resimțită, umiditatea, presiunea atmosferică, vizibilitatea, viteza vântului și starea vremii. Toate temperaturile sunt în grade Celsius (unități metrice) și nu este necesar niciun abonament plătit.

Configurare

Obținerea cheii API
  1. Înregistrați un cont gratuit pe openweathermap.org — nu este necesar un card de credit
  2. După înregistrare, cheia API (APPID) vă este trimisă în e-mailul de confirmare
  3. Cheia este disponibilă și pe pagina contului, în fila API key
  4. Cheile noi se activează automat, de obicei între 10 minute și 2 ore

Nivelul gratuit permite 60 de apeluri pe minut și 1.000.000 de apeluri pe lună. Șablonul TapHome face aproximativ 576 de apeluri pe zi (2 apeluri la fiecare 5 minute), mult sub limitele gratuite.

Parametri de import

La importul șablonului în TapHome sunt necesari trei parametri:

ParametruDescriereExemplu
latitudeLatitudinea locației în grade zecimale48.1778
longitudeLongitudinea locației în grade zecimale17.1426
appidCheia API OpenWeather din panoul contuluia1b2c3d4e5f6...

Pentru a afla coordonatele unei locații, faceți clic dreapta în Google Maps și selectați coordonatele din meniul contextual.

Endpointuri API

Modulul se conectează la api.openweathermap.org prin HTTPS (portul 443) și apelează două endpointuri la fiecare ciclu de interogare:

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

Prima cerere returnează vremea curentă. A doua returnează o listă de prognoze, în care list[0] este următorul interval de 3 ore, iar list[8] este intervalul de peste 24 de ore (8 x 3 h = 24 h).

Funcțiile dispozitivului

Șablonul pune la dispoziție 18 dispozitive numai pentru citire, organizate în trei grupuri: vremea curentă (6 dispozitive), prognoza pentru 3 ore (6 dispozitive) și prognoza pentru 24 de ore (6 dispozitive). Fiecare grup oferă aceleași șase mărimi.

Temperatură și umiditate
  • Temperatura aerului (acum) — temperatura curentă în grade Celsius, cu umiditatea ca valoare secundară (API-ul returnează 0–100 %, convertit într-o valoare de la 0 la 1 pentru TapHome)
  • Temperatura resimțită (acum) — temperatura aparentă, care ține cont de efectul de răcire al vântului și de umiditate. Funcția de umiditate este dezactivată (returnează NaN) — se folosește doar valoarea temperaturii
  • Temperatura aerului (prognoză +3h) — temperatura și umiditatea pentru următorul interval de prognoză de 3 ore. Include atributul de service Data prognozei, care afișează marcajul de timp al datelor
  • Temperatura resimțită (prognoză +3h) — temperatura aparentă pentru următorul interval de 3 ore
  • Temperatura aerului (prognoză +24h) — temperatura și umiditatea pentru intervalul de prognoză de +24 h. Include atributul de service Data prognozei
  • Temperatura resimțită (prognoză +24h) — temperatura aparentă pentru intervalul de +24 h
Presiune atmosferică și vizibilitate
  • Presiunea atmosferică (acum) — presiunea atmosferică în hPa
  • Vizibilitatea (acum) — distanța de vizibilitate în metri (maximum 10.000 m)
  • Presiunea atmosferică (prognoză +3h) — presiunea atmosferică pentru următorul interval de 3 ore
  • Vizibilitatea (prognoză +3h) — vizibilitatea pentru prognoza de 3 ore
  • Presiunea atmosferică (prognoză +24h) — presiunea atmosferică pentru intervalul de +24 h
  • Vizibilitatea (prognoză +24h) — vizibilitatea pentru prognoza de 24 de ore

În versiunea actuală a șablonului, dispozitivele Vizibilitatea (prognoză +3h) și Vizibilitatea (prognoză +24h) au indicii datelor inversați. Dispozitivul +3h citește din list[8] (poziția pentru 24 h), iar dispozitivul +24h citește din list[0] (poziția pentru 3 h). Valorile sunt inversate până la corectarea într-o actualizare viitoare a șablonului.

Viteza vântului
  • Viteza vântului (acum) — viteza vântului în m/s
  • Viteza vântului (prognoză +3h) — viteza vântului pentru următorul interval de 3 ore
  • Viteza vântului (prognoză +24h) — viteza vântului pentru intervalul de +24 h
Starea vremii

Trei dispozitive de tip comutator cu mai multe valori afișează categoria stării vremii:

  • Vremea (acum) — starea curentă a vremii
  • Vremea (prognoză +3h) — starea vremii pentru următorul interval de 3 ore
  • Vremea (prognoză +24h) — starea vremii pentru intervalul de +24 h

Fiecare dispozitiv pentru vreme mapează câmpul API weather[0].main pe una dintre cele 7 categorii:

Valoarea comutatoruluiEtichetăGrupuri meteo API
0SeninClear
1NorosClouds
2PloaieRain
3BurnițăDrizzle
4FurtunăThunderstorm
5NinsoareSnow
6Fenomene atmosfericeMist, Smoke, Haze, Dust, Fog, Sand, Ash, Squall, Tornado

Dacă API-ul returnează un grup meteo necunoscut, comutatorul trece implicit pe 0 (Senin). Valorile 7, 8 și 9 ale comutatorului sunt definite în configurația șablonului, dar nu au corespondență în logica scriptului — sunt valori rezervate, nefolosite.

Funcții suplimentare

OpenWeather API oferă și direcția vântului, rafalele de vânt, gradul de acoperire cu nori în procente, cantitatea de ploaie și de zăpadă (1 h) și orele răsăritului și apusului. Umiditatea este disponibilă doar ca valoare secundară a senzorilor de temperatură, nu ca dispozitiv separat. Acestea pot fi adăugate într-o actualizare viitoare a șablonului.

Rezolvarea problemelor

Toate dispozitivele arată NaN sau nu au date
  1. Verificați dacă TapHome Core are acces la internet — șablonul necesită conectivitate HTTPS de ieșire către api.openweathermap.org
  2. Verificați dacă cheia API este validă — pentru test, deschideți în browser https://api.openweathermap.org/data/2.5/weather?lat=48.18&lon=17.14&appid=YOUR_KEY&units=metric
  3. Activarea cheilor API noi poate dura până la 2 ore după înregistrare
  4. Verificați dacă latitudinea și longitudinea sunt coordonate zecimale corecte (nu grade/minute/secunde)
Datele de prognoză par incorecte

API-ul de prognoză returnează date în intervale de 3 ore. Dispozitivele +3h citesc primul interval de prognoză (list[0]), adică următorul bloc de 3 ore disponibil — nu exact peste 3 ore de acum. La fel, dispozitivele +24h citesc list[8] (al 9-lea interval), care corespunde aproximativ momentului de peste 24 de ore.

Țineți cont de inversarea indicilor de vizibilitate descrisă în avertismentul de mai sus — dacă valorile de vizibilitate +3h și +24h par schimbate între ele, este vorba de eroarea cunoscută a șablonului.

Greșeală de scriere în numele dispozitivului

Dispozitivul nr. 17 din șablon se numește „Forecast (+24h)Weather” (lipsește spațiul înainte de „Weather”). Este o problemă cosmetică în fișierul XML al șablonului și nu afectează funcționarea. Dispozitivul se afișează corect în tabelul de dispozitive TapHome, cu numele corectat.

Dispozitive disponibile

OpenWeather Modul
Variabile personalizate
longitude (string)Longitudinea geografică a locației stației meteo, în grade zecimale (se setează la import)
latitude (string)Latitudinea geografică a locației stației meteo, în grade zecimale (se setează la import)
AppId (string)Cheia API OpenWeather (o cheie gratuită se obține pe openweathermap.org/api)

OpenWeather

Citire (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
Presiunea atmosferică (acum) Variabilă Doar citire
numeric Unitate: hPa json_path

Presiunea atmosferică (acum)

Citire
IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"main.pressure"))
Citire (modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Temperatura aerului (acum) Senzor de temperatură Doar citire

Temperatura și umiditatea curente — umiditatea se împarte la 100 (API-ul returnează 0–100 %, TapHome folosește valori de la 0 la 1)

numeric Unitate: °C json_path

Temperatura aerului (acum)

Citirea umidității
IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"main.humidity") / 100)
Citire (modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Citirea temperaturii
IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"main.temp"))
Temperatura resimțită (acum) Senzor de temperatură Doar citire

Temperatura aparentă, care ține cont de efectul de răcire al vântului și de umiditate — funcția de umiditate este dezactivată (returnează NaN)

numeric Unitate: °C json_path

Temperatura resimțită (acum)

Citirea umidității
NaN
Citire (modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Citirea temperaturii
IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"main.feels_like"))
Vizibilitatea (acum) Variabilă Doar citire

Distanța de vizibilitate în metri (maximum 10.000 m)

numeric Unitate: m json_path

Vizibilitatea (acum)

Citire
IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"visibility"))
Citire (modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Vremea (acum) Comutator cu mai multe valori Doar citire

Starea vremii ca comutator cu mai multe valori — Senin, Noros, Ploaie, Burniță, Furtună, Ninsoare, Fenomene atmosferice

string multi_value_switch
Valori / Stări: Clear · Clouds · Rain · Drizzle · Thunderstorm · Snow · Atmosphere

Vremea (acum)

Citirea stării comutatorului
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);
Citire (modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Viteza vântului (acum) Variabilă Doar citire
numeric Unitate: m/s json_path

Viteza vântului (acum)

Citire
IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"wind.speed"))
Citire (modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Presiunea atmosferică (prognoză +3h) Variabilă Doar citire
numeric Unitate: hPa json_path

Presiunea atmosferică (prognoză +3h)

Citire
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].main.pressure"))
Citire (modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Temperatura aerului (prognoză +3h) Senzor de temperatură Doar citire

Temperatura și umiditatea pentru următorul interval de prognoză de 3 ore — include atributul de service Data prognozei

numeric Unitate: °C json_path
Atribute de service
Data prognozeiMarcajul de timp al datelor de prognoză (dt_txt din răspunsul API)

Temperatura aerului (prognoză +3h)

Citirea umidității
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].main.humidity") / 100)
Citire (modul)
IF(ISNULL(Daily) | Daily = "error", ADDERROR("Failed to read data "));
Citirea temperaturii
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].main.temp"))
Atribute de service
Forecast Date
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].dt_txt"))
Temperatura resimțită (prognoză +3h) Senzor de temperatură Doar citire

Temperatura aparentă pentru următorul interval de prognoză de 3 ore — funcția de umiditate este dezactivată (returnează NaN)

numeric Unitate: °C json_path

Temperatura resimțită (prognoză +3h)

Citirea umidității
NaN
Citire (modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Citirea temperaturii
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].main.feels_like"))
Vizibilitatea (prognoză +3h) Variabilă Doar citire

Problemă cunoscută: citește din list[8] în loc de list[0] — valorile de vizibilitate sunt inversate cu cele ale dispozitivului Vizibilitatea (prognoză +24h)

numeric Unitate: m json_path

Vizibilitatea (prognoză +3h)

Citire
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].visibility"))
Citire (modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Vremea (prognoză +3h) Comutator cu mai multe valori Doar citire

Starea vremii pentru următorul interval de prognoză de 3 ore — aceeași mapare pe 7 categorii ca la Vremea (acum)

string multi_value_switch
Valori / Stări: Clear · Clouds · Rain · Drizzle · Thunderstorm · Snow · Atmosphere

Vremea (prognoză +3h)

Citirea stării comutatorului
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);
Citire (modul)
IF(ISNULL(Daily) | Daily = "error", ADDERROR("Failed to read data "));
Viteza vântului (prognoză +3h) Variabilă Doar citire
numeric Unitate: m/s json_path

Viteza vântului (prognoză +3h)

Citire
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].wind.speed"))
Citire (modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Presiunea atmosferică (prognoză +24h) Variabilă Doar citire
numeric Unitate: hPa json_path

Presiunea atmosferică (prognoză +24h)

Citire
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].main.pressure"))
Citire (modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Temperatura aerului (prognoză +24h) Senzor de temperatură Doar citire

Temperatura și umiditatea pentru intervalul de prognoză de +24 h — include atributul de service Data prognozei

numeric Unitate: °C json_path
Atribute de service
Data prognozeiMarcajul de timp al datelor de prognoză (dt_txt din răspunsul API)

Temperatura aerului (prognoză +24h)

Citirea umidității
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].main.humidity") / 100)
Citire (modul)
IF(ISNULL(Daily) | Daily = "error", ADDERROR("Failed to read data "));
Citirea temperaturii
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].main.temp"))
Atribute de service
Forecast Date
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].dt_txt"))
Temperatura resimțită (prognoză +24h) Senzor de temperatură Doar citire

Temperatura aparentă pentru intervalul de prognoză de +24 h — funcția de umiditate este dezactivată (returnează NaN)

numeric Unitate: °C json_path

Temperatura resimțită (prognoză +24h)

Citirea umidității
NaN
Citire (modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Citirea temperaturii
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].main.feels_like"))
Vizibilitatea (prognoză +24h) Variabilă Doar citire

Problemă cunoscută: citește din list[0] în loc de list[8] — valorile de vizibilitate sunt inversate cu cele ale dispozitivului Vizibilitatea (prognoză +3h)

numeric Unitate: m json_path

Vizibilitatea (prognoză +24h)

Citire
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].visibility"))
Citire (modul)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Viteza vântului (prognoză +24h) Variabilă Doar citire
numeric Unitate: m/s json_path

Viteza vântului (prognoză +24h)

Citire
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].wind.speed"))
Vremea (prognoză +24h) Comutator cu mai multe valori Doar citire

Starea vremii pentru intervalul de prognoză de +24 h — aceeași mapare pe 7 categorii ca la Vremea (acum)

string multi_value_switch
Valori / Stări: Clear · Clouds · Rain · Drizzle · Thunderstorm · Snow · Atmosphere

Vremea (prognoză +24h)

Citirea stării comutatorului
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);
Conexiune: Packet Parser → HTTP
Îmbunătățiri posibile (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

Surse

Ați găsit o problemă la acest șablon de dispozitiv?

Spuneți-ne ce nu funcționează, ce lipsește sau cum ar trebui să se comporte șablonul. Feedbackul dvs. ne ajută să păstrăm catalogul corect.

Verificat de TapHome

Doriți să folosiți acest șablon în TapHome Core?

Deschideți acest șablon în Customer Portal pentru a-l aplica într-una dintre locuințele dvs. sau pentru a propune o îmbunătățire și a o trimite înapoi în catalog.

Deschideți în portal