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.md
with 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
aioflo-2021.11.0.tar.gz
(9.7 kB
view details)
Built Distribution
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 |