Wie automatisch in einem Modul mehrere IO Instanzen nutzten?

Bisher habe ich immer mit ConnectParent im Device und RequireParent im Splitter gearbeitet und die passenden Instanzen bzw. den I/O zu verbinden. Der normale Aufbau ist ja ein I/O, ein Splitter und mehrere Devices.

Jetzt stelle ich mir die Frage wie löse ich das wenn in einem Modul mehrere I/Os genutzt werden. Beispiel jemand besitzt zwei Logitech Hubs. Jeder Logitech Hub kommuniziert mit seinem eigenen Clientsocket I/O mit der IP-Adresse des jeweiligen Hub, darunter liegt dann der zugehörige Splitter und darunter alle Geräte die an dem Hub angelernt sind. Oder jemand besitzt zwei AV Receiver des gleichen Herstellers usw. Mir fällt jetzt nur das Vorgehen ein per Hand einen zweiten I/O anzulegen diesen zu konfigurieren, dann den Splitter manuell anlegen und zum Schluss das Device und bei jedem muss man dann sicherstellen das auch die richtige übergeordnete Instanz ausgewählt ist.

Gibt es irgendeine Möglichkeit die richtige Zuordnung der Instanzen in einem Modul vorzunehmen ohne das der Nutzer bei mehreren I/Os dies von Hand anpassen muss?

What ?
Also es gibt Connect Force und RequireParent.
Und RequireParent — IP-Symcon :: Automatisierungssoftware ist das was du im Splitter brauchst dann ist der IO schon OK.
Und bei dem Devices muss man dann selbst umstellen, wie auch bei anderen (HM) Instanzen oder einen Konfigurator anbieten.

Der Titel impliziert eher du willst an einer Instanz zwei IOs haben. Das geht nicht :wink:
Michael

Vielleicht denke ich ja auch zu kompliziert.

Nein will ich nicht. Ein Logitech Hub hat einen I/O nämlich den eigenen in dem die IP-Adresse des Hubs eingestellt ist. Es kann aber mehrere Hubs geben also gibt es auch mehrere I/Os. Dazu dann jeweils den zugeordneten Splitter und die Geräte.

Das es ConnectParent und RequireParent gibt ist mir bekannt. Ich sehe nur nicht wie das in dem Zusammenhang funktionieren soll.

ConnectParent
Die Funktion verbindet die Instanz mit einer vorhandenen übergeordneten kompatiblen (Parent) Instanz. Sollte diese nicht vorhanden sein, wird diese erstellt und anschließend verbunden.

Wenn ich jetzt ein DeviceInstanz habe die erstellt wird und mit ConnectParent arbeite funktioniert das nicht den wenn bereits ein Splitter da ist wird kein Zweiter erstellt.

RequireParent
Sofern keine Verbindung existiert, wird eine übergeordnete Instanz mit der ID ÜbergordneteGUID erstellt. Selbst dann, wenn eine kompatible übergeordneten Instanz vorhanden wäre.

Von Dir vorgeschlagen funktioniert nach meinem Verständnis auch nicht. Wenn ich jetzt eine DeviceInstanz habe die erstellt wird und mit RequireParent arbeite funktioniert das nicht den dann würden beliebig viele Splitter erstellt werden. Oder sehe ich das falsch?

Genau darum ging es mir ich kann zwar einen Splitter anlegen und mit RequireParent arbeiten dann habe ich pro Hub auch einen I/O die Geräte müssten dann aber trotzdem jedes einzeln vom Nutzer an den passenden Splitter angepasst werden was ich bei einer größeren Anzahl an Geräten schon umständlich finde.

Wie funktioniert das mit einem Konfigurator? Wäre das eine Lösung für das Problem?

Hier wie es IPS macht: Wenn du eine Instanz erstellst wird ConnectParent verwendet, um den Splitter zu finden. Da du bei einem „zweiten“ Strang immer einen weiteren Splitter erstellst, würde dann eben der zweite Splitter per RequireParent einen weiteren benötigten I/O erstellen.

paresy

