Už třetí v článek o Xiaomi Mi Flora a pomalu to vypadá, že se ze mě stává zahradník 🙂 Tohle je ale určitě poslední a navíc dnešní článek bude zase trochu více technický.
?Po napsání tohoto článku jsem byl v komentáři upozorněn na možnost pomocí ESPHome a tak vznikl článek další, který obsahuje z mého pohledu lepší variantu integrace na HomeAssistent. Pokud tedy máte Hass.io doporučuji pokračovat rovnou na něj 🙂
Ukážeme si projekt Flora, který je implementací ESP32 bluetooth klienta pro Xiaomi Flora plant sensor, a který následně získané údaje umí přeposlat pomocí MQTT na server.
Jedná se tak o jakýsi most mezi centrem domácnosti – např. HomeAssistentem a Xiaomi Mi Flora Plant, kdy s samotnému přenosu dat do centra domácnosti je použito WiFi namísto přímého propojení přes Bluetooth – což sebou nese četné limitace zejména na vzdálenost.
1. Instalace Arduino IDE
Celý postup si dnes ukážeme v Arduino IDE. Pokud Arduino IDE ještě nemáte pak instalaci najdete na webu arduino.cc.
2. Přidání podpory ESP32
Ve standardní instalaci Arduino, možná jak už tak nějak s názvu vyplývá, je podpora pouze pro Arduino desky. My však potřebuje použít ESP32 a je potřeba tyto desky v nastavení přidat.
Otevřeme si Vlastnosti a téměř dole je položka Správce dalších desek URL. Do té přidáme hodnotu:
https://dl.espressif.com/dl/package_esp32_index.json
Pokud už v tomhle políčku nejakou hodnotu máme, např. pro přidání ESP8266, pak jednotlivé adresy od sebe oddělíme čárkou.
Klikneme na OK a přesuneme se do menu Nástroje, kde vyhledáme položku Vývojová deska a pak Manažér Desek…
Po načtení bychom mezi položkami měli být schopni najít balík esp32, který nainstalujeme.
3. Výběr správné desky
Desek s čipem ESP32 existuje poměrně obrovské množství. Já si vybral čínskou variantu 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č).
A nyní nastává první specialita pro tento projekt. Normálně bychom v seznamu našli desku DOIT ESP32 DEVKIT V1, která tam skutečně je:
… ale my musíme udělat vyjímku. Samotný projekt po kompilaci je příliš velký a tak je potřeba vybrat ESP32 Dev Module, kdy budeme mít přístup k speciální konfiguraci pro Partrition Scheme. Tu potřebujeme nastavit No OTA, jinak projekt do tohoto ESP32 nenahrajeme.
4. Otestování kompilace a nahrání
Jakmile máme vše výše nastaveno, hodí se raději otestovat, zda nám všechno funguje jak má.
V menu Soubor / Příklady si najdeme sekci Příklady pro ESP DEV Module / WiFi a WiFiScan.
ESP32 přípojíme pomocí USB do počítače a v menu Nástroje a nastavení desky změníme Port podle toho kam jsme ESP32 připojili. Nyní už můžeme zmáčknout tlačítko pro Nahrání programu a otevřeme si Sériový monitor – nezapomeňte změnit rychlost přenosu v konsoli na 115200 baudů..
Pokud vše proběhlo správně měli bychom vidět WiFi sítě v okolí:
5. Zjištění adresy Mi Flora Plant
Pokud ještě neznáme MAC adresu Mi Flora pak použijeme aplikaci bluetoothctl
, ve které je potřeba po spuštění zadat příkaz scan on
.
root@nanopct4:~ # bluetoothctl
Agent registered
[bluetooth]# scan on
Discovery started
[CHG] Controller 00:1A:7D:DA:71:13 Discovering: yes
[NEW] Device 65:B6:8C:24:20:F0 65-B6-8C-24-20-F0
[NEW] Device 46:76:07:91:83:96 46-76-07-91-83-96
[NEW] Device C4:7C:8D:6A:9C:FF Flower care
Jak můžete vidět v mém případě byla Mi Flora nalezena hned jako třetí položka. Adresu si poznačíme a skenování ukončíme pomocí scan off
a příkazu quit
.
[bluetooth]# scan off
Discovery stopped
[CHG] Controller 00:1A:7D:DA:71:13 Discovering: no
[CHG] Device C4:7C:8D:6A:9C:FF RSSI is nil
[CHG] Device 65:B6:8C:24:20:F0 TxPower is nil
[CHG] Device 65:B6:8C:24:20:F0 RSSI is nil
[CHG] Device 46:76:07:91:83:96 TxPower is nil
[CHG] Device 46:76:07:91:83:96 RSSI is nil
[bluetooth]# quit
6. Získání a konfigurace Flora projektu
Jelikož v oficiálním repozitáři je momentálně chyba, odkážu vás na můj Fork https://github.com/jvyoralek/flora, nicméně už jsem poslal Pull request na opravu, čili do budoucna bude snad správně i oficiální repositář.
GitHub repositář si tedy zklonujeme a nebo si stáhneme archív s kód na lokální disk a otevřeme Arduino projekt flora.ino.
Nejprve se však přepneme do souboru config.h.example, kde vyplníme několik údajů:
- FLORA_DEVICE[] – zde uvedeme čárkou uddělený seznam MAC adres Flora zařízeních
- WIFI_SSID – název WiFi sítě kam se má ESP32 připojit
- WIFI_PASSWORD – heslo WiFi sítě
- MQTT_HOST – IP adresa serveru, kde běží MQTT broker (v našem případě HomeAssistenta)
- MQTT_POST – post MQTT brokeru
- MQTT_USERNAME – pokud používáme přihlašování na MQTT brokera, pak zde uvedeme přihlašovací jméno
- MQTT_PASSWORD – heslo na MQTT brokera
Zbytek parametru není až tak zajímavý a můžeme je nenechat.
7. Instalace chybějící Bluetooth knihovny
Tenhle bod souvisí s chybou, která je aktuálně v repozitáři a kterou řeší můj fork + instalace následující knihovny.
V menu klikneme postupně na Projekt / Přidat knihovnu / Spravovat knihovnu … a v seznamu najdeme položku ESP32 BLE Arduino, kterou nainstalujeme.
8. Kombilace a spuštění
Pokud jsme prošli úspěšně všemi předchozími body měli bychom být nyní schopni zkompilovat projekt a nahrát ho do ESP32, stejně jako jsme si ukázali na projektu WiFiScan.
Jakmile máme projekt uvnitř otevřemi si Sériový monitor, kde uvidíme základní logování:
- Připojení k WiFi síti
- Připojení k MQTT brokerovi
- Připojení k Xiaomi Flora zařízení
- Přečtení dat a zobrazení jejich hodnot
- Poslání dat přes MQTT v logu nějak chybí
- Odpojení od WiFi
- Odpojení od MQTT
- Uspání – standardně na 30 minut
Connecting to WiFi...
.
WiFi connected
Connecting to MQTT...
MQTT connected
Processing Flora device at c4:7c:8d:6a:9c:ff (try 1)
- Connection successful
- Found data service
- Force device in data mode
- Access characteristic from device
- Read value from characteristic
Hex: 2 1 0 57 B 0 0 29 2A 1 2 3C 0 FB 34 9B
-- Temperature: 25.80
-- Moisture: 41
-- Light: 2903
-- Conductivity: 298
WiFi disonnected
MQTT disconnected
Going to sleep now.
Když se potom na MQTT brokeru podíváme na přijaté zprávy měli bychom nově vidět 4 zprávy pro každou Xiaomi Mi Flora, které pak můžeme dále zpracovat.
Pokud jste si ještě nečetli ostatní mé články o Xiaomi MI Flora můžete na ně kouknout:
- Detailní popis produktu Xi Flora Flower
- Integrace na Homeassistent pomocí oficiální komponenty a bluetooth přenosu
Pokud ještě Xiaomi Mi Flora nemáte a zaujal vás tak doporučuji nakoupit na jednom z čínských eshopů:
- Banggood – cca. $15
- AliExpress – cca. $19
Děkuji Ladislavovi za dotaz ohledně toho jak řešit květiny na větší vzdálenosti od HomeAssitenta. Ten mě přivedl k tomuto projektu a jistě zajimavému řešení, který tenhle problém eliminuje na nutnost mít WiFi.
Zajímavý článek a super blog! =) Už mám objednán ESP32 a pak budu testovat. Teoreticky můžete článek rozšířit ještě o jednu možnost. Do HA se to dá údajně integrovat přes ESPHome (https://esphome.io/components/sensor/xiaomi_miflora.html), jestli jsem to dobře pochopil tak to není ani přes mqtt, protože ESPHome je rovnou podporáváno HA. Nastavení možná i jednodušší ale nevím jsem úplnej zelenáč – plno věcí v HA jsem dělal dle Vašeho blogu za což DÍKY 🙂
Diky za pochvalu i odkaz na ESPHome :). Určitě na to mrknu a vyzkousim a pokud to pojede přidám do článku.
A je to venku: https://blog.vyoralek.cz/iot/xiaomi-mi-flora-a-wifi-prenos-dat-pomoci-desky-s-esp32-reseni-ii/ .. ještě jednou díky za podnět!
Článek super! Původně jsem si objednával ESP32 na teplotní senzory Xiaomi MiJia BLE, až poté jsem zjistil možné propojení s Mi Flora. No a když jsem objevil tenhle článek, chtěl jsem i s tím málem co znám přispět na tenhle blog. Je tedy pravdou – nečekal jsem další článek, myslel jsem, že to zůstane jen v komentáři. 🙂 Klobouk dolů mistře! 🙂
Jirko, luxusni blog, taky se do toho pustim a budu Te otravovat 🙂 zatim jsem si ve virtualni masine s ubuntu zkusil ten HA a napojil na fibaro (HCL) a chtel bych rozsirit o levnejsi zigbee ci ty esp32, takze si projdu vsechny tve navody :-), diky moc at se dari
Ahoj díky 🙂 Pokud se chystáš konkrétně na tuhle kombinaci tak už mám téměř dokončený další článek s ESPHome, čili bych asi počkal – snad to vydám ještě dnes. Přijde mi to elegantnější řešení. Nicméně v rámci učení možná není špatné si zkusit oboje.