跳转到主要内容

用于控制Shelly设备的异步库。

项目描述

Aioshelly

用于控制Shelly设备的异步库

此库处于开发中

需求

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

安装

pip install aioshelly

从源安装

在此文件夹中运行以下命令

pip install --upgrade .

示例

Gen1设备(Block/CoAP)示例

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和Gen3(RPC/WebSocket)设备示例

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/Gen3 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())

示例脚本

仓库包含示例脚本,可以快速尝试。

连接到设备并打印其状态,每当收到状态更改时

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

同时连接到devices.json中的所有设备并打印它们的状况

python3 tools/example.py -d -i

显示使用帮助

python3 tools/example.py -h

贡献指南

对象层次结构和属性/方法名称应与Shelly API相匹配。

项目详情


发布历史 发布通知 | RSS源

下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

aioshelly-11.4.2.tar.gz (41.4 kB 查看哈希值)

上传时间

构建分发

aioshelly-11.4.2-py3-none-any.whl (50.0 kB 查看哈希值)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面