Tchibo Wetterstation: Unterschied zwischen den Versionen

Aus Hobbyelektronik.org
(Beispieldaten hinzugefügt, genug für heute)
Zeile 116: Zeile 116:
 
|-
 
|-
 
| 15,5°C || 53% || 0000 || 0101 || 0100 || 1101 || 1001 || 0000 || 1100 || 1010 || 1110
 
| 15,5°C || 53% || 0000 || 0101 || 0100 || 1101 || 1001 || 0000 || 1100 || 1010 || 1110
 +
|-
 +
| 11,7°C || 62% || 0000 || 0101 || 0100 || 1010 || 1110 || 0000 || 0100 || 0110 || 1111
 +
|-
 +
| 11,8°C || 61% || 0000 || 0101 || 0100 || 0110 || 1110 || 0000 || 1000 || 0110 || 1111
 +
|-
 +
| 11,9°C || 61% || 0000 || 0101 || 0100 || 1110 || 1110 || 0000 || 1000 || 0110 || 0111
 
|-
 
|-
 
|}
 
|}
Zeile 125: Zeile 131:
  
 
==Luftfeuchtigkeit==
 
==Luftfeuchtigkeit==
Der Einfachheit halber zuerst mit der Luftfeuchtigkeit, nach der sortiert wurde.
+
Der Einfachheit halber kommt als erstes die Luftfeuchtigkeit dran. Dazu wurde die Excel-Tabelle nach dieser Spalte sortiertz
 
Da in einigen Datensätzen die Luftfeuchtigkeit konstant, die Temperatur jedoch unterschiedlich ist, kann man mit relativ wenig Aufwand die zuständigen Bits ermitteln.  
 
Da in einigen Datensätzen die Luftfeuchtigkeit konstant, die Temperatur jedoch unterschiedlich ist, kann man mit relativ wenig Aufwand die zuständigen Bits ermitteln.  
  
Zeile 131: Zeile 137:
  
 
Da sich 36 Bits gut durch 4 teilen lassen, habe ich diese Aufteilung gewählt. Excel-Formeln können beim Auseinanderpflücken der Datenworte enorm helfen (siehe Excel-Sheet). Die entsprechenden Spalten waren schnell gefunden: Nibble 6 und 7
 
Da sich 36 Bits gut durch 4 teilen lassen, habe ich diese Aufteilung gewählt. Excel-Formeln können beim Auseinanderpflücken der Datenworte enorm helfen (siehe Excel-Sheet). Die entsprechenden Spalten waren schnell gefunden: Nibble 6 und 7
 +
 +
==Temperatur==
 +
Im nachhinein ist der Datenaufbau der Temperatur ebenfalls trivial. Bis man dort hin kommt, können jedoch einige Gehirnwindungen verbogen werden.
 +
 +
Auf jeden Fall hilft es auch hier, einen größeren und guten Vorrat an Daten zu haben. Wenn man die Beispieldaten oben nach Temperatur sortiert ("ich hab' da schonmal etwas vorbereitet") sieht man die Temperaturen 11,7, 11,8 und 11,9°C, die sich ideal zum Finden der niederwertigsten Bits eignen.
 +
 +
Tatsächlich wird man auch bei Nibble 3 fündig. Allerdings ist die Anordnung der Bits etwas merkwürdig. Die Orientierung ist "verkehrt" herum und die Nachkommastelle scheint einen Offset von 0,2 zu haben. Bei anderen Zeilen scheint diese Regel jedoch keine Gültigkeit zu haben.
 +
 +
Also nochmal zurück auf Anfang.
 +
 +
Nach längerem herumprobieren bin ich dann auf die Idee gekommen, nicht in Nibbles zu denken, sondern die Bits im zusammengesetztem

Version vom 3. Mai 2012, 23:19 Uhr

Tchibo Wetterstation

Letztes Jahr gab es von meiner Schwester eine Funk-Wetterstation (TCM 279340) zu Weihnachten. Ich hatte zwar schon eine etwa gleichwertige, aber man will sich Neuerungen natürlich nicht querstellen.

Interessant an dem Teil war auf dem ersten Blick das Farbdisplay, das sich nach näherer Betrachtung als Farbfolie auf einem Schwarz-Weiß-LCD herausstellte. Diese Effekthascherei sieht ehrlich gesagt nicht einmal allzu schlecht aus, obwohl sie durch den massiv niedrigeren Kontrast eigentlich nur Nachteile bringt.

