All Projects → tetienne → Somfy Open Api

tetienne / Somfy Open Api

Licence: gpl-3.0
REST API client for the Somfy Open API

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Somfy Open Api

Laravel5 Genderize Api Client
Laravel 5 client for the Genderize.io API
Stars: ✭ 47 (-20.34%)
Mutual labels:  api-client
Morningstar
Morningstar API Client
Stars: ✭ 52 (-11.86%)
Mutual labels:  api-client
Github
Ruby interface to GitHub API
Stars: ✭ 1,081 (+1732.2%)
Mutual labels:  api-client
Streamingclientlibrary
C# client library for Twitch, YouTube Live, and other streaming services
Stars: ✭ 48 (-18.64%)
Mutual labels:  api-client
Alphavantage.net
.Net client library for Alpha Vantage API
Stars: ✭ 52 (-11.86%)
Mutual labels:  api-client
Simple Salesforce
A very simple Salesforce.com REST API client for Python
Stars: ✭ 1,072 (+1716.95%)
Mutual labels:  api-client
Bitmovin Python
DEPRECATED: Python client for the Bitmovin API, see https://github.com/bitmovin/bitmovin-api-sdk-python
Stars: ✭ 39 (-33.9%)
Mutual labels:  api-client
Openapi Generator
OpenAPI Generator allows generation of API client libraries (SDK generation), server stubs, documentation and configuration automatically given an OpenAPI Spec (v2, v3)
Stars: ✭ 10,634 (+17923.73%)
Mutual labels:  api-client
Google Measurement Php Client
PHP Client to send analytics data over the Google Measurement Protocol to Google Analytics
Stars: ✭ 52 (-11.86%)
Mutual labels:  api-client
Quandl Python
Stars: ✭ 1,076 (+1723.73%)
Mutual labels:  api-client
Devrant
Unofficial wrapper for the public devRant API.
Stars: ✭ 48 (-18.64%)
Mutual labels:  api-client
Php Quandl
Easy access to the Quandl Data API using PHP
Stars: ✭ 51 (-13.56%)
Mutual labels:  api-client
Wikipedir
R's MediaWiki API client library
Stars: ✭ 54 (-8.47%)
Mutual labels:  api-client
App Search Php
Elastic App Search Official PHP Client
Stars: ✭ 48 (-18.64%)
Mutual labels:  api-client
Api Php Client
PHP client of Akeneo PIM API
Stars: ✭ 56 (-5.08%)
Mutual labels:  api-client
Fio
Read and send payment order for FIO bank
Stars: ✭ 41 (-30.51%)
Mutual labels:  api-client
Yelp Android
Stars: ✭ 53 (-10.17%)
Mutual labels:  api-client
Avenue
Wrapper around URLSession and URLSessionTask to enable seamless integration with Operation / OperationQueue.
Stars: ✭ 58 (-1.69%)
Mutual labels:  api-client
Groupy
A simple yet powerful API wrapper for the GroupMe messaging service.
Stars: ✭ 57 (-3.39%)
Mutual labels:  api-client
Anaconda
A Go client library for the Twitter 1.1 API
Stars: ✭ 1,077 (+1725.42%)
Mutual labels:  api-client

This library is an attempt to implement the entire Somfy API in Python 3. Documentation for the Somfy API can be found here.

Get developer credentials

  1. Vist https://developer.somfy.com
  2. Create an account
  3. Open the My Apps menu
  4. Add a new App (for testing, redirect url can be anything in https)
  5. Plug in your details into the test script below.

Supported devices

Somfy currently exposes the following type of devices:

If you find on this page devices not yet handle by this repository, don't hesitate to open an issue.

Installation

pip install pymfy

Example usage

Print all covers position.

import os
import json
from urllib.parse import urlparse, parse_qs

from pymfy.api.devices.roller_shutter import RollerShutter
from pymfy.api.somfy_api import SomfyApi
from pymfy.api.devices.category import Category

client_id = r"<CLIENT_ID>"  # Consumer Key
redir_url = "<REDIR_URL>"  # Callback URL (for testing, can be anything)
secret = r"<secret>"  # Consumer Secret


def get_token():
    try:
        with open(cache_path, "r") as cache:
            return json.loads(cache.read())
    except IOError:
        pass


def set_token(token) -> None:
    with open(cache_path, "w") as cache:
        cache.write(json.dumps(token))


cache_path = "/optional/cache/path"
api = SomfyApi(client_id, secret, redir_url, token=get_token(), token_updater=set_token)
if not os.path.isfile(cache_path):
    authorization_url, _ = api.get_authorization_url()
    print("Please go to {} and authorize access.".format(authorization_url))
    authorization_response = input("Enter the full callback URL")
    code = parse_qs(urlparse(authorization_response).query)["code"][0]
    set_token(api.request_token(code=code))

devices = api.get_devices(category=Category.ROLLER_SHUTTER)

covers = [RollerShutter(d, api) for d in devices]

for cover in covers:
    print(
        "Cover {} has the following position: {}".format(
            cover.device.name, cover.get_position()
        )
    )

Contribute

The current documentation does not give enough information to implement all the devices. If you want to contribute to this repository adding new devices, you can create an issue with the output of this script:

import json
import re
from urllib.parse import urlparse, parse_qs
from pymfy.api.somfy_api import SomfyApi


client_id = r"<CLIENT_ID>"  # Consumer Key
redir_url = "<REDIR_URL>"  # Callback URL (for testing, can be anything)
secret = r"<secret>"  # Consumer Secret

api = SomfyApi(client_id, secret, redir_url)
authorization_url, _ = api.get_authorization_url()
print("Please go to {} and authorize access.".format(authorization_url))
authorization_response = input("Enter the full callback URL")
code = parse_qs(urlparse(authorization_response).query)["code"][0]
api.request_token(code=code)

site_ids = [s.id for s in api.get_sites()]
devices = [api.get("/site/" + s_id + "/device").json() for s_id in site_ids]

# Remove personal information
dumps = json.dumps(devices, sort_keys=True, indent=4, separators=(",", ": "))
dumps = re.sub('".*id.*": ".*",\n', "", dumps)

print(dumps)
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].