Neuling - Einige Fragen bzgl. PHP-Modul Programmierung

Die Frage ist ob du einen ClientSocket wirklich brauchst.
Wenn du nur in Intervallen Daten ausliest, Kannst du dass direkt mit PHP lösen.
Wenn du aber auch immer auf Empfang sein willst, weil dir die Gegenseite unaufgefordert Daten sendet, Dann brauchst du Einen.
Michael

Dann wäre die Lösung sicherlich sinnvoller.
Ich will für einen VDR ein Modul schreiben. Der sendet mir ja nicht ständig etwas, da muss ich ja selbst Befehle abschicken um Daten zu empfangen.
Dann werde ich es ohne machen. :slight_smile:
Danke und Grüße,
Kai

Gesendet von iPhone mit Tapatalk

So ich bin nun einige Schritte weiter.
Ich habe jetzt zum Beispiel die VDR Aufnahmen ausgelesen und gebe diese in einer HTML Box aus, weiß aber nicht ob das so elegant ist, denn ich würde gerne hinter jeden Aufnahme einen Button haben, um diese Aufnahmen auch löschen zu können.

Ich habe als Beispiel mal ein Screenshot angehangen. Ist sowas möglich, wenn ja wie kann ich da am besten vorgehen?

Danke und Grüße,
Kai

Ich bediene mich dort der Webhooks in IPS.
Ein Klick auf eine Zelle löst per JS einen HTTP-Get auf einen Webhook aus, welcher dann die Aktion ausführt.
Gibt bestimmt noch andere Wege und aktuell fehlt die Rückmeldung wenn ein Fehler austritt… Aber geht.
Findest du z.B. im KodiModul bei den Add-ons.
Michael

Danke Michael.
Ich habe jetzt mal einen Test Hook angelegt und bekomme ihn auch angezeigt wenn ich ihn aufrufe.
Als Überlegung:

Ich würde mir zum Beispiel jetzt die ID der Aufnahme per GET in den Hook übergeben.
Wäre es richtig, dann dort den Code auszuführen um diese Aufnahme zu löschen? Kann der Hook mir dann eine Antwort geben, die ich im Modul verarbeiten kann?

Oder kann das ganze dann irgendwie im Modul geschehen? Da blicke ich noch nicht ganz so dran lang.

Vielen Dank das du dir immer wieder die Mühe machst, meine vielen und vielleicht für dich nicht nachvollziehbaren Fragen zu beantworten. :slight_smile:

Grüße,
Kai

Leider fehlt noch immer die Möglichkeit im Modul direkt den Hook zu verarbeiten.
Du brauchst also ein Script unterhalb deiner Instanz als Ziel für den Hook.
Dort rufst du dann eine Funktion deiner Instanz auf und übergibst die Daten… Bzw solltest du in der Methode der Klasse auch direkt $_Get nutzen können.
Michael

Danke, genau das meinte ich! :slight_smile:

Gesendet von iPhone mit Tapatalk

Oh, das hab ich die Nacht übersehen, du meinst nun aber nicht eine Funktion aus dem Modul, sondern aus der Klasse, welche ich für das absenden der Befehle an den VDR geschrieben habe?!

Grüße,
Kai

Neeee…ich meine schon dein IPS-Modul.
Immer dieses Problemen mit den Bezeichnungen.
Eigentlich schreibt du für dein Modul in IPS eine oder mehrere PHP-Klassen welche Methoden implementieren.
Funktionen ist eigentlich das falsche Wort, auch wenn du im Code ‚function‘ schreibst.
Michael

Jetzt stehe ich völlig auf dem Schlauch…
Ich versuch es mal:

Ich habe mich mal wieder durch dein Kodi Modul gelesen. :smiley:

Du hast dort eine Function ProcessHookdata die rufst du in deinem Hook mit Präfix_ProcessHookdata(ID der Instanz,$_GET); auf.

Ist die Function ProcessHookdata eine Function von IP-Symcon? Ich kann in deinem Modul nämlich nur folgendes finden:

public function ProcessHookdata($HookData)

Weshalb übergebe ich dann die ID für die Instanz mit?

Fragen über Fragen… Sorry! :confused:
Ich möchte es auch verstehen und nicht nur kopieren. :slight_smile:

Grüße,
Kai

Ja genau.
Alle Public Methoden werden von IPS mit Prefix_Methode in allen IPS-Scripten bereitgestellt.
Und die Instanz-ID braucht IPS damit es weiß auf welche Instanz es den Befehl anwenden muss.
Michael

Jetzt ergibt das Sinn.
Vielen Dank!

Ich werde dann mal meine Versuche starten. :slight_smile:

Grüße,
Kai

Ich habe das mit dem Hook soweit hinbekommen, allerdings kann er in der Funktion dann nicht auf die Eigenschaft $this->ReadPropertyString(„host“) zugreifen.

Was ich gemacht habe?
Ich greife über den Hook auf eine Funktion im Modul IPSVDRRecordings zu und aus diesem Modul rufe ich die Funktion deleteRecordings aus dem Splitter auf.
In dem Splitter ist diese Funktion angelegt und hier versucht die Funktion natürlich auf die Host Variable per $this->ReadPropertyString(„host“) zuzugreifen.

Was müsste ich hier anders machen?

Oder muss es so gelöst werden, dass ich die Daten an den Parent sende mit SendDataToParent und dort in ReceiveData verarbeiten und von dort aus die Funktion deleteRecordings aufrufen?

Grüße,
Kai

Warum überhaupt einen Splitter? Können an einem VDRSplitter mehrere Geräte-Instanzen hängen?
Wenn nein, lass den Splitter weg.
Wenn ja, warum dann so kreuz und quer?
Hier musst du dir überlegen welche Instanz welche Aufgabe wahrnehmen soll.
Der Datenaustausch sollte nur über den beschrieben Weg laufen.
Michael

Dann hab ich das System wohl doch nicht geblickt.

Den Splitter habe ich angelegt, um nur an einer Stelle die Daten zum VDR anzugeben, also Host und Port.

Mit dem Splitter wollte ich dann Module wie: Aufnahmen, Channels, EPG, Fernbedienung verbinden.
Denke ich einfach mal wieder zu kompliziert? :frowning:

Grüße,
Kai

Nö, Kannst du schon so machen.
Dann muss die Aktion 'Aufnahme löschen ’ von der Geräte-Instanz per SenddataToParent an deinen Splitter übergeben werde und der kann dies dann in ForwardData verarbeiten.
Michael

Hallo Michael,

vielen Dank für die Hilfe. Das mit den Aufnahmen konnte ich nun lösen. :slight_smile:
Anbei mal ein Screenshot, mal sehen wann ich die erste beta Version online stellen kann.

Grüße,
Kai

Gerne doch :slight_smile:
Mich nervt gerade mein TVServer (Mediaportal) … sowie das Plugin auf dem Kodi.
Vielleicht probiere ich mal wieder einen VDR auf meinem ESXi zu installieren .
Mein letzter Versuch vor ca 2-3 Jahren scheiterte an der Unterstützung meiner Sat-Karten (PCTV halt…)
Michael

Du kannst dich gerne mal melden, wenn du noch weitere Informationen brauchst, zur Zeit betreibe ich einen headless VDR mit 4 SAT Karten, das funktioniert wirklich super.

Schreib mir einfach mal hier oder per PN um welche Karten es geht. Ich hatte auch eine PCTV die nicht wollte.

Grüße,
Kai

Nochmal eine kurze Frage, wenn ich mehrere Childs habe und die Funktion SendDataToChildren nutze, muss ich dann in dem Child in der Funktion ReceiveData folgendes tun?

    $data = json_decode($JSONString);
    if ($data->DataID == "GUID") {
}

Oder sollte das von alleine passieren? Sprich das das Parent Modul immer an das richtige Child Modul sendet.

Grüße,
Kai