Ankündigung

Einklappen
Keine Ankündigung bisher.

[gelöst] Heizungssteuerung auslesen mit HTTP-Binding

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

    [gelöst] Heizungssteuerung auslesen mit HTTP-Binding

    Hallo zusammen,

    ich habe ein kleines Problem mit Openhab 1.7. Ich habe als Heizungssteuerung eine UVR 1611 mit einem Datenlogger BL-NET. Im BL-Net kann man eine Webseite hinterlegen auf der die aktuellen Messwerte der Senoren dargestellt werden. Nun dachte ich mir, das man mit dem http-binding und ein paar regulären Ausdrücken das auslesen könnte. Funktionieren wird das warscheinlich, nur stelle ich mich warscheinlich zu dumm an.

    Der Quelltest der Webseite sieht so aus:
    HTML-Code:
    Warmwasser: 40,7 <br>
    Puffer1 o.: 56,4 <br>
    Puffer1 m.: 44,0 <br>
    Puffer1 u.: 34,3 <br>
    Mein Eintrag in der test.item Datei lautet:
    Code:
    String  Warmwasser      "Warmwasser [%.0f C]"   <temperature>   { http="<[http://192.168.0.2/GRAFIK1.html:5000:REGEX((Warmwasser:.)([0-9]+,[0-9]+))]" }
    Theoretisch sollte da folgendes bei rauskommen:

    Code:
    Warmwasser: 40,7
    kommt es aber nicht, erschreibt alle Werte aus der Webseite auf meine Openhab Menüseite. Könnte jemand mir mal bitte helfen? Schön wäre es wenn zum Schluss nur die Temperatur ausgelesen werden würde.

    Danke.
    Zuletzt geändert von buster; 07.06.2015, 19:33.

    #2
    Ich habs, der Knoten hat sich gelößt. Man muss seinen regulären Ausdruck so bauen das die benötigten werde im ersten Subpattern landen.

    hier meine Lösung
    Code:
    (Warmwasser:.?([0-9]+,[0-9]).* <br>)

    Kommentar


      #3
      Hallo
      Ich versuche auch vergeblich die Daten aus meiner UVR ( mit CMI) aus der Webseite auszulesen. Ich hab auch das obere Coding schon probiert. hat leider nicht funktioniert.Schön wäre, wenn man die Seite irgendwie debuggen könnte um zu sehen, wie falsch man liegt :-)
      Kann mir jemand einen Tipp geben, wie ich das Problem am einfachsten lösen kann.
      Wie gesagt, ich hab schon alles mögliche probiert, in dem ich auf die interne Webseite von meiner UVR ( über das CMI Module) gehe und über das Cosing versucht habem ,it REGEX einen bestimmten Teil rauszuzwicken.
      Wäre für jede Hilfe dankbar

      mfg
      Stefan

      Kommentar


        #4
        Das Herantasten an den korrekten REGEX ist eigentlich ganz einfach:

        Schritt 1: ein String Item mit dem http-Binding anlegen, Beschriftung "Ergebnis: [%s]"
        Schritt 2: Das Item anzeigen lassen und nachschauen, welchen Inhalt es hat. Den REGEX anpassen, bis der gesuchte Wert der einzige Inhalt des Items ist.
        Schritt 3: Das String Item in ein Number Item ändern (sofern es sich um einen Zahlenwert handelt, den man vielleicht auch als Zahlenwert verarbeiten möchte)

        Alternativ kann man auch eine Rule bauen, die per logInfo("Logger",Item.state.toString) den Iteminhalt ins Log schreibt, dann kann man auf der Kommandozeile nachschauen, was da geparst wurde.

        Kommentar


          #5
          Hi
          Voerst Danke für deine rasche Hilfe, aber ich brauche da noch etwas Starthilfe.
          Ich hab im openhab.cfg ein binding eingerichtet, das auf eine meiner Onlineschena ( Nr 4) der Heizungssteuerung geht:
          http:cmi4-cache.url=http://userasswort:admin@10.0.0.100:8080/schema.html#4
          http:cmi4-cache.updateInterval=60000

          Als zweites hab ich bei den Items folgenden Eintrag gemacht:
          string ErgebnisCMI4 "Ergebnis [%s]" { http="<[cmi4-cache:30000:REGEX(.*)]" }

          Als drittes hab ich in der Sitemap einen Text eingefügt und mit dem Item verbunden.

          Nachdem ich da ein kompletter Neuling bin wäre ich über die Hilfe sehr dankbar. Ich hab ds so ähnlich bei meinem Wechselrichter gemacht ( natürlich auch nur so zusammenkopert, Da funktioniert es wunderbar.
          Danke

          Kommentar


            #6
            Das erste ist, dass die REGEX so aussehen muss: REGEX((.*)) die äußeren Klammern gehören zur Funktion, die inneren Klammern beinhalten den Teil, der als Rückgabewert dienen soll. Der Punkt ist ein beliebiges Zeichen, der Stern bedeutet 0 bis n Wiederholungen des Vorgängers, also in diesem Fall beliebig viele beliebige Zeichen. Da bekommst Du dann den kompletten html-Cache-Inhalt. Um auf einen bestimmten Teil zu matchen, muss die REGEX dann so aussehen: REGEX(eindeutiger Text unmittelbar vor dem gesuchten Wert(.*)eindeutiger Text unmittelbar nach dem gesuchten Wert) Wobei Du dann mit .*irgendwas(.*)irgendwas.* die REGEX kürzer gestalten kannst.

            Das zweite ist, dass die URL hinten mit #4 aufhört, das ist ein Verweis innerhalb eines html-Dokuments, nützt in diesem Fall aber nichts, kannst Du also weglassen (ich hab keine Ahnung, ob das Vorhandensein die Cachefunktion beeinträchtigt).

            Das dritte ist, dass Du unterschiedliche update-Intervalle definiert hast, was vermutlich nicht schlimm ist, aber auch keinen Vorteil bringt. Wenn Du den html-Cache nutzt, kannst Du die Zugriffsfrequenz in der item-Definition also auf den gleichen Interval einstellen (60000 statt 30000).

            Kommentar


              #7
              Hi
              Danke für die sehr detailierte Beschreibung.
              Ich hab jetzt im openhab.cfg das Caching rausgenommen und mac es direkt im ITEMS.
              Das sieht jetzt so aus:
              string ErgebnisCMI4 "Ergebnis [%s]" <energy> (KG_Solar) { http="<[http://admin:admin@10.0.0.100:8080/schema.html:60000:REGEX(.'Raum(.*)tur.*)]" }

              in der Hoffnung dass ich aus dem Wort testweise nur -tempera- rauszuschneiden
              Nachdem nichts rausgekommen ist hab ich mit strg & shift & i das debugging eingeschalten. Hat nicht viel gebraucht, ausser dass folgenden Fehlermeldung daherkommt.
              Soweit ich mich erinnere hab ich die vorher auch schon gesehen

              TypeError: Cannot read property 'id' of null
              at _SS (http://10.0.0.62:8083/WebApp/Action/Logic.js:174:76)
              at http://10.0.0.62:8083/WebApp/Action/Logic.js:164:67
              at _UU (http://10.0.0.62:8083/WebApp/Action/Logic.js:187:108)
              at XMLHttpRequest.c (http://10.0.0.62:8083/WebApp/Action/Logic.js:17:169)

              Sorry für die Umstände.. :-(

              Kommentar


                #8
                Hast Du da einen Tippfehler?
                Code:
                ...REGEX(.[COLOR=#FF0000]'[/COLOR]Raum(.*)tur.*)...
                Oder ist das nur bei der Übernahme ins Forum passiert?

                Kommentar


                  #9
                  Hi
                  Da brauchts nur ein Hochkomma ? . Hab ich schon so drinnen
                  60000:REGEX(.'Raum(.*)tur.*)]" --> passt das nicht ?

                  Kommentar


                    #10
                    Nein, das Hochkomma gehört da nicht hin... Stattdessen ein Sternchen...

                    Kommentar


                      #11
                      Hi
                      Ich kämpfe immer noch.... :-(
                      Ich hab jetzt versucht, die Daten aus dem File in den "schematic files" auszulesen. Da gibt es die CGI Files in denen auch die Werte drin stehen.

                      Sind eigentlich auch als Webseite verfügbar:
                      Die Adresse lautet z.Bsp. http://admin:admin@10.0.0.100:8080/s...ic_files/4.cgi
                      Kennst du die Files ?

                      Kommentar


                        #12
                        In dem CGI File kommen die Daten ungefähr so raus. Kannst du mir bitte helfen, wie ich hier am besten die 21,3 rausschneide. Die Daten werden auch so in drei Zeilen dargestellt:
                        <div id="pos3">
                        Raumtemperatur :
                        21,3 °C </div>

                        Mein letzter Versuch war : REGEX(.*Raumtemperatur : .*?([0-9\\.]*)°C.*)]" }
                        danke

                        Kommentar


                          #13
                          Es kommt in dem Fall wohl drauf an, welche Steuerzeichen für den Zeilenumbruch verwendet werden, <CR> oder <CR><LF>, und wie die in der REGEX aussehen müssten. zum Herantasten würde ich sowas probieren: REGEX(.*Raumtemperatur....([0-9]+.[0-9]).°C.*)
                          Wenn dann die erste Stelle der Temperatur fehlt, machst Du einen Punkt vornedran weg.
                          Vermutlich kann die Temperatur auch negative Werte annehmen, da müsste man nochmal überlegen. Fies wäre es auch, wenn die Nachkommastelle bei einem Nullwert weg fiele, aber auch das kann man sicher abfangen.

                          EDIT: hab grad festgestellt, dass . nicht auf linefeeds matcht, also wäre ein \n oder \r an der Stelle besser. beliebige Zahlen (mit beliebig vielen Kommata drin) sollten auch so beschreibbar sein: [0-9,]+ wobei ich nicht sicher bin, wie weit die Regular Expressions in openHAB definiert sind. Ich bin da schon über verschiedene Fallen gestolpert...
                          Zuletzt geändert von udo1toni; 29.12.2015, 21:32.

                          Kommentar


                            #14
                            Funktioniert leider noch nicht..:-(
                            Ich hab ein Screenshot dazugehängt.
                            Wie sollte der REGEX aussehen, wenn ich nur ein zwei Buchstaben aus einem Wort ausschneiden will.
                            Ich vermute nämlich, dass ich von der Seite so nichts zurückbekomme.
                            Würde REGEX(.*Raum(.*)eratur.*) - so ungefähr passen ? soltle dann "temp" rauskommen, oder ?
                            Oder kann ich nur gesamte Teile zwischen den < und > rausschneiden ?
                            Angehängte Dateien

                            Kommentar


                              #15
                              • Hi
                              • Ich bin im Debugging Modus noch auf folgdendes gestossen.
                              • Ist dann nur LF, oder ?
                              • hidden: false
                              • id: "pos3"
                              • innerHTML: "↵Raumtemperatur :↵ 21,3 °C "
                              • innerText: "Raumtemperatur : 21,3 °C"
                              • isContentEditable: false

                              Kommentar

                              Lädt...
                              X