Heizungssteuerung - Siemens Webserver OZW 672 auslesen

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • G A
    Smart Home'r
    • 27.08.2015
    • 98

    #1

    Heizungssteuerung - Siemens Webserver OZW 672 auslesen

    Sehr geehrte Forumsgemeinde!

    Bei mir ist wieder einmal ein ungelöstes Thema aufgetaucht, das mich einfach nicht loslässt. Ich möchte Daten aus meiner Heizungssteuerung mit Hilfe des Siemens Webserver OZW 672 auslesen.

    Es gibt im Forum einen älteren Thread in dem Thomas H anscheinend schon erfolgreich die Daten auslesen bzw. schreiben konnte. Leider hat im im damaligen Beitrag auf eine Rückfrage wie er das gelöst hat nicht geantwortet. Auch eine PN meinerseits blieb unbeantwortet.

    Zitat: „Da das mit HTTP Befehle super geht. Obwohl dahinter ein API Code steckt, der sich alle 15 min ändert.“

    Hintergrund dazu ist wohl dass der Siemens Webserver innerhalb der einzelnen Lese- bzw. Schreibbefehle eine Session ID benötigt. Was ich dazu bisher im Netz gefunden habe sieht so aus:

    Session ID abrufen: http://192.168.251.1/api/auth/login....nsMuser&pwd=My password (geht auch als XML Abfrage)
    Antwort: ... „SessionId“: „0bc99a1-04eb-4a7c-8371-4ab648ec8a88“,...“ (nicht vollständig angeführt)

    Mit dieser Session ID kann man dann Datenpunkte auslesen:


    Antwort: ...“Value“: „28.0“ (nicht vollständig angeführt)

    Besteht in der Loxone Config die Möglichkeit den ersten http get Befehl abzusetzen, die Antwort mit der SessionID zwischenzuspeichern und dann einen weiteren http Befehl mit dieser gespeicherten SessionID zu generieren.

    Hat möglicherweise von euch schon jemand eine lauffähige Version? Könnte man den Loxberry bzw. das Ochsner Plugin dafür umschreiben?

    Vielen Dank im Voraus für euren Input.

    LG
    Günter
  • Christian Fenzl
    Lebende Foren Legende
    • 31.08.2015
    • 11245

    #2
    Gibt es eine API-Beschreibung dafür?
    Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

    Kommentar

    • G A
      Smart Home'r
      • 27.08.2015
      • 98

      #3
      Servus Christian!

      Die API ist im Prinzip so aufgebaut wie oben bzw. nachfolgend angeführt - die detaillierte API Beschreibung bekommt man von Siemens nur wenn man ein "NDA Non Disclosure Agreement" unterschreibt. Meine Beispiele stammen daher aus diesem Forum bzw. aus den im Web vorhandenen Infos..

      Kannst du damit schon etwas anfangen? Ich habe die detaillierte Beschreibung, möchte diese aber hier aus oben genannten Grund nicht anführen. (PN?)

      Beispiel:
      http://192.168.251.1/api/auth/login.json?user=HansMuster&pwd=MyPassword

      Response body in XML:
      <Service>
      <SessionId>0bc991a1-04eb-4a7c-8371-4ab648ec8a88</SessionId>
      <Result>...</Result>
      </Service>

      Request example:
      http://192.168.251.1/api/menutree/read_datapoint.json?SessionId=0bc991a1-04eb-4a7c-8371-
      4ab648ec8a88&Id=878

      Response body in XML:
      <Service>
      <Data>
      <Type>Numeric</Type>,
      <Value>28.0</Value>
      <Unit>°C</Unit>
      <EnumValue>10</EnumValue>
      </Data>
      <Result>...</Result>
      </Service>

      LG
      Günter


      Hier vielleicht noch ein brauchbarer Link: https://forum.fhem.de/index.php/topic,32866.0.html

      Zuletzt geändert von G A; 25.06.2019, 09:35.

      Kommentar

      • svethi
        Lebende Foren Legende
        • 25.08.2015
        • 6336

        #4
        Das kannst Du in der Config selbst nicht lösen. Es gibt keine Möglichkeit den „Text“ Session-ID auszulesen und damit dann einen neuen Request zu starten. Dazu musst Du mindestens PicoC in Anspruch nehmen, oder auf einen externen Server (Raspberry) etc. Ausweichen.
        Miniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)

        Kommentar

        • Tico
          Lox Guru
          • 31.08.2016
          • 1035

          #5
          Es gibt einen etwas hässlichen Workaround, den du benutzen könntest, um dies zu tun. Ich bin mir nicht sicher, ob die erforderlichen Ressourcen das rechtfertigen würden. Du kannst der Richter sein.

          Schritt 1: Ingestieren Sie die SessionID in die Config -

          https://www.loxwiki.eu/display/LOXEN...+to+Miniserver

          Der Wiki-Artikel erklärt, wie man das Trennzeichen an ein Textfeld mit variabler Länge anpasst. Kümmere dich nicht darum. Die SessionID ist wahrscheinlich 36 Zeichen lang. Die Wiki-Download-Datei kann auf 36 Statusblöcke reduziert werden.

          Die Befehlserkennung erfolgt im Format -

          1. Virtueller Eingang in den ersten Statusblock
          Code:
          <SessionId> \s0\1
          2. Virtueller Eingang in den zweiten Statusblock
          Code:
          <SessionId> \s1\1
          etcetc.

          Beim 36. Statusblock befindet sich die komplette SessionID im TQ-Feld. Der Text der SessionID wird in den folgenden Schritten als <v> verwendet.

          Schritt 2: Erstellen Sie eine virtuelle Ausgabe und transponieren Sie den SessionID-Text mit <v> in eine Zeichenkettenausgabe.

          Adresse


          Befehl für EIN
          Code:
          /api/menutree/read_datapoint.json?SessionId=<v>&Id=878
          HTTP-Antwort speichern
          Code:
          user/common/answer.xml

          Schritt 3: Erstellen Sie eine virtuelle Eingabe, die die Datei answer.xml abfragt -

          URL
          Code:
          http://username:password@MiniserverIP:Port/answer.xml
          Befehlserkennung
          Code:
          alue>\v
          Dies gibt die erste Instanz von Value in der xml zurück. Für andere Fälle von Wertnutzung

          z.B. 3. Instanz -
          Code:
          \ialue>\i\ialue>\i\ialue>\i\v
          Zuletzt geändert von Tico; 23.07.2019, 06:48.
          Ich spreche kein Deutsch. Gib Google Translate die Schuld, wenn ich unverständlich bin.

          Kommentar

          • G A
            Smart Home'r
            • 27.08.2015
            • 98

            #6
            Hallo Tico,

            vielen Dank für deinen Vorschlag. Leider komme ich schon bei der Befehlserkennung im ersten Schritt nicht weiter. Ich habe in der Befehlserkennung wie von dir vorgeschlagen diesen String eingetragen:

            <SessionId> \s0\1

            Klicke auf die Grafik für eine vergrößerte Ansicht

Name: SessionID-1.png
Ansichten: 1334
Größe: 12,8 KB
ID: 205340

            Das Ergebnis ist 406?

            Wenn ich den Befehl direkt im Browser eingebe, bekomme ich folgendes Ergebnis:

            Klicke auf die Grafik für eine vergrößerte Ansicht

Name: SessionID-2.png
Ansichten: 1302
Größe: 9,0 KB
ID: 205341
            Hast du eine Idee woher der Wert "406" kommt?

            LG,
            Günter


            Kommentar


            • Tico
              Tico kommentierte
              Kommentar bearbeiten
              Kannst du bitte mit der rechten Maustaste auf die Xml-Seite klicken und "Seitenquelle anzeigen" wählen?

              Kopieren und fügen Sie den Text um die SessionID aus dieser Ansicht ein.
          • G A
            Smart Home'r
            • 27.08.2015
            • 98

            #7
            Klicke auf die Grafik für eine vergrößerte Ansicht

Name: SessionID-3.png
Ansichten: 1322
Größe: 10,5 KB
ID: 205348

            Tut mir leid, aber ich weiß nicht wie man den Code hier richtig einfügt - daher wieder nur ein Screenshot.

            Kommentar


            • Tico
              Tico kommentierte
              Kommentar bearbeiten
              Versuchen Sie es ohne Leerzeichen -

              <SessionId>\s0\1

              (edited SessionID to small d...)

              should be <SessionId>\s0\1
              Zuletzt geändert von Tico; 01.07.2019, 09:16.
          • G A
            Smart Home'r
            • 27.08.2015
            • 98

            #8
            Kein Unterschied - Ausgang zeigt immer noch 406. Ich habe keine Ahnung was der Grund dafür ist...

            Kommentar

            • svethi
              Lebende Foren Legende
              • 25.08.2015
              • 6336

              #9
              Dir ist aber schon klar, dass Du das geänderte Programm in den MiniServer laden musst und mindestens die Zeit abwarten musst, die Du beim HTML Eingang als Abrufinterval eingestellt hast?!
              Miniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)

              Kommentar

              • G A
                Smart Home'r
                • 27.08.2015
                • 98

                #10
                Programm auf den Miniserver laden war mir klar - was aber anscheinend tatsächlich der Fall war, dass der Miniserver anscheinend nicht nach einem Neustart gleich die richtigen Werte anzeigt, sondern wie von Svethi vermutet erst nach Ablauf des eingestellten Abrufintervalls, welches ich auf 600 (sek) eingestellt hatte. Jetzt sieht die Sache schon viel besser aus:

                Klicke auf die Grafik für eine vergrößerte Ansicht

Name: SessionID-1.png
Ansichten: 1384
Größe: 161,4 KB
ID: 205445

                Sobald ich den von Tico beschriebenen nächsten Schritt fertig habe, werde ich mich wieder melden. Kann sein, dass ich vorher die SD Karte auch noch tauschen muss, weil mir der Server eine Nachricht mit "SD Karte verschlissen" angezeigt hat.

                Kommentar


                • Tico
                  Tico kommentierte
                  Kommentar bearbeiten
                  Beim Einrichten einer neuen Logik stelle ich das Abfrageintervall auf ein kurzes Intervall (z.B. 60 Sekunden oder weniger) ein.

                  Wenn die Logik nachgewiesen ist, setzen Sie das Abfrageintervall auf einen geeigneteren Wert zurück.

                  Besser ist es, zuerst die SD-Karte auszutauschen. Bei Verwendung der Funktion 'HTTP-Antwort speichern' wird mehr auf die SD-Karte geschrieben.
              • Tico
                Lox Guru
                • 31.08.2016
                • 1035

                #11
                Hast du irgendwelche Fortschritte gemacht? Ich habe einen Fehler in Beitrag #5 bemerkt.

                Die 'HTTP-Antwort speichern' sollte wie folgt lauten
                Code:
                user/common/answer.xml
                Der ursprüngliche Fehler hatte einen Schrägstrich vor dem Benutzer.
                Ich spreche kein Deutsch. Gib Google Translate die Schuld, wenn ich unverständlich bin.

                Kommentar

                • G A
                  Smart Home'r
                  • 27.08.2015
                  • 98

                  #12
                  Vielen Dank für den Hinweis. War durch die Integration meines neuen Doorbirds und dem Tausch der SD Karte von diesem Thema wieder etwas abgekommen...

                  Derzeitiger Stand:

                  Text der SessionID ist vorhanden, allerdings scheint es ein Problem beim Schreiben auf den Miniserver zu geben? Wenn ich "http://adminassword@IPMiniserver:PortMiniserver/answer.xml" direkt im Browser aufrufe, bekomme ich die Fehlermeldung 404 Nicht vorhanden bzw Not found je nach Browser.

                  So sieht das bei mir in der Config aus:

                  Klicke auf die Grafik für eine vergrößerte Ansicht

Name: Greenshot 2019-07-24 17.28.11.png
Ansichten: 1337
Größe: 18,4 KB
ID: 207435

                  Klicke auf die Grafik für eine vergrößerte Ansicht

Name: Greenshot 2019-07-24 17.20.40.png
Ansichten: 1285
Größe: 17,2 KB
ID: 207436

                  Passt das so?

                  Kommentar


                  • Tico
                    Tico kommentierte
                    Kommentar bearbeiten
                    Verwendung als Digitalausgang - nicht angehakt.
                • G A
                  Smart Home'r
                  • 27.08.2015
                  • 98

                  #13
                  Stimmt, danke! Diesen kleinen Haken übersieht man wirklich leicht. Leider hat das aber nicht den gewünschten Erfolg gebracht. Im Miniserver gibt es nach wie vor unter user/common keine Datei answer.xml...

                  Kann ich über den Loxone Monitor herausfinden ob der Befehl richtig gesendet wird und welche Antwort von der OZW kommt? Hab ich noch nie verwendet und weiß nicht genau wie das funktioniert.

                  Kommentar

                • Tico
                  Lox Guru
                  • 31.08.2016
                  • 1035

                  #14
                  Ich habe gerade einen anderen Fehler in deinem Beitrag #12 bemerkt.

                  Die Komponente 'http://192.168.178.90' sollte sich nicht im 'Befehl für EIN' befinden.

                  Dies gehört in das Feld Adresse. Ich stelle fest, dass sich diese IP-Adresse gegenüber früher in diesem Beitrag geändert hat. Dort hast du http://192.168.251.1 geschrieben. Siehe Beitrag #3.

                  Das erste Bild unten zeigt, was du brauchst. Stellen Sie das Abfrageintervall für die SessionId auf 60 Sekunden ein. Möglicherweise müssen Sie ~15 Minuten warten, bevor die Datei answer.xml geschrieben wird. Es sollte die Ausgabedatei nur bei einer Wertänderung in der SessionId schreiben.

                  Wenn das oben genannte nicht funktioniert, gibt es auch eine alternative Option, um den 'Befehl für EIN' in einem Statusblock zu erstellen. Dies funktioniert manchmal, wenn die erste Option fehlschlägt.

                  Siehe das zweite und dritte Bild unten.
                  Angehängte Dateien
                  Ich spreche kein Deutsch. Gib Google Translate die Schuld, wenn ich unverständlich bin.

                  Kommentar

                  • G A
                    Smart Home'r
                    • 27.08.2015
                    • 98

                    #15
                    Befehl und IP habe ich nun getrennt:

                    Klicke auf die Grafik für eine vergrößerte Ansicht

Name: Virtuell1.png
Ansichten: 1265
Größe: 23,2 KB
ID: 207941Klicke auf die Grafik für eine vergrößerte Ansicht

Name: Virtuell2.png
Ansichten: 1255
Größe: 12,0 KB
ID: 207942
                    Die IP 192.168.178.90 ist schon richtig = Siemens OZW, ich hatte nur im Beispiel eine allgemeine IP Adresse verwendet.

                    Hier ein Screenshot aus dem Monitor - für mich sieht das eigentlich gut aus, aber eine answer.xml finde ich am Miniserver trotzdem nicht. Ist laut Monitor das Schreiben der XML Datei erfolgreich?

                    Klicke auf die Grafik für eine vergrößerte Ansicht

Name: LoxMonitor.png
Ansichten: 1297
Größe: 89,7 KB
ID: 207940

                    Kommentar

                    Lädt...