diff options
author | CoprDistGit <infra@openeuler.org> | 2023-05-10 08:32:59 +0000 |
---|---|---|
committer | CoprDistGit <infra@openeuler.org> | 2023-05-10 08:32:59 +0000 |
commit | b06c36657f387d53a01f87a9be09b20281d906ff (patch) | |
tree | f2737610847cd4c886bf1e94fe09a077f8e1e7db | |
parent | a52229c0efd877c2b3d22842309d2c80e9515b8f (diff) |
automatic import of python-homepluscontrol
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | python-homepluscontrol.spec | 444 | ||||
-rw-r--r-- | sources | 1 |
3 files changed, 446 insertions, 0 deletions
@@ -0,0 +1 @@ +/homepluscontrol-0.1.tar.gz diff --git a/python-homepluscontrol.spec b/python-homepluscontrol.spec new file mode 100644 index 0000000..a2622f8 --- /dev/null +++ b/python-homepluscontrol.spec @@ -0,0 +1,444 @@ +%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 +* Wed May 10 2023 Python_Bot <Python_Bot@openeuler.org> - 0.1-1 +- Package Spec generated @@ -0,0 +1 @@ +3ddaada6b40caccbd431f42dce64b925 homepluscontrol-0.1.tar.gz |