Ce Forum passera en lecture seule en janvier 2020
Image
Merci de vous rendre sur https://community.jeedom.com maintenant pour vos prochains postes ;)

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

Réservé à l'utilisation et la programmation de scripts dans JEEDOM
denisvdb
Timide
Messages : 63
Inscription : 27 janv. 2017, 12:57

Re: Script pour Gestion Chaudière Viessmann connecté

Message par denisvdb » 21 oct. 2018, 10:46

bonjour,
pour la fonction GetHeatingBurnerActive faut il utiliser un script de type numerique ou autre?

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

Re: Script pour Gestion Chaudière Viessmann connecté

Message par thetrueavatar » 21 oct. 2018, 10:56

De type booléen true false

Manouille
Timide
Messages : 33
Inscription : 29 juil. 2017, 12:59
Localisation : Anjou

Re: Script pour Gestion Chaudière Viessmann connecté

Message par Manouille » 21 oct. 2018, 11:56

Merci pour tout ce boulot, c'est vraiment super.

Personnellement j'ai pas mal de commandes qui ne fonctionnent pas mais j'ai plus l'impression que cela vient de moi.
Je pense que je ne doit pas les intégrer comme il faut dans Jeedom.
thetrueavatar a écrit :
21 oct. 2018, 10:56
De type booléen true false
Est-ce possible d'avoir une copie d'écran des différentes commandes avec la façon dont vous les avez intégrer ?

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

Re: Script pour Gestion Chaudière Viessmann connecté

Message par fmetz » 21 oct. 2018, 11:58

thetrueavatar a écrit :
20 oct. 2018, 17:53
Moi ça m'intéresse pour pouvoir corriger le code en effet :p.
Je vais faire un bilan alors.
Je ne pense pas qu'il y ai vraiment des bugs mais plutôt des fonction non disponibles chez Viessmann et des bugs chez eux... Ca a clairement l'air d'être en plein dev chez eux (api et vicare) et à la vitesse où cela avance pour une grosse boite comme ça, je me dis qu'ils font faire ça à un stagiaire :o :D
thetrueavatar a écrit :
20 oct. 2018, 17:53
Pour le schedule je peux écrire la fonction. Je doit juste réfléchir à l'interface à mettre en place. Me semble qu'on peut ajouter un jour donc ça serait du style nom du jour, start, end, ....
Sur la chaudière et via l'appli, on peut avoir 4 périodes par jour avec à chaque fois heure de début et heure de fin. Ces périodes sont des période en mode normal.
Par contre, en regardant les features sur ton github, je vois qu'il y aurait possibilité de mettre les modes reduced, normal et fixed. Fixed, je ne vois pas à quoi cela correspond...
Je me disais qu'il pourrait y avoir une fonction pour modifier un jour (start, end, mode pour les 4 périodes) et aussi une fonction pour changer tout le schedule d'un coup.
Après, tu fais au mieux et comme tu le sens. Je serais là pour tester en tout cas :)

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

Re: Script pour Gestion Chaudière Viessmann connecté

Message par fmetz » 21 oct. 2018, 12:56

Pour l'intégration à Jeedom, moi j'ai fait un seul script, qui appelle un seul php, pour me remonter toutes les valeurs.
En fait, j'ai remarqué que c'est plus rapide d’enchaîner les get dans le PHP et de remonter à chaque fois la valeur à Jeedom par l'api jeedom sur les virtuels que de faire un script pour chaque get.
En plus, je formatte comme je veux la donnée avant de l'envoyer à Jeedom. Par exemple, pour GetHeatingBurnerActive, moi je mets 1 pour True et 0 sinon et je remonte ça dans un type binaire de Jeedom. Pour getActiveMode, je traduit en français les modes que retourne l'api viessmann et je mets un type autre dans le virtuel jeedom.
Comme ça je peux le tracer sur une courbe les numériques et les binaires.
Pour l'affichage on peut appliquer un widget pour faire l'affichage qu'on veut : une flamme quand la valeur est égale à 1 par exemple.
Voilà ce que cela donne. C'est du brut pour l'instant.
Chaudière.jpg
Chaudière.jpg (26.44 Kio) Consulté 417 fois
Voici mon script. Je ne sais pas programmer en php alors vous serez tolérants. J'ai bricolé un truc en glanant des exemples sur le net pour faire une fonction de requette http POST qui ne doit pas être top mais cela marche... Je suis preneur d'améliorations si vous en avez.

Code : Tout sélectionner

<?php
include __DIR__.'/bootstrap.php';

use Viessmann\API\ViessmannFeature;

function post_request($url, array $params) {
  $query_content = http_build_query($params);
  $fp = fopen($url, 'r', FALSE, // do not use_include_path
    stream_context_create([
    'http' => [
      'header'  => [ // header array does not need '\r\n'
        'Content-type: application/x-www-form-urlencoded',
        'Content-Length: ' . strlen($query_content)
      ],
      'method'  => 'POST',
      'content' => $query_content
    ]
  ]));
  if ($fp === FALSE) {
    fclose($fp);
    return json_encode(['error' => 'Failed to get contents...']);
  }
  $result = stream_get_contents($fp); // no maxlength/offset
  fclose($fp);
  return $result;
}

function jeedom_post($cmd_id, $value) {
  $jeedom_apikey = "mettre sa propre clé de jeedom";
  $jeedom_url_retour = "http://192.168.1.xx(mettre ip locale de jeedom)/core/api/jeeApi.php?plugin=virtual&apikey={$jeedom_apikey}&type=virtual&id={$cmd_id}&value={$value}";
  $jeedom_params = array('key1' => '', 'key2' => '');
  $result = post_request($jeedom_url_retour, $jeedom_params);
  return $result;
}

jeedom_post("2685", $viessmannApi->getOutsideTemperature());

jeedom_post("2683", $viessmannApi->getBoilerTemperature());

jeedom_post("3023", $viessmannApi->getSlope());

jeedom_post("3024", $viessmannApi->getShift());

$res = $viessmannApi->getActiveMode();
if ( $res == "standby" ):
  $res = "Arret";
elseif ( $res == "dhw"):
  $res = "EauChaude";
elseif ( $res == "dhwAndHeating"):
  $res = "EauChaude+Chauffage";
elseif ( $res == "forcedReduced"):
  $res = "Réduit";
elseif ( $res == "forcedNormal"):
  $res = "Force";
else:
  $res = "Erreur";
endif;
jeedom_post("3021", $res);

$res = $viessmannApi->getActiveProgram();
if ( $res == "reduced" ):
  $res = "Reduit";
elseif ( $res == "normal"):
  $res = "Normal";
elseif ( $res == "dhwAndHeating"):
  $res = "EauChaude+Chauffage";
elseif ( $res == "forcedReduced"):
  $res = "ForceReduit";
elseif ( $res == "forcedNormal"):
  $res = "ForceNormal";
endif;
jeedom_post("3047", $res);

$res = $viessmannApi->isHeatingBurnerActive();
if ( $res == True ):
  $res = "1";
else:
  $res = "0";
endif;
jeedom_post("3022", $res);

$res = $viessmannApi->isDhwModeActive();
if ( $res == True ):
  $res = "1";
else:
  $res = "0";
endif;
jeedom_post("2693", $res);

jeedom_post("2684", $viessmannApi->getSupplyProgramTemperature());

jeedom_post("2689", $viessmannApi->getHotWaterStorageTemperature());

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

Re: Script pour Gestion Chaudière Viessmann connecté

Message par thetrueavatar » 21 oct. 2018, 13:08

Manouille a écrit :
21 oct. 2018, 11:56
Merci pour tout ce boulot, c'est vraiment super.

Personnellement j'ai pas mal de commandes qui ne fonctionnent pas mais j'ai plus l'impression que cela vient de moi.
Je pense que je ne doit pas les intégrer comme il faut dans Jeedom.
thetrueavatar a écrit :
21 oct. 2018, 10:56
De type booléen true false
Est-ce possible d'avoir une copie d'écran des différentes commandes avec la façon dont vous les avez intégrer ?
par type booléen je voulais dire type binaire.
Voici une image pour vous montrez comment c'est configuré chez moi:
Capture d’écran de 2018-10-21 13-07-08.png
Capture d’écran de 2018-10-21 13-07-08.png (285.34 Kio) Consulté 416 fois

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

Re: Script pour Gestion Chaudière Viessmann connecté

Message par thetrueavatar » 21 oct. 2018, 13:19

fmetz a écrit :
21 oct. 2018, 12:56
Pour l'intégration à Jeedom, moi j'ai fait un seul script, qui appelle un seul php, pour me remonter toutes les valeurs.
En fait, j'ai remarqué que c'est plus rapide d’enchaîner les get dans le PHP et de remonter à chaque fois la valeur à Jeedom par l'api jeedom sur les virtuels que de faire un script pour chaque get.
En plus, je formatte comme je veux la donnée avant de l'envoyer à Jeedom. Par exemple, pour GetHeatingBurnerActive, moi je mets 1 pour True et 0 sinon et je remonte ça dans un type binaire de Jeedom. Pour getActiveMode, je traduit en français les modes que retourne l'api viessmann et je mets un type autre dans le virtuel jeedom.
Comme ça je peux le tracer sur une courbe les numériques et les binaires.
Pour l'affichage on peut appliquer un widget pour faire l'affichage qu'on veut : une flamme quand la valeur est égale à 1 par exemple.
Voilà ce que cela donne. C'est du brut pour l'instant.
Chaudière.jpg

