TapHome

OpenWeather

Packet Parser → HTTP
Inviato da
Ultimo aggiornamento: 03. 2026
OpenWeather

OpenWeather è un fornitore di dati meteorologici che offre informazioni meteo globali tramite REST API. Il template TapHome si connette all’API gratuita OpenWeather v2.5 tramite HTTPS e legge le condizioni meteorologiche attuali, una previsione a 3 ore e una previsione a 24 ore per una posizione configurata.

Il template effettua due chiamate API ogni 5 minuti — una per il meteo attuale e una per la previsione a 5 giorni/3 ore. Fornisce 18 dispositivi in sola lettura che coprono temperatura dell’aria, temperatura percepita, umidità, pressione atmosferica, visibilità, velocità del vento e condizioni meteorologiche. Tutte le temperature sono in Celsius (unità metriche) e non è richiesto alcun abbonamento a pagamento.

Configurazione

Ottenere la chiave API
  1. Registra un account gratuito su openweathermap.org — non è richiesta carta di credito
  2. Dopo la registrazione, la chiave API (APPID) viene inviata tramite e-mail di conferma
  3. La chiave è disponibile anche nella pagina account sotto la scheda API key
  4. Le nuove chiavi si attivano automaticamente, in genere da 10 minuti a 2 ore

Il piano gratuito consente 60 chiamate al minuto e 1.000.000 di chiamate al mese. Il template TapHome effettua circa 576 chiamate al giorno (2 chiamate ogni 5 minuti), rientrando ampiamente nei limiti gratuiti.

Parametri di importazione

Durante l’importazione del template in TapHome, sono richiesti tre parametri:

ParametroDescrizioneEsempio
latitudeLatitudine della posizione in gradi decimali48.1778
longitudeLongitudine della posizione in gradi decimali17.1426
appidChiave API OpenWeather dal dashboard dell’accounta1b2c3d4e5f6...

Per trovare le coordinate di una posizione, fai clic con il tasto destro su Google Maps e seleziona le coordinate dal menu contestuale.

Endpoint API

Il modulo si connette ad api.openweathermap.org tramite HTTPS (porta 443) e chiama due endpoint per ciclo di polling:

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

La prima richiesta restituisce le condizioni meteorologiche attuali. La seconda restituisce un elenco di previsioni dove list[0] è il prossimo slot a 3 ore e list[8] è lo slot a +24 ore (8 x 3h = 24h).

Funzionalità dei dispositivi

Il template espone 18 dispositivi in sola lettura organizzati in tre gruppi: meteo attuale (6 dispositivi), previsione a 3 ore (6 dispositivi) e previsione a 24 ore (6 dispositivi). Ogni gruppo fornisce le stesse sei misurazioni.

Temperatura e umidità
  • Current Air Temperature — temperatura attuale in Celsius con umidità come valore secondario (l’API restituisce 0–100%, convertito nel rapporto 0–1 per TapHome)
  • Current Feels Like Temperature — temperatura percepita che tiene conto del wind chill e dell’umidità. La funzionalità umidità è disabilitata (restituisce NaN) — viene utilizzato solo il valore della temperatura
  • Forecast (+3h) Air Temperature — temperatura e umidità per il prossimo slot di previsione a 3 ore. Include un attributo di servizio Forecast Date che mostra il timestamp del punto dati
  • Forecast (+3h) Feels Like Temperature — temperatura percepita per il prossimo slot a 3 ore
  • Forecast (+24h) Air Temperature — temperatura e umidità per lo slot di previsione a +24h. Include un attributo di servizio Forecast Date
  • Forecast (+24h) Feels Like Temperature — temperatura percepita per lo slot a +24h
Pressione atmosferica e visibilità
  • Current Air Pressure — pressione atmosferica in hPa
  • Current Visibility — distanza di visibilità in metri (massimo 10.000 m)
  • Forecast (+3h) Air Pressure — pressione atmosferica per il prossimo slot a 3 ore
  • Forecast (+3h) Visibility — visibilità per la previsione a 3 ore
  • Forecast (+24h) Air Pressure — pressione atmosferica per lo slot a +24h
  • Forecast (+24h) Visibility — visibilità per la previsione a 24 ore

I dispositivi Forecast (+3h) Visibility e Forecast (+24h) Visibility hanno gli indici dei dati invertiti nella versione attuale del template. Il dispositivo +3h legge da list[8] (la posizione 24h) e il dispositivo +24h legge da list[0] (la posizione 3h). I valori sono invertiti fino alla correzione in un futuro aggiornamento del template.

Velocità del vento
  • Current Wind Speed — velocità del vento in m/s
  • Forecast (+3h) Wind Speed — velocità del vento per il prossimo slot a 3 ore
  • Forecast (+24h) Wind Speed — velocità del vento per lo slot a +24h
