[gelöst] [HTTPMOD] Login mit ASP.NET und zusätzlichen login parametern?

Begonnen von roman1528, 17 Juli 2020, 10:46:10

Vorheriges Thema - Nächstes Thema

roman1528

Zitat von: amenomade am 19 Juli 2020, 15:18:11
Die Frage ist eher, ob der Browser wieder die aktuellste VIEWSTATE Daten schickt. Aber Du hast Recht, wenn schon ein .ASPXAUTH-TOken da ist, sollte es reichen.

Also mein Mozilla führt nur ein GET mit Anfrage Cookie aus. Ich kann da später aber auch nochmal forschen... Nicht dass ich jetzt Mist erzähle oder so XD
i3-10305T 4x3GHz;8GB RAM;250GB & 1TB NVMe:
FHEM 6.2;FTUI;8" Tablet's+Fully;NsPanelPro;HUE;ESPRGBWW;HM(CCU3);Duofern; ASC;MQTT(Tasmota);netatmo;SONOS;eBus;DbLog;XiaomiDevice;NUT;ModbusAttr

RPi3+: FHEM 6.2;I²C;GPIO;RFID;G-Tag;XiaomiBTLESens
RPi3: FHEM 6.2;DIY Relais-Board;I²C;GPIO;RFID;Photovoltaik

amenomade

Ich glaube, ich weiss warum es nicht immer funktioniert. Die urlencode Funktion ist genug, um normale URL Zeichen zu escapen, aber da wollen wir möglicherweise andere Zeichen in VIEWSTATE Data auch escapen. Z.B. '+'. Und den . dagegen nicht escapen.


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

Neue Version von myUtils (Funktion urlencode geändert, und die 3 andere Funktionen durch eine genarateLogin() ersetzt)
sub urlencode {
    my $s = shift;
    $s =~ s/ /+/g;
    $s =~ s/([^A-Za-z0-9-\.])/sprintf("%%%02X", ord($1))/seg;
    return $s;
}

sub generateLogin
{
my ($sid) = shift;
my $username = 'login@domain.com';
my $password = 'mypassword';
$sid =~ /__VIEWSTATE" value="(.*?)".*?__VIEWSTATEGENERATOR" value="(.*?)".*?__EVENTVALIDATION" value="(.*?)"/gs;
my $login = '__VIEWSTATE='.urlencode($1);
$login .= '&__VIEWSTATEGENERATOR='.urlencode($2);
$login .= '&__EVENTVALIDATION='.urlencode($3);
$login .= '&ctl00$ContentPlaceHolder1$Login1$UserName='.urlencode($username);
$login .= '&ctl00$ContentPlaceHolder1$Login1$Password='.urlencode($password);
$login .= '&ctl00$ContentPlaceHolder1$Login1$ctl01=Sign+In';
return $login;
}


Natürlich login@domain.com und mypassword ersetzen.
Damit scheint es zuverlässiger zu funktionieren.

HTTPMOD:
define smartme HTTPMOD https://www.smart-me.com/Details/GetDetailsNew.ashx?id=<<ID>> 0
attr smartme dontRequeueAfterAuth 1
attr smartme reAuthRegex SignUp.aspx
attr smartme reading01Name Power0
attr smartme reading01XPath-Strict //Element[./Title/text()='Power' and ./Type/text()='0']/Value/text()
attr smartme reading02Name Power1
attr smartme reading02XPath-Strict //Element[./Title/text()='Power' and ./Type/text()='1']/Value/text()
attr smartme reading03Name Counters
attr smartme reading03XPath-Strict //Element[contains(./Title/text(),'Counter')]/Value/text()
attr smartme reading05Name Voltage
attr smartme reading05XPath-Strict //Element[./Title/text()='Voltage']/Value/text()
attr smartme reading06Name Current
attr smartme reading06XPath-Strict //Element[./Title/text()='Current']/Value/text()
attr smartme reading07Name PowerFactor
attr smartme reading07XPath-Strict //Element[./Title/text()='Power Factor']/Value/text()
attr smartme reading09Name LastSeen
attr smartme reading09OExpr FmtDateTime($val)
attr smartme reading09XPath-Strict //Element[./Title/text()='Last seen']/Value/text()
attr smartme reading10Name Consumption
attr smartme reading10XPath-Strict //Element[./Title/text()='Consumption overview']/Value/text()
attr smartme replacement01Mode expression
attr smartme replacement01Regex %%LOGIN%%
attr smartme replacement01Value generateLogin($defs{smartme}{sid})
attr smartme sid01IdRegex (?s)(__VIEWSTATE.*?__EVENTVALIDATION.*?)\/>
attr smartme sid01URL https://www.smart-me.com/SignIn.aspx?ReturnUrl=/Details/GetDetailsNew.ashx?id=<<ID>>
attr smartme sid02Data %%LOGIN%%
attr smartme sid02ParseResponse 1
attr smartme sid02URL https://www.smart-me.com/SignIn.aspx?ReturnUrl=/Details/GetDetailsNew.ashx?id=<<ID>>
attr smartme sidHeader01 Origin: https://www.smart-me.com
attr smartme sidHeader02 Referer: https://www.smart-me.com/SignIn.aspx
attr smartme sidHeader03 User-Agent: Mozilla/5.0 (Windows NT 10.0;; Win64;; x64;; rv:78.0) Gecko/20100101 Firefox/78.0

<<ID>> 3 Mal ersetzen
Ergebnis:
   READINGS:
     2020-07-20 00:32:34   Consumption     -,-,-
     2020-07-20 00:32:34   Counters        0.000,0.000,0.000,,0.000,0.000,0.000,0.000,0.000,0.000
     2020-07-20 00:32:34   Current         0.000
     2020-07-20 00:32:34   LastSeen        2020-07-20 00:31:48
     2020-07-20 00:32:34   Power0          0.0
     2020-07-20 00:32:34   Power1          0.0
     2020-07-20 00:32:34   PowerFactor     0.000
     2020-07-20 00:32:34   Voltage         238.5
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

roman1528

Moin. Super Cool  8)

Nach langem hin und her hat er es bei mir tatsächlich auch geschafft.
Nehme ich das richtig an? Im urlencode wird alles außer A-Z  a-z  0-9  -  .  escaped?

Er hat bei mir nämlich ziemlich viele anläufe gebraucht um 1. überhaupt die "sid" zu lesen und sich dann erfolgreich einzuloggen.

Mal sehen wie lange das anhält ... werde die nächsten 2-3 Tage das noch beobachten.

Zu XPath:
Ist das version 1.0? Versuche nämlich die Counters direkt mit XPath einzeln auszulesen:
//Element[4]/Value/tokenize(text(),",")[3]
function tokenize() wird, wenn ich das richtig gelesen habe, erst ab XPath 2.0 unterstützt.

Ich vermute dass das von libxml-DingsBums-WieAuchImmer-perl abhängt?

Hab erstmal ganz lieben Dank für deine Hilfe. Melde mich die Tage nochmal.

Grüße^^
i3-10305T 4x3GHz;8GB RAM;250GB & 1TB NVMe:
FHEM 6.2;FTUI;8" Tablet's+Fully;NsPanelPro;HUE;ESPRGBWW;HM(CCU3);Duofern; ASC;MQTT(Tasmota);netatmo;SONOS;eBus;DbLog;XiaomiDevice;NUT;ModbusAttr

RPi3+: FHEM 6.2;I²C;GPIO;RFID;G-Tag;XiaomiBTLESens
RPi3: FHEM 6.2;DIY Relais-Board;I²C;GPIO;RFID;Photovoltaik

amenomade

Ich kann mich dunkel erinnern, dass der Modulautor vor kurzem geschrieben hat, dass XPath 2.0 noch nicht völlig unterstützt wird
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

Ne, finde ich nicht mehr. Vielleicht irre ich mich.

Nutzt du readingXXXPath oder readingXXXPath-Strict?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

roman1528

Sorry für die kurze Antwort. Bin mit dem Hund draußen.

readingXXXPath-Strict

Da gibt es 'nen Unterschied?
i3-10305T 4x3GHz;8GB RAM;250GB & 1TB NVMe:
FHEM 6.2;FTUI;8" Tablet's+Fully;NsPanelPro;HUE;ESPRGBWW;HM(CCU3);Duofern; ASC;MQTT(Tasmota);netatmo;SONOS;eBus;DbLog;XiaomiDevice;NUT;ModbusAttr

RPi3+: FHEM 6.2;I²C;GPIO;RFID;G-Tag;XiaomiBTLESens
RPi3: FHEM 6.2;DIY Relais-Board;I²C;GPIO;RFID;Photovoltaik

amenomade

Ja, mit XPath arbeitet er in HTML Mode, und mit XPath-Strict in XML Mode.

Trotzdem geht tokenize() nicht. Dein Problem kannst Du aber relativ einfach mit userReadings hinkriegen.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

roman1528

Na dann mach ich ja alles richtig.

Schaue ich mir morgen an. Sollte ich hinkriegen. Bisschen RegEx klappt ja auch schon  ;D

Grüße^^
i3-10305T 4x3GHz;8GB RAM;250GB & 1TB NVMe:
FHEM 6.2;FTUI;8" Tablet's+Fully;NsPanelPro;HUE;ESPRGBWW;HM(CCU3);Duofern; ASC;MQTT(Tasmota);netatmo;SONOS;eBus;DbLog;XiaomiDevice;NUT;ModbusAttr

RPi3+: FHEM 6.2;I²C;GPIO;RFID;G-Tag;XiaomiBTLESens
RPi3: FHEM 6.2;DIY Relais-Board;I²C;GPIO;RFID;Photovoltaik

roman1528

so..
Fazit nach guten 24 Stunden pollen im 15 Sekunden Takt.

Läuft... mittelmäßig. Ich bekomme ab und an timeouts, 5 Sekunden später wird dann aber doch geholt. timeout steht auf 10.

So richtig non blocking scheint es nicht zu sein. wenn er pollt steht immer connection lost im fhem status und die readings werden auch nicht in ftui aktualisiert. es kommen auch keine events.

global dnsServer für httputils hab ich gesetzt.

'ne Idee was das sein könnte?

Grüße^^
i3-10305T 4x3GHz;8GB RAM;250GB & 1TB NVMe:
FHEM 6.2;FTUI;8" Tablet's+Fully;NsPanelPro;HUE;ESPRGBWW;HM(CCU3);Duofern; ASC;MQTT(Tasmota);netatmo;SONOS;eBus;DbLog;XiaomiDevice;NUT;ModbusAttr

RPi3+: FHEM 6.2;I²C;GPIO;RFID;G-Tag;XiaomiBTLESens
RPi3: FHEM 6.2;DIY Relais-Board;I²C;GPIO;RFID;Photovoltaik

amenomade

Ich würde ein ping -t smart-me.com parallel laufen lassen, und dann gucken, ob Packete verloren gehen.
Zum Vergleich auch ein ping -t auf eine zuverlässige webseite, z.B. 8.8.8.8, um unterscheiden zu können, ob es vom LAN oder von smart-me kommt.

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

roman1528

Hi.

Du kannst damit mehr anfangen als ich... Ich konnte auch nichts mit ping -t anfangen deswegen hab ich das anders gemacht.

smart-me.com:
root@FHEM-SERVER:~# ping -c 20 -i 15 smart-me.com
PING smart-me.com (172.67.203.243) 56(84) bytes of data.
64 bytes from 172.67.203.243 (172.67.203.243): icmp_seq=1 ttl=54 time=22.5 ms
64 bytes from 172.67.203.243 (172.67.203.243): icmp_seq=2 ttl=54 time=21.1 ms
64 bytes from 172.67.203.243 (172.67.203.243): icmp_seq=3 ttl=54 time=20.4 ms
64 bytes from 172.67.203.243 (172.67.203.243): icmp_seq=4 ttl=54 time=23.4 ms
64 bytes from 172.67.203.243 (172.67.203.243): icmp_seq=5 ttl=54 time=22.1 ms
64 bytes from 172.67.203.243 (172.67.203.243): icmp_seq=6 ttl=54 time=25.4 ms
64 bytes from 172.67.203.243 (172.67.203.243): icmp_seq=7 ttl=54 time=21.0 ms
64 bytes from 172.67.203.243 (172.67.203.243): icmp_seq=8 ttl=54 time=23.3 ms
64 bytes from 172.67.203.243 (172.67.203.243): icmp_seq=9 ttl=54 time=22.5 ms
64 bytes from 172.67.203.243 (172.67.203.243): icmp_seq=10 ttl=54 time=22.9 ms
64 bytes from 172.67.203.243 (172.67.203.243): icmp_seq=11 ttl=54 time=19.9 ms
64 bytes from 172.67.203.243 (172.67.203.243): icmp_seq=12 ttl=54 time=23.9 ms
64 bytes from 172.67.203.243 (172.67.203.243): icmp_seq=13 ttl=54 time=23.4 ms
64 bytes from 172.67.203.243 (172.67.203.243): icmp_seq=14 ttl=54 time=23.3 ms
64 bytes from 172.67.203.243 (172.67.203.243): icmp_seq=15 ttl=54 time=21.7 ms
64 bytes from 172.67.203.243 (172.67.203.243): icmp_seq=16 ttl=54 time=23.6 ms
64 bytes from 172.67.203.243 (172.67.203.243): icmp_seq=17 ttl=54 time=25.6 ms
64 bytes from 172.67.203.243 (172.67.203.243): icmp_seq=18 ttl=54 time=20.9 ms
64 bytes from 172.67.203.243 (172.67.203.243): icmp_seq=19 ttl=54 time=21.9 ms
64 bytes from 172.67.203.243 (172.67.203.243): icmp_seq=20 ttl=54 time=22.6 ms

--- smart-me.com ping statistics ---
20 packets transmitted, 20 received, 0% packet loss, time 285228ms
rtt min/avg/max/mdev = 19.957/22.629/25.643/1.472 ms


1.1.1.1:
root@FHEM-SERVER:~# ping -c 20 -i 15 1.1.1.1
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=56 time=13.7 ms
64 bytes from 1.1.1.1: icmp_seq=2 ttl=56 time=11.7 ms
64 bytes from 1.1.1.1: icmp_seq=3 ttl=56 time=16.0 ms
64 bytes from 1.1.1.1: icmp_seq=4 ttl=56 time=11.9 ms
64 bytes from 1.1.1.1: icmp_seq=5 ttl=56 time=15.4 ms
64 bytes from 1.1.1.1: icmp_seq=6 ttl=56 time=13.5 ms
64 bytes from 1.1.1.1: icmp_seq=7 ttl=56 time=12.0 ms
64 bytes from 1.1.1.1: icmp_seq=8 ttl=56 time=12.8 ms
64 bytes from 1.1.1.1: icmp_seq=9 ttl=56 time=13.4 ms
64 bytes from 1.1.1.1: icmp_seq=10 ttl=56 time=13.1 ms
64 bytes from 1.1.1.1: icmp_seq=11 ttl=56 time=15.6 ms
64 bytes from 1.1.1.1: icmp_seq=12 ttl=56 time=13.2 ms
64 bytes from 1.1.1.1: icmp_seq=13 ttl=56 time=10.9 ms
64 bytes from 1.1.1.1: icmp_seq=14 ttl=56 time=15.4 ms
64 bytes from 1.1.1.1: icmp_seq=15 ttl=56 time=13.9 ms
64 bytes from 1.1.1.1: icmp_seq=16 ttl=56 time=14.5 ms
64 bytes from 1.1.1.1: icmp_seq=17 ttl=56 time=12.8 ms
64 bytes from 1.1.1.1: icmp_seq=18 ttl=56 time=19.6 ms
64 bytes from 1.1.1.1: icmp_seq=19 ttl=56 time=15.3 ms
64 bytes from 1.1.1.1: icmp_seq=20 ttl=56 time=13.8 ms

--- 1.1.1.1 ping statistics ---
20 packets transmitted, 20 received, 0% packet loss, time 285248ms
rtt min/avg/max/mdev = 10.951/13.977/19.663/1.908 ms


ausgeführt natürlich auf dem FHEM-Rechner

Grüße^^
i3-10305T 4x3GHz;8GB RAM;250GB & 1TB NVMe:
FHEM 6.2;FTUI;8" Tablet's+Fully;NsPanelPro;HUE;ESPRGBWW;HM(CCU3);Duofern; ASC;MQTT(Tasmota);netatmo;SONOS;eBus;DbLog;XiaomiDevice;NUT;ModbusAttr

RPi3+: FHEM 6.2;I²C;GPIO;RFID;G-Tag;XiaomiBTLESens
RPi3: FHEM 6.2;DIY Relais-Board;I²C;GPIO;RFID;Photovoltaik

amenomade

Bringt nicht viel.
Das muss dauerhaft laufen, ggf über Fhem mit Modul ping und entspr. Logs. Dann zur Zeit wo Problemen auf dem HTTPMOD auftreten analysiert werden.

Sorry, unter Linux kein -t, sondern einfach ohne Option (nur Seite oder IP). Dann läuft es bis manueller Unterbrechung
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

roman1528

So mit "O"

Ich bin tatsächlich wieder einen Schritt weiter.
attr DEVICE requestHeader1 Referer: https://www.smart-me.com/Details/V2/All.aspx
läuft deutlich besser. Das ist auch die Seite, die die XML im !Sekundentakt! pollt.
Wenn man im Browser die Nezwerkanalyse laufen lässt, sieht man auch hier ab und an längere Ladezeiten bzw. Timeouts. Seltener als bei httpmod aber es gibt sie.

Kann es sein das das XPath blocking ist? Mal angenommen httpmod & httputils sind korrekt konfiguriert und laufen astrein non-blocking... Woher kommt dann immer das Connection lost.....?

Grüße^^
i3-10305T 4x3GHz;8GB RAM;250GB & 1TB NVMe:
FHEM 6.2;FTUI;8" Tablet's+Fully;NsPanelPro;HUE;ESPRGBWW;HM(CCU3);Duofern; ASC;MQTT(Tasmota);netatmo;SONOS;eBus;DbLog;XiaomiDevice;NUT;ModbusAttr

RPi3+: FHEM 6.2;I²C;GPIO;RFID;G-Tag;XiaomiBTLESens
RPi3: FHEM 6.2;DIY Relais-Board;I²C;GPIO;RFID;Photovoltaik

amenomade

Zitat von: roman1528 am 24 Juli 2020, 18:00:55
So mit "O"

Ich bin tatsächlich wieder einen Schritt weiter.
attr DEVICE requestHeader1 Referer: https://www.smart-me.com/Details/V2/All.aspx
läuft deutlich besser. Das ist auch die Seite, die die XML im !Sekundentakt! pollt.
Wenn man im Browser die Nezwerkanalyse laufen lässt, sieht man auch hier ab und an längere Ladezeiten bzw. Timeouts. Seltener als bei httpmod aber es gibt sie.

Kann es sein das das XPath blocking ist? Mal angenommen httpmod & httputils sind korrekt konfiguriert und laufen astrein non-blocking... Woher kommt dann immer das Connection lost.....?

Grüße^^
Vielleicht funktioniert es auch ohne Referer. Die Headers habe ich hinzugefügt als ich noch getestet habe. Ich weiss nicht, ob alle nötig sind.

Auf jeden Fall ist es besser, als Referer die Seite zu haben, die tatsächlich Referer ist ;)

Wie meinst Du "XPath blocking"? XPath macht nur das Parsing von den Daten.
Ich tippe eher auf einen Netzwerk Problem, oder temporäre Blockaden von der smart-me Seite
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus