• Willkommen im Forum „Wetterstationsforum.info - Archiv“.
 

Neuigkeiten:

Dieses Forum dient ausschließlich zu Archivzwecken.
Für Fragen nutze bitte unser aktuelles Forum, welches du unter https://wetterstationsforum.info findest.

Hauptmenü

Protokoll MEBUS TE923

Begonnen von ExodusFan, 06.05.2007, 22:15:05

⏪ vorheriges - nächstes ⏩

BuzzDee

Ich hab grad noch mal nachgesehen in meinem Programm. Also die Leseabfrage 05:AF:00:00:98:37:00:00:00 ist wie folgt aufgebaut =>

05 -> die folgenden 5 Bytes dieses Wortes enthalten Daten
AF -> lese Speicher aus (Befehl)
00:00:98 -> von Adresse 0x980000 (Lowbyte zuerst)
37 -> Prüfsumme aus AF XOR 00 XOR 00 XOR 00 XOE 98

Alles was danach kommt ist sog. Garbage, also sinnlos. Ich schicke da glaube ich AF:FE  ;-)

Deine Antwort hat, wie gesagt ein ähnliches Format. Das erste Byte des 8 Byte langen Wortes gibt an, wie weit die Daten gehen. Die Daten selbst müssen 32 Bytes einnehmen. Erstes Byte muss 5A sein, sonst ist was schief gegangen. letztes Byte ist wieder XOR Prüfsumme. Frag mal die Adresse 0x020001 ab, dort stehen die aktuellen Wetterdaten. Nach dem 5A kommt in zwei Bytes die Innentemperatur und im nächsten die Luftfeuchte. Im ersten Byte ist BCD codiert die Temperatur (Einer und Zehntel) von 0,0 bis 9,9 Grad. Im zweiten Nibble des zweiten Bytes stehen dann die Zehner, wieder BCD Codiert. Im ersten Nibble steht im ersten Byte (von vorne gezählt, also im Bit 2^7) ob's positiv oder negativ ist. (1 = Negativ). Wenn dann im Bit 2^5 noch ne 1 steht, dann kannst noch mal 0.05° dazu rechnen. Die Station macht intern ne höhere Auflösung, als sie auf dem Display anzeigt. Frag jetzt aber bitte nicht nach der Genauigkeit.  Naja und im dritten Byte steht die Luftfeuchte, wieder BCD. Wenn Du das hin hast, sehen wir weiter. Du kannst auch mein Programm ansehen, da ist eigentlich alles drin, aber es aus den Quellen lesen ist vielleicht nicht ganz so schön wie es beschrieben bekommen. http://www.fukz.de ich schiebe nachher gleich noch Version 0.4 raus, hab sehr viel umgebaut.

nane

sehr interessant zu lesen .. aaaaber .. habe nur sehr wenig erfahrungen mit c++, über den Bloodshed Dev-C++

auf welcher grundlage sprecht ihr die usb schnittstelle an .. mit dieser - mir rätselhaft verschlossenen - usb.dll ? (scheint ja universal usb nutzbar)

hab mich mal ne zeit damit befasst, bin aber nicht wirklich schlauer geworden, mangels zu findender informationen  :wirr:

kennt evtl. jemand einen nutzbaren c++ source dafür ?

fragen über fragen  :kaffee:   :roll:

Barny

Hallo,

im Moment kann ich nur einen VB-Code anbieten. Ich spreche die USB-Schnittstelle über die APIs an. In der USB.Dll sind diese im wesentlichen nur gekapselt.

Zu Sebastian:
ich habe, Deinem Vorschlag folgend, die Adresse 0x020001 angesprochen. Hier sind die Ergebnisse, die ich leider nicht wirklich intepretieren kann. Vielleicht kannst du mir noch eine Hilfe geben.
Gesendet:
05 AF 01 00 02 AC 00 00
(Abfrage der ADRESSE: 0x020001)   

erhalten
01 5A 00 26 00 0C 45 00
05 88 81 46 75 C0 45 00
07 64 0A 00 0A 0A 00 0A
07 0A 00 0A 0A 00 0A 00
07 00 DD 3D 05 51 C0 25
07 00 25 00 0B 45 00 FE
00 00 00 00 00 00 00 00

Temp A: 7,5°, 64%
Temp I:18,7°, 46%
 
Gruß Barny

Barny

Zitat von: "nane"
kennt evtl. jemand einen nutzbaren c++ source dafür ?
fragen über fragen  :kaffee:   :roll:

wenn du einen allgemeinen Sourcecode für Windows suchst, wirst du unter dem Stichwort USB HID C++ einiges finden. Die Wetterstation wird als HID erkannt. Die Abfragen musst Du dann selber programmieren. Einen speziellen Sourcecode für die Wetterstation habe ich nicht gefunden. Meinen VB-Code werde ich nach Fertigstellung zur Verfügung stellen.

BuzzDee

@nane
Naja, die usb.dll ist leider nicht Quelloffen und damit ja schon mal Schrott. Ich entwickle nur unter Linux mit C. Dabei verwende ich die quelloffenen libusb (http://libusb.wiki.sourceforge.net/) Bibliotheken. Die gibts auch für Windows, kann ich aber nichts zu sagen. Letztendlich musst Du irgendwie mit der Schnittstelle sprechen können. Da das ganze Hardwarenahe ist, wird sich nicht jede Sprache nutzen lassen. Ich hab da aber keine Übersicht, wie das unter Windows aussieht.

@Barny
Das sieht schon mal gut aus. Der reine Datensatz sieht dann so aus:
5A
88 81 46 75 C0 64 0A 00
0A 0A 00 0A 0A 00 0A 0A
00 0A 00 00 DD 3D 05 51
C0 25 00 25 00 0B 45 00
FE

Ich versuche den Datensatz jetzt mal auseinander zu nehmen. Wenn ich von einem bestimmten Bit spreche (0 bis 7) ist immer innerhalb des Bytes das Bit 2^x gemeint. Also Bit 0 ist 2^0 und bit 7 2^7. Also von rechts beginnend. Wenn in einem Byte nur eines der Nibble interessant ist, maskiere ich das andere mit x.

5A -> eine Antwort
32 Bytes Antwort
FE -> Checksumme XOR über 5A und die 32 Bytes (stimmt übrigens in diesem Beispiel).

88 81 -> Innentemperatur.
88 [BCD] -> 8,8 °C
81 Bits 0 bis 3 BCD *10 °C => + 10°C
  Bits 4 bis 7 -> wenn Bit 5 gesetzt, +0,05 °C (hier nicht)
                  wenn Bit 7 gesetzt, positive Temperatur (hier ja)

Du hast also 18,8° bei Dir. Du hattest 18,7 geschrieben. Das liegt daran, dass Display und interner Speicher nicht synchron sind. Ich weiß jetzt aber nicht genau wer schneller ist.

46 -> Luftfeuchte, BCD Codiert => 46 %

Jetzt folgen die Außensensoren, jeweils 3 Bytes, 5x. Das ist genau so codiert wie die Innentemperatur. Bei Dir sind also:

75 -> 7,5 °
x0 -> 0 * 10° = 0°C
Cx -> 1100 Bit 7 ist wieder gesetzt, also positiver Messwert

Bei den Außensensoren ist Bit 6 gesetzt. Wenn das aus ist, ist der Messwert außerhalb des  Messbereiches, den der Sensor kann (gibt's innen nicht). Das 0,05° Bit hab ich beim Außensensor noch nie leuchten sehen.

64 -> Luftfeuchte sollte wieder klar sein.

Das ganze wiederholt sich jetzt 4 mal, aber da Du keine weiteren Außensensoren hast steht da nur Müll drin (0A:00:0A).

In den nächsten 2 Bytes steht der UV Index. BCD codiert. Im ersten Byte Einer und Zehnten, im zweiten Byte, Bits 0 bis 3 der Zehner.

Bei Dir ist grad 0,0

Jetzt kommt der Luftdruck. Das hat ne Weile gedauert, eher ich das gerafft hatte. Der steht dort als Hexawert drin, in 0,0625 mBar. Das erste ist das niedere, das zweite das höhere Byte. -> 0x3DDD = 15837 => *0.0625 = 989,8 mBar sollten bei Dir sein.

Im nächsten Byte steht die Wettervorhersage der Station drin, als Hexawert in den Bits 0 bis 2. Bei Dir ist ne 5, heißt leicht bewölkt. Das Bit 3 leuchtet, wenn die Station ne Sturmwarnung hat. Die restlichen Bits sind unbenutzt.

Wetterstatus:

0 -> starker Schneefall
1 -> leichter Schneefall
2 -> starker Regen
3 -> leicher Regen
4 -> bewölkt
5 -> leicht bewölkt
6 -> sonig

... Fortsetzung folgt

BuzzDee

...jetzt

Die nächsten zwei Bytes enthalten den Windchill der Station.

51 C0 -> ist genau so codiert wie die Temperaturen der Außensensoren, also

51 -> 5,1 °C
C0 -> 0 * 10°C, positiv, im Messbereich
macht einen Windchill von +5,1 °C


Die nächsten zwei Bytes enthalten die Windböengeschwindigkeit in mph. Erstes Byte ist mal wieder Einer und Zehntel.

25 -> 2,5 mph

Im zweiten Byte, Bits 0 bis 3 steht der Zehner, BCD codiert: x * 10 mph. Leuchtet Bit 4, kommen noch mal 100 mph dazu, falls Dein Haus dann noch steht. Wenn der Sensor weg ist, steht da in den zwei Bytes 0x0EEE drin.

Mach bei Dir 2,5 m/h. Rechnest Du / 2.23694 hast Du m/s.

Die nächsten zwei Bytes enthalten die Windgeschwindigkeit, genau so codiert. Bei Dir wieder 25:00.

Im nächsten Byte (0B) steht in den Bits 0 bis 3 die Windrichtung, als Hexwert * 22,5°.

xB -> 0XB -> 11 * 22,5° = 247,5° also WSW. (0 = Norden)

Ja und die letzten beiden Bytes sind der Zähler für den Regensensor, Hexa, das niedere Byte zuerst. Macht bei Dir 0x0045 = 69 * 0,7 l/m². Der Zähler läuft immer weiter. Maximalwert ist 0xFFFF, also 65535. Dann sollte er bei 0 wieder anfangen.

So, ich hoffe mal das ich Dir helfen konnte. Wenn noch Fragen sind, leg los. Die Struktur im zyklischen Speicher der Station ist identisch.

Barny

@BuzzDee


vielen Dank, das hast du ja super erklärt. Damit komme ich einen großen Schritt weiter.
Ich werde jetzt erst einmal die aktuellen Werte testen.


Gruß Barny

Barny

@nane

hier gibt es einen C-Sourcecode für die USB-Schnittstelle:

http://www.lvr.com/hidpage.htm

nane

danke für die hinweise :)
ich werde mich erneut "versuchsweise" damit befassen.

Barny

Zunächst möchte ich mich noch einmal bei Sebastian bedanken, der mir mit seinen ausführlichen Informationen den Zugang zur TE 923 bestens beschrieben hat!

Ich habe nun ein bißchen mit dem PC und der Wetterstation gespielt. Die aktuellen Daten kann ich nun empfangen und umrechnen, so dass es keine Probleme geben wird, diese Daten per PC in einem beliebigen Zeitfenster zu erfassen, in einer Datenbank abzuspeichern und graphisch darzustellen.

Da mich aber die in der Wetterstation gespeicherten Daten interessieren, suche ich nun nach einem Protokoll, um genau diese Daten einschl. Zeitstempel
zu erfassen.
Welche Bytes müssen da gesendet werden?
Am besten wäre eine vollständige Protokollbeschreibung der TE 923, da man
per Software wohl noch eine Reihe von Möglichkeiten hat.
Vielleicht lässt sich der ein oder andere Wunsch meinerseits erfüllen?


Viele Grüße