Ich bin noch auf Version 6.4. Habe die Meldung schon lange… vlt sogar von Anfang an.
Wollte mal mein Log Aufräumen und die Meldung bekomm ich nicht weg…
Bei mir ist der Fehler auch:
13.12.2023, 09:09:00 | Data_Get | Daten werden abgerufen
13.12.2023, 09:09:00 | Data_Get | ERROR // Connection to the MELCloud failed // cURL Error = The requested URL returned error: 401
28.12.2023, 14:05:04 | Data_Get | ERROR // Connection to the MELCloud failed // cURL Error = The requested URL returned error: 401
Bei mir klappt es auch nicht. Weiß nicht wie lange schon, die Klimageräte stehen auf Mallorca.
dito
Hatte @Bayaro vor einigen Wochen geschrieben und leider keine Antwort erhalten. Meine Versuche einen Fehler in der Login-Function zu finden waren leider ergebnislos, kriege die korrekten responses.
Hallo zusammen, ich habe ein paar „Improvements“ in der letzten Version des Melcloud Moduls gemacht. Tatsächlich sollten man in der aktuellen 7er Version auch die PHP Funktionen angleichen. Insbesondere die Funktion „array_key_exists“ sollte durch „isset“ ersetzt werden. Ich habe hier eine von mir korrigierte Version des Moduls „MELCloud-master\MEL_DEVICE\module.php“, die ich aber auch auf meine Bedürfnisse angepasst habe. So läuft Sie jedenfalls fehlerfrei und ich kann meine Mitsubishi Klimageräte steuern. Auch den „Trocknen“ habe ich dort bereits eingebaut. Einbau / Verwendung auf eigene Gefahr
Moin,hab in „MELCloud-master\MEL_DEVICE\module.php“ die Änderung gemacht
Danach nur noch Fehlermeldung beim Aufruf des Moduls. Was mach ich falsch?
klappt wieder super ! Danke für die Hilfe.
Ich hab aber immer noch Fehlermeldungen.
16.01.2024, 17:06:13 | FlowHandler | Kann Daten nicht zur Instanz #42352 weiterleiten:
Fatal error: Uncaught TypeError: property_exists(): Argument #1 ($object_or_class) must be of type object|string, array given in /var/lib/symcon/modules/MELCloud/MEL_DEVICE/module.php:2070
Stack trace:
#0 /var/lib/symcon/modules/MELCloud/MEL_DEVICE/module.php(2070): property_exists(Array, ‚NumberDescripti…‘)
#1 /var/lib/symcon/modules/MELCloud/MEL_DEVICE/module.php(1493): MELCloudDevice->VariablesProfiles_Update(‚Presets‘, Array)
#2 /var/lib/symcon/modules/MELCloud/MEL_DEVICE/module.php(1450): MELCloudDevice->ReceiveData_Processing(Array)
#3 /-(3): MELCloudDevice->ReceiveData(‚{„action“:"GetL…‘)
#4 {main}
thrown in /var/lib/symcon/modules/MELCloud/MEL_DEVICE/module.php on line 2070
Bei welcher Aktion kommt die Meldung? Habe gerade mit meinen Klimageräten alle möglichen Datenabrufe getestet, ohne Fehler…
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 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 . Vor allem vlt auch für weitere Module die es hier noch nicht gibt.
ich nütze jetzt schon 80 % über MQTT von Homeassistant
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";
}
?>