blog.vyoralek.cz

Xiaomi Mi Flora a WiFi přenos dat pomocí desky s ESP32 – řešení II

Minule jsem sliboval poslední článek k Mi Flora, nicméně je tady další 🙂 Pojďme se tedy podívat jak integrovat Mi Flora pomocí ESPHome a mikrokontroleru ESP32.

🎙 Poslední aktualizace článku 1.11.2019. Pokud najdete nějaké rozdíly v aktuálním stavu, dejte vědět v komentářích, díky.

🇬🇧 This article is also available in English on my second blog lovetechstuff.com

Oproti řešení v minulém článku mi použití ESPHome s ESP32 a HomeAssistentem přišlo natolik zajímavé, že jsem se rozhodl přeci jen napsat ještě jeden článek k Mi Flora.

Pokud máte HomeAssistent tak tohle řešení mohu určitě doporučit jako preferované.

Deska s čipem ESP32 jako brána mezi Bluetooth a WiFi

Základní schéma komunikace je stejné jako v minule:

Schéma integrace MiFlora prostřednictvím ESP32

Na jedné straně máme nějaké systém pro domácí automatizaci – já se budu věnovat případu pokud používáme HomeAssistant, což nám přinese určité benefity v podobně jednodušší konfigurace. Předpokládáme dále, že HomeAssistent nám běží na nějakém minipočítači s WiFi, nebo Ethernet rozhraním do domácí sítě.

Na druhé straně pak máme Xiaomi Mi Flora Plant, který používá technologii přenosu dat Bluetooth a je umístěný příliš daleko minipočítače s HomeAssistentem a nebo ten nemá bluetooth.

Použijeme proto desku s čipem ESP32, která v sobě obsahuje jak Bluetooth tak WiFi rozhraní a poslouží nám jako brána mezi těmito dvěmi světy. Nakonec bychom měli být proto schopní číst data v HomeAssistentovi, přesto že je nemáme propojené napřímo.

V případě použití ESHome a HomeAssistanta máme navíc jeden poměrně zásadní rozdíl – nepotřebujeme MQTT broker, čili se vše o jednu část ještě zjednodušší.

Já mohu doporučit desku DOIT ESP32 DEVKIT V1, který stojí pár korun, má výbornou podporu ovladačů a je levná.

Deska DOIT ESP32 DEVKIT V1

Pokud ESP32 desku ještě nemáte mohu doporučit a přidám rovnou link na AliExpress s cenou cca $4,6 (něco málo přes 100kč).

Pojďme se tedy vrhnout na jednotlivé kroky.

1. ESPHome jako Hass.io (HomeAssistant) doplněk

O ESPHome už jsem napsal poměrně hodně článků. Ve stručnosti se jedná o framework umožňující pomocí webového rozhraní připravit firmware pro mikrokontroler s čipem ESP32.

Pokud používáme Hass.io pak se nám vyloženě nabízí varianta přidání ESPHome jako doplňku. Kompletní postup jsem napsal v tomto článku.

Doplněk Hass.io – ESPHome

V sekci nastavení doplňku doporučuji zapnout volbu Show in sidebar a budete tak mít rychlý přístup k ESPHome přímo z levého menu HomeAssistenta.

Pokud Hass.io nemáte, pak je stále možnost rozchodit si ESPHome u sebe jako Python addon. Popis najdete v tomto článku.

2. Připojení ESP32 a nastavení portu

Dále se budu věnovat víceméně konfiguraci pro Hass.io, nicméně v případě nahrávání firmware z počítače je to velmi podobné.

ESP32 desku tedy připojení pomocí microUSB do minipočítače a v sekci Hass.io / System / Hardware bychom nově měli vidět položku USB sériového rozhraní.

Seznam sériových rozhraní v HomeAssistentovi

Pokud sériové rozhraní USB není vidět, pak restartujte HomeAssistant s již připojeným USB kabelem k ESP32.

Jakmile se nyní přepneme do ESPHome addonu měli bychom v sekci výběru portu vidět novou položku:

Seznam portů v ESPHome

Já mám ve výběru dvě USB rozhraní jelikož jedno je ještě Zigbee USB dongle. ESP32 by se měl jmenovat CP2102 USB respektivě záleží na konkrétním USB rozhraní na ESP32 desce.

3. Nová konfigurace ESPHome a zapnutí Bluetooth skenování

