Hauptmenü

HTTPMOD Login

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

Vorheriges Thema - Nächstes Thema

EinEinfach

ZitatWenn ich mich jetzt innerhalb der Seite weiter bewegen möchte lege ich doch sid02Data, sid02Header und sid02URL an oder sehe ich das falsch?

Sid brauchst du nur um eine gültige Session herzustellen, also wenn der HTTPMOD sich einmal erfolgreich angemeldet hat, dann brauchst du in der Regele keine weiteren Sid-Attribute.
Um sich weiter innerhalb der Seite zu bewegen kannst du die get Attribute verwenden:
getXName - Getname innerhalb der Fhem-Instanz
getXURL - Eine URL die bei Ausführung des gGet-Befehls aufgerufen wird
getHeader - der zu verwendende Header beim Aufruf

Gruß
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

amenomade

ZitatUm sich weiter innerhalb der Seite zu bewegen kannst du die get Attribute verwenden:
getXName - Getname innerhalb der Fhem-Instanz
getXURL - Eine URL die bei Ausführung des gGet-Befehls aufgerufen wird
getHeader - der zu verwendende Header beim Aufruf
und auf jeden Fall noch eine passende getXRegex

getXUrl nur wenn Du eine andere Seite (als die von DEF) erreichen willst.
getXHeader.* wenn die von  requestHeader.* nicht reichen.

I.d.R. reichen einfach paare getXName / getXRegex innerhalb der Seite: somit erhältst Du die entsprechende get Kommandos, die Du dann explizit (z.B. mit at) aufrufen musst.
Wenn du eine automatische Abfrage innerhalb der Seite willst, dann eher readingXName und readingXRegex. Die Anzahl Abfragen kannst Du mit dem Parameter <Interval> in der DEF anpassen

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

@holzwurm83: hab dich nicht vergessen. Leider konnte ich gestern nur eine halbe Stunde weiter testen. Bin noch nicht weiter gekommen. Nächster Versuch 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

holzwurm83

Ok! Danke für dein Feedback!


Gesendet von iPhone mit Tapatalk
- 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

#49
Zitat von: amenomade am 09 November 2017, 15:00:23
und auf jeden Fall noch eine passende getXRegex

getXUrl nur wenn Du eine andere Seite (als die von DEF) erreichen willst.
getXHeader.* wenn die von  requestHeader.* nicht reichen.

I.d.R. reichen einfach paare getXName / getXRegex innerhalb der Seite: somit erhältst Du die entsprechende get Kommandos, die Du dann explizit (z.B. mit at) aufrufen musst.
Wenn du eine automatische Abfrage innerhalb der Seite willst, dann eher readingXName und readingXRegex. Die Anzahl Abfragen kannst Du mit dem Parameter <Interval> in der DEF anpassen

Kann ich in der getXURL auch am Ende der Url eine ID mit übergeben?

Sehe ich das richtig, dass die die getX... Befehle dann nur per direktem Aufruf durchgeführt werden? Oder ebenfalls über den unter DEF eingestellte Interval?

Sorry, habe mich mit dem Wiki darüber versucht schlau zu machen. Aber so ganz blicke ich das damit nicht - daher so viele Fragen :-)

