Forum eedomus
https://forum.eedomus.com/

[Store] Climatisation Mitsubishi / Melcloud
https://forum.eedomus.com/viewtopic.php?f=50&t=6982
« Précédent  Page 3 sur 12  Suivant »
Auteur:  Dominic [ 26 Mars 2020 08:23 ]
Sujet du message:  Re: [Store] Climatisation Mitsubishi / Melcloud

Merci à Matthieu366 et parabellum, je vais tester cela dans la journée et me permettrais de revenir vers vous en cas de problème (et également pour confirmer si c’est ok [WINKING FACE]).
Merci
Dominic


Envoyé de mon iPhone en utilisant Tapatalk
Auteur:  Dominic [ 26 Mars 2020 09:25 ]
Sujet du message:  Re: [Store] Climatisation Mitsubishi / Melcloud

Re-bonjour,

Après avoir mis mon appareil (1 seule pour faire les tests) au niveau 0 (Maison) et modifié le script et mis sur Marche dans Melcloud, j'ai toujours le message d'erreur suivant (voir images).
Peut-être faut-il désinstaller et réinstaller ?
Sinon, dans la doc on parle de 2 paramètres obligatoires (ID pièce et ID machine), comment les récupérer et où les renseigner ?
Merci d'avance
Dominic

Pièces jointes:
Melcloud.jpg
Melcloud.jpg (23.63 Kio) Consulté 10038 fois
Config.jpg
Config.jpg (84.1 Kio) Consulté 10038 fois
Erreur.jpg
Erreur.jpg (17.93 Kio) Consulté 10038 fois
Auteur:  parabellum [ 26 Mars 2020 19:23 ]
Sujet du message:  Re: [Store] Climatisation Mitsubishi / Melcloud

@Matthieu366:
De rien! ;-) ça fait plaisir d'aider et de voir que l'on peu être utile aux autres.
Auteur:  parabellum [ 26 Mars 2020 19:31 ]
Sujet du message:  Re: [Store] Climatisation Mitsubishi / Melcloud

@Dominic :
dans eedomus, les parametres doivent etre les suivants:
VAR1: tutut@totto.com:motdepass.....ça c'est bon, j'imagine
VAR2: nomdelaclim.....et pas le nom de ta maison, donc=> Chambre
VAR3: vide ou off...mais pas la valeur par défaut: plugin.parameter.session

en espérant que ça suffise.
pour les ID, ce n'est pas la peine, le script se charge de les recupérer d'apres le nom de ta clim et ton login/psw
Auteur:  Dominic [ 26 Mars 2020 20:38 ]
Sujet du message:  Re: [Store] Climatisation Mitsubishi / Melcloud

parabellum a écrit:@Dominic :
dans eedomus, les parametres doivent etre les suivants:
VAR1: tutut@totto.com:motdepass.....ça c'est bon, j'imagine
VAR2: nomdelaclim.....et pas le nom de ta maison, donc=> Chambre
VAR3: vide ou off...mais pas la valeur par défaut: plugin.parameter.session

en espérant que ça suffise.
pour les ID, ce n'est pas la peine, le script se charge de les recupérer d'apres le nom de ta clim et ton login/psw


@parabellum,
Merci beaucoup pour ton aide mais malheureusement, toujours le même message : Impossible de parser le XML avec la fenêtre suivante :

Je pense que demain j'essayerai de désinstaller puis réinstaller le plugin (en pensant à modifier les lignes de script.
Dominic

Pièces jointes:
Erreur.jpg
Erreur.jpg (17.93 Kio) Consulté 10030 fois
Auteur:  Dominic [ 27 Mars 2020 09:53 ]
Sujet du message:  Re: [Store] Climatisation Mitsubishi / Melcloud

Bonjour,

Toujours pas mieux après réinstallation du plugin et script !
Même message d'erreur.
Je cale !

Dominic
Auteur:  Matthieu366 [ 28 Mars 2020 10:53 ]
Sujet du message:  Re: [Store] Climatisation Mitsubishi / Melcloud

