Wetterstationen

Protokolldefinition zum Datenaustausch WS980 zum PC

Beiträge zu diesem Thema: 37
1 von 2
Für Aktionen im ELV-Technik-Netzwerk müssen Sie sich ein Profil erstellen

ELV WiFi-Wetterstation WS980WiFi, inkl. Funk-Außensensor (868 MHz), App, PC-Auswertesoftware

Artikel-Nr.: 250408

zum Produkt
Protokolldefinition zum Datenaustausch WS980 zum PC
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
01.02.2019, 09:37
Hallo,

ich würde die Daten gerne aus der Basisstation mit einem eigenen Programm (C#) auslesen um es in die Hausautomation zu integrieren. Das ist über das Programm WetherSmartIp und Export zu umständlich.

Die Daten können ja über Port 45000 angefordert werden. Die Frage ist nun, gibt es eine Beschreibung zum Protokoll?
Welcher Sensor welche Indexnummer hat und wie die einzelnen Werte Codiert sind?
Für die Temperaturen ist das recht einfach (2 Byte, der Wert in 1/10°C)
Gibt es eine Doku zum Protokoll?

Gruß Rainer
Aw: Protokolldefinition zum Datenaustausch WS980 zum PC
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
03.02.2019, 21:42
Hallo,

einiges habe ich nun schon herausbekommen:

wenn mann folgende Daten { 0xff, 0xff, 0x12, 0x00, 0x04, 0x16 } per UDP Broadcast Port 46000 sendet, so antwortet die Wetterstation mit ihrem Namen, IP und Port.
Damit kann man dann eine TCP Verbindung aufbauen.
Sendet man dorthin { 0xff, 0xff, 0x0b, 0x00, 0x06, 0x04, 0x04, 0x19 }, so antwortet die WS mit den aktuellen Sensordaten.
Diese sind binär codiert und werden über einen Index identifiziert:
1: TempIn = 21,1°C
2: TempOut = 20,4°C
3: TempTau = 10,0°C
4: TempX = 20,4°C
5: TempHitzeIdx = 20,4°C
6: FeuchteIn = 48,0%
7: FeuchteOut = 51,0%
8: Druck1 = 981,5hPa
9: Druck2 = 981,5hPa
10: Windrichtung = 170,0°
11: Windgeschw = 0,0m/s
12: WindBö = 0,0m/s
14: Regen/h = 0,0mm
16: Regen/d = 0,0mm
17: Regen/w = 25,4mm
18: Regen/M = 203,3mm
19: Regen/J = 503,3mm
20: Regen/T = 703,3mm
21: Licht = 0,0lux
22: ??? =136960,0
Über andere Befehle erhält man Min- und Max-Werte sowie weitere mir bisher unbekannte Daten.

Kennt jemand das Protokoll?
Oder verwendet eine andere Wetterstation das gleiche oder ein ähnliches Protokoll?

Gruß Rainer
Aw: Protokolldefinition zum Datenaustausch WS980 zum PC
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
06.02.2019, 21:38
Hi,

vielen Dank für die Auflistung, hat mir einiges an Arbeit gespart :)

Zu den letzen Werten:

Bei mir sieht es so aus, als ob es eine 22 und eine 23 gibt:

... 22 0 1 23 0 224 27

Aber zuordnen konnte ich das bisher auch nicht.

LG
Christian
Aw: Protokolldefinition zum Datenaustausch WS980 zum PC
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
07.02.2019, 12:54
Hallo,

ja, 22 und 23 je 2 Bytes.
Ich vermute ja den UV-Index, den habe ich noch nirgens.

Was ist das letzte Byte ein CRC-Check?

Rainer
Aw: Protokolldefinition zum Datenaustausch WS980 zum PC
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
07.02.2019, 20:39
Hi,

> ja, 22 und 23 je 2 Bytes.
> Ich vermute ja den UV-Index, den habe ich noch nirgens.

UV und Solar Radiation.

Heute Mittag passte die 22 ganz gut zu Solar Radiation, aber jetzt zeigt die '2' an, während folgendes an Wundergroud gesendet wird:

