Python client for Unisenza Plus
Project description
Unisenza Plus is a product line that connects smart thermostats and other devices manufactured by Purmo to a cloud service via the Unisenza Plus Gateway. pyupgw is a python client for that cloud service.
Currently only the smart thermostats are supported.
Installation
Install the library using pip or your favorite package management tool:
$ pip install pyupgw
Usage
The following sample program illustrates how to use the client
import asyncio
from pyupgw import create_client, Client, Device
def report_changes(device: Device, changes: dict):
print(f"{device.get_name()} has new changes:")
for key, value in changes.items():
print(f"- {key}: {value}")
async def main():
async with create_client("username", "password") as client:
# Refresh device attributes from the server
# The coroutine completes when the new state is available
await client.refresh_all_devices()
print("Gateways:")
for gateway in client.get_gateways():
print(f"- {gateway.get_name()}")
print("Devices:")
for gateway, device in client.get_devices():
print(
f"- {device.get_name()},",
f"setpoint temperature: {device.get_temperature()},",
f"current temperature: {device.get_current_temperature()}",
)
device = client.get_gateways()[0].get_children()[0]
# Send updated temperature to the server
# The coroutine completes when the server accepts the change,
# but before it is applied
# Subscribing to changes will ensure we know when that happens
device.subscribe(report_changes)
await device.update_temperature(20.0)
await asyncio.sleep(10)
if __name__ == "__main__":
asyncio.run(main())
The underlying API is MQTT based. This makes it totally asynchronous. The library automatically synchronizes when fetching fresh state for the devices, but the same is not true for the incremental update_X() calls. The server may not even report some updates, for instance when setting temperature to the same value it already has.
The sample program naively uses asyncio.sleep() call to synchronize to the actual updates. An actual program would do something more efficient, like update GUI elements or dispatch messages to event loop in response to the callbacks.
Command-line interface
The library ships with a command-line interface. To install the dependencies, include the cli extras:
$ pip install pyupgw[cli]
$ pyupgw --help
Goals
The main reason for this project is to (eventually) develop Home Assistant integration for the Unisenza Plus.
The client library is intended to give a robust and simplified interface to the most important attributes and functionality of the smart thermostats. By hiding complexity it trades off some degree of control.
The library only supports a subset of features of the devices. New features may be added on case-by-case basis.
Non-goals
The author of the library is in no way affiliated with the company Purmo, and not working using official API documentation. Hence, the scope of the library will likely never cover all the possible features of the products.
The Unisenza Plus service is based on the UleEco IoT platform. As such, this package might work with some modifications with other product lines based on the platform. However, since the author does not have official documentation, this is not guaranteed and a universal UleEco client is not in the scope of this project for the time being.
The intended usage of the library is developing scripts and other automations for the Purmo thermostats. The underlying API contains data specifically intended to be consumed by the official Unisenza Plus app (related to presentation and notifications, for instance). There is no intention to support those features in this library.
Contributing
This project is still in early stages. Please open an issue or PR in the Github repository if you want to get in touch with questions or contributions.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file pyupgw-0.3.tar.gz
.
File metadata
- Download URL: pyupgw-0.3.tar.gz
- Upload date:
- Size: 30.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.31.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d621e30813a6ab5682b9c470b459df2d188815de849488a6c64a2b1fbd15bc06 |
|
MD5 | 2111f3b7f00975a8ea4a6ad8211fd982 |
|
BLAKE2b-256 | dc78cd4742872b1958356702efae79a928dbabd236eda95b0522d731b8324986 |
File details
Details for the file pyupgw-0.3-py3-none-any.whl
.
File metadata
- Download URL: pyupgw-0.3-py3-none-any.whl
- Upload date:
- Size: 18.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.31.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 43c5e9a3006352a8316ae548bb7090f0ae74a20b1f520838510f0587a45c023c |
|
MD5 | b04506030b53568519319fdf52a870b9 |
|
BLAKE2b-256 | 43833ce021894fe5d3f43e0699acb35bed89f25e24a875ace1f4fdff79a87ec8 |