Cette bibliothèque implémente l'accès aux appareils Viessmann en utilisant l'API officielle du portail des développeurs Viessmann.
device.circuits
vers device.burners
et device.compressor
. PyViCare
générale. Utilisez cette classe pour charger tous les appareils disponibles.Device
. Vous pouvez désormais accéder et parcourir tous les circuits disponibles via device.circuits
. Cela permet de voir facilement quelles propriétés dépendent du circuit.Voir l'exemple ci-dessous pour savoir comment vous pouvez l'utiliser.
raise_exception_on_rate_limit
)raise_exception_on_not_supported_device_feature
)Pour utiliser PyViCare, chaque utilisateur doit s'inscrire et créer son client API personnel. Suivez ces étapes pour créer votre client :
vicare://oauth-callback/everest
Client ID
à utiliser dans votre code. Transmettez-le comme paramètre de constructeur à l'appareil.Veuillez noter que toutes les propriétés des anciennes versions et de l'application mobile ViCare ne sont pas disponibles dans la nouvelle API. Les propriétés manquantes ont été supprimées et pourraient être ajoutées ultérieurement si elles sont à nouveau disponibles.
Nous avons besoin d'aide pour tester et améliorer PyViCare, car les responsables ne disposent que de types spécifiques de systèmes de chauffage. Pour les bugs, les questions ou les demandes de fonctionnalités, rejoignez le canal PyViCare sur Discord ou créez un problème dans ce référentiel.
Selon l'appareil, certaines fonctionnalités ne sont pas disponibles/prises en charge. Cela entraîne la génération d'une PyViCareNotSupportedFeatureError
si la méthode dédiée est appelée. Il ne s'agit probablement pas d'un bug, mais d'une limitation de l'appareil lui-même.
Astuce : vous pouvez utiliser contextlib.suppress de Python pour le gérer avec élégance.
asGazBoiler
pour les chauffages au gazasHeatPump
pour les pompes à chaleurasFuelCell
pour les piles à combustibleasPelletsBoiler
pour le chauffage aux pelletsasOilBoiler
pour les chauffages au mazoutasHybridDevice
pour les chauffages hybrides gaz/pompe à chaleur import sys
import logging
from PyViCare . PyViCare import PyViCare
client_id = "INSERT CLIENT ID"
email = "email@domain"
password = "password"
vicare = PyViCare ()
vicare . initWithCredentials ( email , password , client_id , "token.save" )
device = vicare . devices [ 0 ]
print ( device . getModel ())
print ( "Online" if device . isOnline () else "Offline" )
t = device . asAutoDetectDevice ()
print ( t . getDomesticHotWaterConfiguredTemperature ())
print ( t . getDomesticHotWaterStorageTemperature ())
print ( t . getOutsideTemperature ())
print ( t . getRoomTemperature ())
print ( t . getBoilerTemperature ())
print ( t . setDomesticHotWaterTemperature ( 59 ))
circuit = t . circuits [ 0 ] #select heating circuit
print ( circuit . getSupplyTemperature ())
print ( circuit . getHeatingCurveShift ())
print ( circuit . getHeatingCurveSlope ())
print ( circuit . getActiveProgram ())
print ( circuit . getPrograms ())
print ( circuit . getCurrentDesiredTemperature ())
print ( circuit . getDesiredTemperatureForProgram ( "comfort" ))
print ( circuit . getActiveMode ())
print ( circuit . getDesiredTemperatureForProgram ( "comfort" ))
print ( circuit . setProgramTemperature ( "comfort" , 21 ))
print ( circuit . activateProgram ( "comfort" ))
print ( circuit . deactivateComfort ())
burner = t . burners [ 0 ] #select burner
print ( burner . getActive ())
compressor = t . compressors [ 0 ] #select compressor
print ( compressor . getActive ())
Suivez ces étapes pour accéder à l'API dans Postman :
Créez un jeton d'accès dans l'onglet Authorization
avec le type OAuth 2.0
et les entrées suivantes :
PyViCare
Authorization Code (With PKCE)
vicare://oauth-callback/everest
https://iam.viessmann.com/idp/v3/authorize
https://iam.viessmann.com/idp/v3/token
SHA-256
IoT User
Send client credentials in body
.Une fenêtre contextuelle de connexion s'ouvrira. Entrez votre nom d'utilisateur et votre mot de passe ViCare.
Utilisez cette URL pour accéder à votre installationId
, gatewaySerial
et deviceId
:
https://api.viessmann.com/iot/v1/equipment/installations?includeGateways=true
installationId
est data[0].id
gatewaySerial
est data[0].gateways[0].serial
deviceId
est data[0].gateways[0].devices[0].id
Utilisez les données ci-dessus pour remplacer {installationId}
, {gatewaySerial}
et {deviceId}
dans cette URL pour étudier l'API Viessmann :
https://api.viessmann.com/iot/v1/features/installations/{installationId}/gateways/{gatewaySerial}/devices/{deviceId}/features
En raison des dernières modifications apportées à l'API Viessmann, les limites de débit peuvent être atteintes. Dans ce cas, une PyViCareRateLimitError
est levée. Vous pouvez lire l'erreur ( limitResetDate
) lorsque la limite de débit est réinitialisée.
Afin de faciliter la création de davantage de cas de test, vous pouvez exécuter ce code et faire une demande d'extraction avec le nouveau test de votre type d'appareil ajouté. Votre test doit être validé dans tests/response et nommé
.
Le code à exécuter pour que cela se produise est ci-dessous. Cela supprime automatiquement les informations « sensibles » telles que l'identifiant d'installation et les numéros de série. Vous pouvez soit remplacer les valeurs par défaut, soit utiliser les variables d'environnement PYVICARE_*
.
import sys
import os
from PyViCare . PyViCare import PyViCare
client_id = os . getenv ( "PYVICARE_CLIENT_ID" , "INSERT CLIENT_ID" )
email = os . getenv ( "PYVICARE_EMAIL" , "email@domain" )
password = os . getenv ( "PYVICARE_PASSWORD" , "password" )
vicare = PyViCare ()
vicare . initWithCredentials ( email , password , client_id , "token.save" )
with open ( f"dump.json" , mode = 'w' ) as output :
output . write ( vicare . devices [ 0 ]. dump_secure ())