TapHome

Ecowitt WS2910 (Cloud API)

Packet Parser → HTTP
Inviato da
Ultimo aggiornamento: 06. 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)Chiave applicazione Ecowitt API per l'autenticazione (ottenere dalla dashboard Ecowitt)
api_key (string)Chiave API Ecowitt per l'accesso ai dati del dispositivo (ottenere dalla dashboard Ecowitt)
mac_address (string)Indirizzo MAC della stazione meteo Ecowitt (trovare nell'app Ecowitt o nelle impostazioni del dispositivo)

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

Hai trovato un problema con questo template?

Dicci cosa non funziona, cosa manca o come dovrebbe comportarsi il template. Il tuo feedback ci aiuta a mantenere il catalogo accurato.

Verificato da TapHome

Vuoi usarlo nel tuo TapHome Core?

Apri questo template nel Customer Portal per applicarlo a una delle tue case, o crea una proposta di modifica e inviala al catalogo.

Apri nel portale