A Python3, async-friendly library for Flo by Moen Smart Water Detectors
Project description
💧 aioflo: a Python3, asyncio-friendly library for Flo Smart Water Detectors
aioflo is a Python 3, asyncio-friendly library for interacting with
Flo by Moen Smart Water Detectors.
Python Versions
aioflo is currently supported on:
- Python 3.6
- Python 3.7
- Python 3.8
- Python 3.9
- Python 3.10
Installation
pip install aioflo
Usage
import asyncio
from aiohttp import ClientSession
from aioflo import async_get_api
async def main() -> None:
"""Run!"""
api = await async_get_api("<EMAIL>", "<PASSWORD>")
# Get user account information:
user_info = await api.user.get_info()
a_location_id = user_info["locations"][0]["id"]
# Get location (i.e., device) information:
location_info = await api.location.get_info(a_location_id)
# Get device information
first_device_id = location_info["devices"][0]["id"]
device_info = await api.device.get_info(first_device_id)
# Run a health test
health_test_response = await api.device.run_health_test(first_device_id)
# Close the shutoff valve
close_valve_response = await api.device.close_valve(first_device_id)
# Open the shutoff valve
open_valve_response = await api.device.open_valve(first_device_id)
# Get consumption info between a start and end datetime:
consumption_info = await api.water.get_consumption_info(
a_location_id,
datetime(2020, 1, 16, 0, 0),
datetime(2020, 1, 16, 23, 59, 59, 999000),
)
# Get various other metrics related to water usage:
metrics = await api.water.get_metrics(
"<DEVICE_MAC_ADDRESS>",
datetime(2020, 1, 16, 0, 0),
datetime(2020, 1, 16, 23, 59, 59, 999000),
)
# Set the device in "Away" mode:
await set_mode_away(a_location_id)
# Set the device in "Home" mode:
await set_mode_home(a_location_id)
# Set the device in "Sleep" mode for 120 minutes, then return to "Away" mode:
await set_mode_sleep(a_location_id, 120, "away")
asyncio.run(main())
By default, the library creates a new connection to Flo 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 aioflo import async_get_api
async def main() -> None:
"""Create the aiohttp session and run the example."""
async with ClientSession() as websession:
api = await async_get_api("<EMAIL>", "<PASSWORD>", session=session)
# Tell Flo to get updated data from the device
ping_response = await api.presence.ping()
# Get user account information:
user_info = await api.user.get_info()
a_location_id = user_info["locations"][0]["id"]
# Get location (i.e., device) information:
location_info = await api.location.get_info(a_location_id)
# Get device information
first_device_id = location_info["devices"][0]["id"]
device_info = await api.device.get_info(first_device_id)
# Run a health test
health_test_response = await api.device.run_health_test(first_device_id)
# Close the shutoff valve
close_valve_response = await api.device.close_valve(first_device_id)
# Open the shutoff valve
open_valve_response = await api.device.open_valve(first_device_id)
# Get consumption info between a start and end datetime:
consumption_info = await api.water.get_consumption_info(
a_location_id,
datetime(2020, 1, 16, 0, 0),
datetime(2020, 1, 16, 23, 59, 59, 999000),
)
# Get various other metrics related to water usage:
metrics = await api.water.get_metrics(
"<DEVICE_MAC_ADDRESS>",
datetime(2020, 1, 16, 0, 0),
datetime(2020, 1, 16, 23, 59, 59, 999000),
)
# Set the device in "Away" mode:
await set_mode_away(a_location_id)
# Set the device in "Home" mode:
await set_mode_home(a_location_id)
# Set the device in "Sleep" mode for 120 minutes, then return to "Away" mode:
await set_mode_sleep(a_location_id, 120, "away")
asyncio.run(main())
Contributing
- Check for open features/bugs or initiate a discussion on one.
- Fork the repository.
- (optional, but highly recommended) Create a virtual environment:
python3 -m venv .venv - (optional, but highly recommended) Enter the virtual environment:
source ./.venv/bin/activate - Install the dev environment:
script/setup - Code your new feature or bug fix.
- Write tests that cover your new functionality.
- Run tests and ensure 100% code coverage:
script/test - Update
README.mdwith any new documentation. - Add yourself to
AUTHORS.md. - Submit a pull request!
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aioflo-2021.11.0.tar.gz.
File metadata
- Download URL: aioflo-2021.11.0.tar.gz
- Upload date:
- Size: 9.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.11 CPython/3.7.12 Linux/5.11.0-1021-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fc4e8a3749c59661acda2ee56397f8f8991492cbcdeaa773e66416d376f23d0f
|
|
| MD5 |
9031aec80dcfba423d8d8fd03d60751d
|
|
| BLAKE2b-256 |
630c0151056239383c7374d0be0cb63842dcc0dc93919d6c4e86916847dffa45
|
File details
Details for the file aioflo-2021.11.0-py3-none-any.whl.
File metadata
- Download URL: aioflo-2021.11.0-py3-none-any.whl
- Upload date:
- Size: 10.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.11 CPython/3.7.12 Linux/5.11.0-1021-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
15ba45519dbeca4662fd59e9d971d0333754db0acc22b29e2781c0ec661e0f83
|
|
| MD5 |
d01d3e38e75c79ddfd65f855d459edf1
|
|
| BLAKE2b-256 |
5ce2c9c341969beb7f29867b77713cc6457d8f0595128308cabea2af33c6bb7e
|