FHEM Forum

FHEM - Hausautomations-Systeme => Unterstützende Dienste => Thema gestartet von: hauwech am 21 Februar 2024, 15:40:49

Titel: Verständnisproblem mit HTTPMOD/RegEx - PV-Daten einer ECU-C von APSystems
Beitrag von: hauwech am 21 Februar 2024, 15:40:49
Hallo zusammen,
ich komme irgendwie nicht weiter... Ich beschreibe mal kurz das Szenario.
Ich habe an meiner PV Anlage 7 Wechselrichter mit jeweils 2 Solarpaneln (APSystems DS3S). Die werden mit einer ECU-C von APSystems verwaltet. Ich habe bis jetzt die Werte der einzelnen Module mit dem APSystems Adapter von IOBroker aus der ECU-C ausgelesen und per MQTT an fhem gepublished. Es gibt aber ein Problem, für das ich bisher noch keine Informationen finden konnte. Die Datenschnittstelle der ECU-C steigt sporadisch immer wieder aus. Das macht sich bemerkbar, daß die Werte der IOBroker Datenpunkte nicht mehr aktualisiert werden. Das kann nach drei Tagen passieren, es kann aber auch mal sieben Tage funktionieren, es ist kein Muster erkennbar. Bis ich das jeweils bemerkt habe, ist die Statistik schon versaut. Die Datenlieferung läßt sich nur wieder in Gang setzen, indem man die ECU-C ausschaltet und wieder einschaltet. Das Webinterface der ECU-C ist aber trotzdem durchgängig verfügbar und aktualisiert auch die Werte der Solarmodule. Das hat mich auf die Idee gebracht, den Umweg über IOBroker zu umgehen und die Werte vom Webinterface mit HTTPMOD auszulesen. Damit habe ich aber keine Erfahrung und mit Regex habe ich bisher auch nur einfache Sachen gemacht. Wenn ich den HTML Quelltext der ECU-C Seite (http://ecu/index.php/realtimedata) anschaue, sehe ich die Daten aus der Tabelle (das ist nur ein Auszug des relevanten Teils):
. . .
<div class="table-responsive">
  <div>
            </div><div>
            </div><div>
            </div><div>
            </div><div>
            </div><div>
            </div><div>
            </div><table class="table table-condensed table-bordered">
    <thead>
      <tr>
        <th scope="col">Inverter ID</th>
        <th scope="col">Current Power</th>
        <th scope="col">DC Voltage</th>
        <th scope="col">Grid Frequency</th>
        <th scope="col">Grid Voltage</th>
        <th scope="col">Temperature</th>
        <th scope="col">Reporting Time</th>
      </tr>
    </thead>
    <tbody>
        <tr class="active">
        <td>702000290924-1 </td>
        <td> 17 W </td>
        <td> 40 V </td>
        <td rowspan="2" style="vertical-align: middle;"> 50.0 Hz </td>
        <td> 231 V </td>
        <td rowspan="2" style="vertical-align: middle;"> 18 °C </td>
        <td rowspan="2" style="vertical-align: middle;"> 2024-02-21 09:27:14
 </td>
      </tr>
            <tr class="active">
        <td>702000290924-2 </td>
        <td> 17 W </td>
        <td> 41 V </td>
        <td> 231 V </td>
      </tr>
         
        <tr>
        <td>702000294979-1 </td>
        <td> 18 W </td>
        <td> 41 V </td>
        <td rowspan="2" style="vertical-align: middle;"> 50.0 Hz </td>
        <td> 231 V </td>
        <td rowspan="2" style="vertical-align: middle;"> 18 °C </td>
        <td rowspan="2" style="vertical-align: middle;"> 2024-02-21 09:27:14
 </td>
      </tr>
            <tr>
        <td>702000294979-2 </td>
        <td> 17 W </td>
        <td> 42 V </td>
        <td> 231 V </td>
      </tr>
         
        <tr class="active">
        <td>702000326333-1 </td>
        <td> 18 W </td>
        <td> 42 V </td>
        <td rowspan="2" style="vertical-align: middle;"> 50.0 Hz </td>
        <td> 232 V </td>
        <td rowspan="2" style="vertical-align: middle;"> 18 °C </td>
        <td rowspan="2" style="vertical-align: middle;"> 2024-02-21 09:27:14
 </td>
      </tr>
            <tr class="active">
        <td>702000326333-2 </td>
        <td> 17 W </td>
        <td> 42 V </td>
        <td> 232 V </td>
      </tr>
         
        <tr>
        <td>702000333482-1 </td>
        <td> 19 W </td>
        <td> 41 V </td>
        <td rowspan="2" style="vertical-align: middle;"> 50.0 Hz </td>
        <td> 228 V </td>
        <td rowspan="2" style="vertical-align: middle;"> 18 °C </td>
        <td rowspan="2" style="vertical-align: middle;"> 2024-02-21 09:27:14
 </td>
      </tr>
            <tr>
        <td>702000333482-2 </td>
        <td> 17 W </td>
        <td> 42 V </td>
        <td> 228 V </td>
      </tr>
         
        <tr class="active">
        <td>702000300734-1 </td>
        <td> 18 W </td>
        <td> 41 V </td>
        <td rowspan="2" style="vertical-align: middle;"> 50.0 Hz </td>
        <td> 229 V </td>
        <td rowspan="2" style="vertical-align: middle;"> 19 °C </td>
        <td rowspan="2" style="vertical-align: middle;"> 2024-02-21 09:27:14
 </td>
      </tr>
            <tr class="active">
        <td>702000300734-2 </td>
        <td> 17 W </td>
        <td> 41 V </td>
        <td> 229 V </td>
      </tr>
         
        <tr>
        <td>702000301355-1 </td>
        <td> 18 W </td>
        <td> 41 V </td>
        <td rowspan="2" style="vertical-align: middle;"> 50.0 Hz </td>
        <td> 228 V </td>
        <td rowspan="2" style="vertical-align: middle;"> 18 °C </td>
        <td rowspan="2" style="vertical-align: middle;"> 2024-02-21 09:27:14
 </td>
      </tr>
            <tr>
        <td>702000301355-2 </td>
        <td> 18 W </td>
        <td> 41 V </td>
        <td> 228 V </td>
      </tr>
         
        <tr class="active">
        <td>702000297477-1 </td>
        <td> 17 W </td>
        <td> 41 V </td>
        <td rowspan="2" style="vertical-align: middle;"> 50.0 Hz </td>
        <td> 231 V </td>
        <td rowspan="2" style="vertical-align: middle;"> 18 °C </td>
        <td rowspan="2" style="vertical-align: middle;"> 2024-02-21 09:27:14
 </td>
      </tr>
            <tr class="active">
        <td>702000297477-2 </td>
        <td> 18 W </td>
        <td> 41 V </td>
        <td> 231 V </td>
      </tr>
         
        </tbody>
  </table>

Interessant sind hier die Inverter-ID, Current Power, DC Voltage und vielleicht noch Temperatur und Timestamp.
Ich habe aber keine Idee, wie ich das mit Regex in HTTPMOD so formulieren kann, daß am Ende sinnvolle key-value Paare als Readings rauskommen. Vielleicht hat sich jemand schon mal den Kopf zerbrochen und kann mir auf die Sprünge helfen.

Gruß Roland
Titel: Aw: Verständnisproblem mit HTTPMOD/RegEx - PV-Daten einer ECU-C von APSystems
Beitrag von: betateilchen am 21 Februar 2024, 17:36:45
Wenn es eine einigermaßen klar strukturierte Tabelle ist, würde ich sowas überhaupt nicht über HTTPMOD machen, sondern mir eine eigene Funktion in meiner 99_myUtils.pm bauen. Dafür kann man dann eine der hervorragenden perl-Libraries verwenden, um Tabellen auf html-Seiten auszuwerten.

Das geht dann erfahrungsgemäß sehr viel schneller und einfacher als in HTTPMOD.
Titel: Aw: Verständnisproblem mit HTTPMOD/RegEx - PV-Daten einer ECU-C von APSystems
Beitrag von: hauwech am 22 Februar 2024, 09:26:57
Danke, gute Idee. Dann werde ich mir mal anschauen, wie ich das zu Fuß parsen kann.

Gruß Roland