Vorgehensweise zum Speichern von vielen IDs und dazugehörigen Nummern

Hallo Zusammen
(Achtung viel Text):wink:

Ich bin gerade dabei das Plugwise-System direkt aus IP-Symcon heraus laufen zu lassen, doch beim überprüfen ob ein Befehl auch angekommen ist und bestätigt wird bräuchte ich mal eure Hilfe.

Man bekommt zwar eine Fehlermeldung wenn ein Befehl nicht angekommen ist, aber jetzt muss man der Fehlermeldung noch der ID des angesprochenen Gerätes(Circle) zuordnen.

So läuft das ganze ab:

IP-Symcon sendet über eine Registervariable/Serial Port den Befehl+ID des Circle an den USB Stick und wird vom Stick mit einer fortlaufenden Funknummer bestätigt.
Der Stick sendet dann den Befehl an den gewünschten Circle und bekommt dann die Rückmeldung das der Befehl angekommen ist.
Wenn der Funkbefehl nicht innerhalb 5 Sekunden vom Circle bestätigt wird sendet der Stick einen Fehler, aber nur mit der Funknummer und nicht mit der ID des Circle zurück.

IP-Symcon sendet an den Stick 0017 000D6F0000D3879C 00 EF0B

0017 ist der Befehl von IP-Symcon zum schalten des Verbrauchers
000D6F0000D3879C die Adresse des Circle <------------------------------ Die will ich speichern
00 wäre der Befehl zum ausschalten
EF0B ist die CRC Kontrollsumme

Der Stick antwortet dann 0000 0B30 00C1 7EDE

0000 Ist immer die Kennung des Sticks
0B30 die fortlaufende Funknummer für diesen Befehl <--------------- zusammen mit dieser Nummer
00C1 Alles Empfangen
7EDE die CRC Kontrollsumme

Und wenn der Befehl vom Circle bestätigt wird kommt in IP-Symcon das an
0000 0B30 00DE 000D6F0000D3879C 793C

0000 wieder der Stick
0B30 die Funknummer
00DE die Info das ausgeschaltet worden ist
000D6F… Die ID des Circle
793C die CRC Kontrollnummer

Das ist ja alles super und immer mit der ID des Circle, also genau was ich brauche.

Wenn der Befehl aber nicht vom Circle empfangen wurde kommt vom Stick nur das zurück 0000 0B31 00E1 FA6A

0000 wieder der Stick
0B31 die Funknummer
00E1 Info das der Befehl nicht bestätigt wurde
FA6A CRC Kontrollnummer

Jetzt müsste ich diese Funknummer irgendwie der dazugehörigen ID des Gerätes zuordnen um darauf reagieren zu können(nochmals senden, Fehlermeldung ausgeben welcher Circle nicht erreichbar ist usw.).

Ich habe mir das so vorgestellt das wenn ein Befehl abgesendet wird die ID des Circle gespeichert wird und von der Antwort des Sticks die Funknummer dazu.
Dann könnte man, wenn der Befehl nicht ankommt nachschauen welche ID zu der Funknummer gehört.

Soweit die Theorie. Jetzt aber endlich die FRAGE:

Wo(Variable, Text Datei, … ) und wie könnte ich die Daten speichern (wir reden hier von zur Zeit 25 Befehlen innerhalb von 4 Sekunden und den dazugehörigen Antworten).

Hoffe Ihr habt ne Idee bzw. habt erstmal verstanden was ich eigentlich will :smiley:

Gruß Jannis

Hallo Jannis,

ich würde einfach eine String-Variable nehmen und alle offenen (noch nicht bestätigten)
Geräte, per Komma getrennt darin speichern.
Diesen kompletten String kannst Du dann schön an den Kommata in ein Array zerlegen.
Das Array kannst Du dann gut durchsuchen, editieren und wieder zusammenbauen.

bei der vorgehensweise solltest du aber im Hinterkopf haben das

wir reden hier von zur Zeit 25 Befehlen innerhalb von 4 Sekunden und den dazugehörigen Antworten.

es dann zu Verzögerungen der Schaltung kommt

Und er muss dann regelmäßig eine Garbage-Collection auslösen weil da sicher im laufe der Zeit Leichen in der Variable zurück bleiben.

Vielleicht wäre eine einzelne Variable pro Circle eine Möglichkeit in der die jeweils letzte Funk-ID abgelegt wird.

Bin leider noch nicht soweit, aber für mein Message-Queue-System wäre das was…

asyncrone Verarbeitung und wenig overhead…