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

PAC Mitsibishi
https://forum.eedomus.com/viewtopic.php?f=15&t=5353
« Précédent  Page 2 sur 3  Suivant »
Auteur:  g4fa [ 04 Sep 2017 07:12 ]
Sujet du message:  Re: PAC Mitsibishi

Salut

Peux tu stp lancer dans un navigateur l'url suivante
http://ip raspberry/melcloud_eedomus_pi.php

Normalement il doit te renvoyer "Mauvais Paramètres"
Auteur:  yahyah [ 04 Sep 2017 17:11 ]
Sujet du message:  Re: PAC Mitsibishi

Salut,

Oui j'ai bien une erreur http 500.

Merci pour ton aide
Auteur:  la mouche [ 05 Sep 2017 10:41 ]
Sujet du message:  Re: PAC Mitsibishi

Bonjour a tous , absent pour des raisons pro me revoilà , avec l'autorisation de Floman321 voici le script qu'il a mis au point et qui fonctionne parfaitement pour moi , a placer sur l'Eedomus après avoir modifier les info vous concernant .
Code : Tout sélectionner
<?

$headers = array("X-MitsContextKey: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","Content-Type: application/json");

$devideid = getArg('deviceid');
$buildid = getArg('buildid');

$onoff = getArg('power',false,"");
$fanspeed = getArg('fanspeed',false,"");
$temperature = getArg('temperature',false,"");
$mode = getArg('mode',false,'');

$json = httpQuery("https://app.melcloud.com/Mitsubishi.Wifi.Client/Device/Get?id=$devideid&buildingID=$buildid","GET","","",$headers,false);
$device = sdk_json_decode($json);

// Metttre a jour le retour d'etat de la clim concernée
switch ($devideid) {
case "XXXXXX":

// remplacer les 999 par le code API du peripherique
setValue(999999,$device['SetTemperature']); // temperature
setValue(999999,$device['SetFanSpeed']); // vitesse ventilateur

if ($device['Power'] == 'true'){
setValue(999999,1); // true ou false
}else{
setValue(999999,0); // true ou false
}

setValue(999999,$device['RoomTemperature']); // temperature de la piece
setValue(999999,$device['OperationMode']); // mode chauffage voir mes messages

break;
case "XXXXX":

if ($device['Power'] == 'true'){
setValue(999999,1); // true ou false
}else{
setValue(999999,0); // true ou false
}

// remplacer les 999 par le code API du peripherique
setValue(999999,$device['SetTemperature']); // temperature
setValue(999999,$device['SetFanSpeed']); // vitesse ventilateur
setValue(999999,$device['RoomTemperature']); // temperature de la piece
setValue(999999,$device['OperationMode']); // mode chauffage voir mes messages

break;
case "XXXXX":

if ($device['Power'] == 'true'){
setValue(999999,1); // true ou false
}else{
setValue(999999,0); // true ou false
}

// remplacer les 999 par le code API du peripherique
setValue(999999,$device['SetTemperature']); // temperature
setValue(999999,$device['SetFanSpeed']); // vitesse ventilateur
setValue(999999,$device['RoomTemperature']); // temperature de la piece
setValue(999999,$device['OperationMode']); // mode chauffage voir mes messages

break;
case "XXXXX":

if ($device['Power'] == 'true'){
setValue(999999,1); // true ou false
}else{
setValue(999999,0); // true ou false
}

// remplacer les 999 par le code API du peripherique
setValue(999999,$device['SetTemperature']); // temperature
setValue(999999,$device['SetFanSpeed']); // vitesse ventilateur
setValue(999999,$device['RoomTemperature']); // temperature de la piece
setValue(999999,$device['OperationMode']); // mode chauffage voir mes messages

break;
}




$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);

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

}


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);

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

}

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);

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

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);

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

}

