Arduino 433 MHZ Tempereatur sender für ältere Wetterstation

Hallo liebe Arduino Experten.

Bin absolut neu und habe folgendes Problem, und zwar habe ich mehrer ältere Wetterstationen die ich weiter nutzen möchte, allerdings habe ich keine dementsprechenden Sender mehr. Könnt ihr mir da weiterhelfen?

Bin für jede hilfreiche Antwort dankbar.

MfG Ulf

Leider wissen wir nicht, was das für Wetterstationen sind. Daher können wir auch keinen Tipp geben. Du musst uns shon mehr Informationen darüber geben.

hbulf: Bin absolut neu und habe folgendes Problem, und zwar habe ich mehrer ältere Wetterstationen die ich weiter nutzen möchte, allerdings habe ich keine dementsprechenden Sender mehr. Könnt ihr mir da weiterhelfen?

Die 433MHz Außensensoren verwenden grundsätzlich herstellerspezifische und proprietäre Sendeprotokolle.

D.h. Du brauchst entweder Informationen über das bereits von jemandem geknackte Sendeprotokoll, die so dokumentiert sind, dass Du einen Sender mit diesem Sendeprotokoll nachbauen/nachprogrammieren kannst. Ausgangspunkt für die Suche, ob es solche Informationen gibt, wäre der Herstellername, dessen Sendeprotokoll verwendet wird. Oder wenigstens die Modellbezeichnung der Station, wenn der Herstellername unbekannt ist (bei vielen Home-Wetterstationen ist es so, dass dieselbe Wetterstation eines Herstellers unter einigen Dutzend Handelsmarken verkauft wird).

Oder Du benötigst einen funktionierenden Außensensor mitsamt funktionierender Basisstation, eine entsprechende Messplatzausrüstung und eigene Fähigkeiten in Cryptologie, um das Übertragungsprotokoll selbst zu knacken.

Hallo vielen Dank für die schnelle Antwort.

Eine ist eine WS-7018 und die andere nennt sich WS-7016

Der Sender ist ein TX3-TH Sensor.

hbulf: Hallo vielen Dank für die schnelle Antwort.

Eine ist eine WS-7018 und die andere nennt sich WS-7016

Und welcher Hersteller? Jurs hat doch sehr exakt beschrieben, was für Angaben du machen musst. Möglichst mit Link der Teile.

Oh sorry sind beide von Technoline

Ein kuzes googeln hat bei mir keinen Erfolg gebracht, was nich heißen soll, das es keine Informationen darüber gibt. Wenn du nach Name und Typenbezeichnung sowie weiteren Begriffen "Funkcode " o.ä. googelst, kannst du evtl. fündig werden. Aber viel Hoffnung habe ich da nicht.

hbulf: Hallo vielen Dank für die schnelle Antwort.

Eine ist eine WS-7018 und die andere nennt sich WS-7016

Also eine Wetterstation des Herstellers LaCrosse.

Die wird in Deutschland unter bestimmt einem Dutzend verschiedener Handelsnamen verkauft, der bekannteste davon dürfte "Technoline" sein.

Das Sendeprotokoll für einen reinen Temperatursender (ohne Luftfeuchte) ist hier beschrieben, einschließlich Arduino-Code: http://forum.arduino.cc/index.php?topic=155483.0

Meines Wissens nach gibt es bei Lacrosse-Wetterstationen nur wenige verschiedene Übertragungsprotokolle, und zwar - ein "altes" Protokoll für 433 MHz Temperatur und Luftfeuchtesensoren - ein "altes" Protokoll für "große" 433 MHz Stationen mit Windstärke-, Windrichtungs-, und Regenmessung - ein "neues" Protokoll für die Stationen mit "IT" in der Modellbezeichnung Die alten Protokolle sind meines Erachtens nach allesamt geknackt, so dass Du darüber Infos finden kannst. Für die neueren "IT" Stationen dürfe es vermutlich schlechter aussehen, aber so eine hast Du ja auch nicht.

Naja gefunden habe ich einen Sketch gefunden der mir schonmal was anzeigt allerdings nicht das was es anzeigen sollte.

Habe mal das Script mit angehangen vieleicht kann jemand was damit anfangen.

TX6U_send.ino (3.6 KB)

Es wäre besser den Code hier in Code-Tags zu posten, dann kann ich ihn auch auf demm Tablet lesen.
Setzte den bitte in Code-Tags (Schaltfläche </>)
Und schreibe uns was er anzeigt und was er anzeigen soll.

hbulf:
Naja gefunden habe ich einen Sketch gefunden der mir schonmal was anzeigt allerdings nicht das was es anzeigen sollte.

Habe mal das Script mit angehangen vieleicht kann jemand was damit anfangen.

Was genau hast Du an dem Sketch nicht verstanden?

Der Sketch codiert und sendet ausschließlich “Testwerte”, nur für Temperatur und nicht für Luftfeuchte, und zwar die Temperaturen von 0.0 °C bis 49.9°C im Abstand von jeweils 61 Sekunden, mit einer Temperaturerhöhung von 0.1°C bei jedem Senden:

