Mitsubishi Klimaanlage MELCLOUD

hab auch gesehen das es seit 28.12 nicht mehr zu Anmeldung in der MelCoud kommt.
Bin noch auf 6.4, geht es bei dir wieder?

Danke
Alex

Seit dem einspielen deines Skriptes und einem Neustart läuft wieder alles rund. Danke

Also ich habe das Skript auch eingespielt, bekomme aber weiterhin den 401 Login Fehler.
Hast du wirklich nur die module.php im Device Ordner geändert? Denke die im I/O Ordner muss auch angepasst werden da findet doch der Login statt oder?
Wäre schön wenn wir das noch gelöst kriegen. Bin auch auf aktuellem Symcon 7.0
Danke
Oli

läuft das auch bei 6.4 oder muss ich da schon die 7.x haben?

Danke
Alex

Kann mir da niemand helfen? Zahle da gerne Geld wenn es jemand wieder zum laufen bekommt.
Grüße
Oli

Ich bin noch auf der 6.4. Jedoch habe ich aufgrund der problematik mit der 7.0 schon mal damit beschäftigt wie ich die Schnittstelle der Melcloud auch ohne das „MelCloudModul“ ansteuern kann.

Ich habe mir dann letzte Woche ein Script geschrieben.
Das Script ruft das komplette Array der Verknüpften Geräte zu deinem Account ab.
Aus diesem Array kannst du dir dann alle Infos die du brauchst rausziehen und in eine Variable schreiben oder auch Werte setzen.

Das „MelcoudModul“ funktioniert bei mir auch nur mit Fehlermeldungen. Aber es funktioniert noch.

Das hört sich doch super an, habe auch schon so etwas angefangen aber nicht fertig bekommen aktuell :frowning: Kann man da auch die Sachen dann steuern? Kannst du das Script hier rein schicken?

<? 

//Parameters
$username = 'email';
$password = 'passwort';
$loginurl = 'https://app.melcloud.com/Mitsubishi.Wifi.Client/Login/ClientLogin'; // URL für die Anmeldung
$url = 'https://app.melcloud.com/Mitsubishi.Wifi.Client/User/ListDevices/'; // URL für die Geräteliste
// URL für die Gerätedetails
$deviceDetailsUrl = 'https://app.melcloud.com/Mitsubishi.Wifi.Client/Device/SetAta';
$appversion = "1.7.1.0"; // Version der App

$ch = curl_init(); // Initialisieren von cURL

// cURL-Optionen für die Anmeldung
curl_setopt($ch, CURLOPT_URL, $loginurl); // Setzen der URL
curl_setopt($ch, CURLOPT_POST, 1); // Setzen der Methode auf POST
curl_setopt($ch, CURLOPT_POSTFIELDS, 'Email='.$username.'&password='.$password.'&AppVersion='.$appversion); // Setzen der POST-Daten
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // Rückgabe der Übertragung als String

// Ausführen der Anmeldung
$login = curl_exec($ch);
$data = json_decode($login);
$token = $data->LoginData->ContextKey; // Extrahieren des Tokens aus der Antwort

// Ausführen der Anfrage (Informationen abrufen)
$ch = curl_init(); // Initialisieren von cURL

// cURL-Optionen für die Anfrage
curl_setopt($ch, CURLOPT_URL, $url); // Setzen der URL
curl_setopt($ch, CURLOPT_FAILONERROR, true); // Beenden der Ausführung bei einem Fehler
curl_setopt($ch, CURLOPT_HEADER, 0); // Keine Header in der Ausgabe
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Folgen von "Location:"-Umleitungen
curl_setopt($ch, CURLOPT_AUTOREFERER, true); // Automatisches Setzen des "Referer:"-Feldes
curl_setopt($ch, CURLOPT_BINARYTRANSFER,true); // Übertragung im Binärmodus
curl_setopt($ch, CURLOPT_TIMEOUT, 20); // Timeout auf 20 Sekunden setzen
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); // Keine Überprüfung des SSL-Zertifikats
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Keine Überprüfung des Peer-SSL-Zertifikats
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Rückgabe der Übertragung als String
curl_setopt($ch, CURLINFO_HEADER_OUT, true); // Aktivieren des Trackings der Anforderungs-String
curl_setopt($ch, CURLOPT_VERBOSE, true); // Ausführliche Ausgabe

// Hinzufügen des Tokens zur Anfrage
$headers = array(
    'X-MitsContextKey: ' . $token,
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // Setzen der Header

// Ausführen der Anfrage
$response = curl_exec($ch);
curl_close($ch); // Schließen von cURL

// Ausgabe der Antwort
$response_json = json_decode($response, true);
print_r($response_json); // Ausgabe der Antwort als Array

// Beispiel Ausgabe der aktuellen Temperatur
echo "Raumtemperatur für Gerät 0: " . $response_json[0]['Structure']['Devices'][0]['Device']['RoomTemperature'] . "\n";
echo "Raumtemperatur für Gerät 1: " . $response_json[0]['Structure']['Devices'][1]['Device']['RoomTemperature'] . "\n";

Die einzelnen Werte auslesen ist kein Problem. Da ist unten am Code ein Beispiel. Was noch nicht klappt ist das setzen der Werte. Glaube aber nicht das es so schwer ist. Wenn ich Zeit habe probiere ich mal einen Wert zu setzen.

ich bin umgestiegen auf Homeasstiant dann per MQTT an IP Symcon funktioniert.

Das ist zwar ein Umweg aber eine coole Idee. Wäre ich gar nicht drauf gekommen :grinning:. Vor allem vlt auch für weitere Module die es hier noch nicht gibt. :+1:

ich nütze jetzt schon 80 % über MQTT von Homeassistant

1 „Gefällt mir“

sooo… nach ein paar Stunden hab ich es jetzt hinbekommen dem Gerät Daten zu senden. Temperatur und co. Ich bin da an einem Parameter gescheitert.
‚EffectiveFlags‘ => 4,
Ich weiß nicht genau warum und welche Zahl er beinhalten soll. Ich hatte ihn erst auf 1 stehen. Aber da ging meine Klimaanlage nur aus oder an und die Temperatur wollte er nicht übernehmen. Jetzt wo der Wert auf 4 steht geht sie aus und an und ich kann die Temperatur verstellen.


<? 

//Parameters
$username = 'email';
$password = 'passwort';
$loginurl = 'https://app.melcloud.com/Mitsubishi.Wifi.Client/Login/ClientLogin'; // URL für die Anmeldung
$url = 'https://app.melcloud.com/Mitsubishi.Wifi.Client/User/ListDevices/'; // URL für die Geräteliste
// URL für die Gerätedetails
$deviceDetailsUrl = 'https://app.melcloud.com/Mitsubishi.Wifi.Client/Device/SetAta';
$appversion = "1.7.1.0"; // Version der App

$ch = curl_init(); // Initialisieren von cURL

// cURL-Optionen für die Anmeldung
curl_setopt($ch, CURLOPT_URL, $loginurl); // Setzen der URL
curl_setopt($ch, CURLOPT_POST, 1); // Setzen der Methode auf POST
curl_setopt($ch, CURLOPT_POSTFIELDS, 'Email='.$username.'&password='.$password.'&AppVersion='.$appversion); // Setzen der POST-Daten
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // Rückgabe der Übertragung als String

// Ausführen der Anmeldung
$login = curl_exec($ch);
$data = json_decode($login);
$token = $data->LoginData->ContextKey; // Extrahieren des Tokens aus der Antwort

// Ausführen der Anfrage (Informationen abrufen)
$ch = curl_init(); // Initialisieren von cURL

// cURL-Optionen für die Anfrage
curl_setopt($ch, CURLOPT_URL, $url); // Setzen der URL
curl_setopt($ch, CURLOPT_FAILONERROR, true); // Beenden der Ausführung bei einem Fehler
curl_setopt($ch, CURLOPT_HEADER, 0); // Keine Header in der Ausgabe
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Folgen von "Location:"-Umleitungen
curl_setopt($ch, CURLOPT_AUTOREFERER, true); // Automatisches Setzen des "Referer:"-Feldes
curl_setopt($ch, CURLOPT_BINARYTRANSFER,true); // Übertragung im Binärmodus
curl_setopt($ch, CURLOPT_TIMEOUT, 20); // Timeout auf 20 Sekunden setzen
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // Überprüfung des SSL-Zertifikats
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 2); // Überprüfung des Peer-SSL-Zertifikats
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Rückgabe der Übertragung als String
curl_setopt($ch, CURLINFO_HEADER_OUT, true); // Aktivieren des Trackings der Anforderungs-String
curl_setopt($ch, CURLOPT_VERBOSE, true); // Ausführliche Ausgabe

