Hauptmenü

HTTPMOD Login

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

Vorheriges Thema - Nächstes Thema

amenomade

probier mal einfach mit:

   enableCookies 1
   reAuthRegex community/login
   sid01Data  userNameB=deinUserName&userPassWordB=deinPasswort
   sid01URL   https://www.mytischtennis.de/community/login
   verbose    5

und der Rest weg.
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

Habe mal ein neues Device dafür angelegt:
Folgenden Logeintrag erhalte ich nun:

2017.11.07 13:05:07 4: myTischtennis2: GetUpdate called (update)
2017.11.07 13:05:07 4: myTischtennis2: update timer modified: will call GetUpdate in 60.0 seconds at 2017-11-07 13:06:07
2017.11.07 13:05:07 4: myTischtennis2: AddToQueue adds update, initial queue len: 0
2017.11.07 13:05:07 5: myTischtennis2: AddToQueue adds type update to URL https://www.mytischtennis.de/community/, no data, no headers, retry 0
2017.11.07 13:05:07 5: myTischtennis2: HandleSendQueue called, qlen = 1
2017.11.07 13:05:07 5: myTischtennis2: HandleSendQueue is adding Cookies: SRV=81
2017.11.07 13:05:07 4: myTischtennis2: HandleSendQueue sends request type update to URL https://www.mytischtennis.de/community/, No Data,
header: Cookie: SRV=81,
timeout 2
2017.11.07 13:05:07 4: HttpUtils url=https://www.mytischtennis.de/community/
2017.11.07 13:05:07 5: HttpUtils request header:
GET /community/ HTTP/1.0
Host: www.mytischtennis.de
User-Agent: fhem
Cookie: SRV=81
Content-Length: 0
Content-Type: application/x-www-form-urlencoded

2017.11.07 13:05:07 4: https://www.mytischtennis.de/community/: HTTP response code 200
2017.11.07 13:05:07 4: HttpUtils https://www.mytischtennis.de/community/: Got data, length: 0
2017.11.07 13:05:07 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 12:05:07 GMT
X-Varnish: 778708016
Age: 0
Via: 1.1 varnish
Connection: close
X-Cache: Miss
2017.11.07 13:05:07 4: myTischtennis2: 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 12:05:07 GMT
X-Varnish: 778708016
Age: 0
Via: 1.1 varnish
Connection: close
X-Cache: Miss, body empty
2017.11.07 13:05:07 5: myTischtennis2: looking for Cookies in 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 12:05:07 GMT
X-Varnish: 778708016
Age: 0
Via: 1.1 varnish
Connection: close
X-Cache: Miss
2017.11.07 13:05:07 5: myTischtennis2: ExtractSid called, context reading, num
2017.11.07 13:05:07 5: myTischtennis2: CheckAuth is checking buffer with ReAuthRegex community/login
2017.11.07 13:05:07 4: myTischtennis2: CheckAuth decided no authentication required
2017.11.07 13:05:07 5: myTischtennis2: Read starts parsing response to update with defined readings:
2017.11.07 13:05:07 3: myTischtennis2: Read response to update didn't match any Reading
2017.11.07 13:05:07 5: myTischtennis2: HandleSendQueue called, qlen = 0


Ich muss doch jetzt aber noch irgendwo definieren was er dann suchen soll oder nicht?
Quellcode Auszug der Seite:
gimmeMoreUrl = 'ajax/_moreTimeLine';
ttrFortimeline = 1583;
ttrTypeString = 'TTR'

Dort soll er dann nach ttrFortimeline suchen und 1583 zurückgeben...

EinEinfach

Wenn das Login geklappt hat, müssen in dem Device-Internal "buf" schon Daten zu sehen sein.

Siehst du dort von dir gewünschte Readings?
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

Nein, dort ist noch nichts zu sehen...

amenomade

Das Problem ist: du bist immer noch nicht eingeloggt
Zitat2017.11.07 13:05:07 4: myTischtennis2: CheckAuth decided no authentication required
und HTTPMOD schaltet deswegen nicht zur Login Seite, weil die erste Antwort leer ist.

Ich muss mal selbst testen, aber ich kann von der Arbeit aus nicht wirklich :) Vielleicht heute Abend.
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

Wenn du das für mich machen könntest wäre super.
Mach einfach wenn du Zeit hast =)
Viele Dank schonmal!

amenomade

Mach mal ein paar Headers dazu, insbesondere das mit gzip, deflate. Auf meinem Windows Testrechner in der Arbeit, kriege ich krÿptische Antwort (hängt wahrscheinlich an fhem/windows/gzip), aber zumindest eine Antwort, die nicht leer ist:

attr myTischtennis2 requestHeader1 User-Agent: Mozilla/5.0 (Windows NT 10.0;; WOW64;; rv:45.0) Gecko/20100101 Firefox/45.0
attr myTischtennis2 requestHeader2 Accept: text/html,application/xhtml+xml,application/xml;;q=0.9,*/*;;q=0.8
attr myTischtennis2 requestHeader3 Accept-Language: en-GB,en;;q=0.5
attr myTischtennis2 requestHeader4 Accept-Encoding: gzip, deflate

Ansonsten, der Rest heute Abend ;)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

#37
Also: das geht bei mir mit:
define tennis HTTPMOD https://www.mytischtennis.de/community/ 60
attr tennis enableCookies 1
attr tennis reAuthRegex name="userNameB"
attr tennis requestHeader4 Accept-Encoding: identity
attr tennis sid01Data userNameB=meinUsername&userPassWordB=meinPasswort&targetPage=index?fromlogin=1&goLogin=Einloggen
attr tennis sid01Header4 Accept-Encoding: identity
attr tennis sid01URL https://www.mytischtennis.de/community/login
attr tennis verbose 5


Jetzt musst Du deine reading[0-9]+Name und reading[0-9]+Regex bauen, um die Daten zu holen, die Du als Readings möchtest.

Einzige Anmerkung: wie gesagt funktioniert bei mir (in der Arbeit)
attr tennis requestHeader4 Accept-Encoding: gzip, deflate
attr tennis sid01Header4 Accept-Encoding: gzip, deflate
nicht.

Mit "identity" zwinge ich die Abfrage und die Antwort ohne Komprimierung, was natürlich FHEM (und die Leitung und meine Log und mein Browser) stark belastet. Deswegen empfehle ich ein Test mit "gzip, deflate", es wäre viel besser. Und erst wenn es nicht funktioniert, dann mit "identity".
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

#38
Also mit identity schreibt er mir, wie du es ja schon geschrieben hast, mein Logfile mit dem Inhalt der gewünschten Webseite voll.
Nehme ich das identity raus, ist der ja gezipt und so nicht im Log lesbar.

Mit:
attr myTischtennis readingsName1 TTR
attr myTischtennis readingsRegex1 ttrFortimeline = ([\d]+)

wollte ich meinen TTR Wert (1583) aus der Webseite auslesen. Da scheint er nichts zu finden. Egal ob gezipt oder ungezipt.
Auf der Webseite: https://regex101.com scheint mein Regex zu funktionieren.

Also muss ja doch mein Regex fehlerhaft zu sein...

amenomade

#39
Ich habe selbst keine TTR Daten. Deshalb kann ich nicht testen. Zeig mal das relevante Teil der Log.

Und auch ein "list <dein httpmodDevice>". Die Attribute sollten eigentlich nicht readingsName1 und readingsRegex1 heissen (deprecated), sondern reading1Name und reading1Regex

EDIT: nicht vergessen => anonymisieren!
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

Ich denke das sollte der relevante Teil sein:
2017.11.07 18:19:17 5: myTischtennis2: ExtractSid called, context reading, num
2017.11.07 18:19:17 5: myTischtennis2: CheckAuth is checking buffer with ReAuthRegex name="userNameB"
2017.11.07 18:19:17 4: myTischtennis2: CheckAuth decided no authentication required
2017.11.07 18:19:17 5: myTischtennis2: UpdateReadingList created list of reading.* nums to parse during getUpdate as 1
2017.11.07 18:19:17 5: myTischtennis2: Read starts parsing response to update with defined readings: 1
2017.11.07 18:19:17 5: myTischtennis2: ExtractReading TTR with regex /ttrFortimeline = ([\d]+)/...
2017.11.07 18:19:17 5: myTischtennis2: ExtractReading TTR did not match
2017.11.07 18:19:17 3: myTischtennis2: Read response to update didn't match any Reading
2017.11.07 18:19:17 5: myTischtennis2: HandleSendQueue called, qlen = 0

mazze2000


Internals
BUSY 0
CHANGED
DEF https://www.mytischtennis.de/community/ 60
HTTPCookies SRV=82; cfid=fcb61e49-8f35-4a23-8ef9-bade7e289caa; cftoken=0
Interval 60
LASTSEND 1510076097.07451
LastAuthTry 2017-11-07 15:00:50
MainURL https://www.mytischtennis.de/community/
ModuleVersion 3.4.0 - 9.9.2017
NAME myTischtennis2
NR 96
STATE 1
TRIGGERTIME 1510076157.06736
TRIGGERTIME_FMT 2017-11-07 18:35:57
TYPE HTTPMOD
addr https://www.mytischtennis.de:443
buf
code 200
conn
data
displayurl https://www.mytischtennis.de/community/
header Accept-Encoding: gzip, deflate Cookie: SRV=82; cfid=fcb61e49-8f35-4a23-8ef9-bade7e289caa; cftoken=0
host www.mytischtennis.de
httpheader HTTP/1.1 200 OK Content-Encoding: gzip Content-Type: text/html;charset=UTF-8 Content-Language: de-DE Server: Microsoft-IIS/7.5 Content-Length: 13514 Accept-Ranges: bytes Date: Tue, 07 Nov 2017 17:34:58 GMT X-Varnish: 1557465454 Age: 0 Via: 1.1 varnish Connection: close X-Cache: Miss
httpversion 1.0
hu_blocking 0
hu_filecount 221
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
enableCookies 1
reAuthRegex name="userNameB"
readingsName1 TTR
readingsRegex1 ttrFortimeline = ([\d]+)
requestHeader4 Accept-Encoding: gzip, deflate
sid01Data userNameB=USER&userPassWordB=PW&targetPage=index?fromlogin=1&goLogin=Einloggen
sid01Header4 Accept-Encoding: gzip, deflate
sid01URL https://www.mytischtennis.de/community/login
userattr readingsName1 readingsRegex1 requestHeader1 requestHeader2 requestHeader3 requestHeader4 sid01Data sid01Header4 sid01URL sidURL
verbose 5


Bei reAuthRegex name habe ich userNameB drin stehen... oder muss dann da auch direkt der Benutzer rein?

mazze2000

#42
Ich habe nochmal ein neues Device angelegt. Das ständige rum probieren macht es ja nicht gerade leichter.
Und siehe da: Ich kann jetzt meinen Wert erfolgreich auslesen. Danke schonmal dafür, dass du dir die Zeit genommen hast.

Jedoch kann ich den Wert nur auslesen wenn ich ohne Komprimierung arbeite. Das ist an sich nicht so schlimm. Ein auslesen des Wertes findet ohnehin nur ein mal pro Tag statt. Kann man irgendwie verhindern, dass er mir meinen Log so dermaßen voll schreibt?

amenomade

Ja, setze wieder verbose auf 1 oder 0
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

Also das funktioniert jetzt echt wunderbar.
Ich habe die automatische Abfrage jetzt komplett abgeschaltet und frage den Wert jetzt immer morgens um 5 Uhr ab.
Da die Werte auf der Seite immer über Nacht aktualisiert werden reicht es völlig aus.
Soweit so gut =)

Wenn ich mich jetzt innerhalb der Seite weiter bewegen möchte lege ich doch sid02Data, sid02Header und sid02URL an oder sehe ich das falsch?
Woher weiß das HTTPMOD Modul denn welche Readings zu welcher sid gehören?

Kann ich beispielsweise, wenn ich mir jetzt ein neues Device anlege, diesem HTTPMOD unterschiedliche Data Werte übergeben? Momentan würde ich vermuten ich stelle im HTTMOD keine festen Werte ein sondern Werte aus einem Dummy, die er sich holen soll, ein. Diese Werte im Dummy würde ich dann vor der Abfrage nach belieben setzen. Richtig oder ist da ein Denkfehler drin?

Vielen Dank schonmal =)