Tchibo Wetterstation 433 MHz - Dekodierung mal ganz einfach

BigS:
Ich nutze einen Uno und als Empfänger einen RBX6 superheterodyne.
Meine Sensoren sind von mittlerweile 3 verschiedenen Herstellern, bin aber zu faul jetzt in den Garten zu gehen. Ich empfange auch z.T. die Nachbarn musste also schon die Antenne verschlechtern um nicht komplett zugemüllt zu werden.

Ja, die Empfangsleistung der Superhet (superheterodyne) Empfänger ist schon um einiges besser als die der ganz billigen Superregenerativempfänger (super regenerative).

Allerdings nützt einem auch der beste Empfänger nichts, wenn man nicht ALLE DREI notwendigen Dinge beisammen hat

  • einen Thermo-/Hygro Außensender
  • ein Empfangsmodul
  • genaue Angaben zum Funkprotokoll des Senders oder sogar ein Arduino Sketch

Erst dann kann man anfangen, Daten auf SD Karte zu loggen oder irgendwo anzuzeigen, oder nach irgendwo ins Internet zu übertragen.

Und daran krankt es ja in diesem ganzen Thread: Schon erni-berni als Starter des Themas hat seinerzeit nur verraten, dass es um einen Außensender einer Tchibo-Wetterstation geht, für den er die Decodierung hat, er hat aber nicht konkret verraten, um WELCHE Tchibo-Wetterstation es genau ging. Und so geht es einem mit erni-bernis Sketch zum "ganz einfachen" Decodieren genau so wie mit einem Schlüssel, den man irgendwo findet: Solange man nicht auch das passende Schloss zum Schlüssel hat, bzw. den passenden Funksender zu einem Decodierungs-Sketch, nützt einem das alles herzlich wenig und ist völlig nutzlos.

kulturbereicherer:
Im Dezember habe ich mich ein klein wenig damit beschäftigt gehabt. So grob wiedergegeben gibt es einen ganz großen Hersteller der sich LaCrose oder so ähnlich nennt und unzählige Töchter hat die unter anderem Namen die selben Produkte auf den Markt werfen.

Ja, LaCrosse ist einer der beiden großen Hersteller von Heim-Wetterstationen und Funk-Außenthermometern. Der andere Hersteller ist Hideki.

Und die beiden Firmen haben keine Töchter, schon gar nicht unzählige, sondern die kleben an die von ihnen produzierten Wetterstationstypen einfach die Typenschilder und Aufkleber drauf, die der zahlende Kunde haben möchte. Die zahlenden Kunden sind dabei Importfirmen, die die Ware aus China importieren und dann weiter verticken.

Eine dieser Firmen ist zum Beispiel http://www.technoline-berlin.de/
Die importieren glaube ich schon über 20 Jahre lang Heimwetterstationen von Lacrosse und verkaufen sie dann als Technoline-Wetterstation gelabelt an deutsche Kunden weiter.

Also außen drauf steht dann alles mögliche, aber innen drin ist es oft LaCrosse oder Hideki. Und für dieses Aufkleben von eigenen Namen auf fremde Produkte sind sich auch namhafte Firmen, die beim Verbraucher als "Wetterstationshersteller" wahrgenommen werden, nicht zu schade, das machen also nicht nur reine Import-Handelsfirmen wie Technotrade/Technoline, sondern auch die amerikanische Herstellerfirma Oregon Scientific ,mischt fleißig beim Umlabeln mit und verkauft nicht nur eigene Produkte Made in USA, sondern die labeln für den deutschen Markt und andere Märkte durchaus auch chinesische Produkte um, die dann als Oregon Scientific in den Handel kommen.

Die "Marke" oder besser gesagt "Handelsmarke", die außen auf dem Karton steht, sagt - insbesondere bei Wetterstationen und Funk-Außenthermometern - absolut NICHTS darüber aus, welches die Herstellerfirma ist. Da wird auf die Kartons draufgepappt und umgelabelt, so wie der Kunde es kauft, mit irgendeinem "Hersteller" hat das, was draufsteht, in den meisten Fällen nichts mehr zu tun.

Und wer hat das Prinzip erfunden? Tchibo!

erfunden haben die das mal für den Verkauf von Kaffee. Ohne dass die Firma jemals eine eigene Kaffeeplantage betrieben hat, haben sie sich durch geschickte Werbung beim Verbraucher als Kaffeeproduzent platziert und den Leuten suggeriert, sie seien Kaffeeproduzent mit eigenen Plantagen, würden den Kafee in eigenen Röstereien rösten und dann unter der Marke Tchibo in den Handel bringen. Aber das war noch nie so. Nicht beim Kaffee und auch nicht bei anderen Produkten, die von Tchibo verkauft werden. Das sind von Fremdanbietern zugekaufte Produkte, es wird Tchibo draufgepappt und unter der Handelsmarke Tchibo verkauft. Und dieses Tchibo-Prinzip, sich selbst als Hersteller auszugeben, ohne einer zu sein, hat sich auf viele Branchen, einschließlichHeimelektronik übertragen und ist von vielen Firmen kopiert worden. Und so steht auf vielen Produkten wie beispielsweise Heimwetterstationen und Funk-Außenthermometern nicht der eigentliche Hersteller wie beispielsweise LaCrossse oder Hideki, sondern irgendwas anderes.

Aber das ist bei anderen Geräten auch nicht viel anders, zum Beispiel bei Fernsehern. Die deutsche Firma Grundig ging schon 2003 endgültig Pleite, und trotzdem gibt es immer noch neue Grundig-Fernseher zu kaufen. Aber 100% der Grundig-Fernsehr stammen heute aus der Produktion der türkischen Konzerne Arçelik und Koç, und die Produktionshallen dafür stehen in der Türkeii, in Rumänien, Russland und in China.