Jakmile máme vybraný správný port z předchozího kroku můžeme se vrhnout na přidání ESPHome konfigurace.

ESPHome projekt pro MiFlora

Klikneme na velké červené tlačítko + a v průvodci postupně vyplníme:

  • Introduction And Name – flora_01
  • Device Type – Doit ESP32 Devkit v1 – popř. jinou desku
  • WiFi And Over-The-Air Updates – nastavte údaje do vaší WiFi
  • Done! – hotovo

Pomocí tlačítka edit si vygenerovanou konfiguraci zkontrolujeme a přidáme řádek:

esp32_ble_tracker:

Kompletní konfigurace by pak zatím mohla vypadat nějak takto:

esphome:
  name: flora_01
  platform: ESP32
  board: esp32doit-devkit-v1

wifi:
  ssid: "<NAZEVWIFI>"
  password: "<HESLODOWIFI>"

esp32_ble_tracker:

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:

Konfiguraci uložíme a stiskneme tentokráte tlačítko Upload, které provede nejprve kompilaci a pak nahrání nového firmware přes USB sériové rozhraní přímo do ESP32.

Po úspěšném nahrání bychom měli nejprve vidět o připojení ESP32 do sítě WiFi

19:56:52][I][app:096]: esphome version 1.13.6 compiled on Oct 10 2019, 19:50:15
[19:56:52][C][wifi:372]: WiFi:
[19:56:52][C][wifi:254]:   SSID: [redacted]
[19:56:52][C][wifi:255]:   IP Address: 10.2.1.21
[19:56:52][C][wifi:257]:   BSSID: [redacted]
[19:56:52][C][wifi:258]:   Hostname: 'flora_01'
[19:56:52][C][wifi:262]:   Signal strength: -61 dB ▂▄▆█
[19:56:52][C][wifi:263]:   Channel: 1
[19:56:52][C][wifi:264]:   Subnet: 255.255.255.0
[19:56:52][C][wifi:265]:   Gateway: 10.2.1.1
[19:56:52][C][wifi:266]:   DNS1: 10.2.1.1
[19:56:52][C][wifi:267]:   DNS2: 8.8.8.8
[19:56:52][C][logger:137]: Logger:
[19:56:52][C][logger:138]:   Level: DEBUG
[19:56:52][C][logger:139]:   Log Baud Rate: 115200
[19:56:52][C][logger:140]:   Hardware UART: UART0
[19:56:52][C][ota:029]: Over-The-Air Updates:
[19:56:52][C][ota:030]:   Address: flora_01.local:3232
[19:56:52][C][api:103]: API Server:
[19:56:52][C][api:104]:   Address: flora_01.local:6053

… ale nás bude zajímat až výpis později z Bluetooth modulu, který by měl postupně zobrazovat veškeré Bluetooth zařízení v dozsahu.

Jakmile uvidíme položku Got Xioami Mi Flora zbystříme a opíšeme si MAC adresu uvedenou v závorkách.

20:45:46][D][xiaomi_ble:118]: Got Xiaomi Mi Flora (C4:7C:8D:6A:9C:FF):
[20:45:46][D][xiaomi_ble:136]:   Moisture: 34%
[20:46:02][D][xiaomi_ble:118]: Got Xiaomi Mi Flora (C4:7C:8D:6A:9C:FF):
[20:46:02][D][xiaomi_ble:121]:   Temperature: 28.8°C
[20:46:02][D][esp32_ble_tracker:147]: Starting scan..

4. Editace konfigurace ESPHome – přidání Mi Flora Plant

Otevřeme si opět konfiguraci ESPHome a do konfigurace přidáme ještě jednu sekci:

sensor:
  - platform: xiaomi_hhccjcy01
    mac_address: 'C4:7C:8D:6A:9C:FF'
    temperature:
      name: "Xiaomi MiFlora Temperature"
    moisture:
      name: "Xiaomi MiFlora Moisture"
    illuminance:
      name: "Xiaomi MiFlora Illuminance"
    conductivity:
      name: "Xiaomi MiFlora Soil Conductivity"
    battery_level:
      name: "Xiaomi MiFlora Battery Level"

🥁Pokud používáte ESPHome <1.14 pak je potřeba změnit nastavení konfigurace platform na hodnotu xiaomi_miflora.

Klikneme na tlačítko upload a nahrajeme zaktualizovanou verzi firmware.

Po restartu už bychom v logu ESPHome měli vidět konkrétní hodnoty všech hodnot sensorů, které ESPHome z Mi Flora Plant přečetl.

20:11:46][D][xiaomi_ble:118]: Got Xiaomi Mi Flora (C4:7C:8D:6A:9C:FF):
[20:11:46][D][xiaomi_ble:130]:   Conductivity: 649µS/cm
[20:11:46][D][sensor:092]: 'Xiaomi MiFlora Soil Conductivity': Sending state 649.00000 µS/cm with 0 decimals of accuracy
[20:11:53][D][xiaomi_ble:118]: Got Xiaomi Mi Flora (C4:7C:8D:6A:9C:FF):
[20:11:53][D][xiaomi_ble:121]:   Temperature: 22.5°C
[20:11:53][D][sensor:092]: 'Xiaomi MiFlora Temperature': Sending state 22.50000 °C with 1 decimals of accuracy
[20:12:02][D][xiaomi_ble:118]: Got Xiaomi Mi Flora (C4:7C:8D:6A:9C:FF):
[20:12:02][D][xiaomi_ble:133]:   Illuminance: 82lx
[20:12:02][D][sensor:092]: 'Xiaomi MiFlora Illuminance': Sending state 82.00000 lx with 0 decimals of accuracy

5. HomeAssistant integrace Mi Flora Plant pomocí ESPHome a ESP32

Nyní už nám zbývá poslední krok – přidání Mi Flora Plant do HomeAssistenta. Jelikož jsme použili ESPHome bude intergrace jednoduchá .

V HomeAssistentovi dáme Configuration / Integrations a v sekci Discovered byste měli už automaticky vidět ESPHome. Klikneme na Configure a potvdíme.

Integrace MiFlora do HomeAssistenta

ESPHome konfigurace se nyní objeví v sekci Configured, kde můžeme v detailu vidět název všech sensorů a popř. je rovnou přejmenovat.

Seznam dostupných sensorů z MiFlora v HomeAssistentovi

Pro zobrazení na Dashboardu v případě Lovelace můžeme použít něco takového:

  - type: entities
    entities:      
      - entity: sensor.xiaomi_miflora_soil_conductivity
      - entity: sensor.xiaomi_miflora_illuminance
      - entity: sensor.xiaomi_miflora_moisture
      - entity: sensor.xiaomi_miflora_temperature
    title: Rostina - Fikus II
    show_header_toggle: false  

.. což nám vyrobí zhruba něco takového:

Narozdíl od předchozí verze pomocí Arduina projektu, přináší verze s ESPHome spoustu výhod a z mého pohledu mnohem jednodušší konfiguraci – zejména pokud použijete HomeAssistent.

💡ESPHome Xiaomi intragrace pouze pasivně poslouchá packety poslané z xiaomi zařízení a přepošle je. To má za následek, že tento způsob integrace nemá žádný vliv na živnostnost baterie.

Díky moc @Johnymu za komentář u přechozího článku, kde mě na tuhle variantu upozornil. Vůbec jsem si toho u ESPHome nevšiml a mnohem lépe to zapadá do celkového konceptu domácí automatizace 🙂 Díky všem, kteří komentují a příspívají tak i k samotnému obsahuju tohodle blogu.

