Ich habe vor ein Modul zu bauen.
Vorher habe ich eine generelle Frage dazu ob das über haupt möglich ist.
(Empfang + Entschlüsselungsmodul)
Ein Modul soll von einem Gerät über einen Socket verschlüsselte Daten empfangen und zwischenspeichern bis alle Daten empfangen wurden.
Im Modul sollen diese dann entschlüsselt und geprüft werden.
Davon gibt es dann mehrere Modul somit auch mehrer Geräte.
Die Daten sollen dann an eine übergeordnetes Modul (Servermodul) übergeben werden.
(Servermodul)
Das Servermodul sammelt alle Daten und werten diese dann alle 5 Sekunden aus.
Wenn der Socket für alle Geräte gleich ist, also entweder ein Gateway oder ein Gerät mit Gatewayfunktion, dann brauchst Du vom Aufbau ein Clientsocket, einen Splittter und Deviceinstanzen. Im Splitter musst Du dann die Daten aus dem Clientsocket in einen Buffer schreiben und entschlüsselen. Sobald das Datenpacket vollständig ist kannst Du es dann vom Splitter an die Geräte weiterleiten.
Sollte jedes Gerät einen eigenen Clientsocket benötigen brauchst Du einen Konfigurator zum Anlegen der Geräte. Dann besteht jedes Gerät aus IO, Splitter und Geräteinstanz. Daten werden dann wieder im Splitter im Buffer gesammelt und entschlüsselt.
Das hängt ja davon ab wie die Kommunikation erfolgt, wenn es ein Socket ist brauchst Du nichts zyklisch abrufen, die Daten kommen ja dann rein wenn neue Daten anliegen. Wenn Du die Daten aktiv vom Gerät anfordern musst, also kein Clientsocket benutzt wird, must Du einen eigenen IO nutzten, der dann die Daten mit einem Timer im Modul zyklisch abholt.
Möglich ist das also alles, nur ohne zu wissen wie die Kommunikation genau erfolgt wird man Dir da keine genaue Hilfestellung geben können, da musst Du dann schon nähere Informationen liefern bzw. konkreter Fragen wo das Problem genau liegt. Dann kann man zumindest auf Module verweisen in denen Du das anschauen kannst wie das vielleicht von der Kommunikation her ähnlich funktioniert.
Empfangsmodul
Ich habe ca. 30 Geräte die über einen IP Socket die Daten schicken.
Somit lege ich dann 30 mal das Empfangsmodul an.
Servermodul
Da jedes Gerät ca. 5 mal / Sekunde ein Packet sendet will ich alle Daten dann im Server Modul sammeln und dann an das Script weiter geben das die Daten verarbeitet, speichert, anzeigt usw.
Ohne Module habe ich es ja schon laufen aber nur mit 10 Geräte.
ClientSocket >> RegisterVariable>>Script
Problem ist derzeit, dass zu viele Scripte gleichzeitig laufen.
Wenn jedes Gerät mit einer eigenen IP-Adresse kommuniziert braucht dann wohl jedes Gerät einen eigenen IO.
Falls sich das Gerät irgendwie indentifizieren lässt und im Netzwerk finden, kannst Du auch einen Discovery Instanz bauen, die die Geräte im Netzwerk findet. Dann kann aus der Discovery Instanz die 30 Geräte automatisch in IP-Symcon angelegt werden.
Schickt denn jedes Gerät an die eigene IP oder gibt es eine IP über die die Kommunikation von allen Geräten erfolgt? Auf alle Fälle wird das, was Du zur Zeit im Skript abarbeitest, dann im Splitter gemacht.
Jede Register Variable ruft das gleiche Script für die Entschlüsselung auf (Semaphore) weil dieses Script dann die Entschlüsselten Daten wieder in eine Registervariable schreibt wo alle Daten gesammelt werden.
Alle 5 Sekunden wird dann die Registervariable ausgelsen und die Daten gesammelt verarbeitet.
Somit konnt ich die Anzahl der gleichzeitg laufenden Scripte reduzieren.
Dann musst da an sich nur das Skript der Registervariable sauber in den Splitter packen und dann sobald das entschlüsselt ist an die Children weiterreichen.
Irgendwas sammeln must Du ja im dem Fall im Modul nicht, jedes Gerät hat einen eigenen Splitter der das entschlüsselt und sobald das entschlüsselt ist an das Gerät durchreicht. Das läuft dann alles über den Datenfluss von IP-Symcon.
Das sind die für Deine Geräte Instanz eindeutig erzeugten GUIDs. Die sollten dementsprechend auch schon bei der Geräte Instanz eingetragen sein. Bei SendDataToParent und SendDataToChildren sollten dementsprechned dann auch die richtigen GUIDs schon eingetragen sein, so das der Datenfluss grundsätzlich richtig eingerichtet ist. Nur das Auswerten und Entschlüsseln musst Du natürlich selber ergänzen.
Ich empfange jetzt in meinem Modul Daten vom client Socket.
Mit mit SendDebug sehe ich die Daten im Debug Fenster.
Soweit ok.
Muss ich die Daten irgendwie umwandeln??
Im Debug Fenster vom clientSocket empfange ich z.B. hex 32 AC FF 93
Im Debug Fenster vom clientSocket empfange ich "2\u00ac\u00ff\u00938&\u008f\u00ae\ usw