TapHome

Ecowitt WS2910 (Cloud API)

Packet Parser → HTTP
Inviato da
Ultimo aggiornamento: 03. 2026
Ecowitt WS2910 (Cloud API)

Il template Ecowitt WS2910 collega TapHome alla stazione meteo Wi-Fi WS2910 con display a colori tramite l’Ecowitt Cloud API v3. La console WS2910 raccoglie i dati dal suo array di sensori esterni wireless 7-in-1 alimentato a energia solare (temperatura, umidità, vento, pioggia, luce/UV) e dai sensori interni integrati, quindi carica le letture sul server cloud Ecowitt tramite Wi-Fi. TapHome interroga l’API cloud tramite HTTPS e riceve tutti i dati dei sensori in un’unica risposta JSON.

Il template fornisce 16 dispositivi di monitoraggio in sola lettura che coprono condizioni esterne e interne, misurazioni del vento, accumulo di precipitazioni su quattro scale temporali, pressione atmosferica, irradianza solare e indice UV. Gli unici requisiti sono un account Ecowitt, la WS2910 connessa al Wi-Fi e che carica dati su ecowitt.net, e tre credenziali API.

Configurazione

Account Ecowitt e configurazione Wi-Fi

La console WS2910 deve essere connessa al Wi-Fi e caricare dati su ecowitt.net. La configurazione iniziale si effettua tramite l’app mobile WSView Plus (iOS / Android):

  1. Alimenta la console con l’adattatore DC 5V incluso (il Wi-Fi funziona solo con alimentazione DC, non a batterie)
  2. Tieni premuti i pulsanti WIND + PRESSURE per circa 5 secondi fino a quando l’icona Wi-Fi e M-B iniziano a lampeggiare
  3. Nell’app WSView Plus, premi Configure New Device e segui le istruzioni a schermo per connettere la console alla rete Wi-Fi locale
  4. Abilita il caricamento su Ecowitt Weather (ecowitt.net) nella schermata di configurazione del server

Una volta configurata, i dati dei sensori appaiono sulla dashboard di ecowitt.net entro pochi minuti.

Ottenere le credenziali API

Per l’integrazione con TapHome sono necessarie tre credenziali. Tutte vengono create e gestite su ecowitt.net:

  1. Registra un account su www.ecowitt.net (se non già fatto durante la configurazione Wi-Fi)
  2. Verifica che la WS2910 appaia sulla dashboard con dati in tempo reale
  3. Naviga alla sezione API Management
  4. Crea un Application Key — identifica l’applicazione che accede all’API
  5. Crea un API Key — una stringa UUID specifica dell’utente
  6. Trova l’indirizzo MAC della WS2910 — visibile nell’app WSView Plus sotto Device List o sulla dashboard di ecowitt.net
Parametri di importazione

Durante l’importazione del template in TapHome, inserisci:

ParametroDescrizioneDove trovarlo
Application keyIdentificativo dell’applicazione da ecowitt.netAPI Management → Application Key
API keyChiave API utente (formato UUID)API Management → API Key
Mac addressIndirizzo MAC del dispositivo (XX:XX:XX:XX:XX:XX)App WSView Plus → Device List, o dashboard ecowitt.net

L’intervallo di polling predefinito è 60 secondi (60.000 ms), corrispondente all’intervallo di segnalazione del sensore interno della console. Il sensore esterno invia dati alla console ogni 16 secondi, ma i dati vengono aggregati dalla console prima del caricamento.

Dipendenza da internet

Questa è un’integrazione esclusivamente cloud. Tutti i dati transitano attraverso il server cloud Ecowitt (api.ecowitt.net:443). Il template non funzionerà senza una connessione internet attiva sia sul TapHome Core che sulla console WS2910.

La console WS2910 funge sia da display che da gateway Wi-Fi — non è necessario un dispositivo gateway separato. Finché la console è alimentata dall’adattatore DC e connessa al Wi-Fi, i dati vengono caricati automaticamente.

