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
thetrueavatar
Timide
Messages : 282
Inscription : 30 nov. 2017, 13:54

Re: Script pour Gestion Chaudière Viessmann connecté

Message par thetrueavatar » 07 oct. 2018, 06:59

Bon la programmation dès 6h du matin c'est d'enfer(special thanks à mon fils qui avait soif mais c'est son annif donc bon...).
J'ai rajouté 2 paramètres configurables via le bootstrap.php de l'exemple:
- deviceID: perso je n'ai qu'un seul device viessmann mais il pourrait avoir des configuration avec plusieurs
- circuitId: le circuit par défaut à utiliser pour tous les appels subsequents
Ces 2 paramètres sont optionnels. Si pas passé la valeur sera 0. Tous les appels sur l'instance viessmannApi utiliseront cette valeur là(avant j'ai forcé à 0). Néanmoins, on peut passer en paramètre de chaque méthode un circuitId pour que juste cet appel là utilise un circuitId différent.

Code : Tout sélectionner

<?php
include __DIR__.'/../index.php';
use Viessmann\API\ViessmannAPI;
$credentials = file(__DIR__."/credentials.properties");
$params = [
    "user" => trim("$credentials[0]", "\n"),
    "pwd" => trim("$credentials[1]", "\n"),
    "deviceId" => "0",
    "circuitId"=>"4"
];
$viessmannApi = new ViessmannAPI($params);

Code : Tout sélectionner

<?php
include __DIR__.'/bootstrap.php';
echo "Active mode for default circuit(0): ".$viessmannApi->getActiveMode()."\n";// utiliseras le circuit 4 du bootstrap
echo "Active mode for given circuit(1): ".$viessmannApi->getActiveMode(1);//utilseras le circuit 1 de l'appel.

julien_d
Timide
Messages : 1
Inscription : 07 oct. 2018, 12:18

Re: Script pour Gestion Chaudière Viessmann connecté

Message par julien_d » 07 oct. 2018, 12:46

Bonjour à tous,

Cela fait quelques semaines que je suis ce sujet avec intérêt, ayant acheté récemment un Viessmann Vitoconnect. Je tiens tout d'abord à remercier @thetrueavatar pour le gros travail réalisé... chapeau ! L'API est assez simple à utiliser pour quelqu'un ayant des connaissances php minimales, et s'intègre assez facilement dans jeedom. Bravo.

Je réussis à récupérer les valeurs (fonctions 'get'), je crois avoir aussi compris comment créer des fonctions supplémentaires pour recevoir les valeurs qui ne font pas l'objet d'une constante dans ton code. Par contre je ne comprends pas comment modifier une valeur, l'utilisation des fonctions 'set' (ex: setActiveMode) me retournant des erreurs.

Code : Tout sélectionner

PHP Fatal error:  Uncaught OAuth\Common\Http\Exception\TokenResponseException: file_get_contents(https://api.viessmann-platform.io/operational-data/installations/119371/gateways/xxxxxxxxx/devices/0/features/heating.circuits.0.operating.modes.active/setMode): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request
 in /var/www/html/plugins/script/core/ressources/Viessmann-Api/vendor/lusitanian/oauth/src/OAuth/Common/Http/Client/StreamClient.php:73
Stack trace:
#0 /var/www/html/plugins/script/core/ressources/Viessmann-Api/vendor/lusitanian/oauth/src/OAuth/OAuth2/Service/AbstractService.php(183): OAuth\Common\Http\Client\StreamClient->retrieveResponse(Object(OAuth\Common\Http\Uri\Uri), '{"mode":dhwAndH...', Array, 'POST')
#1 /var/www/html/plugins/script/core/ressources/Viessmann-Api/src/Oauth/ViessmannOauthService.php(118): OAuth\OAuth2\Service\AbstractService->request('operational-dat...', 'POST', '{"mode":dhwAndH...', Array)
#2 /var/www/html/plugins/script/core/ressources/Viessmann-Api/src/Oauth/ViessmannOa in /var/www/html/plugins/script/core/ressources/Viessmann-Api/vendor/lusitanian/oauth/src/OAuth/Common/Http/Client/StreamClient.php on line 73
Par ailleurs, en plus de la chaudière Vitodens 200W je suis équipé d'une régulation solaire Vitosolic 100 et de panneaux Vitosol 200F. Savez-vous s'il est possible de récupérer les informations de la partie solaire ?

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

Re: Script pour Gestion Chaudière Viessmann connecté

Message par thetrueavatar » 07 oct. 2018, 21:58

Le problème avec le post est qu'il faut se conformer au format attendu.
Une 400 Bad Request veut dire que le contenu des données n'est pas comme attendu. Normalement c'est celui défini dans la partie action. En pratique j'ai eu le cas quand je fournissais une température de consigne genre 21.5 alors qu'il s'attendait à un entier (21 par exemple).
Il y a aussi le 502 bad gateway: là c'est plus la structure des données que les valeurs elle même.

EDIT: ok en l'expliquant j'ai trouvé l'erreur. je passais comme valeur {"mode":dhwAndHeating} mais il manquait les double quote pour la valeur. Je pensais qu'il l'interpreterait intelligemment. C'est fixé et je viens de pusher sur le git. Maintenant ça envoie bien {"mode":"dhwAndHeating"} et ça fonctionne.

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

Re: Script pour Gestion Chaudière Viessmann connecté

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

Pour info, j'ai rajouté dans la doc la liste des features que j'ai trouvée dans l'application ViCare. Il y en a quelques unes qui ne fonctionne pas chez moi mais qui peut fonctionner chez d'autres.
A voir sur le wiki https://github.com/thetrueavatar/Viessm ... iki/French:

Code : Tout sélectionner

    gateway.bmu
    gateway.devices
    gateway.firmware
    gateway.logLevel
    gateway
    gateway.status
    gateway.wifi
    heating.boiler.sensors
    heating.boiler.sensors.temperature.commonSupply
    heating.boiler.sensors.temperature.main
    heating.boiler.serial
    heating.boiler
    heating.boiler.temperature
    heating.burner.automatic
    heating.burner.current.power
    heating.burner.modulation
    heating.burner
    heating.burner.statistics
    heating.circuits.0.circulation.pump
    heating.circuits.0.circulation.schedule
    heating.circuits.0.circulation
    heating.circuits.0.dhw.schedule
    heating.circuits.0.dhw
    heating.circuits.0.frostprotection
    heating.circuits.0.heating.curve
    heating.circuits.0.heating.schedule
    heating.circuits.0.heating
    heating.circuits.0.operating.modes.active
    heating.circuits.0.operating.modes.dhw
    heating.circuits.0.operating.modes.dhwAndHeating
    heating.circuits.0.operating.modes.forcedNormal
    heating.circuits.0.operating.modes.forcedReduced
    heating.circuits.0.operating.modes
    heating.circuits.0.operating.modes.standby
    heating.circuits.0.operating.programs.active
    heating.circuits.0.operating.programs.comfort
    heating.circuits.0.operating.programs.eco
    heating.circuits.0.operating.programs.external
    heating.circuits.0.operating.programs.holiday
    heating.circuits.0.operating.programs.normal
    heating.circuits.0.operating.programs.reduced
    heating.circuits.0.operating.programs
    heating.circuits.0.operating.programs.standby
    heating.circuits.0.operating
    heating.circuits.0.sensors
    heating.circuits.0.sensors.temperature.room
    heating.circuits.0.sensors.temperature
    heating.circuits.0.sensors.temperature.supply
    heating.circuits.0
    heating.circuits.1.circulation.pump
    heating.circuits.1.circulation.schedule
    heating.circuits.1.circulation
    heating.circuits.1.dhw.schedule
    heating.circuits.1.dhw
    heating.circuits.1.frostprotection
    heating.circuits.1.heating.curve
    heating.circuits.1.heating.schedule
    heating.circuits.1.heating
    heating.circuits.1.operating.modes.active
    heating.circuits.1.operating.modes.dhw
    heating.circuits.1.operating.modes.dhwAndHeating
    heating.circuits.1.operating.modes.forcedNormal
    heating.circuits.1.operating.modes.forcedReduced
    heating.circuits.1.operating.modes
    heating.circuits.1.operating.modes.standby
    heating.circuits.1.operating.programs.active
    heating.circuits.1.operating.programs.comfort
    heating.circuits.1.operating.programs.eco
    heating.circuits.1.operating.programs.external
    heating.circuits.1.operating.programs.holiday
    heating.circuits.1.operating.programs.normal
    heating.circuits.1.operating.programs.reduced
    heating.circuits.1.operating.programs
    heating.circuits.1.operating.programs.standby
    heating.circuits.1.operating
    heating.circuits.1.sensors
    heating.circuits.1.sensors.temperature.room
    heating.circuits.1.sensors.temperature
    heating.circuits.1.sensors.temperature.supply
    heating.circuits.1
    heating.circuits
    heating.controller.serial
    heating.device
    heating.device.time.offset
    heating.device.time
    heating.dhw.charging.level
    heating.dhw.charging
    heating.dhw.oneTimeCharge
    heating.dhw.pumps.circulation
    heating.dhw.pumps.primary
    heating.dhw.schedule
    heating.dhw.sensors
    heating.dhw.sensors.temperature.hotWaterStorage
    heating.dhw.sensors.temperature.outlet
    heating.dhw
    heating.dhw.temperature
    heating.errors.active
    heating.errors.history
    heating.errors
    heating.gas.consumption.dhw
    heating.gas.consumption.heating
    heating.sensors
    heating.sensors.temperature.outside
    heating.sensors.temperature
    heating.service
    heating
Au final j'ai créé une class contenant toutes les features appellée ViessmannFeature.php et fait un peu de nettoyage dans ViessmannAPI

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

Re: Script pour Gestion Chaudière Viessmann connecté

Message par Xavier.g » 11 oct. 2018, 11:29

Je viens de tester la version de dev avec le choix des circuits.

J'ai dupliqué le fichier bootstrap --> bootstrap1.php (modifié ci-dessous)

Code : Tout sélectionner

<?php
include __DIR__.'/../index.php';
use Viessmann\API\ViessmannAPI;
$credentials = file(__DIR__."/credentials.properties");
$params = [
    "user" => trim("$credentials[0]", "\n"),
    "pwd" => trim("$credentials[1]", "\n"),
    "deviceId" => "0",
    "circuitId"=>"1"
];
$viessmannApi = new ViessmannAPI($params);
J'ai en suite pour chaque commande 2 fichiers ex :
- GetActiveProgram --> include __DIR__.'/bootstrap.php';
- GetActiveProgram1 --> include __DIR__.'/bootstrap1.php';

--> malheureseusement les 2 programmes renvoient la valeur du circuit 0

par contre si je force dans GetActiveProgram1 --> echo $viessmannApi->getActiveProgram(1);
--> cela fonctionne

Je peux donc lire toutes les valeurs du circuit 1 en forçant, par contre pour l'écriture, cette méthode n'est pas applicable

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

Re: Script pour Gestion Chaudière Viessmann connecté

Message par thetrueavatar » 11 oct. 2018, 12:55

Ok merci pour le retour je vais regarder à ça.

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

Re: Script pour Gestion Chaudière Viessmann connecté

Message par thetrueavatar » 11 oct. 2018, 13:05

Je hais les languages interprétés.... J'avais oublié un s et mis $param dans le code. C'est fixé now. Merci pour le retour.

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

Re: Script pour Gestion Chaudière Viessmann connecté

Message par Xavier.g » 11 oct. 2018, 14:47

Ca fonctionne maintenant parfaitement sur les circuits 0 et 1 en lecture et en écriture.
Merci !!

j'essaye maintenant de rajouter les info sensors.temperature.room et sensors.temperature.supply
Si ca marche, je le rajouterai dans Github

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

Re: Script pour Gestion Chaudière Viessmann connecté

Message par Xavier.g » 11 oct. 2018, 15:13

J'ai validé la récupération des infos sensors.temperature.room et sensors.temperature.supply
C'est sur GitHub

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

Re: Script pour Gestion Chaudière Viessmann connecté

Message par thetrueavatar » 11 oct. 2018, 16:11

A mon avis tu n'as fait que le commit et pas le push. Y a que le push qui va jusqu'à github. Une fois dans github je ferai moi même la pull request depuis ton fork.

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

Re: Script pour Gestion Chaudière Viessmann connecté

Message par thetrueavatar » 11 oct. 2018, 16:28

Autant pour moi j'avais pas vu que tu avais fait ça sur une branche autre que dev. Tu peux rester sur dev si tu le souhaites car tu ne travailles pas sur mon code directement mais une copie. Je vais prendre les 3 patchs alors.
Dernière édition par thetrueavatar le 11 oct. 2018, 16:42, édité 1 fois.

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

Re: Script pour Gestion Chaudière Viessmann connecté

Message par thetrueavatar » 11 oct. 2018, 16:40

Voila c'est fait. J'ai testé le room supply et ça fonctionne nickel ! Pour l'autre j'ai pas de sonde intérieure donc peut pas dire. Un grand merci pour la contribution ! Je me demande par contre quel est la différence entre le SupplyTemperature et le BoilerTemperature. J'avais remarqué que les 2 valeurs étaient identiques en pratique. A mon avis, la prochaine étape avant une release c'est d'améliorer la gestion d'erreur notamment dans les cas où comme moi l'information n'est juste pas disponible. Pour l'instant ça explose sur la property valeur alors que ça devrait simplement dire qu'il n'y a pas de résultat.

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

Re: Script pour Gestion Chaudière Viessmann connecté

Message par thetrueavatar » 11 oct. 2018, 18:54

j'ai remarqué que sur vicare maintenant j'ai accès à la température d'eau chaude sanitaire. Je vais sniffer le réseau pour voir quelle requête renvoi cette valeur.
Dernière édition par thetrueavatar le 12 oct. 2018, 12:54, édité 1 fois.

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

Re: Script pour Gestion Chaudière Viessmann connecté

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

Je confirme. Il y a désormais 3 entities qui sont apparus en plus quand je fais getFeatures() dont heating.dhw.sensors.temperature.hotWaterStorage. J'ai donc enfin accès à ma température d'eau chaude sanitaire ! J'ai rajouté la méthode dans l'api du coup. Ca veut aussi dire que Viessmann enrichi et corrige les données manquantes sur ses serveurs ce qui est une bonne nouvelle.

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

Re: Script pour Gestion Chaudière Viessmann connecté

Message par thetrueavatar » 12 oct. 2018, 16:34

Version 0.3 disponible sur https://github.com/thetrueavatar/Viessm ... es/tag/0.3
  • Ajout d'une meilleure gestion d'erreur pour avoir des messages plus lisibles
  • Ajout de plusieurs méthode:
    - getHotWaterStorageTemperature
    - getRoomTemperature et getSupplyTemperature(merci Xavierg pour la contrib)
  • Possibilité de choisir le circuitId et deviceId par défaut utilisé par l'API(avant forcé à 0 par défaut). Possibilité de surcharge du circuitId à chaque appel.
  • Utilisant de Curl comme client plutôt que le client Stream

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 » 13 oct. 2018, 18:18

Bonsoir thetrueavatar

Je suis ce post depuis quelques temps vu que je viens de faire faire installer une chaudière Viessmann et malgré le peu de connaissance en script, php et autres j'ai réussi à récupérer les infos qui m'intéressent.

Super boulot, encore merci

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

Re: Script pour Gestion Chaudière Viessmann connecté

Message par thetrueavatar » 15 oct. 2018, 15:38

Bonjour,
Suite à la demande d'ajout d'une nouvelle méthode j'ai fait du refactoring de mon code afin de pouvoir utiliser les fichiers locaux json que j'avais trouvé comme ViCare. Je peux désormais les utiliser comme "source de données" et mocker ainsi le serveur viessmann.
Ca me permettra d'implémenter les méthodes non supportées par ma chaudière. Il faudra néanmoins, une validation par quelqu'un qui a bien la fonctionnalité. Je ferai une branche spéciale Feature/XXXX qui contiendra la méthode à tester et une fois valider je l'intégrerai dans le develop.

J'ai donc implémenté les méthodes getHeatingGasConsumption et getDhwGasConsumption. Elle prenne en paramètre une période spécifiée par une des 4 valeurs "day","week","month","year". Je l'ai mis dans une branche Feature/GazConsumption .
Pour y accéder fait les commandes suivantes dans le répertoire du code:

Code : Tout sélectionner

git pull
git checkout Feature/GazConsumption
Si quelqu'un peut tester ça m'aiderait ? Si vous n'avez pas la fonctionnalité l'api renverra : {"statusCode":404,"error":"Not Found","message":"FEATURE_NOT_FOUND"}

Oubliez pas de repasser sur la branche develop après votre test en faisant:

Code : Tout sélectionner

git checkout develop
 

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

Re: Script pour Gestion Chaudière Viessmann connecté

Message par Xavier.g » 15 oct. 2018, 16:14

J'ai des problemes de connections ... idem sur ViCare. Dès que ca revient, je teste pour voir si j'ai de nouvelles infos de mon coté.
Je cherche en particulier le temps de fonctionnement du bruleur

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

Re: Script pour Gestion Chaudière Viessmann connecté

Message par thetrueavatar » 15 oct. 2018, 16:31

Je vais l'appeler Feature/MethodNotYetTested comme ça je rajouterai les méthodes au fur et à mesure plutôt que de faire une branche par méthode.
EDIT: j'ai rajouté la méthode et l'example GetBoilerStatistics.php. J'avais accès à l'info avant mais plus avec le nouveau service...
J'ai rajouté les méthodes getHeatingSchedule, getDhwSchedule et getCirculationSchedule dans la branche develop qui renvoie les horaires et si c'est actif ou pas.

Voici la liste des méthodes rajoutées devant encore être testées:

Code : Tout sélectionner

isDhwCharging 
getDhwChargingLevel 
isOneTimeDhwCharge 
getDhwPumpsCirculation 
getDhwPumpsPrimary 
getDhwTemperature 
getCirculationPump 
getHeatingBurnerModulation 
getHeatingBurnerCurrentPower
GetBoilerStatistics

djorg08
Timide
Messages : 19
Inscription : 21 avr. 2017, 10:36

Re: Script pour Gestion Chaudière Viessmann connecté

Message par djorg08 » 17 oct. 2018, 12:07

Bonjour,
J'obtiens une erreur
j'ai remplacer GetBoilerStatistics.php
par

Code : Tout sélectionner

<?php
include __DIR__ . '/bootstrap-test.php';
echo $viessmannApi->getHeatingBurnerStatistics("hours");
echo $viessmannApi->getHeatingBurnerStatistics("starts");
et bootstrap-test.php

par

Code : Tout sélectionner

<?php

include 'phar://' . __DIR__ . '/Viessmann-Api-0.4-SNAPSHOT.phar/index.php';

use Viessmann\API\ViessmannAPI;
use Viessmann\API\ViessmannApiException;

$credentials = file(__DIR__."/credentials.properties");
$params = [
    "user" => trim("$credentials[0]", "\n"),
    "pwd" => trim("$credentials[1]", "\n"),
    "deviceId" => "0",
    "circuitId"=>"0"
];
try {
$viessmannApi = new ViessmannAPI($params);
} catch (ViessmannApiException $e) {
    echo $e->getMessage();
    exit();
comme ça le bootstrp.php pointe toujours sur Viessmann-Api-0.3 pour ce qui fonctionne

J'obtiens une erreur lors de l'enregistrement de mon script:
Erreur dans l'exécution du terminal, la valeur retournée est : 255. Détails : Array ( [0] => PHP Fatal error: Uncaught Error: Call to undefined method Viessmann\API\ViessmannAPI::getHeatingBurnerStatistics() in /var/www/html/plugins/script/core/ressources/Viessmann-Api/example/GetBoilerStatistics.php:3 Stack trace: #0 {main} thrown in /var/www/html/plugins/script/core/ressources/Viessmann-Api/example/GetBoilerStatistics.php on line 3 )
Je constate aussi un problème d'affichage quand les retours ne sont ni binaire, ni numériques mais autres.
Je n'ai rien à l'affichage.

Merci encore pour ton travail

Didier

Répondre

Revenir vers « [Plugin officiel] Scripts »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invités