TapHome

Ecowitt WS2910 (Cloud API)

Packet Parser → HTTP
Dodane przez
Ostatnia aktualizacja: 03. 2026
Ecowitt WS2910 (Cloud API)

Szablon Ecowitt WS2910 łączy TapHome ze stacją pogodową Wi-Fi WS2910 z kolorowym wyświetlaczem za pośrednictwem Ecowitt Cloud API v3. Konsola WS2910 zbiera dane z zewnętrznej, zasilanej solarnie bezprzewodowej macierzy czujników 7-w-1 (temperatura, wilgotność, wiatr, deszcz, światło/UV) oraz z wbudowanych czujników wewnętrznych, a następnie przesyła odczyty na serwer chmurowy Ecowitt przez Wi-Fi. TapHome odpytuje API chmurowe przez HTTPS i otrzymuje wszystkie dane z czujników w jednej odpowiedzi JSON.

Szablon udostępnia 16 urządzeń monitorujących w trybie tylko do odczytu, obejmujących warunki zewnętrzne i wewnętrzne, pomiary wiatru, akumulację opadów w czterech skalach czasowych, ciśnienie atmosferyczne, natężenie promieniowania słonecznego i indeks UV. Jedynymi wymaganiami są konto Ecowitt, WS2910 podłączona do Wi-Fi i przesyłająca dane na ecowitt.net oraz trzy dane uwierzytelniające API.

Konfiguracja

Konto Ecowitt i konfiguracja Wi-Fi

Konsola WS2910 musi być podłączona do Wi-Fi i przesyłać dane na ecowitt.net. Początkowa konfiguracja odbywa się za pomocą aplikacji mobilnej WSView Plus (iOS / Android):

  1. Zasilaj konsolę dołączonym zasilaczem DC 5V (Wi-Fi działa tylko z zasilaniem DC, nie na baterie)
  2. Przytrzymaj przyciski WIND + PRESSURE przez ok. 5 sekund, aż ikona Wi-Fi i M-B zaczną migać
  3. W aplikacji WSView Plus naciśnij Configure New Device i postępuj zgodnie z instrukcjami na ekranie, aby połączyć konsolę z lokalną siecią Wi-Fi
  4. Włącz przesyłanie na Ecowitt Weather (ecowitt.net) na ekranie konfiguracji serwera

Po skonfigurowaniu dane z czujników pojawią się na dashboardzie ecowitt.net w ciągu kilku minut.

Uzyskiwanie danych uwierzytelniających API

Do integracji z TapHome potrzebne są trzy dane uwierzytelniające. Wszystkie tworzy się i zarządza na ecowitt.net:

  1. Zarejestruj konto na www.ecowitt.net (jeśli nie zrobiłeś tego podczas konfiguracji Wi-Fi)
  2. Upewnij się, że WS2910 pojawia się na dashboardzie z danymi na żywo
  3. Przejdź do sekcji API Management
  4. Utwórz Application Key — identyfikuje aplikację uzyskującą dostęp do API
  5. Utwórz API Key — specyficzny dla użytkownika ciąg UUID
  6. Znajdź adres MAC WS2910 — widoczny w aplikacji WSView Plus w sekcji Device List lub na dashboardzie ecowitt.net
Parametry importu

Podczas importu szablonu do TapHome wprowadź:

ParametrOpisGdzie znaleźć
Application keyIdentyfikator aplikacji z ecowitt.netAPI Management → Application Key
API keyKlucz API użytkownika (format UUID)API Management → API Key
Mac addressAdres MAC urządzenia (XX:XX:XX:XX:XX:XX)Aplikacja WSView Plus → Device List, lub dashboard ecowitt.net

Domyślny interwał odpytywania wynosi 60 sekund (60 000 ms), co odpowiada interwałowi raportowania czujnika wewnętrznego konsoli. Czujnik zewnętrzny raportuje do konsoli co 16 sekund, ale dane są agregowane przez konsolę przed przesłaniem.

Zależność od internetu

Jest to integracja wyłącznie chmurowa. Wszystkie dane przechodzą przez serwer chmurowy Ecowitt (api.ecowitt.net:443). Szablon nie będzie działać bez aktywnego połączenia internetowego zarówno na TapHome Core, jak i na konsoli WS2910.

