Esta biblioteca implementa o acesso aos dispositivos Viessmann usando a API oficial do Viessmann Developer Portal.
device.circuits
para device.burners
e device.compressor
. PyViCare
geral. Use esta classe para carregar todos os dispositivos disponíveis.Device
. Agora você pode acessar e iterar todos os circuitos disponíveis por meio de device.circuits
. Isso permite ver facilmente quais propriedades dependem do circuito.Veja o exemplo abaixo para saber como você pode usar isso.
raise_exception_on_rate_limit
)raise_exception_on_not_supported_device_feature
)Para usar o PyViCare, cada usuário deve se registrar e criar seu cliente API pessoal. Siga estas etapas para criar seu cliente:
vicare://oauth-callback/everest
Client ID
para usar em seu código. Passe-o como parâmetro do construtor para o dispositivo.Observe que nem todas as propriedades de versões mais antigas e o aplicativo móvel ViCare estão disponíveis na nova API. As propriedades ausentes foram removidas e poderão ser adicionadas posteriormente se estiverem disponíveis novamente.
Precisamos de ajuda para testar e melhorar o PyViCare, uma vez que os mantenedores só possuem tipos específicos de sistemas de aquecimento. Para bugs, dúvidas ou solicitações de recursos, entre no canal PyViCare no Discord ou crie um problema neste repositório.
Dependendo do dispositivo, alguns recursos não estão disponíveis/suportados. Isso resulta no aumento de um PyViCareNotSupportedFeatureError
se o método dedicado for chamado. Provavelmente, isso não é um bug, mas uma limitação do próprio dispositivo.
Dica: você pode usar contextlib.suppress do Python para lidar com isso normalmente.
asGazBoiler
para aquecimentos a gásasHeatPump
para bombas de calorasFuelCell
para células de combustívelasPelletsBoiler
para aquecimento de pelletsasOilBoiler
para aquecimentos a óleoasHybridDevice
para aquecimentos híbridos a gás/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 estas etapas para acessar a API no Postman:
Crie um token de acesso na aba Authorization
com o tipo OAuth 2.0
e as seguintes 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
.Um pop-up de login será aberto. Digite seu nome de usuário e senha ViCare.
Use este URL para acessar seu installationId
, gatewaySerial
e deviceId
:
https://api.viessmann.com/iot/v1/equipment/installations?includeGateways=true
installationId
é data[0].id
gatewaySerial
é data[0].gateways[0].serial
deviceId
é data[0].gateways[0].devices[0].id
Use os dados acima para substituir {installationId}
, {gatewaySerial}
e {deviceId}
neste URL para investigar a API Viessmann:
https://api.viessmann.com/iot/v1/features/installations/{installationId}/gateways/{gatewaySerial}/devices/{deviceId}/features
Devido às últimas alterações na API Viessmann, os limites de taxa podem ser atingidos. Nesse caso, um PyViCareRateLimitError
é gerado. Você pode ler o erro ( limitResetDate
) quando o limite de taxa é redefinido.
Para ajudar a garantir a criação de mais casos de teste, você pode executar este código e fazer uma solicitação pull com o novo teste do seu tipo de dispositivo adicionado. Seu teste deve ser confirmado em testes/resposta e nomeado
.
O código a ser executado para que isso aconteça está abaixo. Isso remove automaticamente informações “confidenciais”, como ID de instalação e números de série. Você pode substituir os valores padrão ou usar as variáveis de ambiente 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 ())