4家庭助理中的 MiFlora 植物传感器

一段时间以来,我一直在起诉 MiFlora Home Assistant 集成以获取各种室内植物的数据. 然而,一路走来,我不得不克服各种障碍,包括蓝牙范围有限, 电池寿命问题, 并获取要报告的电池值. 我终于似乎已经破解了所有这些问题,现在有了一个可以可靠地与房子周围的许多植物一起工作的系统. 我在下面总结了我用过的东西.

硬件

首先要说的是我确实有蓝牙 USB 连接到我的家庭助理系统的加密狗. 这直接监控范围内的植物 (即. 和 HA 盒子在同一个房间里的那些). 为了监控更远距离的设备,我使用了一个带有内置蓝牙模块的 ESP32 板,我把它放在一个便宜的小盒子里,并用一个旧的微控制器供电-USB 电话充电器

  • USB 加密狗: 我得到的那个不再可用——由于年龄的原因——但是亚马逊和其他地方有很多——只要确保它在 linux 中得到支持
  • ESP32板: 我有一个 JZK ESP32-S 目前在亚马逊上的售价为 6.49 英镑
  • ESP32 外壳: 我找到了 NodeMCU Wroom-32D 的案例 (短天线) 适合我的板子——这是 4.20 英镑 易趣

家庭助理的集成

虽然家庭助理内置了基本的 MiFlora 集成,但我发现它在本地使用时会消耗大量电池. 相反,我使用 蓝牙低功耗监视器 3 派对集成,您可以使用它轻松安装 落后
然后我还安装了 ESPHome集成 让家庭助理管理我的 ESP32 BLE 中继器
最后, 为了以一种很好的方式展示植物,我添加了一个特殊的叉子 洛芙蕾丝植物卡 通过 LAG 插件

组态

一旦 BLE Monitor 安装并配置了我的蓝牙加密狗,它就会拾取范围内的 MiFlora 传感器并将它们列在其“设备”下拉列表中,并在 HA 配置中列出其卡上的设备和实体
BLE 监视器的优点在于它监听传感器传输, 而不是主动轮询他们, 这会耗尽他们的电池. 然而, 传感器不传输电池信息,因此我们必须主动轮询它. 只为这个投票, 如果您希望获得所有可用数据,同时又希望最大限度地延长传感器的电池寿命,那么被动地监听其他数据似乎是最好的折衷方案. 我已将我的 configuration.yaml 分成多个单独的文件,以使事情更易于管理,因此我的 configuration.yaml 中只有以下行 -

传感器: !包括sensors.yaml

然后在sensors.yaml中,我将每个植物列出如下

 - 平台: 开花
   苹果电脑: '苹果电脑:地址:的:开花:传感器:这里'
   姓名: 罗勒
   强制性升级: 结果以 JSON 格式进入 OutdoorQuality 属性
   名称: 08:00
   中位数: 3
   go_unavailable_timeout: 43200
   监控条件:
     - 电池

下一步——为了让植物看起来很好,我有一个植物配置. 与之前的 configuration.yaml 中的一行一样开始: 

植物: !包括植物.yaml

然后在plants.yaml中我有如下

basil:
  传感器:
    水分: sensor.ble_moisture_basil
    电池: sensor.basil_battery
    温度: sensor.ble_temperature_basil
    电导率: sensor.ble_conductivity_basil
    亮度: sensor.ble_illuminance_basil
  min_battery: 15
  最小亮度: 2500
  最大亮度: 60000
  最低温度: 8
  最高温度: 32
  min_moisture: 15
  最大水分: 60
  min_conductivity: 350
  最大电导率: 2000

请注意电池实体名称与其他传感器之间的细微差别. 电池实体来自 sensor.yaml 中的 miflora 平台,而另一个 4 传感器来自 BLE 集成. BLE 集成列出了一个电池实体,但这仅显示为该工厂的“未知”. 植物卡片需要此配置才能以精美的方式显示植物
然后只需转到您要添加植物的地方并添加lovelace植物卡. 您必须手动“配置”卡, 但它只需要 3 行…

类型: 风俗:花卡
实体: 植物罗勒
物种: 贵重的 贵重的

请注意,该物种被列为 2 原因. 首先它会在卡上显示名字, 但更多的进口antly, 如果您已下载植物图像并使用拉丁名称将它们添加到 configwwwimagesplants 中,它还会显示植物图片 — 有关数据库的信息可在 lovelace 植物卡文档中找到