Konsola WS2910 pełni jednocześnie rolę wyświetlacza i bramki Wi-Fi — nie jest potrzebne oddzielne urządzenie gateway. Dopóki konsola jest zasilana zasilaczem DC i podłączona do Wi-Fi, dane są przesyłane automatycznie.

Możliwości urządzeń

Temperatura i wilgotność

Urządzenie Outdoor Temperature odczytuje temperaturę (°C) i wilgotność (%) z bezprzewodowej macierzy czujników 7-w-1. Czujnik zewnętrzny ma zakres od −40 °C do 60 °C z dokładnością ±1 °C i wilgotność od 1% do 99% z dokładnością ±5%. Wilgotność jest dzielona przez 100 dla zakresu wejścia analogowego TapHome 0–1.

Urządzenie Indoor Temperature odczytuje temperaturę i wilgotność z wbudowanych czujników konsoli. Zakres temperatury wewnętrznej to −10 °C do 60 °C, wilgotność 1% do 99%.

Dostępne są dwie dodatkowe wartości obliczeniowe:

  • Outdoor Feels Like Temperature — temperatura odczuwalna uwzględniająca windchill (poniżej ~10 °C) i indeks ciepła (powyżej ~27 °C), obliczana przez chmurę Ecowitt na podstawie temperatury powietrza, wilgotności i prędkości wiatru
  • Outdoor Dew Point — temperatura, w której powietrze zewnętrzne osiąga nasycenie parą wodną, obliczana na podstawie temperatury i wilgotności
Pomiary wiatru

Trzy urządzenia obejmują dane wiatrowe z anemometru i wiatrowskazu na zewnętrznej macierzy czujników:

  • Wind Speed — stała prędkość wiatru w km/h. Zakres 0–180 km/h, dokładność ±1 m/s (poniżej 5 m/s) lub ±10% (powyżej 5 m/s)
  • Wind Gust — szczytowa prędkość wiatru w interwale pomiarowym (najwyższa 3-sekundowa średnia) w km/h
  • Wind Direction — kierunek kompasowy, z którego wieje wiatr, w stopniach (0° = północ, 90° = wschód, 180° = południe, 270° = zachód)
Opady

Cztery urządzenia śledzą akumulację opadów w różnych skalach czasowych, plus natężenie chwilowe:

  • Hourly Precipitation — skumulowane opady w ostatnich 60 minutach (okno kroczące) w mm
  • Daily Precipitation — skumulowane opady od północy w mm
  • Weekly Precipitation — skumulowane opady od początku bieżącego tygodnia w mm
  • Monthly Precipitation — skumulowane opady od pierwszego dnia bieżącego miesiąca w mm
  • Rain Rate — bieżące natężenie opadów, ekstrapolowane do mm/h. Dokładność objętości opadów ±10% z rozdzielczością 0,3 mm
Ciśnienie atmosferyczne
  • Air Pressure (Absolute) — ciśnienie atmosferyczne bez kompensacji wysokości w hPa. Zakres 700–1100 hPa, dokładność ±3 hPa
  • Air Pressure (Relative) — ciśnienie atmosferyczne skompensowane na wysokość (odpowiednik poziomu morza) w hPa
Promieniowanie słoneczne i UV
  • Solar Irradiance — natężenie promieniowania słonecznego w W/m². Zakres czujnika światła 0–200 klux, dokładność ±15%
  • UV Index — indeks promieniowania ultrafioletowego w międzynarodowej skali 0–15 (0 w nocy, 10+ w południe latem)
Dodatkowe możliwości

Ecowitt Cloud API udostępnia również akumulację opadów na zdarzenie (resetuje się po ustaniu deszczu) oraz roczną sumę opadów. Te są dostępne w odpowiedzi API, ale aktualny szablon ich nie przetwarza. Sprzęt WS2910 obsługuje do 8 dodatkowych wielokanałowych czujników temperatury/wilgotności WN31 i do 2 czujników jakości powietrza PM2.5 WH41/WH43 — API prawdopodobnie udostępnia je pod dodatkowymi ścieżkami danych. Wilgotność zewnętrzna i wewnętrzna są obecnie dostępne tylko jako część odpowiednich urządzeń temperaturowych; samodzielne urządzenia wilgotności mogłyby zostać dodane w przyszłej aktualizacji szablonu.

