[gelöst] dbus2vdr plugin PutEntry mit Python.

  • Hilfe...
    ich komme einfach nicht weiter. Ich versuche per Python nen EPG Eintrag per dbus2vdr Plugin zu setzen. Mittlerweile glaube ich an einen Fehler im Plugin, aber so ganz sicher bin ich mir nicht.


    Das Plugin sagt

    Code
    "    <method name=\"PutEntry\">\n"
      "      <arg name=\"entryline\"      type=\"as\" direction=\"in\"/>\n"
      "      <arg name=\"replycode\"      type=\"i\"  direction=\"out\"/>\n"
      "      <arg name=\"replymessage\"   type=\"s\"  direction=\"out\"/>\n"
      "    </method>\n"


    Also ein Array of String, per

    Code
    vdr-dbus-send /EPG epg.PutEntry array:string:"C S19.2E-1-1107-17501 ProSieben","E 62527 1337399520 1320 50 F","T Malcolm mittendrin","S Der Killer-Roboter","D abc","e","c"


    gehts nicht, man sieht auch im Quellcode das Syslogmeldungen fehlen und kein einziger Parameter abgearbeitet wird.


    Das geht (steht auch so im Readme). Hier kommt auch für jede Zeile ne Syslogmeldung.

    Code
    vdr-dbus-send /EPG epg.PutEntry string:"C S19.2E-1-1107-17501 ProSieben" string:"E 62527 1337399520 1320 50 F" string:"T Malcolm mittendrin" string:"S Der Killer-Roboter" string:"D dsdssd" string:"e" string:"c"


    Allerdings akzeptiert Python hier keine X Stringparameter, Python will nen iterierbares Objekt. Allerdings geht es mit den vielen String Parametern nicht.


    Code
    bus = dbus.SystemBus()
    			dbusepg = bus.get_object('de.tvdr.vdr', '/EPG') 
    			t=[]
    			for line in self.get_svdrpepg().split("\n"):
    				t.append(dbus.String(line))
    			t.append(dbus.String(u"."))
    			e=dbus.Array(t, signature=dbus.Signature("s"))
    			print e
    			print dbusepg.PutEntry(e, dbus_interface = 'de.tvdr.vdr.epg')


    Das Array e sieht gut aus

    Code
    dbus.Array([dbus.String(u'C S19.2E-1-1107-17501 ProSieben'), dbus.String(u'E 62527 1337399520 1320 50 F'), dbus.String(u'T Malcolm mittendrin'), dbus.String(u'S Der Killer-Roboter'), dbus.String(u'D test|dsdssd'), dbus.String(u'e'), dbus.String(u'c'), dbus.String(u''), dbus.String(u'.')], signature=dbus.Signature('s'))


    Irgendwie vermute ich das das Plugin eine Reihe von Stringparameter abarbeiten will aber im Interface nen String Array fordert. Und dbussend scheint das egal zu sein.



    Hat hier zufällig jemand Ahnung von der Materie?


    cu

  • Moin!


    Ja, das ist ein Fehler im Plugin. "Damals" war ich noch nicht so firm in dbus-Arrays.
    In diesem Fall passt die Signatur der Funktion nicht zu der Abarbeitung.
    Da muss ich was ändern mit dbus-container usw., mach ich spätestens nächsten Mittwoch.


    Lars.

  • Moin!


    Heute ist Mittwoch: dbus2vdr 0.0.6f ist nun an der Stelle korrigiert.
    Einen ähnlichen Fehler gab's auch in remote.AskUser.
    Nun sollte es klappen (hoffentlich).


    Lars.

  • Habs gerade gesehen und probiere gerade, danke schonmal.


    BTW:


    In setup.c brauchts ein #if drumherrum.
    ---
    #if VDRVERSNUM > 10706
    if (ModifiedAppearance)
    cOsdProvider::UpdateOsdSize(true);
    #endif
    ---


    cu

  • So, mal ausführlicher und den Thread als gelöst markieren.


    Ja, das ist ein Fehler im Plugin. "Damals" war ich noch nicht so firm in dbus-Arrays.
    In diesem Fall passt die Signatur der Funktion nicht zu der Abarbeitung.
    Da muss ich was ändern mit dbus-container usw., mach ich spätestens nächsten Mittwoch.


    Freut mich das ich mit meiner Theorie richtig lag und nicht zu blöd war das zu nutzen ;) Mich hat etwas verunsichert das dbus-send damit keine Probleme hatte.


    Nochmal danke für die prompte Hilfestellung.


    Es funktioniert jetzt so wie ich es anfangs vermutet hatte, einfach das String Array übergeben und gut ist. Ich hänge mal (für den nächsten der damit was machen will) nen Beispiel an


    Wichtig ist Unicode zu verwenden und keine Leerzeilen davor/dahinter zu haben.


    Den ReplayCode Auswerten ist anscheinend gar nicht so verkehrt, ich hatte hier einige Fehler im Log. Wobei es daran liegen kann das mein VDR gerade komplett mit Paketbauen ausgelastet war, da macht der dann hin und wieder seltsame Sachen ;) Mal sehen wie sich das im real live schlägt.


    cu

  • Schön, dass es jetzt klappt. Wie schnell lassen sich damit EPG-Einträge einfügen, wenn man nicht-blockierende dbus-Aufrufe macht?
    svdrpsend oder dbus2vdr beschleunigen

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Das habe ich noch nicht ausprobiert. Werde ich aber später noch einbauen, im Moment ist das epg einfügen die letzte Aktion des Programms, also müsste ich eh so lange warten bis die Antwort da ist.


    svdrp braucht 2 Sekunden für einen Eintrag, dbus braucht 3 Sekunden (2 Sekunden davon gehen in der VDR Einfügefunktion drauf die svdrp auch nutzt). Also ist es hier wieder die übliche 1 Sekunde die dbus für die Antwort braucht die man sparen könnte.


    BTW: Danke fürs rausfinden und ausprobieren wie das nicht blockieren geht, habe mir den Thread schon gesichert.


    cu

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!