bash script ausführen

  • Hallo,
    ich habe eine Frage zum Ausführen von shell / bash Skripten .

    Mir sind die Shell Switch Plugins bekannt mit deinen man bash Skripte ausführen kann und damit Schalter betätigen kann.

    Was ich Suche, ist einen Art von Taster mit dem man einfach nur ein script.sh ausführen kann ohne eine Antwort vom Plugin zu bekommen.

    Der Plan ist, von einer PV-Anlage, mit dem Script Daten auszulesen und diese dann über Telegram zu versenden.

    Manuell funktioniert das Auslesen der Daten und das versenden per Telegram bestens.


    Jetzt will ich aber noch über Siri, das Script über die Homebridge ausführen.



  • Jetzt will ich aber noch über Siri, das Script über die Homebridge ausführen.

    Um das zum Laufen zu bekommen, braucht man ein Plugin, das den von Siri eingeschalteten Schalter automatisch wieder ausschaltet. Ansonsten bleibt der eingeschaltet und deine Mechanik funktioniert nur ein einziges Mal (oder du musst ihn extra per Siri oder manuell erst wieder ausschalten).


    Dazu nimmst du https://github.com/hallos/homebridge-cmdtrigger und konfigurierst das ungefähr so:


    Code
    {
        "accessory": "CmdTrigger",
        "name": "PV-Message",
        "command": "/usr/local/bin/script.sh",
        "delay": "100"
    }


    Sobald du oder Siri den Schalter einschaltest, wird das Script ausgeführt und der Schalter stellt sich selbst nach 100 ms wieder auf aus.

  • Hallo hyxamp,


    ich kann leider zu deiner Frage nichts beitragen. Haber doch eine Frage, welches Plugin nutzt du zu Ausführen des Scripts.

    Ich versuche über das Plugin CmdTrigger ein shell script auf dem Pi auszuführen. Bekomme aber eine Fehlermeldung, aber das Script wird gar nicht ausgeführt.

    In dem CmdTrigger kann man auch Dummy Schalter anlegen, vielleicht kommst du mit dem Plugin weiter.

  • Hallo fips,

    ich benutze dafür gar kein Plugin, die Animation wird durch den Dummy getriggert und dann in Homekit angelegt.


    CmdTrigger habe ich auch zum Ausführen verschiedener Skripte verwendet, brauche ich an dieser Stelle aber eigentlich nicht. Was bekommst du denn für eine Fehlermeldung?

  • Hallo sschuste,

    Danke für deine schnelle Antwort. Hast du eine Idee in welcher log Datei Fehler geschrieben werden. In dem Log der homebridge bekomme ich keinen Fehler angezeigt.
    Ich habe das von dir beschriebene Plugin installiert, es funktioniert auch, nur wird das Script nicht ausgeführt obwohl es von der Console perfekt funktioniert. Der Pfand ist auch richtig. Habe es auch mit sudo versucht.


    CmdTrigger habe ich auch zum Ausführen verschiedener Skripte verwendet, brauche ich an dieser Stelle aber eigentlich nicht. Was bekommst du denn für eine Fehlermeldung?

    Ich bekomme gar keine Fehlermeldung, in var/log/messages kommt nichts an. der GUI log der homebridge kommt auch kein Fehler. Ich habe auch schon im Plugin den Schalter debug auf true gesetzt. Wo können noch Fehler gelogt werden?

    Einmal editiert, zuletzt von DJay () aus folgendem Grund: Ein Beitrag von fips mit diesem Beitrag zusammengefügt.

  • Danke für deine schnelle Antwort. Hast du eine Idee in welcher log Datei Fehler geschrieben werden. In dem Log der homebridge bekomme ich keinen Fehler angezeigt.

    Aber vielleicht irgendetwas anderes?

    Ich habe das von dir beschriebene Plugin installiert, es funktioniert auch, nur wird das Script nicht ausgeführt obwohl es von der Console perfekt funktioniert. Der Pfand ist auch richtig. Habe es auch mit sudo versucht.

    Wo genau liegt dein Script, also wie lautet der Pfad dahin?

    in var/log/messages kommt nichts an

    Du meinst /var/log/messages.


    ich habe einen meiner cmdtrigger jetzt mal sabotiert und getestet, was dann passiert:


    [31/01/2022, 10:44:43] [Nicht vergessen] Setting 'Nicht vergessen' true

    [31/01/2022, 10:44:43] [Nicht vergessen] Command executed: '/var/homebrige/bn/alexa_remote_control.sh -e speak:"$(/var/homebridge/bin/dontforget.sh)"'

    [31/01/2022, 10:44:44] [Nicht vergessen] Setting 'Nicht vergessen' false


    Zu sehen ist ein falscher Pfad zum Script (statt bn muss es bin heißen), was aber zu keiner Fehlermeldung führt. Alles, was zu sehen ist, ist, dass irgendetwas ausgeführt werden soll. Zumindest so eine Meldung solltest du haben.


    Das gleiche gilt auch, wenn die Dateirechte falsch gesetzt sind. Das Plugin meldet keine Fehler.

  • Ich habe den Fehler gefunden.

    Warum es so funktioniert ist mir nicht ganz klar, aber gut ...


    über die Konsole funktionierte das script.

    Ich schreibe in eine Variable den Message Text.

    Das besondere daran ist, das ich Zeilenumbrüche übergebe.

    In nano sieht es dann so aus.


    Variabel="Zeile 1

    Zeile 2

    Zeile 3"


    dies übergebe ich dann an die API von Telegam und es erscheinen in Telegram 3 Zeilen.


    Wenn ich dies aber über das Plugin ausführe, ist die Variable leer und damit kommt auch keine Nachricht über Telegram., somit auch kein Fehler.


    Jetzt lasse ich die Variable weg und schreibe den selben Text direkt in die API und es funktioniert.

  • Nach fast 5 Jahren habe ich meiner Homebridge eine umfangreiche Verjüngungskur gegönnt.


    von Raspi 3B auf Raspi 4B, von RaspBee I auf Raspbee II, von homebridge-hue auf homebridge-deconz. von Telegram Benachrichtigungen auf Controller für Homekit Benachrichtigungen.


    Image habe ich frisch aufgesetzt, da ich mit dem alten viel herumexperimentiert habe und die ganzen Code-Leichen nicht mitschleppen wollte.


    Es läuft soweit alles perfekt. Das einzige was noch streikt sind ein paar bash Scripte, die ich über das homebridge-cmdtrigger Plugin damals mit freundlicher Unterstützung von sschuste angelegt habe. Das Problem ist vermutlich, dass ich diese Skripte executable machen muss. Ich meine das auch mit sudo chmod +x script.sh getan zu haben, aber es läuft leider nicht.


    Ich habe die Scripte vom alten Raspi ins gleiche Verzeichnis auf dem neuen Raspi kopiert, nämlich in /usr/local/bin und dann wie gesagt den obigen chmod ausgeführt. Wenn mir hier jemand auf die Sprünge helfen könnte, was ich vergessen habe, wäre ich sehr dankbar.


    Hier ein Beispiel eines der Skripte:

    Bash
    #!/bin/bash
    nc 192.168.2.17 23 -w2 echo     <<END
    Action Ds/Product 2 SetStandby "0"
    END

    2 Mal editiert, zuletzt von bubffm ()

  • aber es läuft leider nicht.

    Was genau läuft nicht?

  • Ich kann den script über Terminal mit ./play.sh problemlos ausführen. Aber nicht über Cmdtrigger mit

    "command": "cd /usr/local/bin && sudo ./play.sh"


    wie gesagt, sudo chmod +x play.sh. habe ich gesetzt.


    Habe den Script auch gelöscht und noch mal ganz frisch angelegt um auszuschließen, das beim kopieren vom alten raspi nichts schief gegangen ist. Ändert nichts am Problem.


    Noch als Ergänzung: Im Log sehe ich das der cmdtrigger-Befehl ausgeführt wurde. Fehlermeldungen gibt es kein.

    2 Mal editiert, zuletzt von bubffm ()

  • Am elegantesten ist es erstmal, das so aufzuschreiben:

    "command": "sudo /usr/local/bin/play.sh",


    was natürlich nur funktioniert, wenn sich play.sh im Verzeichnis /usr/local/bin befindet. Davon schreibst du nichts, wenn du sagst

    Ich kann den script über Terminal mit ./play.sh problemlos ausführen

    Ich sehe hier weder, dass du

    1. vorher ein cd /usr/local/bin machst, bevor du ./play.sh aufrufst, noch dass du
    2. sudo verwendest

    Beim Testen rufst du ./play.sh auf, in der Homebridge-Konfiguration verwendest du cd /usr/local/bin && sudo ./play.sh. Das sieht nicht nur anders aus, sondern ist auch was Anderes. In deinem Test rufst du play.sh in dem Verzeichnis auf, indem du dich gerade befindest (und zwar: ./) , in der Konfiguration wechselst du zu einem bestimmten Verzeichnis (und zwar: /usr/local/bin) und verwendet auch noch zusätzlich sudo. Gut, der Unterschied ist jetzt nicht sooo groß, keinesfalls mehr als der Unterschied zwischen einem Fiat 500 und einem Airbus A380. Also völlig minimal, beide haben Räder und das ist es doch, worauf es ankommt, nicht wahr?


    Ein ls -l /usr/local/bin/play.sh zeigt dir an, ob sich dein Skript überhaupt dort befindet. Ob du überhaupt sudo verwenden musst, steht auch in den Sternen.


    Ein pwd zeigt dir an, in welchem Verzeichnis du dich befindest, wenn du ./play.sh aufrufst.


    Mach das mal und berichte.

  • Vielen Dank dafür.


    Ja, Play.sh befindet sich im korrrekten Verzeichnis. Abfrage

    pi@homebridge:~ $ ls -l /usr/local/bin/play.sh


    gibt als Rückmeldung:

    -rwxr-xr-x 1 root root 85 Oct 14 10:48 /usr/local/bin/play.sh


    pwd. ergibt. /home/pi

    Aber als ich es vorhin getestet habe war ich natürlich in /usr/local/bin  8o


    Der Unterschied ist ist mir schon klar. Erklärt aber noch nicht warum das Script nicht läuft obwohl as ja wohl im richtigen Verzeichnis liegt und die Rechte sehen doch auch ok aus, oder? 'Sudo' habe ich auch benutzt


    Die Befehlsstruktur mit dem "./" hatte ich damals von Dir übernommen, aber ich kann das natürlich in das andere Format umbauen. Gerade probiert: Funktioniert über das Terminal.


    Im config habe ich den Befehl für Cmdtrigger auch gerade angepasst und die Homebridge neu gestartet. Läuft aber leider immer noch nicht ?(

  • Ich hatte ein ähnliches Problem als ich vorletzte Woche meinen Raspi neu aufsetzen musste:


    Meine Skripte die ich mit cmdtrigger aufrufe enthielten “sudo”

    Dazu ist der User “homebridge” (unter diesem User läuft meine homebridge) bei mir aber nicht berechtigt gewesen.

    Also entweder sudo weglassen (wenn das Skript ohne auskommt) oder dem User homebridge sudo Rechte einräumen.


    Dein Skript gehört übrigens dem User ROOT. Möglicherweise kann es auch deswegen nicht von der homebridge gestartet werden?


    Code
    sudo chown $USER:$GROUPS /usr/local/bin/play.sh

    Damit setzt du den Besitzer des Skripts auf den User/Benutzergruppe mit dem du gerade im Terminal angemeldet bist.

  • Vielen Dank, wenn ich jetzt wüsste welches password der user homebridge hat, könnte ich ich mich als 'homebridge' im terminal anmelden und das script zuweisen. Weiss aber nicht welches password das ist. Das vom UI-X interface ist es jedenfalls auch nicht und meins vom user 'pi' ebenfalls nicht. Blöd... X/


    Sinnvoller wäre es für mich, dem user homebridge sudo Rechte zuzuteilen, wenn ich wüsste wie :rolleyes:


    Habe es über den Terminal von Homebridge-UI-X hinbekommen. Scipts neu erstellt mit owner homebridge, executable gemacht und ohne sudo im cmdtrigger abgerufen. Läuft!


    Das Kernproblem war, dass der user homebridge in meinem neuen Setup nicht sudo berechtigt ist.


    Dank an buzz-dee für den entscheidenden Hinweis.

    Einmal editiert, zuletzt von Spy () aus folgendem Grund: Ein Beitrag von bubffm mit diesem Beitrag zusammengefügt.

  • Dein Skript gehört übrigens dem User ROOT. Möglicherweise kann es auch deswegen nicht von der homebridge gestartet werden?

    Doch, kann es in diesem Fall.

  • Vielen Dank, wenn ich jetzt wüsste welches password der user homebridge hat, könnte ich ich mich als 'homebridge' im terminal anmelden und das script zuweisen.

    dazu musst du nicht als “homebridge” angemeldet sein. Du kannst den Befehl einfach im Terminal eingeben in dem du mit deinem User Namen angemeldet bist und dem Skript den Besitzer homebridge zuweisen


    Code
    sudo chown homebridge:homebridge /usr/local/bin/play.sh
  • Danke, gut zu wissen für nächstes Mal. Hauptsache es läuft :thumbup:


    Ich brauche diese ganzen frickeligen Linux-Befehle nur alle 5 Jahre mal wenn ich die Homebridge wieder umziehe und irgendein Script den automatischen Umzug nicht mitmachen möchte.8o. Für den täglichen Bedarf finde ich mich zurecht, aber solche Sachen überfordern mich manchmal.


    Einmal editiert, zuletzt von bubffm ()