Ankündigung

Einklappen

Serverwartung 21.2.



Am 21.2. im Laufe des späten Abends wird eine Serverwartung durchgeführt. Das Forum ist dadurch für gut zwei Stunden nicht erreichbar.
Es wird eine Wartungsseite geschaltet.

Mehr anzeigen
Weniger anzeigen

Auswerten einer Seite die einen Session Cookie erfordert

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

    [Codebeispiel] Auswerten einer Seite die einen Session Cookie erfordert

    Hallo,

    hab mal wieder eine Frage zum HTML-Binding bzw. suche eine Lösung um Daten von einer Seite abzurufen, die allerdings ein Session-ID (Session-Cookie) benötigt.

    Der Ablauf ist wie folgt:
    Wenn ich die Seite die mir die Daten übergeben soll (diese gibt ein JSON Protokoll aus) mit USER und Passwort aufrufe, erhalte ich einen Login-Fehler. Dies lässt sich auch auf meinem PC reproduzieren

    Wenn ich allerdings zuvor die eigentliche HTML-Startseite aufrufe (incl. USER und Passwort) und geöffnet lasse, erhalte ich beim ersten Link kein Login-Fehler (geöffnet in einem zweiten Tab).
    Dies liegt daran dass die HTML-Seite dem PC eine Session-ID (Cookie) vergilt.

    Welche Möglichkeiten habe ich in diesem Fall mit openHAB?
    Besteht die Möglichkeit in Rules beide Seiten nacheinander aufzurufen ohne dass die Session-ID gelöscht wird?


    Gruß
    mepi0011

    #2
    Hallo,

    leider hat noch niemand auf meine Fragen geantwortet.

    Da ich aktuell Probleme mit dem Designer habe, nochmals die Frage wie ich Webseiten in Rules aufrufen kann?

    Im Internet (https://code.google.com/p/openhab-sa...a_HTTP_binding) habe ich folgendes gefunden:
    Code:
    sendHttpGetRequest("http://192.168.1.16/devices.htm?rom=BD0000009D93DC12&variable=FlipFlop_B&value=0")
    Ich vermute es gibt noch mehr um auch HTTP Seiten aufzurufen!

    Bitte um Hilfe!

    Gruß
    mepi0011

    Kommentar


      #3
      Hallo zusammen,

      kann mir jemand die Funktionsweise der folgende Befehle erklären?

      sendHttpDeleteRequest
      sendHttpGetRequest
      sendHttpPostRequest
      sendHttpPutRequest

      Danke im Voraus!

      Gruß
      mepi0011

      Kommentar


        #4
        Hallo mepi0011,
        ich hol das mal wieder hoch ...
        bist du mit dem problem weiter gekommen ?
        Hab das selbe problem - auth funktioniert und gibt eine sid zurück.
        openhab.log
        Code:
        {"data":{"sid":"tw6MsBeeSToHoC5KON06993"},"success":true}
        der zweite aufruf wird aber nicht ausgeführt und mit
        Code:
        {"error":{"code":101},"success":false}
        quitiert.
        Ich möchte damit die Audiostation von einer Synology Nas steuern.
        Wer kann mir helfen?
        Mit dem REST-Plugin und über die console mit wget (wget -qO - --load-cookies bzw. --save-cookies cookies.txt) funkionieren die aufrufe !

        LG Malte

        Kommentar


          #5
          Hallo Malte,

          direkt mit openHAB habe ich es nicht gelöst bekommen. Habe ein script geschrieben, das ich anschließend über das exec Binding aufrufe.

          Das Skrip sieht wie folgt aus:

          Code:
          #!/bin/bash
          # Script um die JSON Schnittstelle des Gerätes auszulesen
          
          # Pfad in dem die JSON Datei abgelegt wird
          JSONPfad=$HOME
          
          # Datei in der die JSON Ausgabe gespeichert wird
          JSONDatei="json.out"
          
          # Datei in dem curl die Cookies ablegt
          cookieDatei="cookie.txt"
          
          # IP Addresse des auszulesenden Gerätes
          lIP="192.168.1.109"
          
          # Aufbau der benötigten Pfade und Links
          Ausgabe="${JSONPfad}/${JSONDatei}"
          CookiePfad="${JSONPfad}/${cookieDatei}"
          JSONLink="http://${lIP}/webservice/data.php"
          LoginLink="${lIP}/startservice.php"
          
          # Daten (JSON) vom Gerät abfragen
          curl -s -b $CookiePfad -X GET $JSONLink > $Ausgabe
          
          # Es wird geprüft ob der Login funktioniert hat
          authFehler=$(jq 'has("authentication")' $Ausgabe)
          # echo "Ausgabe $authFehler"
          
          if [ $authFehler  = "true" ]
          then
            echo "Login Fehler: Login wird durchgeführt!"
            curl -s --cookie-jar $CookiePfad $LoginLink > /dev/null
            curl -s -b $CookiePfad --cookie-jar $CookiePfad -d "login=user&password=1234&save_login=1" $LoginLink > /dev/null
            curl -s -b $CookiePfad -X GET $JSONLink > $Ausgabe
          fi
          
          # Rückgabe des gewünschten Wertes
          case "$1" in
          	aktBezug)		echo $(jq '.["1-0:1.4.0*255"]' $Ausgabe);;
          	aktEinspeisung)		echo $(jq '.["1-0:2.4.0*255"]' $Ausgabe);;
          	ZaehlerBezug)		echo $(jq '.["1-0:1.8.0*255"]' $Ausgabe);;
          	ZaehlerEinspeisung)	echo $(jq '.["1-0:2.8.0*255"]' $Ausgabe);;
          	*)			echo "kein bekannter Parameter!"
          				exit 1;;
          esac
          
          exit 0
          Damit das Scrip funktionier muss jq und curl installiert sein.

          Gruß
          mepi0011

          Kommentar

          Lädt...
          X