// Hinzufügen des Tokens zur Anfrage
$headers = array(
    'X-MitsContextKey: ' . $token,
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // Setzen der Header

// Ausführen der Anfrage
$response = curl_exec($ch);
//curl_close($ch); // Schließen von cURL

// Ausgabe der Antwort
$response_json = json_decode($response, true);
print_r($response_json); // Ausgabe der Antwort als Array

// Beispiel Ausgabe der aktuellen Temperatur
echo "Raumtemperatur für Gerät 0: " . $response_json[0]['Structure']['Devices'][0]['Device']['RoomTemperature'] . "\n";
echo "Raumtemperatur für Gerät 1: " . $response_json[0]['Structure']['Devices'][1]['Device']['RoomTemperature'] . "\n";


// Neue Temperatur einstellen
$newTemperature = 20; // Ersetzen Sie dies durch die gewünschte Temperatur

// Daten für die Anforderung
$data = array(
    'DeviceID' => $response_json[0]['Structure']['Devices'][0]['DeviceID'],
    'SetTemperature' => $newTemperature,
    'Power' => 1, // Schalten Sie das Gerät ein
    'EffectiveFlags' => 4,
    //'SetMe' => 1
);

// Setzen Sie die Optionen für die Übertragung
curl_setopt($ch, CURLOPT_URL, $deviceDetailsUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'X-MitsContextKey: ' . $token)); // Verwenden Sie $token anstelle von $response_json['LoginData']['ContextKey']

// Führen Sie die cURL-Sitzung aus und holen Sie sich die Antwort
$response = curl_exec($ch);
// Überprüfen Sie den HTTP-Statuscode
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

// Schließen Sie die cURL-Sitzung
curl_close($ch);





// Überprüfen Sie den Statuscode und die Antwort
if ($httpcode >= 200 && $httpcode < 300) {
    echo 'Die Anforderung war erfolgreich. HTTP-Statuscode: ' . $httpcode . "\n";
    echo 'Antwort: ' . $response . "\n";
} else {
    echo 'Es gab einen Fehler bei der Anforderung. HTTP-Statuscode: ' . $httpcode . "\n";
}



?>

@docrossi:
IP-Symcon bietet auch MQTT, oder gab es hier Probleme bei der Einbindung?

ja. Er meint ja nur, dass er die Daten zwischen Homeassistant und Ip Symcon über die MQTT Schnittstelle schiebt.
Also Melcloud in Homeassistant eingefügt hat und dann die Daten per MQTT an Ip Symcon sendet.

Das habe ich verstanden.
Ich frage mich nur ob es einen bestimmten Grund gibt, warum die Daten nicht direkt über IP-Symcon abgerufen werden?

Beide Lösungen gehen, aber mich würde hier den Hintergrund interessieren. :slight_smile:

Ja Homeassistant hatte ich auch überlegt aber dann laufen ja 2 Rechner bzw. 2 Systeme, Ziel sollte ja schon sein dass nur eines läuft :slight_smile: Meiner Meinung nach eben.
Danke für das Skript, läuft bei mir jetzt auch.
Ist halt schade weil das alte Modul ja so automatisch funktioniert hat und man hier ja jetzt jede Variable manuell beschreiben muss. Ich arbeite auf jeden Fall noch daran auch die Presets zu setzen, arbeite mit denen wegen Nachtschaltung. Wenn das funktioniert würde ich es auch hier rein schicken :slight_smile:
Grüße
Oli

Habe mir das mit den EffectiveFlags mal im „Originalskript“ angeschaut, hat was mit dem Command zu tun, bei SetTemp muss es 4 sein, bei Power z.b. 1, bei OperationMode 2.
Hat wohl damit zu tun was man ändern will, ich checke das aber noch genauer :slight_smile:
Noch ein Hinweis: Wenn man den Skript Timer dann auf z.b. 2 minuten macht sperrt mitsubishi den zugang irgendwann, token muss also auf jeden fall gespeichert werden wenn man das regelmäßig abfragen will sonst geht das Skript relativ schnell nicht mehr

Das mit dem EffectiveFlags hab ich auch gelesen. Wobei ich den Wert auf 4 gestellt habe und konnte die Klimaanlage mit dem powersignal ein ausschalten und die Temperatur einstellen. Also da ging beides.

OK. Kann man den token in eine IP symcon variable schreiben? Vorallem ist der bestimmt nicht ewig gültig…

Also bei mir ging die nicht aus mit flag 4. Aber habe noch ein weiteres Problem, habe den Token jetzt zwischengespeichert und verwende den immer wieder, aber selbst dann blockt mitsubishi irgendwann die calls für ein paar stunden, bin noch am testen wieso :frowning:
Habe beim Login auf jeden Fall noch persistent=true ergänzt, vielleicht hilft das jetzt