Esta biblioteca implementa el acceso a los dispositivos Viessmann mediante la API oficial del Portal de desarrolladores de Viessmann.
device.circuits
a device.burners
y device.compressor
. PyViCare
. Utilice esta clase para cargar todos los dispositivos disponibles.Device
. Ahora puede acceder e iterar sobre todos los circuitos disponibles a través de device.circuits
. Esto permite ver fácilmente qué propiedades dependen del circuito.Vea el ejemplo a continuación para saber cómo puede usarlo.
raise_exception_on_rate_limit
)raise_exception_on_not_supported_device_feature
)Para utilizar PyViCare, cada usuario debe registrarse y crear su cliente API personal. Siga estos pasos para crear su cliente:
vicare://oauth-callback/everest
Client ID
para usarla en su código. Páselo como parámetro del constructor al dispositivo.Tenga en cuenta que no todas las propiedades de versiones anteriores y la aplicación móvil ViCare están disponibles en la nueva API. Las propiedades faltantes se eliminaron y es posible que se agreguen más adelante si vuelven a estar disponibles.
Necesitamos ayuda para probar y mejorar PyViCare, ya que los mantenedores solo tienen tipos específicos de sistemas de calefacción. Para errores, preguntas o solicitudes de funciones, únase al canal PyViCare en Discord o cree un problema en este repositorio.
Dependiendo del dispositivo, algunas funciones no están disponibles o no son compatibles. Esto da como resultado que se genere un PyViCareNotSupportedFeatureError
si se llama al método dedicado. Lo más probable es que esto no sea un error, sino una limitación del propio dispositivo.
Consejo: puedes usar Pythons contextlib.suppress para manejarlo con elegancia.
asGazBoiler
para calefacción de gasasHeatPump
para bombas de calor.asFuelCell
para pilas de combustibleasPelletsBoiler
para calentamientos de pellets.asOilBoiler
para calentamientos de gasoil.asHybridDevice
para calefacciones híbridas gas/bomba de calor 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 ())
Siga estos pasos para acceder a la API en Postman:
Cree un token de acceso en la pestaña Authorization
con el tipo OAuth 2.0
y las siguientes entradas:
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
.Se abrirá una ventana emergente de inicio de sesión. Ingrese su nombre de usuario y contraseña de ViCare.
Utilice esta URL para acceder a su installationId
, gatewaySerial
y deviceId
:
https://api.viessmann.com/iot/v1/equipment/installations?includeGateways=true
installationId
es data[0].id
gatewaySerial
es data[0].gateways[0].serial
deviceId
es data[0].gateways[0].devices[0].id
Utilice los datos anteriores para reemplazar {installationId}
, {gatewaySerial}
y {deviceId}
en esta URL para investigar la API de Viessmann:
https://api.viessmann.com/iot/v1/features/installations/{installationId}/gateways/{gatewaySerial}/devices/{deviceId}/features
Debido a los últimos cambios en la API de Viessmann, es posible que se alcancen los límites de tarifas. En ese caso, se genera un PyViCareRateLimitError
. Puede leer el error ( limitResetDate
) cuando se restablece el límite de velocidad.
Para ayudar a garantizar que sea más fácil crear más casos de prueba, puede ejecutar este código y realizar una solicitud de extracción con la nueva prueba de su tipo de dispositivo agregada. Su prueba debe comprometerse en pruebas/respuesta y denominarse
.
El código a ejecutar para que esto suceda se encuentra a continuación. Esto elimina automáticamente información "confidencial", como la identificación de instalación y los números de serie. Puede reemplazar los valores predeterminados o utilizar las variables de entorno 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 ())