该库通过使用 Viessmann 开发者门户的官方 API 实现对 Viessmann 设备的访问。
device.circuits
移至device.burners
和device.compressor
。 PyViCare
类。使用此类加载所有可用设备。Device
类。您现在可以通过device.circuits
访问和迭代所有可用电路。这样可以轻松查看哪些属性取决于电路。请参阅下面的示例了解如何使用它。
raise_exception_on_rate_limit
)raise_exception_on_not_supported_device_feature
)要使用 PyViCare,每个用户都必须注册并创建他们的个人 API 客户端。请按照以下步骤创建您的客户端:
vicare://oauth-callback/everest
Client ID
以在代码中使用。将其作为构造函数参数传递给设备。请注意,并非旧版本和 ViCare 移动应用程序中的所有属性都可以在新 API 中使用。缺失的属性已被删除,如果它们再次可用,可能会在以后添加。
我们需要帮助测试和改进 PyViCare,因为维护人员只有特定类型的加热系统。对于错误、问题或功能请求,请加入 Discord 上的 PyViCare 频道或在此存储库中创建问题。
根据设备的不同,某些功能不可用/不支持。如果调用专用方法,这会导致引发PyViCareNotSupportedFeatureError
。这很可能不是一个错误,而是设备本身的限制。
提示:您可以使用 Python 的 contextlib.suppress 来优雅地处理它。
asGazBoiler
进行燃气加热asHeatPump
asFuelCell
asPelletsBoiler
进行颗粒加热asOilBoiler
进行油加热asHybridDevice
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 ())
请按照以下步骤访问 Postman 中的 API:
在Authorization
选项卡中使用OAuth 2.0
类型和以下输入创建访问令牌:
PyViCare
Authorization Code (With PKCE)
vicare://oauth-callback/everest
https://iam.viessmann.com/idp/v3/authorize
https://iam.viessmann.com/idp/v3/token
://iam.viessmann.com/idp/v3/tokenSHA-256
IoT User
Send client credentials in body
。将打开登录弹出窗口。输入您的 ViCare 用户名和密码。
使用此 URL 访问您的installationId
、 gatewaySerial
和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
使用以上数据替换此 URL 中的{installationId}
、 {gatewaySerial}
和{deviceId}
来调查 Viessmann API:
https://api.viessmann.com/iot/v1/features/installations/{installationId}/gateways/{gatewaySerial}/devices/{deviceId}/features
由于 Viessmann API 的最新变化,可能会达到速率限制。在这种情况下,会引发PyViCareRateLimitError
。当速率限制重置时,您可以从错误 ( limitResetDate
) 中读取。
为了帮助确保更轻松地创建更多测试用例,您可以运行此代码并使用添加的设备类型的新测试发出拉取请求。您的测试应提交到测试/响应并命名为
。
为实现此目的而运行的代码如下。这会自动删除“敏感”信息,例如安装 ID 和序列号。您可以替换默认值或使用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 ())