精通Shelly物联网设备:Shelly RPC BLE客户端脚本全面指南
.png?inst-v=8eb5b645-f616-454e-a1eb-47030b06b1ec)
介绍
在本深入指南中,我们将使用 Shelly RPC BLE 客户端用于通过Bluetooth低功耗(BLE)与Shelly物联网设备交互的脚本。Shelly设备以其多功能性和易于集成到智能家居生态系统中而闻名。本指南旨在帮助用户利用Python脚本扫描Shelly设备、执行远程过程调用(RPC),并无缝管理设备配置。该脚本操作简便,支持设备选择、预设命令以及自定义RPC命令的执行。如果您需要一个更简化、仅运行自定义RPC命令的脚本,请参考此 版本的脚本。
先决条件
在深入脚本之前,请确保您具备以下条件:
Linux 机器 使用 Ubuntu 或其他 Linux 发行版。
Python 3.8 或更高版本 已安装在您的系统中。
Bluetooth低功耗(BLE)支持您的机器。
Python 包:使用以下命令安装所需的包:
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 方法和参数。
重试机制:实现重试和指数退避,确保通信可靠。
安装与设置
安装
克隆仓库
git clone https://github.com/ALLTERCO/Utilities.git cd shelly-ble-rpc 安装依赖
确保已安装 pip,然后运行:
pip install -r requirements.txt 安装 jq(可选)
jq 用于美化打印 JSON 响应。
在 Ubuntu/Debian 上:
sudo apt-get install jq 在 macOS(使用 Homebrew)上:
brew install jq 运行脚本
使用以下命令执行脚本:
python3 shelly-ble-rpc.py 命令行参数
--scan-duration:扫描 BLE 设备的持续时间(秒)。默认是 5 秒。
--log-level:设置日志级别(DEBUG、INFO、WARNING、ERROR、CRITICAL)。
python3 shelly-ble-rpc.py --scan-duration 10 --log-level DEBUG 界面导航
运行脚本后,您将被引导完成以下步骤:
扫描设备
该脚本会扫描附近的 Shelly 设备。
发现的设备会列出其 名称、地址 和 RSSI(信号强度)。
选择设备
输入您想操作的设备对应的编号。
-
选项:
输入设备编号以选择设备。
输入 r 重新扫描设备。
输入 q 退出脚本。

选择设备和命令
命令选择
选择设备后,会显示可用命令列表。
-
命令包括:
Shelly.ListMethods
Shelly.GetDeviceInfo
Shelly.GetStatus
Shelly.GetConfig
WiFi.SetConfig
WiFi.GetStatus
Eth.GetConfig
Eth.SetConfig
Switch.Toggle
自定义命令
-
选项:
输入命令编号以执行。
输入 r 返回设备选择。
输入 q 退出脚本。

获取响应
执行命令
Shelly.GetDeviceInfo
检索设备的详细信息。
用法:选择命令;无需额外参数。
Shelly.GetStatus
获取设备当前状态。
用法:选择命令;无需额外参数。
WiFi.SetConfig
配置设备的Wi-Fi设置。
-
参数:
SSID:Wi-Fi网络名称。
密码:网络密码。
静态 IP:可选设置静态 IP 地址、子网掩码、网关和域名服务器。
示例:
输入 SSID: MyWiFiNetwork 输入密码: mypassword 是否设置静态 IP 地址?(y/n): y 输入静态 IP 地址: 192.168.1.50 输入子网掩码: 255.255.255.0 输入网关: 192.168.1.1 输入域名服务器: 8.8.8.8 Switch.Toggle
切换开关状态(例如开关灯)。
-
参数:
ID:开关的 ID(默认是 0)。如果设备有多个通道/ID,可以选择对应的。
自定义命令
允许执行设备支持的任意 RPC 方法。
-
用法:
输入 RPC 方法名称。
以 JSON 字符串形式提供参数。
示例:
输入 RPC 方法名称: Light.SetConfig 输入参数 JSON 字符串(留空表示无参数): {"id":0,"config":{"brightness":50}} 高级用法
日志级别
DEBUG:详细信息,通常仅在诊断问题时关注。
INFO:确认一切正常。
WARNING:表示发生了意外情况。
ERROR:由于严重问题,软件无法执行某些功能。
设置日志级别:
python3 shelly-ble-rpc.py --log-level DEBUG 处理超时和重试
脚本会自动对失败的 RPC 调用进行指数退避重试。
自定义:
如有需要,可修改 call_rpc 方法中的 retries 参数。
修改脚本
脚本模块化,职责分明。
欢迎扩展功能,如添加新命令或改进错误处理。
故障排除
常见问题
未发现设备:
请确保您的 Shelly 设备已通电并在有效范围内。
检查您的 BLE 适配器是否正常工作。
连接设备失败:
设备可能已连接到其他客户端。
稍后重试连接。
RPC 方法不可用:
该方法可能不被设备固件支持。
使用 Shelly.ListMethods 检查可用方法。
参数无效:
仔细检查 RPC 方法的参数。
确保 JSON 字符串格式正确。
日志
查看 shelly_rpc.log 以获取详细错误信息。
日志包含时间戳和错误详情,便于调试。
我们重视您的反馈!
感谢您花时间阅读我们的文章!内容是否对您有帮助或有趣?
您的见解能帮助我们改进。若您有时间,
请通过以下邮箱与我们分享您的反馈: