Eigene Notification erstellen wenn Scrupt im Hintergrund läuft

  • Hallo,

    ich habe auf meinem HTPC-Rechner auf dem LibreELEC läuft ein kleines Shell-Script, dass Dateien aus einem bestimmten Ordner auf einem Netzwerkspeicher zum HTPC synchronisiert. Das Script läuft im Hintergrund und wird beim Systemstart ausgeführt. Ist es möglich solange das Script läuft eine kleine Notification anzeigen zu lassen? Evtl. auch Infos wie "Datei 2 von 5 wird kopiert"?

  • kodi-send --host=127.0.0.1 --action="Notification(Titel,Text,5000,DefaultIconError.png)"  sollte dir helfen? :)

    @CvH könnte da helfen, denke ich.

    --------------
    Guides nicht mehr verfügbar wegen Youtube unvermögen guten von schlechten Kodi Videos zu unterscheiden.

  • Ist es möglich solange das Script läuft eine kleine Notification anzeigen zu lassen? Evtl. auch Infos wie "Datei 2 von 5 wird kopiert"?

    Wie @Skybird oben schon gezeigt hat, wird so eine Notification angezeigt. Die Zahl darin 5000 ist eine Dauer in Millisekunden. Für diese Dauer wird die Notification angezeigt. Gibst du dort keine Zahl an, dann ist der Default "5000".

    Da du nicht weißt wie lange du es dauert bis die Daten kopiert sind, kannst du dort auch keinen Wert angeben. Somit müssen wir uns was einfallen lassen, damit wir rausbekommen, wie lange der Prozess des Kopierens läuft.

    Du startest einen Kopiervorgang in deinem Script. Dieser Vorgang ist ein "Prozess". Dieser Prozess hat eine "Prozess ID". Man könnte also sowas in die Richtung machen:

     pgrep -l <Prozessname>.

    Das checkt nach einem Prozess mit einem entsprechenden Namen. Da ich dein Script nicht kenne, nehme ich jetzt mal an, dass das ganze entweder über "cp" oder "scp" im Endeffekt läuft. Hier mal ein kleines Beispiel script, welches checkt wie lange ein "sleep" Kommando läuft und dann eine Ausgabe gibt, wenn es noch läuft und eine andere, wenn es nicht mehr läuft.

    Das sleep 10 & pausiert sozusagen dein System für 10 Sekunden und schiebt den Prozess in den Hintergrund (mit dem "&"). Dann haben wir eine "While"-Schleife die Checkt ob der Prozess noch läuft und schiebt die Ausgabe nach "/dev/null". Solange pgrep -l sleep > /dev/null ausgeführt wird, wird "laeuft noch" ausgegeben und dann wird ne Sekunde gewartet (Zeile 6). Wird das nicht mehr ausgeführt, dann schlägt while pgrep -l sleep > /dev/null fehl, wir brechen aus der "While"-Schleife aus und es wird "Jetzt ist es fertig" ausgeben.

    Jetzt kannst du obiges Script, bzw. auch dein eigenes, ein wenig anpassen:

    Bash
    #!/bin/bash
    
    
    scp <QUELLE> <ZIEL> &
    while pgrep -l scp > /dev/null ; do
      kodi-send --host=127.0.0.1 --action="Notification(Achtung,Script läuft,1000,DefaultIconInfo.png)"
      sleep 1
    done

    Das würde jede Sekunde an Kodi eine Notification senden die sagt, dass das Script noch läuft. Diese Notification würde für 1 Sekunde angezeigt werden.

    Was nicht geht ist, dass du dir anzeigen lassen kannst, welche Datei gerade kopiert wird.

    Du müsstest also dein script um eine "while"-Schleife erweitern und das halt an entsprechender Stelle.

    Wertschätzung kostet nichts, aber sie ist von unschätzbarem Wert.

  • Für den Fall, dass du das über einen Rechner machen möchtest, auf dem kodi-send nicht verfügbar ist, dann kannst du das auch wie folgt machen:

    Bash
    #!/bin/bash
    
    
    scp <QUELLE> <ZIEL> &
    while pgrep -l scp > /dev/null ; do
      curl -X POST -H "content-type:application/json" http://127.0.0.1:8080/jsonrpc -u kodi:1234 -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"GUI.ShowNotification\",\"params\":{\"title\":\"test\",\"message\":\"test\",\"displaytime\":1500}}"
    sleep 1
    done

    Dafür muss natürlich der Webserver in Kodi aktiviert werden. Das heißt du musst dann natürlich auch http://127.0.0.1:8080/jsonrpc mit der entsprechenden IP und -u kodi:1234 mit deinem eigenen Benutzernamen und Passwort ersetzen.

    Weiter ist der JSON-Request, den wir hier bauen, ein wenig limitiert. Du musst das also mindestens für 1.5 Sekunden machen. Das Sleep-Kommando würde ich zeitlich nicht gleich mit dem "curl" setzen. Ansonsten kann es passieren, dass die Notification ausgeblendet und wieder eingeblendet wird. "curls" an den Webserver brauchen ein wenig Verarbeitungszeit und wenn beide Werte (also der für den "curl" und der für den "sleep") gleich sind, dann könnte es passieren, dass die Notification ausgeblendet und sofort wieder eingeblendet wird. Das resultiert dann in nervige Notification-Töne, die immer wieder auftreten.

    Wertschätzung kostet nichts, aber sie ist von unschätzbarem Wert.

  • Den curl kann man verkürzen, wenn man weiß, wie man ' und " vernünftig mischt und damit das escapen von " per \" verhindern kann:


    Code
    curl -X POST -H "content-type:application/json" http://127.0.0.1:8080/jsonrpc -u kodi:1234 -d "{'jsonrpc':'2.0','id':1,'method':'GUI.ShowNotification','params':{'title':'test','message':'test','displaytime':1500}}"

    Ist auch besser lesbar.

    AZi (DEV): Nexus auf LibreElec | Asrock J4205 | 4 GB RAM | 128 GB Sandisk| Rii mini
    DEV: PC Ubuntu 20.04 | Matrix
    AZi: Tanix TX3 | Android/CoreElec Dualboot (EMMC), Nexus
    WoZi: Nexus auf LibreElec | Asrock J4205 | 4GB RAM | 128 GB Sandisk SSD | Atric IR | URC7960
    NAS: unRaid, 3x6TB, 2x12TB | TV-Server: Futro S550 mit Hauppauge QuadHD DVB-C
    PayPal: paypal.me/pvdbj1

  • Mit curl hab ich das ganze noch nicht getestet, aber mit kodi-send. Das funktioniert erstmal am Linux-Rechner problemlos. Hoffe das geht auch unter LibreELEC.

    Spontan beim Lesen bin ich aber davon ausgegangen, dass


    Zitat

    Das würde jede Sekunde an Kodi eine Notification senden die sagt, dass das Script noch läuft. Diese Notification würde für 1 Sekunde angezeigt werden.


    dazu führt, dass die Notification ein-, dann wieder aus- und dann wieder eine neue eingeblendet wird - sozusagen 'blinkend'. Das passiert aber zum Glück nicht. Frage ist: Wieso?

  • Das passiert aber zum Glück nicht. Frage ist: Wieso?

    Naja, weil die Notification gesendet wird bevor sie ausgeblendet ist. Somit wird der Stand "aufrecht" erhalten. Ich hätte auch damit gerechnet um ehrlich zu sein. Finde es aber gut, dass es so klappt.

    Wertschätzung kostet nichts, aber sie ist von unschätzbarem Wert.

  • Das funktioniert jetzt erst einmal wie es soll (mit kodi-send). Man kann aber scheinbar nicht den absoluten Pfad zu einem eigenen Icon angeben (/storage/icon.png). Muss ich die wie unter Ubuntu auch erst in eine Icon-Datenbank importieren? Irgendwo muss ja "DefaultIconInfo.png" auch seine Heimat haben.

    Scheinbar hat man aber Probleme mit Umlauten. Da kommt

    Code
    Traceback (most recent call last):  File "/usr/bin/kodi-send", line 103, in <module>    main()  File "/usr/bin/kodi-send", line 94, in main    packet = PacketACTION(actionmessage=action['content'], actiontype=ACTION_BUTTON)  File "/usr/lib/python2.7/site-packages/kodi/xbmcclient.py", line 465, in __init__    self.append_payload( format_string(actionmessage) )  File "/usr/lib/python2.7/site-packages/kodi/xbmcclient.py", line 104, in format_string    return msg.encode() + b"\0"UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 29: ordinal not in range(128)


    Dazu gibt es hier Umlaute bei kodi-send --action="Notification etwas, das führt aber zum gleichen Ergebnis. Das Paket kann man vermutlich nur unter einem Linux mit Apt-Paketverwaltung installieren und nicht unter LibreELEC.

  • Ich nutze Xonfluence als Skin. Ich dachte die Icons sind systemweit hinterlegt. Bei Xonfluence gibt es diesen Unterordner 'media' zwar auch, da sind aber nur ein paar xbt-Dateien drin. Kann ich das Icon auch irgendwie durch den absoluten Pfad angeben?

    Dein Aufruf wie du ihn oben angegeben hast geht nicht

    Code
    kodi-send --host=127.0.0.1 --action="Notification(Achtung,Script läuft,1000,DefaultIconInfo.png)"


    auch diese Variante aus dem anderen Beitrag nicht.


    Code
    kodi-send --host=127.0.0.1 --action='Notification("Alarm", "Alarm wurde ausgelöst","6000")'
  • Hmm...geht bei mir beides

    Geht bei dir kodi-send --host=127.0.0.1 -a "Notification(Foo, läuft,1000,DefaultIconError.png)" ?

    Edit:

    Woher hast du "kodi-send" installiert? Aus dem Kodi-PPA? Welches Betriebssystem nutzt du? Können wir bitte das Script sehen?

    Wertschätzung kostet nichts, aber sie ist von unschätzbarem Wert.

  • Wenn ich mir den Traceback oben anschaue, wird der Fehler im Modul "/usr/lib/python2.7/site-packages/kodi/xbmcclient.py" geworfen. Unabhängig davon, dass es trotzdem funktionieren sollte/muss, ist das Python 2.7 und damit kein aktuelles Kodi.

    AZi (DEV): Nexus auf LibreElec | Asrock J4205 | 4 GB RAM | 128 GB Sandisk| Rii mini
    DEV: PC Ubuntu 20.04 | Matrix
    AZi: Tanix TX3 | Android/CoreElec Dualboot (EMMC), Nexus
    WoZi: Nexus auf LibreElec | Asrock J4205 | 4GB RAM | 128 GB Sandisk SSD | Atric IR | URC7960
    NAS: unRaid, 3x6TB, 2x12TB | TV-Server: Futro S550 mit Hauppauge QuadHD DVB-C
    PayPal: paypal.me/pvdbj1

  • Ich starte es einfach aus SSH heraus von meinem Ubuntu-Rechner.

    Installiert hab ich es gar nicht, das ging bei LibreELEC von Beginn an. Es sei denn es ist in einem Addon wie System-Tools oder Network-Tools enthalten.

    @ PvD

    Ja, ich bin von LE10 zurück auf LE9 und werde so schnell auch kein 10 wieder installieren. Demnach ist es auch Kodi 18.9 und nicht die 19.

  • Sollte trotzdem funktionieren eigentlich. Ich kann LE9 nicht mehr testen. Tut mir leid. Da musst du dir nun selbst behelfen und ggf. keine Umlaute verwenden

    Wertschätzung kostet nichts, aber sie ist von unschätzbarem Wert.

  • Ich nutze Xonfluence als Skin. Ich dachte die Icons sind systemweit hinterlegt. Bei Xonfluence gibt es diesen Unterordner 'media' zwar auch, da sind aber nur ein paar xbt-Dateien drin

    Ja, der hat die halt so gepackt und dann ist es auch leider so, dass du nicht jedes Image dafür nehmen kannst, glaube ich. Abrufbar ist sollte das aber immer noch sein, glaube ich. Sicher bin ich mir aber nicht. Würde mich aber wundern, wenn nicht.

    Wertschätzung kostet nichts, aber sie ist von unschätzbarem Wert.

Jetzt mitmachen!

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