Generelle Modul Frage

Hallo,

Ich habe vor ein Modul zu bauen.
Vorher habe ich eine generelle Frage dazu ob das über haupt möglich ist.

  1. (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.

  1. (Servermodul)
    Das Servermodul sammelt alle Daten und werten diese dann alle 5 Sekunden aus.

Ist das so überhaupt möglich???

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.

  1. Empfangsmodul
    Ich habe ca. 30 Geräte die über einen IP Socket die Daten schicken.
    Somit lege ich dann 30 mal das Empfangsmodul an.

  2. 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.

Ich will alle Geräte händisch anlegen. Discovery Instanz übersteigt meine Kenntnisse

Im Moment läuft es so ab:

Client Socket verbindet sich zum Gerät.

ClientSocket >> RegisterVariable>>Script (für Entschlüsselung)

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.

Danke deinem Generator kann ich schon mal ein Splittermodul in IPS anlegen.

Dein erzeugtes module.json
{
„id“: „{B77F61B0-7C0C-A4D1-A4F1-CB17CFA9F682}“,
„name“: „DigiGWSplitter“,
„type“: 2,
„vendor“: „SiS“,
„aliases“: [„digiSplitter“],
„parentRequirements“: ["{79827379-F36E-4ADA-8A95-5F8D1DC92FA9}"],
„childRequirements“: [{4920C2DF-8BB1-C731-C40B-DC05DF0EB273}],
„implemented“: ["{018EF6B5-AB94-40C6-AA53-46943E824ACF}", „{674C8091-4EBB-DDD9-9500-F816959E3EDF}“],
„prefix“: „DGWS“
}

parent ist klar.

was ist die childRequirements GUID und {674C8091-4EBB-DDD9-9500-F816959E3EDF} ??

oder sind das die neu erzeugten GUID die ich dann beim Gerät Modul eintragen muss ???

Das ist die TX und RX von Deiner Geräte Instanz.

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.

Danke für die Hilfe!!!

Ein Problem habe ich noch.

Wenn ich inder moduls.php etwas ändere dann kann ich die Instanz mit dem mdul nicht mehr neu anlegen.
Es kommt dann immer eine Fehlermeldung in IPS

Wie kann ich ein Modul lokal anlegen und ändern ohne IPS immer neu zu starten.

Ohne die Fehlermeldung zu kennen wird man Dir da schlecht weiterhelfen können.

MC_ReloadModule benutzten.

Ich habe es wie folgt angelegt:

C:\IP-Symcon\modules\MeineModule\DigiGWSplitter

In MeineModule liegt die library.json

In DigiGWSplitter liegt
form.json
module.json
module.php

IN IPS sehe ich in Modules alles und wenn ich die Instanz hinzufügen will kommt
Konnte Instanz nicht erstellen
Code -32603

library.json
{
„id“: „{6074924A-D17C-697E-3FA2-96E772384E06}“,
„author“: „Harald“,
„name“: „MeineModule“,
„url“: „“,
„compatibility“: {
„version“: „5.0“,
„date“: 1491343200
},
„version“: „0.1“,
„build“: 0,
„date“: 0
}

module.json
{
„id“: „{B77F61B0-7C0C-A4D1-A4F1-CB17CFA9F682}“,
„name“: „DigiGWSplitter“,
„type“: 2,
„vendor“: „SiS“,
„aliases“: [„digiSplitter“],
„parentRequirements“: ["{79827379-F36E-4ADA-8A95-5F8D1DC92FA9}"],
„childRequirements“: ,
„implemented“: ["{018EF6B5-AB94-40C6-AA53-46943E824ACF}", „{674C8091-4EBB-DDD9-9500-F816959E3EDF}“],
„prefix“: „DGW“
}

Ok habe ich hin bekommen…

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

ok auch das hat sich erledigt

Hallo,

Ich steh jezt wieder an.

In meinem Spliiter Modul kann ich jetzt die Daten empfangen entschlüsseln usw.

Ist es jetzt möglich, dass ich ein Severmodul erstelle das alle Daten von den 30 Spliitermodulen empängt ???

Bzw wie kann ich das lösen, dass meine 30 Splitter ihre Daten an ein gemeinsames Modul schicken ??

Habe ich mich verständlich Ausgedrück was ich will?

Gar nicht. Weil so eine Kombination gibt es nicht in IPS.
Es geht immer nur 1:n:m IO:Splitter:Device.
Bzw auch ohne Splitter.

Warum ist so etwas bei dir nötig?
Weil der ClientSocket hat ja auch nur eine Verbindung über das Netzwerk.

Michael