%global _empty_manifest_terminate_build 0 Name: python-homepluscontrol Version: 0.1 Release: 1 Summary: Python-based API to interact with the Legrand Home + Control interface License: GPLv3 URL: https://github.com/chemaaa/homepluscontrol Source0: https://mirrors.nju.edu.cn/pypi/web/packages/33/36/c09919a84ae317c85a4e7db2929a1f38ffd0abf6f259bc5847bc526d66a3/homepluscontrol-0.1.tar.gz BuildArch: noarch Requires: python3-aiohttp Requires: python3-PyJWT Requires: python3-yarl %description # Home + Control This is a basic Python library that interacts with the *Legrand Home + Control* API. It is primarily intended for integration into Smart Home platforms such as Home Assistant. More information of the API can be found here: https://developer.legrand.com/ The library currently supports 4 types of Legrand modules: 1) Plugs (power outlets) 2) Lights (connected switches) 3) Remotes (wireless switches) 4) Automations (shutters/covers) The first two - plugs and lights - are modeled as basic switches that can be interacted with to set their status to *on* or *off*. Remotes are presented as passive modules that only have a battery level attribute. Automations can be issued commands to open or close to their full positions and to be stopped during the motion. A 'home' is represented by a *plant* which presents all of its corresponding modules in a topology. A *plant* is basically a Legrand Home+ Control gateway. The status of each module in the *plant* can be accessed through a single *status* call to the *plant* or through individual *status* calls to each module. ## Authentication The *Legrand Home + Control* API uses Oauth2 authentication, so you must first register an account at https://developer.legrand.com/. Once registered, you will then need to create a subscription to the *Starter Kit* (currently the only subscription available) and this will generate your SUBSCRIPTION_KEY. As a final step, you will have to register an Application, where you will have to define a name, a redirect URL and the scopes of your application (for simplicity you can mark all scopes). Once the Application is confirmed, you should receive an email containing the CLIENT_IDENTIFIER and the CLIENT_SECRET which you will be using to set up the authentication flows. ### Authentication Flow Communication with the API, first requires Oauth2 authentication to obtain an access and a refresh token. Subsequent requests to the API, require the use of the SUBSCRIPTION_KEY in addition to the access token. Information about the Oauth2 exchange is provided here: https://developer.legrand.com/tutorials/0auth2-end-point-url/ ## Quickstart Install `homepluscontrol` using `pip`: $ pip install homepluscontrol ### Usage Example The following script is a simple example of how this Python library can be used:: ```python from homepluscontrol import authentication, homeplusplant import asyncio client_id = 'YOUR_CLIENT_IDENTIFIER' client_secret = 'YOUR_CLIENT_SECRET' subscription_key = 'YOUR_SUBSCRIPTION_KEY' redirect_uri = 'https://www.example.com' dummy_token = {"refresh_token": "dummy-refresh-token", "access_token": "dummy-access-token", "expires_at": -1, "expires_on": -1} api_plant_url = 'https://api.developer.legrand.com/hc/api/v1.0/plants' # Create the asynchronous client to handle the authentication # process and the authenitcated requests client = authentication.HomePlusOAuth2Async(client_id, client_secret, subscription_key, token=dummy_token, redirect_uri=redirect_uri) # The URL returned by this method launches the Oauth2 flow and # allows a user to confirm the process. # Doing so redirects the user's browser/client to the redirect URI # and includes the code and the state for the next step. authorization_url = client.generate_authorize_url() print(authorization_url) # Here is where you can enter the complete redirect URL return_url = input('Redirect URL received:') # This function will now handle the asynchronous calls to the API async def interact_with_api(): token = await client.async_fetch_initial_token(return_url) print(token) # The client now has a valid token and can be used # to interact with the API. # First get the plant information result = await client.request('get', api_plant_url) plant_info = await result.json() print(plant_info) plant_array = [] for p in plant_info['plants']: plant_array.append( homeplusplant.HomePlusPlant(p['id'], p['name'], p['country'], client) ) plant = plant_array[0] print(plant) # Next read the module information for the plant await plant.update_topology_and_modules() for mod_id in plant.modules.keys(): print(plant.modules[mod_id]) # Close the client session await client.oauth_client.close() loop = asyncio.get_event_loop() loop.run_until_complete(interact_with_api()) ``` ## Testing `homepluscontrol` tests are based on `pytest`. To run, change to the root directory of `homepluscontrol` and use the command: $ pip install -r requirements.txt $ pip install -r requirements_test.txt $ pytest %package -n python3-homepluscontrol Summary: Python-based API to interact with the Legrand Home + Control interface Provides: python-homepluscontrol BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-homepluscontrol # Home + Control This is a basic Python library that interacts with the *Legrand Home + Control* API. It is primarily intended for integration into Smart Home platforms such as Home Assistant. More information of the API can be found here: https://developer.legrand.com/ The library currently supports 4 types of Legrand modules: 1) Plugs (power outlets) 2) Lights (connected switches) 3) Remotes (wireless switches) 4) Automations (shutters/covers) The first two - plugs and lights - are modeled as basic switches that can be interacted with to set their status to *on* or *off*. Remotes are presented as passive modules that only have a battery level attribute. Automations can be issued commands to open or close to their full positions and to be stopped during the motion. A 'home' is represented by a *plant* which presents all of its corresponding modules in a topology. A *plant* is basically a Legrand Home+ Control gateway. The status of each module in the *plant* can be accessed through a single *status* call to the *plant* or through individual *status* calls to each module. ## Authentication The *Legrand Home + Control* API uses Oauth2 authentication, so you must first register an account at https://developer.legrand.com/. Once registered, you will then need to create a subscription to the *Starter Kit* (currently the only subscription available) and this will generate your SUBSCRIPTION_KEY. As a final step, you will have to register an Application, where you will have to define a name, a redirect URL and the scopes of your application (for simplicity you can mark all scopes). Once the Application is confirmed, you should receive an email containing the CLIENT_IDENTIFIER and the CLIENT_SECRET which you will be using to set up the authentication flows. ### Authentication Flow Communication with the API, first requires Oauth2 authentication to obtain an access and a refresh token. Subsequent requests to the API, require the use of the SUBSCRIPTION_KEY in addition to the access token. Information about the Oauth2 exchange is provided here: https://developer.legrand.com/tutorials/0auth2-end-point-url/ ## Quickstart Install `homepluscontrol` using `pip`: $ pip install homepluscontrol ### Usage Example The following script is a simple example of how this Python library can be used:: ```python from homepluscontrol import authentication, homeplusplant import asyncio client_id = 'YOUR_CLIENT_IDENTIFIER' client_secret = 'YOUR_CLIENT_SECRET' subscription_key = 'YOUR_SUBSCRIPTION_KEY' redirect_uri = 'https://www.example.com' dummy_token = {"refresh_token": "dummy-refresh-token", "access_token": "dummy-access-token", "expires_at": -1, "expires_on": -1} api_plant_url = 'https://api.developer.legrand.com/hc/api/v1.0/plants' # Create the asynchronous client to handle the authentication # process and the authenitcated requests client = authentication.HomePlusOAuth2Async(client_id, client_secret, subscription_key, token=dummy_token, redirect_uri=redirect_uri) # The URL returned by this method launches the Oauth2 flow and # allows a user to confirm the process. # Doing so redirects the user's browser/client to the redirect URI # and includes the code and the state for the next step. authorization_url = client.generate_authorize_url() print(authorization_url) # Here is where you can enter the complete redirect URL return_url = input('Redirect URL received:') # This function will now handle the asynchronous calls to the API async def interact_with_api(): token = await client.async_fetch_initial_token(return_url) print(token) # The client now has a valid token and can be used # to interact with the API. # First get the plant information result = await client.request('get', api_plant_url) plant_info = await result.json() print(plant_info) plant_array = [] for p in plant_info['plants']: plant_array.append( homeplusplant.HomePlusPlant(p['id'], p['name'], p['country'], client) ) plant = plant_array[0] print(plant) # Next read the module information for the plant await plant.update_topology_and_modules() for mod_id in plant.modules.keys(): print(plant.modules[mod_id]) # Close the client session await client.oauth_client.close() loop = asyncio.get_event_loop() loop.run_until_complete(interact_with_api()) ``` ## Testing `homepluscontrol` tests are based on `pytest`. To run, change to the root directory of `homepluscontrol` and use the command: $ pip install -r requirements.txt $ pip install -r requirements_test.txt $ pytest %package help Summary: Development documents and examples for homepluscontrol Provides: python3-homepluscontrol-doc %description help # Home + Control This is a basic Python library that interacts with the *Legrand Home + Control* API. It is primarily intended for integration into Smart Home platforms such as Home Assistant. More information of the API can be found here: https://developer.legrand.com/ The library currently supports 4 types of Legrand modules: 1) Plugs (power outlets) 2) Lights (connected switches) 3) Remotes (wireless switches) 4) Automations (shutters/covers) The first two - plugs and lights - are modeled as basic switches that can be interacted with to set their status to *on* or *off*. Remotes are presented as passive modules that only have a battery level attribute. Automations can be issued commands to open or close to their full positions and to be stopped during the motion. A 'home' is represented by a *plant* which presents all of its corresponding modules in a topology. A *plant* is basically a Legrand Home+ Control gateway. The status of each module in the *plant* can be accessed through a single *status* call to the *plant* or through individual *status* calls to each module. ## Authentication The *Legrand Home + Control* API uses Oauth2 authentication, so you must first register an account at https://developer.legrand.com/. Once registered, you will then need to create a subscription to the *Starter Kit* (currently the only subscription available) and this will generate your SUBSCRIPTION_KEY. As a final step, you will have to register an Application, where you will have to define a name, a redirect URL and the scopes of your application (for simplicity you can mark all scopes). Once the Application is confirmed, you should receive an email containing the CLIENT_IDENTIFIER and the CLIENT_SECRET which you will be using to set up the authentication flows. ### Authentication Flow Communication with the API, first requires Oauth2 authentication to obtain an access and a refresh token. Subsequent requests to the API, require the use of the SUBSCRIPTION_KEY in addition to the access token. Information about the Oauth2 exchange is provided here: https://developer.legrand.com/tutorials/0auth2-end-point-url/ ## Quickstart Install `homepluscontrol` using `pip`: $ pip install homepluscontrol ### Usage Example The following script is a simple example of how this Python library can be used:: ```python from homepluscontrol import authentication, homeplusplant import asyncio client_id = 'YOUR_CLIENT_IDENTIFIER' client_secret = 'YOUR_CLIENT_SECRET' subscription_key = 'YOUR_SUBSCRIPTION_KEY' redirect_uri = 'https://www.example.com' dummy_token = {"refresh_token": "dummy-refresh-token", "access_token": "dummy-access-token", "expires_at": -1, "expires_on": -1} api_plant_url = 'https://api.developer.legrand.com/hc/api/v1.0/plants' # Create the asynchronous client to handle the authentication # process and the authenitcated requests client = authentication.HomePlusOAuth2Async(client_id, client_secret, subscription_key, token=dummy_token, redirect_uri=redirect_uri) # The URL returned by this method launches the Oauth2 flow and # allows a user to confirm the process. # Doing so redirects the user's browser/client to the redirect URI # and includes the code and the state for the next step. authorization_url = client.generate_authorize_url() print(authorization_url) # Here is where you can enter the complete redirect URL return_url = input('Redirect URL received:') # This function will now handle the asynchronous calls to the API async def interact_with_api(): token = await client.async_fetch_initial_token(return_url) print(token) # The client now has a valid token and can be used # to interact with the API. # First get the plant information result = await client.request('get', api_plant_url) plant_info = await result.json() print(plant_info) plant_array = [] for p in plant_info['plants']: plant_array.append( homeplusplant.HomePlusPlant(p['id'], p['name'], p['country'], client) ) plant = plant_array[0] print(plant) # Next read the module information for the plant await plant.update_topology_and_modules() for mod_id in plant.modules.keys(): print(plant.modules[mod_id]) # Close the client session await client.oauth_client.close() loop = asyncio.get_event_loop() loop.run_until_complete(interact_with_api()) ``` ## Testing `homepluscontrol` tests are based on `pytest`. To run, change to the root directory of `homepluscontrol` and use the command: $ pip install -r requirements.txt $ pip install -r requirements_test.txt $ pytest %prep %autosetup -n homepluscontrol-0.1 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-homepluscontrol -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Tue May 30 2023 Python_Bot - 0.1-1 - Package Spec generated