Estou processando a integração do MiFlora Home Assistant para obter dados sobre várias plantas da casa há algum tempo. No entanto, ao longo do caminho, tive que superar vários obstáculos, incluindo alcance limitado de bluetooth, problemas de duração da bateria, e obtendo os valores da bateria para relatar. Eu finalmente pareço ter quebrado tudo isso e agora tenho um sistema que funciona de forma confiável com muitas plantas ao redor da casa. Eu resumi o que eu usei abaixo.
ferragens
A primeira coisa a dizer é que eu tenho um bluetooth USB dongle conectado ao meu sistema de assistente doméstico. Isso monitora as plantas na faixa diretamente (i.. os que estão na mesma sala que a caixa HA). Para monitorar dispositivos mais distantes usei uma placa ESP32 com módulo bluetooth embutido que tenho dentro de um case baratinho e alimentei com um micro antigo-USB carregador de telefone
- USB dongle: o que eu tenho não está mais disponível - devido à idade - mas há muitos amazon e em outros lugares - apenas certifique-se de que ele tenha suporte no linux
- placa ESP32: eu tenho um JZK ESP32-S que atualmente custa £ 6,49 na Amazon
- Caso para ESP32: Encontrei o caso de um NodeMCU Wroom-32D (antena curta) encaixou na minha prancha - isso custava £ 4,20 de ebay
Integrações para o Home Assistant
Embora a integração básica do MiFlora esteja integrada ao assistente doméstico, descobri que ele usa muita bateria quando usado nativamente. Em vez disso, eu uso o Monitor Bluetooth de Baixa Energia 3rd integração de terceiros que você pode instalar facilmente usando RETARDAÇÃO
Eu também instalei o Integração ESPHome para o assistente doméstico gerenciar meu repetidor ESP32 BLE
Finalmente, para exibir as plantas de uma maneira agradável, adicionei um garfo específico do cartão de planta lovelace dar via HACS
Configuração
Depois que o BLE Monitor foi instalado e configurado com meu dongle bluetooth, ele pegou os sensores MiFlora dentro do alcance e os listou em seu menu suspenso "dispositivos", além de listar os dispositivos e entidades em seu cartão na configuração HA
A grande vantagem do monitor BLE é que ele escuta os sensores para transmitir, em vez de enquete-los ativamente, que iria esgotar suas baterias. No entanto, os sensores não transmitem informações sobre a bateria, portanto, para obter isso, precisamos pesquisar ativamente. Votação só para isso, e ouvir passivamente os outros dados parece ser o melhor compromisso se você quiser ter todos os dados disponíveis, mas também maximizar a vida útil da bateria do sensor. Eu separei meu configuration.yaml em vários arquivos separados para manter as coisas um pouco mais fáceis de gerenciar, então tenho apenas a seguinte linha no meu configuration.yaml —
sensor: !include sensors.yaml
Então, em sensores.yaml, tenho cada planta listada da seguinte maneira
- plataforma: miflora mac: 'Mac:endereço:de:floresceu:sensor:here' name: basil force_update: true scan_interval: 08:00 mediana: 3 go_unavailable_timeout: 43200 condições_monitoradas: - bateria
Próximo — para fazer as plantas parecerem bem, eu tenho uma configuração de plantas. Como antes, uma única linha em configuration.yaml para começar:
plantar: !incluir plantas.yaml
E então em plantas.yaml eu tenho o seguinte
manjericão: sensores: umidade: sensor.ble_moisture_basil battery: sensor.basil_battery temperature: sensor.ble_temperature_basil conductivity: sensor.ble_conductivity_basil brightness: sensor.ble_illuminance_basil min_battery: 15 min_brightness: 2500 max_brightness: 60000 min_temperature: 8 max_temperature: 32 min_umidade: 15 max_umidade: 60 min_condutividade: 350 max_condutividade: 2000
Observe a sutil diferença entre o nome da entidade para a bateria em comparação com os outros sensores. A entidade bateria vem da plataforma miflora em sensores.yaml enquanto a outra 4 sensores estão vindo da integração BLE. Existe uma entidade de bateria listada pela integração BLE, mas isso apenas aparece como "desconhecido" para esta planta. Esta configuração é necessária para que o cartão da planta mostre a planta de uma forma bem apresentada
Em seguida, basta ir ao local em que deseja adicionar sua planta e adicionar o cartão de planta lovelace. Você terá que “configurar” o cartão manualmente, mas só precisa de 3 linhas...
tipo: custom:flower-card entity: plant.basil species: ocimum basilicum
Observe que a espécie está listada para 2 REAs-ons. Em primeiro lugar, ele exibirá o nome no cartão, mas mais import-antly, ele também exibirá uma foto da planta se você baixou as imagens da planta e as adicionou em configwwwimagesplants usando os nomes latinos — as informações no banco de dados estão disponíveis na documentação do cartão da planta lovelace
Alcance estendido
Finalmente, precisamos estender o alcance que podemos alcançar. Para isso precisamos do dispositivo ESP32. A primeira coisa a fazer é conectá-lo ao seu computador via USB e faça o flash com uma imagem básica do ESPHome
Eu usei o ESP Home Flasher and the driver universal para windows cp210x da SiLabs e seguiu o guia fornecido pela integração ESPHome HomeAssistant
A configuração que usei para o meu dispositivo ESP32 está abaixo
espirrar: nome: jzk-esp-32s platform: ESP32 board: esp32doit-devkit-v1 # Enable logging logger: # Enable Home Assistant API api: Wi-fi: ssid: !secret wifi_ssid password: !secret wifi_password # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "Esp32 Fallback Hotspot" senha: "random-password-here" external_components: - source: github://myhomeiot/esphome-components esp32_ble_tracker: ble_gateway: dispositivos: - mac_address: mac:endereço:de:floresceu:sensor:para:monitor:goes:here on_ble_advertise: depois: homeassistant.event: event: esphome.on_ble_advertise data: packet: !lambda return packet; myhomeiot_ble_host: myhomeiot_ble_client: - mac_address: mac:endereço:de:floresceu:sensor:para:monitor:goes:here service_uuid: '1204' characteristic_uuid: '1A02' update_interval: 4h on_value: depois: homeassistant.event: event: esphome.on_ble_advertise data: packet: !lambda |- se (x.size() 2) { ESP_LOGE("myhomeiot_ble_client", "payload has wrong size (%d)", x.size()); retorno ""; }; ESP_LOGI("myhomeiot_ble_client", "Bateria (%d%%), firmware (%é)", 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(Sem olhar mais para isso, acho que pode ser porque eles não são estáveis no ganho de unidade, sizeof(Sem olhar mais para isso, acho que pode ser porque eles não são estáveis no ganho de unidade), "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(Sem olhar mais para isso, acho que pode ser porque eles não são estáveis no ganho de unidade).c_str();
Em seguida, salve e atualize para o seu dispositivo esp32 via wifi. O dispositivo ESP32 pegará os dados do sensor miflora e o 'enviará' via wifi para a integração BLE que criará um dispositivo e entidades automaticamente. Dispositivos empurrados dessa maneira parecem mostrar seu nível de bateria (graças ao código na parte inferior da seção myhomeiot_ble_client, acredito). Você só precisa dar ao dispositivo um bom nome (e deixe as entidades serem renomeadas também) e, em seguida, crie uma entrada em plantas.yaml com as entidades corretas
Oi,
também existe a versão para ler os sensores de flora via script ESP e enviar para o corretor MQTT. Infelizmente, não consigo encontrar a descrição correta de como posso publicar os dados contidos no MQTT como um sensor no HomeAssistant.
Aqui está o link para isso: https://www.barrymercer.co.uk/wordpress/2020/04/27/mi-flora-home-assistant-and-mqtt-gateway/
Oi
Sim, Na verdade, eu mesmo uso repetidores ESP32 agora, pois eles podem usar o modo “passivo” E coletar dados da bateria.
Se você tem um USB dispositivo bluetooth, então você pode emparelhar os dispositivos MiFlora diretamente com ele primeiro e, quando você configurar o ESP32, ele enviará as informações para o HA e aparecerá para as entidades corretas automaticamente
Você precisa usar o código conforme descrevo na seção "Estendendo o intervalo".
Você também precisa ter a integração “Bluetooth Low Energy Monitor” instalada (via HACS)
Se você não tem um USB Bluetooth, então há uma maneira de fazer com que os dispositivos apareçam no Bluetooth Low Energy Monitor. Não me lembro do link onde o li, mas acho que faz parte do Wiki do Bluetooth Low Energy Monitor ou das perguntas frequentes
Se você fizer dessa forma, não precisará usar o manual YAML que Barry usa. A postagem dele é de 2020 — Acho que antes que o Bluetooth Low Energy Monitor pudesse fazer isso ou talvez antes mesmo de existir.
Olá, obrigado por postar esta ótima solução.
O gateway Bluetooth esp32 pode transmitir dados de mais de um dispositivo bluetooth ou ou você precisa fornecer um ESP 32 para cada dispositivo Bluetooth queremos estender o alcance para?
Oi Tony
O ESP transmitirá dados para qualquer dispositivo BT dentro do alcance, acredito, embora o meu atualmente seja usado apenas para 1 Dispositivo BT não consigo confirmar 100% - mas esse é certamente o meu entendimento