Ankündigung

Einklappen

ETS5 Sammelbestellung Vollversion

Infos unter: Link
Mehr anzeigen
Weniger anzeigen

Plugin für die Grünbeck Softliq brauch eure Hilfe

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

    Plugin für die Grünbeck Softliq brauch eure Hilfe

    Hi erstmal an alle die das lesen, ich habe mein SHNG soweit mit allem in meine Haus erfolgreich mit eurer Hilfe verbunden (KNX, OW, VBUS...) und werte alle Daten super in der SmartVISU aus.
    Nur die Wasserenthärtungsanlage macht mir seit paar Wochen graue Haare, ich blicks einfach nicht wie ich POST Requests an sie absetze und die Response in ein Item schreiben kann. Ich habe ein Tipp bekommen, es so zu machen wie es im Tankerkoenig plugin in Zeile 66 ist, ne simple url aufrufen. Keine Chance ich gib auf.

    So jetzt meine Frage, würde vlt jemand ein Plugin für mich schreiben, wär sogar bereit was zu zahlen (spenden)!.

    Anbei die freigegebene Doku von Grünbeck, Ihr müsst auch nicht alle Datenpunkte ein pflegen, das kann ich dann schon übernehmen. Nur z.B. den (D_Y_1~) ist der Verbrauch gestern.

    Wär cool wenn sich jemand melden würde!

    PS: sorry ich hoffe es ist nicht illegal für eure Arbeit Geld anzubieten!



    Angehängte Dateien

    #2
    Ich versuche grad über eine Logic die Grünbeck Anlage auszulesen über requests.
    Meine Logik:

    import requests


    payload = {'id': '961', 'show': 'D_Y_1~'}
    r = requests.get('http://100.100.0.31/mux_http/', params=payload)
    if r.status_code == 200:
    sh.Wasserverbrauch.verbrauch_gestern(15)


    er setzt den Wert auf 15 ist schon mal super. Aber wie bekomme ich den Respons Wert D_Y_1~ auf das Item geschrieben?

    Sorry ich hab keine Ahnung von Python!

    Kommentar


      #3
      das hier kommt zurück im Body:

      <data><code>ok</code>
      <D_Y_1>30</D_Y_1></data>

      Kommentar


        #4
        Du bekommst von dem Device ein XML Dokument zurück. Das musst Du parsen. Dazu gibt es Bibliotheken für Python. Das ist aber eher nichts für jemand der sich nicht in Python auskennt.

        Falls Du immer nur die Antwort bekommst, wie Du sie beschrieben hast, kannst Du mit reinem String Handling an die Sache rangehen. Da das Device jedoch eine XML Antwork liefert, wird sich der Inhalt der Response vermutlich auch ändern. Dann müsstest Du das XML sauber parsen.
        Zuletzt geändert von Msinn; 13.05.2020, 14:28.
        Viele Grüße
        Martin

        There is no cloud. It's only someone else's computer.

        Kommentar


          #5
          Ah ok, danke für die Rückmeldung.

          Es kommt immer die selbe Antwort bis auf die Zahl natürlich!

          Hättest du mir ein Tipp wo ich nachkucken kann wegen dem String Handling in der Logic?

          Kommentar


            #6
            Wenn Du den Body einem String (im Beispiel s) zuweist:
            Code:
            s = '<data><code>ok</code><D_Y_1>30</D_Y_1></data>'
            wert = s[s.find('<D_Y_1>')+7:s.find('</D_Y_1>')]
            wert enthält dann '30'
            Zuletzt geändert von bmx; 13.05.2020, 16:06.
            Viele Grüße
            Martin

            There is no cloud. It's only someone else's computer.

            Kommentar


              #7
              Sorry aber wo soll ich den String hinzufügen in meiner Logic?

              Die Body Ausgabe bekomm ich mit Postman (APP) wenn ich die Anlage auslese.

              Kommentar


                #8
                Laut Anleitung s.o. kannst Du alle Parameter die Dich interessieren mit einem | verketten. Als Ergebnis bekommst Du ein xml wie schon erkannt.
                Es gibt ein Python Package wie lxml mit dem kannst Du die zurückgemeldeten Daten parsen (https://lxml.de) Alternativ geht auch Beautifulsoup4

                Als Ansatz kannst Du damit zunächst in einer Logik arbeiten. Es ist schwierig ohne Python Kenntnisse direkt fehlerfrei Logiken zu schreiben. Daher kannst Du Dir mal das Plugin Executor anschalten über die Admin Gui. Dort kannst Du im zweiten Tab Python Code testen.
                Dort funktioniert sowas wie print("Hallo SmartHomeNG").
                Entsprechend kannst Du dort auch

                Code:
                import requests
                
                
                payload = {'id': '961', 'show': 'D_Y_1~'}
                r = requests.get('http://100.100.0.31/mux_http/', params=payload)
                
                if r.status_code == 200:
                    # r mit lxml analysieren und Werte festsellen
                    print("Analysiere...")
                    wert = r[r.find('<D_Y_1>')+7:r.find('</D_Y_1>')]
                    sh.Wasserverbrauch.verbrauch_gestern(float(wert))

                Kommentar


                  #9
                  Danke sowas wie den Executor ist sehr hilfreich, Danke! ich hab jetzt das Ixml installiert, kannst du mir ein Beispiel nennen wie ich in der Logic weiter komm zum analysieren?
                  Code:
                  import requests
                  import lxml
                  
                  payload = {'id': '961', 'show': 'D_Y_1~'}
                  r = requests.get('http://100.100.0.31/mux_http/', params=payload)
                  
                  if r.status_code == 200:
                      # r mit lxml analysieren und Werte festsellen
                      print("Analysiere...")
                      wert = r[r.find('<D_Y_1>')+7:r.find('</D_Y_1>')]
                      sh.Wasserverbrauch.verbrauch_gestern(float(wert))
                  Zuletzt geändert von bmx; 14.05.2020, 08:47.

                  Kommentar


                    #10
                    Auf jeden Fall solltest Du bei Deinen weiteren Postings das korrekte Einfügen beachten. Ich habe das oben mal gerade gezogen.

                    Mach doch mal ein print(r) und poste das Ergebnis, dann können wir uns da rantasten.
                    Zuletzt geändert von bmx; 14.05.2020, 08:49.

                    Kommentar


                      #11
                      Sorry muss das noch üben.
                      Code:
                      import requests
                      import lxml
                      from bs4 import BeautifulSoup
                      
                      
                      payload = {'id': '961', 'show': 'D_Y_1~'}
                      r = requests.get('http://100.100.0.31/mux_http/', params=payload)
                      
                      if r.status_code == 200:
                      # r mit lxml analysieren und Werte festsellen
                      print("Analysiere...")
                      response = requests.get(r)
                      wert = response[response.find('<D_Y_1>')+7:response.find('</D_Y_1>')]
                      sh.Wasserverbrauch.verbrauch_gestern(float(wert))
                      print(r)
                      Code:
                      Analysiere...
                      Error 'Invalid URL '<Response [200]>': No schema supplied. Perhaps you meant http://<Response [200]>?' while evaluating​​​​​​

                      Kommentar


                        #12
                        Das bs4 brauchst Du eigentlich nicht. Ich fürchte es wird eine Art stochern im Nebel. Aber schau mal in den Thread hier im Loxone Forum. Dort gibt es einige Hinweise, die Dich vielleicht weiterbringen. Ansonsten frühestens am Wochenende ...

                        Kommentar


                          #13
                          Ist nicht das
                          response = requests.get(r) falsch?
                          oben machts du dich schon r=requests.get()

                          Unten müsste es dann heissen request= r.text oder r.json .... Je nach gewünschtem format

                          Kommentar


                            #14
                            Ich hab jetzt mal was anderes bebaut:
                            Code:
                            import requests
                            
                            
                            
                            r = requests.post('http://100.100.0.31/mux_http/', data ={'id': '961', 'show': 'D_Y_1~'})
                            
                            print(r)
                            print(r.text)
                            Jetzt bekomme ich wenigstens ne Antwort:
                            Code:
                            <Response [200]>
                            <data><code>ok</code><D_Y_1>229</D_Y_1></data>
                            Soweit so gut, aber wie bekomme ich den Wert 229 jetzt ausgefiltert und in mein Item geschrieben? Muss ich es parsen oder gibts da keine einfachere Lösung?

                            Danke im Voraus!

                            Kommentar


                              #15
                              Mit import re bekomme ich wenigstens die Buchstaben weg!
                              Code:
                              import requests
                              import re
                              
                              r = requests.post('http://100.100.0.31/mux_http/', data ={'id': '961', 'show': 'D_Y_1~'})
                              
                              
                              text = r.text
                              zahl = re.findall(r'[+-]?\d+[,.]?\d*', text)
                              print(zahl)
                              
                              wert= r.text
                              
                              print(r.content)
                              
                              print(r)
                              print(r.text)
                              print(wert)
                              Code:
                              ['1', '56', '1']
                              b'<data><code>ok</code><D_Y_1>56</D_Y_1></data>'
                              <Response [200]>
                              <data><code>ok</code><D_Y_1>56</D_Y_1></data>
                              <data><code>ok</code><D_Y_1>56</D_Y_1></data>
                              Aber leider hab ich beim der ID vom Wert auch ne Zahl!!

                              Kommentar

                              Lädt...
                              X