Ich habe meinen Sender aufgeschraubt, darin fand ich zum einen die Hauptplatine und daran angedockt eine 433 MHz Senderplatine. An dem Datenpin habe ich meinen Logicanalyzer
( http://www.ebay.de/itm/USB-Logic-Analyzer-Device-Set-USB-Cable-debug-24MHz-8CH-24MHz-for-ARM-TE363-/191797372724?_trksid=p2141725.m3641.l6368 ) angeklemmt. (Im Nachhinein hätte ich da auch nen Arduino zum sniffen nutzen können).
Dann habe ich jede Bitfolge in eine Txt gespeichert und sofort die Temp- und HumWerte vom Sender dazu notiert.
Danach den Taschenrechner rausgeholt und mit der BIN --> DEC Umwandlung solange probiert bis ich die richtige Stellen hatte.
Danach habe ich die Channels verstellt und musste ja nur noch die Änderung beobachten.
Hat insgesamt ne gute Stunde gedauert.
Mit dem Tchibo-Sketch aus diesem Thread kann man meiner Meinung nach ca. 60% der MassenDiscountSender aufzeichnen. Der Sketch zeigt im SerialMonitor die empfangene Bitfolge an und dann kann man sich ja die entsprechenden Bits umwandeln/ausrechnen und beliebig anzeigen, Uploaden usw.

Interessanter Beitrag!

Möchte noch kurtz Danke für die schönen Muster Programme sagen. :slight_smile:

Euer Beitrag hat mir sehr geholfen zwei unbekannte Sensoren ausgelesen zu bekommen.

Nutze den Tchibo Wetterstations Code von Erni-Berni fusioniert mir dem Programm von jurs, da ich den
code nicht zum laufen bekommen habe wegen der CRC prüfung oder den bits... war mir zu komplex.

Das mit der Checksumme habe ich leider immer noch nicht ganz verstanden.

ist die Checksumme von 1010 auch wirklich 5?

Wie führe ich am besten eine CRC Prüfung durch damit ich im Programm nicht fünf mal die gleiche schleife stehen habe? :confused:

for (int i=0;i<4;i++) { // Kennung aus Byte aus den Bit`s 1 bis 4 holen.
if (bitstream == '1') {

  • bitSet(chk,(3-i));*
  • }*
  • }*
  • if (chk != 5) { // Prüfsumme = 5 Dann sind es unserere Sensoren!*
  • return(99); // Wenn nicht, dann mit 99 zurück???*
  • } else {*
  • return ((int)x);*
  • }*
    (Da habe ich doch bestimmt noch ein denkfehler mit der Checksumme in den Code=)
    *SSSS IIIIIIIII M KKKK EEEEEEEEEEE FFFFFFF /CRC/SenderID/Manuell/Kanal/Temperatur/Luftfeuchte/ *
    0101 01110000 1 0000 000101011010 1010000$ / 5 / 112 / 0 / 1 / 17.30C / 80% / Sensor1
    0101 11100001 1 0010 000001111100 1100001$ / 5 / 225 / 0 / 3 / 6.20C / 97% / Sensor2
    nochmal Danke an alle Lehrreichen beiträge
    Schöne Grüße aus dem Allgäu
    Philipp

Hallo Leute,

heute habe ich mich auch mal an dieses Thema herangetraut und den Sketch aus dem Post #19 von jurs genommen.

Nun bin ich aber etwas verwirrt wegen der Werte die mir angezeigt werden.

Start!

Start Bit L: 5560   H: 192
Data Bits: 21
L: 1268 952 480 600 508 508 544 640 976 768 772 688 468 636 1364 1268 676 1364 1500 1544 1420 
H: 288 72 448 388 3868 2176 212 2136 792 84 1736 216 124 164 960 368 96 208 56 592 844 
110000001000001101111

Start Bit L: 5460   H: 344
Data Bits: 50
L: 492 580 456 524 504 504 916 536 896 480 472 964 452 980 1044 484 988 456 456 484 552 532 528 1012 492 468 480 496 492 968 956 992 532 464 980 544 1008 968 992 1040 1084 504 512 524 528 516 972 484 500 492 
H: 1016 692 512 1048 960 468 560 464 1028 984 504 508 536 960 940 988 484 512 1016 492 468 424 444 452 468 1000 492 488 488 480 1008 964 944 496 496 940 444 968 972 984 860 404 476 452 452 940 484 496 480 484 
00000010100101101000000100000111001011111000001000

Start Bit L: 54600   H: 40
Data Bits: 50
L: 940 920 924 460 972 460 480 452 468 952 460 980 472 480 480 492 976 468 1000 988 500 992 492 500 500 508 504 496 520 520 1016 544 580 596 584 596 1076 1040 1036 532 520 1016 520 996 1008 1052 1060 1084 548 540 
H: 1028 1044 536 520 980 512 500 1008 516 512 520 972 988 500 492 492 484 516 952 964 476 964 480 484 472 960 476 476 468 448 460 444 924 380 388 388 384 876 920 920 452 448 944 464 952 940 896 892 376 440 
11101000010100001011010000000010000011100101111100

Start Bit L: 55570   H: 376
Data Bits: 50
L: 968 928 452 468 936 496 504 960 460 496 484 508 1088 624 972 556 564 552 488 964 484 984 984 492 492 988 548 564 516 536 496 516 516 1016 512 524 520 520 516 1020 1048 1060 600 596 1020 520 1012 1064 1040 1008 
H: 1000 1032 1000 516 528 488 492 968 516 488 976 472 448 368 900 944 420 408 452 500 500 972 972 480 484 968 452 452 888 456 456 472 460 456 456 948 452 456 464 464 904 928 872 376 392 944 456 940 892 912 
11001001000010100001011001000000010000011100101111

Start Bit L: 55190   H: 376
Data Bits: 50
L: 984 956 464 920 492 516 924 472 472 460 472 984 500 980 496 516 500 556 964 484 980 988 488 992 472 492 492 492 512 512 504 524 1000 564 576 592 592 576 980 1004 992 504 512 992 516 1012 1004 1080 1012 1004 
H: 996 996 508 556 488 452 1032 504 492 1016 508 484 476 964 972 468 476 448 464 504 968 972 488 956 500 492 488 968 468 464 472 460 456 464 888 400 380 392 428 956 956 968 472 464 948 460 948 940 876 940 
11010010000101000010110100000000100000111001011111

Wie man sehen kann ist bei den ersten Werten die länge der Data Bits mit 21 angegeben, anschließend immer 50. Ich habe dann mal Probehalber den Wert

#define MAXPULSECOUNT 50

auf 60 erhöht und dann folgende Werte bekommen

Start!

Start Bit L: 54970   H: 52
Data Bits: 60
L: 944 972 492 492 924 472 464 964 488 492 516 496 980 488 972 504 492 488 508 1088 596 1068 972 504 524 1004 500 1060 560 572 520 504 544 516 516 520 496 500 500 992 1040 1012 536 516 1004 528 1004 1040 1068 1076 1028 504 516 572 1028 540 1024 1008 520 1020 
H: 1036 960 988 480 536 508 512 996 488 484 956 476 480 492 980 964 480 488 472 452 372 872 928 480 452 952 468 944 404 412 412 480 452 444 464 936 480 476 476 476 956 900 936 452 464 948 444 948 912 872 880 460 472 936 396 444 924 940 940 456 
110010010000101000010110010100000000000111001011111000101101

Start Bit L: 55210   H: 288
Data Bits: 58
L: 980 960 908 972 452 948 484 956 472 468 480 476 968 516 1012 988 476 964 520 480 1000 476 452 484 564 584 588 592 580 508 472 500 992 1004 1032 544 556 1004 560 996 1020 980 1000 996 504 500 520 996 512 508 996 512 1004 620 1104 608 1028 500 
H: 996 988 556 972 524 516 500 992 992 504 504 500 508 468 948 936 504 1000 460 480 964 488 532 492 472 400 384 388 876 412 504 480 480 956 932 920 428 424 948 432 956 952 956 956 472 476 956 460 468 956 468 468 948 928 352 368 852 476 
1111010100001011010010000000000011100101111100010010101010

Start Bit L: 55560   H: 444
Data Bits: 60
L: 940 952 452 472 952 480 464 968 484 500 496 472 960 480 964 508 500 488 492 996 512 1000 1000 500 492 1000 496 1000 512 512 504 516 516 520 516 520 524 520 516 1004 1008 1000 516 520 1008 516 1008 1012 1020 1008 1016 528 524 532 1028 528 1020 1052 544 1020 
H: 1032 1004 1012 504 512 500 512 984 496 484 964 500 508 488 1000 956 476 484 484 476 472 948 952 480 484 952 480 960 468 460 464 468 460 456 468 940 456 456 460 460 944 952 948 464 460 944 460 936 940 940 944 444 448 940 444 444 932 928 904 436 
110010010000101000010110010100000000000111001011111000101101

komme da nicht ganz mit zurecht. Kann da jemand helfen? Welchen Wert ich da einstellen muß?

PS: ich habe ein Funk Thermostat von TCM Modell:283851

Hallo TorstenUE,

ich denke nicht, dass die Software die Codierung richtig auswertet. Es müssten dafür alle High-Werte gleich lang (oder eher kurz) sein, ich vermute (differentielle) Manchester-Codierung. Habe gerade auch so ein Gerät, an dem ich seit längerem rumprobiere...

Schöne Grüße

cips

jurs:

  // Temperature 

int16_t temperature = value>>12 & 0b111111111111;  // bit 12..23
 // if sign bit is set, adjust two's complement to fit a 16-bit number

Danke für das Programm! Es hat mir sehr geholfen. Ich habe in der Zeile oben int durch int16_t ersetzt, damit der Code auch für 32bit Arduinos wie den MKR funktioniert (abgesehen von noInterrupts() und interrupts() statt sei() und cli()). Sonst werden bei negativen Temperaturen recht hohe Werte angezeigt;-)

