Skip to main content

Asynchronous library to control Shelly devices.

Project description

codecov ci

Aioshelly

Asynchronous library to control Shelly devices

This library is under development

Requirements

  • Python >= 3.11
  • bluetooth-data-tools
  • aiohttp
  • orjson

Install

pip install aioshelly

Install from Source

Run the following command inside this folder

pip install --upgrade .

Prepare the development environment

Run the following commands inside this folder

python3 -m venv .venv
source .venv/bin/activate
pip install uv
uv pip install .[dev] .[lint]
prek install

[!NOTE] To activate venv on Windows use this command

.\.venv\Scripts\Activate.ps1

Examples

Gen1 Device (Block/CoAP) example

import asyncio
from pprint import pprint

import aiohttp

from aioshelly.block_device import COAP, BlockDevice
from aioshelly.common import ConnectionOptions
from aioshelly.exceptions import DeviceConnectionError, InvalidAuthError


async def test_block_device():
    """Test Gen1 Block (CoAP) based device."""
    options = ConnectionOptions("192.168.1.165", "username", "password")

    async with aiohttp.ClientSession() as aiohttp_session, COAP() as coap_context:
        try:
            device = await BlockDevice.create(aiohttp_session, coap_context, options)
        except InvalidAuthError as err:
            print(f"Invalid or missing authorization, error: {repr(err)}")
            return
        except DeviceConnectionError as err:
            print(f"Error connecting to {options.ip_address}, error: {repr(err)}")
            return

        for block in device.blocks:
            print(block)
            pprint(block.current_values())
            print()


if __name__ == "__main__":
    asyncio.run(test_block_device())

Gen2+ (RPC/WebSocket) device example

import asyncio
from pprint import pprint

import aiohttp

from aioshelly.common import ConnectionOptions
from aioshelly.exceptions import DeviceConnectionError, InvalidAuthError
from aioshelly.rpc_device import RpcDevice, WsServer


async def test_rpc_device():
    """Test Gen2+ RPC (WebSocket) based device."""
    options = ConnectionOptions("192.168.1.188", "username", "password")
    ws_context = WsServer()
    await ws_context.initialize(8123)

    async with aiohttp.ClientSession() as aiohttp_session:
        try:
            device = await RpcDevice.create(aiohttp_session, ws_context, options)
        except InvalidAuthError as err:
            print(f"Invalid or missing authorization, error: {repr(err)}")
            return
        except DeviceConnectionError as err:
            print(f"Error connecting to {options.ip_address}, error: {repr(err)}")
            return

        pprint(device.status)


if __name__ == "__main__":
    asyncio.run(test_rpc_device())

Example script

The repository includes example script to quickly try it out.

Connect to a device and print its status whenever we receive a state change:

python3 tools/example.py -ip <ip> [-u <username>] [-p <password] -i

Connect to all the devices in devices.json at once and print their status:

python3 tools/example.py -d -i

Show usage help

python3 tools/example.py -h

Contribution guidelines

Object hierarchy and property/method names should match the Shelly API.

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

aioshelly-13.28.0.tar.gz (54.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aioshelly-13.28.0-py3-none-any.whl (54.3 kB view details)

Uploaded Python 3

File details

Details for the file aioshelly-13.28.0.tar.gz.

File metadata

  • Download URL: aioshelly-13.28.0.tar.gz
  • Upload date:
  • Size: 54.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for aioshelly-13.28.0.tar.gz
Algorithm Hash digest
SHA256 9b1ed3f9a73821f619bcc0ff51f1b89f8b5942fe9f5dcde1e722b83445f88a0b
MD5 55e677873bce0674165ce76a0b4e5a55
BLAKE2b-256 64c1e6ec58a5de16ac3b946a00ca80f09cfe35e5a4b4a2c5a3f1e953d90f0f41

See more details on using hashes here.

Provenance

The following attestation bundles were made for aioshelly-13.28.0.tar.gz:

Publisher: pythonpublish.yml on home-assistant-libs/aioshelly

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aioshelly-13.28.0-py3-none-any.whl.

File metadata

  • Download URL: aioshelly-13.28.0-py3-none-any.whl
  • Upload date:
  • Size: 54.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for aioshelly-13.28.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a8f4ee03a1c5e5a213ac434b62e1c799b5226a099dee42b7b505f37b5a09a9b3
MD5 a2938c80e0e39285ad4250a9362382eb
BLAKE2b-256 8939d21c095e92acb3e4f0e6f06ec301771a375c33223ec508e2cd46c1737ee0

See more details on using hashes here.

Provenance

The following attestation bundles were made for aioshelly-13.28.0-py3-none-any.whl:

Publisher: pythonpublish.yml on home-assistant-libs/aioshelly

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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