Funzionalità dei dispositivi

Temperatura e umidità

Il dispositivo Outdoor Temperature legge temperatura (°C) e umidità (%) dall’array di sensori wireless 7-in-1. Il sensore esterno ha un intervallo da −40 °C a 60 °C con precisione ±1 °C, e umidità dall'1% al 99% con precisione ±5%. L’umidità è divisa per 100 per l’intervallo di ingresso analogico TapHome 0–1.

Il dispositivo Indoor Temperature legge temperatura e umidità dai sensori integrati della console. L’intervallo di temperatura interna è da −10 °C a 60 °C, umidità dall'1% al 99%.

Sono disponibili due valori calcolati aggiuntivi:

  • Outdoor Feels Like Temperature — temperatura percepita che tiene conto del wind chill (sotto ~10 °C) e dell’indice di calore (sopra ~27 °C), calcolata dal cloud Ecowitt dalla temperatura dell’aria, umidità e velocità del vento
  • Outdoor Dew Point — la temperatura alla quale l’aria esterna raggiunge la saturazione del vapore acqueo, calcolata da temperatura e umidità
Misurazioni del vento

Tre dispositivi coprono i dati eolici dall’anemometro e dalla banderuola sull’array di sensori esterni:

  • Wind Speed — velocità del vento sostenuta in km/h. Intervallo 0–180 km/h, precisione ±1 m/s (sotto 5 m/s) o ±10% (sopra 5 m/s)
  • Wind Gust — velocità massima del vento nell’intervallo di misurazione (media più alta su 3 secondi) in km/h
  • Wind Direction — direzione della bussola da cui soffia il vento, in gradi (0° = Nord, 90° = Est, 180° = Sud, 270° = Ovest)
Precipitazioni

Quattro dispositivi tracciano l’accumulo di precipitazioni su diverse scale temporali, più un tasso istantaneo:

  • Hourly Precipitation — precipitazioni accumulate negli ultimi 60 minuti (finestra scorrevole) in mm
  • Daily Precipitation — precipitazioni accumulate dalla mezzanotte in mm
  • Weekly Precipitation — precipitazioni accumulate dall’inizio della settimana corrente in mm
  • Monthly Precipitation — precipitazioni accumulate dal primo giorno del mese corrente in mm
  • Rain Rate — intensità di precipitazione attuale, estrapolata a mm/h. Precisione del volume di pioggia ±10% con risoluzione 0,3 mm
Pressione atmosferica
  • Air Pressure (Absolute) — pressione atmosferica senza compensazione dell’altitudine in hPa. Intervallo 700–1100 hPa, precisione ±3 hPa
  • Air Pressure (Relative) — pressione atmosferica compensata per l’altitudine (equivalente al livello del mare) in hPa
Solare e UV
  • Solar Irradiance — intensità della radiazione solare in W/m². Intervallo del sensore di luce 0–200 klux, precisione ±15%
  • UV Index — indice di radiazione ultravioletta sulla scala internazionale 0–15 (0 di notte, 10+ a mezzogiorno in estate)
Funzionalità aggiuntive

L’Ecowitt Cloud API fornisce anche un accumulo di precipitazioni per evento (si azzera quando la pioggia cessa) e il totale annuale delle precipitazioni. Questi sono disponibili nella risposta API ma non vengono elaborati dal template attuale. L’hardware WS2910 supporta fino a 8 sensori aggiuntivi multicanale di temperatura/umidità WN31 e fino a 2 sensori di qualità dell’aria PM2.5 WH41/WH43 — l’API probabilmente li espone sotto percorsi dati aggiuntivi. L’umidità esterna e interna sono attualmente disponibili solo come parte dei rispettivi dispositivi di temperatura; dispositivi di umidità autonomi potrebbero essere aggiunti in un futuro aggiornamento del template.

Risoluzione dei problemi

