Diese Bibliothek realisiert den Zugriff auf Viessmann-Geräte über die offizielle API des Viessmann Developer Portals.
device.circuits
nach device.burners
und device.compressor
verschoben. PyViCare
-Klasse geändert. Verwenden Sie diese Klasse, um alle verfügbaren Geräte zu laden.Device
-Klasse verschoben. Sie können jetzt über device.circuits
auf alle verfügbaren Schaltkreise zugreifen und diese durchlaufen. Dadurch lässt sich leicht erkennen, welche Eigenschaften von der Schaltung abhängen.Sehen Sie sich das Beispiel unten an, um zu erfahren, wie Sie das nutzen können.
raise_exception_on_rate_limit
)raise_exception_on_not_supported_device_feature
)Um PyViCare nutzen zu können, muss sich jeder Benutzer registrieren und seinen persönlichen API-Client erstellen. Befolgen Sie diese Schritte, um Ihren Kunden zu erstellen:
vicare://oauth-callback/everest
Client ID
um sie in Ihrem Code zu verwenden. Übergeben Sie es als Konstruktorparameter an das Gerät.Bitte beachten Sie, dass nicht alle Eigenschaften älterer Versionen und der mobilen ViCare-App in der neuen API verfügbar sind. Fehlende Eigenschaften wurden entfernt und werden möglicherweise später hinzugefügt, wenn sie wieder verfügbar sind.
Wir brauchen Hilfe beim Testen und Verbessern von PyViCare, da die Betreuer nur bestimmte Arten von Heizsystemen haben. Bei Fehlern, Fragen oder Funktionswünschen treten Sie dem PyViCare-Kanal auf Discord bei oder erstellen Sie ein Problem in diesem Repository.
Je nach Gerät sind einige Funktionen nicht verfügbar/unterstützt. Dies führt zur Auslösung eines PyViCareNotSupportedFeatureError
, wenn die dedizierte Methode aufgerufen wird. Dies ist höchstwahrscheinlich kein Fehler, sondern eine Einschränkung des Geräts selbst.
Tipp: Sie können Pythons contextlib.suppress verwenden, um damit elegant umzugehen.
asGazBoiler
für GasheizungenasHeatPump
für WärmepumpenasFuelCell
für BrennstoffzellenasPelletsBoiler
für PelletheizungenasOilBoiler
für ÖlheizungenasHybridDevice
für Gas-/Wärmepumpen-Hybridheizungen 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 ())
Befolgen Sie diese Schritte, um auf die API in Postman zuzugreifen:
Erstellen Sie auf der Registerkarte Authorization
ein Zugriffstoken mit dem Typ OAuth 2.0
und den folgenden Eingaben:
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
.Es öffnet sich ein Anmelde-Popup. Geben Sie Ihren ViCare-Benutzernamen und Ihr Passwort ein.
Verwenden Sie diese URL, um auf Ihre installationId
, gatewaySerial
und deviceId
zuzugreifen:
https://api.viessmann.com/iot/v1/equipment/installations?includeGateways=true
installationId
ist data[0].id
gatewaySerial
ist data[0].gateways[0].serial
deviceId
ist data[0].gateways[0].devices[0].id
Verwenden Sie die oben genannten Daten, um {installationId}
, {gatewaySerial}
und {deviceId}
in dieser URL zu ersetzen, um die Viessmann API zu untersuchen:
https://api.viessmann.com/iot/v1/features/installations/{installationId}/gateways/{gatewaySerial}/devices/{deviceId}/features
Aufgrund der neuesten Änderungen in der Viessmann API können Ratenlimits erreicht werden. In diesem Fall wird ein PyViCareRateLimitError
ausgelöst. Anhand des Fehlers ( limitResetDate
) können Sie ablesen, wann die Ratenbegrenzung zurückgesetzt wird.
Um die Erstellung weiterer Testfälle zu erleichtern, können Sie diesen Code ausführen und eine Pull-Anfrage mit dem neuen Test Ihres hinzugefügten Gerätetyps stellen. Ihr Test sollte in Tests/Antworten festgeschrieben werden und den Namen
haben.
Der Code, der ausgeführt werden muss, um dies zu erreichen, ist unten. Dadurch werden automatisch „sensible“ Informationen wie Installations-ID und Seriennummern entfernt. Sie können entweder Standardwerte ersetzen oder die Umgebungsvariablen PYVICARE_*
verwenden.
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 ())