diff --git a/fhem/CHANGED b/fhem/CHANGED index d3b7194c8..8ea71c2bb 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,6 @@ # Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Do not insert empty lines here, update check depends on it. + - feature: Update to new version, see Forum #127701 - feature: 20_X10: added SetExtensions, see Forum #136278 - bugfix: 98_CDCOpenData: Fehlerbehandlung SFTP - feature: 70_PylonLowVoltage: extend possible number of batteries up to 14 diff --git a/fhem/FHEM/70_Klafs.pm b/fhem/FHEM/70_Klafs.pm index 2d31106e6..1d10120a2 100644 --- a/fhem/FHEM/70_Klafs.pm +++ b/fhem/FHEM/70_Klafs.pm @@ -69,6 +69,7 @@ BEGIN { ReadingsVal HttpUtils_NonblockingGet HttpUtils_BlockingGet + readingsDelete )) }; @@ -253,13 +254,16 @@ sub Klafs_Auth{ my $reconnect = time() + 300; $hash->{Klafs}->{reconnect} = $reconnect; my $header = "Content-Type: application/x-www-form-urlencoded\r\n". - "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.71 Safari/537.36"; - my $datauser = "UserName=$username&Password=$password"; + "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36\r\n". + "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7r\n". + "Accept-Encoding: gzip, deflate, br\r\n". + "Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7"; + my $datauser = "UserName=$username&Password=$password&RememberMe=false"; if ($hash->{Klafs}->{LoginFailures} eq "0"){ HttpUtils_NonblockingGet({ - url => "https://sauna-app.klafs.com/Account/Login", + url => "https://sauna-app-19.klafs.com/Account/Login", ignoreredirects => 1, timeout => 5, hash => $hash, @@ -300,7 +304,7 @@ sub Klafs_AuthResponse { }else{ readingsBulkUpdate( $hash, 'LoginFailures', 0, 0); $hash->{Klafs}->{LoginFailures} =0; - for my $cookie ($header =~ m/set-cookie: ?(.*)/gi) { + for my $cookie ($header =~ m/Set-Cookie: ?(.*)/gi) { $cookie =~ /([^,; ]+)=([^,;\s\v]+)[;,\s\v]*([^\v]*)/; my $aspxauth = $1 . "=" .$2 .";"; $hash->{Klafs}->{cookie} = $aspxauth; @@ -347,28 +351,36 @@ sub klafs_getStatus{ my $aspxauth = $hash->{Klafs}->{cookie}; my $saunaid = $hash->{Klafs}->{saunaid}; - my $header_gs = "Content-Type: application/json\r\n". - "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.71 Safari/537.36\r\n". + my $header_gs = "Content-Type: application/json; charset=utf-8\r\n". + "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36\r\n". + "Accept: text/plain, */*; q=0.01r\n". + "Accept-Encoding: gzip, deflate, br\r\n". + "Accept-Language: de,en;q=0.7,en-US;q=0.3\r\n". "Cookie: $aspxauth"; my $datauser_gs = '{"saunaId":"'.$saunaid.'"}'; HttpUtils_NonblockingGet({ - url => "https://sauna-app.klafs.com/Control/GetSaunaStatus", + url => "https://sauna-app-19.klafs.com/SaunaApp/GetData?id=$saunaid", timeout => 5, hash => $hash, - method => "POST", + method => "GET", header => $header_gs, - data => $datauser_gs, + data => $datauser_gs, callback => \&klafs_getStatusResponse, }); #Name Vorname Mail Benutzername #GET Anfrage mit ASPXAUTH - my $header_user = "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.71 Safari/537.36\r\n". + my $header_user = "Content-Type: application/json; charset=utf-8\r\n". + "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36\r\n". + "Accept: text/plain, */*; q=0.01r\n". + "Accept-Encoding: gzip, deflate, br\r\n". + "Accept-Language: de,en;q=0.7,en-US;q=0.3\r\n". "Cookie: $aspxauth"; + HttpUtils_NonblockingGet({ - url => "https://sauna-app.klafs.com/Account/ChangeProfile", + url => "https://sauna-app-19.klafs.com/Account/ChangeProfile", timeout => 5, hash => $hash, method => "GET", @@ -376,11 +388,15 @@ sub klafs_getStatus{ callback => \&Klafs_GETProfile, }); - my $header_set = "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.71 Safari/537.36\r\n". - "Cookie: $aspxauth"; + my $header_set = "Content-Type: application/json; charset=utf-8\r\n". + "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36\r\n". + "Accept: text/plain, */*; q=0.01r\n". + "Accept-Encoding: gzip, deflate, br\r\n". + "Accept-Language: de,en;q=0.7,en-US;q=0.3\r\n". + "Cookie: $aspxauth"; HttpUtils_NonblockingGet({ - url => "https://sauna-app.klafs.com/Control/ChangeSettings", + url => "https://sauna-app-19.klafs.com/SaunaApp/ChangeSettings", timeout => 5, hash => $hash, method => "GET", @@ -444,6 +460,8 @@ sub klafs_getStatusResponse { readingsBulkUpdate($hash, $key, $new); } } + ## unset ErrorMessageHeader. Dort steht "Fehler" drin. Wert wird mitgeliefert auch wenn ErrorMessage leer ist. Bei Fehler wird Reading last_errormsg gesetzt + readingsDelete($hash, "ErrorMessageHeader"); Klafs_CONNECTED($hash,'connected'); readingsEndUpdate($hash, 1); @@ -469,8 +487,8 @@ sub Klafs_GETProfile { # Wenn in $data eine Anmeldung verlangt wird und kein json kommt, darf es nicht weitergehen. # Connect darf es hier nicht geben. Das darf nur an einer Stelle kommen. Sonst macht perl mehrere connects gleichzeitig- bei 3 Fehlversuchen wäre der Account gesperrt readingsBeginUpdate ($hash); - if($data=~/ Default Sauna 90 Grad | +|on | ohne Parameter -> Starten mit zuletzt verwendeten Werten | | | set "name" on Sauna 90 - 3 Parameter: Sauna mit Temperatur [10-100]; Optional Uhrzeit [19:30] | | | set "name" on Saunarium 65 5 - 4 Parameter: Sanarium mit Temperatur [40-75]; Optional HumidtyLevel [0-10] und Uhrzeit [19:30] | -| | set "name" on Infrared 30 5 - 4 Parameter: Infrarot mit Temperatur [20-40] und IR Level [0-10]; Optional Uhrzeit [19:30] | | | Infrarot ist nicht supported, da keine Testumgebung verfuegbar. | ------------------------------------------------------------------------------------------------------------------------------------------------------------ -|off | Schaltet die Sauna|Sanarium|Infrarot aus - ohne Parameter. | +|off | Schaltet die Sauna|Sanarium aus - ohne Parameter. | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |ResetLoginFailures | Bei fehlerhaftem Login wird das Reading LoginFailures auf 1 gesetzt. Damit ist der automatische Login vom diesem Modul gesperrt. | | | Klafs sperrt den Account nach 3 Fehlversuchen. Damit nicht automatisch 3 falsche Logins hintereinander gemacht werden. | @@ -620,12 +637,15 @@ sub Klafs_GetSaunaIDs_Send{ my ($name,$self) = ($hash->{NAME},Klafs_Whoami()); my $aspxauth = $hash->{Klafs}->{cookie}; return if $hash->{Klafs}->{LoginFailures} > 0; - Log3 ($name, 5, "$name ($self) - executed."); + Log3 ($name, 5, "$name ($self) - GetSauna ID start."); - my $header = "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.71 Safari/537.36\r\n". - "Cookie: $aspxauth"; + my $header = "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36\r\n". + "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7\r\n". + "Accept-Encoding: gzip, deflate, br\r\n". + "Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7\r\n". + "Cookie: $aspxauth"; HttpUtils_NonblockingGet({ - url => "http://sauna-app.klafs.com/Control", + url => "https://sauna-app-19.klafs.com/SaunaApp/ChangeSettings", timeout => 5, hash => $hash, method => "GET", @@ -638,9 +658,10 @@ sub Klafs_GetSaunaIDs_Send{ sub Klafs_GetSaunaIDs_Receive { my ($param, $err, $data) = @_; my ($name,$self,$hash) = ($param->{hash}->{NAME},Klafs_Whoami(),$param->{hash}); - my $returnwerte; + my $returnwert1; + my $returnwert2; - Log3 ($name, 5, "$name ($self) - executed."); + Log3 ($name, 5, "$name ($self) - GetSauna ID Ende."); if ($err ne "") { Log3 ($name, 4, "$name ($self) - error."); @@ -650,15 +671,16 @@ sub Klafs_GetSaunaIDs_Receive { if($data !~/Account\/Login/) { # Wenn in $data eine Anmeldung verlangt wird und keine Daten, darf es nicht weitergehen. # Connect darf es hier nicht geben. Das darf nur an einer Stelle kommen. Sonst macht perl mehrere connects gleichzeitig - bei 3 Fehlversuchen wäre der Account gesperrt - $returnwerte = ""; - if($data=~//) { - for my $output ($data =~ m /(.*?)<\/tr>/gis) { - $output=~ m/(.*?)<\/span>/g; - $returnwerte .= $1.": "; - $output=~ m/
/) { + for my $output ($data =~ m /(.*?)<\/tr>/gis) { + $output=~ m/