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.

🇬🇧 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.

4 komentáře

Napsat komentář

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 blogerům se to líbí: