Kbsa 精通 Shelly 物联网设备 A 全面指南

精通Shelly物联网设备:Shelly RPC BLE客户端脚本全面指南

Mastering Shelly IoT Devices A Comprehensive Guide to the Shelly RPC BLE Client Script (2).png

介绍

在本深入指南中,我们将使用 Shelly RPC BLE 客户端用于通过Bluetooth低功耗(BLE)与Shelly物联网设备交互的脚本。Shelly设备以其多功能性和易于集成到智能家居生态系统中而闻名。本指南旨在帮助用户利用Python脚本扫描Shelly设备、执行远程过程调用(RPC),并无缝管理设备配置。该脚本操作简便,支持设备选择、预设命令以及自定义RPC命令的执行。如果您需要一个更简化、仅运行自定义RPC命令的脚本,请参考 版本的脚本。

先决条件

在深入脚本之前,请确保您具备以下条件:

  • Linux 机器 使用 Ubuntu 或其他 Linux 发行版。

  • Python 3.8 或更高版本 已安装在您的系统中。

  • Bluetooth低功耗(BLE)支持您的机器。

  • Python 包:使用以下命令安装所需的包:

BASH
pip install -r requirements.txt

文件 requirements.txt 应包含:

  • asyncio

  • bleak

  • colorama

  • prettytable

  • yaspin

  • 已安装 jq 工具以格式化 JSON(可选但推荐)。

理解脚本

Shelly RPC BLE 客户端 脚本是一个 Python 程序,设计用于:

  • 扫描 用于通过 BLE 连接附近的 Shelly 物联网设备。

  • 列出 发现的设备及其信号强度指示。

  • 连接 到选定设备。

  • 执行 RPC 方法 以检索信息或更改设置。

  • 优雅地处理错误 并提供详细日志。

主要功能

  • 交互式 CLI:用户友好的命令行界面,带有颜色编码输出。

  • 日志记录:详细日志保存在 shelly_rpc.log 中,便于故障排除。

  • 自定义:支持输入自定义 RPC 方法和参数。

  • 重试机制:实现重试和指数退避,确保通信可靠。

安装与设置

安装

  1. 克隆仓库

BASH
git clone https://github.com/ALLTERCO/Utilities.git cd shelly-ble-rpc

  1. 安装依赖

确保已安装 pip,然后运行:

BASH
pip install -r requirements.txt

  1. 安装 jq(可选)

jq 用于美化打印 JSON 响应。

  • 在 Ubuntu/Debian 上:

CODE
sudo apt-get install jq

  • 在 macOS(使用 Homebrew)上:

BASH
brew install jq

运行脚本

使用以下命令执行脚本:

BASH
python3 shelly-ble-rpc.py

命令行参数

  • --scan-duration:扫描 BLE 设备的持续时间(秒)。默认是 5 秒。

  • --log-level:设置日志级别(DEBUG、INFO、WARNING、ERROR、CRITICAL)。

BASH
python3 shelly-ble-rpc.py --scan-duration 10 --log-level DEBUG

界面导航

运行脚本后,您将被引导完成以下步骤:

  1. 扫描设备

  • 该脚本会扫描附近的 Shelly 设备。

  • 发现的设备会列出其 名称地址RSSI(信号强度)。

  1. 选择设备

  • 输入您想操作的设备对应的编号。

  • 选项:

    • 输入设备编号以选择设备。

    • 输入 r 重新扫描设备。

    • 输入 q 退出脚本。

image-20241118-135856.png

选择设备和命令

  1. 命令选择

  • 选择设备后,会显示可用命令列表。

  • 命令包括:

    • Shelly.ListMethods

    • Shelly.GetDeviceInfo

    • Shelly.GetStatus

    • Shelly.GetConfig

    • WiFi.SetConfig

    • WiFi.GetStatus

    • Eth.GetConfig

    • Eth.SetConfig

    • Switch.Toggle

    • 自定义命令

  • 选项:

    • 输入命令编号以执行。

    • 输入 r 返回设备选择。

    • 输入 q 退出脚本。

image-20241118-140049.png

获取响应

执行命令

  1. Shelly.GetDeviceInfo

  • 检索设备的详细信息。

  • 用法:选择命令;无需额外参数。

  1. Shelly.GetStatus

  • 获取设备当前状态。

  • 用法:选择命令;无需额外参数。

  1. WiFi.SetConfig

  • 配置设备的Wi-Fi设置。

  • 参数:

    • SSID:Wi-Fi网络名称。

    • 密码:网络密码。

    • 静态 IP:可选设置静态 IP 地址、子网掩码、网关和域名服务器。

示例:

BASH
输入 SSID: MyWiFiNetwork 输入密码: mypassword 是否设置静态 IP 地址?(y/n): y 输入静态 IP 地址: 192.168.1.50 输入子网掩码: 255.255.255.0 输入网关: 192.168.1.1 输入域名服务器: 8.8.8.8

  1. Switch.Toggle

  • 切换开关状态(例如开关灯)。

  • 参数:

    • ID:开关的 ID(默认是 0)。如果设备有多个通道/ID,可以选择对应的。

  1. 自定义命令

  • 允许执行设备支持的任意 RPC 方法。

  • 用法:

    • 输入 RPC 方法名称。

    • 以 JSON 字符串形式提供参数。

示例:

BASH
输入 RPC 方法名称: Light.SetConfig 输入参数 JSON 字符串(留空表示无参数): {"id":0,"config":{"brightness":50}}

高级用法

日志级别

  • DEBUG:详细信息,通常仅在诊断问题时关注。

  • INFO:确认一切正常。

  • WARNING:表示发生了意外情况。

  • ERROR:由于严重问题,软件无法执行某些功能。

设置日志级别:

BASH
python3 shelly-ble-rpc.py --log-level DEBUG

处理超时和重试

  • 脚本会自动对失败的 RPC 调用进行指数退避重试。

  • 自定义:

  • 如有需要,可修改 call_rpc 方法中的 retries 参数。

修改脚本

  • 脚本模块化,职责分明。

  • 欢迎扩展功能,如添加新命令或改进错误处理。

故障排除

常见问题

  1. 未发现设备:

  • 请确保您的 Shelly 设备已通电并在有效范围内。

  • 检查您的 BLE 适配器是否正常工作。

  1. 连接设备失败:

  • 设备可能已连接到其他客户端。

  • 稍后重试连接。

  1. RPC 方法不可用:

  • 该方法可能不被设备固件支持。

  • 使用 Shelly.ListMethods 检查可用方法。

  1. 参数无效:

  • 仔细检查 RPC 方法的参数。

  • 确保 JSON 字符串格式正确。

日志

  • 查看 shelly_rpc.log 以获取详细错误信息。

  • 日志包含时间戳和错误详情,便于调试。

我们重视您的反馈!

感谢您花时间阅读我们的文章!内容是否对您有帮助或有趣?

您的见解能帮助我们改进。若您有时间,

请通过以下邮箱与我们分享您的反馈:

Integration@shelly.com