====== USB Protokoll Oregon Scientific WMR-100 Wetterstation ======
Die WMR100 ist vom Preis-Leistungsverhältnis unschlagbar. Da diese Station eine der ersten mit
USB-Anschluss ist, ist zur Zeit die Auswahl an Software nicht besonders groß. Zum Teil völlig
überladen mit Funktionen, nur für Windows u.s.w. Da ich ohnehin eine kleine Anwendung selber
programieren wollte war die WMR100 die ideale Wahl für mich.
Durch einfaches Ausprobieren (Display ablesen und selben Wert im USB-Verkehr finden) kann
man die richtigen Bytes schnell ohne Probleme finden - da steckt kein Geheimnis dahinter.
Die Kommunikation mit der WMR100 findet als HID-Device statt, nicht als USB-Seriell
wie zuerst erwartet.
WMR100 USB Kennung:
USB\Vid_0fde&Pid_ca01&Rev_0302
(USB-HID Human Interface Device)
WMR100 Initialisierung:
Zuerst muss nach dem Start einmalig folgendes Frame
gesendet werden:
20 00 08 01 00 00 00 00 (einmal)
Die WMR100 sendet daraufhin im Rhythmus von ca. 3..7 Sekunden jeweils 3..4 einzelne Nachrichten.
Die Checksumme wird durch einfache Summierung aller Bytes in der Botschaft exklusive dem Checksummen-Byte berechnet. Vom Ergebnis werden dann nur die niederwertigsten 8 Bits verwendet.
{{ :elektronik:selbstbau:wmr100:wmr100_station.jpg?nolink |}}
Uhrzeit und Datum:
30 60 00 00 1A 12 02 05 07 00 CA
FK xx xx xx AA BB CC DD EE xx CS
=> 18:26 02.05.2007
FK = Framekennung
AA = Minuten
BB = Stunden
CC = Tag
DD = Monat
EE = Jahr (2000 + EE)
CS = Checksumme
Barometer:
46 D2 03 13 34 62
FK xx Dx BB xA CS
=> $413=1043mbar
FK = Framekennung
D = Vorhersage (0 Partly Cloudy, 1 Rainy, 2 Cloudy, 3 Sunny, 4 Snowy)
xA = Highnibble Druck
BB = Lowbyte Druck
CS = Checksumme
Indoor:
42 80 07 01 1F 50 00 00 20 59
FK xS AA BB CC DD xx xx xx CS
=> $1F=31% $107=263/10=26.3Grad
FK = Framekennung
S = Sensorkennung $0=Indoor Channel 0
AA = Temperatur Lowbyte
BB = Temperatur Highbyte (Temperatur durch 10 Teilen), MSB bei Negativ gesetzt
CC = Feuchte in Prozent
DD = Spannungsversorgung ? (50 kein AC, 6E AC ok ?)
CS = Checksumme
WMR100 Aussensensor
{{ :elektronik:selbstbau:wmr100:wmr100_aussensensor.jpg?nolink |}}
Outdoor:
42 81 CA 00 26 3C 00 00 20 0F
FK xS AA BB CC xx xx xx xx CS
=> $CA=202/10=20.2 $26=38%
FK = Framekennung
S = Sensorkennung $1=Outdoor Channel 1
AA = Temperatur Lowbyte
BB = Temperatur Highbyte (Temperatur durch 10 Teilen), MSB bei Negativ gesetzt
CC = Feuchte in Prozent
CS = Checksumme
Wind:
48 00 0C 0C C0 00 00 20 40
FK xA xx BB xx xx xx xx CS
=> Windrichtung Nord, Geschwindigkeit 1,2m/s=4,32km/h
FK = Framekennung
xA = Windrichtung (Nord=0, Reihenfolge N-E-S-W = $00...$0F)
BB = Windgeschwindigkeit (*0,1 ergibt m/s dann mal 3,6 ergibt km/h)
CS = Checksumme
WMR100 Zusatzsensor
{{ :elektronik:selbstbau:wmr100:wmr100_zusatzsensor.jpg?nolink |}}
Externer Temp/Feuchte Sensor THGR810 :
42 42 E9 00 2B 64 00 00 20 1C
FK xS AA BB CC xx xx xx xx CS
=> $E9=233/10=23.3 $2B=43% Kanal2
FK = Framekennung
S = Sensorkennung $2=Outdoor Channel $2..$A=Dipschalter im Sender
AA = Temperatur Lowbyte
BB = Temperatur Highbyte (Temperatur durch 10 Teilen), MSB bei Negativ gesetzt
CC = Feuchte in Prozent
CS = Checksumme
WMR100 Regensensor
{{ :elektronik:selbstbau:wmr100:wmr100_regensensor.jpg?nolink |}}
Regenmesser:
41 00 00 00 00 00 00 57 01 13 0D 0F 03 07 D2
FK xx xx CC DD xx xx AA BB xx xx xx xx xx CS
=> $157=343/100=3.43inch*25,4=87,12mm
FK = Framekennung
AA = Gesamtmenge Lowbyte
BB = Gesamtmente Highbyte (durch 100 teilen, Einheit Inch!)
CC = aktuelle Menge Lowbyte
DD = aktuelle Menge Highbyte (durch 100 teilen, Einheit Inch!)
CS = Checksumme
WMR100 UVsensor
{{ :elektronik:selbstbau:wmr100:wmr100_uvsensor.jpg?nolink |}}
Externer UVN800 UV Sensor:
47 01 05 4D
FK xx AA CS
=> UV Index 5
FK = Framekennung
AA = UV Index ($00..??)
CS = Checksumme
Wer noch weitere Informationen im Byte-Strom finden konnte, kann sich gerne bei mir melden.