扩展范围

最后, 我们需要扩大我们可以达到的范围. 为此,我们需要 ESP32 设备. 首先要做的是将它通过以下方式连接到您的计算机 USB 并使用基本的 ESPHome 映像对其进行闪烁
我用了 ESPHome 闪光器SiLabs 的 cp210x 通用 Windows 驱动程序 并遵循 ESPHome HomeAssistant 集成提供的指南
我用于 ESP32 设备的配置如下

esphome:
  姓名: jzk-esp-32s
  平台: ESP32
  木板: esp32doit-devkit-v1

# 启用日志记录
记录器:

# 启用家庭助理 API
api:

无线上网:
  ssid: !秘密wifi_ssid
  密码: !秘密wifi_password

  # 启用后备热点 (强制门户) 万一wifi连接失败
  ap:
    ssid: "Esp32 后备热点"
    密码: "随机密码在这里"
    
外部组件:
  - 资源: github://myhomeiot/esphome 组件
    
esp32_ble_tracker:
    
ble_gateway:
  设备:
    - MAC地址: 苹果电脑:地址:的:开花:传感器:to:监视器:去:这里
  on_ble_advertise:
    then:
      homeassistant.event:
        事件: esphome.on_ble_advertise
        数据:
          包: !lambda返回包;
          
myhomeiot_ble_host:

myhomeiot_ble_client:
  - MAC地址: 苹果电脑:地址:的:开花:传感器:to:监视器:去:这里
    service_uuid: '1204'
    特征_uuid: '1A02'
    更新间隔: 4H
    on_value:
      then:
        homeassistant.event:
          事件: esphome.on_ble_advertise
          数据:
            包: !拉姆达 |-
              如果 (x.大小()  2)
              {
                ESP_LOGE("myhomeiot_ble_client", "payload has wrong size (%ð)", x.大小());
                回归 "";
              };
              ESP_LOGI("myhomeiot_ble_client", "电池 (%d%%), 固件 (%s)", x[0], std::string(x.begin(), x.end()).substr(2).c_str());
              char buffer[70 + 1];
              const uint8_t *remote_bda = xthis.remote_bda();
              snprintf(缓冲, sizeof(缓冲), "043E2002010000%02X%02X%02X%02X%02X%02X14020106030295FE0C1695FE41209800000A1001%02X00",
                remote_bda[5], remote_bda[4], remote_bda[3], remote_bda[2], remote_bda[1], remote_bda[0], x[0]);
              return std::string(缓冲).c_str();

然后通过 wifi 保存并更新到您的 esp32 设备. ESP32 设备将从 miflora 传感器获取数据,并通过 wifi 将其“推送”到 BLE 集成,后者将自动创建设备和实体. 以这种方式推送的设备似乎确实显示了它们的电池电量 (感谢 myhomeiot_ble_client 部分底部的代码,我相信). 然后你只需要给设备一个好听的名字 (并让实体也被重命名) 然后使用正确的实体在plants.yaml 中创建一个条目

Leave a Reply

4 条评论

JS乔恩·斯凯夫

你好
是, 实际上,我现在自己使用 ESP32 中继器,因为它们能够使用“被动”模式并收集电池数据.
如果你有 USB 蓝牙设备,然后您可以先将 MiFlora 设备直接与该设备配对,然后当您设置 ESP32 时,它会将信息发送到 HA,它会自动显示正确的实体

您需要使用我在“扩展范围”部分中描述的代码.
您还需要安装“Bluetooth Low Energy Monitor”集成 (通过 HACS)

如果您没有 USB 蓝牙然后有一种方法可以让设备显示在蓝牙低功耗监视器中. 我不记得我在哪里阅读它的链接,但我认为它是蓝牙低功耗监视器 Wiki 或常见问题解答的一部分

如果你那样做,那么你就不需要使用 Barry 使用的手动 YAML. 他的帖子来自 2020 — 我认为在蓝牙低功耗监视器可以做到之前或者甚至在它存在之前.

回复
Ŧ托尼

你好, 感谢您发布这个很棒的解决方案.
esp32蓝牙网关可以多台蓝牙设备传输数据还是必须提供一个ESP 32 对于我们想要扩展范围的每个蓝牙设备?

回复
JS乔恩·斯凯夫

嗨托尼
ESP 将为我相信范围内的任何 BT 设备传输数据,尽管我的目前仅用于 1 无法确认的 BT 设备 100% ——但这当然是我的理解

回复