Bibliothèque Python 3 pour gérer les thermostats vaillant à l'aide de l'API NetAtmo. Il fournit une cartographie individuelle avec l'API NetAtMO de Vaillant et offre des fonctionnalités similaires à l'application officielle VSMART / ERELAX VSMART / ERELAX.
Remarque: Cette bibliothèque est toujours en statut de préréasion et sera jusqu'à V1.0.0. Il pourrait y avoir des modifications de rupture de l'API publique dans l'une des versions V0.xy.
La bibliothèque peut être simplement installée à l'aide de PIP.
pip install vaillant-netatmo-apiLa bibliothèque nécessite Python 3 et a des dépendances de ténacité et httpx.
Remarque: HTTPX est actuellement un logiciel Prerelease. La version décrite dans les
requirements.txtdevrait fonctionner correctement, mais s'il y a des modifications de rupture, veuillez vérifier leur tracker de problèmes GitHub pour des problèmes connus.
Toutes les API NetAtMO sont protégées et nécessitent un jeton de support pour s'authentifier. Pour obtenir ce jeton, NetAtmo propose une API OAuth.
Puisque Vaillant utilise la subvention des informations d'identification du mot de passe du propriétaire de ressources, il n'y a qu'une seule méthode dans l'API AuthClient :
async_token : obtenir un jeton de support et le stocker dans le magasin de jetons 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 ,
) Il existe trois API disponibles pour le ThermostatClient , qui nécessitent tous le jeton de porteur pour l'authentification:
async_get_thermostats_data : obtenir tous les appareils associés au compte utilisateurasync_set_system_mode : modification du mode système pour un appareil et un module (c'est-à-dire l'été, l'hiver ou le grostguard)async_set_minor_mode : modification du mode mineur pour un appareil et un module (c.-à-d. Mode manuel, mode extérieur ou mode de boost d'eau chaude)async_sync_schedule : mise à jour des données de planification pour un appareil et un moduleasync_switch_schedule : modification du calendrier actif pour un appareil et un module 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 ) Même si la bibliothèque propose un gestionnaire de contexte pour utiliser AuthClient et ThermostatClient , cela ne devrait être fait que pendant le développement ou dans des scénarios d'utilisation très peu fréquents.
Les deux clients utilisent httpx.AsyncClient comme bibliothèque de communication HTTP sous-jacente, qui met en œuvre la réutilisation de connexion et la réutilisation de connexion. Cela signifie que faire plusieurs demandes concurrentes doit être effectuée en utilisant la même instance de l' AuthClient ou ThermostatClient , ce qui n'est pas possible en utilisant l'API du gestionnaire de contexte car cette API renverra une nouvelle instance du client à chaque fois que la méthode auth_client ou thermostat_client est appelée.
Pour obtenir une utilisation optimale, qui utilisera la réutilisation des connexions et la réutilisation des connexions, AuthClient et ThermostatClient doivent être utilisés en instanciant les clients et en fournissant une instance httpx.AsyncClient dans un constructeur. Ce client fourni doit être utilisé comme singleton, ou avec un autre mécanisme de gestion de contexte, avec le contexte plus large qu'un bloc de code ou une demande entrante.
Voici un exemple d'utilisation de l'assistant à domicile.
# 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_okDes crochets similaires qui représentent une sorte de contexte d'application doivent être utilisés lors de l'intégration de cette bibliothèque dans une application différente (Flask, Django ou similaire).
Cette bibliothèque n'existerait pas si elle n'était pas pour les implémentations précédentes par les projets suivants:
Ils ont présenté les bases en explorant et en documentant les API.
Cette bibliothèque n'est en aucune façon associée à Vaillant ou à NetAtmo. Si Vaillant ou NetAtmo décident de changer quoi que ce soit avec l'API ou de bloquer l'utilisation en dehors de leurs applications de première fête, cette bibliothèque cessera de fonctionner.