Bonjour à tous,
Je suis tombé sur ce fil de discussion et ça me motive à domotiser ma chaudière avec mon jeedom.
Pour commencer, à la lecture de tout le fil, pouvez-vous me confirmer la chose suivante :
Je possède une chaudière 222F avec un un boîttier pour la relier au net VITOCOM100 et un Vitotronic pour l'affichage déporté dans le salon. Pour la connexion à jeedom, ce qui importe c'est le Vitocom.
Comme j'ai un Vitocom, je comprends que je peux accéder à mes données sur vitodata100.viessmann.com et donc je dois suivre l'explication de scotty92fr sur le premier post. J'accède à mes infos sur mon mobile via l'application Vitotrol.
Mais comme ce n'est pas un Vitoconnect, je ne peux pas utiliser toute les autres info du fil de discussion avec l'accès à l'API sur api.viessmann.io. Je ne peux pas utiliser l'application ViCare.
Jusque là est-ce que je me trompe ?? Parce que je me ferme beaucoup de porte j'ai l'impression.
Enfin j'ai réussi à implémenter les scripts de scotty92fr, j'arrive à récupérer quelques infos.
Cependant, je n'arrive pas faire changer en mode éco. J'ai beau envoyer la commande, rien n'y fait.
J'ai l'impression que bon nombre des paramètres supposés être R/W ne le sont pas chez moi.
De plus je demande pas mal de paramètre dans le Viessmann.php et je ne les récupère pas tous dans le Viessmann.json, et la plupart n'ont même pas de noms.
Je joins mon *php et mon *json pour les bonnes âmes qui pourraient m'aider.
Merci à la communauté
Le PHP
Code : Tout sélectionner
<?php
/*
Script viessmann version 1.0 par Michel Manceron
Permet de recuperer et gerer au minima la commande de gestion du système de chauffage Viessmann Vitodata 100
- Le script lancé sans parmètre : Récupération des données du chauffage (paramètre dans $DataIds)
- Envoyer une information au système de chauffage (par ex: passer en mode economique, ...
le script permet la récupération des informations dans un fichier au format JSON "viessmann.json" dans le même répertoire que fichier script "Viessmann.php"
le script est lancé par le plugin script
Update des informations:
Nom : Update
Type Script: Script
Type: Action et défaut
Requête: /var/www/html/plugins/script/core/ressources/Viessman.php
le numéro de l'information est la clef pour y acceder: l'accès se fait par le plugin script, avec comme requete :
"numInformation>Wert"
exemple: Nom: Temp_Exterieur
type Script: JSON
Type: info et Numérique
Requête: 5373>Wert
Options: https://AdresseJeedom/plugins/script/core/ressources/viessmann.json
Unité: °
Modification des paramètres:
exemple:
Nom : Eco_on (Valeur de la commande : ModeEconomique)
Type Script: Script
Type: Action et défaut
Requête: /var/www/html/plugins/script/core/ressources/Viessman.php 7853=1
Il est nécessaire de modifier la valeur des variables Users : $login, $Pass, $Installation
2017/11/17 - Version 1.0 Version initiale
*/
// Variable Users
$Login = "XXXXXXXXXXX@gmail.com";
$Pass = "XXXXXXXXXX";
$Installation = "XXXXXXXXXXXXXXXXXXXX";
// nom du fichier log
$filelog ='Script_Viessmann';
$directorylog= dirname(__FILE__)."/../../../../log";
// initialisation des variables
$InstallationID = '';
$AppareilID = '';
// Tableau des points d'information à interroger
$DataIds = array();
array_push ($DataIds,45,48,104,111,245,5372,5373,5374,5385,7182,7192,7193,7194,7197,7221,7247,7250,10763); // groupe Chaudière
//array_push ($DataIds,5272,5273,5274,5276,5277,5279); // groupe Solaire
array_push ($DataIds,949,5280,5381,5382,7177,7179,7181,10453); //groupe ECS
array_push ($DataIds,46,49,77,80,83,86,89,94,274,307,310,709,715,718,730,2871,2877,5376,6053,7853,7856,10430); //groupe Chauffage1
array_push ($DataIds,5377,84,87,81,7220,6054,78,7857,90,7854,716,7219,710,272,719,731,10430,44,47,308,311,2873,2879); //groupe Chauffage2
// Adresse de l'API
$client = new SoapClient('https://www.viessmann.com/app_vitodata/VIIWebService-1.16.0.0/iPhoneWebService.asmx?WSDL');
$anlageID = 0;
/* fonction login
permet de se connecter à une installation. cette fonction récupère l'installationID et AppareilID
retour de true/false suivant la connexion
*/
function login(){
global $client,$anlage,$Login,$Pass,$Installation,$InstallationID,$AppareilID;
$flag = false;
$DataArray = array('Benutzer'=> $Login,
'Passwort'=> $Pass,
'Betriebssystem'=>'Debian9',
'AppId'=>'Jeedom',
'AppVersion'=>'1.0');
$out = time()+30;
while ( $out > time()) {
try
{
$response = $client->GetStateOfConnection();
if ($response->GetStateOfConnectionResult->Ergebnis == 6) {
$response = $client->login($DataArray);
if ($response->LoginResult->Ergebnis == 0){
write_log ('Connexion effectuées.');
$response = $client->getDevices();
foreach ($response->GetDevicesResult->AnlageListe as $key => $value) {
if ($value->AnlageName == $Installation) {
write_log ('installation : '. $value->AnlageId);
$InstallationID = $value->AnlageId;
foreach ($value->GeraeteListe as $key1 => $value1) {
write_log ('Appareil : '. $value1->GeraetId );
$AppareilID = $value1->GeraetId;
$flag = true;
}
}
}
}
}
}
catch (Exception $e){
write_log ('Err: ('.$e->getCode().')'.$e->getMessage() );
}
if ($flag) {break;}
sleep(5);
}
return $flag;
}
/* fonction logout
permet de se déconnecter du système de chauffage
pas de valeur de retour
*/
function logout(){
global $client;
$flag = false;
$out = time()+30;
while ( $out > time()) {
try{
$response = $client->logout();
if ($response->LogoutResult == 1 ) {
write_log ("Deconnexion du service");
break;
}
}
catch (Exception $e) {
write_log ('Err: ('.$e->getCode().')'.$e->getMessage() );
}
sleep(5);
}
}
/* fonction getInfoPoints
interroge le système de chauffage sur tous les noeuds disponible
retourne un tableau avec le Nom de l'information
*/
function getInfoPoints(){
global $client,$InstallationID,$AppareilID;
write_log ("Chargement des infos sur les noeuds de l'installation.");
$DataArray = array(
'AnlageId'=> $InstallationID,
'GeraetId'=> $AppareilID,
);
$out = time()+30;
while ( $out > time()) {
try{
$response = $client->GetTypeInfo($DataArray);
foreach ($response->GetTypeInfoResult->TypeInfoListe->DatenpunktTypInfo as $key => $value) {
$table[$value->DatenpunktId] =array('Name' => $value->DatenpunktName,
'iswriteable' => $value->IstSchreibbar
);
}
write_log (" Nombre de noeuds : ".count($table));
break;
}
catch (Exception $e) {
write_log ('Err: ('.$e->getCode().')'.$e->getMessage() );
}
sleep(5);
}
return $table;
}
/* fonction refreshInfos
interroge les noeuds du système de chauffage
retourne un tableau avec le Nom de l'information et la valeur de chaque noeuds
*/
Function refreshInfos(){
global $client,$InstallationID,$AppareilID,$TableInfo,$DataIds;
write_log ("Demande de rafraichissement des données....");
$DataArray = array(
'AnlageId'=> $InstallationID,
'GeraetId'=> $AppareilID,
'DatenpunktIds' => $DataIds
);
$response = $client->RefreshData($DataArray);
$DataArray_temp = array(
'AktualisierungsId'=> $response->RefreshDataResult->AktualisierungsId,
);
$flag = false;
$out = time()+90;
while ( $out > time()) {
$response1 = $client->RequestRefreshStatus ($DataArray_temp );
write_log ("Status de la demande de rafraichissement : ".status2string($response1->RequestRefreshStatusResult->Status));
if ($response1->RequestRefreshStatusResult->Status == 4) {
$flag = true;
break;
}
sleep(5);
}
//sleep(30);
if ($flag){
$flag = false;
if ($response->RefreshDataResult->Ergebnis == 0) {
$out = time()+90;
while ( $out > time()) {
$response = $client->GetData($DataArray);
if ($response->GetDataResult->Ergebnis == 0) {
foreach ($response->GetDataResult->DatenwerteListe->WerteListe as $key => $value) {
$Table[ $value->DatenpunktId ]=array (
"Wert" => $value->Wert,
"Zeitstempel" => $value->Zeitstempel,
"Name" => $TableInfo[$value->DatenpunktId]['Name'],
"iswriteable" =>$TableInfo[$value->DatenpunktId]['iswriteable']
);
}
write_log ("rafraichissement des données effectuées");
$flag = true;
break;
}
sleep(5);
}
}
if (!$flag){
write_log ("intérrogation des noeuds impossible !");
}
}
else
{
write_log ("demande de rafraichissement non aboutie !");
}
return $Table;
}
/* fonction WriteData
demande la modification d'une valeur d'un noeud du système de chauffage
retourne un tableau avec le Nom de l'information et la valeur de chaque noeuds
*/
function WriteData( $point,$Data){
global $client,$InstallationID,$AppareilID;
write_log ("Demande de rafraichissement des données....");
$DataArray = array(
'AnlageId'=> $InstallationID,
'GeraetId'=> $AppareilID,
'DatapointId' => $point,
'Wert' => $Data
);
write_log ('ecriture => '.$point.' => '.$Data );
$response = $client->WriteData($DataArray);
$DataArray_temp = array(
'AktualisierungsId'=> $response->WriteDataResult->AktualisierungsId,
);
$response1 = $client->RequestWriteStatus ($DataArray_temp);
$flag = false;
$out = time()+90;
while ( $out > time()) {
$response1 = $client->RequestWriteStatus ($DataArray_temp);
write_log ("Status de la demande d'écriture : ".status2string($response1->RequestWriteStatusResult->Status));
if ($response1->RequestWriteStatusResult->Status == 4) {
write_log ("Donnée Mise à jour : $point = $Data");
$flag = true;
break;
}
else {
}
sleep(5);
}
return $flag;
}
/* fonction write_json
ecrit le tableau des données en JSON dans le fichier Viessmann.json
ne retourne aucune valeur
*/
function write_json( $Chaine )
{
write_log ("Mise a jour du json");
$file = dirname(__FILE__)."/viessmann.json";
if (!file_exists($file)) touch($file);
$fh = fopen($file, 'w+');
fwrite($fh, $Chaine);
fclose($fh);
}
/* fonction status2string
transforme le code de status en texte lisible
retourne le texte si reconnus, sinon la valeur
*/
function status2string($status){
switch ($status) {
case '1':
case 1: $st = "prise en compte";
break;
case '3':
case 3: $st = "traitement en cours";
break;
case '4':
case 4: $st = "traitement effectué";
break;
default: $st = $status;
break;
};
return $st;
}
/* fonction write_log
Permet d'écrire un message dans le fichier log.
*/
function write_log ($message)
{
global $filelog,$directorylog;
$logfile = $directorylog."/".$filelog;
$dt = (new \DateTime())->format('Y-m-d H:i:s');
if (!file_exists($logfile)) {touch($logfile);};
$myfile = fopen($logfile, "a");
fwrite($myfile, "\n". $dt.": ".$message);
fclose($myfile);
}
//Main
// traitement des paramêtres
if (isset($argv)) {
foreach ($argv as $arg) {
$argList = explode('=', $arg);
if (isset($argList[0]) && isset($argList[1])) {
$_GET[$argList[0]] = $argList[1];
write_log("Paramètre ".$argList[0]."=".$argList[1]);
}
}
}
//traitement principal
try {
if (login()) {
$TableInfo = getInfoPoints();
if (is_array($TableInfo)){
if (isset($argList[0]) && isset($argList[1])) {
if (!(writedata($argList[0],$argList[1]))) {write_log("Ecriture impossible de la valeur demandée");} ;
}
$Info=refreshInfos();
if (is_array($Info)){
$filejson = json_encode($Info);
write_json ($filejson);
}
logout();
}
}
else{
write_log("Connexion impossible !");
}
echo "Ok";
}
catch (Exception $e) {
write_log ('Exception : ligne='.$e->getLine().'('. $e->getCode().')'. $e->getMessage());
//$trace = $e->getTrace();
//write_log (print_r( $trace,true));
//$a = print_r(get_defined_vars(), true);
//write_log ($a);
echo "Erreur, voir $filelog";
}
//garbage
write_log ('--------------------------------------------------------------------------');
unset ( $TableInfo,$Info,$filejson,$Login,$Pass,$Installation,$InstallationID,$AppareilID,$DataIds,$anlageID,$anlage,$filelog,$directorylog);
Le JSON
Code : Tout sélectionner
{"77":{"Wert":"0","Zeitstempel":"2018-12-11 22:32:25","Name":null,"iswriteable":null},"78":{"Wert":"0","Zeitstempel":"2018-12-11 22:32:25","Name":null,"iswriteable":null},"80":{"Wert":"20","Zeitstempel":"2018-12-11 22:32:25","Name":null,"iswriteable":null},"81":{"Wert":"20","Zeitstempel":"2018-12-11 22:32:25","Name":null,"iswriteable":null},"83":{"Wert":"20","Zeitstempel":"2018-12-11 22:32:25","Name":null,"iswriteable":null},"84":{"Wert":"20","Zeitstempel":"2018-12-11 22:32:25","Name":null,"iswriteable":null},"86":{"Wert":"3","Zeitstempel":"2015-12-16 14:55:41","Name":null,"iswriteable":null},"87":{"Wert":"3","Zeitstempel":"2015-12-16 14:55:53","Name":null,"iswriteable":null},"89":{"Wert":"1","Zeitstempel":"2018-12-11 22:32:25","Name":null,"iswriteable":null},"90":{"Wert":"1","Zeitstempel":"2018-12-11 22:32:25","Name":null,"iswriteable":null},"94":{"Wert":"2","Zeitstempel":"2018-11-26 17:18:01","Name":null,"iswriteable":null},"104":{"Wert":"6410.2","Zeitstempel":"2018-12-11 22:35:26","Name":"anzahl_brennerstunden_r","iswriteable":false},"111":{"Wert":"8977","Zeitstempel":"2018-12-11 22:35:26","Name":"anzahl_brennerstart_r","iswriteable":true},"245":{"Wert":"1","Zeitstempel":"2018-12-11 22:35:26","Name":"zustand_interne_pumpe_r","iswriteable":false},"272":{"Wert":"0","Zeitstempel":"2018-12-11 22:35:26","Name":null,"iswriteable":null},"274":{"Wert":"0","Zeitstempel":"2015-12-16 14:55:41","Name":null,"iswriteable":null},"307":{"Wert":"1970-01-01 00:00:00","Zeitstempel":"2018-12-11 22:32:25","Name":null,"iswriteable":null},"308":{"Wert":"1970-01-01 00:00:00","Zeitstempel":"2018-12-11 22:32:25","Name":null,"iswriteable":null},"310":{"Wert":"1970-01-01 00:00:00","Zeitstempel":"2018-12-11 22:32:25","Name":null,"iswriteable":null},"311":{"Wert":"1970-01-01 00:00:00","Zeitstempel":"2018-12-11 22:32:25","Name":null,"iswriteable":null},"709":{"Wert":"3","Zeitstempel":"2018-12-11 22:35:26","Name":null,"iswriteable":null},"710":{"Wert":"3","Zeitstempel":"2018-12-11 22:35:26","Name":null,"iswriteable":null},"715":{"Wert":"0","Zeitstempel":"2018-12-11 22:35:26","Name":null,"iswriteable":null},"716":{"Wert":"0","Zeitstempel":"2018-12-11 22:35:26","Name":null,"iswriteable":null},"718":{"Wert":"0","Zeitstempel":"2018-12-11 22:35:26","Name":null,"iswriteable":null},"719":{"Wert":"0","Zeitstempel":"2018-12-11 22:35:26","Name":null,"iswriteable":null},"730":{"Wert":"0","Zeitstempel":"2018-12-11 22:35:26","Name":null,"iswriteable":null},"731":{"Wert":"0","Zeitstempel":"2018-12-11 22:35:26","Name":null,"iswriteable":null},"949":{"Wert":"0","Zeitstempel":"2018-12-11 22:35:26","Name":"konf_ww_solltemp_2_rw","iswriteable":true},"2871":{"Wert":"1.4","Zeitstempel":"2018-12-11 22:35:26","Name":null,"iswriteable":null},"2873":{"Wert":"1.4","Zeitstempel":"2018-12-11 22:35:26","Name":null,"iswriteable":null},"2877":{"Wert":"0","Zeitstempel":"2018-12-11 22:35:26","Name":null,"iswriteable":null},"2879":{"Wert":"0","Zeitstempel":"2018-12-11 22:35:26","Name":null,"iswriteable":null},"5280":{"Wert":"0","Zeitstempel":"2018-12-11 22:35:26","Name":"zustand_speicherladepumpe_r","iswriteable":false},"5372":{"Wert":"39","Zeitstempel":"2018-12-11 22:35:26","Name":"temp_agt_r","iswriteable":false},"5373":{"Wert":"2.5","Zeitstempel":"2018-12-11 22:35:26","Name":"temp_ats_r","iswriteable":false},"5374":{"Wert":"42","Zeitstempel":"2018-12-11 22:35:26","Name":"temp_kts_r","iswriteable":false},"5376":{"Wert":"20","Zeitstempel":"2018-12-11 22:35:26","Name":null,"iswriteable":null},"5377":{"Wert":"20","Zeitstempel":"2018-12-11 22:35:26","Name":null,"iswriteable":null},"5381":{"Wert":"51.3","Zeitstempel":"2018-12-11 22:35:26","Name":"temp_ww_r","iswriteable":false},"5382":{"Wert":"20","Zeitstempel":"2018-12-11 22:35:26","Name":null,"iswriteable":null},"5385":{"Wert":"2018-12-11 22:10:45","Zeitstempel":"2018-12-11 22:35:26","Name":"konf_uhrzeit_rw","iswriteable":true},"6053":{"Wert":"0","Zeitstempel":"2018-12-11 22:35:26","Name":null,"iswriteable":null},"6054":{"Wert":"0","Zeitstempel":"2018-12-11 22:35:26","Name":null,"iswriteable":null},"7177":{"Wert":"50","Zeitstempel":"2018-12-11 22:35:26","Name":null,"iswriteable":null},"7179":{"Wert":"0","Zeitstempel":"2018-12-11 22:35:26","Name":"info_ww_charging_active_r","iswriteable":false},"7181":{"Wert":"1","Zeitstempel":"2018-12-11 22:35:26","Name":"zustand_zirkulationspumpe_r","iswriteable":false},"7184":{"Wert":"00:00:00:00:00:00:00:00:00:00","Zeitstempel":"2018-12-11 22:32:25","Name":"aktuelle_fehler_r","iswriteable":false},"7219":{"Wert":"2","Zeitstempel":"2015-12-16 14:55:53","Name":null,"iswriteable":null},"7220":{"Wert":"0","Zeitstempel":"2015-12-16 14:55:53","Name":null,"iswriteable":null},"7247":{"Wert":"0","Zeitstempel":"2018-12-11 22:35:26","Name":null,"iswriteable":null},"7250":{"Wert":"0","Zeitstempel":"2018-12-11 22:35:26","Name":null,"iswriteable":null},"7853":{"Wert":"1","Zeitstempel":"2018-12-11 22:35:26","Name":null,"iswriteable":null},"7854":{"Wert":"1","Zeitstempel":"2018-12-11 22:35:26","Name":null,"iswriteable":null},"7856":{"Wert":"0","Zeitstempel":"2018-12-11 22:35:26","Name":null,"iswriteable":null},"7857":{"Wert":"0","Zeitstempel":"2018-12-11 22:35:26","Name":null,"iswriteable":null}}