[Neues Modul] Miele@Home

Begonnen von choenig, 14 Juni 2020, 11:08:17

Vorheriges Thema - Nächstes Thema

choenig

Hi,

ich habe gerade version 0.15.0 hochgeladen. Ich hab' jetzt alle Sonderzeichen durch ASCII-Zeichen in der Länderauswahl ersetzt.

LG
Christian

dfred12345

Hallo Christian, erstmal vielen Dank für die Anpassung. Das hat soweit funktioniert. Ich bekomme aber trotzdem keine Verbindung hin.

Auf der Miele Developers Page kann ich mich mit meiner ClientID / ClientSecret / Email / Password und Ländersetting anmelden.

Diese Infos hab ich auch ins MieleAtHome Device eingetragen.

Was könnte ich noch Probieren?

Falls es hilft noch das Log:

2020.10.05 21:03:49 5: MieleConnection (MieleAtHome::MAH_onOauthLoginReply:695) reply: err:, code:302, headers:HTTP/1.1 302 Found
Date: Mon, 05 Oct 2020 19:03:49 GMT
Content-Length: 0
Connection: close
Strict-Transport-Security: max-age=15724800; includeSubDomains
Location: https://api.mcs3.miele.com/thirdparty/login/?code=AT_509b5d0c0408d3111d11ca436dfe32e8&state=login
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: PUT, GET, POST, OPTIONS
Access-Control-Allow-Headers: DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization, data:
2020.10.05 21:03:49 5: MieleConnection (MieleAtHome::scrapeGrantAccessPage:738) code not found
2020.10.05 21:03:49 2: MieleConnection (MieleAtHome::MAH_onOauthLoginReply:718) Error: Bearer code not found, giving up


