Präsenzinformation der Clients - Funkdatenübertagung

Hallo Experten,
Arbeite gerade an einem Projekt mit rf69 Modulen und dieser Bibliothek. Meherer Sensoren (Clients) schicken Sensordaten an den Empfänger (Server).
Nun möchte ich gerne eine Kontrollfunktion am Server einbauen, welche überprüft ob in einem gewissen Zeitabstand von einem Client Daten eingetroffen sind. Dies darum um zB zu überprüfen, ob der Client noch aktiv ist.
Dachte dabei an dem Ausbau des Standardbeispiels von BlinkwithoutDelay.
Hat jemand bereits Erfahrung mit solchen “Timeouts”?
Wie würdet ihr das Problem eleganter lösen?
Vielen Dank für eure Unterstützung!!! :wink:

millis() ist der richtige Weg.

Für jeden Client den letzten Millis-Wert merken, wenn er gesendet hat.
Die Werte könnte man in einem Array verwalten.

Gruß Tommy

Wow 8) , das ging ja sehr schnell.
Tommy56, Vielen Dank für deine Bestätigung und deinem Tipp!!!! :slight_smile:

Einfacher wäre es, du rufst von Server die Clients nacheinander auf, deren Daten zu senden.
Das kannst du in einem bestimmten Rythmus machen.
Dann hast du sofort den Client, der nicht mehr antwortet.
Und es kommt zu keinen Problemen, dass mal 2 Clients gleichzeitig senden.

@HotSystems: Habe ursprünglich auch kurz mal an deine Idee gedacht. Habe sie dann "auf Seite gelegt", da ich mit meinem Projekt Temperaturdaten versenden möchte und die Client sollen nur Daten senden, wenn sich der Wert verändert hat um Batterie zu sparen.
Nach meinen Infos müsste es kein Problem sein, wenn 2 Clients Daten senden, denn die Daten sind ja adressiert. Im schlimmsten Fall, wenn die Daten nicht angekommen sind, werden die Daten durch einer Abfrage nochmals versendet.
Danke für deinen Beitrag!

Hi

Selber verschicke ich Temperatur-Daten via CAN.
Die Parameter/Details Sensoren habe ich in einem struct zusammen gefasst - unter Anderem auch, wann das letzte Lebenszeichen empfangen wurde.
Wenn der Sensor x Minuten nicht erneut gesehen wurde, gilt Dieser als tot.
(millis()-lastseen>waittime)

MfG

@postmaster-ino: Danke für deinen Beitrag.
Dein Tipp mit der struct werde ich versuchen umzusetzen.

LOOIIS:
@HotSystems: Habe ursprünglich auch kurz mal an deine Idee gedacht. Habe sie dann "auf Seite gelegt", da ich mit meinem Projekt Temperaturdaten versenden möchte und die Client sollen nur Daten senden, wenn sich der Wert verändert hat um Batterie zu sparen.
Nach meinen Infos müsste es kein Problem sein, wenn 2 Clients Daten senden, denn die Daten sind ja adressiert. Im schlimmsten Fall, wenn die Daten nicht angekommen sind, werden die Daten durch einer Abfrage nochmals versendet.
Danke für deinen Beitrag!

Na, ok.
Jeder muss seine Erfahrung machen.
Aber wenn 2 Clients gleichzeitig senden, kann ein Empfänger nichts verwertbares daraus entnehmen.
Diese Daten werden verworfen.
Und wenn du dazu keine exakte Zeit verwendest, kann das häufiger passieren, muss aber nicht.

Danke für deinen Beitrag.
Stimpt, im worst case Fall umso länger... Habe bemerkt, dass bereits bei zwei Clients verbunden mit einem Server Nachrichten nicht ankommen. Also umso öfter zB je mehr Clients.
Also dann würdest du persönlich die Clients immer in bestimmten Zeitabständen (zB 1 Minute) abfragen.
Habe gesehen, dass die DHT22 Sensoren ca alle max. 30-40 Sekunden entweder Feuchtigkeit oder Temperatur leicht verändern. Dann würde eine Abfrage in Minutentakt auch ausreichen und man könnte zusätzlich Batterie sparen. :slight_smile: U zudem es dient ja nicht zu wissenschaftlichen Zwecken bezüglich Genauigkeit ;D

Ja, die Clients können ja ständig ihre Sensoren auslesen, aber die Abfrage per Funk kannst du dann regelmäßig jede Minute durchführen.

Wie könnte der Programmablauf aussehen?
Ich habe an sowas gedacht:

-Client wählen und Datenanfrage senden
-überprüfen ob in einem gewissen Zeitabschnitt Daten vom Client eintreffen
-Daten auswerten

  • von vorne beginnen

LOOIIS:
Wie könnte der Programmablauf aussehen?
Ich habe an sowas gedacht:

-Client wählen und Datenanfrage senden
-überprüfen ob in einem gewissen Zeitabschnitt Daten vom Client eintreffen
-Daten auswerten

  • von vorne beginnen

Ja, korrekt, so könnte es funktionieren. Und das nacheinander für jeden Client. Dann gibt es keine Kollisionen der Funkdaten.
Du solltest aber über eine Prüfung (Checksumme) der Daten nachdenken und wenn die nicht korrekt sind , den Client erneut abfragen.