ShellScript unter favourites starten

  • Guten Abend,

    ich habe mit Lirc einige Tasten einer Fernbedienung einprogrammiert um mein hyperion zu Starten und zu Stoppen.
    Leider blieb bisher alles ohne erfolg...

    Ich habe jetzt zuerst ohne Fernbedienung das Hyperion über die Favoriten zu beenden/starten, leider funktioniert das schon nicht....

    die beiden Einträge der favourites.xml werden unter den Favoriten angezeigt, leider passiert nichts. :(

    meine favourites.xml sieht folgendermaßen aus:

    Code: favourites.xml
    <favourites>
        <favourite name="Ambilight einschalten" thumb="http://powerpi.de/wp-content/uploads/powerpi/powerpi_ambi_thumb_hdmi.jpg">System.Exec("/home/pi/.kodi/userdata/hyperion_einschalten.sh")</favourite>
        <favourite name="Ambilight ausschalten" thumb="http://powerpi.de/wp-content/uploads/powerpi/powerpi_ambi_thumb_off.jpg">System.Exec(sh "/home/pi/.kodi/userdata/hyperion_beenden.sh")</favourite>
        <favourite name="Ambilight ausschalten 2" thumb="http://powerpi.de/wp-content/uploads/powerpi/powerpi_ambi_thumb_off.jpg">sh "/home/pi/.kodi/userdata/hyperion_beenden.sh"</favourite>
        <favourite name="Ambilight ausschalten 3" thumb="http://powerpi.de/wp-content/uploads/powerpi/powerpi_ambi_thumb_off.jpg">"/home/pi/.kodi/userdata/hyperion_beenden.sh"</favourite>
    </favourites>

    Da ich über die Kommandozeile kein System.exec funktioniert habe ich auch die anderen 2 Varianten probiert mit denen es über die Kommandozeile funktioniert.
    Leider alles ohne Erfolg.... langsam bin ich echt am verzweifeln.

    Die beiden *.sh Dateien und sogar die favourites.xml habe ich mit chmod a+x ausführbar gemacht...


    der Inhalt der hyperion_beenden.sh:


    Code: hyperion_beenden.sh
    sudo service hyperion stop

    könnt ihr mir noch weiterhelfen was falsch ist...
    oder gibt es eine Ausgabe, dass ich sehe was passiert wenn ich versuche die Favoriten zu starten?

    Ich habe jessie auf dem Raspberry und darauf habe ich Kodi laufen.


    Vielen dank und Viele Grüße
    Jens

  • Um Hyperion mittels blauer Taste ein/ausschalten zu können machst du folgendes...

    Shell Script zum starten/stoppen des Dienstes

    /storage/.kodi/userdata/addon_data/service.hyperion/hyperion_switch.sh
    #!/bin/sh
    SERVICE='hyperiond'
    if ps | grep -v grep | grep $SERVICE > /dev/null
    then
    systemctl stop service.hyperion
    else
    systemctl start service.hyperion
    fi


    Python Script für den Aufruf mit der Fernbedienung

    /storage/.kodi/userdata/addon_data/service.hyperion/hyperion_switch.py

    import sys
    import subprocess
    subprocess.call(['/storage/.kodi/userdata/addon_data/service.hyperion/hyperion_switch.sh'], shell=True)


    Keymapping der Fernbedienung anpassen

    /storage/.kodi/userdata/keymaps/remote.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <[definition=10,0][definition='3','0']keymap[/definition][/definition]>
    <global>
    <remote>
    <blue>XBMC.RunScript("/storage/.kodi/userdata/addon_data/service.hyperion/hyperion_switch.py")</blue>
    </remote>
    </global>
    </[definition=10,0][definition='3','0']keymap[/definition][/definition]>


    Nun kannst du mitdrücken der blauen Taste dein Ambilight entweder starten oder stoppen.
    Und nein, der direkte Aufruf des Shell Scriptes vom Kodi GUI funktioniert nicht wie erwartet, darum der Umweg über das Python Script.

  • Hallo vielen Dank für die Antwort und gleichzeitig entschuldige meine späte Reaktion *shameonme*

    also ich habe jetzt die beiden Dateien hyperion_switch.sh & hyperion_switch.py
    im Verzeichnis: \Home\pi\.kodi\userdata\addon_data\service.hyperion\
    erstellt.

    um die hyperion_switch.sh zu testen führe ich sie mit sh hyperion_switch.sh aus. Leider bekomme ich hier schon die Fehlermeldung

    Code
    root@raspberrypi3:/home/pi/.kodi/userdata/addon_data/service.hyperion# sh hyperion_switch.sh
    hyperion_switch.sh: 8: hyperion_switch.sh: Syntax error: "fi" unexpected (expecting "then")


    Hier die zugehörige leicht abgeänderte Datei hyperion_switch.sh:

    Bash: hyperion_switch.sh
    #!/bin/sh
    SERVICE='hyperion'
    if ps | grep -v grep | grep $SERVICE > /dev/null
    then
    systemctl stop service hyperion
    else
    systemctl start service hyperion
    fi

    Warum nimmt er das fi nicht an ?

    Schon mal vielen dank im Voraus und ich verspreche dieses mal schneller zu Antworten :)

    Vlg Blacki

  • also grundlegend brauchst du das "sh" nicht vor der Ausführung des Befehls, da du innerhalb des Scripts mit der Shebang ja schon den Interpreter angibst: #!/bin/sh

    Wenn also das Script schon mit "chmod +x hyperion_switch.sh" ausführbar gemacht worden ist, dann reicht: ./hyperion_switch.sh zum ausführen.


    Warum nimmt er das fi nicht an ?

    Für mich sieht es eher so aus, als würde er das "then" nicht nehmen. Er erkennt das "fi" aber er erwartet ein "then".

    Log dich mal bitte via ssh ein und versuch mal: dos2unix hyperion_switch.sh Ggf musst du dos2unix erst noch installieren. Vielleicht sind da noch CRs drin, die da nicht sein sollten.

    Ich habe das Script auch mal durch einen Shellchecker durchlaufen lassen. und der ganze gegreppe ;) würde ich mir ggf sparen und ggf sowas wie: if pgrep -l "$SERVICE" > /dev/null; then ...... Solltest du aber vorher nochmal mit pgrep -l hyperion checken, ob da eine Ausgabe kommt, wenn der Service läuft. Und nicht vergessen: Variablen immer in Anführungszeichen ;), deswegen auch "$SERVICE" anstelle von $SERVICE

  • Hallo und vielen Dank für die Antwort :)

    Es war tatsächlich ein cr drin. Es läuft jetzt.

    mein hyperion_switch.sh sieht jetzt folgendermaßen aus

    Bash: hyperion_switch.sh
    #!/bin/sh
    SERVICE="hyperiond"
    if pgrep -l "$SERVICE" > /dev/null;
    then
    systemctl stop hyperion
    else
    systemctl start hyperion
    fi

    Vielen Dank für die Hilfe.

    Ich versuche die Tage noch einmal die TV Fernbedienung einzubinden und teste dann ob alles Funktioniert.

    Liebe Grüße

    Blacki

  • Hallo guten Abend,
    ich hab mich nochmal ran gewagt und die Fernbedienung programmiert.
    Leider passiert nichts...

    meine remote.xml sieht so aus

    XML: remote.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <[definition='3','0']keymap[/definition]>
    <global>
    <remote>
    <RED>XBMC.RunScript("/Home/pi/.kodi/userdata/addon_data/service.hyperion/hyperion_switch.py")</RED>
    </remote>
    </global>
    </[definition='3','0']keymap[/definition]>

    Hierzu 3 Fragen: - genügt hier RED oder muss es KEY_RED wie die Taste heißen.
    - Stimmt der Pfad so? Von welchem Verzeichnis muss ich hier beginnen?
    Funktioniert XBMC.RunScript? Ich habe Raspian mit nach installiertem KODI.


    lircrc läuft und ich versuche mit
    irsend SEND_ONCE yamaha_remote KEY_RED
    zu testen

    Vielen Dank für eure Hilfe

    Grüße Blacki

  • Das XBMC. vorweg kannst du erstmal weg lassen

    red anstatt RED

    um den richtigen Pfad einzutragen, bitte per SSH in das Verzeichnis wechseln und dort pwd. Das zeigt dir den korrekten Pfad vom Wurzelverzeichnis her an. Du muss dann nur noch den Dateinamen nach dem letzten / anfügen. Bitte darauf achten, dass das alles "case sensitive" ist und auf Groß- und Kleinschreibung geachtet werden muss. Ein groß geschriebenes "Home" mag stimmen, wäre mir aber neu.

    Wenn das alles nicht klappt, dann könnte es sein, dass deine FB anders erkannt wird. Dann mal bitte den gleichen Inhalt in eine keyboard.xml kopieren und innerhalb der Datei <remote>.....</remote> zu [<keyboard>....</keyboard>[/tt] tauschen.

  • Es funktioniert leider immer noch nicht. Egal ob remote oder keyboard
    Kann ich den Befehl RunScript("/home/pi/.kodi/userdata/addon_data/service.hyperion/hyperion_switch.py") auch direkt testen?


    btw muss [definition=10,0][definition='3','0']keymap[/definition][/definition] mit Leerzeichen vorne und hintendran sein? also < [definition=10,0][definition='3','0']keymap[/definition][/definition] > </ [definition=10,0][definition='3','0']keymap[/definition][/definition] >
    Vielen Dank und viele Grüße

    Blacki

  • In den Klammern alles ohne Leerzeichen. https://kodi.wiki/view/Keymap

    Ich habe bei mir auch eine Taste belegt, da sieht es z.B. so aus:

    Code
    <[definition='3','0']keymap[/definition]>
      <global>
        <keyboard>
          <m mod="alt">XBMC.RunScript(special://home/addons/plugin.video.ip.webcam.monitor/resources/lib/overlay.py)</m>
        </keyboard>
      </global>
    </[definition='3','0']keymap[/definition]>
  • okay vielen dank. Hast du XBMC oder hast du rein Kodi drauf?
    Muss ich eigentlich neu starten damit die remote.xml neu geladen wird wenn ich sie ändere ?

    Ich hab jetzt alles mögliche versucht und komme nicht weiter...

    ich habe die Zeile auch in <red>python "/home/pi/.kodi/userdata/addon_data/service.hyperion/hyperion_switch.py"</red> geändert, da es so über ssh unter dem benutzer root funktioniert, leider ohne erfolg.

    Vlg Blacki

  • Also das:

    <red>python "/home/pi/.kodi/userdata/addon_data/service.hyperion/hyperion_switch.py"</red>

    ist komplett falsch. Du kannst von Kodi aus nicht direkt Shell Befehle ausführen. Du brauchst mindestens schon meine built-in Python Funktion. RunScript ist das, was du nutzen musst und prinzipiell ist das:

    XBMC.RunScript("/Home/pi/.kodi/userdata/addon_data/service.hyperion/hyperion_switch.py")

    richtig.

    1. Ich würde gern mal ein [definition=12,4][definition='1','3']Debug[/definition][/definition] Log sehen, in dem du den roten Knopf deiner Fernbedienung drückst (gern mehrfach hintereinander!!). Es kann gut sein, dass der ggf gar nicht interpretiert wird. Was ist das für eine FB?

    2. Hast du mal aus Spaß versucht einen anderen Knopf zu belegen? Versuch doch einfach mal eine der Nummer-Tasten. Nur so zum Test. Es gibt Fernbedienungen, da werden die farbigen Knöpfe anders belegt/angesprochen.


    Hast du XBMC oder hast du rein Kodi drauf?

    XBMC == Kodi. Es hieß früher nur XBMC und wenn er noch XBMC drauf hat (was ich nicht glaube ;) ), hinkt der Vergleich ohnehin .

    Bitte nicht von XBMC.RunScript verwirren lassen. Nachdem Kodi umbenannt wurde hat man sich definitiv nicht die Mühe gemacht alles Python interne aus "Kodi" umzubenennen. Wie ich schon eingangs erwähnte, kannst du das [tt}XBMC.[/tt] weg lassen


    Kann ich den Befehl RunScript("/home/pi/.kodi/userdata/addon_data/service.hyperion/hyperion_switch.py") auch direkt testen?

    Kommt drauf an. Wenn du ein Ubuntu verwendest, dann ja. Dafür musst du folgendes installieren:

    sudo apt install kodi-eventclients-kodi-send

    Dann kannst du den Befehl direkt an Kodi senden und Kodi wird dann das Script starten. Das ganze muss dann so aussehen:

    kodi-send -a "RunScript(/home/pi/.kodi/userdata/addon_data/service.hyperion/hyperion_switch.py)"

    Bitte darauf achten, dass ich oben in den Klammer keine Anführungszeichen verwendet habe. Möchtest du sie auf in der Bash verwenden (Bash == Terminal unter Ubuntu) dann musst du sie wie folgt escapen

    kodi-send -a "RunScript(\"/home/pi/.kodi/userdata/addon_data/service.hyperion/hyperion_switch.py\")"


    Ich habe gerade folgendes kleines Script geschrieben:


    Python
    #!/usr/bin/python
    import os 
    os.system("xfce4-terminal")

    und wenn ich:

    kodi-send -a "RunScript(/home/davu/test.py)" ausführe, öffnet sich bei mir ein neues Terminal-Fenster.

  • Dank für die ganzen Infos DaVu,
    in der Log habe ich folgendes gefunden:
    [cbox]20:48:15.891 T:1946108576 WARNING: no [definition=10,0][definition='3','0']keymap[/definition][/definition] support (requires /dev/tty0 - CONFIG_VT)[/cbox] hat das schon was damit zu tun?


    Ansonsten werden die Tasten erkannt unten in der LOG steht dann folgendes:

    Spoiler anzeigen

    21:24:09.185 T:1945330336 DEBUG: LIRC: Update - NEW at 2129877:000000005ea103fd 00 KEY_RED yamaha_remote (KEY_RED)
    21:24:10.020 T:1945330336 DEBUG: LIRC: Update - NEW at 2130711:000000005ea103fd 00 KEY_RED yamaha_remote (KEY_RED)
    21:24:10.553 T:1945330336 DEBUG: LIRC: Update - NEW at 2131245:000000005ea103fd 00 KEY_RED yamaha_remote (KEY_RED)
    21:24:11.037 T:1945330336 DEBUG: LIRC: Update - NEW at 2131729:000000005ea1837d 00 KEY_GREEN yamaha_remote (KEY_GREEN)
    21:24:11.554 T:1945330336 DEBUG: LIRC: Update - NEW at 2132246:000000005ea1837d 00 KEY_GREEN yamaha_remote (KEY_GREEN)
    21:24:12.022 T:1945330336 DEBUG: LIRC: Update - NEW at 2132713:000000005ea1837d 00 KEY_GREEN yamaha_remote (KEY_GREEN)


    brauchst du die ganze LOG?


    Die Fernbedienung ist von meinem YAMAHA 5.1 Receiver, lirc erkennt die taste und gibt sie auch zurück im testmodus.


    Ansonsten bringt er mir bei: sudo apt install kodi-eventclients-kodi-send die Meldung:

    Spoiler anzeigen

    Einige Pakete konnten nicht installiert werden. Das kann bedeuten, dass
    Sie eine unmögliche Situation angefordert haben oder, wenn Sie die
    Unstable-Distribution verwenden, dass einige erforderliche Pakete noch
    nicht erstellt wurden oder Incoming noch nicht verlassen haben.
    Die folgenden Informationen helfen Ihnen vielleicht, die Situation zu lösen:

    Die folgenden Pakete haben unerfüllte Abhängigkeiten:
    kodi-eventclients-kodi-send : Hängt ab von: kodi-eventclients-common (= 2:15.2-2~jessie) aber 2:17.4-2~jessie soll installiert werden
    E: Probleme können nicht korrigiert werden, Sie haben zurückgehaltene defekte Pakete.

    --> Soll ich ein update machen?

    Vlg Blacki

  • Erstmal hätte ich jetzt gern ein komplettes logfile

    Das mit kodi-send kannst du wohl vergessen. Bin mir unsicher, ob Raspbian (was du offensichtlich verwendest) das mit sich bringt oder ob es dort installiert werden kann

  • hi

    khadas Vim mit Coreelec 9.21

    erst mal vielen Dank an @herrmeier und @DaVu
    Sowohl das Script von herrmeier als auch die leicht veränderte von Davu funktionieren
    Meine nach meinen Anforderungen Scripte
    hyperion_switch.sh

    Spoiler anzeigen


    #!/bin/sh
    SERVICE='hyperiond'
    if pgrep -l "$SERVICE" > /dev/null
    #if ps | grep -v grep | grep $SERVICE > /dev/null # von herrmeier Variante
    then
    systemctl stop service.hyperion.ng.service
    else
    systemctl start service.hyperion.ng.service
    fi


    hyperion_switch.py

    Spoiler anzeigen


    import sys
    import subprocess
    subprocess.call(['/storage/.kodi/userdata/addon_data/http://service.hyperion.ng/hyperion_switch.sh'], shell=True)


    gen.xml

    Spoiler anzeigen

    <[definition=10,0][definition='3','0']keymap[/definition][/definition]>

    <global>

    <keyboard>

    <key id="251">RunScript("/storage/.kodi/userdata/addon_data/http://service.hyperion.ng/hyperion_switch.py")</key>

    </keyboard>

    </global>


    Bis die Lichter ausgehen, dauert es ca 1min (egal), anschalten funktioniert sofort ! :thumbup:
    Sollte mich diese Fehlermeldung im Kodi Log misstrauisch machen ?

    Code
    WARNING: CPythonInvoker(20): Script invoked without an addon. Adding all addon modules installed to python path as fallback. This behaviour will be removed in future version.

    Vorgeschichte: hatte vorher das addon von @BJ1 zur Kontrolle von Hyperion. Obwohl es "nur" für hyperion und nicht für NG geschrieben wurde, hat es im großen und ganzen gut funktioniert (Danke nochmal BJ1). Leider war nach einer Aktualisierung des Hyperion.NG-Addons damit Schluß, selbst nach einem downgrade des Hyperion.NG Addons auf die alte Version - warum auch immer.
    Ich finde es schade, daß es für hyperion.NG nicht ein vergleichbares Kontroll Addon wie das von BJ1 gibt. Mit eure Hilfe konnte ich mich erstmal behelfen. Danke :thumbup:

    Tschau nepo

    Einmal editiert, zuletzt von nepo (10. April 2020 um 18:47)

Jetzt mitmachen!

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