Skip to main content

A simple Python 3 library for Notion Home Monitoring

Project description

📟 aionotion: a Python3, asyncio-friendly library for Notion® Home Monitoring

CI PyPi Version License Code Coverage Maintainability Say Thanks

aionotion is a Python 3, asyncio-friendly library for interacting with Notion home monitoring sensors.

Python Versions

aionotion is currently supported on:

  • Python 3.6
  • Python 3.7
  • Python 3.8
  • Python 3.9


pip install aionotion


import asyncio

from aiohttp import ClientSession

from aionotion import async_get_client

async def main() -> None:
    """Create the aiohttp session and run the example."""
    client = await async_get_client("<EMAIL>", "<PASSWORD>", session=session)

    # Get all "households" associated with the account:
    systems = await client.system.async_all()

    # Get a system by ID:
    system = await client.system.async_get(12345)

    # Create a system (with associated parameters):
    await client.system.async_create({"system_id": 12345, "name": "Test"})

    # Update a system with new parameters:
    await client.system.async_update(12345, {"name": "Test"})

    # Delete a system by ID:
    await client.system.async_delete(12345)

    # Get all bridges associated with the account:
    bridges = await client.bridge.async_all()

    # Get a bridge by ID:
    bridge = await client.bridge.async_get(12345)

    # Create a bridge (with associated parameters):
    await client.bridge.async_create({"system_id": 12345, "name": "Test"})

    # Update a bridge with new parameters:
    await client.bridge.async_update(12345, {"name": "Test"})

    # Reset a bridge (deprovision its WiFi credentials):
    await client.bridge.async_reset(12345)

    # Delete a bridge by ID:
    await client.bridge.async_delete(12345)

    # Get all devices associated with the account:
    devices = await client.device.async_all()

    # Get a device by ID:
    device = await client.device.async_get(12345)

    # Create a device (with associated parameters):
    await client.device.async_create({"id": 12345})

    # Delete a device by ID:
    await client.device.async_delete(12345)

    # Get all sensors:
    sensors = await client.sensor.async_all()

    # Get a sensor by ID:
    sensor = await client.sensor.async_get(12345)

    # Create a sensor (with associated parameters):
    await client.sensor.async_create({"sensor_id": 12345, "name": "Test"})

    # Update a sensor with new parameters:
    await client.sensor.async_update(12345, {"name": "Test"})

    # Delete a sensor by ID:
    await client.sensor.async_delete(12345)

    # Get all "tasks" (conditions monitored by sensors) associated with the account:
    tasks = await client.task.async_all()

    # Get a task by ID:
    task = await client.task.async_get("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")

    # Get a task's value history between two datetimes:
    import datetime

    history = await client.task.async_history(
        "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",, - datetime.timedelta(days=3),

    # Create a list of tasks for a particular sensor (e.g., sensor # 12345):
    await client.task.async_create(
        12345, [{"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "type": "missing"}]

    # Delete a task for a particular sensor (e.g., sensor # 12345):
    await client.task.async_delete(12345, "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")

By default, the library creates a new connection to Notion 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 aionotion import async_get_client

async def main() -> None:
    """Create the aiohttp session and run the example."""
    async with ClientSession() as session:
        # Create a Notion API client:
        client = await async_get_client("<EMAIL>", "<PASSWORD>", session=session)

        # Get to work...

Check out the examples, the tests, and the source files themselves for method signatures and more examples.


  1. Check for open features/bugs or initiate a discussion on one.
  2. Fork the repository.
  3. (optional, but highly recommended) Create a virtual environment: python3 -m venv .venv
  4. (optional, but highly recommended) Enter the virtual environment: source ./venv/bin/activate
  5. Install the dev environment: script/setup
  6. Code your new feature or bug fix.
  7. Write tests that cover your new functionality.
  8. Run tests and ensure 100% code coverage: script/test
  9. Update with any new documentation.
  10. Add yourself to
  11. Submit a pull request!

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for aionotion, version 3.0.0
Filename, size File type Python version Upload date Hashes
Filename, size aionotion-3.0.0-py3-none-any.whl (8.3 kB) File type Wheel Python version py3 Upload date Hashes View
Filename, size aionotion-3.0.0.tar.gz (8.1 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page