Ja so ist das ja zur Zeit auch im PHP Modul wenn ich per Hand eine zweiten Splitter erstelle dann wird mir über RequireParent ein weiterer I/O erstellt. Das Problem das aber der User jedes Device dem passenden Splitter zuordnen muss bleibt dadurch ja aber unbeeinflusst. Wenn ich wie im PHP Modul oder wie von Dir beschrieben von IPS selber ConnectParent verwendet wird beim Erstellen einer Instanz dann bindet es diese Instanz eben an einen Splitter ich habe aber keinen Einfluss darauf das es auch der richtige ist. Wenn es keinen zweiten Splitter gibt wird auch keiner angelegt und wenn es einen gibt wird einfach anhand der GUID zugeordnet.

Was hier fehlt ist so was wie eine dritte Funktion, die es ermöglicht den passenden Splitter für den User zu binden ohne das der User das von Hand pro Instanz machen muss. Da ich ja initial die Konfigurationsdaten auslese weis ich auch wieviele Hubs es im Netzwerk gibt und die ID des Hubs. Ich könnte also beim Anlegen des I/O und des Splitters eine eindeutige Ident für den I/O und Splitter vergeben.

Jetzt bräuchte ich nur eine Funktion die so etwas macht wie ConnectParent nur mit zusätzlicher Ident Prüfung.

Weis jemand wie so eine Funktion dann aussehen müsste? Die Funktion bekommt also eine GUID und eine Ident übergeben und müsste also prüfen ob es schon eine übergeordnete GUID gibt die über diese Ident verfügt. Wenn ja wird diese gebunden wenn nein wird die Übergeordnete Instanz mit der Ident erstellt.

Vergiss das mit dem Ident bei den Instanzen, es widerspricht dem das der User die Instanzen selbst einfach einem andern Splitter zuordnen kann.

Was du brauchst ist ein Konfigurator.
Im Endeffekt nur die Auslösung eines ‚Scriptes‘ was das Netzwerk scannt, dann die Splitter anlegt und konfiguriert (und je nachdem wie dein Splitter selbst schon den IO konfiguriert, diesen auch oder auch nicht).
Anschließend legst du alle Devices an.
Diese sind dann per ConnectParent an irgendeinen Splitter gebunden.
Also nach dem Anlegen prüfen ob korrekt (anhand der Settings des Splitters) und wenn falsch umheben.

Oder der Splitter hat eine Methode um seine eigenen Devices bei Bedarf zu erzeugen und an sich zu binden.

Ersteres siehe Konfigurator KodiModul.
Zweites siehe CreateAllPlayer im SqueezeboxModul.
Michael

Danke für den Input. Das würde also bedeuten das die Parameter die ich momentan beim Splitter abfrage, lasse ich dann in einen Konfigurator eingeben. Dann hole ich mit dem Konfigurator die Konfiguartionsdaten aus dem Netz ab und lege dann automatisch die passenden I/O, Splitter und Geräte an. Das hört sich gut an und so wie ich mir das vorstelle. Ich werde mir mal den Konfigurator im Kodi Modul näher ansehen. Da gibt es dann wohl einiges am PHP Modul umzubauen.

Die Squeezebox Variante ist auch unschön.
Ich warte ja auch nur auf Tabellen in den Konfig-Formularen :smiley:
Dann kann man endlich so schöne Konfiguratoren bauen wie IPS sie am Werk mitbringt.

Der Kodi-Konfigurator bindet die erzeugen Devices an den gleichen Parent an dem er selbst hängt. Und muss auch nicht die Fähigkeiten des Splitter ermitteln.
Bei dir muss das dann wohl etwas anders von statten gehen.
Michael

Ja das wäre nett aber in dem Fall ja nicht unbedingt von Nöten. Ich gehe ja mal nicht davon aus das jemand im Haus so viele Hubs stehen hat wie z.B. Homatic Aktoren da bleibt das also in gewisser Weise noch übersichtlich.

Ja ich überlege mir was, wenn nicht kenne ich jemanden der fast immer auf alles eine Lösung hat:D