FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Guzzi-Charlie am 24 Februar 2021, 14:43:16

Titel: Daten von Website auslesen mit HTTPMOD klappt nicht
Beitrag von: Guzzi-Charlie am 24 Februar 2021, 14:43:16
Ich habe mich mal wieder mit meinem alten Problem beschäftigt um die Daten von meinem Photovoltaik-Datenlogger auszulesen. Der Logger hat ein Web-IF wo ich die gewünschten Daten auch aufrufen kann.

So sieht die Oberfläche des Web-IF aus:
==> Img01
und so die blanken Werte (die ich gerne verarbeiten möchte):
==> Img02
Ich habe folgendes HTTPMOD angelegt:
defmod PV_ML22_G5 HTTPMOD http://xxx:xxx@192.168.178.155/ecmd?s0kwh 20
attr PV_ML22_G5 userattr reading01Name reading01Regex
attr PV_ML22_G5 group PV-Wechselrichter G5
attr PV_ML22_G5 reading01Name Produktion
attr PV_ML22_G5 reading01Regex .*
attr PV_ML22_G5 room Energieproduktion


setstate PV_ML22_G5 2021-02-24 14:15:30 Produktion 1



Als Ergebnis bekomme ich aber nur eine "1". Ich habe schon verschiedenes experimentiert, komme aber zu keinem brauchbaren Ergebnis.


Die Daten im Modul sehen so aus:
==> Img03
Nicht von dem falschen Datum verwirren lassen. Der Web-Server des Loggers läuft auf einem falschen Datum.



Wenn ich beim Attribut "reading01Regex" z.B. "(.{30})" eintrage dann bekomme ich als Ergebnis einen Teil oder max. die ganze Zeile vom httpheader und zwar "Date: Tue, 09 Feb 2021 14:06:24 GMT"


Ich habe ein paar weitere HTTPMOD's im Einsatz die auch funktionieren, aber bei diesem hab ich keinen Plan. Wie man sicher sieht habe ich auch nicht wirklich Ahnung von diesem Modul. Meine Erwartungshaltung war eigentlich das es ja nicht so kompliziert sein kann vier einfache Zeilen einzulesen wo doch sonst nichts anderes auf der Website ausgegeben wird. Offensichtlich habe ich mich da allerdings schwer getäuscht.


Wäre schön wenn mir Jemand helfen könnte.
Titel: Antw:Daten von Website auslesen mit HTTPMOD klappt nicht
Beitrag von: ch.eick am 26 Februar 2021, 19:29:59
Hallo Guzzi-Charlie
im Img003 kann man erkennen, das dort eine Session Aufgebaut wird und auch ein user verwendet wird.
Davon kann man in Deinem PV_ML22_G5 Device nichts sehen.
Du müsstest schon alle wichtigen Schritte, die der Browser durchführt, nachbauen.

Hier mal ein gekürztes Beispiel aus einer HTTPMOD Abfrage einer Batterie, mit wahrscheinlich ähnlicher Anmeldung.
Das ist nicht getestet und nur etwas auf Dich angepasst, da es am Anfang sicherlich etwas viel ist ;-)

Dann fehlt bei Deiner Anfrage das Logfile, aber bitte nur die Meldungen zu diesem Device und als .txt File hochladen! Nicht in den Post kopieren!

attr PV_ML22_G5 showBody 1
attr PV_ML22_G5 showError 1
attr PV_ML22_G5 verbose 5

attr PV_ML22_G5 handleRedirects 1
attr PV_ML22_G5 httpVersion 1.1

attr PV_ML22_G5 getHeader01 Authorization: Digest username="admin", realm="%auth_realm%", nonce="%auth_nonce%", uri="/ecmd?s0kwh", algorithm="MD5", response="%auth_response%", opaque="%auth_opaque%", qop="auth", nc="00000001", cnonce="d789ea5b7e9a2377"

attr PV_ML22_G5 reAuthRegex Unauthorized          <<<< hier im Log Nachschauen, welche Meldung bei fehlendem Login kommt

attr PV_ML22_G5 reading01Name auth_qop
attr PV_ML22_G5 reading01Regex qop="(.*)", nonce
attr PV_ML22_G5 reading02Name auth_nonce
attr PV_ML22_G5 reading02Regex nonce="(.*)", opaque
attr PV_ML22_G5 reading03Name auth_opaque
attr PV_ML22_G5 reading03Regex opaque="(.*)",algorithm
attr PV_ML22_G5 reading04Name auth_realm
attr PV_ML22_G5 reading04Regex realm="(.*)", domain

attr PV_ML22_G5 replacement03Mode reading
attr PV_ML22_G5 replacement03Regex %auth_realm%
attr PV_ML22_G5 replacement03Value auth_realm
attr PV_ML22_G5 replacement04Mode reading
attr PV_ML22_G5 replacement04Regex %auth_nonce%
attr PV_ML22_G5 replacement04Value auth_nonce
attr PV_ML22_G5 replacement05Mode reading
attr PV_ML22_G5 replacement05Regex %auth_opaque%
attr PV_ML22_G5 replacement05Value auth_opaque

attr PV_ML22_G5 replacement06Mode expression
attr PV_ML22_G5 replacement06Regex %auth_response%
attr PV_ML22_G5 replacement06Value {my $NAME="PV_ML22_G5";;my $pw=<Das Passwort>;; md5_hex(md5_hex("installer:".ReadingsVal($NAME,"auth_realm","").":".$pw).":".ReadingsVal($NAME,"auth_nonce","").":00000001:d789ea5b7e9a2377:".ReadingsVal($NAME,"auth_qop","").":".md5_hex("GET:/ecmd?s0kwh"));;}


attr PV_ML22_G5 sid01URL http://192.168.178.155//ecmd?s0kwh
attr PV_ML22_G5 sid01Header Authorization: Digest username="admin", realm="%auth_realm%", nonce="%auth_nonce%", uri="/ecmd?s0kwh", algorithm="MD5", response="%auth_response%", opaque="%auth_opaque%", qop="auth", nc="00000001", cnonce="d789ea5b7e9a2377"
attr PV_ML22_G5 sid01ParseResponse 1


Im Device sollten dann solche Readings entstehen.

auth_nonce 110638533446ab4cb08cd1ff3dc88f14
auth_opaque 5ccc069c403ebaf9f0171e9517f40e41
auth_qop auth
auth_realm BoxServer


Ob das einfacher geht, kann ich Dir nicht sagen, aber einen Versuch wäre es wert.

Gruß
    Christian
Titel: Antw:Daten von Website auslesen mit HTTPMOD klappt nicht
Beitrag von: Guzzi-Charlie am 28 Februar 2021, 12:45:01
Hallo Christian,

Danke erstmal für Deine Hilfestellung. Ich muß mal schauen ob ich Heute dazu komme das mal zu testen. Hab gerade ein anderes Problem. Seit Gestern sind alle USB-Sticks (JeeLink, HM-IP, RS485) am RasPi verschwunden. Bin gerade da dran das zu fixen.