Python Library for Hero Labs API (Sonic smart water shut off valve)
Project description
HeroLabsAPI: a Python3, asyncio-friendly library for Sonic Smart Valves
Written by @markvader
herolabsapi
is a Python 3, asyncio
-friendly library for interacting with
Sonic by Hero Labs.
Manufacturer Documentation
A list of gathered API endpoints and their functions can be found here
Installation
pip install herolabsapi
Usage & Examples
See examples/example.py for full example code
import asyncio
from datetime import datetime
from herolabsapi import Client
async def main() -> None:
client = await Client.async_login("<EMAIL>", "<PASSWORD>")
# USER API CALLS
# Get User Account Information:
user_info = await client.user.async_get_user_details()
print(user_info)
# SONIC DEVICE API CALLS
# Get Sonic Devices Information
sonic_data = await client.sonic.async_get_all_sonic_details()
first_device_id = sonic_data["data"][0]["id"]
# Get Sonic Device Information
device_info = await client.sonic.async_get_sonic_details(first_device_id)
print(device_info)
print("Valve State:", device_info["valve_state"])
# Get Device Telemetry Data
device_telemetry = await client.sonic.async_sonic_telemetry_by_id(first_device_id)
print(device_telemetry)
print("Water Pressure:", device_telemetry["pressure"])
print("Water Flow:", device_telemetry["water_flow"])
print("Water Temperature:", device_telemetry["water_temp"])
# Convert timestamp to readable datetime format
timestamp = device_telemetry["probed_at"]
datetime_telemetry = datetime.fromtimestamp(timestamp).strftime('%H:%M:%S %d-%m-%y')
print("Telemetry timestamp:", datetime_telemetry)
# Get Total Sonic Devices number
total_sonics = await client.sonic.async_get_total_sonics()
print("Total Sonic Devices:", total_sonics)
# Rename Sonic Device
# await client.sonic.async_update_sonic_name(first_device_id, "New Sonic Name")
# Change Valve State
# Open the shutoff valve
# await client.sonic.async_open_sonic_valve(first_device_id)
# Close the shutoff valve
# await client.sonic.async_close_sonic_valve(first_device_id)
# INCIDENTS API CALLS
# Get Incidents
incidents = await client.incidents.async_get_incidents()
print("all incidents:", incidents)
# Get Open Incidents
open_incidents = await client.incidents.async_get_open_incidents()
print("open incidents:", open_incidents)
# Get Incident Details
incident_details = await client.incidents.async_get_incident_details(demo_incident_id)
print("details of specific incident:", incident_details)
# Get Incidents by Property ID
property_incidents = await client.incidents.async_get_incidents_by_property(demo_property_id)
print("all incidents for a property:", property_incidents)
# Get Open Incidents by Property ID
property_open_incidents = await client.incidents.async_get_open_incidents_by_property(demo_property_id)
print("open incidents for a property:", property_open_incidents)
# Action an Incident
# close_incident = await client.incidents.async_close_incident(demo_incident_id)
# print(close_incident)
# reopen_incident = await client.incidents.async_close_incident(demo_incident_id)
# There are additional api endpoints that can be explored and called (properties, signals, user),
# example code is in the examples folder.
if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
By default, the library creates a new connection to Sonic Device with each coroutine. If you are
calling a large number of coroutines (or merely want to squeeze out every second of
runtime savings possible), an
aiohttp
ClientSession
can be used for connection
pooling:
import asyncio
from aiohttp import ClientSession
from datetime import datetime
from herolabsapi import Client
async def main() -> None:
"""Create the aiohttp session and run the example."""
async with ClientSession() as session:
client = await Client.async_login("<EMAIL>", "<PASSWORD>", session=session)
# USER API CALLS
# Get User Account Information:
user_info = await client.user.async_get_user_details()
#additional example code same as above and example folder
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
herolabsapi-0.5.1.tar.gz
(10.7 kB
view details)
File details
Details for the file herolabsapi-0.5.1.tar.gz
.
File metadata
- Download URL: herolabsapi-0.5.1.tar.gz
- Upload date:
- Size: 10.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c1d7ca8f99a81a05f692cdb5251cd73db5bc8c569116db5dcb63bae7373faafa |
|
MD5 | e43a42864ab9c4900136a4608e384017 |
|
BLAKE2b-256 | c38018ec855aec4e7036b04d3b65ea23c6f50eafcc55fc11f526daee208d1244 |