Über die get Befehle get1URL, get1Name und get1Regex bekomme ich leider nur folgenden Log:
2017.11.09 20:16:36 5: myTischtennisV1: UpdateHintList called
2017.11.09 20:16:36 5: myTischtennisV1: UpdateHintList: setlist = interval reread:noArg stop:noArg start:noArg upgradeAttributes:noArg storeKeyValue
2017.11.09 20:16:36 5: myTischtennisV1: UpdateHintList: getlist = Rainer:noArg
2017.11.09 20:16:40 5: myTischtennisV1: get called with Rainer
2017.11.09 20:16:40 5: myTischtennisV1: get found option Rainer in attribute get1Name
2017.11.09 20:16:40 4: myTischtennisV1: get will now request Rainer, no optional value
2017.11.09 20:16:40 4: myTischtennisV1: AddToQueue adds get1, initial queue len: 0
2017.11.09 20:16:40 5: myTischtennisV1: AddToQueue adds type get1 to URL https://www.mytischtennis.de/community/, no data, no headers, retry 0
2017.11.09 20:16:40 5: myTischtennisV1: HandleSendQueue called, qlen = 1
2017.11.09 20:16:40 5: myTischtennisV1: HandleSendQueue is adding Cookies: SRV=82; cfid=e841b97b-9e06-4fc9-a7a2-3ab93dc76fa5; cftoken=0
2017.11.09 20:16:40 4: myTischtennisV1: HandleSendQueue sends request type get1 to URL https://www.mytischtennis.de/community/, No Data,
header: Cookie: SRV=82; cfid=e841b97b-9e06-4fc9-a7a2-3ab93dc76fa5; cftoken=0,
timeout 2
2017.11.09 20:16:40 4: HttpUtils url=https://www.mytischtennis.de/community/
2017.11.09 20:16:40 5: HttpUtils request header:
GET /community/ HTTP/1.0
Host: www.mytischtennis.de
User-Agent: fhem
Cookie: SRV=82; cfid=e841b97b-9e06-4fc9-a7a2-3ab93dc76fa5; cftoken=0
Content-Length: 0
Content-Type: application/x-www-form-urlencoded

2017.11.09 20:16:40 4: https://www.mytischtennis.de/community/: HTTP response code 200
2017.11.09 20:16:40 4: HttpUtils https://www.mytischtennis.de/community/: Got data, length: 0
2017.11.09 20:16:40 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: Thu, 09 Nov 2017 19:16:40 GMT
X-Varnish: 1560347860
Age: 0
Via: 1.1 varnish
Connection: close
X-Cache: Miss
2017.11.09 20:16:40 4: myTischtennisV1: Read callback: request type was get1 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: Thu, 09 Nov 2017 19:16:40 GMT
X-Varnish: 1560347860
Age: 0
Via: 1.1 varnish
Connection: close
X-Cache: Miss, body empty
2017.11.09 20:16:40 5: myTischtennisV1: 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: Thu, 09 Nov 2017 19:16:40 GMT
X-Varnish: 1560347860
Age: 0
Via: 1.1 varnish
Connection: close
X-Cache: Miss
2017.11.09 20:16:40 5: myTischtennisV1: ExtractSid called, context get, num 1
2017.11.09 20:16:40 5: myTischtennisV1: CheckAuth is checking buffer with ReAuthRegex name="userNameB"
2017.11.09 20:16:40 4: myTischtennisV1: CheckAuth decided no authentication required
2017.11.09 20:16:40 5: myTischtennisV1: ExtractReading Rainer with regex /<span>TTR:</span> ([\d\.]+)/...
2017.11.09 20:16:40 5: myTischtennisV1: ExtractReading Rainer did not match
2017.11.09 20:16:40 5: myTischtennisV1: UpdateReadingList created list of reading.* nums to parse during getUpdate as 1 2 3 4 5
2017.11.09 20:16:40 3: myTischtennisV1: Read response to get1 didn't match any Reading
2017.11.09 20:16:40 5: myTischtennisV1: HandleSendQueue called, qlen = 0


Jemand eine Idee woran das liegt? Fehlt da eventuell ein zusätzlicher Header?

amenomade

ZitatSehe ich das richtig, dass die die getX... Befehle dann nur per direktem Aufruf durchgeführt werden?
Prinzipiell richitg. Nur wenn Du noch dazu "getXPoll 1" setzt, wird es  über den unter DEF eingestellte Interval abgefragt. Nachteil im Vergleich mit readingX... ist dass jedes get eine http Abfrage macht, wenn readingX... nur eine http Abfrage macht, und dann alle readings interpretiert.

ZitatSorry, habe mich mit dem Wiki darüber versucht schlau zu machen
CommandREF ist auch empfehlenswert.

Wegen get1... kann man ein "list" von deinem HTTPMOD (anonymisiert) sehen?
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

@holzwurm83: ich hab es. Mit der Lösung bin ich nicht ganz zufrieden (ich musste das "update" im Loginprozess einbauen und bei jeder Abfrage ein Login zwingen), aber zumindest funktioniert es... eigentlich nur wenn Du Wasser holst - ich habe zwischen 21:30 Uhr und 23:00 Uhr ein Zweifel gehabt ;) :

defmod H2O_Anlage HTTPMOD https://wifi.ecowater.com/Dashboard/Index/xxxmailxxx/AC000W000028486 60
attr H2O_Anlage clearSIdBeforeAuth 1
attr H2O_Anlage enableControlSet 1
attr H2O_Anlage reAuthAlways 1
attr H2O_Anlage reAuthRegex (class="login-item"|Bad Request)
attr H2O_Anlage reading01Name VerbrauchHeute
attr H2O_Anlage reading01Regex water_today".*?>([\d]+)
attr H2O_Anlage reading02Name Saltdate
attr H2O_Anlage reading02Regex device-info-saltDate.*?>([\d\/\.]+)
attr H2O_Anlage requestHeader1 Cookie: $sid
attr H2O_Anlage requestHeader2 Cache-Control: no-cache
attr H2O_Anlage sid01IdRegex (ASP.NET_SessionId[^;;\n]+)
attr H2O_Anlage sid01URL https://wifi.ecowater.com/Site/Login?returnUrl=/Dashboard/Index/xxxmailxxx/AC000W000028486
attr H2O_Anlage sid02Data Email=xxxmailxxx&Password=xxxpasswortxxx&Remember=false
attr H2O_Anlage sid02Header1 Cookie: $sid
attr H2O_Anlage sid02IdRegex Cookie: ([^\n]+)
attr H2O_Anlage sid02URL https://wifi.ecowater.com/Site/Login?returnUrl=/Dashboard/Index/xxxmailxxx/AC000W000028486
attr H2O_Anlage sid03Data dsn=AC000W000028486
attr H2O_Anlage sid03Header1 Referer: https://wifi.ecowater.com/Dashboard/Index/xxxmailxxx/AC000W000028486
attr H2O_Anlage sid03Header2 X-Requested-With: XMLHttpRequest
attr H2O_Anlage sid03Header3 User-Agent: Mozilla/5.0 Gecko/20100101 Firefox/56.0
attr H2O_Anlage sid03Header5 Cookie: $sid
attr H2O_Anlage sid03URL https://wifi.ecowater.com/Dashboard/UpdateFrequentData
attr H2O_Anlage verbose 5


Das <interval> könntest Du m.A. auf 300 oder mehr setzen, um kein Ärger von ecowater zu kriegen ;) Das hab ich auch bei mir gemacht.
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

ZitatWegen get1... kann man ein "list" von deinem HTTPMOD (anonymisiert) sehen?


disable 0
enableControlSet 1
enableCookies 1
get1Name Rainer
get1Regex <span>TTR:</span> ([\d\.]+)
get1URL https://www.mytischtennis.de/community/events?personId=127937
group Abfrage
reAuthRegex name="userNameB"
reading1Name Matthias
reading1Regex ttrFortimeline = ([\d\.]+)
... bis reading5...
requestHeader4 Accept-Encoding: identity
room Tischtennis
sid01Data userNameB=USER&userPassWordB=PASS&targetPage=index?fromlogin=1&goLogin=Einloggen
sid01Header4 Accept-Encoding: identity
sid01URL https://www.mytischtennis.de/community/login
stateFormat {ReadingsTimestamp('myTischtennisV1','Matthias','')}
userattr get1Name get1Regex get1URL reading1Name reading1Regex reading2Name reading2Regex reading3Name reading3Regex reading4Name reading4Regex reading5Name reading5Regex requestHeader4 sid01Data sid01Header4 sid01URL
verbose 5


Schön wäre es wenn man bei dem get die PersonID in der URL noch mit übergeben könnte.
Sodass man eine Abfrage anlegt und für alle abzufragenden Personen benutzen kann.
Aber sollte das nicht gehen, ist es mit dem get schon sehr komfortabel =)

@amenomade: Beschäftigst du dich mit dem Thema auch beruflich? Oder warum kannst du das so gut? :-)

amenomade

Mehrere TTR (vorgegeben):
attr tennis getHeader4 Accept-Encoding: identity
attr tennis getURL https://www.mytischtennis.de/community/events?personId=%%ttrid%%
attr tennis replacement01Mode text
attr tennis replacement01Regex %%ttrid%%

attr tennis get20Name Erik
attr tennis get20Regex <span>TTR:</span> ([\d\.]+)
attr tennis get20Replacement01Value 127937

attr tennis get21Name Steven
attr tennis get21Regex <span>TTR:</span> ([\d\.]+)
attr tennis get21Replacement01Value 123456

attr tennis get22Name Amenomade
attr tennis get22Regex <span>TTR:</span> ([\d\.]+)
attr tennis get22Replacement01Value 111111


Einzel TTR (als Arg im get Kommando):
attr tennis get30Header4 Accept-Encoding: identity
attr tennis get30Name PersonId
attr tennis get30RecombineExpr join ": ", @matchlist
attr tennis get30Regex (?s)ttr-box">\n<h3>\n([^\n]+).*?TTR:<\/span> ([\d]+)
attr tennis get30TextArg 1
attr tennis get30URL https://www.mytischtennis.de/community/events?personId=$val
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

Schöner:
attr tennis get30RecombineExpr join (" ","Id: ",$matchlist[2],"Name:",$matchlist[0],"TTR:",$matchlist[1])

Ich bin zwar in der IT Branche, aber eher seitens Infrastrukur (Netzwerk, Servers, usw). Entwicklung ist ein Hobby ;)
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

Hallo amenomade,

vielen vielen Dank für deine Unterstützung. Ich hätte das sonnst in dem umfang mit Sicherheit nicht hinbekommen.

Trotz des Errors gibt es bis auf zwei Readings keine weiteren Probleme. Der hat für diese zwei attr. kein match. Daher kommt wascheidlich auch der Fehler:

attr H2O_Anlage reading04Name Salzstand
attr H2O_Anlage reading04Regex <span class="irs-single" style="left:.*?>([\d]+)
attr H2O_Anlage reading06Name Regeneration
attr H2O_Anlage reading06Regex device-info-lastRecharg.*?>([\d\/\.]+)
- 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

Wie gesagt, "irs-single" finde ich nirgendwo auf der Seite.

Probier mal mit:attr H2O_Anlage reading04Name Salzstand
attr H2O_Anlage reading04Regex SaltLevelCurrent.*?value="([\d]+)"


Das Problem bei Regeneration ist dass, es nicht nur ein Datum sein kann, sondern auch z.B. "Gestern". Probier mal mit:
attr H2O_Anlage reading06Name Regeneration
attr H2O_Anlage reading06Regex device-info-lastRecharge">(.*?)<
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 habe dann doch nochmal eine Frage: (es geht weiterhin um myTischtennis)

Wenn ich jetzt nicht auf den Quellcode (Ressourcen (Safari)) der Seite sondern auf Elemente der Seite zugreifen will?
Soll heißen, die Seite erstellt eine Tabelle. In der Tabelle stehen meine benötigten Werte. Diese stehen halt nicht im Quellcode.
Schaue ich mir beim Laden der Seite den Netzwerktransfer an, so sehe ich das bei dem Element um das es geht die Methode POST steht.
Alles andere wäre "GET".
Im Wiki steht etwas von "requestData.*" um an die Daten der Seite zu kommen. Meine Idee wäre den "requestHeader4" damit zu ersetzten. Ebenfalls mit "Accept-Encoding: identity" als Wert.


attr tennis requestData.* Accept-Encoding: identity
attr tennis getURL https://www.mytischtennis.de/community/events?personId=%%ttrid%%
attr tennis replacement01Mode text
attr tennis replacement01Regex %%ttrid%%

attr tennis get20Name Erik
attr tennis get20Regex <span>TTR:</span> ([\d\.]+)
attr tennis get20Replacement01Value 127937


Dies funktioniert leider nicht. Hat jemand eine Idee was ich falsch mache?

LG Matze

amenomade

requestData (ohne .* am Ende) wird benutzt, um post "data" zu schicken. Aber diese Post Data ist wahrscheinlich nicht "Accept-Encoding: identity", das hat keinen Sinn.
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

Hallo amenomade,

kannst du mir hierbei noch mal helfen. Seit einigen Monaten werden die Readings nicht mehr aktualisiert.

H2O_Anlage: Read response to update didn't match any Reading
- 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