Neuling - Einige Fragen bzgl. PHP-Modul Programmierung

…funktioniert dann immer nur Filterwort oder würden auch mehrere gehen?

Joachim

Mein Beispiel war ein oder :slight_smile:
Ist halt RegEx…
Hier kann man schön testen.

Michael

…wie geht man denn damit um?:confused:

Joachim

Hallo,

mal als Rückmeldung, ich habe deine Tipps mal umgesetzt, ich hatte dann vergessen bei dem einem Senden die GUID zu ändern. Es kam auch nichts als, also scheint es doch zu funktionieren mit der DataID.

Gruß,
Kai

Hallo Joachim,

schau dir mal diese Seite an: Redirecting…
Gerade bei Google gefunden. Da wird das anscheinend gut erklärt, ich habe es gerade nur kurz überflogen.

Grüße,
Kai

Die Parent Module (z.B. Splitter) senden immer an alle verbundenen Childs, auch wenn sie unterschiedliche Interfaces haben. Bei 4.0 muss man in der Tat im Child die GUID prüfen und sich den richtigen Datensatz raussuchen, wenn der Parent mehrere unterschiedliche Interfaces bedient Das habe ich bei meinen Modulen ausgiebig gemacht.


$data = json_decode($JSONString);
if (is_object($data)) $data = get_object_vars($data);
if (isset($data['DataID'])) {
                $target = $data['DataID'];
                if ($target == $this->module_interfaces['WS-RX']) {
                ....
                } 
               /* else {
                        $this->debug(__FUNCTION__, 'Wrong DataID $target');
                }
                */
}

Bei 4.1 gibt es die schon erwähnte Filterfunktion, die ich allerdings noch nicht wirklich ausprobiert habe. Ob man die nun nutzt oder im ReceiveData die If-Abfrage macht nimmt sich wohl nicht so viel. Beim Debug finde ich die alte Methode besser, da man sieht, was wirklich ankommt und nicht nur das, was der (ggfls. fehlerhafte) Filterausdruck durchlässt. Besser wäre es natürlich, wenn der Parent die Daten gleich nur an die Child Instancen schicken würde, die auch das passende Interface haben.

Tommi

Macht es Sinn eine echte RegEx auf GUIDs loszulassen? Bei GUIDs wird doch i.d.R. immer auf den kompletten String matchen müssen. Allenfalls eine Formatprüfung könnte ich mir vorstellen.

Tommi

…das wäre ja auch mein gedanklicher Ansatz, es wurde aber geschrieben das die Sendung mit dem Filter nur noch versandt wird wenn sie den Filterkriterien entspricht - und das soll die Anzahl der „Telegramme“ reduzieren. Was da im Hintergrund abläuft kann ich nicht sagen (wäre vielleicht mal ganz schön das zu wissen).

Joachim

Das sollte eigentlich Inzwischen so sein, mit den passenden Interfaces… Ich habe da Paresy noch mal angetriggert.
Der Filter ist dennoch deutlich performanter als eine eigene Prüfung im Modul.
Hängt aber auch von der Umgebung ab.
Mit IPS 4.0 und meinem HMextended konnte man einen Pi fast lahmlegen, Da permanent alle PHP-Slots belegt waren.
Dank der Filter ist das Problem gelöst.
Michael

Und mal wieder eine kleine Frage.
Ich habe folgendes vor:

Ich möchte die Kanäle auflisten und anklickbar machen, sobald ein Kanal ausgewählt worden ist, sollen die EPGs für diesen Kanals angezeigt werden.

Wie gehe ich da am besten vor? Nehme ich auch hier eine HTMLBox und arbeite mit WebHooks oder gibt es etwas, ich nenne es mal Variablen, die klickbar sind und danach ein neues „Fenster“ geöffnet werden kann.

Grüße,
Kai

Schwierig… Geht schon fast zu sehr in den Bereich Visualisierung wo man den Nutzer möglichst viel Freiraum lassen sollte.
Zumal du so etwas nicht automatisch auf ein Client welches das WF anzeigt beschränken kannst.
Habe das mal mit dem FritzBox-Project umgesetzt, Welches dann den QR-Code vom WLAN anzeigt.
WFC_SendPopup — IP-Symcon :: Automatisierungssoftware
Oder eventuell mit JS direkt im Browser lösen?
Michael

Hallo Michael,
Am besten wäre eine Möglichkeit, die in Webfront und der App funktioniert.
Eine Idee wäre vielleicht folgendes.

Eine HTMLBox in der ich alle Channels aufliste. Hinter diesem Channel verbirgt sich ein unsichtbarer DIV Container, den ich mit Klick auf den Channel aufschieben kann. Das müsste doch dann auch in der App funktionieren? Richtig?

Grüße,
Kai

Gesendet von iPhone mit Tapatalk

Probier es aus :slight_smile:
Nachdem mein TVServer wieder läuft, baue ich erstmal die PVR-Instanz weiter.
Da werde ich wohl auch irgendwann am EPG ankommen…
Michael

Ich habe evtl. eine Lösung mit jQuery.
Ich setze das mal um vielleicht ist es für dich dann auch Interessant.

Grüße,
Kai

Hallo,

gibt es die Möglichkeit, irgendwie Daten zwischen zu speichern?
Bzw. ich suche eine vernünftige Lösung dafür.

Ich hole zur Zeit die EPG direkt vom VDR, was extrem lange dauert und auch nicht klappt.

Allowed memory size of 33554432 bytes exhausted (tried to allocate 433195 bytes)

Wenn ich die Anzahl der EPG begrenze kann es funktionieren, ich würde aber schon gerne so viel wie möglich anzeigen lassen können.

Hat jemand eine Idee, wie ich das Problem umgehen kann?

Vielleicht als Ansatz: Ich kann über die API sagen für ab wann und bis wann ich EPGs haben möchte. Meine Idee wäre also irgendwo und irgendwie die Daten zwischenzuspeichern, in einer Art Datenbank?!

Ist sowas mit IP-Symcon möglich? Gibt es schon etwas dafür?
Ich hoffe ihr versteht was ich meine.

Grüße,
Kai

Hallo,

meine Überlegung wäre, das ich dem Modul eine SQLite Datenbank mitgebe.
Dann würde ich nämlich die EPGs jede Nacht ein mal in der SQLite Datenbank ablegen und müsste die Daten nicht mehr per SendDataToChildren schicken, sondern könnte direkt auf die Datenbank zugreifen.

Ist das evtl. eine Möglichkeit? Oder ist das so in IP-Symcon nicht vorgesehen?

Grüße,
Kai

IPS ist mit 4.0 endlich seine SQLite DB los und nun willst du ihm eine verpassen … :smiley:
Grundsätzlich musst du wissen was du da nachher eventuell auch supporten möchtest, ich würde es allein schon aufgrund der verschiedenen System und OS unter denen IPS läuft aktuell nicht machen.

Warum die Daten nicht einfach als Textfile (so wie sie kommen, oder als XML, JSON etc…) cachen?
Ich wüsste jetzt auch nicht wie viele Daten du da unbedingt brauchst oder effektiv nachher hast, die Fehlermeldung sagt ja das PHP an das 32MB Limit gelaufen ist.
Und ich eine String-Variable paßt auch ‚nur‘ 1 MB !

Michael

Hallo,

darüber habe ich auch nachgedacht, dass ich evtl. das JSON als Textdatei ablege.
Und dann einfach nur auf die Textdatei zugreife.

Ich denke so werde ich es machen.

Grüße,
Kai

Hallo,

wo sollte ich denn am besten so eine Textdatei ablegen?
Wenn ich sie im Modulverzeichnis ablege, dann kann man das Modul per Git ja nicht mehr updaten.
Und wenn ich die Datei zum Beispiel leer mitliefere, dann wird sie ja auch bei jedem Update überschrieben.
Also wäre ja ein Speicherort, der das updaten nicht beeinträchtigt wesentlich besser, gibt es da was?

Grüße,
Kai

Kannst einfach ein Medienobjekt oder ein Script in IPS nutzen.
Michael