tetienne / Somfy Open Api
Licence: gpl-3.0
REST API client for the Somfy Open API
Stars: ✭ 59
Programming Languages
python
139335 projects - #7 most used programming language
Labels
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
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
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
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
- Vist https://developer.somfy.com
- Create an account
- Open the My Apps menu
- Add a new App (for testing, redirect url can be anything in https)
- 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].