4Sensores de plantas MiFlora en Home Assistant

He estado demandando la integración de MiFlora Home Assistant para obtener datos sobre varias plantas de interior durante un tiempo.. Sin embargo, en el camino tuve que superar varios obstáculos, incluido el rango limitado de bluetooth, problemas de duración de la batería, y obtener los valores de la batería para informar. Finalmente parece que he descifrado todo esto y ahora tengo un sistema que funciona de manera confiable con muchas plantas en la casa.. He resumido lo que he usado a continuación.

Hardware

Lo primero que hay que decir es que tengo bluetooth. USB dongle conectado a mi sistema de asistente doméstico. Esto monitorea las plantas en rango directamente (es decir. los que están en la misma habitación que la caja HA). Para monitorizar dispositivos a más distancia he utilizado una placa ESP32 con módulo bluetooth integrado que tengo dentro de una cajita barata y he alimentado con un viejo micro-USB cargador de teléfono

  • USB dongle: el que obtuve ya no está disponible, debido a su antigüedad, pero hay muchos en Amazon y en otros lugares, solo asegúrese de que sea compatible con Linux
  • Tablero ESP32: Recibí una JZK ESP32-S que actualmente cuesta £ 6.49 en Amazon
  • Caso para ESP32: Encontré el caso de un NodeMCU Wroom-32D (antena corta) se ajustó a mi tabla: esto costaba £ 4.20 de ebay

Integraciones para Home Assistant

Si bien la integración básica de MiFlora está integrada en el asistente doméstico, descubrí que usa mucha batería cuando se usa de forma nativa. En su lugar, uso el Monitor Bluetooth de bajo consumo 3rd integración de fiesta que puede instalar fácilmente usando RETRASO
Luego también instalé el Integración ESPHome para el asistente doméstico para administrar mi repetidor ESP32 BLE
Finalmente, para mostrar las plantas de una manera agradable, agregué un tenedor particular del tarjeta de la planta lovelace complemento a través de LAG

Configuración

Una vez que BLE Monitor se instaló y configuró con mi dongle bluetooth, recogió los sensores MiFlora dentro del alcance y los enumeró en su menú desplegable "dispositivos", así como también enumeró los dispositivos y entidades en su tarjeta en la configuración HA
Lo mejor del monitor BLE es que escucha los sensores para transmitir, en lugar de sondearlos activamente, que agotaría sus baterías. Sin embargo, los sensores no transmiten información de la batería, por lo que para obtener esto tenemos que sondearlo activamente. votando solo por esto, y escuchar pasivamente los otros datos parece ser el mejor compromiso si desea tener todos los datos disponibles pero también maximizar la duración de la batería del sensor. He separado mi configuración.yaml en varios archivos separados para mantener las cosas un poco más fáciles de administrar, así que solo tengo la siguiente línea en mi configuración.yaml:

sensor: !incluir sensores.yaml

Luego, en sensores.yaml, tengo cada planta enumerada de la siguiente manera

 - plataforma: floreció
   Mac: 'Mac:dirección:of:floreció:sensor:aquí'
   nombre: albahaca
   forzar_actualización: cierto
   scan_interval: 08:00
   mediana: 3
   go_undisponible_timeout: 43200
   condiciones_supervisadas:
     - batería

Siguiente: para que las plantas se vean bien, tengo una configuración de plantas. Como antes, una sola línea en configuration.yaml para comenzar: 

planta: !incluir plantas.yaml

Y luego en plants.yaml tengo lo siguiente

albahaca:
  sensores:
    humedad: sensor.ble_moisture_basil
    batería: sensor.basil_bateria
    temperatura: sensor.ble_temperature_basil
    conductividad: sensor.ble_conductivity_basil
    brillo: sensor.ble_illuminance_basil
  min_bateria: 15
  min_brightness: 2500
  max_brightness: 60000
  min_temperature: 8
  temperatura_máxima: 32
  min_humedad: 15
  max_moisture: 60
  min_conductividad: 350
  max_conductivity: 2000

Tenga en cuenta la sutil diferencia entre el nombre de entidad de la batería en comparación con los otros sensores. La entidad de la batería proviene de la plataforma miflora en sensores.yaml mientras que la otra 4 los sensores provienen de la integración BLE. HAY una entidad de batería enumerada por la integración BLE, pero esto solo se muestra como "desconocido" para esta planta. Esta configuración es necesaria para que la tarjeta de la planta muestre la planta de una manera agradable
Luego, simplemente vaya al lugar donde desea agregar su planta y agregue la tarjeta de la planta lovelace. Tendrás que “configurar” la tarjeta manualmente, pero solo toma 3 lineas...

tipo: costumbre:flor-tarjeta
entidad: planta.albahaca
especies: basílica basílica

Tenga en cuenta que la especie está listada para 2 reas complementos. En primer lugar, mostrará el nombre en la tarjeta., pero más import-antly, también mostrará una imagen de la planta si ha descargado las imágenes de la planta y las ha agregado a configwwwimagesplants usando los nombres en latín; la información en la base de datos está disponible en la documentación de la tarjeta de la planta lovelace

Ampliación de rango

Finalmente, necesitamos extender el rango que podemos alcanzar. Para ello necesitamos el dispositivo ESP32. Lo primero que debe hacer es conectarlo a su computadora a través de USB y flashearlo con una imagen básica de ESPHome
Usé el ESPInicio Flasher y el Controlador de Windows universal cp210x de SiLabs y siguió la guía proporcionada por la integración ESPHome HomeAssistant
La configuración que usé para mi dispositivo ESP32 está debajo

esfoma:
  nombre: jzk-esp-32s
  plataforma: ESP32
  junta: esp32doit-devkit-v1

# Habilitar registro
registrador:

# Habilitar Asistente de hogar API
API:

Wifi:
  ssid: !wifi_ssid secreto
  clave: !wifi_contraseña secreta

  # Habilitar punto de acceso alternativo (portal cautivo) en caso de que falle la conexión wifi
  ap:
    ssid: "Punto de acceso alternativo Esp32"
    contraseña: "contraseña aleatoria aquí"
    
componentes_externos:
  - fuente: github://myhomeiot/esphome-componentes
    
esp32_ble_tracker:
    
ble_gateway:
  dispositivos:
    - dirección MAC: Mac:dirección:of:floreció:sensor:a:monitor:va:aquí
  on_ble_advertise:
    entonces:
      homeassistant.evento:
        evento: esphome.on_ble_advertise
        datos:
          paquete: !paquete de retorno lambda;
          
mihomeiot_ble_host:

mihomeiot_ble_client:
  - dirección MAC: Mac:dirección:of:floreció:sensor:a:monitor:va:aquí
    servicio_uuid: '1204'
    característica_uuid: '1A02'
    intervalo de actualización: 4h
    en_valor:
      entonces:
        homeassistant.evento:
          evento: esphome.on_ble_advertise
          datos:
            paquete: !lambda |-
              si (tamaño x()  2)
              {
                ESP_LOGE("mihomeiot_ble_client", "payload has wrong size (%d)", tamaño x());
                retorno "";
              };
              ESP_LOGI("mihomeiot_ble_client", "Battery (%d%%), firmware (%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(buffer, sizeof(buffer), "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(buffer).c_str();

Luego guarde y actualice su dispositivo esp32 a través de wifi. El dispositivo ESP32 recogerá los datos del sensor miflora y los "empujará" a través de wifi a la integración BLE que creará un dispositivo y entidades automáticamente.. Los dispositivos empujados de esta manera parecen mostrar su nivel de batería (gracias al código en la parte inferior de la sección myhomeiot_ble_client creo). Luego solo necesita darle al dispositivo un buen nombre (y dejar que las entidades sean renombradas también) y luego crea una entrada en plants.yaml con las entidades correctas

Deja una respuesta

4 comentarios

JSJon Scaife

Hola
si, De hecho, yo mismo uso repetidores ESP32 ahora, ya que pueden usar el modo "pasivo" Y recopilar datos de la batería.
Si tienes un USB dispositivo bluetooth, luego puede emparejar los dispositivos MiFlora directamente a eso primero y luego, cuando configure el ESP32, enviará la información a HA y se mostrará automáticamente para las entidades correctas

Debe usar el código como lo describo en la sección "Rango de extensión".
También debe tener instalada la integración "Bluetooth Low Energy Monitor" (a través de HACS)

Si no tienes un USB Bluetooth, entonces hay una manera de hacer que los dispositivos aparezcan en Bluetooth Low Energy Monitor. No recuerdo el enlace donde lo leí, pero creo que es parte de la wiki o preguntas frecuentes de Bluetooth Low Energy Monitor

Si lo hace de esa manera, no necesita usar el manual YAML que usa Barry. Su publicación es de 2020 — Creo que antes de que Bluetooth Low Energy Monitor pudiera hacerlo o tal vez incluso antes de que existiera.

Respuesta
Ttonio

Hola, gracias por publicar esta gran solucion.
¿Puede la puerta de enlace Bluetooth esp32 transmitir datos a más de un dispositivo bluetooth o tiene que proporcionar un ESP? 32 para cada dispositivo Bluetooth queremos ampliar el alcance para?

Respuesta
JSJon Scaife

Hola Tony
El ESP transmitirá datos para cualquier dispositivo BT dentro del alcance, creo, aunque el mío actualmente solo se usa para 1 Dispositivo BT que no puedo confirmar 100% - pero eso es ciertamente mi entendimiento

Respuesta