Rozwiązywanie problemów

API zwraca błąd lub brak danych
  1. Sprawdź, czy WS2910 jest online na ecowitt.net — zaloguj się na dashboard i upewnij się, że wyświetlane są dane na żywo
  2. Potwierdź poprawność wszystkich trzech danych uwierzytelniających: application key, API key i adres MAC
  3. Upewnij się, że format adresu MAC dokładnie odpowiada (XX:XX:XX:XX:XX:XX z dwukropkami)
  4. Sprawdź, czy konsola WS2910 jest zasilana zasilaczem DC (Wi-Fi nie działa tylko na baterie)
Nieaktualne lub opóźnione odczyty

Ecowitt Cloud API zwraca najnowsze dane przesłane przez konsolę WS2910. Konsola przesyła dane w interwale skonfigurowanym podczas konfiguracji (domyślnie 5 minut dla przechowywania na ecowitt.net). Szablon odpytuje API co 60 sekund, ale dane bazowe mogą aktualizować się rzadziej w zależności od interwału przesyłania.

Domyślne jednostki są imperialne

API Ecowitt domyślnie zwraca dane w jednostkach imperialnych (°F, inHg, mph, cale). Szablon jawnie ustawia metryczne identyfikatory jednostek w URL API (temp_unitid=1, pressure_unitid=3, wind_speed_unitid=7, rainfall_unitid=12, solar_irradiance_unitid=16), aby otrzymywać wszystkie wartości w jednostkach metrycznych. Te identyfikatory jednostek nie powinny być modyfikowane.

Ecowitt Cloud API wymaga aktywnego połączenia internetowego i zależy od dostępności serwera chmurowego Ecowitt. Podczas awarii chmury lub przerw w dostępie do internetu szablon nie będzie otrzymywać zaktualizowanych danych.

Dostępne urządzenia

Ecowitt WS2910 Moduł
Zmienne niestandardowe
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

Odczyt (moduł)
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
Ciśnienie atmosferyczne (absolutne) Zmienna Tylko do odczytu

Ciśnienie atmosferyczne bez kompensacji wysokości — zakres 700–1100 hPa

numeric Jednostka: hPa JSON parsejson()

Ciśnienie atmosferyczne (absolutne)

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

VAR value := PARSEJSON(responseJson,"data.pressure.absolute.value");
RETURN(TODOUBLE(value));
Ciśnienie atmosferyczne (względne) Zmienna Tylko do odczytu

Ciśnienie atmosferyczne skompensowane na wysokość — odpowiednik poziomu morza w hPa

numeric Jednostka: hPa JSON parsejson()

Ciśnienie atmosferyczne (względne)

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

VAR value := PARSEJSON(responseJson,"data.pressure.relative.value");
RETURN(TODOUBLE(value));
Opady dzienne Zmienna Tylko do odczytu

Skumulowane opady od północy w mm — reset o 00:00

numeric Jednostka: mm JSON parsejson()

Opady dzienne

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

VAR value := PARSEJSON(responseJson,"data.rainfall.daily.value");
RETURN(TODOUBLE(value));
Opady godzinowe Zmienna Tylko do odczytu

Skumulowane opady w ostatnich 60 minutach (okno kroczące) w mm

numeric Jednostka: mm JSON parsejson()

Opady godzinowe

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

VAR value := PARSEJSON(responseJson,"data.rainfall.1_hour.value");
RETURN(TODOUBLE(value));
Temperatura wewnętrzna Czujnik temperatury Tylko do odczytu

Temperatura wewnętrzna mierzona przez konsolę (°C) i wilgotność (zakres 0–1)

numeric Jednostka: °C / % JSON parsejson()

Temperatura wewnętrzna

Odczyt wilgotności
IF(ISNULL(responseJson) | responseJson = "error")
    RETURN(NaN);
END

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

VAR value := PARSEJSON(responseJson,"data.indoor.temperature.value");
RETURN(TODOUBLE(value));
Opady miesięczne Zmienna Tylko do odczytu

Skumulowane opady od pierwszego dnia bieżącego miesiąca w mm

numeric Jednostka: mm JSON parsejson()

Opady miesięczne

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

VAR value := PARSEJSON(responseJson,"data.rainfall.monthly.value");
RETURN(TODOUBLE(value));
Zewnętrzny punkt rosy Zmienna Tylko do odczytu

Temperatura, w której powietrze zewnętrzne osiąga nasycenie parą wodną — obliczana z temperatury i wilgotności

numeric Jednostka: °C JSON parsejson()

Zewnętrzny punkt rosy

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

VAR value := PARSEJSON(responseJson,"data.outdoor.dew_point.value");
RETURN(TODOUBLE(value));
Zewnętrzna temperatura odczuwalna Zmienna Tylko do odczytu

Temperatura odczuwalna uwzględniająca windchill i indeks ciepła

numeric Jednostka: °C JSON parsejson()

Zewnętrzna temperatura odczuwalna

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

VAR value := PARSEJSON(responseJson,"data.outdoor.feels_like.value");
RETURN(TODOUBLE(value));
Temperatura zewnętrzna Czujnik temperatury Tylko do odczytu

Temperatura zewnętrzna (°C) i wilgotność (zakres 0–1) z bezprzewodowej macierzy czujników 7-w-1

numeric Jednostka: °C / % JSON parsejson()

Temperatura zewnętrzna

Odczyt wilgotności
IF(ISNULL(responseJson) | responseJson = "error")
    RETURN(NaN);
END

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

VAR value := PARSEJSON(responseJson,"data.outdoor.temperature.value");
RETURN(TODOUBLE(value));
Intensywność opadów Zmienna Tylko do odczytu

Bieżące natężenie opadów ekstrapolowane do mm/h

numeric Jednostka: mm/hr JSON parsejson()

Intensywność opadów

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

VAR value := PARSEJSON(responseJson,"data.rainfall.rain_rate.value");
RETURN(TODOUBLE(value));
Natężenie promieniowania słonecznego Zmienna Tylko do odczytu

Natężenie promieniowania słonecznego w W/m² — zakres 0–200 klux

numeric Jednostka: W/m² JSON parsejson()

Natężenie promieniowania słonecznego

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

VAR value := PARSEJSON(responseJson,"data.solar_and_uvi.solar.value");
RETURN(TODOUBLE(value));
Indeks UV Zmienna Tylko do odczytu

Indeks promieniowania ultrafioletowego w skali 0–15 — 0 w nocy, 10+ w południe latem

numeric JSON parsejson()

Indeks UV

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

VAR value := PARSEJSON(responseJson,"data.solar_and_uvi.uvi.value");
RETURN(TODOUBLE(value));
Opady tygodniowe Zmienna Tylko do odczytu

Skumulowane opady od początku bieżącego tygodnia w mm

numeric Jednostka: mm JSON parsejson()

Opady tygodniowe

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

VAR value := PARSEJSON(responseJson,"data.rainfall.weekly.value");
RETURN(TODOUBLE(value));
Kierunek wiatru Zmienna Tylko do odczytu

Kierunek kompasowy w stopniach — 0° północ, 90° wschód, 180° południe, 270° zachód

numeric Jednostka: ° JSON parsejson()

Kierunek wiatru

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

VAR value := PARSEJSON(responseJson,"data.wind.wind_direction.value");
RETURN(TODOUBLE(value));
Poryw wiatru Zmienna Tylko do odczytu

Szczytowa prędkość wiatru w interwale pomiarowym w km/h

numeric Jednostka: km/h JSON parsejson()

Poryw wiatru

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

VAR value := PARSEJSON(responseJson,"data.wind.wind_gust.value");
RETURN(TODOUBLE(value));
Prędkość wiatru Zmienna Tylko do odczytu

Stała prędkość wiatru z anemometru w km/h — zakres 0–180 km/h

numeric Jednostka: km/h JSON parsejson()

Prędkość wiatru

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

VAR value := PARSEJSON(responseJson,"data.wind.wind_speed.value");
RETURN(TODOUBLE(value));
Połączenie: Packet Parser → HTTP
Możliwe ulepszenia (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

Źródła