Go Down

Topic: Arduino 433 MHZ Tempereatur sender für ältere Wetterstation (Read 2804 times) previous topic - next topic

hbulf

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

jurs

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.

hbulf

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

hbulf

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

jurs

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:
Code: [Select]
buf[2] = 0;    //type = temperature
Setze:
Code: [Select]
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.

hbulf

Hm verstehe ich das richtig das bei den originalen Sendern zwei unterschiedliche Sendeprotokolle nutzen?

Wenn ja wie kann ich das in ein Script packen ? Vielen dank schon mal im vorraus.

jurs

Hm verstehe ich das richtig das bei den originalen Sendern zwei unterschiedliche Sendeprotokolle nutzen?

Wenn ja wie kann ich das in ein Script packen ? Vielen dank schon mal im vorraus.
Das Protokoll ist schon gleich: Immer 44 Bits, davon 1 Byte (8 Bits) Datensatzkennung und 3 Bytes (24 Bits) Nutzdaten
Es wird nur ein anderer Datensatztyp gesendet und die 3 Bytes mit den Nutzdaten im Protokoll sind geringfügig anders codiert.

Die drei übertragenen Ziffern 000 bis 999 stellen bei der Luftfeuchteübertragung direkt die Luftfeuchte in Zehntelprozent dar. Und beim Temperaturdatensatz sind die drei Ziffern 000 bis 999 die Temperatur in Zehntelgrad Celsius, allerdings mit einem Offset von 500 Zehntelgrad.

D.h. zur Übertragung einer Temperatur von 23,4°C wird nicht 234, sondern 234+500= 734 übertragen.

Aber zur Übertragung einer Luftfeuchte von 23,4%rF wird einfach 234 übertragen

Also immer drei Dezimalziffern. Nichts weiter. Nie ein Minuszeichen, also auch bei Minustemperaturen nicht.

Unterschieden werden die beiden Datensatzarten anhand des dritten Bytes im Datenprotokoll. Im Fall von buf[2] == 0x0 handelt es sich um einen Temperaturdatensatz und im Fall von buf[2] == 0xE um einen Luftfeuchtedatensatz. Das müßtest Du eben in Deiner Sendefunktion korrekt berücksichtigen:
- buf[2] entweder als 0x0 (Temperatur) oder 0xE (Luftfeuchte) senden
- und im Fall einer Temperatur einen Offset von 500 draufschlagen, aber im Fall einer Luftfeuchte nicht

Du kannst ja zum Testen erstmal einfach ausprobieren, in Deinem Code nur buf[2] = 0xE; zu setzen und ansonsten alles unverändert lassen.

Dann sollte die anBasisstation anstatt Temperaturen plötzlich Luftfeuchtewerte anzeigen. Wenn Du sonst nichts veränderst als den Datensatztyp zu ändern, sollte folgendes passieren: Die aktuelle Temperatur plus 50 wird als Luftfeuchte angezeigt.

Beispiel: Du hast eine Temperatur von 20,7°C, und nach der Änderung buf[2] = 0xE; zeigt die Basisstation dann plötzlich einen Luftfeuchtewert von 70,7°rF an. (Temperatur plus 50).

Im Zweifelsfall würde ich den Funktionen zum Zusammenbasteln und Senden der Daten einfach einen zweiten Parameter mitgeben, und mit einer einfachen if-Abfrage kann dann dieser Parameter leicht verglichen werden, welcher Datensatztyp gebildet und gesendet werden muss.


hbulf

Hallo und vieln vielen dank dafür habe das ganze mittlerweile auf einen Attiny85 geflasht und es funktioniert super. Nur ein Problem habe ich noch bei der Wetterstation mit Feuchtigkeitsanzeige sind ja zwei Anzeigen für die beiden Werte und ich bekomme es ums Verr......  nicht hin die Anzeige für die Luftfeuchte zu aktivieren, kann hat da vielleicht von euch Experten einen Tipp wie der Sketch aussehen muß?

Vielen Dank schon mal im vorraus

jurs

Hallo und vieln vielen dank dafür habe das ganze mittlerweile auf einen Attiny85 geflasht und es funktioniert super. Nur ein Problem habe ich noch bei der Wetterstation mit Feuchtigkeitsanzeige sind ja zwei Anzeigen für die beiden Werte und ich bekomme es ums Verr......  nicht hin die Anzeige für die Luftfeuchte zu aktivieren, kann hat da vielleicht von euch Experten einen Tipp wie der Sketch aussehen muß?
Hast Du mal den von mir in Antwort #21 vorgeschlagenen Test gemacht, um Luftfeuchte-Datensätze zu senden?

Wenn ja, hast Du auch die Prüfsummenberechnung entsprechend dem geänderten buf[2] angepasst?

hbulf

Ja das habe ich allerdings nicht die Datensätze was meinst du damit? Und entschuldige klingt jetzt bestimmt

blöd und Anfängerhaft, genau das bin ich was das Programmieren angeht, aber zweimal [2] buf funktioniert nicht

wie sollte das aussehen.

Vielen Dank schonmal im vorraus für deine grenzenlose Geduld mit mir

hbulf

Sorry das ich den alten Thread nochmal aufmache aber ich komme hier einfach nicht weiter, heißt ich bräuchte dringend eure Fachkundige Hilfe.

Go Up