Ankündigung

Einklappen
Keine Ankündigung bisher.

Auslesen Photon Datenlogger

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

    Auslesen Photon Datenlogger

    Hallo,
    ich würde gerne meinen Photon-Datenlogger auslesen.
    Strahlung und Temperatur.

    http://192.168.115.197/cgi-bin/menu.cgi?mode=data

    Wie geh ich da am besten ran?

    Dank Euch

    #2
    Spontan würde ich mal sagen, nutze das http bindig, um die Werte abzufragen. Dannach z.B. eine xsl transform, um den entsprechenden Wert aus dem Dokument zu parsen. Es gibt einige Beispile für Wetterdaten hierzu. So wird z.B. bei die Temp. von einer Website abgefragt.

    Photon gibt es ja nicht mehr und eine neue Lösung wäre sicher nicht schlecht - z.B. den Wecheslrichter direkt abfragen etc.

    Kommentar


      #3
      Die Frage ist ja, willst Du genau einen Wert abfragen (bzw. genau zwei Werte in zwei items einlesen) oder ganze Datenreihen?

      Für letzteres wäre ein php-Script wohl besser, welches die Daten vom Logger holt und dann z.B. in eine Datenbank ablegt. Wenn man das geforderte Format einhält, könnte man es mit etwas Gefummel vermutlich auch schaffen, dass diese Daten anschließend in openHAB sichtbar werden. Ich lese so täglich die Logs aus meinem Fronius Wechselrichter aus - grafische Aufbereitung habe ich allerdings noch nicht implementiert

      Für die erste Variante müsste man halt schauen, wie die Daten angeboten werden und entsprechend parsen.

      Kommentar


        #4
        Also mir würden mal die 2 Werte Temperatur und Strahlung reichen. Hab leider mit dem Http-Binding keinen Plan wie ich da an die Daten kommen soll.
        Kann mir da jemand aufs Pferd helfen ;-)

        Bildschirmfoto 2016-03-24 um 06.54.38.png

        Kommentar


          #5
          Da wäre die ausgelieferte Seite natürlich hilfreicher als ein Snapshot der Browseransicht
          Grundsätzlich ist das aber kein Hexenwerk. Da beide Werte aus demselben Code extrahiert werden sollen, bietet es sich an, die Seite zu cachen, also in der openhab.cfg beim http-Binding zwei Zeilen einzufügen: (aus dem Kopf, bitte das Beispiel in der openhab.cfg anschauen)

          Code:
          http:photon.url=http://ip.zum.photon.control/pfad/zur/seite
          http:photon.updateInterval=60000
          Dann in .items
          Code:
          Number Photon_Temp  {http="<[photon:30000:REGEX(.*temp>(.*)<blah.*)]"}
          Number Photon_Power {http="<[photon:30000:REGEX(.*feed>(.*)<blah.*)]"}
          Wobei die Zeichen vor dem Ausdruck (.*) die letzten eindeutigen Zeichen vor dem eigentlichen Wert sind und die dahinter eben entsprechend der Teil nach dem Wert. REGEX übergibt also an das Item das, was innerhalb der inneren Klammern steht und lässt alles andere weg.
          REGEX ergänzt den Ausdruck in den Klammern und arbeitet dann mit diesem Ausdruck: ^Ausdruck_in_der_Klammer$ was bedeutet, dass der Ausdruck in der äußeren Klammer immer auf den Gesamten Cache-Inhalt matchen muss. Ansonsten verhält es sich weitgehend wie andere Regex-Implementationen, Spezialitäten wie Selbstreferenzierung und dergleichen sollte man nicht als gegeben voraussetzen
          Die Kunst besteht darin, die einleitenden und ausleitenden Zeichen zu finden und passend im REGEX-Ausdruck einzubauen...
          Zuletzt geändert von udo1toni; 24.03.2016, 16:38.

          Kommentar


            #6
            Das wäre die Seite.....


            2016-03-25 00:17:12.865 [INFO ] [runtime.busevents ] - Aussentemperatur state updated to <HTML><HEAD><TITLE>Menu</TITLE>

            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></meta>
            <meta http-equiv="Content-Language" content="de"></meta>
            <link rel="stylesheet" type="text/css" href="/style.css"></link>
            <title>PhotonControl Menu</title>
            </head>
            <body>
            <table border="0">
            <tr>
            <td><a href="http://www.photon-control.net"><img src="/PhotonContr.gif" border="0" alt="www.photon-control.net" width="142" height="41"></img></a></td>
            </tr>
            </table>
            <hr />
            <table border="0" summary="">
            <br><br>
            <tr>
            <td style="width:250px" align="left" valign="top">
            <a href="/cgi-bin/menu.cgi?mode=data">Show Current Data</a><br><br>
            <a href="/cgi-bin/menu.cgi?mode=system">System Configuration</a><br><br>
            <a href="/cgi-bin/menu.cgi?mode=meter">Meter Configuration</a><br><br>
            <a href="/cgi-bin/menu.cgi?mode=reboot">System Reboot</a><br><br>
            </td>
            <td align="left" valign="top">
            <form action="/cgi-bin/menu.cgi" method="get">
            <table border="0" summary="">
            <input type="hidden" name="mode" value="data"><table border="0"><tr><td>Current Data ( all view only )</td></tr></table><br><br><table border="0">
            <tr><td>Feed-in (kWh):</td><td><input type="text" size="15" value="00076774.80" readonly></td> </tr>
            <tr><td>Consumption (kWh):</td><td><input type="text" size="15" value="00000000.00" readonly></td> </tr>
            <tr><td>Irradiation 1 (W/m?) (Global):</td><td><input type="text" size="15" value="0.0" readonly></td> </tr>
            <tr><td>Irradiation 2 (W/m?) (Modul):</td><td><input type="text" size="15" value="N/A" readonly></td> </tr>
            <tr><td>Temperature 1 (?C) (Air):</td><td><input type="text" size="15" value="5.5" readonly></td> </tr>
            <tr><td>Temperature 2 (?C) (Modul):</td><td><input type="text" size="15" value="N/A" readonly></td> </tr>
            <tr><td>Date, Time:</td><td><input type="text" size="18" value="24.03.2016, 23:16:41" readonly></td> </tr>
            <tr><td>Last Data on Server:</td><td><input type="text" size="18" value="N/A" readonly></td> </tr>
            <tr><td>Last Data Transfer:</td><td><input type="text" size="18" value="N/A" readonly></td> </tr>
            <tr><td>Datalogger Version:</td><td><input type="text" size="18" value="2.4.019.005" readonly></td> </tr>
            </table><br>
            <table><tr><td>
            <input type="submit" value=" Refresh ">
            </td></tr>
            </table>
            </form>
            </BODY></HTML>

            Kommentar


              #7
              Ist immer eine Herausforderung aber für Feed-in würde ich damit anfangen:
              Code:
              REGEX(.*Feed-in.*value=.([0-9]*.[0-9][0-9]).*)
              Er soll also im cache eine Stelle suchen, die mit Feed-in anfängt und mit einer Zahl beliebiger Länge mit zwei Nachkommastellen aufhört. (da bleibt nur eine Teil-Zeile übrig, in der der nächste Suchbegriff eindeutig ist) In diesem Teilstring soll er den Teilstring nach value= in den State des Items übernehmen, und zwar ohne die " (deshalb der . vor der Klammer - der steht für ein beliebiges Zeichen).
              Falls das nicht auf Anhieb funktioniert, kannst Du das Ziel-Item erstmal als String definieren um sicher zu sehen, was er denn als Match liefert. dann bietet es sich an, den Ausdruck innerhalb der inneren Klammern so allgemein wie möglich zu formulieren, also (.*) (eine beliebig lange Zeichenkette aus beliebigen Zeichen) und dafür noch einen Teilstring nach der Zahl zu nutzen, z.B. das Wort Consumption aus der nächsten Zeile.

              Für die Temperatur verfährst Du entsprechend, da ist es dann aber nur eine Nachkommastelle. Aufpassen muss man natürlich bei Zahlen, die auch negativ werden können, dann muss man das vielleicht vorkommende Minuszeichen mit in den Klammern integrieren, mit -? ( Minus darf null- oder einmal vorkommen), sonst matchen negative Zahlen nicht oder werden vielleicht ohne Vorzeichen übernommen.

              Kommentar


                #8
                Dank Dir, so hats geklappt:
                /* Temperatur Photonlogger */
                Number Aussentemperatur "Temperatur [%.0f C°]" <inverter> { http="<[photon-logger-cache:30000:REGEX(.*.*Temperature.*value=.(-?[0-9]*.[0-9]).*)]" }

                Kommentar


                  #9
                  Super! wobei .*.* im wahrsten Sinne doppelt gemoppelt ist, das sollte so reichen .*

                  Kommentar


                    #10
                    muss doch zurückrudern ;-( es wird mir das Datum angezeigt.
                    <tr><td>Date, Time:</td><td><input type="text" size="18" value="24.03.2016, 23:16:41" readonly></td> </tr>
                    Dachte es sind 2,4 ° .....
                    Beim Rumprobieren hab ich dann nur noch die Datalogger Version raus bekommen....
                    <tr><td>Datalogger Version:</td><td><input type="text" size="18" value="2.4.019.005" readonly></td> </tr>


                    Laut http://www.regextester.com sollte die Obige Zeile super funktionieren.... Aber Ich bekomme einfach nicht die Temperatur übertragen.

                    Kommentar


                      #11
                      Das Problem könnte sein, dass der Match nicht eineindeutig ist. versuch mal
                      Code:
                      (.*Air....td..td..input type..text. size..15. value..(-?[0-9]*\.[0-9]).*)

                      Kommentar


                        #12
                        Danke für den Tipp:
                        so gehts jetzt: /* Temperatur Photonlogger */
                        Number Aussentemperatur "Temperatur [%.1f C°]" <inverter> { http="<[photon-logger-cache:30000:REGEX(.*Air....td..td..input type..text. size..15. *value=.(-?[0-9]*.[0-9.]).*)]" }

                        Kommentar

                        Lädt...
                        X