Per Funk gesendete Variable weiter verarbeiten

Hallo zusammen,

ich arbeite gerade an einer Heimautomatisierung durch mehrere Pro Minis, die (im ersten Schritt) Sensordaten per Funk (VirtualWire-Library) an einen Empfänger schicken. Es funktioniert auch schon soweit alles, nur möchte ich die Daten nicht ganz so offensichtlich durch das ungeschützte Funknetz jagen (“Fenster auf”, “Fenster zu”), sondern etwas verschleiert in Form von festen, vierstelligen Zahlencodes. Der Empfänger soll dann die diversen Codes der Sender lesen und in der Konsole als Text ausgeben.

Also:
1234 = Fenster im Bad ist auf
9876 = Fenster im Esszimmer ist zu

Mein Problem: Ich bekomme es zwar hin Variablen per Funk zu verschicken, aber weiß nicht, wie ich die char-Daten beim Empfänger wieder in eine Variable umwandeln kann. Ich kann sie also nicht abfangen und weiter verarbeiten.

Der Sender schickt die Daten wie folgt:

int fensterZu = 1043;
int fensterAuf = 7293;
char msg[24];
sprintf(msg, "%i.%i", fensterZu);
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();

Aktuell liest der Empänger die Daten so:

for (i=0;i< buflen;i++) {
Serial.print((char)buf[i]);

Ich möchte dann so etwas damit machen:

if ((char *)buf == 1043) {
      Serial.println("Balkontüre auf");
      }

Aber logischerweise kann er die 1043 nicht umwandeln, denn es ist ja eine Zeichenfolge und keine Variable.

Kann vielleicht jemand helfen, die Zeichenfolge wieder in eine Variable umzuwandeln?

Herzlichen Dank!

Hallo, das was du da machen möchtest, geht sicher auch, aber mit der Library "RCSwitch" wird es einfachen, da diese für Schaltaufgaben gebaut ist.

Da kannst du die empfangenen Zahlen per "Switch/Case" oder einer "if-Abfrage" wieder in deine gewünschten Texte umsetzen.

Oh. Die Library kannte ich noch nicht. Sieht tatsächlich so aus, als wäre das die Lösung. Schaue ich mir mal genauer an! Vielen Dank schon mal!

daniel_e:
Vielen Dank schon mal!

ja, gerne.
Geht damit bestimmt einfacher und du kannst dann später evtl. noch bestimmte Funksteckdosen schalten.

Mal abgesehen davon würde es hiermit gehen: http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html#ga3a1fe00c1327bbabc76688a7a1d73370

Solche Konvertierungsfunktionen gibt es für alle Datentypen (außer C String -> unsigned int) in beide Richtungen

Habe mir beides angesehen, aber "RCSwitch" ist einfach perfekt. Das Umkonvertieren hätte mit Atoi auch geklappt, aber es ist definitiv weniger Aufwand mit RCSwitch.

Läuft jetzt perfekt! Danke sehr!

Puh!

Ich hänge am nächsten Problem und bin total lost. Denke das überfordert meine Fähigkeiten als Anfänger...

RCSwitch ist perfekt, um feste Variablen bei bestimmten Zuständen zu verschicken. Nun möchte ich aber auch Sensorwerte auslesen und verschicken (Temperatur und Feuchtigkeit). Nur eben so, dass auf der anderen Seite die Daten wieder als Variable ausgelesen werden können, um sie weiter zu verarbeiten.

Zum Beispiel: Wenn es draußen kälter als 5°C ist, dann schalte die Heizung an.

Um mehrere Sensordaten zu verschicken muss ich dann wohl wieder auf VirtualWire zurückgreifen und mit Strings arbeiten, oder? Da bin ich aber mega überfordert.

Wie packe ich denn z.B. folgende Werte in einen String, so dass dieser beim Empfänger ausgelesen und wieder in die vorherigen Variablen umgewandelt werden kann?

int temp = 24;
int humidity = 85;
int water = 148;
int light = 820;

Ja, für Messdaten ist die VirtualWire besser geeignet, obwohl es auch mit der RCSwitch auch funktioniert. Du musst die Daten nur vorher in Long wandeln. In diesem Beitrag findest du auch ein Beispiel, wie du verschiedene Werte versenden kannst.