Favoriten - Python Script ausführen

  • Liebe Leute und Experten,

    ich kämpfe mittlerweilen seit mehren Monaten hart und verbissen mit Kodi und versuche es irgendwie zu bändigen bzw. meine Vorstellungen beizubringen. Vieles habe ich geschafft, vieles geht nicht, aber dann doch noch Workarounds von Workarounds gefunden, inzwischen habe ich mehrere Addons entwickelt und kiloweise Python geschrieben, Skin angepasst, eigene Slideshow gebaut, externe DVD Player entwickelt, usw... Allerdings ich stecke nun seit Tagen mit ein Problem fest, wo ich scheinbar ohne Hilfe wirklich nicht mehr weiterkomme.

    Möchte auch nicht hier lamentieren oder jammern - an sich ein tolles Programm und kann wahnsinnig viel... Und genausoviel kann es nicht oder nicht vollständig oder mühsam bis gar nicht. Natürlich auch noch erschwert dadurch, dass Kodi seit langem gibt und die Forenbeiträge (nicht hier, überall) sind mitunter 10-15 Jahre alt, da ist natürlich nichts mehr gültig, alles ist inzwischen obsolete und redesigned, aktuelle Dokus sind spärlich... Eindeutig eine ausgewogene Hass-Liebe Situation :D

    Mein Wunschvorstellung: ich habe eine einigermaßen aktuellen Kodi unter Windows laufen, meine Scripts bzw. Addons (z.B. für Steuerung von diversen externen Geräten, wie Beamer über COM, Stereoanlage über IR und Licht über Funk) sind über über Skin und eigene Menüpunkte problemlos ansprechbar und funktionieren einwandfrei. Nun habe ich den "Official Kodi Remote für IOS" auf mein Handy installiert und die (Fern-) Steuerung läuft größtenteils, wie ich es mir vorstelle. Da ich aber die eigene Menüpunkte aus dem Skin nicht mit dem Remote ansprechen/ansteuern kann, versuche ich ein paar Befehle in den vorhandenen Favoriten Ordner unterzubringen... Allerdings: ich bringe es nicht zusammen, Einträge aus "Favoriten" auszuführen...

    Mein Addon heißt script.home, extension point, etc. alles da und direkt über Kodi bzw. Skin funktioniert (OnLoad über Skin) einwandfrei. Also zB wenn ich auf Musik gehe, wird der Verstärker angeworfen, wenn aber eine Videowiedergabe startet, dann wird der Leinwand heruntergefahren und der Beamer geht an. Bei Herunterfahren oder Ausschalten kann ich es aber nicht mehr wieder ausschalten, weil der PC einfach heruntegefahren wird, ohne vorher Kodi Fenster zu schließen (wo ich ein OnUnLoad einbauen könnte), also ich würde ein Menüpunkt benöltigen für zB Verstärker aus, ohne dafür den Beamer mit Menü anzuwerfen...

    Ich liste jetzt nicht alle Versuche auf, würde den Rahmen sprengen - im Endeffekt bräuchte ich sowas: RunAddon(script.home,audio,off) oder auch RunScript(special://home/addons/script.home/toggleaudio.py). RunAddon verweigert mit "unknown". RunScript geht, aber reicht keine sys.args weiter ohne args geht ja mein Addon nicht. Runscript mit vollen Pfad oder auch mit special://... zu einem py script habe ich nicht zusammengebracht. Habe so ziemlich mit allem versucht: Pfad mit / oder auch Python style \\, mit und ohne ", quote;, Parameter mit , mit ? mit & mit named=xxx

    Wie kann ich bitte sowas einfaches wie "führe Addon aus mit parameter x, y" oder alternativ "führe Python script aus, von mir aus auch ohne Parameter" erreichen?!

    Ist das eine Enschränkung vom IOS Remote? Bitte, sagt nicht, dass ich mich nun in JSON RPC auch noch einarbeiten muss und auch noch den Remote anpassen soll, Python und Skinning haben mir völlig gereicht [dy]

    Ich danke Euch im Voraus für Tipps, Hilfe oder aktuelle Dokus... Liebe Grüße aus Wien!

  • Vielen Dank,

    ja, Dein Bespiel ist ziemlich genau was ich versuche, halt mit anderen Geräten (teilweise http calls, teilweise COM Port, teilweise IRClient, etc.). Mein addon script.home funktioniert auch, das Problem ist Aufrufen von favourites.xml über IOS Remote.

    Code sagt mehr als Erklärungen:

    Addon.py (Auszugsweise bzw. abgekürzt):
    from lib import automation
    from lib import xbmchelper
    ADDON = xbmcaddon.Addon()
    CWD = ADDON.getAddonInfo('path') # for kodi 19 and up..
    if (__name__ == '__main__'):
       device = str(sys.argv[1])
       command = str(sys.argv[2])
       if device == 'this_or_that':
            #do this or do that
            pass
       elif device == 'scene':
           if command == 'listen':
               automation.execute('audio', 'aux')
            elif command == 'somethingelse'
                #further "scenes" = environment macros
                pass
           else:
               xbmcgui.Dialog().notification('script.home', 'Unknown ' + device + ' command ' + command)
       else:
           automation.execute(device, command)
    # the end!

    Aufruf von Skin geht einwandfrei, zB in MusicOSD.xml - sobald ich auf Musik navigiere, möchte ich, dass der Verstärker angeworfen wird und speichere den derzeitigen Zustand in ein Skin Variable/Setting um später abrufen zu können, ob die Stereoanlage gerade rennt oder nicht:
        <onload>RunAddon(script.home,scene,listen)</onload>
        <onload>Skin.SetBool(Audio_State,true)</onload>

    Auch als Menüpunkt mit Schalter funktioniert fein:

    <control type="radiobutton" id="11144">
        <label>Stereoanlage</label>
        <include>DefaultSettingButton</include>
        <onclick>Skin.ToggleSetting(Audio_State)</onclick>
        <selected>Skin.HasSetting(Audio_State)</selected>
        <onclick condition="!Skin.HasSetting(Audio_State)">RunAddon(script.home,audio,aux)</onclick>
        <onclick condition="Skin.HasSetting(Audio_State)">RunAddon(script.home,audio,power)</onclick>
    </control>

    ...und hier ist, was ich nun versuche zu erreichen über favourites.xml - im Endeffekt dasselbe Button im Remote der mein Addon ausführt:

    <favourite name="Stereoanlage" thumb="DefaultAudio.png">RunScript(script.home,scene,listen)</favourite>

    <favourite name="Stereoanlage" thumb="DefaultAudio.png">RunScript("script.home","audio","power")</favourite>

    2024-10-18 09:30:44.721 T:7812 error <general>: EXCEPTION Thrown (PythonToCppException) : -->Python callback/script returned the following error<--
    Traceback (most recent call last):
    File "C:\Users\Richard\AppData\Roaming\Kodi\addons\script.home\addon.py", line 17, in <module>
    device = str(sys.argv[1])
    IndexError: list index out of range

    ...also die Aufrufe werden an Kodi weitergeleitet, aber die Argumente nicht, sys.argv wird nicht bestückt

    Versuch, auf Python script auszuweichen:

    toggle.audio.py (Extrascript in Root von Addon, macht mehr oder weniger dasselbe aber kommt ohne Argumente aus)
    from lib import automation
    from lib import xbmchelper
    if xbmchelper.getsetting('audio_state') == 'true':
       automation.execute('audio','power')
    else:
       automation.execute('audio','aux')

    favourites.xml:

    <favourite name="Stereoanlage" thumb="DefaultAudio.png">RunScript("special://home/addons/script.home/toggle.audio.py")</favourite>

    IOS Remote: "Ausführen der Aktion nicht möglich", scheint nicht parsen zu können und mein Call kommt gar nicht bis Kodi durch

    Auch alle weitere Versuche schlugen fehl: batch file über System.Exec, RunAddon statt RunScript, ohne " oder quote; statt ", ', usw...

    Ich bin echt am Verzweifeln damit [cf]

    Einmal editiert, zuletzt von rj65 (18. Oktober 2024 um 10:46)

  • ...ich habe auch schon überlegt ob ich auf **kwargs mit benannten Argumenten umschreibe, vielleich ginge es dann mit RunScript(script.home?device=audio%command=power), aber dazu bin ich im Python noch nicht fit genug und keine Ahnung, wie command line kwargs an __main__ überleitet werden... sys.argv Array erschien mir ausreichend für meine Zwecke und wollte nich unnötig komplizieren...

  • Hmhm, danke, ein weiterer Versuch Wert. Bash und SH sagt mir zwar wenig, ich komme aus der Windows Ecke, aber ich schätze das wird sowas wie ein batch file, vielleicht auch PowerShell... Irgendwie wird es immer komplizierter... Kodi hat Python huckepack, aber um ein Python script auszuführen, muss der remote über JSON RPC ein shell script oder batchfile ausführen der dann an der Python script übergibt [bm]

    ...und wie ich in den andren Thread so flüchtig lese, überall mit anderem Syntax - mal mit mal ohne Leerzeichen, ein CR zuviel, Anführungszeichen, argh

Jetzt mitmachen!

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