Hauptmenü

HTTPMOD Login

Begonnen von holzwurm83, 28 Oktober 2017, 16:35:28

Vorheriges Thema - Nächstes Thema

holzwurm83

 ;D Jetzt sind wir drin!!!

2017.11.03 10:56:22 5: H2O_Anlage: ExtractSid called, context reading, num
2017.11.03 10:56:22 5: H2O_Anlage: CheckAuth is checking buffer with ReAuthRegex (class="login-item"|Bad Request)
2017.11.03 10:56:22 4: H2O_Anlage: CheckAuth decided no authentication required
2017.11.03 10:56:22 5: H2O_Anlage: Read starts parsing response to update with defined readings: 01,02,03,04
2017.11.03 10:56:22 5: H2O_Anlage: ExtractReading VerbrauchHeute with regex /<h1 id="water_today".*?>([\d]+)/...
2017.11.03 10:56:22 5: H2O_Anlage: 1 capture group(s), matchlist = 113
2017.11.03 10:56:22 4: H2O_Anlage: ExtractReading for reading01-1 sets VerbrauchHeute to 113
2017.11.03 10:56:22 5: H2O_Anlage: ExtractReading Tagesdurchschnitt with regex /<h1 id="water_avg".*?>([\d]+)/...
2017.11.03 10:56:22 5: H2O_Anlage: 1 capture group(s), matchlist = 359
2017.11.03 10:56:22 4: H2O_Anlage: ExtractReading for reading02-1 sets Tagesdurchschnitt to 359
2017.11.03 10:56:22 5: H2O_Anlage: ExtractReading Verfügbar with regex /<h1 id="water_avail".*?>([\d]+)/...
2017.11.03 10:56:22 5: H2O_Anlage: 1 capture group(s), matchlist = 1324
2017.11.03 10:56:22 4: H2O_Anlage: ExtractReading for reading03-1 sets Verfügbar to 1324
2017.11.03 10:56:22 5: H2O_Anlage: ExtractReading Salzstand with regex /<span class="irs-single".*?>([\d]+)/...
2017.11.03 10:56:22 5: H2O_Anlage: ExtractReading Salzstand did not match
2017.11.03 10:56:22 4: H2O_Anlage: Read response to update matched Reading(s) VerbrauchHeute Tagesdurchschnitt Verfügbar
2017.11.03 10:56:22 4: H2O_Anlage: Read response to update did not match Salzstand
2017.11.03 10:56:22 5: H2O_Anlage: HandleSendQueue called, qlen = 0


Das einzige Problem beim auslesen der Daten, was mir noch aufgefallen ist, dass die erst an etwa 5-10 sec nach dem Login von der Anlage abgeholt werden. Aktuell wird dann immer der alte Wert ausgelesen. Erst wenn ich mich selbst auf die Seite im Browser einloggen und kurz warte, werden die Werte neu geladen und dann auch wieder von fhem richtig ausgelesen. Können wir da noch eine Wartezeit einsetzten, oder so.

Ich komme auch noch mit diesen beiden Werten nicht zurecht wie ich sie auslesen soll?

<span class="irs-single" style="left: 45.56575%;">4</span>
<span id="device-info-saltDate">19.02.2018</span>
- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN

amenomade

ZitatErst wenn ich mich selbst auf die Seite im Browser einloggen und kurz warte, werden die Werte neu geladen und dann auch wieder von fhem richtig ausgelesen. Können wir da noch eine Wartezeit einsetzten, oder so.
Wenn diese Verzögerung zwischen Zähler und ecowater.com passiert, weiss ich nicht, wie es zu lösen. Vielleicht könnte man den HTTP Trafic vom Browser analysieren, und feststellen, was evtl. vom Browser ausgelöst wird, um ein Refresh zu zwingen. Da kann ich aber selbst nicht testen.

device-info-saltDate.*?>([\d\/\.]+) sollte gehen. (es kann sein, dass Fhem die Daten in einer andere Sprache holt, dann wird es nicht 19.02.2018 sondern 19/02/2018 sein... mal sehen.

Wegen irs-single, sehe ich die Daten in keinem Logauszug zum prüfen. Deine Regex sieht aber gut aus, wenn das genau ist wie du es geschrieben hast. Interessant wäre den Wert in der fhem Log zu finden. Vielleicht kannst Du die Regex zu kürzen:
irs-single".*?>([\d]+)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

holzwurm83

Wenn es nich anders geht könnte ich dir meine zugangsdaten einmal zukommen lassen, so dass du es mal testen kannst?
- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN

mazze2000

Hallo liebe Fhem´ler,
ich habe zu dem gleichen Thema eine Frage:
Und zwar möchte ich auch etwas auslesen auf einer Seite (myTischtennis), die ein Login verlangt.
Ich habe von einem Kollegen eine in Perl geschriebene Anmeldefunktion erhalten.
Diese Funktioniert auch, denn er nutzt diese Außerhalb von FHEM.

Wie kann ich eine in Perl geschriebene Funktion nun in fhem bzw HTPMOD einbinden?
Ich weiß von besagtem Kollegen, dass für den Login ein Cockie nachgebildet werden musste.
Ich habe selber leider wenig Ahnung =(

Hier die Login Funktion:
function login($url, $data)
   {
      $fp = fopen("cookie.txt", "w");
      fclose($fp);
      $login = curl_init();
      $cookiePath = dirname(__FILE__) . "\\cookie.txt";

      curl_setopt($login, CURLOPT_TIMEOUT, 4000000000);
      curl_setopt($login, CURLOPT_RETURNTRANSFER, TRUE);
      curl_setopt($login, CURLOPT_COOKIE, 'CFID=c7a592d8-5798-4471-9af4-4c4d954d03cd; cfid=c7a592d8-5798-4471-9af4-4c4d954d03cd; MYTT_COOKIESOK=1; CFTOKEN0=; cftoken=0; SRV=74');
      curl_setopt($login, CURLOPT_COOKIEFILE, $cookiePath);
      curl_setopt($login, CURLOPT_COOKIEJAR, $cookiePath);
      curl_setopt($login, CURLOPT_URL, $url);
      curl_setopt($login, CURLOPT_HTTPHEADER, array('Accept-Encoding: gzip'));
      curl_setopt($login, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17');
      curl_setopt($login, CURLOPT_FOLLOWLOCATION, 1);
      curl_setopt($login, CURLOPT_AUTOREFERER, true);
      curl_setopt($login, CURLOPT_POST, TRUE);
      curl_setopt($login, CURLOPT_POSTFIELDS, $data);
      curl_setopt($login, CURLOPT_VERBOSE, 1);
      ob_start();
      $curl_exec = curl_exec($login);
      ob_end_clean();
      $content = @gzdecode($curl_exec);
      return $content !== false ? $content : $curl_exec;
   }

Lg Matze

EinEinfach

ZitatWie kann ich eine in Perl geschriebene Funktion nun in fhem bzw HTPMOD einbinden?

Ich kann dir nur diesen WIKI-Artikel ans Herz legen:
https://wiki.fhem.de/wiki/HTTPMOD

Dort findest alles was der HTTPMOD-Modul kann, einschließlich wie man Log-In-Sequenzen erstellt bzw. Handling mit Cookies. Musst du einwenig fummeln bzw. mit Burp-Suite lauschen was dein Browser macht, aber ich denke komplett ohne PERL-Kentnisse bzw. dem Quellcode von deinem Kollegen lösbar.
fhem auf Intel NUC6CAYH mit Proxmox im LXC (Debian 10), KNX mit knxd über MDT SCN-IP000.02, Buderus GB192-15i über KM100, Solaredge WR SE9K über Modbus-TCP

mazze2000

Erstmal danke für deine Hinweise.

Wäre ja auch zu schön gewesen, einfach den Quellcode benutzen zu können.
Ich hatte ein wenig die Hoffnung, dass jemand anhand des Quellcodes die Anmeldeprozedur erkennen kann.

Die Seite die du mir geschickt hast, ist recht umfangreich. Dort stehen ja einige unterschiedliche Anmeldeprozeduren.
Kannst du mir ggf einen Tipp geben an welche ich mich halten muss?

Lg Matze

EinEinfach

Leider nicht, ich kenne die Seite nicht, wo die gewünschten Daten gespeichert sind. Aber wie gesagt, lausch erstmal mit burp-Suite was dein Browser während der Anmeldung macht, dann hast du schon mal einen Ansatz.
fhem auf Intel NUC6CAYH mit Proxmox im LXC (Debian 10), KNX mit knxd über MDT SCN-IP000.02, Buderus GB192-15i über KM100, Solaredge WR SE9K über Modbus-TCP

mazze2000

#22
Ok, mit Burp Suite konnte ich schonmal den Login beobachten...

Sehe ich das richtig, dass ich nun mit verschiedenen Readings versuchen muss die cfid und cookie id in Fhem einzulesen?
Das wäre doch jetzt mein erster Schritt oder?

Hier mein Auszug vom Login (mit Burp Suite abgefangen):

POST /community/login HTTP/1.1
Host: www.mytischtennis.de
Content-Type: application/x-www-form-urlencoded
Origin: https://www.mytischtennis.de
Accept-Encoding: gzip, deflate
Accept-Encoding: gzip, deflate
Cookie: ISPREMIUM=%248%5C%24%2CF0%20%20%0A;
LOGGEDINAS=Vorname%20Nachname;
INTANALYTICS=s=1510048001088&r=https%3A//www.mytischtennis.de/community/login;
SRV=82;
ISPREMIUM=%248%5C%24%2CF0%20%20%0A;
LOGGEDINAS=Vorname%20Nachname;
cfid=9e108b94-22c9-4e43-be02-669c47c52744;
cftoken=0;
__utma=74314254.1984056961.1473454699.1510046084.1510048518.145;
__utmb=74314254.1.10.1510048518;
__utmc=74314254;
__utmt=1;
__utmz=74314254.1496401155.113.28.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided);
__gads=ID=1fc611a5fd63261b:T=1473675881:S=ALNI_MYkBV2oNCHMZbzJCDrAa-rNkMrEzQ
Connection: close

userNameB=UserName&userPassWordB=Passwort


EinEinfach

Nein, das einlesen der Readings macht für dich HTTPMOD. Du solltest mit burp-Suite rausfinden welche POST bzw. GET-Requests (URL, Header und Daten) schickt dein Browser an die Seite. Diese verpackst du in die dazu vorgesehenen Attribute des HTTPMOD-Moduls.
fhem auf Intel NUC6CAYH mit Proxmox im LXC (Debian 10), KNX mit knxd über MDT SCN-IP000.02, Buderus GB192-15i über KM100, Solaredge WR SE9K über Modbus-TCP

mazze2000

Zitat von: EinEinfach am 07 November 2017, 11:33:28
Nein, das einlesen der Readings macht für dich HTTPMOD. Du solltest mit burp-Suite rausfinden welche POST bzw. GET-Requests (URL, Header und Daten) schickt dein Browser an die Seite. Diese verpackst du in die dazu vorgesehenen Attribute des HTTPMOD-Moduls.
Also ist das was ich bislang von Burp Suits erhalten habe nicht brauchbar?
Mehr erhalte ich leider nicht, da die Anmeldung nicht komplett durch läuft solange der Proxy eingeschaltet ist.

mazze2000

#25
Ok also ich habe das jetzt mal ein wenig mit dem Beispiel aus diesem Thread verglichen...
Folgendes habe ich jetzt in FHEM angelegt:


Internals
BUSY 0
CFGFN CHANGED
DEF https://www.mytischtennis.de/community/ 60
Interval 60
LASTSEND 1510054242.72836
MainURL https://www.mytischtennis.de/community/
ModuleVersion 3.4.0 - 9.9.2017
NAME myTischtennis
NR 87525
STATE ???
TRIGGERTIME 1510054302.71991
TRIGGERTIME_FMT 2017-11-07 12:31:42
TYPE HTTPMOD
addr https://www.mytischtennis.de:443
buf
code 200
conn
data
displayurl https://www.mytischtennis.de/community/
header Cookie: $sid
host www.mytischtennis.de
httpheader HTTP/1.1 200 OK Content-Type: text/html;charset=UTF-8 Content-Language: de-DE Server: Microsoft-IIS/7.5 Content-Length: 0 Accept-Ranges: bytes Date: Tue, 07 Nov 2017 11:30:43 GMT X-Varnish: 1556939965 Age: 0 Via: 1.1 varnish Connection: close X-Cache: Miss Set-Cookie: SRV=82; path=/
httpversion 1.0
hu_blocking 0
hu_filecount 85
hu_port 443
hu_portSfx
ignoreredirects 0
loglevel 4
path /community/
protocol
https
redirects 0
timeout 2
url https://www.mytischtennis.de/community/
value 0

Attributes
clearSIdBeforeAuth 1
disable 0
reAuthRegex (class="login-item"|Bad Request)
requestHeader1 Cookie: $sid
sid01IdRegex (cfid[^;\n]+)
sid02Data userNameB=MeinUser& userPassWordB=MeinPasswort&Remember=false
sid02IdRegex Cookie: ([^\n]+)
sidURL https://www.mytischtennis.de/community/
userattr requestHeader1 requestHeader2 sid01Data sid01Header1 sid01IdRegex sid01IgnoreRedirects:0,1 sid01URL sid02Data sid02Header1 sid02IdRegex sid02URL sidURL
verbose 5


Im Log von FHEM erhalte ich:
2017.11.07 12:24:28 4: https://www.mytischtennis.de/community/: HTTP response code 200
2017.11.07 12:24:28 4: HttpUtils https://www.mytischtennis.de/community/: Got data, length: 0
2017.11.07 12:24:28 5: HttpUtils response header:
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Language: de-DE
Server: Microsoft-IIS/7.5
Content-Length: 0
Accept-Ranges: bytes
Date: Tue, 07 Nov 2017 11:24:28 GMT
X-Varnish: 1556930775
Age: 0
Via: 1.1 varnish
Connection: close
X-Cache: Miss
Set-Cookie: SRV=82; path=/
2017.11.07 12:24:28 4: myTischtennis: Read callback: request type was update retry 0,
Header: HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Language: de-DE
Server: Microsoft-IIS/7.5
Content-Length: 0
Accept-Ranges: bytes
Date: Tue, 07 Nov 2017 11:24:28 GMT
X-Varnish: 1556930775
Age: 0
Via: 1.1 varnish
Connection: close
X-Cache: Miss
Set-Cookie: SRV=82; path=/, body empty
2017.11.07 12:24:28 5: myTischtennis: ExtractSid called, context reading, num
2017.11.07 12:24:28 5: myTischtennis: CheckAuth is checking buffer with ReAuthRegex (class="login-item"|Bad Request)
2017.11.07 12:24:28 4: myTischtennis: CheckAuth decided no authentication required
2017.11.07 12:24:28 5: myTischtennis: Read starts parsing response to update with defined readings:
2017.11.07 12:24:28 3: myTischtennis: Read response to update didn't match any Reading
2017.11.07 12:24:28 5: myTischtennis: HandleSendQueue called, qlen = 0

amenomade

Zitat von: holzwurm83 am 03 November 2017, 18:43:06
Wenn es nich anders geht könnte ich dir meine zugangsdaten einmal zukommen lassen, so dass du es mal testen kannst?

Sorry, hatte das Thema vergessen. Dank mazze aber wieder gefunden.
Ja, sowas kannst Du ruhig machen.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

mazze2000

Zitat von: amenomade am 07 November 2017, 12:32:21
Sorry, hatte das Thema vergessen. Dank mazze aber wieder gefunden.
Ja, sowas kannst Du ruhig machen.
Immer wieder gerne  ;D ;D

amenomade

@mazze2000: m.A. brauchst Du für diese Seite dieses komplizierten Verfahern mit requestHeaders sid01IdRegex & Co nicht. Die built-in Funktion sid/cookie sollte reichen.

Du musst nur in reAuthRegex etwas vernünftiges haben, das feststellen kann, dass ein login benötigt ist
und enableCookie 1 setzen.
und natürlich die richtige sid01Data Daten geben.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

mazze2000

Ok...
Danke für die Hinweise.
So ganz ohne Beispiel ist es schwierig, wenn man nicht 100% verstanden hat was man hier tut.  ;D

Also nehme ich jetzt
requestHeader1 Cookie: $sid
sid01IdRegex (cfid[^;\n]+)
sid02IdRegex Cookie: ([^\n]+)
clearSIdBeforeAuth 1
disable 0

alles wieder raus?

Wie kann ich denn feststellen dass ein Login benötigt wird?  :o