
ricariel/solarflow-topic-mapper这是一个通过蓝牙低功耗(BTLE)连接Zendure Solarflow hub的工具,用于获取遥测数据,并管理其与本地MQTT代理或Zendure云的连接。
[!NOTE] 请注意,此工具仍在开发中。使用风险自负。
除非使用原始Hub 1200,否则所有命令均需设置环境变量SF_PRODUCT_ID。
当前支持以下功能:
以下是一些可能的原因:
需使用支持蓝牙低功耗且安装Python 3的系统,例如带Linux系统的树莓派(Zero)或其他操作系统(Windows也可)。脚本会搜索蓝牙名称以“Zen”开头的Zendure设备(例如“Zen1_P38”),并尝试连接第一个找到的设备。
有两种使用BT Manager管理Solarflow Hub的方式:
离线模式下,SF Hub完全离线(仍在WiFi网络中,但不与Zendure云服务通信)。使用此工具断开hub与云的连接,使其向本地网络中的MQTT代理报告数据。断开后,hub将像与Zendure云服务通信一样报告所有数据。
此模式下,移动应用中无法查看遥测数据,也无法通过应用或服务器端计划控制hub。所有设置更改需通过本地MQTT代理发送正确的MQTT消息实现。
hub离线后,本地只需运行自己的MQTT代理即可。
代理模式下,SF Hub仍向Zendure云报告部分设备数据,但不发送实时遥测数据。移动应用中仍能看到hub,可通过应用控制hub,计划任务也可正常运行。
需在蓝牙覆盖范围内的设备(如树莓派)上以服务形式运行BT manager工具,持续收集遥测数据并发送到MQTT。
[!NOTE] 我已使用此模式一段时间,基本稳定。但偶尔蓝牙连接会断开(使用树莓派Zero W时),需在树莓派上强制断开蓝牙连接,或短暂断开hub的WiFi(将其踢出接入点)以重新连接。
要获取hub的基本信息(不执行任何更改),运行带-i选项的脚本:
$ python3 solarflow-bt-manager.py -i
成功连接后,将看到类似以下输出,包含JSON格式的设备详细信息和遥测数据,几秒后脚本终止:
2023-09-05 13:52:27,534:INFO: 找到设备: 94:C9:60:3E:C8:E7: ZenP1_38 2023-09-05 13:52:28,393:INFO: 服务: 2023-09-05 13:52:28,397:INFO: 00112233-4455-6677-8899-aabbccddeeff (句柄: 18): 未知 2023-09-05 13:52:28,402:INFO: 0000a002-0000-1000-8000-00805f9b34fb (句柄: 12): 厂商特定 2023-09-05 13:52:28,409:INFO: 00001801-0000-1000-8000-00805f9b34fb (句柄: 1): 通用属性配置文件 ... 2023-09-05 13:52:28,682:INFO: SF设备ID: 5ak8yGU7 2023-09-05 13:52:28,684:INFO: SF设备序列号: PO1HLC9LDR01938
记录设备硬件地址、设备ID和序列号,后续可能需要使用。
要持续向本地MQTT代理报告遥测数据,使用-b选项启动脚本(注:暂未实现MQTT用户认证):
$ python3 solarflow-bt-manager.py -i -b 192.168.1.245
蓝牙连接建立后,遥测数据将发布到根主题solarflow-hub/telemetry。可将此数据用于其他集成(如家庭自动化系统等),例如Solarflow Statuspage已使用此数据替代云数据。
[!NOTE] 蓝牙连接启用时,hub仅通过BT报告遥测数据!不会同时向Zendure云代理发送数据。因此,移动应用中将无法查看数据,但仍可通过应用控制hub。
可将hub完全与Zendure云断开,使其向本地MQTT代理报告数据。此时hub不向云发送任何数据,也无法通过应用更改设置,仅能通过本地MQTT代理控制hub。此模式提供完全控制,但适用于高级用户(如设置任意输出限制)。
[!NOTE] 我已测试此设置并使用一段时间。使用风险自负!长期使用(如固件升级等)的效果有待观察。
断开通过重新初始化hub的网络连接(WiFi)并指示其连接到其他MQTT代理实现(可能需先将WiFi切换到其他网络,再加入目标网络)。
注:对于AIO2400,需先长按连接按钮约3秒手动重置网络连接,再将其连接到本地代理。
$ pip3 install -r requirements.txt $ export WIFI_PWD="你的WiFi密码" $ export SF_DEVICE_ID="你的SF设备ID" # SF_PRODUCT_ID:Hub1200为73bkTV,Hub2000为A8yh63,AIO2400为yWF7hV $ export SF_PRODUCT_ID="你的SF产品ID" $ export MQTT_USER="你的MQTT用户" $ export MQTT_PWD="MQTT密码" $ python3 solarflow-bt-manager.py -d -w <WiFi SSID> -b <本地MQTT代理IP>
示例:
$ pip3 install -r requirements.txt $ export WIFI_PWD="Sup3rS3cret!" $ export SF_DEVICE_ID="5ak8yGU7" $ export SF_PRODUCT_ID="73bkTV" $ export MQTT_USER="mqtt" $ export MQTT_PWD="mqtt_password" $ python3 solarflow-bt-manager.py -d -w SuperWiFi -b 192.168.1.245
成功后,hub将断开并重新连接WiFi,然后开始向本地MQTT代理发送数据。hub使用默认(硬编码)密码,因此可能需要将MQTT代理设置为接受任意登录(关闭认证)。一段时间后,代理中会出现类似/73bkTV/<你的设备ID>/#的主题。
hub离线后,可使用solarflow-control和/或solarflow-statuspage的离线模式!
[!NOTE] 使用最新版本的solarflow-control时,此功能已过时!
hub报告的数据格式如上图所示。为与代理模式和状态页面的结构对齐,提供了一个主题美化工具solarflow-topic-manager.py(可在此处获取),以服务或Docker容器形式运行,处理原始MQTT主题并以更易读的格式发布。
可将hub重新连接到Zendure云(可能用于获取固件更新)。步骤类似断开连接:
$ export WIFI_PWD="你的WiFi密码" $ export SF_DEVICE_ID="你的SF设备ID" $ export SF_PRODUCT_ID="73bkTV" $ python3 solarflow-bt-manager.py -c -w <WiFi SSID>
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务