Voici mon script. Je ne sais pas programmer en php alors vous serez tolérants. J'ai bricolé un truc en glanant des exemples sur le net pour faire une fonction de requette http POST qui ne doit pas être top mais cela marche... Je suis preneur d'améliorations si vous en avez.

Code : Tout sélectionner

<?php
include __DIR__.'/bootstrap.php';

use Viessmann\API\ViessmannFeature;

function post_request($url, array $params) {
  $query_content = http_build_query($params);
  $fp = fopen($url, 'r', FALSE, // do not use_include_path
    stream_context_create([
    'http' => [
      'header'  => [ // header array does not need '\r\n'
        'Content-type: application/x-www-form-urlencoded',
        'Content-Length: ' . strlen($query_content)
      ],
      'method'  => 'POST',
      'content' => $query_content
    ]
  ]));
  if ($fp === FALSE) {
    fclose($fp);
    return json_encode(['error' => 'Failed to get contents...']);
  }
  $result = stream_get_contents($fp); // no maxlength/offset
  fclose($fp);
  return $result;
}

function jeedom_post($cmd_id, $value) {
  $jeedom_apikey = "mettre sa propre clé de jeedom";
  $jeedom_url_retour = "http://192.168.1.xx(mettre ip locale de jeedom)/core/api/jeeApi.php?plugin=virtual&apikey={$jeedom_apikey}&type=virtual&id={$cmd_id}&value={$value}";
  $jeedom_params = array('key1' => '', 'key2' => '');
  $result = post_request($jeedom_url_retour, $jeedom_params);
  return $result;
}

jeedom_post("2685", $viessmannApi->getOutsideTemperature());

jeedom_post("2683", $viessmannApi->getBoilerTemperature());

jeedom_post("3023", $viessmannApi->getSlope());

jeedom_post("3024", $viessmannApi->getShift());

$res = $viessmannApi->getActiveMode();
if ( $res == "standby" ):
  $res = "Arret";
elseif ( $res == "dhw"):
  $res = "EauChaude";
elseif ( $res == "dhwAndHeating"):
  $res = "EauChaude+Chauffage";
elseif ( $res == "forcedReduced"):
  $res = "Réduit";
elseif ( $res == "forcedNormal"):
  $res = "Force";
else:
  $res = "Erreur";
endif;
jeedom_post("3021", $res);

$res = $viessmannApi->getActiveProgram();
if ( $res == "reduced" ):
  $res = "Reduit";
elseif ( $res == "normal"):
  $res = "Normal";
elseif ( $res == "dhwAndHeating"):
  $res = "EauChaude+Chauffage";
elseif ( $res == "forcedReduced"):
  $res = "ForceReduit";
elseif ( $res == "forcedNormal"):
  $res = "ForceNormal";
endif;
jeedom_post("3047", $res);

$res = $viessmannApi->isHeatingBurnerActive();
if ( $res == True ):
  $res = "1";
else:
  $res = "0";
endif;
jeedom_post("3022", $res);

$res = $viessmannApi->isDhwModeActive();
if ( $res == True ):
  $res = "1";
else:
  $res = "0";
endif;
jeedom_post("2693", $res);

jeedom_post("2684", $viessmannApi->getSupplyProgramTemperature());

jeedom_post("2689", $viessmannApi->getHotWaterStorageTemperature());
Bonjour et merci pour l'explication. Ne m'y connaissant pas bien en jeedom j'ai fait un script par valeur mais c'est clairement plus optimal de le faire en un seul script. En faisant un script par commande, on est forcé de se ré-authentifier à chaque fois, tandis que comme tu as fait le token est réutilisé à chaque appel. Je rappelle d'ailleurs que les fichiers que que je mets dans example ne sont qu'à titre d'example. Je fourni une API mais ne suit pas du tout expert en intégration jeedom.

Je pourrais encore optimisé la chose en ne faisant qu'un seul appel réseau car la méthode getFeatures() renvoie quasiment toutes les données il me semble et ne nécessite qu'un appel réseau.

Toutefois, j'ai constaté en pratique que les informations ne sont rafraîchies que toutes les 5 mins par le serveur Viessmann.
Je ne suis pas sûr que ça vaille la peine d'optimiser à ce point mon code.

Je vais sans doute intégrer un script comme tu as fait spécifique à jeedom. Est-ce que ça te dérange si je m’inspire du tiens ? Je n'avais pas réussi à facilement retrouvé dans la documentation quelle url utiliser pour poster depuis un script l'information sur jeedom.

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

Re: Script pour Gestion Chaudière Viessmann connecté

Message par fmetz » 21 oct. 2018, 13:28

@thetrueavatar, tu rigoles, bien sûr que tu peux t'en inspirer... Tu poses la question avec tout le travail que tu fais pour nous !

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

Re: Script pour Gestion Chaudière Viessmann connecté

Message par Avataar120 » 21 oct. 2018, 13:52

Pour la mise à jour des Virtuels via les scripts, j'utilise pour ma part

Code : Tout sélectionner

$cmd = cmd::byString("#[Chauffage][Chaudière Viessmann][Mode]#");
$scenario->setLog($value);
par exemple.

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

Re: Script pour Gestion Chaudière Viessmann connecté

Message par thetrueavatar » 21 oct. 2018, 16:37

Il faut inclure ça dans un répertoire spécial pour avoir accès à la commande cmd::byString ? Il doit y avoir une sorte de bootstrap comme moi dans jeedom pour exposer ces méthodes spécifiques.

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

Re: Script pour Gestion Chaudière Viessmann connecté

Message par fmetz » 21 oct. 2018, 16:59

Avataar120 a écrit :
21 oct. 2018, 13:52
Pour la mise à jour des Virtuels via les scripts, j'utilise pour ma part

Code : Tout sélectionner

$cmd = cmd::byString("#[Chauffage][Chaudière Viessmann][Mode]#");
$scenario->setLog($value);
par exemple.
Ca marche depuis un script php ça ou est-ce que c'est dans un bloc code de scenario jeedom ?

zak78
Timide
Messages : 3
Inscription : 21 oct. 2018, 17:30

Re: Script pour Gestion Chaudière Viessmann connecté

Message par zak78 » 21 oct. 2018, 17:36

Bonjour
Je viens de faire installer une chaudiere Viessmann vitodens 222F + vitotrol 300RF + vitoconnect .
Je suis novice, je possede un NAS synology .
Pourriez vs m'aider à installer jeedom et utiliser les script afin de pouvoir controler ma chaudiere à distance car l app Vicare est très basique.
Merci d'avance

vmath54
Timide
Messages : 95
Inscription : 30 sept. 2016, 14:42

Re: Script pour Gestion Chaudière Viessmann connecté

Message par vmath54 » 21 oct. 2018, 18:22

Bonjour,

Je viens de mettre en oeuvre Viessmann_API, c'est super et facile à utiliser. Merci thetrueavatar !
Pour le moment, j'ai fait au plus simple : pluging script, et commandes comme décrites par thetrueavatar

Au fait, vous requetez toutes les mn ?

J'envisage également de faire comme fmetz : un seul script qui récupère les diférentes valeurs, et qui les transmet à un virtuel.
Ca évite les nombreuses requetes d'authentification (le token récupéré étant rejouable).
. D'une part, pour un soucis de performance
. D'autre part, je crains que M. Viessmann ne finisse par mettre en place une règle qui empeche les requetes d'authentification en rafale.

J'ai été admin système dans une autre vie, j'ai géré entre autres choses un serveur d'authentification (SSO CAS), et j'avais mis des restrictions pour éviter des rafales de requetes d'auth ; pour éviter les tentatives de piratage, et pour éviter une surcharge du serveur.

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

Re: Script pour Gestion Chaudière Viessmann connecté

Message par fmetz » 21 oct. 2018, 19:25

fmetz a écrit :
21 oct. 2018, 11:58
thetrueavatar a écrit :
20 oct. 2018, 17:53
Moi ça m'intéresse pour pouvoir corriger le code en effet :p.
Je vais faire un bilan alors.
Je ne pense pas qu'il y ai vraiment des bugs mais plutôt des fonction non disponibles chez Viessmann et des bugs chez eux... Ca a clairement l'air d'être en plein dev chez eux (api et vicare) et à la vitesse où cela avance pour une grosse boite comme ça, je me dis qu'ils font faire ça à un stagiaire :o :D

Voilà mon bilan. Je ne savais pas trop comment poster ça... S'il y a mieux, vous me direz.

Code : Tout sélectionner

Chaudière Vitodens 222W (1 circuit avec ballon interne à la chaudère)

GET
Ce qui marche :
echo "getOutsideTemperature " . $viessmannApi->getOutsideTemperature() . "\n";
echo "getBoilerTemperature " . $viessmannApi->getBoilerTemperature() . "\n";
echo "getSlope " . $viessmannApi->getSlope() . "\n";
echo "getShift " . $viessmannApi->getShift() . "\n";
echo "getActiveMode " . $viessmannApi->getActiveMode() . "\n";
echo "getActiveProgram " . $viessmannApi->getActiveProgram() . "\n";
echo "isHeatingBurnerActive " . $viessmannApi->isHeatingBurnerActive() . "\n";
echo "isDhwModeActive " . $viessmannApi->isDhwModeActive() . "\n";
	Toujours vu à False !