2020.10.05 21:14:01 5: MieleConnection (MieleAtHome::MAH_refreshAccessToken:553) called
2020.10.05 21:14:01 5: MieleConnection (MieleAtHome::MAH_doThirdpartyLoginRequest:595) called
2020.10.05 21:14:01 5: MieleConnection (MieleAtHome::MAH_onThirdpartyLoginReply:627) reply: err:, code:200, headers:HTTP/1.1 200 OK
Date: Mon, 05 Oct 2020 19:14:01 GMT
Content-Type: text/html
Content-Length: 2237
Connection: close
Strict-Transport-Security: max-age=15724800; includeSubDomains
Vary: Accept-Encoding
Content-Encoding: gzip
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: PUT, GET, POST, OPTIONS
Access-Control-Allow-Headers: DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization, data:<html lang="de">
<head>
<!--Let browser know website is optimized for mobile-->
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta charset="utf-8">
<!-- Suppress favicon request-->
<link rel="shortcut icon" type="image/x-icon"
href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAABILAAASCwAAAAAAAAAAAAAUAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/EwCL/xMAjP8TAIv/EgCL/xIAi/8TAIv/EgCL/xMAi/8SAIv/EwCL/xIAi/8TAIv/FACM/xQAjP8UAIz/FwON/yYUlf8bCY//KBaW/ysZmP8tG5j/JhSV/y4dmf8mFJX/KxmX/ygVlv8tG5j/JxSV/xQAjP8UAIz/EwCM/x4Lkf+BdsH/nJPO/7Ot2v+aks7/s63a/6Wd0/+9t9//lo3M/7Wv2/+noNT/vbff/5mQzf8mFJX/EwCL/xMAjP8cCJD/qaLV/8C64P+9uN//mpLO/4+GyP9pXLX/hnvE/3Fluv+1rtv/iH/F/4B2wf9zaLv/HQqR/xMAjP8UAIz/FwOO/zMhm/8mFZX/JxaV/y0bmP8fDZL/FwWO/xIAi/8VBI3/MiCa/yIRk/8SAIv/EgCL/xMAjP8UAIz/FACM/xQAjP8SAIv/EwCL/xMAi/8SAIv/EwCM/xQAjP8UAIz/FACM/xIAi/8TAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/FACM/xQAjP8UAIz/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==">
<!--Import Google Icon Font-->
<!--Import materialize.css-->
<!--Import own css-->
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link rel="stylesheet" href="/assets/css/materialize.min.css?1556550173384">
<link type="text/css" rel="stylesheet" href="/assets/css/mieleStyle.css?1556550173387"
media="screen,projection"/>
<!-- Import scrips -->
<!-- Compiled and minified JavaScript -->
<script src="/assets/js/materialize.min.js?1556550173386"></script>
<!--Hotfix for selection error on IOS 13, see MIELCLD3-4504-->
<script src="/assets/js/selectHotfix.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function () {
M.FormSelect.init(document.querySelectorAll('select'));
});
</script>
</head>
<body id="mieleLoginSite">
<div class="container">
<div class="row">
<div class="col s12 m8 offset-m2 offset-l2 l8">
<div class="center">
<img class="responsive-img"
src="/assets/images/miele_logo.svg" width="150" alt="miele.com"/>
</div>
<h1 class="center mediumFont">Login</h1>
<form method="post" action="/oauth/auth">
<div class="input-field">
<i class="material-icons prefix">account_circle</i>
<input required id="e-mail" type="email" name="email">
<label for="e-mail">Email Address</label>
</div>
<div class="input-field">
<i class="material-icons prefix">https</i>
<input required id="password" type="password" name="password">
<label for="password">Password</label>
</div>
<!-- add here all hidden inputs -->
<input type="hidden" name="response_type" value="code">
<input type="hidden" name="redirect_uri" value="https://api.mcs3.miele.com/thirdparty/login/">
<input type="hidden" name="state" value="login">
<input type="hidden" name="client_id" value="MYDI">
<div class="input-field" style="margin-top: 25px;">
<i class="material-icons prefix no-margin">language</i>
<select required name="vgInformationSelector" size="5">
<option value="" disabled>Please select your country</option>
<option value="en-AU">Miele Australia</option>
<option value="nl-BE">Miele België</option>
<option value="en-CA">Miele Canada</option>
<option value="es-CL">Miele Chile</option>
<option value="hr-HR">Miele Croatia</option>
<option value="cs-CZ">Miele Czechia</option>
<option value="da-DK">Miele Danmark</option>
<option value="de-DE">Miele Deutschland</option>
<option value="et-EE">Miele Eesti</option>
<option value="es-ES">Miele España</option>
<option value="fr-FR">Miele France</option>
<option value="ko-KR">Miele Hanguk</option>
<option value="zh-HK">Miele Hong Kong, China</option>
<option value="en-IE">Miele Ireland</option>
<option value="en-IL">Miele Israel</option>
<option value="it-IT">Miele Italia</option>
<option value="el-CY">Miele Kypros</option>
<option value="lv-LV">Miele Latvija</option>
<option value="lt-LT">Miele Lietuva</option>
<option value="de-LU">Miele Luxemburg</option>
<option value="hu-HU">Miele Magyarország</option>
<option value="en-MY">Miele Malaysia</option>
<option value="es-MX">Miele México</option>
<option value="nl-NL">Miele Nederland</option>
<option value="en-NZ">Miele New Zealand</option>
<option value="ja-JP">Miele Nihon</option>
<option value="no-NO">Miele Norge</option>
<option value="pl-PL">Miele Polska</option>
<option value="pt-PT">Miele Portugual</option>
<option value="ro-RO">Miele România</option>
<option value="de-CH">Miele Schweiz</option>
<option value="en-SG">Miele Singapore</option>
<option value="sl-SI">Miele Slovenia</option>
<option value="sk-SK">Miele Slovensko</option>
<option value="en-ZA">Miele South Africa</option>
<option value="fi-FI">Miele Suomi</option>
<option value="sv-SE">Miele Sverige</option>
<option value="en-TH">Miele Thailand</option>
<option value="tr-TR">Miele Türkiye</option>
<option value="en-GB">Miele UK</option>
<option value="en-US">Miele USA</option>
<option value="en-AE">Miele United Arab Emirates</option>
<option value="zh-CN">Miele Zhōngguó, dàlù</option>
<option value="de-AT">Miele Österreich</option>
<option value="el-GR">Miele Ελλάδα</option>
<option value="ru-BY">Miele Беларуси</option>
<option value="bg-BG">Miele България</option>
<option value="ru-KZ">Miele Казахстан</option>
<option value="ru-RU">Miele Россия</option>
<option value="sr-RS">Miele Србија</option>
<option value="ru-UA">Miele Україна</option>
</select>
<label>Country</label>
</div>
<div class="center">
<button class="btn waves-effect waves-light miele-red"
type="submit">Submit</button>
</div>
</form>
</div>
</div>
</div>
</body>
</html>
2020.10.05 21:14:01 5: MieleConnection (MieleAtHome::MAH_doOauthLoginRequest:644) called
2020.10.05 21:14:01 5: MieleConnection (MieleAtHome::MAH_doOauthLoginRequest:666) country for /oauth/auth is de-AT
2020.10.05 21:14:02 5: MieleConnection (MieleAtHome::MAH_onOauthLoginReply:695) reply: err:, code:302, headers:HTTP/1.1 302 Found
Date: Mon, 05 Oct 2020 19:14:02 GMT
Content-Length: 0
Connection: close
Strict-Transport-Security: max-age=15724800; includeSubDomains
Location: https://api.mcs3.miele.com/thirdparty/login/?code=AT_725d8e62e8bc09d506916cd3c81341ed&state=login
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: PUT, GET, POST, OPTIONS
Access-Control-Allow-Headers: DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization, data:
2020.10.05 21:14:02 5: MieleConnection (MieleAtHome::scrapeGrantAccessPage:738) code not found
2020.10.05 21:14:02 2: MieleConnection (MieleAtHome::MAH_onOauthLoginReply:718) Error: Bearer code not found, giving up

amenomade

#122
Weil das Modul ein Bearer Code in der Form: if ($headers =~ /(?s)code=(DE_[0-9a-f]+)/) {
sucht.

Anscheinend ist es aber hier AT_509b5d0c0408d3....
Du bist wahrscheinlich der erste, der ausserhalb Deutschland das Modul benutzt ;)

Versuch mal die Zeile 705 im Modul so zu ändern:
if ($headers =~ /(?s)code=(.._[0-9a-f]+)/) {

Dann ein "reload 48_MieleAtHome" und dann wieder probieren.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

choenig

Alter,

Zitat von: amenomade am 05 Oktober 2020, 21:58:57
Weil das Modul ein Bearer Code in der Form: if ($headers =~ /(?s)code=(DE_[0-9a-f]+)/) {
sucht.

Anscheinend ist es aber hier AT_509b5d0c0408d3....

ich bin so ein Dödel :D

Da hab' ich schon bei der ersten Implementierung, die ich ja mit Hilfe des HTTPMOD-Threads geschrieben habe, dran gedacht und ich dachte, das hätte ich schon ewig gefixt. Hab ich aber nicht :(. Tut mir leid. Der Fix von @amenomade sollte helfen.

Ich fix' es morgen :)

LG
Christian


amenomade

Sag bloß, dass ich Bugs in dem HTTPMOD geschrieben habe, die so "gefixt" werden sollten! ;) :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

dfred12345


choenig

Zitat von: amenomade am 05 Oktober 2020, 22:18:05
Sag bloß, dass ich Bugs in dem HTTPMOD geschrieben habe, die so "gefixt" werden sollten! ;) :D

Nee, du hast keine Bugs eingebaut. Die HTTPMOD Lösung ist ja eher was, was jeder für sich konfiguriert. Aber ein fertiges Modul sollte das schon flexibler können ...

Super, dass es jetzt geht 😎

LG
Christian

dfred12345

Zitat von: choenig am 20 Juni 2020, 11:45:32
Hi,

ich habe gerade Version 0.6.0 hochgeladen. Jetzt werden erstmal alle ProcessActions unterstützt:
0x01 => "start",              # 1 START
0x02 => "stop",               # 2 STOP
0x03 => "pause",              # 3 PAUSE
0x04 => "startSuperFreezing", # 4 START SUPERFREEZING
0x05 => "stopSuperFreezing",  # 5 STOP SUPERFREEZING
0x06 => "startSuperCooling",  # 6 START SUPERCOOLING
0x07 => "stopSuperCooling",   # 7 STOP SUPERCOOLING


LG
Christian

Hallo Christian, ich habe ne Washing Machine leider funktionieren nicht alle ProcessActions (On/Off geht). Auf "set MieleWaschmaschine start" kommt folgende Meldung:
'start' is currently not available. :( Was könnte der Grund sein?

choenig

Hi,
Zitat von: dfred12345 am 06 Oktober 2020, 20:56:14
'start' is currently not available. :( Was könnte der Grund sein?

Grundsätzlich ist es so, dass die API mitteilt, welche Aktionen gerade verfügbar sind. Ich würde jetzt davon ausgehen, dass in dem Moment das 'start' nicht verfügbar ist.

Entweder, die WaMa ist nicht in einem Zustand, dass du sie per API starten kannst (geht es denn per App?), oder vielleicht muss der aktuelle Zustand auch erst aktualisiert werden (was ich eher nicht glaube).

Geht es denn, wenn Du ein bisschen wartest?

LG
Christian

dfred12345

Ich habs nun. Bei der Waschmaschine muss man ein Programm Auswählen und einen "Smart Start" aktivieren, dann kommt "Start" "Stop". Es funktioniert aber nicht, wenn man Mobile Start anwählt.

Roderich

Hallo,

mit Begeisterung habe ich unsere neue Miele Waschmaschine in Betrieb genommen.
Das Einrichten in FHEM hat soweit geklappt, dachte ich jedenfalls.
Es gibt Interaktion zwischen FHEM und der Maschine.
Mit Verbose 5 bekomme ich aber immer folgende Fehler:


Waschmaschine (MieleAtHome::MAH_onGetDeviceIdentAndStateReply:949) reply: err:, code:200
Waschmaschine (MieleAtHome::MAH_onGetDeviceActionsReply:1076) reply: err:, code:200


Es werden auch nur die Befehle set Waschmaschine on und update angezeigt.

Woran kann das liegen.


timmib

#131
Super Sache. Das Auslesen funktioniert schonmal. Das Starten der Waschmaschiene teste ich die Tage. Wieder eine Bastellösung mehr, die ich durch ein ordentlichen Modul ablösen kann.  :)

choenig

Moin,
Zitat von: Roderich am 14 Oktober 2020, 20:08:12
Mit Verbose 5 bekomme ich aber immer folgende Fehler:


Waschmaschine (MieleAtHome::MAH_onGetDeviceIdentAndStateReply:949) reply: err:, code:200
Waschmaschine (MieleAtHome::MAH_onGetDeviceActionsReply:1076) reply: err:, code:200


Das ist kein Fehler. Der Html-Code 200 bedeutet "OK". Das logging kommt, weil Du offenbar Loglevel 5 aktiviert hast.

LG
Christian

Roderich

Hallo Christian,

vielen Dank. Dann kann ich verbose ja wieder abdrehen :-)

JoWiemann

Hallo,

seit einiger Zeit habe ich das Phänomen, dass der statusRaw meiner Waschmaschine unregelmäßig zwischen 1 und 255 pendelt. Da die Maschine bei "Aus" sich komplett abschaltet, also auch im WLAN nicht mehr angemeldet ist, ist dieses Pendeln eigentlich unsinnig. Um nicht permanent von meinen notify auf statusRaw genervt zu werden habe ich dieses Pendeln entsprechend abgefangen:


if ((statusRaw < 255 && statusRawAlt == statusRaw) || (statusRaw == 255 && statusRawAlt == 1)) {
   return;
} else {
   statusRawAlt = statusRaw;
}


Vielleicht könnte man ja etwas ähnliches im Modul hinterlegen.

Danke für das Modul und Grüße

Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM