مكتبة Python 3 لإدارة ترموستات Vaillant باستخدام API Netatmo. إنه يوفر رسم خرائط فردي مع واجهة برمجة تطبيقات Vaillant's Netatmo ويقدم وظائف مماثلة مثل تطبيق Vaillant vsmart/erelax الرسمي.
ملاحظة: لا تزال هذه المكتبة في حالة prelease وستكون حتى v1.0.0. قد يكون هناك تغييرات في API العامة في أي من إصدارات V0.xy.
يمكن تثبيت المكتبة ببساطة باستخدام PIP.
pip install vaillant-netatmo-apiتتطلب المكتبة Python 3 ولديها مثابرة واعتمادات HTTPX.
ملاحظة: HTTPX هو حاليا برنامج PRERELEASE. يجب أن يعمل الإصدار الموضح في
requirements.txtيجب أن يعمل Txt بشكل صحيح ، ولكن إذا كان هناك بعض التغييرات المكسورة ، فيرجى التحقق من تعقب مشكلة GitHub للمشكلات المعروفة.
جميع واجهات برمجة تطبيقات Netatmo محمية وتتطلب رمز حامل للمصادقة. للحصول على هذا الرمز المميز ، يقدم Netatmo واجهة برمجة تطبيقات OAuth.
نظرًا لأن Vaillant يستخدم منحة بيانات اعتماد كلمة مرور مالك الموارد ، فهناك طريقة واحدة فقط في واجهة برمجة تطبيقات AuthClient :
async_token : الحصول على رمز حامل وتخزينه في متجر الرمز المميز from vaillant_netatmo_api import auth_client
CLIENT_ID = ""
CLIENT_SECRET = ""
def handle_token_update ( token ):
token_string = token . serialize ()
write_to_storage ( token_string )
async with auth_client ( CLIENT_ID , CLIENT_SECRET , handle_token_update ) as client :
await client . async_token (
username ,
password ,
user_prefix ,
app_version ,
) هناك ثلاثة واجهات برمجة التطبيقات المتاحة ThermostatClient ، وكلها تتطلب رمز حامل للمصادقة:
async_get_thermostats_data : الحصول على جميع الأجهزة المرتبطة بحساب المستخدمasync_set_system_mode : تغيير وضع النظام للجهاز والوحدة النمطية (أي الصيف أو الشتاء أو Frostguard)async_set_minor_mode : تغيير الوضع الصغير للجهاز والوحدة النمطية (أي الوضع اليدوي ، الوضع بعيدًا أو وضع دفعة الماء الساخن)async_sync_schedule : تحديث بيانات الجدول عن الجهاز والوحدة النمطيةasync_switch_schedule : تغيير الجدول الزمني النشط للجهاز والوحدة النمطية from vaillant_netatmo_api import thermostat_client , SystemMode , Token
CLIENT_ID = ""
CLIENT_SECRET = ""
token_string = read_from_storage ()
token = Token . deserialize ( token_string )
def handle_token_update ( token ):
token_string = token . serialize ()
write_to_storage ( token_string )
async with thermostat_client ( CLIENT_ID , CLIENT_SECRET , token , handle_token_update ) as client :
devices = await client . async_get_thermostats_data ()
d_id = devices [ 0 ]. id
m_id = devices [ 0 ]. modules [ 0 ]. id
await client . async_set_system_mode ( d_id , m_id , SystemMode . WINTER ) على الرغم من أن المكتبة تقدم مدير السياق لاستخدام AuthClient و ThermostatClient ، إلا أنه ينبغي القيام بذلك فقط أثناء التطوير أو في سيناريوهات الاستخدام النادرة للغاية.
يستخدم كل من العملاء httpx.AsyncClient كمكتبة اتصال HTTP الأساسية ، والتي تنفذ تجميع الاتصال وإعادة استخدام الاتصال. هذا يعني أنه ينبغي القيام بطلبات متزامنة متعددة باستخدام نفس مثيل AuthClient أو ThermostatClient ، وهو أمر غير ممكن باستخدام API Manager Context لأن واجهة برمجة التطبيقات هذه ستعيد مثيلًا جديدًا للعميل في كل مرة تسمى طريقة auth_client أو thermostat_client .
لتحقيق الاستخدام الأمثل ، الذي سيستخدم تجميع الاتصال وإعادة استخدام الاتصال ، يجب استخدام كل من AuthClient و ThermostatClient من خلال إنشاء مثيل للعملاء وتوفير مثيل httpx.AsyncClient في مُنشئ. يجب استخدام هذا العميل المقدم كـ Singleton ، أو مع بعض آلية إدارة السياق الأخرى ، مع السياق أوسع من كتلة واحدة من الكود أو طلب واحد داخلي.
فيما يلي مثال للاستخدام في مساعد المنزل.
# When setting up integration with all the devices of one account, instantiate and store the client in a configuration memory store
async def async_setup_entry ( hass : HomeAssistant , entry : ConfigEntry ) -> bool :
client = get_async_client ( hass )
token_store = TokenStore (
entry . data [ CONF_CLIENT_ID ],
entry . data [ CONF_CLIENT_SECRET ],
token ,
handle_token_update ,
)
hass . data [ DOMAIN ][ entry . entry_id ] = ThermostatClient ( client , token_store )
hass . config_entries . async_setup_platforms ( entry , PLATFORMS )
return True
# When unloading the integration of this same account, read the client and close it manually
async def async_unload_entry ( hass : HomeAssistant , entry : ConfigEntry ) -> bool :
unload_ok = await hass . config_entries . async_unload_platforms ( entry , PLATFORMS )
if unload_ok :
hass . data [ DOMAIN ]. pop ( entry . entry_id )
return unload_okيجب استخدام السنانير المماثلة التي تمثل نوعًا من سياق التطبيق عند دمج هذه المكتبة في تطبيق مختلف (Flask أو Django أو ما شابه).
لن تكون هذه المكتبة موجودة إذا لم تكن للتطبيقات السابقة من خلال المشاريع التالية:
وضعوا الأساس من خلال استكشاف وتوثيق واجهات برمجة التطبيقات.
لا ترتبط هذه المكتبة بـ Vaillant أو Netatmo بأي شكل من الأشكال. إذا قرر إما Vaillant أو Netatmo تغيير أي شيء باستخدام واجهة برمجة التطبيقات ، أو منع الاستخدام خارج تطبيقات الطرف الأول ، فستتوقف هذه المكتبة عن العمل.