該程式庫透過使用 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 ())