Netatmo APIを使用して、Vaillantサーモスタットを管理するためのPython 3ライブラリ。 VaillantのNetatmo APIで1対1のマッピングを提供し、公式のVaillant VSmart/Erelaxアプリと同様の機能を提供します。
注:このライブラリはまだプレレリーズステータスにあり、v1.0.0までになります。 V0.xyバージョンのいずれかで、パブリックAPIに壊れた変更がある可能性があります。
ライブラリは、PIPを使用して単純にインストールできます。
pip install vaillant-netatmo-apiライブラリにはPython 3が必要で、粘り強さとHTTPXの依存関係があります。
注:HTTPXは現在、PrerEleaseソフトウェアです。
requirements.txtで概説されているバージョンは適切に動作する必要がありますが、いくつかの壊れた変更がある場合は、既知の問題についてはGitHub Issueトラッカーを確認してください。
すべてのNetatmo APIは保護されており、認証するためにベアラートークンが必要です。このトークンを取得するために、NetatmoはOAuth APIを提供します。
Vaillantはリソース所有者のパスワード資格認証助成金を使用しているため、 AuthClient APIには1つの方法しかありません。
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に使用可能な3つのAPIがあり、そのすべてが認証のためにベアラートークンを必要とします。
async_get_thermostats_data :ユーザーアカウントに関連付けられているすべてのデバイスを取得するasync_set_system_mode :デバイスとモジュールのシステムモードの変更(すなわち、夏、冬、またはフロストガード)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使用するためのコンテキストマネージャーを提供しますが、これは開発中または非常にまれな使用シナリオでのみ行う必要があります。
両方のクライアントは、接続プーリングと接続の再利用を実装する、基礎となるHTTP通信ライブラリとしてhttpx.AsyncClient使用します。これは、 AuthClientまたはThermostatClient auth_client同じインスタンスを使用して複数の同意リクエストthermostat_client実行する必要があることを意味します。これは、Context Manager APIを使用して不可能です。
接続プーリングと接続の再利用を利用する最適な使用法を実現するには、クライアントをインスタンス化し、コンストラクターでhttpx.AsyncClientインスタンスを提供することにより、 AuthClientとThermostatClient両方を使用する必要があります。これにより、クライアントはシングルトンとして、または他のコンテキスト管理メカニズムを使用して使用する必要があります。コンテキストは、コードの1ブロックまたは1つのインバウンドリクエストよりも広くなっています。
これは、ホームアシスタントの使用の例です。
# 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など)。
このライブラリは、以下のプロジェクトによる以前の実装がなければ、存在しません。
彼らはAPIを探索して文書化することで基礎をレイアウトしました。
このライブラリは、いかなる方法でもVaillantまたはNetatmoに関連付けられていません。 VaillantまたはNetatmoのいずれかがAPIで何かを変更するか、最初のパーティアプリ以外で使用をブロックすることを決定した場合、このライブラリは動作を停止します。