L’API restituisce un errore o nessun dato
  1. Verifica che la WS2910 sia online su ecowitt.net — accedi alla dashboard e controlla che vengano visualizzati dati in tempo reale
  2. Conferma la correttezza di tutte e tre le credenziali: application key, API key e indirizzo MAC
  3. Assicurati che il formato dell’indirizzo MAC corrisponda esattamente (XX:XX:XX:XX:XX:XX con due punti)
  4. Controlla che la console WS2910 sia alimentata dall’adattatore DC (il Wi-Fi non funziona solo a batterie)
Letture obsolete o ritardate

L’Ecowitt Cloud API restituisce i dati più recenti caricati dalla console WS2910. La console carica i dati nell’intervallo configurato durante la configurazione (predefinito 5 minuti per l’archiviazione su ecowitt.net). Il template interroga l’API ogni 60 secondi, ma i dati sottostanti possono aggiornarsi meno frequentemente a seconda dell’intervallo di caricamento.

Le unità predefinite sono imperiali

L’API Ecowitt restituisce per impostazione predefinita i dati in unità imperiali (°F, inHg, mph, pollici). Il template imposta esplicitamente gli ID delle unità metriche nell’URL dell’API (temp_unitid=1, pressure_unitid=3, wind_speed_unitid=7, rainfall_unitid=12, solar_irradiance_unitid=16) per ricevere tutti i valori in unità metriche. Questi ID delle unità non devono essere modificati.

L’Ecowitt Cloud API richiede una connessione internet attiva e dipende dalla disponibilità del server cloud Ecowitt. Durante interruzioni del cloud o del servizio internet, il template non riceverà dati aggiornati.

Dispositivi disponibili

Ecowitt WS2910 Modulo
Variabili personalizzate
application_key (string)Ecowitt API application key for authentication (obtain from Ecowitt dashboard)
api_key (string)Ecowitt API key for device data access (obtain from Ecowitt dashboard)
mac_address (string)MAC address of the Ecowitt weather station (find in Ecowitt app or device settings)

Ecowitt

Lettura (modulo)
responseJson := "error";

IF(ISNULL(api_key) OR LENGTH(api_key) = 0)
   ADDERROR("Please set API key in module variables");
   RETURN(-1);
END

IF(ISNULL(application_key) OR LENGTH(application_key) = 0)
   ADDERROR("Please set Application key in module variables");
   RETURN(-2);
END

IF(ISNULL(mac_address) OR LENGTH(mac_address) = 0)
   ADDERROR("Please set MAC address in module variables");
   RETURN(-3);
END

VAR path := "api/v3/device/real_time?application_key=" + application_key + "&api_key=" + api_key + "&mac=" + mac_address + "&call_back=all&temp_unitid=1&pressure_unitid=3&wind_speed_unitid=7&rainfall_unitid=12&solar_irradiance_unitid=16";

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);
    RETURN(-4);
END

VAR code := PARSEJSON(responseJson, "code");

IF code != 0
    
    VAR msg := PARSEJSON(responseJson, "msg");
    ADDERROR("Failed to read data - " + msg);
    responseJson := "error";
END
Pressione atmosferica (assoluta) Variabile Solo lettura

Pressione atmosferica senza compensazione dell'altitudine — intervallo 700–1100 hPa

numeric Unità: hPa JSON parsejson()

Pressione atmosferica (assoluta)

Lettura
IF(ISNULL(responseJson) | responseJson = "error")
    RETURN(NaN);
END

VAR value := PARSEJSON(responseJson,"data.pressure.absolute.value");
RETURN(TODOUBLE(value));
Pressione atmosferica (relativa) Variabile Solo lettura

Pressione atmosferica compensata per l'altitudine — equivalente al livello del mare in hPa

numeric Unità: hPa JSON parsejson()

Pressione atmosferica (relativa)

Lettura
IF(ISNULL(responseJson) | responseJson = "error")
    RETURN(NaN);
END

VAR value := PARSEJSON(responseJson,"data.pressure.relative.value");
RETURN(TODOUBLE(value));
Precipitazioni giornaliere Variabile Solo lettura

Precipitazioni accumulate dalla mezzanotte in mm — azzeramento alle 00:00

numeric Unità: mm JSON parsejson()

Precipitazioni giornaliere

Lettura
IF(ISNULL(responseJson) | responseJson = "error")
    RETURN(NaN);
END

VAR value := PARSEJSON(responseJson,"data.rainfall.daily.value");
RETURN(TODOUBLE(value));
Precipitazioni orarie Variabile Solo lettura

Precipitazioni accumulate negli ultimi 60 minuti (finestra scorrevole) in mm

numeric Unità: mm JSON parsejson()

Precipitazioni orarie

Lettura
IF(ISNULL(responseJson) | responseJson = "error")
    RETURN(NaN);
END

VAR value := PARSEJSON(responseJson,"data.rainfall.1_hour.value");
RETURN(TODOUBLE(value));
Temperatura interna Sensore di temperatura Solo lettura

Temperatura interna misurata dalla console (°C) e umidità (intervallo 0–1)

numeric Unità: °C / % JSON parsejson()

Temperatura interna

Lettura umidità
IF(ISNULL(responseJson) | responseJson = "error")
    RETURN(NaN);
END

VAR value := PARSEJSON(responseJson,"data.indoor.humidity.value");
RETURN(TODOUBLE(value) / 100);
Lettura temperatura
IF(ISNULL(responseJson) | responseJson = "error")
    RETURN(NaN);
END

VAR value := PARSEJSON(responseJson,"data.indoor.temperature.value");
RETURN(TODOUBLE(value));
Precipitazioni mensili Variabile Solo lettura

Precipitazioni accumulate dal primo giorno del mese corrente in mm

numeric Unità: mm JSON parsejson()

Precipitazioni mensili

Lettura
IF(ISNULL(responseJson) | responseJson = "error")
    RETURN(NaN);
END

VAR value := PARSEJSON(responseJson,"data.rainfall.monthly.value");
RETURN(TODOUBLE(value));
Punto di rugiada esterno Variabile Solo lettura

Temperatura alla quale l'aria esterna raggiunge la saturazione del vapore acqueo — calcolata da temperatura e umidità

numeric Unità: °C JSON parsejson()

Punto di rugiada esterno

Lettura
IF(ISNULL(responseJson) | responseJson = "error")
    RETURN(NaN);
END

VAR value := PARSEJSON(responseJson,"data.outdoor.dew_point.value");
RETURN(TODOUBLE(value));
Temperatura percepita esterna Variabile Solo lettura

Temperatura percepita che tiene conto del wind chill e dell'indice di calore

numeric Unità: °C JSON parsejson()

Temperatura percepita esterna

Lettura
IF(ISNULL(responseJson) | responseJson = "error")
    RETURN(NaN);
END

VAR value := PARSEJSON(responseJson,"data.outdoor.feels_like.value");
RETURN(TODOUBLE(value));
Temperatura esterna Sensore di temperatura Solo lettura

Temperatura esterna (°C) e umidità (intervallo 0–1) dall'array di sensori wireless 7-in-1

numeric Unità: °C / % JSON parsejson()

Temperatura esterna

Lettura umidità
IF(ISNULL(responseJson) | responseJson = "error")
    RETURN(NaN);
END

VAR value := PARSEJSON(responseJson,"data.outdoor.humidity.value");
RETURN(TODOUBLE(value) / 100.0);
Lettura temperatura
IF(ISNULL(responseJson) | responseJson = "error")
    RETURN(NaN);
END

VAR value := PARSEJSON(responseJson,"data.outdoor.temperature.value");
RETURN(TODOUBLE(value));
Intensità pioggia Variabile Solo lettura

Intensità di precipitazione attuale estrapolata a mm/h

numeric Unità: mm/hr JSON parsejson()

Intensità pioggia

Lettura
IF(ISNULL(responseJson) | responseJson = "error")
    RETURN(NaN);
END

VAR value := PARSEJSON(responseJson,"data.rainfall.rain_rate.value");
RETURN(TODOUBLE(value));
Irradianza solare Variabile Solo lettura

Intensità della radiazione solare in W/m² — intervallo 0–200 klux

numeric Unità: W/m² JSON parsejson()

Irradianza solare

Lettura
IF(ISNULL(responseJson) | responseJson = "error")
    RETURN(NaN);
END

VAR value := PARSEJSON(responseJson,"data.solar_and_uvi.solar.value");
RETURN(TODOUBLE(value));
Indice UV Variabile Solo lettura

Indice di radiazione ultravioletta sulla scala 0–15 — 0 di notte, 10+ a mezzogiorno in estate

numeric JSON parsejson()

Indice UV

Lettura
IF(ISNULL(responseJson) | responseJson = "error")
    RETURN(NaN);
END

VAR value := PARSEJSON(responseJson,"data.solar_and_uvi.uvi.value");
RETURN(TODOUBLE(value));
Precipitazioni settimanali Variabile Solo lettura

Precipitazioni accumulate dall'inizio della settimana corrente in mm

numeric Unità: mm JSON parsejson()

Precipitazioni settimanali

Lettura
IF(ISNULL(responseJson) | responseJson = "error")
    RETURN(NaN);
END

VAR value := PARSEJSON(responseJson,"data.rainfall.weekly.value");
RETURN(TODOUBLE(value));
Direzione del vento Variabile Solo lettura

Direzione della bussola in gradi — 0° Nord, 90° Est, 180° Sud, 270° Ovest

numeric Unità: ° JSON parsejson()

Direzione del vento

Lettura
IF(ISNULL(responseJson) | responseJson = "error")
    RETURN(NaN);
END

VAR value := PARSEJSON(responseJson,"data.wind.wind_direction.value");
RETURN(TODOUBLE(value));
Raffica di vento Variabile Solo lettura

Velocità massima del vento nell'intervallo di misurazione in km/h

numeric Unità: km/h JSON parsejson()

Raffica di vento

Lettura
IF(ISNULL(responseJson) | responseJson = "error")
    RETURN(NaN);
END

VAR value := PARSEJSON(responseJson,"data.wind.wind_gust.value");
RETURN(TODOUBLE(value));
Velocità del vento Variabile Solo lettura

Velocità del vento sostenuta dall'anemometro in km/h — intervallo 0–180 km/h

numeric Unità: km/h JSON parsejson()

Velocità del vento

Lettura
IF(ISNULL(responseJson) | responseJson = "error")
    RETURN(NaN);
END

VAR value := PARSEJSON(responseJson,"data.wind.wind_speed.value");
RETURN(TODOUBLE(value));
Connessione: Packet Parser → HTTP
Possibili miglioramenti (6)
  • Rainfall Event — Accumulated rainfall for the current rain event (resets when rain stops). Available in API response but not parsed by template
  • Yearly Precipitation — Accumulated rainfall since January 1st. Available in API response but not parsed by template
  • Outdoor Humidity (Standalone) — Outdoor humidity is only exposed as part of the Outdoor Temperature device (readhumidity script). A standalone humidity variable device could be useful for automations
  • Indoor Humidity (Standalone) — Indoor humidity is only exposed as part of the Indoor Temperature device (readhumidity script). A standalone humidity variable device could be useful for automations
  • Additional Temperature/Humidity Sensors (WN31) — WS2910 supports up to 8 WN31 multi-channel temperature/humidity sensors. API likely exposes these under additional data paths. Not implemented in template
  • PM2.5 Air Quality Sensors — WS2910 supports up to 2 WH41/WH43 PM2.5 air quality sensors. API likely exposes these under additional data paths. Not implemented in template

Fonti