// sends values 0-499 in infinite loop for testing

  while(1) {
    for (i=0; i<500; i++) {
      send_message(i);   //TX6U sends messages every 61 seconds
      delay(msg_timer);  //DEMO ONLY: this is a 61 second delay!
    }
  }

Und wenn nach 500 Minuten als letzte Temperatur 49.9°C gesendet wurde, fängt die Schleife nach ca. 61 Sekunden wieder mit 0.0°C an.

Hm okay das hatte ich genauso verstanden allerdings wie kann ichdas jetzt für mich nutzbar machen, das Programmieren macht mir noch sehr grosse Schwierigkeiten.

Habe hier ein Protokol gefunden für den Sender. http://www.f6fbb.org/domo/sensors/tx3_th.php

Statt der oben genannten Schleife baust du einen Sensor ein, vonn dem du die gemessenen Daten überträgst.
Hast du denn schon einen Sender angeschlossen?

Ja habe ich ich kann auch sehen wie die Temperatur aller 61 sec. steigt nur ich weiß nicht wie und wo der code eingetragen werden muss.

hbulf: Hm okay das hatte ich genauso verstanden allerdings wie kann ichdas jetzt für mich nutzbar machen, das Programmieren macht mir noch sehr grosse Schwierigkeiten.

Wenn Du "echte" statt Test-Temperaturen senden möchtest, brauchst Du echte Temperaturen, und zwar als ganzzahligen Integer-Zahlenwert in Zehntelgrad Celsius.

Soweit ich das gesehen habe, gibt es für unterschiedliche Sensoren bereits fertige Libraries zum Messen von Temperaturen, deren einziges Manko ist, dass völlig verblödete Library-Programmierer die gemessene Temperatur als Gleitkommazahl 'float' zurückliefern. Solche Libraries kannst Du Dir installieren, und die einzige Schwierigkeit würde dann darin bestehen, dass Du die unbrauchbare float-Temperatur vor dem Senden erst in einen int umwandeln mußt.

Unter der Voraussetzung, Du hättest so eine beknackte Messfunktion namens readFloatTemperature(), , die Dir Gleitkomma-Temperaturen zurückliefert, würdest Du zum Beispiel die Temperatur damit messen, den Wert mit 10 multiplizieren und auf die nächste ganze Zahl runden, und dann den Zehntelgradwert als ganze Zahl senden, z.B. ebenfalls alle ca. 61 Sekunden:

void loop() {
      send_message(lround(readFloatTemperature()*10));   //TX6U sends messages every 61 seconds
      delay(msg_timer);  //DEMO ONLY: this is a 61 second delay!
}

Ah danke ich glaube ich komme langsam weiter werde ich gleich testen

hbulf: Ah danke ich glaube ich komme langsam weiter werde ich gleich testen

Für den DHT22-Sensor gibt es hier beispielsweise einen vollständigen Sketch für einen Temperatursender:

https://github.com/briankimstudio/tx6u-arduino/blob/master/tx6u-arduino.ino

Um auch die Luftfeuchte zu senden, müßte man allerdings noch eine zusätzliche Funktion selberschreiben.

Super funktioniert perfeckt :-) Ich trau mich gar nicht zufragen wie man das mit der Luftfeuchtigkeit hinbekommt.

Wie müßte das mit der Luftfeuchtigkeit aussehen, kann da wer weiterhelfen?

hbulf: Super funktioniert perfeckt :-) Ich trau mich gar nicht zufragen wie man das mit der Luftfeuchtigkeit hinbekommt.

Mit dem Senden der Luftfeuchte funktioniert das fast genau so wie mit dem Senden der Temperatur, mit folgenden Änderungen in der make_message Funktion im Sendepuffer:

Als drittes Byte (Array-Index 2) ist NICHT die Kennung für Temperatur zu senden, sondern für Luftfeuchte.

Streiche:

buf[2] = 0;    //type = temperature

Setze:

buf[2] = 0xE;    //type = humidity

Außerdem entfällt bei Luftfeuchtewerten der Versatz um 500 Einheiten, wie er bei der Temperatur verwendet wird, um durch Senden von nur 3 Ziffern, sowohl negative als auch positive Temperaturen senden zu können (übertragbarer Temperaturbereich im Sendeprotokoll -50,0°C bis +49,9°C). Luftfeuchtewerte sind dagegen immer positiv, daher gibt es hier keinen Versatz, sondern es werden direkt drei Ziffern mit ggf. führenden Nullen gesendet, die für die Luftfeuchte in Zehntelprozent stehen (übertragbarer Luftfeuchtebereich im Sendeprotokoll 0,0%rF bis 99,9%rF.

Also ich würde vermutlich die beiden Funktionen make_message und send_message so umschreiben, dass diese einen zweiten Parameter bekommen, über den man die Information übergeben kann, ob eine Temperatur oder eine Luftfeuchte codiert und gesendet werden soll.