ไลบรารีนี้ใช้การเข้าถึงอุปกรณ์ Viessmann โดยใช้ API อย่างเป็นทางการจาก Viessmann Developer Portal
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
หากเรียกใช้เมธอดเฉพาะ นี่น่าจะไม่ใช่จุดบกพร่อง แต่เป็นข้อจำกัดของอุปกรณ์เอง
เคล็ดลับ: คุณสามารถใช้ Pythons 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 ())
ทำตามขั้นตอนเหล่านี้เพื่อเข้าถึง 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
ใช้ข้อมูลด้านบนเพื่อแทนที่ {installationId}
, {gatewaySerial}
และ {deviceId}
ใน URL นี้เพื่อตรวจสอบ Viessmann API:
https://api.viessmann.com/iot/v1/features/installations/{installationId}/gateways/{gatewaySerial}/devices/{deviceId}/features
เนื่องจากการเปลี่ยนแปลงล่าสุดในขีดจำกัดอัตรา Viessmann API อาจได้รับผลกระทบ ในกรณีนั้น 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 ())