PAC Mitsibishi

Capteurs et actionneurs HTTP

Re: PAC Mitsibishi

Messagepar g4fa » 04 Sep 2017 07:12

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"
g4fa
 
Messages : 13
Inscription : 06 Mars 2016

Re: PAC Mitsibishi

Messagepar yahyah » 04 Sep 2017 17:11

Salut,

Oui j'ai bien une erreur http 500.

Merci pour ton aide
yahyah
 
Messages : 17
Inscription : 04 Sep 2015

Re: PAC Mitsibishi

Messagepar la mouche » 05 Sep 2017 10:41

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 ;)
la mouche
 
Messages : 18
Inscription : 11 Mars 2017

Re: PAC Mitsibishi

Messagepar lesltx » 14 Sep 2017 23:42

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
lesltx
 
Messages : 1
Inscription : 14 Sep 2017

Re: PAC Mitsibishi

Messagepar Mike88200 » 18 Mars 2018 19:04

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
Mike88200
 
Messages : 63
Inscription : 23 Déc 2017

Re: PAC Mitsibishi

Messagepar Thib13 » 10 Juin 2018 18:27

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 :)
Thib13
 
Messages : 26
Inscription : 22 Avr 2016

Re: PAC Mitsibishi

Messagepar Thib13 » 10 Août 2018 09:17

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é ...
Thib13
 
Messages : 26
Inscription : 22 Avr 2016

Re: PAC Mitsibishi

Messagepar iclems » 14 Fév 2019 14:57

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.
iclems
 
Messages : 7
Inscription : 14 Fév 2019

Re: PAC Mitsibishi

Messagepar Orangina_L » 04 Mars 2020 22:27

Bonjour,

Cela fonctionne-t-il toujours ?

Merci
Orangina_L
 
Messages : 133
Inscription : 08 Avr 2013

Re: PAC Mitsibishi

Messagepar Khoen » 07 Mai 2020 12:05

Oui, je viens de mon configurer mon PAC dans MELCloud & eedomus et tout marche :)
Khoen
 
Messages : 4
Inscription : 03 Juin 2018

Re: PAC Mitsibishi

Messagepar merguez07 » 07 Mai 2020 12:20

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
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 2351
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: PAC Mitsibishi

Messagepar Kitor » 10 Avr 2021 07:23

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
Kitor
 
Messages : 934
Inscription : 18 Nov 2014

Re: PAC Mitsibishi

Messagepar merguez07 » 10 Avr 2021 07:57

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
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 2351
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: PAC Mitsibishi

Messagepar merguez07 » 10 Avr 2021 17:28

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


tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 2351
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: PAC Mitsibishi

Messagepar Kitor » 12 Avr 2021 07:32

É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
Kitor
 
Messages : 934
Inscription : 18 Nov 2014

Re: PAC Mitsibishi

Messagepar merguez07 » 13 Avr 2021 10:06

pour info je viens de compléter le script pour gérer les ventelles
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 2351
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: PAC Mitsibishi

Messagepar BRUNO.LUCAT » 05 Mai 2021 11:34

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>
BRUNO.LUCAT
 
Messages : 2
Inscription : 05 Mai 2021

Re: PAC Mitsibishi

Messagepar merguez07 » 05 Mai 2021 11:41

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
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 2351
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: PAC Mitsibishi

Messagepar merguez07 » 25 Mai 2021 18:02

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());
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 2351
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: PAC Mitsibishi

Messagepar Georges F » 12 Oct 2023 10:50

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
Georges F
 
Messages : 1
Inscription : 12 Oct 2023

PrécédentSuivant

Retour vers Requêtes HTTP

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 35 invité(s)