Bonjour @dominic et @parabellum,
En réalité, ca ne fonctionne toujours pas chez moi (contrairement à ce que je pensais). [i]J'y ai cru mais cela viens simplement du fait que j'avais coché la case "Marche" sous Mel Cloud. La clim a donc démarré suite à une légère tempo... :roll: (j'ai honte de moi)

En résumé, je bloque aussi ! J'ai testé plusieurs alternatives ce matin...mais en vain ! J'ai tout vérifié...mais il doit rester une coquille quelques part :oops: Est ce que CHAUFFAGE est le bon dans la partie USAGE ?
Voici ma page :
28-03-2020 10-41-26.jpg
28-03-2020 10-41-26.jpg (50.19 Kio) Consulté 10008 fois

Matthieu
Auteur:  Dominic [ 28 Mars 2020 13:18 ]
Sujet du message:  Re: [Store] Climatisation Mitsubishi / Melcloud

@Matthieu366, j'ai la même configuration que toi. As-tu le même message que moi (pj) ?
Tu as bien changé la ligne de script comme le préconise parabellum ?
Si oui, nous sommes dans le même cas.

Dominic

Pièces jointes:
Erreur.jpg
Erreur.jpg (17.93 Kio) Consulté 10005 fois
Auteur:  Matthieu366 [ 30 Mars 2020 11:33 ]
Sujet du message:  Re: [Store] Climatisation Mitsubishi / Melcloud

Bonjour Dominic, l'ensemble des mes réponses a tes questions est OUI.
Nous en sommes dans le même cas.
Caressons l'espoir qu'un âme charitable nous aide... :?
Auteur:  parabellum [ 30 Mars 2020 19:29 ]
Sujet du message:  Re: [Store] Climatisation Mitsubishi / Melcloud

Bonjour,
à distance je peux pas trop vous aider, par contre je peux vous dire comment essayer de trouver l'origine de votre problème.
l'idée est de mettre dans le code php des lignes de code afin de retourner le valeur des variables au fur et à mesure de leur utilisation et ainsi de trouver ce qui cloche.

est ce que l'authentification se passe bien? est ce que la recuperation des id de batiment et de clim est ok? etc...

pour cela il faut ajouter des lignes du type:
Echo "mavariabletoto=".$mavariabletoto."<br>";

ou s'il s'agit de tableau:
Echo "montableau=<br>";
var_dump($montableau);
Echo "<br>";

c'est long et fastidieux, mais la seule façon de trouver l'origine du problème.
Auteur:  parabellum [ 30 Mars 2020 19:32 ]
Sujet du message:  Re: [Store] Climatisation Mitsubishi / Melcloud

par chance, j'avais gardé le script avec tous mes "echo" et "var_dump"....en les commentant les uns apres les autres, ça vous fera peut etre gagner du temps.
bon courage ;-)



<?php
/**
* Build context header
*
* */
function sdk_getHeader(){
Echo "100. debut. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";

$contextKey = loadVariable('ContextKey');
Echo "101. contextKey = ".$contextKey." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";

return array("X-MitsContextKey: $contextKey", "Content-Type: application/json");

}

/**
* Get Building Id and DeviceId from deviceName
* DeviceNme could be full name or serial number recored in melcloud
*
* */
function sdk_setIds($moduleId, $deviceName, $username, $password){

$json = httpQuery("https://app.melcloud.com/Mitsubishi.Wifi.Client/User/ListDevices", "GET", "", "", sdk_getHeader(), false);
Echo "<br>";
Echo "25. json = ".$json." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";
Echo "<br>";

$result = sdk_json_decode($json);
Echo "26. result = ".$result." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";
Echo "<br>";
var_dump($result,true);
Echo "<br>";

Echo "26bis. result['Success'] = ".$result['Success']." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";
Echo "<br>";


//if (isset($result['Success'])) { /////old
if (isset($result['0'])) {
Echo "27. On va vers sdk_connect($username, $password) xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";

sdk_connect($username, $password);



$json = httpQuery("https://app.melcloud.com/Mitsubishi.Wifi.Client/User/ListDevices", "GET", "", "", sdk_getHeader(), false);
Echo "<br>";
Echo "28. json = ".$json." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";
Echo "<br>";
$result = sdk_json_decode($json);
Echo "29. result = ".$result." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";
Echo "<br>";
var_dump($result);
Echo "<br>";


}

Echo "30. On est la xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";

//$devices = $result[0]['Structure']['Devices']; ///OLD
$devices = $result[0]['Structure']['Areas'][0]['Devices'];

Echo "31. devices = ".$devices." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";
Echo "<br>";
var_dump($devices);
Echo "<br>";

Echo "31_1_. deviceName = ".$deviceName." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";
Echo "31_2_. devices[0]['BuildingID'] = ".$devices[0]['BuildingID']." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";
Echo "31_3_. devices[0]['DeviceName'] = ".$devices[0]['DeviceName']." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";
Echo "31_4_. devices[1]['DeviceName'] = ".$devices[0]['DeviceName']." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";
Echo "31_5_. devices[2]['DeviceName'] = ".$devices[0]['DeviceName']." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";



foreach ($devices as $device){
if ($device['DeviceName'] == $deviceName || $device['SerialNumber'] == $deviceName){
saveVariable($moduleId.'-buildingId', $device['BuildingID']);
saveVariable($moduleId.'-deviceId', $device['DeviceID']);
Echo "31bis. device['BuildingID'] = ".$device['BuildingID']." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";
Echo "31ter. device['DeviceID'] = ".$device['DeviceID']." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";

}
}
Echo "31_fin. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";

}

/**
* Log and set ContextId
*
* */
function sdk_connect( $username, $password ){

Echo "16. Entree dans. sdk_connect( $username, $password ). xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";
$headers = array("Content-Type: application/json");
Echo "17. headers = ".$headers." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";


$jsonTest = '{Email: "' . $username . '", Password: "' . $password . '", Language: 7, AppVersion: "1.15.3.0", Persist: true}';
Echo "18. jsonTest = ".$jsonTest." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";

$relogin = httpQuery('https://app.melcloud.com/Mitsubishi.Wifi.Client/Login/ClientLogin', 'POST', $jsonTest, '', sdk_getHeader(), false);
Echo "19. relogin = ".$relogin." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";

$loginResult = sdk_json_decode($relogin);
Echo "20. loginResult = ".$loginResult." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";
Echo "<br>";
var_dump($loginResult);
Echo "<br>";

if ($loginResult['ErrorId'] == null) {
$contextKey = $loginResult['LoginData']['ContextKey'];
Echo "21. contextKey = ".$contextKey." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";

saveVariable('ContextKey', $contextKey);
} else
echo "Erreur de login " . "<br>";//TODO : handle exceptions*/

}

/**
* Get informations from MelCloud
* rebuild context if needed
* rebuild buildingId and DeviceId if needed
*
* */
function sdk_get($moduleId, $deviceName, $username, $password){

Echo "13. Entree dans sdk_get($moduleId, $deviceName, $username, $password) xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";

//if no contextKey reconnect
$contextKey = loadVariable('ContextKey');
Echo "14. contextKey = ".$contextKey." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";

if ($contextKey == '')
Echo "15. On va vers. sdk_connect($username, $password). xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";
sdk_connect($username, $password);

//get building ids
$buildingId = loadVariable($moduleId.'-buildingId');
Echo "22. buildingId = ".$buildingId." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";

$deviceId = loadVariable($moduleId.'-deviceId');
Echo "23. deviceId = ".$deviceId." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";

if ($buildingId == ''){
Echo "24. On va vers. sdk_setIds($moduleId, $deviceName, $username, $password) xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";
sdk_setIds($moduleId, $deviceName, $username, $password);




$buildingId = loadVariable($moduleId.'-buildingId');
Echo "40. buildingId = ".$buildingId." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";

$deviceId = loadVariable($moduleId.'-deviceId');
Echo "41. deviceId = ".$deviceId." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";


}
$json = httpQuery("https://app.melcloud.com/Mitsubishi.Wifi.Client/Device/Get?id=$deviceId&buildingId=$buildingId", "GET", "", "", sdk_getHeader(), false);
Echo "42. json = ".$json." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";

$result = sdk_json_decode($json);
Echo "43. result = ".$result." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";
Echo "44. result['Success'] = ".$result['Success']." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";

//if (count($device) == 2) {//if no session only 2 datas are raised : { Success: false, ErrorMessage: ""}
if (isset($result['Success']) && $result['Success'] == false) {
sdk_connect($username, $password);
$json = httpQuery("https://app.melcloud.com/Mitsubishi.Wifi.Client/Device/Get?id=$deviceId&buildingId=$buildingId", "GET", "", "", sdk_getHeader(), false);
Echo "45bis. json = ".$json." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";

}
return $json;
}

//get devicename
$deviceName = getArg('deviceName');
Echo "1. deviceName= ".$deviceName." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";

//get User and password
$userPass = getArg('userpass');
Echo "2. userPass = ".$userPass." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";

$tabUserPass = explode(":", $userPass);
Echo "3. tabUserPass = ".$tabUserPass." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";

$username = $tabUserPass[0];
Echo "4. username = ".$username." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";

$password = $tabUserPass[1];
Echo "5. password = ".$password." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";


//get parameters

$onoff = getArg('power', false, "");
Echo "6. onoff = ".$onoff." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";

$fanspeed = getArg('fanspeed', false, "");
Echo "7. fanspeed = ".$fanspeed." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";

$temperature = getArg('temperature', false, "");
Echo "8. temperature = ".$temperature." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";

$mode = getArg('mode', false, '');
Echo "9. mode = ".$mode." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";

/*
* 1 => Heating
* 8 => Auto
* 7 => Fan
* 2 => Drying
* 3 => Cooling
*/

$moduleId = getArg('eedomus_controller_module_id');
Echo "10. moduleId = ".$moduleId." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";

/**
* Session managing
*
* off => nothing recorded
* contextOnly => buildingid and contextid not recorded
* idsOnly => contextKey not recorded
* azzerty => change contextKey to defaut value to test timeouts
*
*/

$resetSession = getArg('session', false, '');
Echo "11. resetSession = ".$resetSession." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";

if ($resetSession == "off") {
Echo "11.bis on passe par ici xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";

saveVariable('ContextKey', '');
saveVariable($moduleId.'-buildingId', '');
saveVariable($moduleId.'-deviceId', '');

}else if ($resetSession == "contextOnly") {
saveVariable($moduleId.'-buildingId', '');
saveVariable($moduleId.'-deviceId', '');

} else if ($resetSession == "idsOnly") {
saveVariable('ContextKey', '');

sdk_connect($username, $password);
} else if ($resetSession == "azerty") {
saveVariable('ContextKey', 'azerty');
}


Echo "12. On va appeler: $json = sdk_get($moduleId, $deviceName, $username, $password) xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";
$json = sdk_get($moduleId, $deviceName, $username, $password);


Echo "50. On va appeler: $device = sdk_json_decode($json) xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";
$device = sdk_json_decode($json);
Echo "51. device = ".$device." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";


$resultat = "";
Echo "52. resultat = ".$resultat." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";


if ($onoff != "") {

$aremplacer = array('"Power":false', '"Power":true');
Echo "53. aremplacer = ".$aremplacer." xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<br>";

$json = str_replace($aremplacer, '"Power":' . $onoff, $json);

$aremplacer = '"EffectiveFlags":' . $device['EffectiveFlags'];
$json = str_replace($aremplacer, '"EffectiveFlags":1', $json);

$aremplacer = '"HasPendingCommand":false';
$json = str_replace($aremplacer, '"HasPendingCommand":true', $json);

$json = httpQuery('https://app.melcloud.com/Mitsubishi.Wifi.Client/Device/SetAta', 'POST', $json, '', sdk_getHeader(), false);

} else if ($fanspeed != "") {

$aremplacer = '"SetFanSpeed":' . $device['SetFanSpeed'];
$json = str_replace($aremplacer, '"SetFanSpeed":' . $fanspeed, $json);

$aremplacer = '"EffectiveFlags":' . $device['EffectiveFlags'];
$json = str_replace($aremplacer, '"EffectiveFlags":8', $json);

$aremplacer = '"HasPendingCommand":false';
$json = str_replace($aremplacer, '"HasPendingCommand":true', $json);

$json = httpQuery('https://app.melcloud.com/Mitsubishi.Wifi.Client/Device/SetAta', 'POST', $json, '', sdk_getHeader(), false);

} else if ($temperature != "") {

$aremplacer = '"SetTemperature":' . $device['SetTemperature'];
$json = str_replace($aremplacer, '"SetTemperature":' . $temperature, $json);

$aremplacer = '"EffectiveFlags":' . $device['EffectiveFlags'];
$json = str_replace($aremplacer, '"EffectiveFlags":4', $json);

$aremplacer = '"HasPendingCommand":false';
$json = str_replace($aremplacer, '"HasPendingCommand":true', $json);

$json = httpQuery('https://app.melcloud.com/Mitsubishi.Wifi.Client/Device/SetAta', 'POST', $json, '', sdk_getHeader(), false);
} else if ($mode != "") {

$aremplacer = '"OperationMode":' . $device['OperationMode'];
$json = str_replace($aremplacer, '"OperationMode":' . $mode, $json);

$aremplacer = '"EffectiveFlags":' . $device['EffectiveFlags'];
$json = str_replace($aremplacer, '"EffectiveFlags":6', $json);

$aremplacer = '"HasPendingCommand":false';
$json = str_replace($aremplacer, '"HasPendingCommand":true', $json);

$json = httpQuery('https://app.melcloud.com/Mitsubishi.Wifi.Client/Device/SetAta', 'POST', $json, '', sdk_getHeader(), false);

}

echo jsonToXML($json);
Auteur:  Dominic [ 30 Mars 2020 19:50 ]
Sujet du message:  Re: [Store] Climatisation Mitsubishi / Melcloud

Merci parabellum,

Je regarde cela demain.
Merci d'avance
Dominic
Auteur:  merguez07 [ 01 Mai 2020 17:57 ]
Sujet du message:  Re: [Store] Climatisation Mitsubishi / Melcloud

Effectivement ce plugin n'est pas plug and play. Je viens de l'installer et ça ne marche po...

je debuggue :D
Auteur:  Dominic [ 01 Mai 2020 19:49 ]
Sujet du message:  Re: [Store] Climatisation Mitsubishi / Melcloud

@Merguez07, j'avais un peu mis de côté mais si tu trouves quelque chose, je suis preneur. Je peux faire des tests...
Merci
Dominic
Auteur:  merguez07 [ 01 Mai 2020 20:12 ]
Sujet du message:  Re: [Store] Climatisation Mitsubishi / Melcloud

Salut Dominic,

chez moi il y a déjà un problème entre le résultat des requêtes.

par exemple si je fais
Code : Tout sélectionner
sdk_connect($username, $password);
$json = httpQuery("https://app.melcloud.com/Mitsubishi.Wifi.Client/User/ListDevices", "GET", "", "", sdk_getHeader(), false);
$result = sdk_json_decode($json);


j'ai bien des résultats qui démontre que la requête fonctionne. Par contre le format ne permet pas de rappatrier quelque chose dans l'expression
Code : Tout sélectionner
$devices = $result[0]['Structure']['Devices'];


peut être que mitsubishi a changé la forme des données ce qui explique le problème

As tu un lien vers leur API ?
Auteur:  Dominic [ 02 Mai 2020 08:32 ]
Sujet du message:  Re: [Store] Climatisation Mitsubishi / Melcloud

merguez07 a écrit:
As tu un lien vers leur API ?


Salut Merguez07,

Non je n'ai pas de lien vers leur API.
De mon côté, j'ai le message suivant :

Pièces jointes:
Message.jpg
Message.jpg (18.94 Kio) Consulté 9495 fois
Auteur:  merguez07 [ 02 Mai 2020 08:45 ]
Sujet du message:  Re: [Store] Climatisation Mitsubishi / Melcloud

pour être plus précis

quand on fait la requête
Code : Tout sélectionner
sdk_connect($username, $password);
$json = httpQuery("https://app.melcloud.com/Mitsubishi.Wifi.Client/User/ListDevices", "GET", "", "", sdk_getHeader(), false);


le json obtenu est de la forme :
Capture.JPG
Capture.JPG (86.34 Kio) Consulté 9494 fois


On voit bien que le code suivant
Code : Tout sélectionner
$devices = $result[0]['Structure']['Devices'];


ne va rien rappatrier puisqu'en fait toutes les données , du moins chez moi, se trouvent dans
Code : Tout sélectionner
$devices = $result['Structure']['Floors'][0]['Devices'];


A suivre....
Auteur:  merguez07 [ 04 Mai 2020 08:41 ]
Sujet du message:  Re: [Store] Climatisation Mitsubishi / Melcloud

bon je me suis fait une modif qui fonctionne chez moi.
A vous de tester et de me dire (il suffit de remplacer l'ancien script par celui ci dessous)

Code : Tout sélectionner
<?php

/******modifié par Merguez07
 ****** le 04 Mai 2020*****/


function sdk_getHeader(){
    $contextKey = loadVariable('ContextKey');
    return array("X-MitsContextKey: $contextKey", "Content-Type: application/json");
}

/**
 * Get Building Id and DeviceId from deviceName
 * DeviceNme could be full name or serial number recored in melcloud
 *
 * */
function sdk_setIds($moduleId, $deviceName, $username, $password){


    $json = httpQuery("https://app.melcloud.com/Mitsubishi.Wifi.Client/User/ListDevices?id=227688", "GET", "", "", sdk_getHeader(), false);
    $result = sdk_json_decode($json);


    if (isset($result['Success'])) {
        sdk_connect($username, $password);
        $json = httpQuery("https://app.melcloud.com/Mitsubishi.Wifi.Client/User/ListDevices?id=227688", "GET", "", "", sdk_getHeader(), false);
        $result = sdk_json_decode($json);
    }
   
    $Floors=$result[0]['Structure']['Floors'];
    foreach ($Floors as $Floor){
        $Tdevices=$Floor['Devices'];
        foreach ($Tdevices as $device){
            $devices[]=$device;
        }
    }   

    foreach ($devices as $device){

        if ($device['DeviceName'] == $deviceName || $device['SerialNumber'] == $deviceName){
            saveVariable($moduleId.'-buildingId', $device['BuildingID']);
            saveVariable($moduleId.'-deviceId', $device['DeviceID']);
        }
    }
}

/**
 * Log and set ContextId
 *
 * */
function sdk_connect( $username, $password ){

   
    $headers    = sdk_getHeader();
    $jsonTest   = '{Email: "' . $username . '", Password: "' . $password . '", Language: 7, AppVersion: "1.15.3.0", Persist: true}';
    $login      = httpQuery('https://app.melcloud.com/Mitsubishi.Wifi.Client/Login/ClientLogin', 'POST', $jsonTest, '', $headers, false);
    $loginResult= sdk_json_decode($login);

    if ($loginResult['ErrorId'] == null) {
        $contextKey = $loginResult['LoginData']['ContextKey'];
        saveVariable('ContextKey', $contextKey);
    } else
        echo "Erreur de login " . "<br>";//TODO : handle exceptions*/
}

/**
 * Get informations from MelCloud
 * rebuild context if needed
 * rebuild buildingId and DeviceId if needed
 *
 * */
function sdk_get($moduleId, $deviceName, $username, $password){

    $contextKey = loadVariable('ContextKey');
    if ($contextKey == '') sdk_connect($username, $password);

    //get building ids
    $buildingId = loadVariable($moduleId.'-buildingId');
    $deviceId = loadVariable($moduleId.'-deviceId');

    if ($buildingId == ''){
        sdk_setIds($moduleId, $deviceName, $username, $password);
        $buildingId = loadVariable($moduleId.'-buildingId');
        $deviceId = loadVariable($moduleId.'-deviceId');
    }

    $json = httpQuery("https://app.melcloud.com/Mitsubishi.Wifi.Client/Device/Get?id=$deviceId&buildingID=$buildingId", "GET", "", "", sdk_getHeader(), false);

    $result = sdk_json_decode($json);

    //if (count($device) == 2) {//if no session only 2 datas are raised : { Success: false, ErrorMessage: ""}
    if (isset($result['Success']) &&  $result['Success'] == false) {
        sdk_connect($username, $password);
        $json = httpQuery("https://app.melcloud.com/Mitsubishi.Wifi.Client/Device/Get?id=$deviceId&buildingID=$buildingId", "GET", "", "", sdk_getHeader(), false);
    }

    return $json;

}


$deviceName     = getArg('deviceName');

$userPass       = getArg('userpass');
$tabUserPass    = explode(":", $userPass);
$username       = $tabUserPass[0];
$password       = $tabUserPass[1];

//get parameters

$onoff          = getArg('power', false, "");
$fanspeed       = getArg('fanspeed', false, "");
$temperature    = getArg('temperature', false, "");
$mode           = getArg('mode', false, '');
/*
 * 1 => Heating
 * 8 => Auto
 * 7 => Fan
 * 2 => Drying
 * 3 => Cooling
 */

$moduleId       =  getArg('eedomus_controller_module_id');

/**
 * Session managing
 *
 * off => nothing recorded
 * contextOnly => buildingid and contextid not recorded
 * idsOnly => contextKey not recorded
 * azzerty => change contextKey to defaut value to test timeouts
 *
 */

$resetSession = getArg('session', false, '');
if ($resetSession == "off") {
    saveVariable('ContextKey', '');
    saveVariable($moduleId.'-buildingId', '');
    saveVariable($moduleId.'-deviceId', '');

}else if ($resetSession == "contextOnly") {
    saveVariable($moduleId.'-buildingId', '');
    saveVariable($moduleId.'-deviceId', '');

} else if ($resetSession == "idsOnly") {
    saveVariable('ContextKey', '');

    sdk_connect($username, $password);
} else if ($resetSession == "azerty") {
    saveVariable('ContextKey', 'azerty');
}

$json = sdk_get($moduleId, $deviceName, $username, $password);


$device = sdk_json_decode($json);

$resultat = "";

if ($onoff != "") {

    $aremplacer = array('"Power":false', '"Power":true');
    $json = str_replace($aremplacer, '"Power":' . $onoff, $json);

    $aremplacer = '"EffectiveFlags":' . $device['EffectiveFlags'];
    $json = str_replace($aremplacer, '"EffectiveFlags":1', $json);

    $aremplacer = '"HasPendingCommand":false';
    $json = str_replace($aremplacer, '"HasPendingCommand":true', $json);

    $json = httpQuery('https://app.melcloud.com/Mitsubishi.Wifi.Client/Device/SetAta', 'POST', $json, '', sdk_getHeader(), false);

} else if ($fanspeed != "") {

    $aremplacer = '"SetFanSpeed":' . $device['SetFanSpeed'];
    $json = str_replace($aremplacer, '"SetFanSpeed":' . $fanspeed, $json);

    $aremplacer = '"EffectiveFlags":' . $device['EffectiveFlags'];
    $json = str_replace($aremplacer, '"EffectiveFlags":8', $json);

    $aremplacer = '"HasPendingCommand":false';
    $json = str_replace($aremplacer, '"HasPendingCommand":true', $json);

    $json = httpQuery('https://app.melcloud.com/Mitsubishi.Wifi.Client/Device/SetAta', 'POST', $json, '', sdk_getHeader(), false);

} else if ($temperature != "") {

    $aremplacer = '"SetTemperature":' . $device['SetTemperature'];
    $json = str_replace($aremplacer, '"SetTemperature":' . $temperature, $json);

    $aremplacer = '"EffectiveFlags":' . $device['EffectiveFlags'];
    $json = str_replace($aremplacer, '"EffectiveFlags":4', $json);

    $aremplacer = '"HasPendingCommand":false';
    $json = str_replace($aremplacer, '"HasPendingCommand":true', $json);

    $json = httpQuery('https://app.melcloud.com/Mitsubishi.Wifi.Client/Device/SetAta', 'POST', $json, '', sdk_getHeader(), false);
} else if ($mode != "") {

    $aremplacer = '"OperationMode":' . $device['OperationMode'];
    $json = str_replace($aremplacer, '"OperationMode":' . $mode, $json);

    $aremplacer = '"EffectiveFlags":' . $device['EffectiveFlags'];
    $json = str_replace($aremplacer, '"EffectiveFlags":6', $json);

    $aremplacer = '"HasPendingCommand":false';
    $json = str_replace($aremplacer, '"HasPendingCommand":true', $json);

    $json = httpQuery('https://app.melcloud.com/Mitsubishi.Wifi.Client/Device/SetAta', 'POST', $json, '', sdk_getHeader(), false);

}

echo jsonToXML($json);

Auteur:  Dominic [ 04 Mai 2020 10:05 ]
Sujet du message:  Re: [Store] Climatisation Mitsubishi / Melcloud

merguez07 a écrit:bon je me suis fait une modif qui fonctionne chez moi.
A vous de tester et de me dire (il suffit de remplacer l'ancien script par celui ci dessous)

[/code]


Salut Merguez,

Merci, j'essaye ça de mon côté, mais ce ne sera pas avant ce soir je pense.
Je te tiens au courant.
Merci
Dominic
Auteur:  Dominic [ 05 Mai 2020 08:30 ]
Sujet du message:  Re: [Store] Climatisation Mitsubishi / Melcloud

Salut Merguez,

Je viens de faire le test en modifiant le script mais j'ai toujours le même message :
Impossible de parser le XML

Par contre, je vois que tu as renseigné un ID en dur dans le script, il correspond à quoi ?

Merci

Dominic
Page 3 sur 12 Le fuseau horaire est UTC+1 heure