Skip to main content

Python-based API to interact with the Legrand Home + Control interface

Project 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::

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 

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

homepluscontrol-0.1.tar.gz (36.2 kB view details)

Uploaded Source

Built Distribution

homepluscontrol-0.1-py3-none-any.whl (33.1 kB view details)

Uploaded Python 3

File details

Details for the file homepluscontrol-0.1.tar.gz.

File metadata

  • Download URL: homepluscontrol-0.1.tar.gz
  • Upload date:
  • Size: 36.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.9.1

File hashes

Hashes for homepluscontrol-0.1.tar.gz
Algorithm Hash digest
SHA256 32c91ea7b826e7de80787eb60792e7bc281446a68c615b367e64b7e67c0ef5fd
MD5 3ddaada6b40caccbd431f42dce64b925
BLAKE2b-256 3336c09919a84ae317c85a4e7db2929a1f38ffd0abf6f259bc5847bc526d66a3

See more details on using hashes here.

File details

Details for the file homepluscontrol-0.1-py3-none-any.whl.

File metadata

  • Download URL: homepluscontrol-0.1-py3-none-any.whl
  • Upload date:
  • Size: 33.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.9.1

File hashes

Hashes for homepluscontrol-0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 7b03af9caca58b8deae7a68449caf4cb9ba9044663b3b0f9d70a886252e6e12f
MD5 8412762123d0a8960d65fcf06cb6008e
BLAKE2b-256 e44624bd71e0f9ba6cf9c9c46ca9cfbdd740cb5c475c75cbdafb9beb62e23c58

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page