Tartalomjegyzék:

FlowerCare és Nymea a növényeim megmentéséhez: 5 lépés
FlowerCare és Nymea a növényeim megmentéséhez: 5 lépés

Videó: FlowerCare és Nymea a növényeim megmentéséhez: 5 lépés

Videó: FlowerCare és Nymea a növényeim megmentéséhez: 5 lépés
Videó: Her Saksıya zamanı gelince 1 Avuç Bundan eklerim☘️‼️ Orkide kökleri bundan Çıldırıyor🥳 2024, November
Anonim
Virággondozás és Nymea a növényeim megmentésére
Virággondozás és Nymea a növényeim megmentésére

Piszkosul kezem a növényápolási érzékelők csatlakoztatásával a meglévő nyílt forráskódú intelligens otthonomhoz. Áttekintés a nymea plugin -fejlesztéséről.

A történet

Mint sok más bütykölő és hacker, én is szenvedek attól a problémától, hogy a dolgok feltörése annyi időt vesz igénybe, hogy időnként elfelejtem öntözni a növényeimet. Miután a Monstera Deliciosa ismét száraz talajt szenvedett, úgy döntöttem, hátha tudok tenni valamit ellene, hogy emlékeztessen, amikor szomjas vagyok.

Az interneten végzett gyors kutatás felhívta a figyelmemet a Xiaomi FlowerCare -re, más néven MiCare -re vagy PlantCare -re. Ez egy alacsony energiafogyasztású Bluetooth -eszköz, és néhány alapkutatás azt mutatta, hogy a protokollja meglehetősen könnyen érthető. Bár úgy tűnik, hogy a Xiaomi nem nyújt nyilvános specifikációkat, az interneten még elég sok fordított tervezés történt ennek az eszköznek. Ezért úgy döntöttem, hogy megrendelek egyet közülük.

Néhány nappal később kézbesítették, és természetesen azonnal játszani kezdtem vele. Röviden megnéztem a hozzá tartozó alkalmazást, de ahogy valószínűleg sejtheti, az alapértelmezett beállításban való használata soha nem volt tervem. Természetesen ezt integrálni kell a meglévő intelligens otthoni beállításaimba. Amint azt itt is leírtam, a nymea -t használom intelligens otthoni megoldásként (Igen, még a Monstera -t is megtalálhatja az egyik képen:)). Sajnos a nymea még nem támogatta ezt az érzékelőt, így az IDE bekapcsolása megfelelő volt.

1. lépés: A beépülő modul betöltése

Plugin csonk betöltése
Plugin csonk betöltése
Plugin csonk betöltése
Plugin csonk betöltése
Plugin csonk betöltése
Plugin csonk betöltése

Tehát először le kellett másolnom a meglévő Texas Instruments Sensor Tag bővítményt, ami eléggé hasonlított ahhoz, amit feltételeztem, hogy a FlowerCare eszköz esetében is működnie kell. A plugininfo.json -ban található dolgok alapvető átnevezése és a sensortag -bővítmény kódjainak többségének megjegyzése után készen álltam az új bővítménycsonk betöltésére.

A várakozásoknak megfelelően a felfedezés már azonnal megmutatná az érzékelőt, és lehetővé tenné, hogy hozzáadjam a rendszerhez. Természetesen ezen a ponton semmilyen érdemi adat nem keletkezik.

2. lépés: Adatok keresése az érzékelőn

Adatok keresése az érzékelőn
Adatok keresése az érzékelőn

Mint minden Bluetooth LE eszköz, az első dolog, amit meg kell tennie, hogy tájékozódjon az általa kínált szolgáltatásokról és azok jellemzőiről. Valahol ott vannak elrejtve a tényleges adatok. Az összes felfedezett szolgáltatás gyors hibakeresési nyomtatásával és azok jellemzőinek kinyomtatásával azon a ponton voltam, ahol összehasonlíthattam az interneten talált információkat az eszköz tényleges jelentéseivel.

void FlowerCare:: onServiceDiscoveryFinished () {BluetoothLowEnergyDevice *btDev = static_cast (sender ()); qCDebug (dcFlowerCare ()) << "have service uuids" vezérlő ()-> createServiceObject (sensorServiceUuid, ez); connect (m_sensorService, & QLowEnergyService:: stateChanged, this, & FlowerCare:: onSensorServiceStateChanged); connect (m_sensorService, & QLowEnergyService:: jellemzőRead, this, & FlowerCare:: onSensorServiceCharacteristicRead); m_sensorService-> discDetails (); } void FlowerCare:: onSensorServiceStateChanged (const QLowEnergyService:: ServiceSate & state) {if (state! = QLowEnergyService:: ServiceDiscovered) {return; } foreach (const QLowEnergyCharacteristic & jellegzetes, m_sensorService-> jellemzők ()) {qCDebug (dcFlowerCare ()). nospace () <"<< jellemző.uuid (). toString () <<" ("<< jellemző.handle () << "Név:" << jellemző.név () << "):" << jellemző.érték () << "," << jellemző.érték (). ToHex (); foreach (const QLowEnergyDescriptor & descriptor, jellemző.descriptors ()) {qCDebug (dcFlowerCare ()). nospace () <"<< descriptor.uuid (). toString () <<" ("<< descriptor.handle () <<" Name: "<< descriptor.name () << "):" << descriptor.value () << "," << descriptor.value (). toHex (); }}}

A firmware verzió és az akkumulátor töltöttségi szintje egyszerű volt. Már az adatok felsorolásának első kísérletében láttam a megfelelő értékeket. A tényleges érzékelőértékek egy kicsit mélyebben vannak elrejtve, de az internetről származó adatokkal kombinálva azonnal rámutattak, hogy hol találjuk meg, és különösen hogyan kell olvasni.

void FlowerCare:: onSensorServiceCharacteristicRead (const QLowEnergyCharacteristic & jellemző, const QByteArray & value) {qCDebug (dcFlowerCare ()) << "Characteristic read" << QString:: szám (jellemző.fogantyú (), 16) temp; qint8 kihagyás; folyam >> kihagyás; quint32 lux; patak >> lux; qint8 nedvesség; patak >> nedvesség; qint16 termékenység; patak >> termékenység; kibocsátás kész (m_batteryLevel, 1,0 * temp / 10, lux, nedvesség, termékenység); }

Ezt összevonva a plugin már elkezdett értelmes adatokat előállítani.

3. lépés: Utolsó simítások

Utolsó simítások
Utolsó simítások

Tehát alapvetően most is működött, azonban egy kérdés még mindig ott maradt. A FlowerCare érzékelő a Texas Instruments SensorTaggal ellentétben néhány másodperc múlva megszakítja a Bluetooth -kapcsolatot. Figyelembe véve a használati esetet, ez azonban nem tűnik problémának, mivel meglehetősen megbízhatóan reagál a csatlakozási kísérletekre. Tekintettel arra, hogy egy növény általában nem szív fel egy liter vizet perceken belül, hanem napok alatt, nem tűnik szükségesnek, hogy állandóan kapcsolatban maradjon. Ezenkívül ez nagyon lemeríti az akkumulátort. Ezért úgy döntöttem, hogy hozzáadok egy PluginTimer -t, amely 20 percenként újracsatlakoztatja az érzékelőt, és lekéri az adatokat. Ha valamilyen oknál fogva az érzékelő nem reagál a csatlakozási kísérletre, a kód elindít egy másik időzítőt, amely ettől kezdve minden percben megpróbál újra csatlakozni, amíg sikerül lekérnie az adatokat. Ezután ismét visszanyerné a 20 perces intervallum adatainak lekérését. Ha az eszköz egymás után kétszer nem tud csatlakozni (azaz 20 + 1 perc elteltével), akkor a rendszer offline állapotban lesz megjelölve a rendszerben, és figyelmeztetheti a felhasználót erre.

