Go Down

Topic: Schlechte 433MHz-Funkverbindung - wo ist das Problem? (Read 3767 times) previous topic - next topic

daniel_e

:smiley-sad-blue:

Du musst doch wissen, was du für Daten sendest bzw. wie die aussehen.
Ich weiß, was ich für Daten sende.

Jeder Sender schickt ein Array mit ca. 20 Integern. Damit beim Empfänger alles in der richtigen Reihenfolge ankommt sind die Variablen, die die anderen Sender schicken genullt. Jeder Sender schickt also nur die ints, die ihn betreffen.

Wieviele Byte das sind kann ich nicht ausrechnen. Soweit ich das lese besteht ein int aus 2 Byte. Ein Sender schickt maximal 4 ints für an ihm angeschlossene Sensoren, also 8 Byte. Ich weiß nicht, ob die 16 anderen, genullten Variablen auch als 2 Byte berechnet werden. Wenn ja, sind es 40 Byte, die ein Sender maximal verschickt.

ist aber gefährliches Halbwissen, das ich hier von mir gebe und hätte lieber drauf verzichtet...

Whandall

IJeder Sender schickt ein Array mit ca. 20 Integern. Damit beim Empfänger alles in der richtigen Reihenfolge ankommt sind die Variablen, die die anderen Sender schicken genullt. Jeder Sender schickt also nur die ints, die ihn betreffen.
Wenn du als erstes Byte eine Kennung schickst, kannst du dir die Nullen sparen (und das solltest du).
Jeder muss nur noch seine Kennung wissen, aber nicht mehr seine Position und die Pakete sind viel kleiner.
Ah, this is obviously some strange usage of the word 'safe' that I wasn't previously aware of. (D.Adams)

HotSystems

Jeder Sender schickt ein Array mit ca. 20 Integern....
Das ist allerdings ne ganze Menge. ;)
Und Whandall hat es ja schon geschrieben, als erstes eine Kennung und anschließend den speziellen Wert. Da kommst du mit 2 Byte aus und alles geht viel schneller und vermutlich auch ohne Probleme.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Whandall

Auf der Empfängerseite kannst du die letzten Messwerte von allen Stationen weiterhin in einem Array halten,
beim Empfang einer Nachricht trägst du halt nur den Wert an der richtigen Stelle ein.
Ah, this is obviously some strange usage of the word 'safe' that I wasn't previously aware of. (D.Adams)

daniel_e

Wenn du als erstes Byte eine Kennung schickst, kannst du dir die Nullen sparen (und das solltest du).
Jeder muss nur noch seine Kennung wissen, aber nicht mehr seine Position und die Pakete sind viel kleiner.
Auf der Empfängerseite kannst du die letzten Messwerte von allen Stationen weiterhin in einem Array halten,
beim Empfang einer Nachricht trägst du halt nur den Wert an der richtigen Stelle ein.
Ah... Damit löse ich ein anderes Problem, das ich bisher nicht lösen konnte. Fantastisch :-)

Ich schicke bereits eindeutige Kennungen. Jeder Sender hat seine eigene zweistellige Zahlenkombi vor dem eigentlichen int.

Z.B. eine Temperatur von 23 Grad wird dann als 20023 verschickt.

Aktuell sieht mein Code ja so aus:

Code: [Select]
  if (vw_get_message(buf, &buflen)) // Non-blocking
  {
    Serial.println();
    Serial.println("Beginn Recieving");
    Serial.println();
    int temperature = atoi(strtok((char*)buf, ","));  // Look for a comma, the return the data before it.
    int humidity = atoi(strtok(NULL, ",")); // same as above
    int brightness = atoi(strtok(NULL, ",")); // same as above
// usw. usw.
    int counter4 = atoi(strtok(NULL, ",")); // same as above
    int doorstatus3 = atoi(strtok(NULL, ",")); // same as above
    int counter5 = atoi(strtok(NULL, ".")); // Look for a period, then return data before it.
}


Ich achte also darauf, dass nur der Sender mit der Temperatur als erstes Array-Element die Temperatur mit der 20 vor verschickt. Alle anderen schicken eine Null. Als nächstes fange ich dann mit einer Schleife ab, dass wenn etwas anderes als Null geschickt wird, weitere Dinge passieren.

Das heißt die Stelle ist wurscht, wenn ich die 20 direkt zur Bedingung vor dem Empfang mache?

Aber wie kann ich dem Empfänger das sagen, dass er nur Daten empfangen soll, die beispielsweise mit 20 beginnen?


HotSystems

Du trennst die 20 ab und vergleichst die in einer if-Abfrage.
Zwischen jedem Byte hast du ja ein Komma, da ist es doch kein Problem.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Whandall

