[Store] Climatisation Mitsubishi / Melcloud

Discussion et échanges de scripts pour la box eedomus

Re: [Store] Climatisation Mitsubishi / Melcloud

Messagepar merguez07 » 05 Mai 2020 11:01

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


c'etait pour faire un test mais a priori ça ne change rien. Enlève le (juste le " id=227688") et refait le test.

sinon as tu bien mis en VAR1 tes identifiants de connexion email:password
et en VAR2 le nom de ton appareil à contrôler (attention au respect de la casse)

si ça marche toujours pas met en ligne 29 le code
var_dump($json);die;
fais un test et envois moi le résultat à mon adresse email
xavierpowaga1@gmail.com
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 : 1685
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: [Store] Climatisation Mitsubishi / Melcloud

Messagepar Dominic » 05 Mai 2020 13:21

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


c'etait pour faire un test mais a priori ça ne change rien. Enlève le (juste le " id=227688") et refait le test.

sinon as tu bien mis en VAR1 tes identifiants de connexion email:password
et en VAR2 le nom de ton appareil à contrôler (attention au respect de la casse)

si ça marche toujours pas met en ligne 29 le code
var_dump($json);die;
fais un test et envois moi le résultat à mon adresse email
xavierpowaga1@gmail.com


Pas mieux en supprimant l'ID dans le script.
En ajoutant le test, j'ai l'erreur :
Erreur : Veuillez préciser la valeur de l'argument deviceName afin d'appeler ce script Editer.

Pourtant, j'ai bien le nom du device idem dans Eedomus et dans Melcloud.

(Pour info, je ne peux plus ajouter de pièces jointes dans mon message... je voulais t'envoyer des copies d'écrans)


Merci
Dominic
Eedomus+ - RFXcom USB - RFPlayer - Onduleur - Clé4G - NAS Qnap - Caméras - Modules Fibaro - Modules 433Mhz - Prises POPP - Stores orientables Somfy - Pergola bioclimatique moteurs Somfy - Impérihome
Dominic
 
Messages : 261
Inscription : 09 Sep 2016

Re: [Store] Climatisation Mitsubishi / Melcloud

Messagepar merguez07 » 05 Mai 2020 15:43

bon on n'y arrivera pas comme ça, moi j'ai besoin d'image, de fichier etc sinon je travaille dans le vide
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 : 1685
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: [Store] Climatisation Mitsubishi / Melcloud

Messagepar merguez07 » 08 Mai 2020 13:11

Voici le nouveau code qui fonctionne chez Dominic et moi
En effet, pour une raison que j'ignore, suivant le type d'installation, la reponse à la requête n'a pas du tout la même forme

le code suivant prend en compte les 2 formes connues
Code : Tout sélectionner
<?php

/******modifié par Merguez07
****** le 08 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?", "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);
    }
   
 
   
   
    $Floors=$result[0]['Structure']['Floors'];
    if (isset($floors)) {
        foreach ($Floors as $Floor){
            $Tdevices=$Floor['Devices'];
            foreach ($Tdevices as $device){
                $devices[]=$device;
            }
        }
    } else {
        $devices=$result[0]['Structure']['Devices'];
    } 
   
   
    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);
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 : 1685
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: [Store] Climatisation Mitsubishi / Melcloud

Messagepar Dominic » 08 Mai 2020 13:23

merguez07 a écrit:Voici le nouveau code qui fonctionne chez Dominic et moi
En effet, pour une raison que j'ignore, suivant le type d'installation, la reponse à la requête n'a pas du tout la même forme

le code suivant prend en compte les 2 formes connues



Un grand merci à Merguez07 d'avoir pris le temps aujourd'hui de débuguer le script.
Fonctionne maintenant parfaitement, je confirme ! :D

Dominic
Eedomus+ - RFXcom USB - RFPlayer - Onduleur - Clé4G - NAS Qnap - Caméras - Modules Fibaro - Modules 433Mhz - Prises POPP - Stores orientables Somfy - Pergola bioclimatique moteurs Somfy - Impérihome
Dominic
 
Messages : 261
Inscription : 09 Sep 2016

Précédent

Retour vers Scripts & Périphériques du store

Qui est en ligne ?

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