このライブラリは、Viessmann Developer Portal の公式 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
SHA-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 ())