Aber wie kann ich dem Empfänger das sagen, dass er nur Daten empfangen soll, die beispielsweise mit 20 beginnen?
Warum sollte er das tun?

Wenn ein Messwert-Paket empfangen wird trägst du den Wert einfach in den Array ein.
Du könntest dir noch merken dass es für diese Variable einen neuen Wert gibt,
eventuell ebenso wann er empfangen wurde.

Wenn du den Wert von "20" wissen willst befragst du nur deine Datenbasis (Array, Flags, Timestamps, ...).
Ah, this is obviously some strange usage of the word 'safe' that I wasn't previously aware of. (D.Adams)

daniel_e

Okay... das bringt mich jetzt mal einen großen Meilenstein weiter und werde es direkt mal ausprobieren.

Ich muss dazu sagen, dass ich vor diesem Projekt in meinem Leben noch keine Zeile programmiert habe. Insofern freue ich mich, dass ich kapiert habe, was ihr meint und versuche nun mal alles etwas schlanker zu coden.

Ob es das eigentliche Problem löst weiß ich nicht, aber für den Funkverkehr wird es schon mal besser!

Super cool! Vielen Dank schonmal!

HotSystems

Okay... das bringt mich jetzt mal einen großen Meilenstein weiter und werde es direkt mal ausprobieren.

Ich muss dazu sagen, dass ich vor diesem Projekt in meinem Leben noch keine Zeile programmiert habe. Insofern freue ich mich, dass ich kapiert habe, was ihr meint und versuche nun mal alles etwas schlanker zu coden.

Ob es das eigentliche Problem löst weiß ich nicht, aber für den Funkverkehr wird es schon mal besser!

Super cool! Vielen Dank schonmal!
Ich bin davon überzeugt, dass es klappt.

Weniger Daten, kürzere Übertragung, weniger Probleme.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Whandall

Du solltest immer bemüht sein möglichst wenige Informationen verteilt zu halten,
im konkreten Fall die Position der Messwerte im Auswerte-Array.
Das mit den Nullen mag ja einigermaßen funktionieren, erzeugt aber redundante Daten (die Nullen)
und verhindert z.B. dass du eine Null als Wert übertragen kannst oder deine Wertetabelle umsortierst.
Kommt ein weiterer Knoten hinzu, musst du mit dem alten System alle Knoten neu programmieren.

Die Knoten-ID lässt sich prima im EEProm ablegen, so könntest du identischen Kode auf mehren Knoten betreiben.
Ah, this is obviously some strange usage of the word 'safe' that I wasn't previously aware of. (D.Adams)

daniel_e

So. Kleiner Status: Hab den Code aktualisiert. Alle Sender übertragen nun nur noch, was sie sollen. Es läuft nun alles DEUTLICH geschmeidiger. Es gehen zwar immer noch Pakete verloren, aber das war so eh von mir berücksichtigt und ist nicht weiter schlimm.

Darum sehe ich das Problem nun erst mal als gelöst an, bedanke mich ganz herzlich an alle, die geholfen haben. Im Speziellen natürlich Whandall und HotSystems, die den entscheidenden Hinweis gegeben haben.

Ich baue das ganz nun weiter aus und schaue mal, wo die nächste Grenze liegt. Die kommt bestimmt, da das ganze nun auch noch auf verschiedene Etagen ausgebaut wird. Und da reicht die Reichweite nicht. Da werden also entweder andere Funkmodule hermüssen oder ich baue einen Funkrepeater :-)

Schönes Wochenende allerseits!

HotSystems

So. Kleiner Status: Hab den Code aktualisiert. Alle Sender übertragen nun nur noch, was sie sollen. Es läuft nun alles DEUTLICH geschmeidiger....

Echt super, das freut mich, dass es jetzt funktioniert.

Da wäre doch für die Beteiligten ein "Karma" angebracht, oder ?
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

SkobyMobil

Hallo,
"Da wäre doch für die Beteiligten ein "Karma" angebracht, oder ?"

Wir machen ja alle mal Fehler- diesen will ich dem Wetter zuschreiben.
Gruß und Spaß
Andreas
die zweite Maus bekommt den Speck...

HotSystems

"Da wäre doch für die Beteiligten ein "Karma" angebracht, oder ?"
...
Wir machen ja alle mal Fehler- diesen will ich dem Wetter zuschreiben.

Und wo ist dein Problem ?
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

SkobyMobil

Hallo,
ich bin einmal vorsichtig.
Ich finde es schon ziemlich bemerkenswert in einem Forum nach Belobigungen zu betteln.
Gruß und Spaß
Andreas
die zweite Maus bekommt den Speck...

Go Up