14 comments

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..

  • Na jakou vzdálenost dokáže ESP32 a MiFlora komunikovat? Měl jsem to od sebe cca metr a vše fungovalo pak jsem zvětšil vzdálenost a už to na sebe nevidi.

    • Co jsem se dočetl mělo by to být cca. 25m. Já to mám ve stejné místnosti a cca 5 metrů a funguje to zdá se spolehlivě. Používáte taky tu samou desku DoIt DevKit V1? Až budu mít trochu více času zkusím si s tím trochu pohrát a posunout na delší vzdálenost.

  • chvíli si hraji s ESP a čidly, programované v Arduino syntaxi
    vždy to ale u koncových zařízení skončilo na příkonu 🙁

    Zaujalo mne toto spojení Xiaomi (spotřeba) a ESP …
    Nemáte zkušenost jak bluetooh konzumovat v Arduinu?

    Resp. MI teploměr kolem sebe křičí přes bluetooth otevřená data?
    Takže je stačí poslouchat?
    Nebo je třeba udělat Mesh síť (jen jsem o tom četl)?

    Každopádně dobré nakopnutí, chci data sbírat a sám se rozhodovat,
    co se má stát (sepnout kotel atd.)

    • Detaily k tomu netuším, ale pokud jsem to správně pochopil tak jednou z možností je skutečně jen poslouchat – jak říkáte Mi Flora nebo teploměr vysílají nějaký typ broadcast bluetooth zpráv. Do hlubší analýzy jsem se nepouštěl, jelikož máme hotové řešení. Pokud chcete mít více logiky přímo v ESP tak bych zkusil jít cestou ESPHome a tam si pak můžete pomocí konfigurace udělat opravdu hodně.

  • Díky za skvělý návod. Chápu to tedy dobře, že po nastavení nemusím mít desku zapojenou v mém Pi4 ale může být zapojena do napájení např. u rostlin které jsou 100m daleko, samozřejmě v dosahu wifi.

    • Ano přesně tak. Tenhle článek byl reakce na jednoho z čtenářů u předchozího článku, kde se mě právě ptal jak to vyřešit v případě domu – tj. pokud máte květinu vzdálenou mimo dosah bluetooth a výhoda tohoto řešení je, že k rostlině dáte ESP32 ke kterému se rostlina přípojí na pár metrů a přitom prostřednictvím WiFi Pi4 může být hodně daleko – když to přeženu tak může být teoreticky i na druhé straně zeměkoule 🙂

      • Díky, tohle je super, rozšiřuje to možnosti používání BT zařízení a HomeAssistenta

  • Diky za skvely navod, ale mam problem. Delam to presne podle navodu a na konci me to hodi tuto chybovou hlasku „Connecting…….._____….._____….._____….._____….._____….._____….._____

    A fatal error occurred: Failed to connect to ESP32: Invalid head of packet (0x32)
    *** [upload] Error 2
    Muzete me poradit co delam spatne. Dekuji

    • Co používáte za systém? Dělá to jen při nahrání ESPHome? Zkusil bych z Arduina IDE např. nahrát jednoduchou aplikaci z šablon zda to projde. Důvodů asi může být více, ale tipoval bych, že to přímo nebude souviset s ESPHome.

  • Nejprve velké díky za super návody.
    Začínám s HA a tak experimentuji s různými potenciálními senzory. Mám čerstvě také tento flower care senzor (dorazil z Číny). zamýšlím, že bych tyto senzory použil pro bezdrátové měření. Zjistil jsem ale, že měří o + 2 °C více. Kontrolováno proti více různým teplotním senzorům na různých platformách.
    Jakou máte zkušenost? Je to anomálie u tohoto kusu, nebo je to běžné? Dá se případně nějak zkalibrovat? +- 0,5 °C by bylo ještě v pohodě, ale 2 už je moc. Díky předem za reakci
    Martin

    • Také děkuji za pozitivní zpětnou vazbu 🙂 Co se týče Mi Flora a přesnosti, dle oficiálních parametrů by to mělo být +/- 0.5 stupně, což je jak sám píšete daleko od vašich 2st. Kouknul jsem se co to ukazuje mě a vůči teploměru, který je na téměř stejném místě – používám ho pro měření vlhkosti – je rozdíl 0.3 stupně, což je v intervalu udávané přesnosti a vypadá to tak u vás spíše na nějak špatně nastavený kus. Samotný Mi Flora asi zkalibrovat externě nepůjde, ale pokud by byl rozdíl víceméně konstantní dalo by se to udělat např. pomocí nového sensoru, který bude k původní hodnotě přičítat onen konstantní rozdíl.

      • Díky za reakci. To zařízení je asi celé nějaké divné, protože mi ukazuje u květiny na skříňce kousek od okna pouhých 416 lux. No zkusím koupit ještě jedno někde v Čechách ať ho případně můžu vrátit, pokud by i to nové bylo chybné.

  • Ahoj, mám dotaz jestli někdo neporadí, v pohodě jsem dle návodu nastavil desku a úspěšně přidal 3 senzory. Vše funguje skvěle.
    Nyní jsem si připravil další desku, přidal 3 nové senzory, v HA jsou vidět ale tváří se jako nedostupné, pokud si v ESPhome pustím log, tak vše vidím správně a dokonce si to načítá i data ze senzoru, ale v HA se to tváří jako nedostupné. Nedokáže někdo poradit kde by mohl být problém ?

Odebírejte blog emailem

Mějte ihned informaci o novém článku ze světa technologií.