Ankündigung

Einklappen
Keine Ankündigung bisher.

Openhap per bash script bwz curl

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

    Openhap per bash script bwz curl

    Hallo ich bin in diesem bereich ein totaler neuling, also ich habe im haus lichtschalter die auf dem linux server eine script öffnen zb flurlicht.sh dies soll praktisch ein toggle darstellen doch es geht nicht.... hier der inhalt der flurlicht.sh

    #!/bin/bash

    if [ "$1" == "OFF" ]

    then

    curl --header "Content-Type: text/plain" --request POST --data "OFF" http://192.168.2.116:8080/rest/items...lurDecke/state

    fi

    if [ "$1" == "ON" ]

    then

    curl --header "Content-Type: text/plain" --request POST --data "ON" http://192.168.2.116:8080/rest/items...lurDecke/state

    fi




    also dieses sollte dann beim drücken das licht an bwz ausschalten...

    bitte um hilfe

    mfg

    #2
    Probier es mal mit einem PUT, hier ein curl Aufruf, der bei mir funktioniert:
    curl -X PUT -H "Content-Type: text/plain" -d $Value "http://openhab.domain.internal:8080/rest/items/SmartMeterGasValue/state"

    Adresse und Variablen musst Du natürlich anpassen.

    Kommentar


      #3
      leider kein erfolg also ich habe jetzt die funktionierenden befehle nur leider klappt das mit dem if und them nich.... das script macht also rein garnichts... kopiere ich aber die einzelnen off on zeilen in die konsole geht es...

      curl --header "Content-Type: text/plain" --request POST --data "ON" http://192.168.2.116:8080/rest/items...idor_FlurDecke


      hier das ganze script

      #!/bin/bash

      if [ "$1" == "OFF" ]

      then

      curl --header "Content-Type: text/plain" --request POST --data "ON" http://192.168.2.116:8080/rest/items...idor_FlurDecke

      fi

      if [ "$1" == "ON" ]

      then

      curl --header "Content-Type: text/plain" --request POST --data "OFF" http://192.168.2.116:8080/rest/items...idor_FlurDecke

      fi


      habe ich vllt was bei dem if [ "$1" == "OFF" ] falsch??

      Kommentar


        #4
        Ja, definitiv. das sollte eher so aussehen:
        Code:
        if [ $1 = "ON" ]
        Zur Bash gibt es so viele Anleitungen im Netz (egal ob englisch oder deutsch), dass ich mir Links erspare. Nur zur Erklärung: $1 ist eine Variable, muss also nicht in Anführungszeichen stehen, solange sie keine Zeichenketten mit Leerzeichen enthält (das dürfte im vorliegenden Fall als gegeben angenommen werden). Wichtiger ist, dass der Zeichenkettenvergleich mit = erfolgt, nicht mit ==. Falls eine Negierung erwünscht ist, stünde ein ! vor dem Term, also [ ! $1 = "ON" ]
        Da das Script ja wohl über einen Schalter aufgerufen wird, könntest Du Dir eine Bedingung ersparen und einschalten, falls die Variable ON enthält, aber ansonsten ausschalten, also komplett:
        Code:
        #!/bin/bash
        if [ $1 = "ON" ] ; then
          curl --header "Content-Type: text/plain" --request POST --data "OFF" http://192.168.2.116:8080/rest/items/Light_WW_Corridor_FlurDecke
        else
          curl --header "Content-Type: text/plain" --request POST --data "ON" http://192.168.2.116:8080/rest/items/Light_WW_Corridor_FlurDecke
        fi

        Kommentar


          #5
          Da muss ich leider widersprechen.

          Man sollte die Variable schon in Anführungszeichen setzen, nicht nur wenn es Leerzeichen geben könnte. Auch wenn der Parameter vergessen wird. Wird nämlich nichts übergeben stünde dort if [ = "ON" ] was zu einem Fehler führt. Mit Anführungszeichen steht dort if [ "" = "ON" ] was syntaktisch korrekt ist und verarbeitet werden kann. Also immer Anführungszeichen drumherhum. Und die Verkürzung mittels else wäre hier aus dem gleichen Grund vielleicht auch nicht so sinnvoll. Wenn ich das Skript mit falschem oder fehlenden Parameter aufrufe, dann würde das Script immer ausschalten. Die Eingabe sollte immer komplett geprüft werden.

          Gruss,

          Matthias

          Kommentar


            #6
            Einen wunderschönen guten morgen... erst einmal ein großes danke für eure hilfe...

            der jetzige stand es geht immer noch nicht.... aber immerhin ging dank der hilfe von @udo1toni schon einmal das licht an, allerdings musste ich
            Code:
            if [ $1 = "ON" ]
            wirklich wieder so ändern
            Code:
            if [ "$1" = "ON" ]
            da sonst ein fehler kommt
            Code:
            root@ubuntuhomeautomation:~# /home/toggleflur3.sh
            /home/toggleflur3.sh: Zeile 2: [: =: Einstelliger (unärer) Operator erwartet.
            ich habe langsam das gefühl das script weiß garnicht ob das licht an oder aus ist, ich meine wie fragt der das ab? das jetzige script sieht so aus
            Code:
            #!/bin/bash if [ $1 = "ON" ] ; then
            curl --header "Content-Type: text/plain" --request POST --data "OFF" [URL="http://192.168.2.116:8080/rest/items/Light_WW_Corridor_FlurDecke"]http://192.168.2.116:8080/rest/items...idor_FlurDecke[/URL]
            else
            curl --header "Content-Type: text/plain" --request POST --data "ON" [URL="http://192.168.2.116:8080/rest/items/Light_WW_Corridor_FlurDecke"]http://192.168.2.116:8080/rest/items...idor_FlurDecke[/URL]
            fi



            hatte es auch noch mal so versucht
            Code:
            #!/bin/bash
            
            if [ "$1" = "OFF" ]
            
            then
            
            curl --header "Content-Type: text/plain" --request POST --data "ON" [URL="http://192.168.2.116:8080/rest/items/Light_WW_Corridor_FlurDecke"]http://192.168.2.116:8080/rest/items...idor_FlurDecke[/URL]
            
            fi
            
            if [ "$1" = "ON" ]
            
            then
            
            curl --header "Content-Type: text/plain" --request POST --data "OFF" [URL="http://192.168.2.116:8080/rest/items/Light_WW_Corridor_FlurDecke"]http://192.168.2.116:8080/rest/items...idor_FlurDecke[/URL]
            
            fi
            ohne erfolg
            Zuletzt geändert von icedeath82; 21.09.2015, 08:06.

            Kommentar


              #7
              icedeath82 Da hast du recht. Du musst das Script mit dem parameter ON oder OFF aufrufen. Von alleine gibt es keine Entscheidung. Also:
              Code:
              /home/toggleflur3.sh ON
              für an und
              Code:
              /home/toggleflur3.sh OFF
              für aus.

              Wenn du umschalten willst, müsstest du dir vorher mit GET den aktuellen Wert holen.

              Gruss,

              Matthias

              P.S.

              Ohne es getestet zu haben:
              Code:
              #!/bin/bash
              
              CS=$(curl -s --header "Content-Type: text/plain" "http://192.168.2.116:8080/rest/items/Light_WW_Corridor_FlurDecke/state")
              COMMAND="ON"
              
              if [ "$CS" = "ON" ] ; then
              COMMAND="OFF"
              fi
              
              curl --header "Content-Type: text/plain" --request POST --data "$COMMAND" http://192.168.2.116:8080/rest/items/Light_WW_Corridor_FlurDecke
              Zuletzt geändert von supermaz; 21.09.2015, 09:49.

              Kommentar


                #8
                ah ob das macht sinn aber wie mache ich das mit dem get ich steh da voll im wald

                Kommentar


                  #9
                  Siehe mein EDIT eins drüber.

                  Kommentar


                    #10
                    wah hammer es geht!!!!!!!!!!!!!!!! 10000000000000000 dank.... jetzt muss die frau nicht mehr mit dem handy durch das haus rennen...

                    ihr seid die besten..

                    mfg Sandro

                    Kommentar


                      #11
                      Ah, mal wieder zu viel drumherum vorausgesetzt... supermaz hat natürlich mit seinem Einwand Recht, was fehlende mitgegebene Parameter betrifft.

                      Ich möchte noch auf eine Kleinigkeit im fertigen Script hinweisen:
                      Das Item kann nämlich auch den Zustand uninitialized haben, so dass es passieren kann, dass das Licht eingeschaltet ist, der Toggle aber trotzdem auf ON wechselt, falls openHAB neu gestartet wurde. Also nur für den Hinterkopf, falls mal zwei Klicks zum Abschalten gebraucht werden.
                      Das ist auch der Grund, warum ich meine Abfrage auf ON laufen lies, hat den Vorteil, dass im Zweifel (also bei einer Fehlfunktion) das Licht ausgeschaltet wird und nicht aus Versehen dauerhaft leuchtet. Es kommt natürlich immer drauf an, welcher Zustand für den Anwender "unkritischer" ist...

                      Kommentar

                      Lädt...
                      X