Docker部署miflora-mqtt-daemon完整教程:多阶段镜像构建与主机网络BLE采集实战
【免费下载链接】miflora-mqtt-daemonLinux service to collect and transfer Xiaomi Mi Flora plant sensor data via MQTT to your smart home system, with cluster support 🌱🌼🥀🏡🌳项目地址: https://gitcode.com/gh_mirrors/mi/miflora-mqtt-daemon
miflora-mqtt-daemon 是一款轻量的 Linux 服务,用于持续采集小米 Mi Flora 植物传感器数据,并通过 MQTT 协议推送到 Broker,让 Home Assistant、openHAB 等智能家居平台随时掌握植物状态。本文带你完成 Docker 部署全流程:多阶段镜像构建、config.ini 配置,以及使用主机网络模式实现稳定的 BLE 采集,半小时内即可搭建好家庭"植物健康监测系统"。
什么是 miflora-mqtt-daemon?🌱
一句话概括:它是 Mi Flora 传感器与 MQTT 世界之间的"翻译官"。传感器通过BLE(低功耗蓝牙)把数据发给树莓派等 Linux 主机,程序解析后按配置的报文格式发布到 MQTT Broker。
每个传感器周期上报 5 项核心指标:
| 指标 | 含义 | 单位 |
|---|---|---|
| temperature | 空气温度 | °C |
| light | 光照强度 | lux |
| moisture | 土壤湿度 | % |
| conductivity | 土壤肥力(EC 值) | µS/cm |
| battery | 传感器电量 | % |
为什么选择 Docker 部署?主程序依赖bluepy、btlewrap、paho-mqtt等 Python 包以及系统级的bluez工具,直接安装容易踩到编译依赖的坑。项目内置了现成的Dockerfile,两步就能产出干净的小体积镜像,非常适合树莓派长期运行。
多阶段镜像构建:两步产出精简镜像
打开Dockerfile可以清晰看到多阶段构建的设计思路:
- builder 构建阶段
- 基于
python:3.10.7-slim; - 安装
bluez gcc libglib2.0-dev build-essential等编译依赖,将requirements.txt中的依赖编译安装到/root/.local。
- 基于
- app 生产阶段
- 同样基于 slim 镜像,仅安装运行所需的
bluetooth bluez; - 通过
COPY --from=builder只取走编译好的依赖和miflora-mqtt-daemon.py,构建工具链全部丢弃; - 默认启动命令为
python3 ./miflora-mqtt-daemon.py --config_dir /config,配置目录统一约定为/config。
- 同样基于 slim 镜像,仅安装运行所需的
这样最终镜像体积小、无编译垃圾,是"构建"与"运行"分离的典型实践。
一键构建镜像:获取代码并执行 docker build
git clone https://gitcode.com/gh_mirrors/mi/miflora-mqtt-daemon.git /opt/miflora-mqtt-daemon cd /opt/miflora-mqtt-daemon docker build -t miflora-mqtt-daemon .构建耗时视网速约几分钟。完成后执行docker images,确认列表中出现miflora-mqtt-daemon即可。
最快配置方法:准备好 config.ini
运行容器前,先创建配置文件:
cp config.ini.dist config.ini vim config.ini重点配置三处(对应config.ini.dist中的注释说明):
- [MQTT] 段:
hostname填 Broker 地址,port默认 1883;username/password支持通过MQTT_USERNAME、MQTT_PASSWORD等环境变量注入; - [General] 段:
reporting_method默认mqtt-json,数据会发布到miflora/传感器名主题; - [Sensors] 段(必填):添加传感器名称与 MAC 地址,例如
Petunia@Balcony = C4:7C:8D:77:88:99,名称中可用@附带位置信息。
不知道传感器 MAC 地址时,在主机上扫描附近的 BLE 设备:
sudo hcitool lescan找到显示为Flower care的设备,记下对应 MAC 地址。放心,此过程不会改动传感器固件,官方 App 仍可正常使用。
主机网络模式运行:BLE 采集的关键一步
这是 Docker 部署 Mi Flora 最容易被忽略的坑:Mi Flora 依赖 BLE 无线信号,容器必须加--network host,共享主机网络栈,否则传感器搜不到、MQTT Broker 也连不上。
推荐启动命令:
docker run -d --name miflora-mqtt-daemon \ --network host \ -v $(pwd):/config \ miflora-mqtt-daemon参数说明:
--network host:复用主机网络,确保蓝牙通信与 MQTT 连接畅通;-v $(pwd):/config:把config.ini所在目录挂载到容器内/config(对应启动参数的--config_dir);-d:后台守护模式运行。
启动后查看日志验证:
docker logs -f miflora-mqtt-daemon若看到形如{"light": 5424, "moisture": 30, "temperature": 21.4, "conductivity": 1020, "battery": 100}的 JSON 数据,说明采集成功并已推送到 MQTT Broker。
常见问题排查清单
| 症状 | 可能原因 | 解决办法 |
|---|---|---|
| 找不到 BLE 设备 | 主机蓝牙服务未启动 | sudo systemctl enable --now bluetooth |
| 通信频繁超时 | 传感器距离过远 | BLE 覆盖范围有限,将主机挪近一些 |
| 连不上 Broker | 未用 host 网络或地址错误 | 确认--network host,或把hostname指向主机 IP |
| 重建后占用变大 | 冗余镜像未清理 | docker image prune |
小结
借助双阶段Dockerfile,你得到一个精简便携的采集镜像;配合--network host,容器就能完整借用主机的蓝牙能力与网络,把 Mi Flora 的数据稳定送入 MQTT 世界。数据上 Broker 后,接入 Home Assistant 或 openHAB 只需订阅miflora/主题即可,采集端无需任何改动——这正是"采集与展示解耦"的魅力所在 🌿
【免费下载链接】miflora-mqtt-daemonLinux service to collect and transfer Xiaomi Mi Flora plant sensor data via MQTT to your smart home system, with cluster support 🌱🌼🥀🏡🌳项目地址: https://gitcode.com/gh_mirrors/mi/miflora-mqtt-daemon
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考