Skip to main content

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 sync --all-groups
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.

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.29.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.29.0-py3-none-any.whl (54.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: aioshelly-13.29.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.29.0.tar.gz
Algorithm Hash digest
SHA256 825061823a187a3500f41a81f5cabcdf3874f7bab1b4f4c50a980443d128e381
MD5 6f915b60da2486c405d3adc4ddce69b7
BLAKE2b-256 41eacfc0275065b644dd7cf26c58742b9b8097685a1b16c231d2cedee62bf304

See more details on using hashes here.

Provenance

The following attestation bundles were made for aioshelly-13.29.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.29.0-py3-none-any.whl.

File metadata

  • Download URL: aioshelly-13.29.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.29.0-py3-none-any.whl
Algorithm Hash digest
SHA256 043ee76822c1e872fe9309b66f37e6e705a736a89d28a48b409bf7d863bd9ba8
MD5 e3a24e4fd5a30d87bb02d7e902cec418
BLAKE2b-256 553be4adcdd385b022019405ff10cb1d6f464066c9e33003eac58040d1d09650

See more details on using hashes here.

Provenance

The following attestation bundles were made for aioshelly-13.29.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.

Release history Release notifications | RSS feed

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