indoortempf=72.7&tempf=43.3&dewptf=36.0&windchillf=43.3&indoorhumidity=39&humidity=75&windspeedmph=0.2&windgustmph=1.1&winddir=67&absbaromin=29.75&baromin=29.75&rainin=0.00&dailyrainin=0.07&weeklyrainin=0.09&monthlyrainin=0.32&yearlyrainin=0.42&solarradiation=0.00&UV=0&dateutc=2019-02-07%2019:25:09&softwaretype=EasyWeatherV1.3.1&action=updateraw&realtime=1&rtfreq=5

An einen CRC-Check dachte ich auch. Alle Pakete, die ich aufgezeichnet habe, hatten sowas, ausser die Antwort mit der Firmware:

-> ffff500353
<- ffff501511456173795765617468657256312e332e31
0000 ff ff 50 15 11 45 61 73 79 57 65 61 74 68 65 72 ÿÿP..EasyWeather
0010 56 31 2e 33 2e 31 V1.3.1

LG
Christian
Aw: Protokolldefinition zum Datenaustausch WS980 zum PC
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
08.02.2019, 18:55
Hallo Christian,

welche Befehle hast du denn bisher herausgefunden.
Ich kenne folgende:

befActValues = { 0xff, 0xff, 0x0b, 0x00, 0x06, 0x04, 0x04, 0x19 }; // Aktuell
befMaxValues = { 0xff, 0xff, 0x0b, 0x00, 0x06, 0x05, 0x05, 0x1b }; // MAX
befMinValues = { 0xff, 0xff, 0x0b, 0x00, 0x06, 0x06, 0x06, 0x1d }; // Min

Gruß Rainer
Aw: Protokolldefinition zum Datenaustausch WS980 zum PC
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
08.02.2019, 19:43
ok, Version kann ich nun auch abfragen.

Bei mir kommt 1.2.2, bei eriner letzten Woche gekauften Wetterstation.
Wie kommst du auf 1.3.1?
Gibt es eine Updatemöglichkeit?

Rainer
Aw: Protokolldefinition zum Datenaustausch WS980 zum PC
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
09.02.2019, 08:42
Moin,

das Update auf 1.3.1 habe ich mit der iOS-App "WS View" gemacht.

Ich habe angefangen, aus den Erkenntnissen ein FHEM-Modul für die WS980 zu schreiben, daher habe ich die anderen Daten noch nicht wirklich weiter analysiert.

Werde ich aber vermutlich tun, sobald ich sie dann in das Modul einbaue, dann werde ich meine Findings auch hier weiter posten. :)

LG
Christian
Aw: Protokolldefinition zum Datenaustausch WS980 zum PC
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
09.02.2019, 15:29
Hi,
danke für den Tipp, habe nun auch V1.3.1 :-)
Wenn ich neue Erkenntnisse habe poste ich auch hier ...

Gruß Rainer
Aw: Protokolldefinition zum Datenaustausch WS980 zum PC
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
09.02.2019, 16:07
Hi,

Um nochmal auf die 22 und 23 zurückzukommen:

... 22 0 1 23 0 224 27

Ich bin mir inzwischen ziemlich sicher, das das byte nach der 23 (die 2. '0') der UV-Index ist, allerdings weiss ich nicht, was das 2. byte soll. Und die 22 ist mir nach wie vor vollkommen unklar.

LG
Christian
Aw: Protokolldefinition zum Datenaustausch WS980 zum PC
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
09.02.2019, 16:45
Und hier noch die letzten findings:

Das 5. Byte in den Antworten gibt (meist) die Gesamtlänge der Antwort an, exkl. der ersten zwei FF-Bytes.

Das letze Byte ist eine Checksumme: Und zwar sind es die letzen zwei Stellen des Ergebnisses der Addition aller Bytes wieder exkl. der ersten zwei FF-Bytes.

LG
Christian
Aw: Protokolldefinition zum Datenaustausch WS980 zum PC
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
09.02.2019, 16:51
22 hat auf jeden Fall was mit Licht zu tun.
Wenn ich die Aufzeichnung vergleiche, so sieht der Verlauf fast identisch aus. val21/val22 liegt immer zwischen 121...129

LG Rainer
Aw: Protokolldefinition zum Datenaustausch WS980 zum PC
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
09.02.2019, 17:49
das mit der Prüfsumme stimmt bei mir noch nicht ....
meine Summe ist immer viel kleiner
Aw: Protokolldefinition zum Datenaustausch WS980 zum PC
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
09.02.2019, 21:22
Interessant, bei mir passt es einwandfrei.

Z.B. hier:
-> ffff0b0006040419
<- ffff0b0050040100d302005e03000d04005e05005e062407390827a60927 \
a60a006d0b00080c000a0e00000000100000000011000000051200000040 \
1300000059140000005915000077e216001b1700d709
Aw: Protokolldefinition zum Datenaustausch WS980 zum PC
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
10.02.2019, 10:04
Und noch eine Erkenntnis (todayMax und todayMin):

Die folgenden Requests kenn' ich und kann ich parsen:

### Request current Firmware
-> ffff500353

### Request current values
-> ffff0b0006040419

### Request historyMax
-> ffff0b000605051b

### Request historyMin
-> ffff0b000606061d

### Request todayMax
-> ffff0b000607071f

### Request todayMin
-> ffff0b0006080821

Das 'historyMax'- und 'historyMin'- Format ist analog zu 'current'.
Bei 'todayMax' und 'todayMin' sind jeweils noch die Uhrzeiten als zwei Bytes hinten an die jeweiligen Werte angehängt. Die Indizes lauten hier nicht 0x01, sondern 0x41.

LG und einen schönen Sonntag.
Christian
Aw: Protokolldefinition zum Datenaustausch WS980 zum PC
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
10.02.2019, 13:40
Hi,
danke für die Info.
Checksum passt nun.

Neue Infos zu val22 und val23:

val22: 2 Bytes UV-Raw value
val23: 2 Bytes UV-Index Raw value

aus val23 kann der UV-Index folgendermaßen berechnet werden:


byte GetUvIdx(double? value)
{
if (!value.HasValue) return 0;
int UvIdxBorders = new int { 0, 99, 540, 1000, 1400, 1843, 2292, 2734, 3138, 3648, 4196, 4707, 5209, 5735, 6276, 6778 };
for (byte i = 0; i < UvIdxBorders.Length; i++)
{
if (value < UvIdxBorders) return (byte)(i - 1);
}
return 15;
}


Gruß Rainer
Aw: Protokolldefinition zum Datenaustausch WS980 zum PC
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
10.02.2019, 17:34
Das hört sich ja interessant an.

Ich habe da einen anderen Weg genommen:
über die App WS-View kann man die Webservices konfigurieren. An welche URLs die Wetterstation die Daten schickt.
Leider nicht direkt. Dazu müsste man das Kommunikationsprotokoll der WS-View abhorchen.

Aber über die WS-View App kann man die Anbieter wunderground.com, weathercloud.net, weatherobservationwebsite konfigurieren.

Wenn man nun über die persönliche Internet Firewall, ein Static-Routing auf einen eigenen Server einrichtet, so kann man die Daten welche die Wetterstation sendet umleiten:

rtupdate.wunderground.com
54.68.202.145
54.68.5.241

GET /weatherstation/updateweatherstation.php?ID=XXXXXXX&PASSWORD=YYYYYY&indoortempf=77.4&tempf=36.5&dewptf=33.8&windchillf=33.4&indoorhumidity=33&humidity=90&windspeedmph=3.8&windgustmph=4.5&winddir=234&absbaromin=28.18&baromin=28.18&rainin=0.07&dailyrainin=0.01&weeklyrainin=0.01&monthlyrainin=0.20&yearlyrainin=0.35&solarradiation=0.00&UV=0&dateutc=2019-02-02%2023:13:57&softwaretype=EasyWeatherV1.3.1&action=updateraw&realtime=1&rtfreq=5 HTTP/1.0




wow.metoffice.gov.uk
23.102.25.149

GET http://wow.metoffice.gov.uk/automaticreading?siteid=XXXXXXX&siteAuthenticationKey=YYYYYYY&dateutc=2019-02-03%2000:05:27&winddir=274&windspeedmph=1.3&windgustmph=2.2&humidity=90&dewptf=34.0&tempf=36.7&dailyrainin=0.05&baromin=28.20&softwaretype=EasyWeatherV1.3.1 HTTP/1.0


XXXXX entspricht dem Stationsnamen oder useraccount und YYYYY dann dem Passwort.

Leider hatte ich noch keine Zeit ein Server Programm zu erstellen, dass die Daten annimmt und in eine Datenbank schreibt.


Interessant wäre natürlich wenn die Wetterstation direkt konfigurierbar wäre oder direkt per http get abgefragt werden könnte. Dazu müsste der Datenverkehr der WS-View App belauscht werden.





Aw: Protokolldefinition zum Datenaustausch WS980 zum PC
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
10.02.2019, 17:55
Hallo,

also ich habe das Programm WeatherSmartIP von elv benutzt. Das kommuniziert direkt mit der Wetterstation über TCP Port 45000.
Mit WireShark kann man dann die Kommunikation mitschneiden.
So habe ich das meiste herausbekommen.
Die Parametrierung geht auch über das Programm, habe ich aber noch nicht analysiert.

Auch die WS-View App (Android)nutzt tcp Port 45000 für die direkte Kommunikation. Dorther stammt die Bestimmung des UV-Index. s.o.

Wetterserver will ich nicht benutzen und auch keinen eigenen simulieren.

Mein Ziel ist die Intergration in meine Hausautomation (C#, Eigenentwicklung) .

Gruß
Rainer
Aw: Protokolldefinition zum Datenaustausch WS980 zum PC
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
10.02.2019, 20:40
Hallo zusammen,

zunächst @Rainer:
Sehr interessant mit val22 und val23. Magst Du noch mehr erläutern, wie Du an die Werte/Infos gekommen bist? Inwiefern hat WS-View da geholfen?

Ich hab' den Rest auch mit WeatherSmartIP und Wireshark gemacht :)

@Stefan:
Den Ansatz wollte ich auch zunächst verfolgen, ist mir aber zu kompliziert ;). Insbesondere jetzt, wo ich alles, was ich brauch' auch direkt auslesen kann.

LG
Christian
Aw: Protokolldefinition zum Datenaustausch WS980 zum PC
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
10.02.2019, 21:30
Ich habe deine Werte zum errechnen des UV-Index mal an Google übergeben und habe einen schönen Treffer:

https://github.com/matthewwall/weewx-wh23xx/blob/master/bin/user/wh23xx.py

Hier steht alles, was wir wissen wollen :)

LG
Christian
Aw: Protokolldefinition zum Datenaustausch WS980 zum PC
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
12.02.2019, 18:48
Hallo Christian,

der Link ist sehr gut, da bekommt mann einige neue Erkenntnisse, z.B. Sensor Idx + 0x40 = mit Zeit +0x80 = mit Datum und Zeit

zu WS-View: Das kann ja auch die Daten direkt anzeigen, und die Android Verson ist ja in Java, da kann man den Code ansehen...

Gruß
Rainer
Aw: Protokolldefinition zum Datenaustausch WS980 zum PC
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
13.02.2019, 19:46
Hi,

Ah, Java, stimmt.

Der Code unter der URL macht es ja etwas anders. also 22 und 23 (bzw. 0x16 und 0x17).

Die 22 hat nach denen 2 Byte lánge und ist der RawUV-Wert, die 23 hat jedoch nur ein Byte länge und ist der bereits berechnete UV-Index.

Nach meiner weiteren Analyse passt das, denn:
Das vorletze Byte ist eine 2. Checksumme. Sie wird berechnet wie die Erste, umfasst jedoch nur die Daten ab dem 6. Byte, welches ja immer den Typ der Anfrage wiederholt (04, 05, 06, 07, 08), bis zum letzen vor der 2. Checksum. Enthält also nicht die Länge des Pakets.

Z.B. die Current-Anfrage:

ff ff 0b 00 06 04 04 19
ff ff 0b LL LL TT C1 C2

LL LL: Länge des Pakets exkl. 'ff ff'
TT : Typ des requests (04, 05, 06, 07, 08)
C1 : Checksumme 1 über SUMME(04) = 04
C2 : Checksumme 2 über SUMME(0B 00 06 04 04) = 19


Das selbe funktioniert auch bei den Antworten von der WS980 :)

LG
Christian
Aw: Protokolldefinition zum Datenaustausch WS980 zum PC
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
14.02.2019, 00:16
hi,

das mit der Prüfsumme stimmt bei mir auch.

Rainer
Aw: Protokolldefinition zum Datenaustausch WS980 zum PC
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
17.02.2019, 18:30
Hallo,

habe noch was gefunden:
Für den TP2700 gibt es eine Beschreibung des Protokolls und der Schnittstellen (USB) und dem EEPROM Inhalt:

104.131.72.110/wp-content/uploads/2016/09/USBInterfaceEngDocs.zip

Vieles davon passt auch bei der WS980.

Gruß Rainer
1 von 2
Profil erstellen