-
Notifications
You must be signed in to change notification settings - Fork 37
Home
Le code a été développé en php 7. Le git suit le principe de GitFlow:
- La branche master contiendra les livraison(0.1,0.2,0.3,...)
- La branche develop contiendra les développement(feature) en cours finalisés et la version sera suffixée par SNAPSHOT
- Les branches feature/xxx contiendront les feature en cours de développement. Il se peut que je ne les commit pas toutes et les mettent directement dans develop.
Pour compiler le code en phar:
- Se mettre dans le répertoire racine
- Lancer la commande
php -d phar.readonly=0 phar-builder.phar
. Ceci lancera l'outil de compilation qui posera plusieurs questions: ** Where is your application <option=bold>composer.json</option=bold> . Appuyez sur enter pour la valeur par défaut 1.1. Do you want to include dev? (yes/no) [no]:. Appuyez sur enter pour la valeur par défaut 1.1. Where is your application start file? $yourDir/Viessmann-API/index.php. Appuyez sur enter pour la valeur par défaut. 1.1. Do you want to compress the Phar? [No]:. A vous de choisir, ça n'a pas d'importance 1.1. What is the name of the phar? [app.phar]: . Je met en général Viessmann-Api-{version}.phar. Vous devez juste faire attention que ça soit cohérent avec votre include. Exemple `include 'phar://../bin/Viessmann-Api-0.3-SNAPSHOT.phar/index.php'; 1.1. Where do you want to save your phar application? Perso je mets ça dans Viessmann-API/bin 1.1. Do you want to skip the shebang? (yes/no) [no]: Appuyez sur Enter.
Vous aurez alors un nouveau phar dans le répertoire bin du projet.
Les dépendances sont gérées via composer. Le client Oauth est implémenté à l'aide la librairie PHPoAuthLib https://github.com/Lusitanian/PHPoAuthLib Le parsing Siren Json est fait avec siren-php https://github.com/tomphp/siren-php
Désormais, l'API est livrée sous la forme d'un seul fichier .phar(php archive) qu'on peut inclure directement dans un fichier php.
Le fichier php example/Main.php montre un simple exemple d'appel.
Il suffit d'ajouter son user à la 1ère ligne de resources/credentials.properties et son password à la 2ème ligne.
Tout le reste de la partie Oauth se fait de façon transparente à l'instanciation de l'api.
La méthode getFeatures() permet de récupérer le tableau des features en json.
La méthode getRawData renvoye le json/siren directement. Il suffit de lui passer le nom de la feature. J'ai ajouté des constantes pour les features courrantes(voir après code)
Les autres méthodes renvoie les valeurs directement.
<?php
include 'phar://../bin/Viessmann-Api-0.1-SNAPSHOT.phar/index.php';
use Viessmann\API\ViessmannAPI;
$credentials = file("../resources/credentials.properties");
$params=[
"user"=>trim("$credentials[0]","\n"),
"pwd"=>trim("$credentials[1]","\n"),
"uri"=>"vicare://oauth-callback/everest"
];
$viessmanApi=new ViessmannAPI($params);
echo $viessmanApi->getFeatures();
echo "Température extérieure ".$viessmanApi->getOutsideTemperature()."\n";
echo "Température boiler ".$viessmanApi->getBoilerTemperature()."\n";
echo "Pente ".$viessmanApi->getSlope()."\n";
echo "Parallèle ".$viessmanApi->getShift()."\n";
echo "Mode chaudière ".$viessmanApi->getActiveMode()."\n";
echo "Programme actif ".$viessmanApi->getActiveProgram()."\n";
echo "Is Heating Burner active ? ".$viessmanApi->isHeatingBurnerActive()."\n";//in php false bool is converted into empty string
echo "Is Dhw mode active ? ".$viessmanApi->isDhwModeActive()."\n";
echo "Température de confort ".$viessmanApi->getComfortProgramTemperature()."\n";
echo "Température écho ".$viessmanApi->getEchoProgramTemperature()."\n";
echo "Température externe ".$viessmanApi->getExternalProgramTemperature()."\n";
echo "Température réduit ".$viessmanApi->getReducedProgramTemperature()."\n";
echo "Température supply ".$viessmanApi->getSupplyProgramTemperature()."\n";
echo "Est en veille ? ".$viessmanApi->isInStandbyMode()."\n";
echo "Appelle resources ".$viessmanApi->getRawData(ViessmannAPI::HEATING_PROGRAM_ACTIVE);
Liste des constantes passables à getRawData:
const BOILER_TEMP="heating.boiler.sensors.temperature.main";
const HEATING_BURNER="heating.burner";
const HEATING_CIRCUITS="heating.circuits";
const HEATING_CIRCUITS_0="heating.circuits.0";
const HEATING_CURVE="heating.circuits.0.heating.curve";
const HEATING_OPERATING_MODES="heating.circuits.0.operating.modes.active";
const HEATING_DWH_MODE="heating.circuits.0.operating.modes.dhw";
const HEATING_DWH_AND_HEATING_MODE="heating.circuits.0.operating.modes.dhwAndHeating";
const HEATING_FORCED_NORMAL_MODE="heating.circuits.0.operating.modes.forcedNormal";
const HEATING_FORCED_REDUCTED_MODE="heating.circuits.0.operating.modes.forcedReduced";
const HEATING_STANDY_MODE="heating.circuits.0.operating.modes.standby";
const HEATING_PROGRAM_ACTIVE="heating.circuits.0.operating.programs.active";
const HEATING_PROGRAM_COMFORT="heating.circuits.0.operating.programs.comfort";
const HEATING_PROGRAM_ECHO="heating.circuits.0.operating.programs.eco";
const HEATING_PROGRAM_EXTERNAL="heating.circuits.0.operating.programs.external";
const HEATING_PROGRAM_NORMAL="heating.circuits.0.operating.programs.normal";
const HEATING_PROGRAM_REDUCED="heating.circuits.0.operating.programs.reduced";
const HEATING_PROGRAM_STANDBY="heating.circuits.0.operating.programs.standby";
const HEATING_PROGRAM_SUPLY="heating.circuits.0.sensors.temperature.supply";
const HEATING_TIME_OFFSET="heating.device.time.offset";
const HEATING_DWH="heating.dhw";
const HEATING_CIRCUITS_1_DHW="heating.circuits.1.dhw";
const HEATING_DWH_TEMPERATURE="heating.dhw.temperature";
const HEATING_DWH_SENSORS="heating.dhw.sensors";
const HEATING_DWH_SENSORS_TEMPERATURE="heating.dhw.sensors.temperature";
const HEATING_DWH_SCHEDULE="heating.dhw.schedule";
const HEATING_DWH_TEMPERATURE_HOTWATER_STORAGE="heating.dhw.sensors.temperature.hotWaterStorage";
const HEATING_DWH_TEMPERATURE_OUTLET="heating.dhw.sensors.temperature.outlet";
const HEATING_GAS_CONSUMPTION_DHW="heating.gas.consumption.dhw";
const HEATING_TEMP_OUTSIDE="heating.sensors.temperature.outside";
const HEATING_SENSORS_TEMPERATURE="heating.sensors.temperature";
const HEATING_TIMEBASE="heating.service.timeBased";
const HEATING_SENSORS="heating.sensors";
const GATEWAY_DEVICES="gateway.devices";