Aber bekanntlich zählen ja die inneren Werte; und die sind trotz der Preisklasse (und der angesetzten Zielgruppe) nicht allzu schlecht.

Aufgrund von Prüfungsvorbereitungen blieb das Teil relativ lange unbehelligt, bis mich endgültig die Neugierige weckte:

Hardware

Die Wetterstation selbst ist mit Thermo- und Hygrometer, sowie einem Barometer ausgestattet, dass auf dem Display lediglich eine Tendenz anzeigt. Neben dem 433MHz-Empfänger ist zugleich ein Zeitzeichenempfänger (DCF77) verbaut, der kein Meteotime empfängt. Da war wohl die Lizenz teurer als das Barometer ;-)

Im "Außenfühler" sitzt wiederum ein Thermo- und Hygrometer. Neben Kanalwahlschalter und Tx-Knopf war's das auch schon wieder. Ok, Batterien frisst das Teil auch noch.

Wie beim EMR7370: Am Anfang war der Schraubendreher. Das Innenleben der Station ist relativ modular aufgebaut. Jeweils eine eigene Platine für DCF77, 433MHz, Barometer und Hygrometer. Auf der Hauptplatine ist dann der Rest. Dadurch war es mehr als einfach, das Signal der Begierde abzufangen. Wenn man schon mal drin ist, habe ich mir auch gleich die Datenleitungen des Barometers herausgeschleift - man weiß ja nie.

Protokoll

Im zweiten Schritt kommt der Logic Analyzer ins Spiel:

Interessant bis ~130ms

Wie man sieht, sind die Pulsweiten (low-Zeiten) nach jedem Flankenwechsel unterschiedlich - darin muss also die Information stecken.

Um Muster besser zu erkennen schnappte ich mir die Daten, importierte sie in Excel und ließ sie mir visualisieren.

Dazu habe ich einfach die Zeitdifferenzen zwischen den einzelnen Zeilen ausgeben lassen und das Ergebnis durch bedingte Formatierung hinterlegt. Zusätzlich habe ich alle "1-Zeiten" herausgefiltert, da dort augenscheinlich keine Informationen übertragen werden

wie man im zweiten Bild deutlich sieht, gibt es Synchronisation und Daten. Dabei ist eine Pause (bzw. Sendepuls, so genau weiß ich es nicht) von 8,9ms das Synchronisationswort und knapp 2 bzw. 4ms eine 1 bzw. 0. Insgesamt werden die Daten 8 mal übertragen - ist zwar nicht gerade edel, aber es funktioniert. Das Wissen über Kanalkodierung, Codeverkettung und Faltungscodes ist bei den Herstellern von solchem Zeug wohl noch nicht angekommen. Hat immerhin den Vorteil, dass es Leute wie ich nicht zu schwer haben.

Bleibt nur noch die Frage der Zuordnung. Was ist eine 1 und was eine 0 - und vor allem: wo steht was? Sicher ist zumindest, dass 36 Bit übertragen werden.

Datenfarm

Nachdem ich über mehrere Abende hinweg sporadisch Werte aufzeichnete (und erzeugte) bekam ich schließlich knapp 50 Datensätze, die ausgewertet werden wollten.

Um Copy & Paste-Orgien in Excel zu ersparen, bastelte ich mir ein kleines PHP-Script, das die Zeitstempel in Binärdaten umwandelt:

function timing2data($filename) {
	$fh = fopen($filename, "r");
	$lasttime = -1;
	$data = array();
	while($line = fgets($fh)) {
		$time = explode(", ", $line);
		$time = floatval($time[0]);
		
		if($lasttime !== -1) {
			$val = round(($time - $lasttime) * 1000);
			switch($val) {
			case 9: echo "\n"; break;
			case 0: echo ""; break;
			case 2: echo "0"; break;
			case 4: echo "1"; break;
			default: echo "<".$val.">"; break;
			}
		}
		$lasttime = $time;
	}
	fclose($fh);
}

Hier habe ich auch die Annahme getroffen, dass ein kurzer Puls 0 und ein langer 1 entspricht (ich sollte richtig liegen).

Die Ausgabe sieht dann zum Beispiel wie folgt aus:

000001010000111001111111100100010000
0000010100001110011111<673><19>

die Werte in den spitzen Klammern sind Pausenzeiten, die nicht als 1, 0 oder Sync erkannt wurden und somit Übertragungsfehler darstellen.

Bei der Auswertung fanden sich dann auch einige Datensätze, bei denen die Auswertung nicht mehr allzu zuverlässig war - also gerade so zwei Übereinstimmungen in den Datenworten. Aber es hat gereicht.

In Excel ging dann die Suche nach der Antwort los.

Beispieldaten

Temperatur Luftfeuchtigkeit 0 1 2 3 4 5 6 7 8
24,1°C 43% 0000 0101 0010 1000 1111 0000 1100 0010 0101
24,6°C 45% 0000 0101 0010 0110 1111 0000 1010 0010 1100
17,6°C 49% 0000 0101 0100 0000 1101 0000 1001 0010 1101
24,8°C 49% 0000 0101 0100 0001 1111 0000 1001 0010 1111
24,9°C 49% 0000 0101 0100 1001 1111 0000 1001 0010 0111
24,7°C 50% 0000 0101 0100 1110 1111 0000 0000 1010 0001
24,8°C 50% 0000 0101 0100 0001 1111 0000 0000 1010 1110
16,8°C 51% 0000 0101 0100 1011 0101 0000 0000 1010 1110
24,6°C 51% 0000 0101 0100 0110 1111 0000 1000 1010 0001
15,7°C 52% 0000 0101 0100 1011 1001 0000 0100 1010 0110
15,9°C 52% 0000 0101 0100 1111 1001 0000 0100 1010 0010
16,1°C 52% 0000 0101 0100 1000 0101 0000 0100 1010 1000
16,3°C 52% 0000 0101 0100 1100 0101 0000 0100 1010 1111
14,9°C 53% 0000 0101 0100 1010 1001 0000 1100 1010 1011
15,1°C 53% 0000 0101 0100 1110 1001 0000 1100 1010 1101
15,5°C 53% 0000 0101 0100 1101 1001 0000 1100 1010 1110
11,7°C 62% 0000 0101 0100 1010 1110 0000 0100 0110 1111
11,8°C 61% 0000 0101 0100 0110 1110 0000 1000 0110 1111
11,9°C 61% 0000 0101 0100 1110 1110 0000 1000 0110 0111

"Immer" gleich

"Sie kam aus einem kleineren Ort, wo das Motto galt: 'Wenn du nicht weiter weißt, schlachte ein Schwein'" (na, welcher Film war's?)

Wie dem auch sei, zu erst einmal kann man die Bits ausschließen, bei denen nichts passiert. Bei meinen Messungen waren dies Nibble 0 und 1.

Luftfeuchtigkeit

Der Einfachheit halber kommt als erstes die Luftfeuchtigkeit dran. Dazu wurde die Excel-Tabelle nach dieser Spalte sortiertz Da in einigen Datensätzen die Luftfeuchtigkeit konstant, die Temperatur jedoch unterschiedlich ist, kann man mit relativ wenig Aufwand die zuständigen Bits ermitteln.

Dabei hilft es ungemein, die Bits in Gruppen zu unterteilen.

Da sich 36 Bits gut durch 4 teilen lassen, habe ich diese Aufteilung gewählt. Excel-Formeln können beim Auseinanderpflücken der Datenworte enorm helfen (siehe Excel-Sheet). Die entsprechenden Spalten waren schnell gefunden: Nibble 6 und 7

Temperatur

Im nachhinein ist der Datenaufbau der Temperatur ebenfalls trivial. Bis man dort hin kommt, können jedoch einige Gehirnwindungen verbogen werden.

Auf jeden Fall hilft es auch hier, einen größeren und guten Vorrat an Daten zu haben. Wenn man die Beispieldaten oben nach Temperatur sortiert ("ich hab' da schonmal etwas vorbereitet") sieht man die Temperaturen 11,7, 11,8 und 11,9°C, die sich ideal zum Finden der niederwertigsten Bits eignen.

Tatsächlich wird man auch bei Nibble 3 fündig. Allerdings ist die Anordnung der Bits etwas merkwürdig. Die Orientierung ist "verkehrt" herum und die Nachkommastelle scheint einen Offset von 0,2 zu haben. Bei anderen Zeilen scheint diese Regel jedoch keine Gültigkeit zu haben.

Also nochmal zurück auf Anfang.

Nach längerem herumprobieren bin ich dann auf die Idee gekommen, nicht in Nibbles zu denken, sondern die Bits im zusammengesetztem