Ankündigung

Einklappen
Keine Ankündigung bisher.

Siemens WebServer OZW772-KNX / OZS164-LPB

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

    #31
    Laut der Übersicht müßte es bei mir ein LMS14 sein. Da hilft dann nur probieren, oder?

    https://github.com/fredlcore/bsb_lan...r/README_de.md

    Kommentar


      #32
      Also bei mir klappt es jetzt mit dem Brötje OZW672 (Software Version 7) und der Brötje WGB 15 E. Ich kann alle Daten auf einer Website darstellen und mit dem HS abfragen. Eine Cloud Anmeldung ist NICHT erforderlich. Nettes Spielzeug für die Visualisierung
      Zuletzt geändert von knxhans; 07.06.2018, 12:51.

      Kommentar


        #33
        Habe mir auch einen OZW672.01 stellt (Version 8.0) und möchte ihn an meine Brötje WGB Evo 15 H anschliessen. Scheint ein Siemens LMS 15 Regel sein.

        Kann man den Server an die vorderseitige 4-polige Wartungsschnittstelle neben dem Display anschließen?

        Mir ist auch nicht ganz klar, warum der Server jeweils 2 Anschlüsse für DB/CL+ bzw. MB/CL- hat.

        Wie habt Ihr den Server angeschlossen?

        Dacke schonmal für Eure Hilfe!

        Kommentar


          #34
          Zitat von knxhans Beitrag anzeigen
          Also bei mir klappt es jetzt mit dem Brötje OZW672 (Software Version 7) und der Brötje WGB 15 E. Ich kann alle Daten auf einer Website darstellen und mit dem HS abfragen. Eine Cloud Anmeldung ist NICHT erforderlich. Nettes Spielzeug für die Visualisierung
          Sorry, wenn ich den alten Thread hier wieder raus krame.
          Ich hab eine CTA Erdwärmepumpe mit Siemens-Regler und dem OZW672 im Haus.
          Zudem den Gira HS.

          Kann mir jemand einen kurzen Tipp geben, wie ich jetzt die Werte in den HS bekomme bzw. die Abfragen schreiben muss? Insbesondere mit der Session-ID, die ja immer nur wenige Minuten gültig ist.

          Zugang über die IP-Adresse/Web-Frontend des OZW funktioniert. Dort kann ich auch alle Werte lesen/schreiben.

          Würde aber gerne ein paar Diagramme sowie Werte im HS erstellen...

          Gruß Daniel

          Kommentar


            #35
            Moin,

            Zitat von Pieczkowski Beitrag anzeigen

            Kann mir jemand einen kurzen Tipp geben, wie ich jetzt die Werte in den HS bekomme bzw. die Abfragen schreiben muss? Insbesondere mit der Session-ID, die ja immer nur wenige Minuten gültig ist.
            hier habe ich meine Infos für SmarthomeNG (Python & Bash Script) her:

            https://community.home-assistant.io/...r-ozw672/27467

            https://forum.fhem.de/index.php?topic=32866.0


            Lösung via Bash
            Code:
            #login
            id=$(curl -k -sb -H "Accept: application/json" "http://therme/api/auth/login.json?user=USERXXX&pwd=passXXXX"
            
            #read
            curl -k -sb -H "Accept: application/json" "http://therme/api/menutree/read_datapoint.json?SessionId=$id&Id=563"
            
            #write
            curl -k -sb -H "Accept: application/json" "http://therme/api/menutree/write_datapoint.json?SessionId=$id&Id=563&Type=Enumeration&Value=0"
            
            #logout
            curl -k -sb -H "Accept: application/json" "http://therme/api/auth/logout.json?SessionId="$id
            Also zusammenfassend:
            • Login: $id = SessionId als Login in Sequenz abholen und in eine Variable schreiben
            • Read / Write: Ein oder mehrere Datenpunkte lesen oder schreiben
            • Logout: Session wieder beenden
            Ähnliches habe ich mit Python realisiert mit Hilfe dieser Anleitung

            https://www.nylas.com/blog/use-python-requests-module-rest-apis/

            Lösung via Python:
            Code:
            import requests
            import json
            
            mgmt_username = 'userXXXX'
            mgmt_password = 'passXXX'
            mgmt_server = '192.168.178.111'
            write_api ='/api/menutree/'
            write_command = 'write_datapoint.json?' #SessionId, Id,
            read_api ='/api/menutree/'
            read_command = 'read_datapoint.json?' #SessionId, Id, Type, Value ##&Type=Enumeration&Value=0
            login_api = '/api/auth/'
            login_command = 'login.json?' #user, pwd
            logout_command = 'logout.json?'
            sid_key = 'SessionId='
            
            
            def api_call2(ip_addr, port, command, myparams):
            url = 'http://' + ip_addr + ':' + str(port) + command
            request_headers = {'Content-Type' : 'application/json'}
            myresult=""
            try:
            r = requests.get(url, headers=request_headers, verify=False, params=myparams)
            r.raise_for_status()
            myresult = r.json()
            except requests.exceptions.HTTPError as errh:
            print(errh)
            except requests.exceptions.ConnectionError as errc:
            print(errc)
            except requests.exceptions.Timeout as errt:
            print(errt)
            except requests.exceptions.RequestException as err:
            print(err)
            
            return myresult
            
            
            def login(user,password):
            payload = {'user':user, 'pwd' : password}
            response = api_call2(mgmt_server, 80, login_api+'login.json', payload)
            bsuccess = True
            if response['Result']['Success'] == 'false':
            bsuccess = False
            print("Error while login-procedure: "+response['Result']['Error']['Txt'])
            return response["SessionId"], bsuccess
            
            def logout(sid):
            payload = {'SessionId':sid}
            response = api_call2(mgmt_server, 80, login_api+'logout.json', payload)
            bsuccess = True
            if response['Result']['Success'] == 'false':
            bsuccess = False
            print("Error logout-procedure: "+response['Result']['Error']['Txt'])
            return bsuccess
            
            def read_id(sid,id):
            payload = {'SessionId':sid, "Id":str(id)}
            response = api_call2(mgmt_server, 80, read_api + "read_datapoint.json", payload)
            bsuccess = True
            if response['Result']['Success'] == 'false':
            bsuccess = False
            print("Error while reading ID="+str(id)+": "+response['Result']['Error']['Txt'])
            return response, bsuccess
            
            def write_id(sid,id,mtype,value):
            payload = {'SessionId':sid, 'Id':id, 'Type':mtype, 'Value':value}
            response = api_call2(mgmt_server, 80, write_api + 'write_datapoint.json', payload)
            bsuccess = True
            if response['Result']['Success'] == 'false':
            bsuccess = False
            print("Error while writing ID="+str(id)+": "+response['Result']['Error']['Txt'])
            return response, bsuccess
            
            
            if __name__ == '__main__':
            sid ,bsuccess= login(mgmt_username,mgmt_password)
            #print("session id: " + sid)
            
            # test for wrong id
            #sid2='d4ee1cc8-036e-4d8b-a896-b594a80c0333'
            #id=10
            id=563
            resp,bresult=read_id(sid,id)
            print(" result: " + json.dumps(resp))
            
            write_value=0
            resp, bresult = write_id(sid, id,'Enumeration',write_value)
            print(" result: " + json.dumps(resp))
            
            resp,bresult=read_id(sid,id)
            print(" result: " + json.dumps(resp))
            
            bsuccess=logout(sid)
            if bsuccess == True:
            print('INfo: Logout good :-)')
            oder hier als Smarthome Plug-in "Quick & Dirty": https://knx-user-forum.de/forum/supp...ozw-gas-therme

            ... leider kann ich Dir bei der HS Syntax nicht helfen aber eine generelles Vorgehen bei einer REST-API wie hier für Python gibt es vielleicht im Forum bzgl für HS Fragen.

            Ich hoffe das hilft Dir weiter :-)
            Zuletzt geändert von KHome; 12.05.2022, 22:37.

            Kommentar


              #36
              Danke dir KHome für den Input.

              Ich denke damit kann ich was anfange und testen.

              Die LBS im Gira HS sind ja auch Python, wenn ich das mal richtig auf geschnappt hab. Vielleicht lässt sich das irgendwie verbinden bzw. sogar ein separater LBS bauen, der die Funktionalität übernimmt. Werde mich da wohl mal etwas tiefer einlesen müssen.

              Kommentar


                #37
                Das mit dem JSON und der Session ID klappt bei mir, allerdings bekomme ich beim READ der Datenpunkt immer einen "read failed".

                Da ich nirgends eine wirklich API Doku zu dem OZW finden konnte: Sind die IDs die Nummern in der Anlage beim OZW, also Außentemperatur bei mir die Id=8700?

                Code:
                https://192.168.9.162/api/menutree/read_datapoint.json?SessionId=bfef09eb-9f04-4387-acc9-c3de89b2fea2&Id=8700
                Bildschirmfoto 2022-07-11 um 11.41.56.png

                Danke!


                EDIT - habe es hin bekommen, mann muß sich bei der Abfrage an die IDs langhangeln. Also hier Id=1621 setzen und dann immer so weiter, bis man beim Wert ist.

                Code:
                https://192.168.9.162/api/menutree/read_datapoint.json?SessionId=bfef09eb-9f04-4387-acc9-c3de89b2fea2&Id=1621
                Bildschirmfoto 2022-07-11 um 11.40.18.png
                Angehängte Dateien
                Zuletzt geändert von knxhans; 11.07.2022, 10:50.

                Kommentar


                  #38
                  Für die Nachwelt anbei, funktioniert jetzt mit dem HS einwandfrei.

                  Angehängte Dateien

                  Kommentar


                    #39
                    Hallo Hans und alle die hier mitlesen,

                    ich hab den ganzen Abend jetzt versucht, auch endlich mal die Abfragen umzusetzen.

                    Hab dazu auch unter IP-Geräte die Abfrage "SessionID" und zum testen zwei Parameter-Abfrage erstellt (1:1 deiner Screenshots)

                    In einer Sequenz hab ich dann die "SessionID" als erstes und mit 1 Sek. Verzögerung die zwei weiteren Parameter hinterlegt. Aufruf der Sequenz per Button im QC und Ausgabe der drei KOs (SessionID + 2 Werte) entsprechend darunter.

                    Abruf der SessionID funktioniert. Allerdings die folgenden Abfrage nicht!
                    Leider kann man die SessionIDs nicht testen, da diese wohl an das Gerät gebunden sind. (getestet, da die URL z.b. auf dem Laptop geht, aber 1:1 kopiert auf einem anderen Rechner nicht! ==> session not valid)

                    Hab ich irgendetwas übersehen?

                    Laut Debug-Seite bleiben die beiden Abfragen im 3 Schritt (=Schreiben in das KO) hängen!
                    ==> (Gesamt: 4) (Work: 2) (Typ: Liste) (OK: 0)

                    Wie hast du die KOs angelegt, die den Wert speichern sollen? (hab hier auch schon 14-Byte, etc. versucht)
                    Bzw. wie löst du den Abruf der Werte aus? Auch mit einer Sequenz?

                    Gruß und gute Nacht!


                    PS: Noch ein Hinweis, der hier evtl. erwähnt sein sollte, damit man sich nicht durch die IDs "hangeln" muss.
                    Einfach das Webfrontend aufrufen und dann den Quelltext anzeigen lassen. Dort steht dann z.b. für 8700 Außentemperatur bei mir "<div style="display:inline" id="dp2258"> 12.9</div>​. Entsprechend ist die ID dann die 2258 und nicht die 8700! (sonst kommt es zu besagtem "read error"

                    Kommentar


                      #40
                      Ich nutze zum Auslesen BSB Lan
                      Gruß Pierre

                      Mein Bau: Sanierung

                      DIY-Bastelprojekte: KNX-Statusdisplay/|\KNX-Tankmonitor(Füllstandsamessung)

                      Kommentar


                        #41
                        Also ich hole die SessionID und wie in den Abbildungen schreibe ich die in ein iKO welches ich dann bei der Abfrage der Werte mit sende. Das klappt bei mir reibungslos. Ich prüfe immer vor jeder Abfrage, ob die vorhergehende erfolgreich ausgeführt wurde (also auch, ob die SessionID erfolgreich geholt wurde.

                        Anbei mal meine Logik dazu.

                        Vielleicht parst du die SessionID nicht korrekt? Was sagen die Werte am Baustein im Logikeditor, wenn du oben auf "Play" drückst?
                        Angehängte Dateien

                        Kommentar


                          #42
                          Hallo knxhans,

                          danke für deine Antwort. Ich benutze gar keine Logikblatt für diesen Fall. Sondern ich habe in einer Sequenz als erstes den Schritt "SessionID holen" hinterlegt, dann mit 1 Sek. Wartezeit (bzw. auch schon höhere Werte bis 10 Sek. probiert) erfolgt der Abruf der weiteren Parameter.

                          Die SessionID wird auch richtig "geholt" und wenn man auf der Debug-Seite schaut, ist der 2. bzw. folgende URL-Aufruf richtig, daher die SessionID wird korrekt eingesetzt (hab es wie du genau so mit dem {}-Platzhalter gemacht.)
                          Deswegen wundert es mich ja so! 😕

                          Leider ist von deiner Logik der Scrennshot nicht dabei, oder?

                          Anbei noch ein paar Screenshots von meiner Konf.

                          MasterOfPuppets:
                          Danke für dein Tipp, aber in zusätzliche Hardware zu investieren, wenn alles nötige vorhanden ist, versuch ich zu vermeiden.


                          Gruß Daniel
                          Angehängte Dateien

                          Kommentar


                            #43
                            Ich baue mir die Sequenz deswegen im Logikeditor, weil man dort im Live-Log sehen kann, welche Werte bei jedem Baustein hinten raus kommen und die Sequenz nur weiter geht, wenn die vorhergehende Abfrage erfolgreich war.

                            Die Debüt Seite ist leider nicht so detailliert. Vielleicht ist die SessionID nicht wirklich korrekt geparst? Bei mir am LBS JSON-Parser sieht man das korrekt, bei deiner Sequenz ja nicht.

                            Was zeigt der Wert 100/2/1 bei dir im knx-monitor für einen Wert an?
                            Angehängte Dateien
                            Zuletzt geändert von knxhans; 04.07.2023, 13:09.

                            Kommentar


                              #44
                              Hallo Hans,

                              das macht Sinn, auch wenn es etwas aufwendiger ist. Aber die Debug-Seite ist in dem Punkt wirklich nicht sehr hilfreich.

                              Wobei die SessionID wie gesagt richtig im iKO ankommt und z.b. im QuadClient angezeigt wird.
                              Auch das einsetzen in den Aufruf klappt. Zumindest sehe ich kein Fehler, werde aber hier auch mal auf HEX-Ebene prüfen.
                              Ich hatte auch erst vermutet, dass z.b. der Datentyp das Problem ist. Hab aber auch schon alles durch getestet.
                              Welchen Datentyp für das Kommunikationsobjekt hast du z.b. für die Temperatur ausgewählt?

                              Ich werde hier morgen Abend noch mal testen und auch mal die zwei Parameter + SessionID testweise über die Logik abbilden.

                              Danke schon mal für deine Anteilnahme an meinem Problem!

                              Kommentar


                                #45
                                Gerne, wie gesagt, ich habe auch lange gebraucht, um das mit der SessionID hin zu bekommen, die richtig zu formatieren. Das wird auch bei dir das Problem sein.

                                Schritt 1: JSON SessionID holen -> iKO 101/3/39 (14Byte Text) bei mir (der Wert muß aber noch gestrippt werden)
                                Schritt 2: aus iKO 101/3/39 JSON Formatierung entfernen -> iKO 101/3/40
                                Schritt 3: iKO 101/3/40 (14Byte Text) dann in die URL der Abfrage

                                Anbei nochmal paar Screenshots dazu.
                                Angehängte Dateien

                                Kommentar

                                Lädt...
                                X