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

Installation

pip install aionotion

Usage

aionotion starts within an aiohttp ClientSession:

import asyncio

from aiohttp import ClientSession


async def main() -> None:
    """Create the aiohttp session and run the example."""
    async with ClientSession() as websession:
      # YOUR CODE HERE


asyncio.get_event_loop().run_until_complete(main())

Create a client and get to work:

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 websession:
        # Create a Notion API client:
        client = await async_get_client('<EMAIL>', '<PASSWORD>', websession)

        # 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",
            data_before=datetime.datetime.now(),
            data_after=datetime.datetime.now() - 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")


asyncio.get_event_loop().run_until_complete(main())

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

Contributing

  1. Check for open features/bugs or initiate a discussion on one.
  2. Fork the repository.
  3. Install the dev environment: make init.
  4. Enter the virtual environment: source .venv/bin/activate
  5. Code your new feature or bug fix.
  6. Write a test that covers your new functionality.
  7. Run tests and ensure 100% code coverage: make coverage
  8. Add yourself to AUTHORS.md.
  9. 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 2.0.1
Filename, size File type Python version Upload date Hashes
Filename, size aionotion-2.0.1-py3-none-any.whl (8.1 kB) File type Wheel Python version py3 Upload date Hashes View hashes
Filename, size aionotion-2.0.1.tar.gz (7.6 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page