Condizioni meteorologiche

Tre dispositivi selettore multi-valore visualizzano la categoria delle condizioni meteorologiche:

  • Current Weather — condizione meteorologica attuale
  • Forecast (+3h) Weather — condizione meteorologica per il prossimo slot a 3 ore
  • Forecast (+24h) Weather — condizione meteorologica per lo slot a +24h

Ogni dispositivo meteo mappa il campo API weather[0].main su una delle 7 categorie:

Valore selettoreEtichettaGruppi meteo API
0ClearClear
1CloudsClouds
2RainRain
3DrizzleDrizzle
4ThunderstormThunderstorm
5SnowSnow
6AtmosphereMist, Smoke, Haze, Dust, Fog, Sand, Ash, Squall, Tornado

Se l’API restituisce un gruppo meteo non riconosciuto, il selettore assume il valore predefinito 0 (Clear). I valori 7, 8 e 9 del selettore sono definiti nella configurazione del template ma non hanno mappatura nella logica dello script — sono segnaposto non utilizzati.

Funzionalità aggiuntive

L’API OpenWeather fornisce anche direzione del vento, raffiche di vento, percentuale di nuvolosità, volume di pioggia e neve (1h) e orari di alba/tramonto. L’umidità è esposta solo come valore secondario sui sensori di temperatura, non come dispositivo autonomo. Queste funzionalità possono essere aggiunte in un futuro aggiornamento del template.

Risoluzione dei problemi

Tutti i dispositivi mostrano NaN o nessun dato
  1. Verifica che il TapHome Core abbia accesso a internet — il template richiede connettività HTTPS in uscita verso api.openweathermap.org
  2. Controlla che la chiave API sia valida — apri https://api.openweathermap.org/data/2.5/weather?lat=48.18&lon=17.14&appid=YOUR_KEY&units=metric nel browser per verificare
  3. Le nuove chiavi API possono richiedere fino a 2 ore per l’attivazione dopo la registrazione
  4. Conferma che i valori di latitudine e longitudine siano coordinate decimali corrette (non gradi/minuti/secondi)
I dati di previsione sembrano errati

L’API di previsione restituisce dati a intervalli di 3 ore. I dispositivi +3h leggono il primo slot di previsione (list[0]), che è il prossimo blocco a 3 ore disponibile — non esattamente 3 ore da adesso. Analogamente, i dispositivi +24h leggono list[8] (il 9° slot), che rappresenta circa 24 ore avanti.

Nota l’inversione degli indici di visibilità descritta nell’avviso sopra — se i valori di visibilità +3h e +24h sembrano invertiti, si tratta del bug noto del template.

Errore di battitura nel nome del dispositivo

Il dispositivo n. 17 nel template si chiama “Forecast (+24h)Weather” (manca lo spazio prima di “Weather”). Si tratta di un problema estetico nel XML del template che non influisce sulla funzionalità. Il dispositivo viene visualizzato correttamente nella tabella dispositivi TapHome utilizzando il suo nome arricchito.

Dispositivi disponibili

OpenWeather Modulo
Variabili personalizzate
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

Lettura (modulo)
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
Pressione atmosferica attuale Variabile Solo lettura
numeric Unità: hPa json_path

Pressione atmosferica attuale

Lettura
IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"main.pressure"))
Lettura (modulo)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Temperatura dell'aria attuale Sensore di temperatura Solo lettura

Temperatura e umidità attuali — l'umidità è divisa per 100 (l'API restituisce 0–100%, TapHome si aspetta rapporto 0–1)

numeric Unità: °C json_path

Temperatura dell'aria attuale

Lettura umidità
IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"main.humidity") / 100)
Lettura (modulo)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Lettura temperatura
IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"main.temp"))
Temperatura percepita attuale Sensore di temperatura Solo lettura

Temperatura percepita considerando wind chill e umidità — funzione umidità disabilitata (restituisce NaN)

numeric Unità: °C json_path

Temperatura percepita attuale

Lettura umidità
NaN
Lettura (modulo)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Lettura temperatura
IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"main.feels_like"))
Visibilità attuale Variabile Solo lettura

Distanza di visibilità in metri (massimo 10.000 m)

numeric Unità: m json_path

Visibilità attuale

Lettura
IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"visibility"))
Lettura (modulo)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Meteo attuale Interruttore multivalore Solo lettura

Condizione meteo come interruttore multivalore — sereno, nuvoloso, pioggia, pioggerella, temporale, neve, atmosfera

string multi_value_switch
Valori / Stati: Clear · Clouds · Rain · Drizzle · Thunderstorm · Snow · Atmosphere

Meteo attuale

Lettura stato interruttore
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);
Lettura (modulo)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Velocità del vento attuale Variabile Solo lettura
numeric Unità: m/s json_path

Velocità del vento attuale

Lettura
IF(ISNULL(responseJson) | responseJson = "error", NaN, PARSEJSON(responseJson,"wind.speed"))
Lettura (modulo)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Previsione (+3h) Pressione atmosferica Variabile Solo lettura
numeric Unità: hPa json_path

Previsione (+3h) Pressione atmosferica

Lettura
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].main.pressure"))
Lettura (modulo)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Previsione (+3h) Temperatura dell'aria Sensore di temperatura Solo lettura

Temperatura e umidità per il prossimo slot previsione 3 ore — include attributo di servizio Data previsione

numeric Unità: °C json_path
Attributi di servizio
Data previsioneTimestamp del punto dati previsione (dt_txt dalla risposta API)

Previsione (+3h) Temperatura dell'aria

Lettura umidità
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].main.humidity") / 100)
Lettura (modulo)
IF(ISNULL(Daily) | Daily = "error", ADDERROR("Failed to read data "));
Lettura temperatura
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].main.temp"))
Attributi di servizio
Forecast Date
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].dt_txt"))
Previsione (+3h) Temperatura percepita Sensore di temperatura Solo lettura

Temperatura percepita per il prossimo slot previsione 3 ore — funzione umidità disabilitata (restituisce NaN)

numeric Unità: °C json_path

Previsione (+3h) Temperatura percepita

Lettura umidità
NaN
Lettura (modulo)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Lettura temperatura
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].main.feels_like"))
Previsione (+3h) Visibilità Variabile Solo lettura

Problema noto: legge da list[8] anziché list[0] — valori di visibilità invertiti con Previsione (+24h)

numeric Unità: m json_path

Previsione (+3h) Visibilità

Lettura
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].visibility"))
Lettura (modulo)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Previsione (+3h) Meteo Interruttore multivalore Solo lettura

Condizione meteo per il prossimo slot previsione 3 ore — stessa mappatura a 7 categorie del Meteo attuale

string multi_value_switch
Valori / Stati: Clear · Clouds · Rain · Drizzle · Thunderstorm · Snow · Atmosphere

Previsione (+3h) Meteo

Lettura stato interruttore
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);
Lettura (modulo)
IF(ISNULL(Daily) | Daily = "error", ADDERROR("Failed to read data "));
Previsione (+3h) Velocità del vento Variabile Solo lettura
numeric Unità: m/s json_path

Previsione (+3h) Velocità del vento

Lettura
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].wind.speed"))
Lettura (modulo)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Previsione (+24h) Pressione atmosferica Variabile Solo lettura
numeric Unità: hPa json_path

Previsione (+24h) Pressione atmosferica

Lettura
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].main.pressure"))
Lettura (modulo)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Previsione (+24h) Temperatura dell'aria Sensore di temperatura Solo lettura

Temperatura e umidità per lo slot previsione +24h — include attributo di servizio Data previsione

numeric Unità: °C json_path
Attributi di servizio
Data previsioneTimestamp del punto dati previsione (dt_txt dalla risposta API)

Previsione (+24h) Temperatura dell'aria

Lettura umidità
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].main.humidity") / 100)
Lettura (modulo)
IF(ISNULL(Daily) | Daily = "error", ADDERROR("Failed to read data "));
Lettura temperatura
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].main.temp"))
Attributi di servizio
Forecast Date
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].dt_txt"))
Previsione (+24h) Temperatura percepita Sensore di temperatura Solo lettura

Temperatura percepita per lo slot previsione +24h — funzione umidità disabilitata (restituisce NaN)

numeric Unità: °C json_path

Previsione (+24h) Temperatura percepita

Lettura umidità
NaN
Lettura (modulo)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Lettura temperatura
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].main.feels_like"))
Previsione (+24h) Visibilità Variabile Solo lettura

Problema noto: legge da list[0] anziché list[8] — valori di visibilità invertiti con Previsione (+3h)

numeric Unità: m json_path

Previsione (+24h) Visibilità

Lettura
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[0].visibility"))
Lettura (modulo)
IF(ISNULL(responseJson) | responseJson = "error", ADDERROR("Failed to read data "));
Previsione (+24h) Velocità del vento Variabile Solo lettura
numeric Unità: m/s json_path

Previsione (+24h) Velocità del vento

Lettura
IF(ISNULL(Daily) | Daily = "error", NaN, PARSEJSON(Daily,"$.list[8].wind.speed"))
Previsione (+24h) Meteo Interruttore multivalore Solo lettura

Condizione meteo per lo slot previsione +24h — stessa mappatura a 7 categorie del Meteo attuale

string multi_value_switch
Valori / Stati: Clear · Clouds · Rain · Drizzle · Thunderstorm · Snow · Atmosphere

Previsione (+24h) Meteo

Lettura stato interruttore
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);
Connessione: Packet Parser → HTTP
Possibili miglioramenti (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

Fonti