// Metttre a jour le retour d'etat de la clim concernée, oui si modif de power ou autres
if ($resultat != ""){

$contenu = sdk_json_decode($resultat );

// remplacer les 999 par le code API du peripherique
setValue(999999,$contenu['NextCommunication']); // prochaine synchro avec la clim


switch ($devideid) {
case "XXXXX":

if ($device['Power'] == 'true'){
setValue(999999,1); // true ou false
}else{
setValue(999999,0); // true ou false
}

// remplacer les 999 par le code API du peripherique
setValue(999999,$contenu['SetTemperature']); // temperature
setValue(999999,$contenu['SetFanSpeed']); // vitesse ventilateur
setValue(999999,$contenu['RoomTemperature']); // temperature de la piece
setValue(999999,$contenu['OperationMode']); // mode chauffage voir mes messages

break;
case "XXXXX":

if ($device['Power'] == 'true'){
setValue(999999,1); // true ou false
}else{
setValue(999999,0); // true ou false
}

// remplacer les 999 par le code API du peripherique
setValue(999999,$contenu['SetTemperature']); // temperature
setValue(999999,$contenu['SetFanSpeed']); // vitesse ventilateur
setValue(999999,$contenu['RoomTemperature']); // temperature de la piece
setValue(999999,$contenu['OperationMode']); // mode chauffage voir mes messages

break;
case "XXXXX":

if ($device['Power'] == 'true'){
setValue(999999,1); // true ou false
}else{
setValue(999999,0); // true ou false
}

// remplacer les 999 par le code API du peripherique
setValue(999999,$contenu['SetTemperature']); // temperature
setValue(999999,$contenu['SetFanSpeed']); // vitesse ventilateur
setValue(999999,$contenu['RoomTemperature']); // temperature de la piece
setValue(999999,$contenu['OperationMode']); // mode chauffage voir mes messages

break;
case "XXXXX":

if ($device['Power'] == 'true'){
setValue(999999,1); // true ou false
}else{
setValue(999999,0); // true ou false
}

// remplacer les 999 par le code API du peripherique
setValue(999999,$contenu['SetTemperature']); // temperature
setValue(999999,$contenu['SetFanSpeed']); // vitesse ventilateur
setValue(999999,$contenu['RoomTemperature']); // temperature de la piece
setValue(999999,$contenu['OperationMode']); // mode chauffage voir mes messages

break;
}

}

?>

Voici un exemple a mettre dans l'url de votre actionneur de la eedomus pour allumer un de vos split
Code : Tout sélectionner
http://IP....../script/?exec=mitsuonoff.php&deviceid=XXXXX&buildid=YYYYY&power=true


j'espere que sela vous aidera et j'en profite pour remercier encore Floman321 , un grand du clavier ;)
Auteur:  lesltx [ 14 Sep 2017 23:42 ]
Sujet du message:  Re: PAC Mitsibishi

Bonjour,

si ça peut aider mGeek a fait du reversé engineering sur la communication avec melcloud
http://mgeek.fr/blog/un-peu-de-reverse- ... r-melcloud

Bien cordialement
Les
Auteur:  Mike88200 [ 18 Mars 2018 19:04 ]
Sujet du message:  Re: PAC Mitsibishi

Bonsoir, voila je suis interessé pour mettre ma clim sur eedomus mais je n'y arrive pas.
Quand je test sur eedomus Xpath
http://192.168.0.**/melcloud_eedomus_pi.php?action=read
<?xml version="1.0" encoding="utf8" ?><******** ><Chambre><BuildingID>******</BuildingID><Power>false</Power><RoomTemperature>18.5</RoomTemperature><SetTemperature>20</SetTemperature><FanSpeed>0</FanSpeed><OperationMode>1</OperationMode><DeviceID>*****</DeviceID></Chambre><Salon><BuildingID>*******</BuildingID><Power>false</Power><RoomTemperature>23.5</RoomTemperature><SetTemperature>21.5</SetTemperature><FanSpeed>0</FanSpeed><OperationMode>1</OperationMode><DeviceID>*****</DeviceID></Salon></******* >

Mais quand j'essaye de le configurer avec la ligne;
http://192.168.0.23/melcloud_eedomus_pi.php et a coter ?action=Power&valaction=false&deviceid=[VAR1]
Celui ci ne marche pas ... Erreur lors authentification
et aussi Clim Etat Chambre Parent en erreur: [Impossible de parser le XML]. Aperçu du contenu.

Aperçu
XML error:

<!DOCTYPE html>

<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Error</t [...]

Merci de m'aider si vous le pouvez... je ne m'y connais pas trop en programme
Auteur:  Thib13 [ 10 Juin 2018 18:27 ]
Sujet du message:  Re: PAC Mitsibishi

Hello,

Je viens d'intégrer le module MelCloud et j'ai le même message d'erreur ... Je tourne un peu en rond, je me borne a me dire que je n'ai pas les bons paramètres de Building Id / device Id mais je suis presque sur d'avoir les bonnes valeurs ... bref si quelqu'un a le script qui tourne et qui a un petit retour a faire, je suis preneur :)
Auteur:  Thib13 [ 10 Août 2018 09:17 ]
Sujet du message:  Re: PAC Mitsibishi

J'up le sujet, j'ai refait pas mal de tests (en mettant le nom, le device id, le building id, différentes combinaisons de ces données) mais toujours rien, la clim reste muette :/ j'en suis presque a me demander s'il n'y a pas une bride sur l'API du melcloud maintenant.
Si quelqu'un a réussi récemment ou si certains ayant eu le problème ont avancé ...
Auteur:  iclems [ 14 Fév 2019 14:57 ]
Sujet du message:  Re: PAC Mitsibishi

Bonjour à tous,

Etant moi-même développeur et nouvellement propriétaire d'une PAC Mitsubishi, j'ai recherché la cause du problème et l'ai réglé ce matin. Je devrais pouvoir proposer un correctif pour tous dans les prochains jours. L'API du fabricant avait légèrement évolué.

Question pour vous : arrivez-vous depuis MelCloud à activer le mode silence ? Pour moi, impossible, je n'ai que des valeurs standards de niveau de ventilateur.
Auteur:  Orangina_L [ 04 Mars 2020 22:27 ]
Sujet du message:  Re: PAC Mitsibishi

Bonjour,

Cela fonctionne-t-il toujours ?

Merci
Auteur:  Khoen [ 07 Mai 2020 12:05 ]
Sujet du message:  Re: PAC Mitsibishi

Oui, je viens de mon configurer mon PAC dans MELCloud & eedomus et tout marche :)
Auteur:  merguez07 [ 07 Mai 2020 12:20 ]
Sujet du message:  Re: PAC Mitsibishi

Khoen a écrit:Oui, je viens de mon configurer mon PAC dans MELCloud & eedomus et tout marche


Avec le plugin du store ? ce serait surprenant vu qu'il ne semble marcher chez personne
viewtopic.php?f=50&t=6982&start=60#p89766
Auteur:  Kitor [ 10 Avr 2021 07:23 ]
Sujet du message:  Re: PAC Mitsibishi

Script Génial qui correspond à mon attente, par contre,
Serait-il possible de lancer via ce script un scénario préréglé sur Melcloud.
Car si je lance à la suite une modification de température puis un On/OFF la modification n'est pas prise en compte.
N’étant pas en local, je ne peux pas accéder au script pour le modifier moi-même
Auteur:  merguez07 [ 10 Avr 2021 07:57 ]
Sujet du message:  Re: PAC Mitsibishi

bonjour Kitor,

il y a pas mal de demandes complémentaires sur le topic viewtopic.php?f=50&t=6982&hilit=+melcloud

Il faut que je me replonge sur le sujet pour voir ce qu'il est possible de faire
Auteur:  merguez07 [ 10 Avr 2021 17:28 ]
Sujet du message:  Re: PAC Mitsibishi

Re salut Kitor

j'ai modifié le script pour la prise en compte de plusieurs actions mais, avant une mise à jour officielle, j'ai besoin d'un beta testeur

Y a t-il un volontaire ?

le script :
Code : Tout sélectionner
<?php

/*
**** modifié par Merguez07 le 08 Mai 2020
**** Indice 1.4 du 17/10/20---Merguez07---correction d'un bug
**** Indice 1.5 du 03/01/21---Merguez07---prise en compte des différentes structures d'info
**** Indice 1.6 du 13/04/21---Merguez07---prise en compte de plusieurs commandes simultanées
                                          Ajout des commandes des ventelles verticales et horizontales   
*/


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?", "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?", "GET", "", "", sdk_getHeader(), false);
        $result = sdk_json_decode($json);
    }

    $devices=$result[0]['Structure']['Devices'];

    $Floors=$result[0]['Structure']['Floors'];
    if (!empty($Floors)) {
        foreach ($Floors as $Floor){
            $Tdevices=$Floor['Devices'];
            foreach ($Tdevices as $device)   $devices[]=$device;
        }
    }
    $Areas=$result[0]['Structure']['Areas'];
    if (!empty($Areas)) {
        foreach ($Areas as $Area){
            $Tdevices=$Area['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, "");
$vaneh          = getArg('vaneh'       , false, "");
$vanev          = getArg('vanev'       , 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);

$EffectiveFlags=0;
if ($onoff       != "")     $EffectiveFlags = 1;
if ($fanspeed    != "")     $EffectiveFlags = 8;
if ($temperature != "")     $EffectiveFlags = 4;
if ($mode        != "")     $EffectiveFlags = 6;
if ($vaneh       != "")     $EffectiveFlags = 256;
if ($vanev       != "")     $EffectiveFlags = 16;



if ($EffectiveFlags!=0) {
    $LastCommunication       = $device['LastCommunication'];
    $save_json               = LoadVariable($moduleId.'Lastjson');
    $save_device             = sdk_json_decode($save_json);
    $save_LastCommunication  = $save_device['LastCommunication'];
    $new_EffectiveFlags      = $EffectiveFlags;
    if ($LastCommunication == $save_LastCommunication) { // on a un ordre supplémentaire à faire passer en plus du premier
      $save_EffectiveFlags = $save_device['EffectiveFlags'];
      if ($save_EffectiveFlags != $new_EffectiveFlags) {
        $new_EffectiveFlags += $save_EffectiveFlags;
        $json                = $save_json;
      }
    }
   
    //$device = sdk_json_decode($json);
    $aremplacer = '"EffectiveFlags":' . $device['EffectiveFlags'];
    $json       = str_replace($aremplacer, '"EffectiveFlags":'.$new_EffectiveFlags, $json);
    saveVariable($moduleId.'Lastjson',  $json);

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

    if ($EffectiveFlags == 1) {
      $aremplacer = array('"Power":false', '"Power":true');
      $json = str_replace($aremplacer, '"Power":' . $onoff, $json);
    }
    if ($EffectiveFlags == 256) {
      $aremplacer = '"VaneHorizontal":' . $device['VaneHorizontal'];
      $json = str_replace($aremplacer, '"VaneHorizontal":' . $vaneh, $json);
    }
    if ($EffectiveFlags == 16) {
      $aremplacer = '"VaneVertical":' . $device['VaneVertical'];
      $json = str_replace($aremplacer, '"VaneVertical":' . $vanev, $json);
    }
    if ($EffectiveFlags == 4) {
      $aremplacer = '"SetTemperature":' . $device['SetTemperature'];
      $json = str_replace($aremplacer, '"SetTemperature":' . $temperature, $json);
    }
    if ($EffectiveFlags == 6) {
      $aremplacer = '"OperationMode":' . $device['OperationMode'];
      $json = str_replace($aremplacer, '"OperationMode":' . $mode, $json);
    }
    if ($EffectiveFlags == 8) {
      $aremplacer = '"SetFanSpeed":' . $device['SetFanSpeed'];
      $json = str_replace($aremplacer, '"SetFanSpeed":' . $fanspeed, $json);
    }

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

echo jsonToXML($json);


Auteur:  Kitor [ 12 Avr 2021 07:32 ]
Sujet du message:  Re: PAC Mitsibishi

Évidement je suis volontaire Merguez.
D'autre part, j'ai remarqué que on peux récupérer les infos météos par MelCloud. peux être que je vais utiliser ceux-ci, cela éviterais d'utiliser mon api météo
Auteur:  merguez07 [ 13 Avr 2021 10:06 ]
Sujet du message:  Re: PAC Mitsibishi

pour info je viens de compléter le script pour gérer les ventelles
Auteur:  BRUNO.LUCAT [ 05 Mai 2021 11:34 ]
Sujet du message:  Re: PAC Mitsibishi

Bonjour à tous,

Je n'arrive pas à me connecter.
Lorsque je fais le test, j'ai :ERREUR: Valeur lue vide (voir ci-dessous) le détail.
Pourtant j'utilise bien @mail:pwd en VAR1 et le nom de l'équipement ClimParents en VAR2. VAR3 est vide.
Merci pour vos lumières....

--------------------
ML error:

<!DOCTYPE html>

<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Error</title>
<style type="text/css">
BODY, P {
font-family: sans-serif;
}
</style>
</head>
<body>
<div style="text-align: center">
<a href="http://www.melcloud.com"><img style="max-width: 100%;" src="/css/assets/logo-wide.png" alt="MELCloud" /></a>
</div>
<h1>Unexpected Error</h1>

<p>An unexpected error has occurred.
<a href="http://www.melcloud.com">Please return to the home page.</a></p>
<p>Diagnostic information: Unexpected Internal Error 176</p>

</body>
</html>
Auteur:  merguez07 [ 05 Mai 2021 11:41 ]
Sujet du message:  Re: PAC Mitsibishi

BRUNO.LUCAT a écrit:Merci pour vos lumières....


bizarre ton erreur.
je peux regarder de chez moi si tu me donnes tes identifiants en mp
Auteur:  merguez07 [ 25 Mai 2021 18:02 ]
Sujet du message:  Re: PAC Mitsibishi

Avec ce nouveau script ça devrait couvrir tous les cas de figure
Code : Tout sélectionner
<?php

/*
**** modifié par Merguez07 le 08 Mai 2020
**** Indice 1.4 du 17/10/20---Merguez07---correction d'un bug
**** Indice 1.5 du 03/01/21---Merguez07---prise en compte des différentes structures d'info
**** Indice 1.6 du 15/04/21---Merguez07---prise en compte de plusieurs commandes simultanées
                                          Ajout des commandes des ventelles verticales et horizontales
                                          Ajout d'un cache de 1mn
**** Indice 1.7 du 25/05/21---Merguez07---modification de la recherche du deviceID et BuildingID                                         
*/


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

/**
* Get Building Id and DeviceId from deviceName
* $tab_Device contains the values
**/

function sdk_array_recursive($tab = array(),$search, $niveau = 0,$path=array()) {

global $tab_Device;

   foreach($tab as $key => $value) {
        $path[$niveau]=$key;
        if((gettype( $value ) === "array") ) { //|| (count($value)!=0)
         sdk_array_recursive($value, $search,$niveau + 1,$path );
         continue;
      }
      if ($value===$search) {
            $tab_Device = $tab;
            break;
        }
   }
}

function sdk_setIds($moduleId, $deviceName, $username, $password){

global $tab_Device;
   
    $json   = httpQuery("https://app.melcloud.com/Mitsubishi.Wifi.Client/User/ListDevices?", "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?", "GET", "", "", sdk_getHeader(), false);
        $result = sdk_json_decode($json);
    }
   
    sdk_array_recursive($result,$deviceName );
/*
echo "DeviceName = ".$tab_Device["DeviceName"];
echo "DeviceID = ".$tab_Device["DeviceID"];
echo "BuildingID = ".$tab_Device["BuildingID"];*/

    saveVariable($moduleId.'-buildingId', $tab_Device["BuildingID"]);
    saveVariable($moduleId.'-deviceId'  , $tab_Device["DeviceID"]);
}


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>";
}


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, "");
$vaneh          = getArg('vaneh'       , false, "");
$vanev          = getArg('vanev'       , false, "");
$moduleId       = getArg('eedomus_controller_module_id');

$EffectiveFlags=0;
if ($onoff       != "")     $EffectiveFlags = 1;
if ($fanspeed    != "")     $EffectiveFlags = 8;
if ($temperature != "")     $EffectiveFlags = 4;
if ($mode        != "")     $EffectiveFlags = 6;
if ($vaneh       != "")     $EffectiveFlags = 256;
if ($vanev       != "")     $EffectiveFlags = 16;


/**
* 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');
}


//Gestion du cache
$CACHE_DURATION   = 1; // minutes
$last_xml_success = loadVariable(str_replace(" ","",$deviceName).'last_xml_success');
if (((time() - $last_xml_success) / 60 < $CACHE_DURATION)&&($EffectiveFlags==0)){
    sdk_header('text/xml');
    $cached_xml = loadVariable(str_replace(" ","",$deviceName).'cached_xml');
    echo $cached_xml;
    die();
}


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

if ($EffectiveFlags!=0) {
    $LastCommunication       = $device['LastCommunication'];
    $save_json               = LoadVariable($moduleId.'Lastjson');
    $save_device             = sdk_json_decode($save_json);
    $save_LastCommunication  = $save_device['LastCommunication'];
    $new_EffectiveFlags      = $EffectiveFlags;
    if ($LastCommunication == $save_LastCommunication) { // on a un ordre supplémentaire à faire passer en plus du premier
      $save_EffectiveFlags = $save_device['EffectiveFlags'];
      if ($save_EffectiveFlags != $new_EffectiveFlags) {
        $new_EffectiveFlags += $save_EffectiveFlags;
        $json                = $save_json;
      }
    }

    $aremplacer = '"EffectiveFlags":' . $device['EffectiveFlags'];
    $json       = str_replace($aremplacer, '"EffectiveFlags":'.$new_EffectiveFlags, $json);
    saveVariable($moduleId.'Lastjson',  $json);
    $json = str_replace('"HasPendingCommand":false', '"HasPendingCommand":true', $json);

    if ($EffectiveFlags == 1) {
      $aremplacer = array('"Power":false', '"Power":true');
      $json = str_replace($aremplacer, '"Power":' . $onoff, $json);
    }
    if ($EffectiveFlags == 256) {
      $aremplacer = '"VaneHorizontal":' . $device['VaneHorizontal'];
      $json = str_replace($aremplacer, '"VaneHorizontal":' . $vaneh, $json);
    }
    if ($EffectiveFlags == 16) {
      $aremplacer = '"VaneVertical":' . $device['VaneVertical'];
      $json = str_replace($aremplacer, '"VaneVertical":' . $vanev, $json);
    }
    if ($EffectiveFlags == 4) {
      $aremplacer = '"SetTemperature":' . $device['SetTemperature'];
      $json = str_replace($aremplacer, '"SetTemperature":' . $temperature, $json);
    }
    if ($EffectiveFlags == 6) {
      $aremplacer = '"OperationMode":' . $device['OperationMode'];
      $json = str_replace($aremplacer, '"OperationMode":' . $mode, $json);
    }
    if ($EffectiveFlags == 8) {
      $aremplacer = '"SetFanSpeed":' . $device['SetFanSpeed'];
      $json = str_replace($aremplacer, '"SetFanSpeed":' . $fanspeed, $json);
    }

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

$aremplacer = '"EffectiveFlags"';
$json       = str_replace($aremplacer, '"cache":0,"EffectiveFlags"', $json);
$json       = htmlentities($json, ENT_QUOTES, "UTF-8");


$cached_xml = jsonToXML($json);
echo $cached_xml;
$cached_xml = str_replace('<cache>0</cache>', '<cache>1</cache>', $cached_xml);
saveVariable(str_replace(" ","",$deviceName).'cached_xml', $cached_xml);
saveVariable(str_replace(" ","",$deviceName).'last_xml_success', time());
Auteur:  Georges F [ 12 Oct 2023 10:50 ]
Sujet du message:  Re: PAC Mitsibishi

merguez07 a écrit:
Khoen a écrit:Oui, je viens de mon configurer mon PAC dans MELCloud & eedomus et tout marche


Bonjour, ou avez vous récupéré l'identifiant dans le script en faisant F12?
Je me casse les yeux dessus impossible de trouver le mien, je parle de ce que l'on renseigne sur la deuxième ligne après le login/mot de passe.

Cordialement
Page 2 sur 3 Le fuseau horaire est UTC+1 heure