echo "getComfortProgramTemperature " . $viessmannApi->getComfortProgramTemperature() . "\n";
echo "getNormalProgramTemperature " . $viessmannApi->getNormalProgramTemperature() . "\n";
echo "getReducedProgramTemperature " . $viessmannApi->getReducedProgramTemperature() . "\n";
echo "getEcoProgramTemperature " . $viessmannApi->getEcoProgramTemperature() . "\n";
	OK mais Eco et Reduced températures sont les mêmes sur ma chaudière
echo "isInStandbyMode " . $viessmannApi->isInStandbyMode() . "\n";
	Toujours vu à False !
echo "getSupplyProgramTemperature " . $viessmannApi->getSupplyProgramTemperature() . "\n";
echo "getHotWaterStorageTemperature " . $viessmannApi->getHotWaterStorageTemperature() . "\n";
echo "isOneTimeDhwCharge " . $viessmannApi->isOneTimeDhwCharge() . "\n";
	Jamais vu à True !
echo "getDhwTemperature " . $viessmannApi->getDhwTemperature() . "\n";

echo "getHeatingGasConsumption (Day) " . "\n";
print_r($viessmannApi->getHeatingGasConsumption("day"));
	Conso(kWh)=8*retour sur 7 jours de j à j-6 ; avec VitoTrol on avait 8 jours
	Marche mais en ce moment ma conso ne dépasse pas 128kWh (voir ci-dessous le bug avec les autres consos)
echo "getHeatingGasConsumption (Week) " . "\n";
print_r($viessmannApi->getHeatingGasConsumption("week"));
	conso(kWh)=8*retour sur 52 semaines de s à s-51 ; avec VitoTrol on avait 53 semaines
	Marche si conso<=128kWh, il y a un pb de codage au-delà. Le codage semble être un modulo de 128kWh (modulo 1024)
	Au dessus de 128(codé 1024), je retrouve la conso de ma chaudière si j'ajoute les paquets de 1024 qui manquent.
	Je pense qu'il faut attendre que la fonction marche dans ViCare...
echo "getHeatingGasConsumption (Month) " . "\n";
print_r($viessmannApi->getHeatingGasConsumption("month"));
	conso(kWh)=8*retour sur 12 mois de m à m-12 ; avec VitoTrol on avait 13 mois
	bug modulo 1024
echo "getHeatingGasConsumption (Year) " . "\n";
print_r($viessmannApi->getHeatingGasConsumption("year"));
	conso(kWh)=8*retour sur 2 années de a à a-1 ; avec VitoTrol on avait 3 ans
	bug modulo 1024

echo "getHeatingSchedule " . "\n";
print_r($viessmannApi->getHeatingSchedule());

Ce qui ne marche pas:
echo "getRoomTemperature " . $viessmannApi->getRoomTemperature() . "\n";
	Marche pas (Property "value" was not found) mais normal je n'ai pas l'option chez moi
echo "getExternalProgramTemperature " . $viessmannApi->getExternalProgramTemperature() . "\n";
	donne toujours 0
	
echo "getDhwGasConsumption " . "\n";
print_r($viessmannApi->getDhwGasConsumption("day"));
echo "getDhwGasConsumption " . "\n";
print_r($viessmannApi->getDhwGasConsumption("week"));
echo "getDhwGasConsumption " . "\n";
Print_r($viessmannApi->getDhwGasConsumption("month"));
echo "getDhwGasConsumption " . "\n";
print_r($viessmannApi->getDhwGasConsumption("year"));
	Toutes les fonctions renvoient la même chose que Heating

echo "getHeatingBurnerStatistics " . $viessmannApi->getHeatingBurnerStatistics("hours") . "\n";
echo "getHeatingBurnerStatistics " . $viessmannApi->getHeatingBurnerStatistics("starts") . "\n";
	Marche pas (FEATURE_NOT_FOUND)
echo "getDhwSchedule " . "\n";
print_r($viessmannApi->getCirculationSchedule());
	Renvoi toujours un tableau vide
echo "getHeatingBurnerCurrentPower " . $viessmannApi->getHeatingBurnerCurrentPower() . "\n";
	Marche pas (FEATURE_NOT_FOUND)
echo "getHeatingBurnerModulation " . $viessmannApi->getHeatingBurnerModulation() . "\n";
	Marche pas (FEATURE_NOT_FOUND)
echo "getCirculationPumpStatus " . $viessmannApi->getCirculationPumpStatus() . "\n";
	Marche pas (FEATURE_NOT_FOUND)
echo "isDhwCharging " . $viessmannApi->isDhwCharging() . "\n";
	Marche pas (FEATURE_NOT_FOUND)
echo "getDhwChargingLevel " . $viessmannApi->getDhwChargingLevel() . "\n";
	Marche pas (FEATURE_NOT_FOUND)
#echo "getDhwPumpsCirculation " . $viessmannApi->getDhwPumpsCirculation() . "\n";
	Marche pas (FEATURE_NOT_FOUND)
#echo "getDhwPumpsPrimary " . $viessmannApi->getDhwPumpsPrimary() . "\n";
	Marche pas (FEATURE_NOT_FOUND)
#echo "getDhwTemperatureOutlet " . $viessmannApi->getDhwTemperatureOutlet() . "\n";
	Marche pas (FEATURE_NOT_FOUND)

SET
Ce qui marche :
echo "setCurve " . $viessmannApi->setCurve("-5","1.7") . "\n";
echo "setComfortProgramTemperature " . $viessmannApi->setComfortProgramTemperature("22") . "\n";
echo "activateEcoProgram " . $viessmannApi->activateEcoProgram("19") . "\n";
	Pourquoi y passer la température alors que la température Eco est la même que la température Reduced qu'on change avec setReducedProgramTemperature ?
echo "setNormalProgramTemperature " . $viessmannApi->setNormalProgramTemperature("20") . "\n";
echo "setReducedProgramTemperature " . $viessmannApi->setReducedProgramTemperature("12") . "\n";
echo "setDhwTemperature " . $viessmannApi->setDhwTemperature("50") . "\n";

Ce qui ne marche pas:
echo "deActivateEcoProgram " . $viessmannApi->deActivateEcoProgram() . "\n";
	Marche pas : cela ne désactive pas le mode Eco
	Avec ViCare : ça marche
echo "setExternalProgramTemperature " . $viessmannApi->setExternalProgramTemperature("11") . "\n";
	Marche pas, donne toujours 0


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

Re: Script pour Gestion Chaudière Viessmann connecté

Message par thetrueavatar » 21 oct. 2018, 20:02

vmath54 a écrit :
21 oct. 2018, 18:22
Bonjour,

Je viens de mettre en oeuvre Viessmann_API, c'est super et facile à utiliser. Merci thetrueavatar !
Pour le moment, j'ai fait au plus simple : pluging script, et commandes comme décrites par thetrueavatar

Au fait, vous requetez toutes les mn ?

J'envisage également de faire comme fmetz : un seul script qui récupère les diférentes valeurs, et qui les transmet à un virtuel.
Ca évite les nombreuses requetes d'authentification (le token récupéré étant rejouable).
. D'une part, pour un soucis de performance
. D'autre part, je crains que M. Viessmann ne finisse par mettre en place une règle qui empeche les requetes d'authentification en rafale.

J'ai été admin système dans une autre vie, j'ai géré entre autres choses un serveur d'authentification (SSO CAS), et j'avais mis des restrictions pour éviter des rafales de requetes d'auth ; pour éviter les tentatives de piratage, et pour éviter une surcharge du serveur.
S'ils utilisent un API Gateway j'imagine qu'il doit y avoir un DDOS protection. Pour ma part j'ai constaté un interval de 5 minutes entre les mises à jours des données donc j'ai configuré le cron dans ce sens-là.

Avatar de l’utilisateur
herigs
Timide
Messages : 42
Inscription : 10 avr. 2016, 12:44

Re: Script pour Gestion Chaudière Viessmann connecté

Message par herigs » 22 oct. 2018, 20:45

Bonsoir à tous,

Je suis ce post depuis un moment sans avoir de compétences en php et autres langages évolués. J'ai réussi à récupérer certaines informations mais je suis perdu avec les dernières évolutions de fmetz entre autre.

Mon pb se situe au niveau des répertoires dans lesquels il faut mettre les fichiers, doit on mettre le main.php; le bootstrap. php etc ..... Quelqu'un pourrait-il m'éclairer sur la question.

Merci d'avance et encore bravo pour ce super boulot.

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

Re: Script pour Gestion Chaudière Viessmann connecté

Message par thetrueavatar » 22 oct. 2018, 21:09

fmetz a écrit :
21 oct. 2018, 19:25
fmetz a écrit :
21 oct. 2018, 11:58
thetrueavatar a écrit :
20 oct. 2018, 17:53
Moi ça m'intéresse pour pouvoir corriger le code en effet :p.
Je vais faire un bilan alors.
Je ne pense pas qu'il y ai vraiment des bugs mais plutôt des fonction non disponibles chez Viessmann et des bugs chez eux... Ca a clairement l'air d'être en plein dev chez eux (api et vicare) et à la vitesse où cela avance pour une grosse boite comme ça, je me dis qu'ils font faire ça à un stagiaire :o :D

Voilà mon bilan. Je ne savais pas trop comment poster ça... S'il y a mieux, vous me direz.

Code : Tout sélectionner

Chaudière Vitodens 222W (1 circuit avec ballon interne à la chaudère)

GET
Ce qui marche :
echo "getOutsideTemperature " . $viessmannApi->getOutsideTemperature() . "\n";
echo "getBoilerTemperature " . $viessmannApi->getBoilerTemperature() . "\n";
echo "getSlope " . $viessmannApi->getSlope() . "\n";
echo "getShift " . $viessmannApi->getShift() . "\n";
echo "getActiveMode " . $viessmannApi->getActiveMode() . "\n";
echo "getActiveProgram " . $viessmannApi->getActiveProgram() . "\n";
echo "isHeatingBurnerActive " . $viessmannApi->isHeatingBurnerActive() . "\n";
echo "isDhwModeActive " . $viessmannApi->isDhwModeActive() . "\n";
	Toujours vu à False !
echo "getComfortProgramTemperature " . $viessmannApi->getComfortProgramTemperature() . "\n";
echo "getNormalProgramTemperature " . $viessmannApi->getNormalProgramTemperature() . "\n";
echo "getReducedProgramTemperature " . $viessmannApi->getReducedProgramTemperature() . "\n";
echo "getEcoProgramTemperature " . $viessmannApi->getEcoProgramTemperature() . "\n";
	OK mais Eco et Reduced températures sont les mêmes sur ma chaudière
echo "isInStandbyMode " . $viessmannApi->isInStandbyMode() . "\n";
	Toujours vu à False !
echo "getSupplyProgramTemperature " . $viessmannApi->getSupplyProgramTemperature() . "\n";
echo "getHotWaterStorageTemperature " . $viessmannApi->getHotWaterStorageTemperature() . "\n";
echo "isOneTimeDhwCharge " . $viessmannApi->isOneTimeDhwCharge() . "\n";
	Jamais vu à True !
echo "getDhwTemperature " . $viessmannApi->getDhwTemperature() . "\n";

echo "getHeatingGasConsumption (Day) " . "\n";
print_r($viessmannApi->getHeatingGasConsumption("day"));
	Conso(kWh)=8*retour sur 7 jours de j à j-6 ; avec VitoTrol on avait 8 jours
	Marche mais en ce moment ma conso ne dépasse pas 128kWh (voir ci-dessous le bug avec les autres consos)
echo "getHeatingGasConsumption (Week) " . "\n";
print_r($viessmannApi->getHeatingGasConsumption("week"));
	conso(kWh)=8*retour sur 52 semaines de s à s-51 ; avec VitoTrol on avait 53 semaines
	Marche si conso<=128kWh, il y a un pb de codage au-delà. Le codage semble être un modulo de 128kWh (modulo 1024)
	Au dessus de 128(codé 1024), je retrouve la conso de ma chaudière si j'ajoute les paquets de 1024 qui manquent.
	Je pense qu'il faut attendre que la fonction marche dans ViCare...
echo "getHeatingGasConsumption (Month) " . "\n";
print_r($viessmannApi->getHeatingGasConsumption("month"));
	conso(kWh)=8*retour sur 12 mois de m à m-12 ; avec VitoTrol on avait 13 mois
	bug modulo 1024
echo "getHeatingGasConsumption (Year) " . "\n";
print_r($viessmannApi->getHeatingGasConsumption("year"));
	conso(kWh)=8*retour sur 2 années de a à a-1 ; avec VitoTrol on avait 3 ans
	bug modulo 1024

echo "getHeatingSchedule " . "\n";
print_r($viessmannApi->getHeatingSchedule());

Ce qui ne marche pas:
echo "getRoomTemperature " . $viessmannApi->getRoomTemperature() . "\n";
	Marche pas (Property "value" was not found) mais normal je n'ai pas l'option chez moi
echo "getExternalProgramTemperature " . $viessmannApi->getExternalProgramTemperature() . "\n";
	donne toujours 0
	
echo "getDhwGasConsumption " . "\n";
print_r($viessmannApi->getDhwGasConsumption("day"));
echo "getDhwGasConsumption " . "\n";
print_r($viessmannApi->getDhwGasConsumption("week"));
echo "getDhwGasConsumption " . "\n";
Print_r($viessmannApi->getDhwGasConsumption("month"));
echo "getDhwGasConsumption " . "\n";
print_r($viessmannApi->getDhwGasConsumption("year"));
	Toutes les fonctions renvoient la même chose que Heating

echo "getHeatingBurnerStatistics " . $viessmannApi->getHeatingBurnerStatistics("hours") . "\n";
echo "getHeatingBurnerStatistics " . $viessmannApi->getHeatingBurnerStatistics("starts") . "\n";
	Marche pas (FEATURE_NOT_FOUND)
echo "getDhwSchedule " . "\n";
print_r($viessmannApi->getCirculationSchedule());
	Renvoi toujours un tableau vide
echo "getHeatingBurnerCurrentPower " . $viessmannApi->getHeatingBurnerCurrentPower() . "\n";
	Marche pas (FEATURE_NOT_FOUND)
echo "getHeatingBurnerModulation " . $viessmannApi->getHeatingBurnerModulation() . "\n";
	Marche pas (FEATURE_NOT_FOUND)
echo "getCirculationPumpStatus " . $viessmannApi->getCirculationPumpStatus() . "\n";
	Marche pas (FEATURE_NOT_FOUND)
echo "isDhwCharging " . $viessmannApi->isDhwCharging() . "\n";
	Marche pas (FEATURE_NOT_FOUND)
echo "getDhwChargingLevel " . $viessmannApi->getDhwChargingLevel() . "\n";
	Marche pas (FEATURE_NOT_FOUND)
#echo "getDhwPumpsCirculation " . $viessmannApi->getDhwPumpsCirculation() . "\n";
	Marche pas (FEATURE_NOT_FOUND)
#echo "getDhwPumpsPrimary " . $viessmannApi->getDhwPumpsPrimary() . "\n";
	Marche pas (FEATURE_NOT_FOUND)
#echo "getDhwTemperatureOutlet " . $viessmannApi->getDhwTemperatureOutlet() . "\n";
	Marche pas (FEATURE_NOT_FOUND)

SET
Ce qui marche :
echo "setCurve " . $viessmannApi->setCurve("-5","1.7") . "\n";
echo "setComfortProgramTemperature " . $viessmannApi->setComfortProgramTemperature("22") . "\n";
echo "activateEcoProgram " . $viessmannApi->activateEcoProgram("19") . "\n";
	Pourquoi y passer la température alors que la température Eco est la même que la température Reduced qu'on change avec setReducedProgramTemperature ?
echo "setNormalProgramTemperature " . $viessmannApi->setNormalProgramTemperature("20") . "\n";
echo "setReducedProgramTemperature " . $viessmannApi->setReducedProgramTemperature("12") . "\n";
echo "setDhwTemperature " . $viessmannApi->setDhwTemperature("50") . "\n";

Ce qui ne marche pas:
echo "deActivateEcoProgram " . $viessmannApi->deActivateEcoProgram() . "\n";
	Marche pas : cela ne désactive pas le mode Eco
	Avec ViCare : ça marche
echo "setExternalProgramTemperature " . $viessmannApi->setExternalProgramTemperature("11") . "\n";
	Marche pas, donne toujours 0

Merci pour le retour. A part pour le deactivateEcoProgram où je sais que ça marche pas(toujours pas compris pourquoi) le reste semble "ok". Les FEATURE_NOT_FOUND et problème de propriété non trouvée sont des erreurs du au fait que tu as pas ce type de données là exposées pour ton équipement.

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

Re: Script pour Gestion Chaudière Viessmann connecté

Message par fmetz » 23 oct. 2018, 12:50

herigs a écrit :
22 oct. 2018, 20:45
Bonsoir à tous,

Je suis ce post depuis un moment sans avoir de compétences en php et autres langages évolués. J'ai réussi à récupérer certaines informations mais je suis perdu avec les dernières évolutions de fmetz entre autre.

Mon pb se situe au niveau des répertoires dans lesquels il faut mettre les fichiers, doit on mettre le main.php; le bootstrap. php etc ..... Quelqu'un pourrait-il m'éclairer sur la question.

Merci d'avance et encore bravo pour ce super boulot.
Moi j'ai créé un répertoire Viessmann dans "/var/www/html/plugins/script/core/ressources" et j'y mets tout dedans. (j'ai jeedom sur raspeberry).
Après, dans jeedom j'ai créé un script avec une commande pour tout lire et une commande pour chaque set.

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

Re: Script pour Gestion Chaudière Viessmann connecté

Message par thetrueavatar » 23 oct. 2018, 13:31

ok j'ai compris. Sans doute que lors de l'appel aux script ils utilisent l'option -d de php qui permet de définir un fichier INI et donc définir un fichier jeedom définissant les méthodes spéciales sans devoir inclure explicitement celui-ci dans le fichier php. Tu cours fmetz que tu as accès aux méthodes jeedom depuis mes scripts donc ?

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

Re: Script pour Gestion Chaudière Viessmann connecté

Message par fmetz » 24 oct. 2018, 10:56

thetrueavatar a écrit :
23 oct. 2018, 13:31
ok j'ai compris. Sans doute que lors de l'appel aux script ils utilisent l'option -d de php qui permet de définir un fichier INI et donc définir un fichier jeedom définissant les méthodes spéciales sans devoir inclure explicitement celui-ci dans le fichier php. Tu cours fmetz que tu as accès aux méthodes jeedom depuis mes scripts donc ?
Je ne comprends pas bien ta question, moi je n'utilise pas de méthodes jeedom dans les scripts php.
Je me suis mal m'exprimé je pense. Moi j'utilise tes scripts php que je lance dans jeedom grâce au plugin script dans lequel j'ai créé un script Viessmann qui contient une commande de type info pour tout lire et une commande de type action pour chaque set.

Répondre

Revenir vers « [Plugin officiel] Scripts »

Qui est en ligne ?

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