TapHome

Ecowitt WS2910 (Cloud API)

Packet Parser → HTTP
Eingereicht von
Zuletzt aktualisiert: 03. 2026
Ecowitt WS2910 (Cloud API)

Das Ecowitt WS2910-Template verbindet TapHome mit der WS2910 Farb-WLAN-Wetterstation über die Ecowitt Cloud API v3. Die WS2910-Konsole sammelt Daten von ihrem solarbetriebenen drahtlosen 7-in-1-Außensensor-Array (Temperatur, Luftfeuchtigkeit, Wind, Regen, Licht/UV) und ihren integrierten Innensensoren und lädt die Messwerte über WLAN auf den Ecowitt-Cloud-Server hoch. TapHome fragt die Cloud API über HTTPS ab und empfängt alle Sensordaten in einer einzigen JSON-Antwort.

Das Template bietet 16 Geräte zur Überwachung von Außen- und Innenbedingungen, Windmessungen, Niederschlagsakkumulation in vier Zeitskalen, Luftdruck, Sonneneinstrahlung und UV-Index. Die einzigen Voraussetzungen sind ein Ecowitt-Konto, die WS2910 mit WLAN-Verbindung und Datenupload auf ecowitt.net sowie drei API-Zugangsdaten.

Konfiguration

Ecowitt-Konto und WLAN-Einrichtung

Die WS2910-Konsole muss mit dem WLAN verbunden sein und Daten auf ecowitt.net hochladen. Die Ersteinrichtung erfolgt über die WSView Plus Mobilapp (iOS / Android):

  1. Versorgen Sie die Konsole mit dem mitgelieferten 5V-DC-Adapter (WLAN funktioniert nur mit DC-Stromversorgung, nicht mit Batterien)
  2. Halten Sie die Tasten WIND + PRESSURE ca. 5 Sekunden gedrückt, bis das WLAN-Symbol und M-B blinken
  3. Drücken Sie in der WSView Plus-App Configure New Device und folgen Sie den Anweisungen auf dem Bildschirm, um die Konsole mit dem lokalen WLAN-Netzwerk zu verbinden
  4. Aktivieren Sie das Hochladen auf Ecowitt Weather (ecowitt.net) im Server-Konfigurationsbildschirm

Nach der Konfiguration erscheinen die Sensordaten innerhalb weniger Minuten auf dem ecowitt.net-Dashboard.

API-Zugangsdaten erhalten

Für die TapHome-Integration werden drei Zugangsdaten benötigt. Alle werden auf ecowitt.net erstellt und verwaltet:

  1. Registrieren Sie ein Konto auf www.ecowitt.net (falls nicht bereits bei der WLAN-Einrichtung geschehen)
  2. Stellen Sie sicher, dass die WS2910 auf dem Dashboard mit Live-Daten angezeigt wird
  3. Navigieren Sie zum Bereich API Management
  4. Erstellen Sie einen Application Key — dieser identifiziert die Anwendung, die auf die API zugreift
  5. Erstellen Sie einen API Key — ein benutzerspezifischer UUID-String
  6. Ermitteln Sie die MAC-Adresse der WS2910 — sichtbar in der WSView Plus-App unter Device List oder auf dem ecowitt.net-Dashboard
Import-Parameter

Beim Import des Templates in TapHome geben Sie ein:

ParameterBeschreibungWo zu finden
Application keyAnwendungskennung von ecowitt.netAPI Management → Application Key
API keyBenutzer-API-Schlüssel (UUID-Format)API Management → API Key
Mac addressGeräte-MAC-Adresse (XX:XX:XX:XX:XX:XX)WSView Plus-App → Device List, oder ecowitt.net-Dashboard

Das Standard-Abfrageintervall beträgt 60 Sekunden (60.000 ms), passend zum Meldeintervall des Innensensors der Konsole. Der Außensensor meldet alle 16 Sekunden Daten an die Konsole, die Daten werden jedoch vor dem Upload von der Konsole aggregiert.

Internetabhängigkeit

Dies ist eine reine Cloud-Integration. Alle Daten fließen über den Ecowitt-Cloud-Server (api.ecowitt.net:443). Das Template funktioniert nicht ohne aktive Internetverbindung sowohl auf dem TapHome Core als auch auf der WS2910-Konsole.

Die WS2910-Konsole fungiert gleichzeitig als Display und WLAN-Gateway — kein separates Gateway-Gerät erforderlich. Solange die Konsole mit dem DC-Adapter versorgt und mit dem WLAN verbunden ist, werden Daten automatisch hochgeladen.

Gerätefunktionen

Temperatur und Luftfeuchtigkeit

Das Gerät Outdoor Temperature liest Temperatur (°C) und Luftfeuchtigkeit (%) vom drahtlosen 7-in-1-Sensor-Array ab. Der Außensensor hat einen Bereich von −40 °C bis 60 °C mit ±1 °C Genauigkeit und Luftfeuchtigkeit von 1 % bis 99 % mit ±5 % Genauigkeit. Die Luftfeuchtigkeit wird durch 100 geteilt für den TapHome 0–1 Analogeingangsbereich.

Das Gerät Indoor Temperature liest Temperatur und Luftfeuchtigkeit von den integrierten Sensoren der Konsole. Der Innentemperaturbereich ist −10 °C bis 60 °C, Luftfeuchtigkeit 1 % bis 99 %.

Zwei zusätzliche berechnete Werte sind verfügbar:

  • Outdoor Feels Like Temperature — gefühlte Temperatur unter Berücksichtigung von Windchill (unter ~10 °C) und Hitzeindex (über ~27 °C), berechnet von der Ecowitt-Cloud aus Lufttemperatur, Luftfeuchtigkeit und Windgeschwindigkeit
  • Outdoor Dew Point — die Temperatur, bei der die Außenluft die Wasserdampfsättigung erreicht, berechnet aus Temperatur und Luftfeuchtigkeit
Windmessungen

Drei Geräte decken die Winddaten vom Anemometer und der Windfahne am Außensensor-Array ab:

  • Wind Speed — anhaltende Windgeschwindigkeit in km/h. Bereich 0–180 km/h, Genauigkeit ±1 m/s (unter 5 m/s) oder ±10 % (über 5 m/s)
  • Wind Gust — maximale Windgeschwindigkeit über das Messintervall (höchster 3-Sekunden-Durchschnitt) in km/h
  • Wind Direction — Kompassrichtung, aus der der Wind weht, in Grad (0° = Nord, 90° = Ost, 180° = Süd, 270° = West)
Niederschlag

Vier Geräte verfolgen die Niederschlagsakkumulation in verschiedenen Zeitskalen, plus eine momentane Rate:

  • Hourly Precipitation — akkumulierter Niederschlag in den letzten 60 Minuten (gleitendes Fenster) in mm
  • Daily Precipitation — akkumulierter Niederschlag seit Mitternacht in mm
  • Weekly Precipitation — akkumulierter Niederschlag seit Beginn der aktuellen Woche in mm
  • Monthly Precipitation — akkumulierter Niederschlag seit dem ersten Tag des aktuellen Monats in mm
  • Rain Rate — aktuelle Niederschlagsintensität, extrapoliert auf mm/h. Genauigkeit des Niederschlagsvolumens ±10 % bei 0,3 mm Auflösung
Luftdruck
  • Air Pressure (Absolute) — Luftdruck ohne Höhenkompensation in hPa. Bereich 700–1100 hPa, Genauigkeit ±3 hPa
  • Air Pressure (Relative) — Luftdruck kompensiert auf die Höhe (Meereshöhen-Äquivalent) in hPa
Sonneneinstrahlung und UV
  • Solar Irradiance — Sonnenstrahlenintensität in W/m². Lichtsensor-Bereich 0–200 klux, Genauigkeit ±15 %
  • UV Index — Ultraviolettstrahlungsindex auf der internationalen Skala 0–15 (0 nachts, 10+ zur Mittagszeit im Sommer)
Zusätzliche Funktionen

Die Ecowitt Cloud API liefert auch eine Niederschlagsakkumulation pro Ereignis (wird zurückgesetzt, wenn der Regen aufhört) und den jährlichen Gesamtniederschlag. Diese sind in der API-Antwort verfügbar, werden aber vom aktuellen Template nicht ausgewertet. Die WS2910-Hardware unterstützt bis zu 8 zusätzliche WN31-Mehrkanal-Temperatur-/Feuchtigkeitssensoren und bis zu 2 WH41/WH43 PM2.5-Luftqualitätssensoren — die API stellt diese wahrscheinlich unter zusätzlichen Datenpfaden bereit. Außen- und Innenluftfeuchtigkeit sind derzeit nur als Teil der jeweiligen Temperaturgeräte verfügbar; eigenständige Feuchtigkeitsgeräte könnten in einem zukünftigen Template-Update hinzugefügt werden.

Fehlerbehebung

API gibt Fehler oder keine Daten zurück
  1. Überprüfen Sie, ob die WS2910 auf ecowitt.net online ist — melden Sie sich am Dashboard an und prüfen Sie, ob Live-Daten angezeigt werden
  2. Bestätigen Sie die Richtigkeit aller drei Zugangsdaten: Application Key, API Key und MAC-Adresse
  3. Stellen Sie sicher, dass das MAC-Adressen-Format exakt übereinstimmt (XX:XX:XX:XX:XX:XX mit Doppelpunkten)
  4. Prüfen Sie, ob die WS2910-Konsole mit dem DC-Adapter versorgt wird (WLAN funktioniert nicht allein mit Batteriebetrieb)
Veraltete oder verzögerte Messwerte

Die Ecowitt Cloud API gibt die neuesten von der WS2910-Konsole hochgeladenen Daten zurück. Die Konsole lädt Daten im während der Einrichtung konfigurierten Intervall hoch (Standard 5 Minuten für die ecowitt.net-Speicherung). Das Template fragt die API alle 60 Sekunden ab, aber die zugrunde liegenden Daten können sich je nach Upload-Intervall weniger häufig aktualisieren.

Standardeinheiten sind imperial

Die Ecowitt API gibt Daten standardmäßig in imperialen Einheiten (°F, inHg, mph, Zoll) zurück. Das Template setzt explizit metrische Einheiten-IDs in der API-URL (temp_unitid=1, pressure_unitid=3, wind_speed_unitid=7, rainfall_unitid=12, solar_irradiance_unitid=16), um alle Werte in metrischen Einheiten zu empfangen. Diese Einheiten-IDs sollten nicht geändert werden.

Die Ecowitt Cloud API erfordert eine aktive Internetverbindung und ist von der Verfügbarkeit des Ecowitt-Cloud-Servers abhängig. Bei Cloud-Ausfällen oder Internetunterbrechungen empfängt das Template keine aktualisierten Daten.

Verfügbare Geräte

Ecowitt WS2910 Modul
Benutzerdefinierte Variablen
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

Lesen (Modul)
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
Luftdruck (absolut) Variable Nur lesen

Luftdruck ohne Höhenkompensation — Bereich 700–1100 hPa

numeric Einheit: hPa JSON parsejson()

Luftdruck (absolut)

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

VAR value := PARSEJSON(responseJson,"data.pressure.absolute.value");
RETURN(TODOUBLE(value));
Luftdruck (relativ) Variable Nur lesen

Höhenkompensierter Luftdruck — Meereshöhen-Äquivalent in hPa

numeric Einheit: hPa JSON parsejson()

Luftdruck (relativ)

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

VAR value := PARSEJSON(responseJson,"data.pressure.relative.value");
RETURN(TODOUBLE(value));
Tagesniederschlag Variable Nur lesen

Akkumulierter Niederschlag seit Mitternacht in mm — Reset um 00:00

numeric Einheit: mm JSON parsejson()

Tagesniederschlag

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

VAR value := PARSEJSON(responseJson,"data.rainfall.daily.value");
RETURN(TODOUBLE(value));
Stündlicher Niederschlag Variable Nur lesen

Akkumulierter Niederschlag in den letzten 60 Minuten (gleitendes Fenster) in mm

numeric Einheit: mm JSON parsejson()

Stündlicher Niederschlag

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

VAR value := PARSEJSON(responseJson,"data.rainfall.1_hour.value");
RETURN(TODOUBLE(value));
Innentemperatur Temperatursensor Nur lesen

Von der Konsole gemessene Innentemperatur (°C) und Luftfeuchtigkeit (Bereich 0–1)

numeric Einheit: °C / % JSON parsejson()

Innentemperatur

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

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

VAR value := PARSEJSON(responseJson,"data.indoor.temperature.value");
RETURN(TODOUBLE(value));
Monatsniederschlag Variable Nur lesen

Akkumulierter Niederschlag seit dem ersten Tag des aktuellen Monats in mm

numeric Einheit: mm JSON parsejson()

Monatsniederschlag

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

VAR value := PARSEJSON(responseJson,"data.rainfall.monthly.value");
RETURN(TODOUBLE(value));
Außentaupunkt Variable Nur lesen

Temperatur, bei der die Außenluft Wasserdampfsättigung erreicht — berechnet aus Temperatur und Luftfeuchtigkeit

numeric Einheit: °C JSON parsejson()

Außentaupunkt

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

VAR value := PARSEJSON(responseJson,"data.outdoor.dew_point.value");
RETURN(TODOUBLE(value));
Gefühlte Außentemperatur Variable Nur lesen

Gefühlte Temperatur unter Berücksichtigung von Windchill und Hitzeindex

numeric Einheit: °C JSON parsejson()

Gefühlte Außentemperatur

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

VAR value := PARSEJSON(responseJson,"data.outdoor.feels_like.value");
RETURN(TODOUBLE(value));
Außentemperatur Temperatursensor Nur lesen

Außentemperatur (°C) und Luftfeuchtigkeit (Bereich 0–1) vom drahtlosen 7-in-1-Sensor-Array

numeric Einheit: °C / % JSON parsejson()

Außentemperatur

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

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

VAR value := PARSEJSON(responseJson,"data.outdoor.temperature.value");
RETURN(TODOUBLE(value));
Regenrate Variable Nur lesen

Aktuelle Niederschlagsintensität, extrapoliert auf mm/h

numeric Einheit: mm/hr JSON parsejson()

Regenrate

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

VAR value := PARSEJSON(responseJson,"data.rainfall.rain_rate.value");
RETURN(TODOUBLE(value));
Sonneneinstrahlung Variable Nur lesen

Sonnenstrahlenintensität in W/m² — Bereich 0–200 klux

numeric Einheit: W/m² JSON parsejson()

Sonneneinstrahlung

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

VAR value := PARSEJSON(responseJson,"data.solar_and_uvi.solar.value");
RETURN(TODOUBLE(value));
UV-Index Variable Nur lesen

Ultraviolettstrahlungsindex auf der Skala 0–15 — 0 nachts, 10+ zur Mittagszeit im Sommer

numeric JSON parsejson()

UV-Index

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

VAR value := PARSEJSON(responseJson,"data.solar_and_uvi.uvi.value");
RETURN(TODOUBLE(value));
Wochenniederschlag Variable Nur lesen

Akkumulierter Niederschlag seit Beginn der aktuellen Woche in mm

numeric Einheit: mm JSON parsejson()

Wochenniederschlag

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

VAR value := PARSEJSON(responseJson,"data.rainfall.weekly.value");
RETURN(TODOUBLE(value));
Windrichtung Variable Nur lesen

Kompassrichtung in Grad — 0° Nord, 90° Ost, 180° Süd, 270° West

numeric Einheit: ° JSON parsejson()

Windrichtung

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

VAR value := PARSEJSON(responseJson,"data.wind.wind_direction.value");
RETURN(TODOUBLE(value));
Windböe Variable Nur lesen

Maximale Windgeschwindigkeit über das Messintervall in km/h

numeric Einheit: km/h JSON parsejson()

Windböe

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

VAR value := PARSEJSON(responseJson,"data.wind.wind_gust.value");
RETURN(TODOUBLE(value));
Windgeschwindigkeit Variable Nur lesen

Anhaltende Windgeschwindigkeit vom Anemometer in km/h — Bereich 0–180 km/h

numeric Einheit: km/h JSON parsejson()

Windgeschwindigkeit

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

VAR value := PARSEJSON(responseJson,"data.wind.wind_speed.value");
RETURN(TODOUBLE(value));
Verbindung: Packet Parser → HTTP
Mögliche Verbesserungen (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

Quellen