Hallo Leute,
da ich seit kurzem auch ein Arduino Benutzer bin, ist es natürlich Pflicht, hier im Forum anwesend zu sein.
Das mit der Codierung der Daten eines Heim-Funkthermometers ist ja der Hammer.
Respekt an die Programmierer.
Ich habe hier so ein Teil aus dem Baumarkt (TFA Dostmann / Wertheim 30.3169)
Sketch auf den Arduino und bums, waren die Daten im Seriellen Monitor.

Start Bit L: 9200 H: 504
Data Bits: 36
L: 1940 3892 1956 3904 3912 1940 1932 1944 1952 1956 3904 3896 3892 1936 1952 3904 1944 1936 1940 1956 3904 3904 1936 3892 3892 1952 1948 1936 1936 1932 3908 3908 1944 1936 3888 3912
H: 560 500 500 484 484 496 504 500 500 480 488 500 496 504 508 480 500 500 500 496 488 488 504 500 500 500 492 504 504 504 500 484 492 504 504 500
010110000011100100001101100000110011

Mit etwas rumprobieren habe ich die letzten 8 Bit als Feuchte und die 12 davor als Temperatur entziffern können. Gerade das mit einer Änderung an den Bits nach einem Batteriewechsel ist interessant. Auf was man alles aufpassen muss.

Jedenfalls kann ich jetzt das Thermometer in der pimatic als Rediohead Wetterstation verwenden, ohne einen weiteren Nano zu verbauen.

Eine Frage noch an die Fachwelt: Warum empfängt mein Nano die Daten und mein UNO nicht.
Ich hatte erst den Verdacht wegen dem chinesischen billig UNO. Also das Original bestellt und angeschlossen. Ergebnis = null. Es werden keine Daten im Monitor angezeigt.

Gruß und schon mal Danke im Voraus
Fred

1 Like

freddy64:
Eine Frage noch an die Fachwelt: Warum empfängt mein Nano die Daten und mein UNO nicht.
Ich hatte erst den Verdacht wegen dem chinesischen billig UNO. Also das Original bestellt und angeschlossen. Ergebnis = null. Es werden keine Daten im Monitor angezeigt.

Da der Nano und Uno beide den Atmega328 enthalten, sollte das auf beiden auch funktionieren.
Dabei solltest du auf die Pinbelegung achten und die selben Pins verwenden.

Welche Pins verwendest du ?

Erst mal Danke für die Antwort.

Am Sender
433MhzTX: D3
Sensor Daten: D4

Am Empfänger 433MhzRX: D11

Immer gleich am Uno sowie am Nano

Gruß
Fred

1 Like

freddy64:
....
Am Sender
433MhzTX: D3
Sensor Daten: D4

Am Empfänger 433MhzRX: D11
....

Das ist mir noch nicht ganz klar......
Wieso ein Sender ? Der ist doch im Sensor vorhanden.

Zeige doch mal den verwendeten Sketch und einen Link auf die verwendete Library.
Sketch bitte Code-Tags setzen.

Ich habe noch weitere Funkverbindungen. Damit habe ich angefangen, bis ich hier im Forum auf die dekodierung der Tschibo Wetterstationen gestoßen bin.
siehe https://crycode.de/diy-funk-wetterstation-mit-dht22-attiny85-und-radiohead
am Pi mit pimatic.
Als Empfänger an der pimatic werkelt ein nano, der die empfangenen Daten seriell an den pi weiter gibt. Funktioniert super aber eben nicht mit dem UNO.
Gerade war der Postbote da und hat mir die besseren Empfänger (RXB6) gebracht. Angesteckt, geht. Nur eben wieder nicht am UNO.

1 Like

freddy64:
Gerade war der Postbote da und hat mir die besseren Empfänger (RXB6) gebracht. Angesteckt, geht. Nur eben wieder nicht am UNO.

Ja, der Empfänger ist einer der besseren.

Dann vermute ich, dein Uno hat einen Fehler.
Das funktioniert mit einem "heilen" Uno sicher auch.

Ich habe hier 3 UNOs. 2 China Modelle und einen Original Arduino. Keiner von denen will die Daten empfangen.
Spielen irgendwelche Taktraten bei der Übertragung der Daten eine Rolle?
Die Nanos empfangen doch auch ohne mullen und knullen die Daten vom Baumarkt-Funkthermometer sowie von dem oben verlinkten Eigenbau. Warum nur die UNOs nicht? Spannung 5V am USB oder 9V mit externem Netzteil macht auch keinen Unterschied.
Sender und Empfänger stehen nur 20 cm auseinander.
Wenn gar nichts hilft, kommt halt so ein Nano in den Kasten. Es muss halt alles einigermaßen professionell auf Hutschienen mit Schützen (wegen der zu schaltenden Last) und Sicherungen in einem Schaltkasten montiert werden.
Die ganze Gaudi kommt dann in einen Kuhstall für Lüftung, Futterautomat und Kraftfutter-Silo.

1 Like

Eigenartig...
Habe bisher 433MHz-Empfang mit verschiedenen Arduinos (oder auch ATtinys) hinbekommen.
Klar, es gibt bessere und schlechtere Empfänger, aber bei den Mikrocontrollern hab ich eigentlich noch keine Unterschiede wahrgenommen.
Eher, dass mal die Stromversorgung Probleme machte - weil mal ein Schaltnetzteil besonders viele Störungen produziert hatte (offensichtlich im "richtigen" Frequenzbereich).

Beim Testen der Funkverbindung achte ich immer darauf, dass Sender und Empfänger (beide mit Antenne: 17,4 cm) nicht zu weit entfernt sind, aber auch nicht zu nahe beieinander liegen. Ich arbeite gerne mit ca. 1 Meter Abstand und bilde mir ein, dass ich damit die brauchbarsten Testbedingungen bekomme. Aber vielleicht ist das nur meine "Nerd-Paranoia" :slight_smile:

Eigenartig ist der richtige Ausdruck.
Irgend einen Fehler musst du machen, da ich genau wie uxomm bei zahlreichen Projekten keinerlei Probleme mit dem Uno mit den 433 MHz-Empfängern hatte.

Hat nicht zufällig jemand die Komponenten zu hause rumliegen, um das Szenario nachzubauen?
Der, die, das Sketch (attiny85-radiohead-dht22-weather-sensor.ino) läuft auch auf einem Nano.
Nano als Sender mit RadioHead_ASK library und UNO als Empfänger.
Haben evtl. verschiedene Taktfrequenzen der Arduinos (8, 16 Mhz) einen Einfluss auf das Ergebnis?

@uxomm: Das machst du genau richtig und ist keine "Nerd-Paranoia". Sender und Empfänger sollten mindestens 2 x λ/4 auseinander stehen. Hab ich gerade erst in einem Funker-Forum gelesen.

1 Like

Wieso ATtiny85, du schriebst von Uno und Nano.

Und auch die Taktfrequenz kann ein Problem machen, dann hängt das mit der Library zusammen.

Poste mal einen Link der verwendeten Library und ein Foto deines Aufbaus.

freddy64:
@uxomm: Das machst du genau richtig und ist keine "Nerd-Paranoia". Sender und Empfänger sollten mindestens 2 x λ/4 auseinander stehen. Hab ich gerade erst in einem Funker-Forum gelesen.

Hey super - danke für den theoretischen Background - wieder was gelernt!

freddy64:
Haben evtl. verschiedene Taktfrequenzen der Arduinos (8, 16 Mhz) einen Einfluss auf das Ergebnis?

Glaube ich eigentlich nicht, dass das ein Problem sein sollte.
In der Version-History von RadioHead steht:

1.21 2014-06-24
Fix SPI bus speed errors on 8MHz Arduinos.

Also würde ich annehmen, dass es auch mit 8MHz funktionieren sollte.