void DevicePluginFlowercare:: onPluginTimer () {foreach (FlowerCare *flowerCare, m_list) {if (--m_refreshMinutes [flowerCare] <= 0) {qCDebug (dcFlowerCare ()) << "Frissítés" cím (); flowerCare-> refreshData (); } else {qCDebug (dcFlowerCare ()) << "Nem frissítő" cím () << "Következő frissítés a következőben:" << m_refreshMinutes [flowerCare] << "perc"; } // Ha két vagy több sikertelen csatlakozási kísérletünk volt, akkor jelölje meg, hogy megszakadt, ha (m_refreshMinutes [flowerCare] <-2) {qCDebug (dcFlowerCare ()) << "Nem sikerült frissíteni a következőhöz:" << (m_refreshMinutes [flowerCare] * -1) <setStateValue (flowerCareConnectedStateTypeId, false); }}}

Ezzel a stratégiával most úgy tűnt, hogy a nymea tökéletesen megbízható adatokat szolgáltat erről az érzékelőről.

4. lépés: Használata nagyobb környezetben

Használata nagyobb környezetben
Használata nagyobb környezetben
Használata nagyobb környezetben
Használata nagyobb környezetben

Csak az értékek lekérése az érzékelőből nem túl hasznos, de az eredeti alkalmazást is használhattam volna erre. Most tegyünk néhány okos dolgot vele.

A Nymea támogatja a push értesítések küldését vagy a nymea: telefonra telepített telefonokra: az alkalmazás telepítve van, vagy a PushBulleten keresztül. Tehát a nyilvánvaló dolog az, hogy küldök magamnak néhány push értesítést, amikor a talaj nedvessége 15%alá esik. Ezt meglehetősen könnyű beállítani az alkalmazásban. Előfeltételként vagy szüksége van a nymea: cloud vagy PushBullet fiókra. Nymea: felhőalapú push értesítések esetén elegendő a nymea: cloud engedélyezése a nymea: core és a nymea: app alkalmazásban. Amint mindkettő csatlakoztatva van, automatikusan megjelenik egy értesítési dolog. Ha a PushBullet új elemet szeretne hozzáadni a rendszerhez, akkor a PushBullet listát találja. A rendszer kérni fogja az API -kulcsot, amelyet akkor kap, amikor regisztrál a PushBullet szolgáltatással. Ha már rendelkezik push értesítéssel a nymeában, létrehozhat egy szabályt.

Természetesen bármit megtehet, amit csak akar … Bekapcsolhat egy lámpát is, hogy tükrözze az érzékelő értékeit, vagy használhatja a HTTP parancsnok bővítményt az érzékelőértékek közzétételére például egy internetes szerverre. Nincs vízszelepem amely digitálisan (még) vezérelhető, de természetesen, ha van ilyenje, és ezt még nem támogatja a nymea, akkor ehhez egy plugin hozzáadása meglehetősen hasonló lenne.

5. lépés: Záró szavak

Záró szavak
Záró szavak

A virágápoló beépülő modult már elfogadták a gyártási szakaszban, és ha van ilyen, akkor készen áll a nymea -val való használatra. Remélem azonban, hogy ez a cikk érdekes lehet, ha valaki támogatást szeretne adni más eszközökhöz. Ez egy áttekintés arról, hogyan lehet saját plugint készíteni a nymea számára.

Ha csak otthon szeretné megépíteni ezt a beállítást, akkor csak a FlowerCare szenzorra, a Raspberry Pi -re, a nymea közösségi képre (ez már tartalmazza a virágápolási bővítményt) és a nymea: alkalmazásra, amely elérhető az alkalmazásboltokban. Ezenkívül eddig a Monstera Deliciosa ismét boldog, és amint azt a képernyőképeken is láthattad, szereztem magamnak egy másodikat ezekből az érzékelőkből, hogy a citromfám egészségét is nyomon kövessem. Ezért küldök magamnak push értesítést, ha kint fagy, hogy biztonságosan átvihessem a telet.

Ajánlott: