Avant toute chose merci de (re)prendre connaissance de la charte et de la respecter.
Pour résumer :
- Avant de poser une question, je cherche si la réponse existe
- Je suis poli, courtois et je respecte tout un chacun sur le forum
- Si un post m'agace : je m'en éloigne plutôt que de répondre d'une façon qui pourrait être mal interprétée


Il n'est jamais du luxe que de rappeler des choses simples :
Courtoisie, amabilité, politesse et bonne humeur sont les maîtres mots pour un forum sympathique, bienveillant et accueillant :)

Le groupe des Helpers est present pour vous aidez, n'hésitez pas à poser des questions ;)

Toute la communauté vous remercie

Api Viessmann pour récupération de données avec Vitoconnect

Réservé à l'utilisation et la programmation de scripts dans JEEDOM
thetrueavatar
Timide
Messages : 244
Inscription : 30 nov. 2017, 13:54

Re: Script pour Gestion Chaudière Viessmann connecté

Message par thetrueavatar » 03 sept. 2018, 20:17

Bon j'essaie encore une fois de configurer jeedom et y a rien à faire je trouve cette plateforme contre-intuitive. Je suis développeur et j'ai pour principe qu'une interface c'est comme une blague si on doit l'expliquer c'est qu'elle est pas bonne. Et ben elle est vraiment pas bonne du tout sur jeedom. J'ai acheté le plugin thermostat mais je n'arrive pas à trouver comment faire le lien entre les widget affichant les valeurs et les appels vers le service Viessmann. Est-ce que quelqu'un pourrait m'orienter vers une explication claire svp ?

Avataar120
Timide
Messages : 20
Inscription : 25 août 2018, 12:26

Re: Script pour Gestion Chaudière Viessmann connecté

Message par Avataar120 » 03 sept. 2018, 20:36

Désolé, je ne l'utilise pas.

J'utilise seulement la régulation de la chaudière plus des têtes thermostatiques popp.

J'ai un scénario pour comparer mes consignes avec la réalité et qui ajuste automatiquement la pente et la parallèle

Et un autre qui active ou désactive le mode chauffage en fonction de la température extérieure et des températures intérieures.

Xavier.g
Timide
Messages : 40
Inscription : 23 juil. 2014, 14:19

Re: Script pour Gestion Chaudière Viessmann connecté

Message par Xavier.g » 04 sept. 2018, 13:28

Super Job ! avec les températures qui vont descendre, il faut que je relance tout cela !

peut-on trouver la liste des données exposée (comme l'ancien fichier xml ?). J'ai 2 circuits de chauffage et ne je sais pas comment récupérer le 2°.

Xavier.g
Timide
Messages : 40
Inscription : 23 juil. 2014, 14:19

Re: Script pour Gestion Chaudière Viessmann connecté

Message par Xavier.g » 04 sept. 2018, 13:44

thetrueavatar a écrit :
03 sept. 2018, 20:17
Bon j'essaie encore une fois de configurer jeedom et y a rien à faire je trouve cette plateforme contre-intuitive. Je suis développeur et j'ai pour principe qu'une interface c'est comme une blague si on doit l'expliquer c'est qu'elle est pas bonne. Et ben elle est vraiment pas bonne du tout sur jeedom. J'ai acheté le plugin thermostat mais je n'arrive pas à trouver comment faire le lien entre les widget affichant les valeurs et les appels vers le service Viessmann. Est-ce que quelqu'un pourrait m'orienter vers une explication claire svp ?
J'ai pas mal utilisé le plugin thermostat avec mon ancienne chaudière, mais avec la Viessmann, je ne te le conseilles pas.
Cela revient à faire une double régulation. à la limite, on peut l'utiliser en mode hystérésis.
J'utilise les modes du thermostat Viessmann et leurs consignes associées.
Coté Jeedom, j'ai fait des scénario simples :
- mode confort / Eco en fonction de la présence
- Mode "StandBy" si consigne atteinte (avec hystéresis)
- rajout des modes fait maison (cheminee en marche, etc ...) pour avoir une consigne de régulation spécifique dans certains cas.

En synthèse :
- sur le circuit 1 (plancher avec thermostat Viessamann) : Jeedom Modifie la consigne ou le mode / Viessamann régule
- sur le circuit 2 (Radiateurs en loi d'eau) : Jeedom Modifie la consigne ou le mode + StandBy / Viessamann défini la loi d'eau

Avataar120
Timide
Messages : 20
Inscription : 25 août 2018, 12:26

Re: Script pour Gestion Chaudière Viessmann connecté

Message par Avataar120 » 04 sept. 2018, 15:45

Xavier.g a écrit :
04 sept. 2018, 13:28
Super Job ! avec les températures qui vont descendre, il faut que je relance tout cela !

peut-on trouver la liste des données exposée (comme l'ancien fichier xml ?). J'ai 2 circuits de chauffage et ne je sais pas comment récupérer le 2°.
Hello, c'est très facile, il y a juste un 0 à remplacer par un 1.
Tu peux avoir accès à tout le JSON à l'adresse suivante :

Code : Tout sélectionner

https://api.viessmann-platform.io/operational-data/installations/xxxx/gateways/xxxx/devices/0/features
Tu trouveras alors ton bonheur.

Avataar120
Timide
Messages : 20
Inscription : 25 août 2018, 12:26

Re: Script pour Gestion Chaudière Viessmann connecté

Message par Avataar120 » 04 sept. 2018, 15:49

Xavier.g a écrit :
04 sept. 2018, 13:44
thetrueavatar a écrit :
03 sept. 2018, 20:17
Bon j'essaie encore une fois de configurer jeedom et y a rien à faire je trouve cette plateforme contre-intuitive. Je suis développeur et j'ai pour principe qu'une interface c'est comme une blague si on doit l'expliquer c'est qu'elle est pas bonne. Et ben elle est vraiment pas bonne du tout sur jeedom. J'ai acheté le plugin thermostat mais je n'arrive pas à trouver comment faire le lien entre les widget affichant les valeurs et les appels vers le service Viessmann. Est-ce que quelqu'un pourrait m'orienter vers une explication claire svp ?
J'ai pas mal utilisé le plugin thermostat avec mon ancienne chaudière, mais avec la Viessmann, je ne te le conseilles pas.
Cela revient à faire une double régulation. à la limite, on peut l'utiliser en mode hystérésis.
J'utilise les modes du thermostat Viessmann et leurs consignes associées.
Coté Jeedom, j'ai fait des scénario simples :
- mode confort / Eco en fonction de la présence
- Mode "StandBy" si consigne atteinte (avec hystéresis)
- rajout des modes fait maison (cheminee en marche, etc ...) pour avoir une consigne de régulation spécifique dans certains cas.

En synthèse :
- sur le circuit 1 (plancher avec thermostat Viessamann) : Jeedom Modifie la consigne ou le mode / Viessamann régule
- sur le circuit 2 (Radiateurs en loi d'eau) : Jeedom Modifie la consigne ou le mode + StandBy / Viessamann défini la loi d'eau
J'ai fait comme toi pour les radiateurs.
J'utilise la regul Viessmann (loi d'eau) sans le capteur de températeur interne qui n'est pas bien positionné chez moi.
Pour la gestion fine des températures dans les pièces de vie (Salon, et les 4 chambres), j'ai des têtes thermostatiques connectées.
Pour le réglage de ma loi d'eau, j'ai fait un algo (un peu pourri et empirique) qui corrèle les températures relevées dans ma maison en fonction de ma température de consigne ... Et (par miracle?), l'algo a convergé :)

thetrueavatar
Timide
Messages : 244
Inscription : 30 nov. 2017, 13:54

Re: Script pour Gestion Chaudière Viessmann connecté

Message par thetrueavatar » 04 sept. 2018, 20:22

Voici la liste des param dispos chez moi:

Code : Tout sélectionner

heating
heating.boiler
heating.boiler.sensors
heating.boiler.sensors.temperature.main
heating.burner
heating.burner.automatic
heating.circuits
heating.circuits.0
heating.circuits.1
heating.circuits.0.circulation
heating.circuits.1.circulation
heating.circuits.0.circulation.schedule
heating.circuits.1.circulation.schedule
heating.circuits.0.dhw
heating.circuits.1.dhw
heating.circuits.0.dhw.schedule
heating.circuits.1.dhw.schedule
heating.circuits.0.frostprotection
heating.circuits.1.frostprotection
heating.circuits.0.heating
heating.circuits.1.heating
heating.circuits.0.heating.curve
heating.circuits.1.heating.curve
heating.circuits.0.heating.schedule
heating.circuits.1.heating.schedule
heating.circuits.0.operating
heating.circuits.1.operating
heating.circuits.0.operating.modes
heating.circuits.1.operating.modes
heating.circuits.0.operating.modes.active
heating.circuits.1.operating.modes.active
heating.circuits.0.operating.modes.dhw
heating.circuits.1.operating.modes.dhw
heating.circuits.0.operating.modes.dhwAndHeating
heating.circuits.1.operating.modes.dhwAndHeating
heating.circuits.0.operating.modes.forcedNormal
heating.circuits.1.operating.modes.forcedNormal
heating.circuits.0.operating.modes.forcedReduced
heating.circuits.1.operating.modes.forcedReduced
heating.circuits.0.operating.modes.standby
heating.circuits.1.operating.modes.standby
heating.circuits.0.operating.programs
heating.circuits.1.operating.programs
heating.circuits.0.operating.programs.active
heating.circuits.1.operating.programs.active
heating.circuits.0.operating.programs.comfort
heating.circuits.1.operating.programs.comfort
heating.circuits.0.operating.programs.eco
heating.circuits.1.operating.programs.eco
heating.circuits.0.operating.programs.external
heating.circuits.1.operating.programs.external
heating.circuits.0.operating.programs.holiday
heating.circuits.1.operating.programs.holiday
heating.circuits.0.operating.programs.normal
heating.circuits.1.operating.programs.normal
heating.circuits.0.operating.programs.reduced
heating.circuits.1.operating.programs.reduced
heating.circuits.0.operating.programs.standby
heating.circuits.1.operating.programs.standby
heating.circuits.0.sensors
heating.circuits.1.sensors
heating.circuits.0.sensors.temperature
heating.circuits.1.sensors.temperature
heating.circuits.0.sensors.temperature.room
heating.circuits.1.sensors.temperature.room
heating.circuits.0.sensors.temperature.supply
heating.circuits.1.sensors.temperature.supply
heating.configuration.multiFamilyHouse
heating.device
heating.device.time
heating.device.time.offset
heating.dhw
heating.dhw.sensors
heating.dhw.temperature
heating.dhw.schedule
heating.errors
heating.errors.active
heating.errors.history
heating.sensors
heating.sensors.temperature
heating.sensors.temperature.outside
heating.service.timeBased
heating.service.burnerBased
heating.service
Si je comprend bien j'ai payé 8 € pour rien ? Perso je m'en fou de faire la régulation via le plugin. Je veux juste intégrer mes données actuelles. J'utilise aussi les courbes de chauffes sans thermostat interne et ça fonctionne nickel. Faut juste bien configurer la pente et le parallèle selon la saison(automne, hiver)

felinh
Timide
Messages : 3
Inscription : 30 août 2018, 00:41

Re: Script pour Gestion Chaudière Viessmann connecté

Message par felinh » 04 sept. 2018, 21:04

Avataar120 a écrit :
03 sept. 2018, 08:23
thetrueavatar a écrit :
03 sept. 2018, 07:07
Tiens je vois que tu as ta température d'eau chaude sanitaire que je n'ai pas su retrouver. Pourrais-tu me dire de quel paramètre il s'agit dans le json ?
Merci,
Hello, je lis pour ma part tous les paramètres en une seule lecture :
https://api.viessmann-platform.io/opera ... 0/features

La température d'eau est alors le paramètre 105 (pour l'instant)
J'y accède de la façon suivante :
$tableauJSON['entities'][$ID]['properties'][$Field]['value'] avec $ID = 105 et $Field = 'value'
J'en profite pour vérifier que le paramètre est bien le bon (en checkant son nom) : heating.dhw.sensors.temperature.hotWaterStorage.

a+
Pour ceux qui comme Avataar120 ou moi même qui utilisont une seule lecture (https://api.viessmann-platform.io/opera ... 0/features). La structure en retour fait 230k.
Avis aux mal lotis de l'ADSL... entre 20 et 30 s pour recuperer la donnée
Pièces jointes
Capture.JPG
Capture.JPG (82.79 Kio) Consulté 434 fois

fmetz
Timide
Messages : 69
Inscription : 26 oct. 2015, 12:31

Re: Script pour Gestion Chaudière Viessmann connecté

Message par fmetz » 08 sept. 2018, 09:54

Bonjour,

J’ai une viessmann vitodens 222w et je suis très intéressé pour récupérer sur jeedom les infos de ma chaudièreet la piloter aussi je suis votre fil de discussion.
Malheureusement, je n’y connais pas grand chose en API, script et PHP aussi c’est compliqué pour moi.
Est-ce que quelqu’un envisage de faire un plugin jeedom pour que votre travail puisse être utilisé par les gens comme moi ?
Ou sinon une explication simple pour intégrer vos scripts dans jeedom ?
Pour ma part je pourrais aider par des tests.

denisvdb
Timide
Messages : 60
Inscription : 27 janv. 2017, 12:57

Re: Script pour Gestion Chaudière Viessmann connecté

Message par denisvdb » 08 sept. 2018, 23:11

Bonjour,

je possède aussi un chaudière viessmann. je ne parviens pas à faire fonctionner le script.
pourriez-vous faire un tuto?
j'étais parvenus à implémenter le script précédent (viessmannu.php).
D'avance merci.

Avataar120
Timide
Messages : 20
Inscription : 25 août 2018, 12:26

Re: Script pour Gestion Chaudière Viessmann connecté

Message par Avataar120 » 09 sept. 2018, 09:45

Bonjour à tous les deux,

Je vous ai fait une version (simplifiée) qui peut être copiée collée dans un scenario dans un bloc de type code.

J'espère que ça vous aidera :D :D :D

Code : Tout sélectionner

global $debug;
global $client_id, $authorizeURL, $callback_uri, $client_secret, $token_url, $apiURLBase, $general, $tableauJSONBrut;
global $isiwebuserid, $isiwebpasswd;

//Login sur site Viessmann
$isiwebuserid = 'xxx';   //to be modified
$isiwebpasswd = 'xxx';          //to be modified

//Clés d'authentification
$client_id = '79742319e39245de5f91d15ff4cac2a8';
$client_secret = '8ad97aceb92c5892e102b093c7c083fa';

//URLs
$authorizeURL = 'https://iam.viessmann.com/idp/v1/authorize';
$token_url = 'https://iam.viessmann.com/idp/v1/token';
$apiURLBase = 'https://api.viessmann-platform.io';
$general = '/general-management/installations?expanded=true&';
$callback_uri = "vicare://oauth-callback/everest";

//Récupération du code
$functioname = "getCode";
$$functioname = function ()
{
    global $client_id, $authorizeURL, $callback_uri;
    global $isiwebuserid, $isiwebpasswd;
  
    $url = "$authorizeURL?client_id=$client_id&scope=openid&redirect_uri=$callback_uri&response_type=code";
    $header = array("Content-Type: application/x-www-form-urlencoded");
    $curloptions = array(
        CURLOPT_URL => $url,
        CURLOPT_HTTPHEADER => $header,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_USERPWD => "$isiwebuserid:$isiwebpasswd",
        CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
        CURLOPT_POST => true,
    );
    $curl = curl_init();
    curl_setopt_array($curl, $curloptions);
    $response = curl_exec($curl);
    curl_close($curl);
    $matches = array();
    $pattern = '/code=(.*)"/';
    preg_match_all($pattern, $response, $matches);
    return ($matches[1][0]);
};

//Récupération du token
$functioname = "getAccessToken";
$$functioname = function ($authorization_code)
{
    global $token_url, $client_id, $client_secret, $callback_uri;
    global $isiwebuserid, $isiwebpasswd;
    $header = array("Content-Type: application/x-www-form-urlencoded;charset=utf-8");
    $params = array(
        "client_id" => $client_id,
        "client_secret" => $client_secret,
        "code" => $authorization_code,
        "redirect_uri" => $callback_uri,
        "grant_type" => "authorization_code");

    $curloptions = array(
        CURLOPT_URL => $token_url,
        CURLOPT_HEADER => false,
        CURLOPT_HTTPHEADER => $header,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => rawurldecode(http_build_query($params)));

    $curl = curl_init();
    curl_setopt_array($curl, $curloptions);
    $response = curl_exec($curl);
    curl_getinfo($curl);
    curl_close($curl);

    if ($response === false) {
        echo "Failed\n";
        echo curl_error($curl);

    } elseif (!empty(json_decode($response)->error)) {
        echo "Error:\n";
        echo $authorization_code;
        echo $response;
    }

    return json_decode($response)->access_token;
};

//Récupération d'une info sur l'API de Viessmann
$functioname = "getResource";
$$functioname = function ($access_token, $api) 
{
    echo "ok\n";
    $header = array("Authorization: Bearer {$access_token}");
    var_dump($header);

    $curl = curl_init();
    curl_setopt_array($curl, array(
        CURLOPT_URL => $api,
        CURLOPT_HTTPHEADER => $header,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_RETURNTRANSFER => true,
    ));
    $response = curl_exec($curl);
    curl_close($curl);

    return ($response);
};

//Récupération d'une donnée dans un JSON complet
$functioname = "getParamByID";
$$functioname = function ($ID, $widget, $Field) 
{   
  global $tableauJSONBrut;
  $tableauJSON = json_decode ($tableauJSONBrut, true);
  $retour = $tableauJSON['entities'][$ID]['properties'][$Field]['value'];
  
  if ($widget != '')
  {
    $cmd = cmd::byString($widget);
    $cmd->event ($retour);
  }
  
  return $retour; 
};


//Récupération des données permettant la connexion au Cloud Viessmann
$code = $getCode();
$access_token = $getAccessToken($code);

//Récupération des données gateway et installation
$resource = $getResource($access_token, $apiURLBase . $general);
$installation = json_decode($resource, true)["entities"][0]["properties"]["id"];
$gw = json_decode($resource, true)["entities"][0]["entities"][0]["properties"]["serial"];

//Récupération du JSON complet des données de la chaudière
$tableauJSONBrut = $getResource($access_token, "https://api.viessmann-platform.io/operational-data/installations/$installation/gateways/$gw/devices/0/features");
$scenario->setLog($tableauJSONBrut); 

//Mesures de température chaudière
$e = $getParamByID ('92', '#[Chauffage][Chaudière Viessmann][Température Intérieure]#', 'value');
$e = $getParamByID ('105', '#[Chauffage][Chaudière Viessmann][Température Eau Chaude]#', 'value');
$e = $getParamByID ('4', '#[Chauffage][Chaudière Viessmann][Température Chaudière]#', 'value');
$e = $getParamByID ('113', '#[Chauffage][Chaudière Viessmann][Température Extérieure]#', 'value');

//Consignes
$e = $getParamByID ('77', "#[Chauffage][Chaudière Viessmann][Consigne Jour]#", 'temperature');
$e = $getParamByID ('80', "#[Chauffage][Chaudière Viessmann][Consigne Nuit]#", 'temperature');
$e = $getParamByID ('106', '#[Chauffage][Chaudière Viessmann][Consigne Eau Chaude]#', 'value');

//Mode de fonctionnement de la chaudière
$e = $getParamByID ('41', '', 'value');
$cmd = cmd::byString("#[Chauffage][Chaudière Viessmann][Mode]#");
if ( $e == "standby" ) $cmd->event(": Arrêt"); else
  if ( $e == "dhw") $cmd->event(": Eau Chaude"); else
    if ( $e == "dhwAndHeating") $cmd->event(": Eau Chaude + Chauffage"); else
      if ( $e == "forcedReduced") $cmd->event(": Réduit"); else
        if ( $e == "forcedNormal") $cmd->event(": Forcé");

//Sous mode de fonctionnement en mode chauffage
$cmd = cmd::byString("#[Chauffage][Chaudière Viessmann][Etat Bruleur]#");
$cmd->event(": Arrêt");
$e = $getParamByID ('77', '', 'active');
if ( $e == "true" ) $cmd->event(": Normal");
$e = $getParamByID ('80', '', 'active');
if ( $e == "true") $cmd->event(": Réduit");
$e = $getParamByID ('65', '', 'active');
if ( $e == "true") $cmd->event(": Forcé");
$e = $getParamByID ('74', '', 'active');
if ( $e == "true") $cmd->event(": Vacances");

//Pente et parallèle
$e = $getParamByID ('29', '#[Chauffage][Chaudière Viessmann][Pente]#', 'slope');
$e = $getParamByID ('29', '#[Chauffage][Chaudière Viessmann][Parallèle]#', 'shift');



Attention un copié collé n'est pas suffisant - vous devez changer certains paramètres - voir ci-dessous + les login/mdp dans le code

Explication de la fonction getParamByID :
Elle prend 3 paramètres en entrée :
$ID : est l'ID dans le JSON du paramètre que vous souhaitez récupérer (pas besoin de changer normalement)
$widget : est le nom de la l'info dans votre Virtual (pour la mise à jour) --> à mettre à jour en fonction de votre virtual
$Field : est le nom du champ dans lequel se trouve la valeur du paramètre dans le JSON (pas besoin de changer normalement)
La fonction retourne également la valeur du paramètre s'il y a besoin de faire un traitement particulier dessus.

Exemple :
$getParamByID ('77', "#[Chauffage][Chaudière Viessmann][Consigne Jour]#", 'temperature');
77 = paramètre du JSON contenant la consigne de température JOUR
#[Chauffage][Chaudière Viessmann][Consigne Jour]# = Nom de la variable dans mon Virtual sous le format [Objet][Virtual][Nom de l'info]
'temperature' = Champ dans le JSON - Dans mes exemple ça peut être 'temperature' pour les consignes ou 'value' pour les valeurs
Dernière édition par Avataar120 le 09 sept. 2018, 20:43, édité 5 fois.

Avataar120
Timide
Messages : 20
Inscription : 25 août 2018, 12:26

Re: Script pour Gestion Chaudière Viessmann connecté

Message par Avataar120 » 09 sept. 2018, 09:52

Re-bonjour,

La même chose pour la mise à jour des paramètres :

Code : Tout sélectionner

global $debug;
global $client_id, $authorizeURL, $callback_uri, $client_secret, $token_url, $apiURLBase, $general, $tableauJSONBrut;
global $isiwebuserid, $isiwebpasswd;

//Login
$isiwebuserid = 'xxx';   //to be modified
$isiwebpasswd = 'xxx';          //to be modified

//Clés d'authentification
$client_id = '79742319e39245de5f91d15ff4cac2a8';
$client_secret = '8ad97aceb92c5892e102b093c7c083fa';

//URLs
$authorizeURL = 'https://iam.viessmann.com/idp/v1/authorize';
$token_url = 'https://iam.viessmann.com/idp/v1/token';
$apiURLBase = 'https://api.viessmann-platform.io';
$general = '/general-management/installations?expanded=true&';
$callback_uri = "vicare://oauth-callback/everest";

//Fonction de récupération du code
$functioname = "getCode";
$$functioname = function ()
{
    global $client_id, $authorizeURL, $callback_uri;
    global $isiwebuserid, $isiwebpasswd;
  
    //$scenario->setLog("3");
  
    $url = "$authorizeURL?client_id=$client_id&scope=openid&redirect_uri=$callback_uri&response_type=code";
    $header = array("Content-Type: application/x-www-form-urlencoded");
    $curloptions = array(
        CURLOPT_URL => $url,
        CURLOPT_HTTPHEADER => $header,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_USERPWD => "$isiwebuserid:$isiwebpasswd",
        CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
        CURLOPT_POST => true,
    );
    $curl = curl_init();
    curl_setopt_array($curl, $curloptions);
    $response = curl_exec($curl);
    curl_close($curl);
    $matches = array();
    $pattern = '/code=(.*)"/';
    preg_match_all($pattern, $response, $matches);
    return ($matches[1][0]);
};

//Fonction de récupération du token
$functioname = "getAccessToken";
$$functioname = function ($authorization_code)
{
    global $token_url, $client_id, $client_secret, $callback_uri;
    global $isiwebuserid, $isiwebpasswd;
    $header = array("Content-Type: application/x-www-form-urlencoded;charset=utf-8");
    $params = array(
        "client_id" => $client_id,
        "client_secret" => $client_secret,
        "code" => $authorization_code,
        "redirect_uri" => $callback_uri,
        "grant_type" => "authorization_code");

    $curloptions = array(
        CURLOPT_URL => $token_url,
        CURLOPT_HEADER => false,
        CURLOPT_HTTPHEADER => $header,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => rawurldecode(http_build_query($params)));

    $curl = curl_init();
    curl_setopt_array($curl, $curloptions);
    $response = curl_exec($curl);
    curl_getinfo($curl);
    curl_close($curl);

    if ($response === false) {
        echo "Failed\n";
        echo curl_error($curl);

    } elseif (!empty(json_decode($response)->error)) {
        echo "Error:\n";
        echo $authorization_code;
        echo $response;
    }

    return json_decode($response)->access_token;
};

//Fonction de récupération de données de Viessmann
$functioname = "getResource";
$$functioname = function ($access_token, $api) 
{
    echo "ok\n";
    $header = array("Authorization: Bearer {$access_token}");
    var_dump($header);

    $curl = curl_init();
    curl_setopt_array($curl, array(
        CURLOPT_URL => $api,
        CURLOPT_HTTPHEADER => $header,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_RETURNTRANSFER => true,
    ));
    $response = curl_exec($curl);
    curl_close($curl);

    return ($response);
};

//Mise à jour de données Viessmann
$functioname = "setResource";
$$functioname = function ($access_token, $api, $data) 
{
  
    $header = array('Content-Type: application/json', 'Authorization: Bearer ' . $access_token );

    $curl = curl_init($api);
    curl_setopt_array($curl, array(
        CURLOPT_CUSTOMREQUEST => "POST",                                                                     
        CURLOPT_POSTFIELDS => $data,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => $header,
        CURLOPT_SSL_VERIFYPEER => false,
        //CURLOPT_FOLLOWLOCATION => 1,
       
    ));
    $response = curl_exec($curl);
    curl_close($curl);

    return ($response);
};

$functioname = "debug_msg";
$$functioname = function ($message, $debug) 
{
    if ($debug) {
        //$scenario->setLog("1");
    }
};


//Récupération Token
$code = $getCode();
$access_token = $getAccessToken($code);

//Récupération Installation et Gateway
$resource = $getResource($access_token, $apiURLBase . $general);
$installation = json_decode($resource, true)["entities"][0]["properties"]["id"];
$gw = json_decode($resource, true)["entities"][0]["entities"][0]["properties"]["serial"];

//Mise en mode chauffage + eau chaude
$data = '{"mode":"dhwAndHeating"}';
$tableauJSONBrut = $setResource($access_token, "https://api.viessmann-platform.io/operational-data/installations/$installation/gateways/$gw/devices/0/features/heating.circuits.0.operating.modes.active/setMode", $data);


Franck54550
Timide
Messages : 103
Inscription : 19 janv. 2017, 20:40
Localisation : Nancy

Re: Script pour Gestion Chaudière Viessmann connecté

Message par Franck54550 » 09 sept. 2018, 13:30

Tout d'abord merci de partager vos compétences de dév ce qui n'est pas mon cas malheureusement. J'étais arrivé à mettre en place le script avec les requêtes sur le json et tout était ok. Bref cette version simplifiée dans un scénario avec un bloc de type code, ça devrait être de mon petit niveau, mais sans succès. J'ai modifié userid et passwd, modifié les $id en fonction de l'ordre chronologique de mon json et ajusté les noms d'info de mon virtuel, mais je n'ai aucune valeur remonté. En debug scénario j'ai

Code : Tout sélectionner

ok
array(1) {
  [0]=>
  string(1295) "Authorization: Bearer eyJlbmMiOiJBMjU2R0......
  }
Ma chaudière est une Vitoladens 300 avec vitoconnect 100, app ViCare est Ok. Voila si il y a un truc que je loupé ;) Merci de votre aide l'hiver approche à grand pas :D
@Avataar120 Thx

Edit : Pour le second bloc code "Mise en mode chauffage + eau chaude" ça c'est ok ça fonctionne super :D
Edit : Après quelques heures, constat, le script fonctionne ça c'est sur, le problème vient des Id qui ne correspondent plus à l'ancienne version.
Donc : Quid de ce fichier json ?
Dernière édition par Franck54550 le 09 sept. 2018, 18:54, édité 3 fois.
DIY RPI 3 B / SSD : Jeedom 3.2 / Jessie

thetrueavatar
Timide
Messages : 244
Inscription : 30 nov. 2017, 13:54

Re: Script pour Gestion Chaudière Viessmann connecté

Message par thetrueavatar » 09 sept. 2018, 14:40

Bonjour,
Juste pour signaler que j'ai 2 bug connu pour l'utilisation de mon script. Le chargement par le fichier credentials.properties ne fonctionne pas. Pour contourner le problème il faut pour l'instant hardcoder le user/pwd. L'autre est que je n'arrive pas a mettre la librairie Siren dans mon GitHub. Je vais regarder ça ce soir

denisvdb
Timide
Messages : 60
Inscription : 27 janv. 2017, 12:57

Re: Script pour Gestion Chaudière Viessmann connecté

Message par denisvdb » 09 sept. 2018, 16:40

Bonjour,

pour la creation du scenario c'est ok.
mais pour le widget? le getParamByID , $widget ?
bon j'ai créer un virtuel avec une info virtuelle nomée : temp.
dans le scénario j'ai remplacé les $widget par $temp.
après exécution du scénario, la valeur est tj 0.
log du scenario donne:
------------------------------------
[2018-09-09 16:38:34][SCENARIO] Start : Scenario lance manuellement.
[2018-09-09 16:38:34][SCENARIO] Exécution du sous-élément de type [action] : code
[2018-09-09 16:38:34][SCENARIO] Exécution d'un bloc code
[2018-09-09 16:38:36][SCENARIO] La commande n'a pas pu être trouvée : #[Chauffage][Chaudière Viessmann][Température Intérieure]# => #[Chauffage][Chaudière Viessmann][Température Intérieure]#
[2018-09-09 16:38:36][SCENARIO] Fin correcte du scénario
Pourriez-vous m'aider. D'avance merci
Denis

denisvdb
Timide
Messages : 60
Inscription : 27 janv. 2017, 12:57

Re: Script pour Gestion Chaudière Viessmann connecté

Message par denisvdb » 09 sept. 2018, 17:00

Bonjour,
encore une question : comment puis je retrouver les id? j'ai une vitodens 200w et un vitoconnect100.
merci

Denis

fmetz
Timide
Messages : 69
Inscription : 26 oct. 2015, 12:31

Re: Script pour Gestion Chaudière Viessmann connecté

Message par fmetz » 09 sept. 2018, 17:15

@Avataar120, merci bcq, j'ai testé la lecture et l'écriture avec le code à mettre dans le scenario et ça marche super !
Comment peux-t-on avoir la liste de tous les paramètres de notre modèle de chaudière ? Peut-être que si tu me dis comment récupérer le JSON complet sous forme de fichier, je pourrais trouver ça tout seul...

@denisvdb, il faut juste mettre ton login+mdp et remplacer "#[Chauffage][Chaudière Viessmann][Température Intérieure]#" par le nom de du paramètre que tu as créé dans ton virtuel et qui correspond à "#[Objet][Equipement][Commande]"

denisvdb
Timide
Messages : 60
Inscription : 27 janv. 2017, 12:57

Re: Script pour Gestion Chaudière Viessmann connecté

Message par denisvdb » 09 sept. 2018, 17:24

ok merci beaucoup , ça fonctionne pour la lecture de la t° amb.

denisvdb
Timide
Messages : 60
Inscription : 27 janv. 2017, 12:57

Re: Script pour Gestion Chaudière Viessmann connecté

Message par denisvdb » 09 sept. 2018, 18:01

Bonjour,
je souhaiterai plus de détail pour la partie écriture.
j'ai créer un deuxième scénario.
Que faut il faire dans jeedom pour la partie:
//Mise en mode chauffage + eau chaude
$data = '{"mode":"dhwAndHeating"}';
$tableauJSONBrut = $setResource($access_token, "https://api.viessmann-platform.io/opera ... ve/setMode", $data);

D'avance merci.

denisvdb
Timide
Messages : 60
Inscription : 27 janv. 2017, 12:57

Re: Script pour Gestion Chaudière Viessmann connecté

Message par denisvdb » 09 sept. 2018, 18:16

Rebonjour,

comment puis-je trouver la liste des commandes? (paramètres modifiable: consigne temp, pente, etc.)

Répondre

Revenir vers « [Plugin officiel] Scripts »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité