Ankündigung

Einklappen
Keine Ankündigung bisher.

OH2 Script wird nicht per EXEC ausgeführt

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    OH2 Script wird nicht per EXEC ausgeführt

    Hallo zusammen,

    ich weißt nicht mehr weiter und möchte nun Euch um Hilfe bitten.

    Ich haben in OH2 über das EXEC-Binding 2.0 meine 433MHz Funksteckdosen über einzelne sh-Scripts am Laufen. --> Funktiniert!
    Nun habe ich ein weiters Skript implementiert, welches per ssh einen GPIO auf einem weiteren RaspberryPi schalten soll. --> funktiniert nicht

    Alle Scritps haben die gleichen Rechte (openhab openhabian) und auch die gleichen Dateiberechtigunen (777).
    Wenn ich das Script "Pi_garage.sh" per Konsole aufrufe, wird es ausgeführt.
    Wenn ich versuche dieses Script über meine Openhab-Oberfläche oder Basic-UI zu starten, passiert nichts.

    Im openhab.log wird lediglich angezeigt, das mein String-Schalter "GargenTTor" seinen Status von ON nach OFF und umgekehrt ändert.

    Hat einer von Euch eine Idee?

    things:
    Code:
    /**************************************************************************
    Funksteckdosen
    **************************************************************************/
    Thing exec:command:FSD_A  [command="/srv/openhab2-conf/scripts/FSD_1.sh %2$s", interval=0, autorun=true]
    Thing exec:command:FSD_B  [command="/srv/openhab2-conf/scripts/FSD_2.sh %2$s", interval=0, autorun=true]
    Thing exec:command:FSD_C  [command="/srv/openhab2-conf/scripts/FSD_3.sh %2$s", interval=0, autorun=true]
    Thing exec:command:FSD_D  [command="/srv/openhab2-conf/scripts/FSD_4.sh %2$s", interval=0, autorun=true]
    
    /**************************************************************************
    GPIO Garage
    **************************************************************************/
    Thing exec:command:GaragenTor  [command="/srv/openhab2-conf/scripts/Pi_garage.sh", interval=0, autorun=true]
    items:
    Code:
    /**************************************************************************
    Funksteckdosen <poweroutlet>
    **************************************************************************/
    String FSD_A  <terrace> {channel="exec:command:FSD_A:input"}
    String FSD_B  <light> {channel="exec:command:FSD_B:input"}
    String FSD_C  <light> {channel="exec:command:FSD_C:input"}
    String FSD_D  <light> {channel="exec:command:FSD_D:input"}
    
    /**************************************************************************
    GPIO Garage
    **************************************************************************/
    String GaragenTTor <garagedoor> {channel="exec:command:GaragenTor:input"}
    sitemap:
    Code:
    Switch item=FSD_B             label="Leselampe" mappings=[ ON="ON", OFF="OFF" ]
    Switch item=FSD_C             label="Stehlampe" mappings=[ ON="ON", OFF="OFF" ]
    Switch item=GaragenTTor label="Garagentor" mappings=[ ON="go", OFF="go" ]

    Alternativ habe ich auch beide Script-Aufrufe in eine Rule gepackt wobei auch nur die Funktsteckdose ausgeführt wird.
    Code:
    rule "Garagentor_los"
    when
        Item GaragenTTor received command
    then
        executeCommandLine("bash /srv/openhab2-conf/scripts/Pi_garage.sh")
        executeCommandLine("bash /srv/openhab2-conf/scripts/FSD_4.sh ON")
        logInfo("Regel Garagentor", "Los gehts")
    end
    Pi_garage.sh macht nichts
    Zuletzt geändert von mortyPi; 27.10.2017, 16:20.

    #2
    Das wird eher am Script liegen. So als erster Tipp: ssh mit public/private key? Der private key muss für den User openhab lesbar sein, normalerweise darf er auch für niemand anderen lesbar sein (Rechte 600, Besitz openhabpenhab). Da der User openhab kein home-Verzeichnis hat, muss der key beim Aufruf mit angegeben werden, mittels
    Code:
    ssh -i /path/to/keyfile/id_rsa user@rechner ...
    Dann kann es noch sein, dass der Rechner in die known_hosts Datei übernommen werden muss. Die liegt auch in einem Verzeichnis, welches nicht existiert. Es gibt aber auch eine systemweite /etc/ssh/ssh_known_hosts (das ist der default: kann in /etc/ssh/ssh_config definiert werden, mit dem Parameternamen GlobalKnownHostsFile)

    Ob das Script aufgerufen wird, kannst Du einfach testen, indem Du im Script z.B. ein touch auf eine Datei ausführst, oder noch besser ein echo in eine Datei schickst. Wenn die Datei anschließend angelegt wurde, der Zeitstempel aktualisiert wurde oder auch wahlweise der Dateiinhalt passt, weißt Du, dass das Script ausgeführt wurde.

    Kommentar


      #3
      Hallo udo1toni,

      Danke für Deine Antwort.
      Ich habe es jetzt hin bekommen.

      Mein Problem war folgendes:
      Ich hatte mein SSH-Key mit dem User "openhabian" erstellt. Somit konnte OpenHAB (der ja den User "openhab" verwendet) nichts damit anfangen.
      Nun habe ich einen neuen SSH-Key als User "openhab" erstellt....
      ... und nun gehts! *freu*

      Kannst Du mir nebenbei noch sagen, wie ich ein "echo" in eine Datei schicke?
      Bestimmt hilft es mir bei meinen nächsten Analysen ;-)

      Kommentar


        #4
        Das geht einfach, indem Du die Ausgabe in eine Datei umleitest:

        Code:
        echo `date` Logeintrag >> ~/test.log
        Schreibt eine Zeile mit Datumsstempel und dem Wort 'Logeintrag' in ein File test.log im home-Verzeichnis des angemeldeten Users. Falls die Datei nicht vorhanden ist, wird sie erzeugt, falls sie vorhanden ist, wird die Zeile angehängt.

        Kommentar


          #5
          Hallo,

          kannst du kurz sagen wie du die Steckdosen am Laufen hast? Ich versuche mittels einem Switch 2 unterschiedliche Linuxbefehle zu schicken.

          d.h.
          ON = WOL
          OFF = Linuxbefehl2

          mit dem exec 2 Binding und der 1er Version dürfte hier alles verändert worden sein. Und ich find kein HowTo mit der 2er die ich verstehe

          2 things

          Thing exec:command:startPC [command=""/usr/bin/wakeonlan -p 7 <MAC-ADRESSE> %2$s", interval=0, autorun=true]
          Thing exec:command:shutdownPC [command="ssh root@192.168.50.105 shutdown -h now%2$s", interval=0, autorun=true]

          1 Switch item mit ON/OFF

          und diesen Switch dann in der Sitemap. Nur wie muss das Item aussehen?

          Die Befehle funktionieren alle mit dem User openhab.

          Danke und Lg

          Kommentar


            #6
            Zitat von 0verwatch Beitrag anzeigen
            Und ich find kein HowTo mit der 2er die ich verstehe
            Du befindest Dich in guter Gesellschaft das Exec2 Binding versteht niemand so richtig...

            Deine Herangehensweise macht Dir das Leben schwer Wenn Du ohnehin das exec Binding verwendest, kannst Du einfach ein Batch Script schreiben, welches einen Parameter erwartet (ON, OFF) und entsprechende Befehle absetzt und passend zurückmeldet. Dann legst Du nur ein Thing an, welches dann die Schalterstellung an das Script übergibt.
            Wenn Du mehrere PC auf diese Weise steuern möchtest, kannst Du trotzdem noch MAC und IP als Parameter an das Script übergeben, dann legst Du pro PC ein Thing an (einzige Unterschiede sind dann die Thing Namen, MAC und IP), der Verweis auf das Script ist jeweils gleich und Du brauchst auch das Script nur einmal.
            Du könntest auch noch ein Ping mit ins Script einbauen, wenn man dann STATE als Parameter schickt, könnte das Script den Zustand (ON, OFF) zurückmelden.

            EDIT:
            Achso... das Item sieht dann so aus:
            Code:
            Switch MyPCSwitch "PC schalten" {channel="exec:command:mypc:input"}
            Zuletzt geändert von udo1toni; 02.02.2018, 12:46. Grund: Item Definition zugefügt

            Kommentar


              #7
              Gäbe es leicht eine einfachere Möglichkeit als das exec Binding zu verwenden?

              Kommentar


                #8
                Es gibt das WOL Binding und das Network Binding (alternativ - legacy - das Networkhealth Binding), das WOL Binding erlaubt es, Rechner per WOL aufzuwecken, das Network Binding zeigt an, ob ein Rechner aktuell läuft. Spätestens zum gezielten Ausschalten des Rechners wirst Du aber um das Exec Binding nicht herum kommen. Du kannst natürlich das Exec 1 Binding installieren, das ist etwas einfacher in der Konfiguration.
                Trotzdem bleibt die einfachste Variante, ein Bash Script zu erstellen, welches die Steuerung übernimmt, und dieses Script per exec aufzurufen.

                Kommentar

                Lädt...
                X