ich arbeite zur Zeit an einem Symcon Modul für Plex.
Dazu möchte ich die ‚Übergeordnete Instanz‘ einer Register Variablen per Skript setzen.
Hat das schon jemand mal gemacht, und kann mir sagen wie ?
Die IPS_SetProperty Doku gibt mir leider nur die Property für das ‚Ziel‘.
Ich stelle fest, so ganz kapiert habe ich das wohl noch nicht
Mein Bindeglied zwischen Client Socket und verarbeitendem Skript ist bisher immer die Register Variable gewesen.
Nun überlege ich die ganze Zeit wie ich das nach dem Datenflussmodell realisieren kann.
Das Modell selbst denke ich habe ich verstanden.
Müsste ich mir ein eigenes IOModul schreiben und den Client Socket dort nachprogrammieren ?
Du kannst wie im Datenfluss-Modell angegeben die GUID des integrierten virtuellen IO Modules als Parent Requirement angeben. Die Verknüpfung erfolgt über die RequireParent bzw. ForceParent-Funktionen im Constructor. In Deinem Modul implementierst Du die Funktionen SendToParent und ReceiveData. Für das evtl. notwendige Zwischenspeichern von ankommenden Daten musst Du selbst sorgen.
Die generelle Funktionsweise habe ich verstanden, es ist eine Message Chain und jeder hört nur auf sein „Abo“. Kenne ich so ähnlich schon aus anderen Programmiersprachen.
Was ich nicht verstehe ist die Reihenfolge der Objektinstanzen für meinen konkreten Fall und die konkrete Abbildung.
Verstehe ich das richtig: Mein Modul hat das Virtual IO als Parent und Virtual IO hat den Client Socket als Parent ?
Falls dem so ist, muss ich eine eigene Virtual IO Klasse erstellen, nur dann kann ich ihm sagen wen er als Parent hat.
Was passiert wenn ich mehrere Objekte basierend auf meinem Modul laufen habe ? Jedes Objekt müsste ja in dem Fall sein eigenes Virtual IO und Client Socket Objekt (benötigte es vorher auch) bekommen.
Was macht das Virtual IO eigentlich genau ? Bei manueller Erstellung kann ich damit nichts anfangen.
Verstehe ich das richtig: Mein Modul hat das Virtual IO als Parent und Virtual IO hat den Client Socket als Parent ?
Nein, das Virtual-IO-Modul ist nur ein Interface, eine Abstraktionsschicht
Was macht das Virtual IO eigentlich genau ?
Da es selber nichts tut ist seine Interface Implementierung ein kompatibles IO-Modul wie Socket, SerialPort usw., mit dem man sich verbinden kann. So braucht man seine Module nur mit einer kompatiblen Parent GUID zu definieren und kann trotzdem mit all diesen IO-Modulen arbeiten
Was passiert wenn ich mehrere Objekte basierend auf meinem Modul laufen habe
Das kommt auf die Objekte (Splitter oder Device-Module) an. Entweder sie können sich einen ein IO-Modul teilen und bekommen alle die gleichen Daten oder man macht noch einen Splitter dazwischen, der als einziger mit dem IO-Modul spricht, aber mehrere Device-Module versorgt. Da IO-Module sich meistens keine physische Hardware teilen können, ist der Splitter oft notwendig.
Danke sehr!
Du kannst damit einen Plex Home Theater (PHT) Client auf Windows, OSX, Linux Basis ansteuern, er reagiert dank des JSON RPC Sockets sofort auf Eingaben und man bekommt sofort Rückmeldung wenn am Gerät selbst gesteuert wird. Cover, Titelinformationen können angezeigt werden. Ich werde noch Methoden implementieren um PHT aus anderen Skripten heraus steuern zu können.
Plex auf geschlossenen Systemen (z.B. Fernseher, SetTop Boxen) anzusteuern dürfte nicht funktionieren, weil man den JSON RPC Port erst öffnen muss in einer Konfigurationsdatei vom PHT.
Es funktioniert auch schon soweit ganz gut, ich muss nur noch ein paar kleine Details ändern und dann würde ich den Link auf das Repository im entsprechenden Bereich hier im Forum teilen.
Hättest mal eher was gesagt. Ich habe das gleiche für Kodi ‚fertig‘ auch mit JSON-RPC over TCP.
Dann hättest du zumindest schon mal einen Splitter der die RPCs als JSON verpackt und siehst wie der Datenaustausch funktioniert
Michael
Würde es mir trotzdem gerne mal ansehen.
Hab das Modul zwar soweit fertig, aber wer weiß eventuell kann ich bei mir noch etwas verbessern bevor ich es freigebe.