Эта библиотека реализует доступ к устройствам 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, поскольку у сопровождающих есть только определенные типы систем отопления. Если вы хотите узнать об ошибках, задать вопросы или задать вопрос, присоединяйтесь к каналу PyViCare в Discord или создайте проблему в этом репозитории.
В зависимости от устройства некоторые функции недоступны/поддерживаются. Это приводит к возникновению PyViCareNotSupportedFeatureError
при вызове выделенного метода. Скорее всего это не баг, а ограничение самого устройства.
Совет: вы можете использовать contextlib.suppress Pythons, чтобы справиться с этим изящно.
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 ())
Выполните следующие действия, чтобы получить доступ к API в Postman:
Создайте токен доступа на вкладке 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
Используйте приведенные выше данные, чтобы заменить {installationId}
, {gatewaySerial}
и {deviceId}
в этом URL-адресе, чтобы изучить API Viessmann:
https://api.viessmann.com/iot/v1/features/installations/{installationId}/gateways/{gatewaySerial}/devices/{deviceId}/features
Из-за последних изменений в API Viessmann могут быть превышены ограничения по скорости. В этом случае возникает PyViCareRateLimitError
. Вы можете прочитать ошибку ( limitResetDate
) при сбросе ограничения скорости.
Чтобы упростить создание дополнительных тестовых случаев, вы можете запустить этот код и сделать запрос на включение с добавлением нового теста для вашего типа устройства. Ваш тест должен быть помещен в тесты/ответ и назван
.
Код, который нужно запустить, чтобы это произошло, приведен ниже. Это автоматически удаляет «конфиденциальную» информацию, такую как идентификатор установки и серийные номера. Вы можете либо заменить значения по умолчанию, либо использовать переменные среды 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 ())