Skip to main content

Async Python wrapper for the Rituals Perfume Genie API

Project description

PyRituals package

An async Python wrapper for the Rituals Perfume Genie API. It allows you to control the diffuser and retrieve its state. The package supports the first and second version.

Installation

pip install pyrituals

Usage

Import

from pyrituals import Account, Diffuser, AuthenticationException

Create a aiohttp.ClientSession to make requests

from aiohttp import ClientSession
session = ClientSession()

Endpoints

Default endpoints:

AUTH_URL = "https://rituals.sense-company.com/ocapi/login"           # Account.authenticate()
ACCOUNT_URL = "https://rituals.sense-company.com/api/account/hubs"   # Account.get_devices()
HUB_URL = "https://rituals.sense-company.com/api/account/hub"        # Diffuser.update_data()
UPDATE_URL = "https://rituals.sense-company.com/api/hub/update/attr" # Diffuser.turn_on(), Diffuser.turn_off()

To change the used API endpoints add an url parameter to the function. Example:

LOGIN_URL = "https://rituals.sense-company.com/ocapi/login"
account = Account("name@example.com", "passw0rd", session)
await account.authenticate(url=LOGIN_URL)

Account

Create an instance

email = "name@example.com"
password = "passw0rd"

account = Account(email, password, session)

Authenticate

try:
    await account.authenticate()
except AuthenticationException as e:
    print("Could not authenticate:", e)

Account data

The account data is only available after authentication.

account.data

Get linked devices

get_devices() returns a list of Diffusers.

devices = await account.get_devices()

Diffuser

Diffuser data

The initial data and format is different from the data after executing update_data(). Therefore, it's recommended to execute update_data() before using the diffuser data.

diffuser.data

Get updated data

await diffuser.update_data()

Turn the diffuser on

await diffuser.turn_on()

Turn the diffuser on

await diffuser.turn_off()

Example

from aiohttp import ClientSession
from asyncio import run

import pyrituals


async def main():
    async with ClientSession() as session:
        account = pyrituals.Account("name@example.com", "passw0rd", session)
        try:
            await account.authenticate()
        except pyrituals.AuthenticationException as e:
            print("Could not authenticate:", e)
            return
        print("Account data:", account.data)
        devices = await account.get_devices()
        for diffuser in devices:
            print("Diffuser data:", diffuser.data)
            await diffuser.turn_on()
            await diffuser.update_data()
            print("Diffuser updated data:", diffuser.data)


run(main())

Project details


Download files

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

Source Distribution

pyrituals-0.0.2.tar.gz (3.3 kB view hashes)

Uploaded Source

Built Distribution

pyrituals-0.0.2-py3-none-any.whl (3.9 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page