Obsah:

FlowerCare a Nymea na záchranu mojich rastlín: 5 krokov
FlowerCare a Nymea na záchranu mojich rastlín: 5 krokov

Video: FlowerCare a Nymea na záchranu mojich rastlín: 5 krokov

Video: FlowerCare a Nymea na záchranu mojich rastlín: 5 krokov
Video: Как сохранить до весны хризантему в горшке? 2024, November
Anonim
FlowerCare a Nymea zachránia moje rastliny
FlowerCare a Nymea zachránia moje rastliny

Zašpinenie rúk pri pripájaní senzorov starostlivosti o rastliny k môjmu existujúcemu inteligentnému domu s otvoreným zdrojom. Návod na vývoj doplnkov pre nymea.

Príbeh

Rovnako ako mnoho ďalších drotárov a hackerov, aj ja mám problém s tým, že hackovanie vecí mi zaberá toľko času, že občas zabúdam polievať svoje rastliny. Potom, čo moja Monstera Deliciosa opäť trpela suchou pôdou, rozhodol som sa zistiť, či s tým môžem niečo urobiť, aby mi to pripomenulo, keď je smädná.

Rýchly prieskum na webe ma upozornil na Xiaomi FlowerCare, známy tiež ako MiCare alebo PlantCare. Jedná sa o zariadenie s nízkou spotrebou energie Bluetooth a niektoré základné výskumy odhalili, že jeho protokol sa zdá byť celkom zrozumiteľný. Aj keď sa zdá, že Xiaomi neposkytuje žiadne verejné špecifikácie, na internete bolo pre toto zariadenie zatiaľ veľa reverzného inžinierstva. Preto som sa rozhodol jeden z nich objednať.

O niekoľko dní neskôr mi bolo doručené a samozrejme som sa s ním hneď začal hrať. Stručne som skontroloval aplikáciu, ktorá je súčasťou balenia, ale ako pravdepodobne asi tušíte, použitie v predvolenom nastavení nebolo nikdy mojím plánom. Toto samozrejme musí byť integrované s mojím existujúcim nastavením inteligentnej domácnosti. Ako je tu tiež popísané, ako riešenie inteligentnej domácnosti používam nymea (Áno, Monsteru môžete dokonca vidieť na jednom z obrázkov tam:)). Nymea bohužiaľ tento senzor ešte nepodporovala, takže spustenie nejakého IDE bolo v poriadku.

Krok 1: Načítanie zástrčky doplnku

Načítava sa zavedenie zástrčky doplnku
Načítava sa zavedenie zástrčky doplnku
Načítava sa zavedenie zástrčky doplnku
Načítava sa zavedenie zástrčky doplnku
Načítava sa zavedenie zástrčky doplnku
Načítava sa zavedenie zástrčky doplnku

Prvá vec, ktorú som urobil, bolo skopírovať existujúci doplnok Texas Instruments Sensor Tag, ktorý sa mi zdal dostatočne podobný tomu, čo som predpokladal, že by malo fungovať aj pre zariadenie FlowerCare. Po základnom premenovaní vecí v plugininfo.json a odkomentovaní väčšiny kódu pluginu sensortag som bol pripravený načítať nový inzerát doplnku.

Ako sa dalo očakávať, objav by už okamžite ukázal senzor a umožnil mi ho pridať do systému. V tomto mieste by to samozrejme neprinieslo žiadne zmysluplné údaje.

Krok 2: Vyhľadanie údajov na senzore

Hľadanie údajov na senzore
Hľadanie údajov na senzore

Ako každé zariadenie Bluetooth LE, prvá vec, ktorú musíte urobiť, je dozvedieť sa o službách, ktoré ponúka, a ich charakteristikách. Niekde tam sú skryté skutočné údaje. Vďaka rýchlemu ladeniu, ktoré prešlo všetkými objavenými službami a vytlačilo ich charakteristiky, som bol v bode, kde som mohol porovnať informácie, ktoré som našiel na internete, s tým, čo zariadenie v skutočnosti hlási.

neplatné FlowerCare:: onServiceDiscoveryFinished () {BluetoothLowEnergyDevice *btDev = static_cast (sender ()); qCDebug (dcFlowerCare ()) << "mať servisné prostriedky" controller ()-> createServiceObject (sensorServiceUuid, this); connect (m_sensorService, & QLowEnergyService:: stateChanged, this, & FlowerCare:: onSensorServiceStateChanged); connect (m_sensorService, & QLowEnergyService:: CharacterRead, this, & FlowerCare:: onSensorServiceCharacteristicRead); m_sensorService- >coverDetails (); } void FlowerCare:: onSensorServiceStateChanged (const QLowEnergyService:: ServiceSate & state) {if (state! = QLowEnergyService:: ServiceDiscovered) {return; } foreach (const QLowEnergyCharacteristic & charakteristiky, m_sensorService-> charakteristiky ()) {qCDebug (dcFlowerCare ()). nospace () <"<< charakteristika.uuid (). toString () <<" ("<< charakteristika.handle () << "Názov:" << charakteristika.nazov () << "):" << charakteristika.hodnota () << "," << charakteristika.hodnota (). ToHex (); foreach (const QLowEnergyDescriptor & deskriptor, charakteristika.descriptors ()) {qCDebug (dcFlowerCare ()). nospace () <"<< descriptor.uuid (). toString () <<" ("<< descriptor.handle () <<" Name: "<< descriptor.name () << "):" << descriptor.value () << "," << descriptor.value (). toHex (); }}}

Verzia firmvéru a úroveň batérie boli jednoduché. Už v tomto prvom pokuse o výpis údajov som už mohol vidieť vytlačené zodpovedajúce hodnoty. Skutočné hodnoty senzorov sú tam ukryté o niečo hlbšie, ale ich kombinovanie s údajmi z internetu okamžite ukázalo, kde ich nájsť a najmä ako ich čítať.

neplatné FlowerCare:: onSensorServiceCharacteristicRead (const QLowEnergyCharacteristic & Characteristic, const QByteArray & value) {qCDebug (dcFlowerCare ()) << "Readistic Characteristic" << QString:: number (Character.handle (), 16) temp; preskočiť qint8; stream >> preskočiť; quint32 lux; prúd >> lux; qint8 vlhkosť; prúd >> vlhkosť; qint16 plodnosť; potok >> plodnosť; emitovať hotové (m_batteryLevel, 1,0 * teplota / 10, lux, vlhkosť, plodnosť); }

Keď to zhrnieme, doplnok už začal vytvárať zmysluplné údaje.

Krok 3: Dokončenie dotykov

Dokončovacie dotyky
Dokončovacie dotyky

Takže to v podstate fungovalo teraz, jeden problém tam však stále zostal. Senzor FlowerCare by na rozdiel od senzora Texas Instruments SensorTag po niekoľkých sekundách prerušil pripojenie Bluetooth. Vzhľadom na prípad použitia sa však nezdá, že by to bol problém, pretože je celkom spoľahlivý pri reakcii na pokusy o pripojenie. Vzhľadom na to, že rastlina bežne nevysaje liter vody v priebehu niekoľkých minút, ale skôr dní, nezdá sa nevyhnutné zostať stále v spojení. Tiež by to dosť vybilo batériu. Rozhodol som sa preto pridať PluginTimer, ktorý každých 20 minút senzor znova pripojí a bude z neho načítavať údaje. Ak senzor z nejakého dôvodu nereaguje na pokus o pripojenie, kód spustí ďalší časovač, ktorý sa od tohto bodu pokúša znova pripojiť každú minútu, kým sa mu nepodarí získať údaje. Potom sa znova vráti k načítaniu údajov v 20 -minútovom intervale. Ak sa zariadeniu nepodarí pripojiť dvakrát za sebou (to znamená po 20 + 1 minútach), bude v systéme označené ako offline a používateľ môže byť na to upozornený.

zrušiť DevicePluginFlowercare:: onPluginTimer () {foreach (FlowerCare *flowerCare, m_list) {if (--m_refreshMinutes [flowerCare] <= 0) {qCDebug (dcFlowerCare ()) << "Obnovovacia" adresa (); flowerCare-> refreshData (); } else {qCDebug (dcFlowerCare ()) << "Adresa sa neobnovuje" () << "Nasledujuce obnovenie za" << m_refreshMinutes [flowerCare] << "minut"; } // Ak sme zaznamenali 2 alebo viac neúspešných pokusov o pripojenie, označte to ako odpojené, ak (m_refreshMinutes [flowerCare] <-2) {qCDebug (dcFlowerCare ()) << "Obnovenie zlyhalo pre" << (m_refreshMinutes [flowerCare] * -1) <setStateValue (flowerCareConnectedStateTypeId, false); }}}

S touto stratégiou sa zdá, že nymea teraz dodáva dokonale spoľahlivé údaje z tohto senzora.

Krok 4: Použitie v širšom kontexte

Použitie vo väčšom kontexte
Použitie vo väčšom kontexte
Použitie vo väčšom kontexte
Použitie vo väčšom kontexte

Získanie hodnôt zo senzora však nie je také užitočné, na to som mohol použiť aj pôvodnú aplikáciu. Teraz s tým urobme niekoľko múdrych vecí.

Nymea podporuje odosielanie upozornení push, a to buď na telefóny s nainštalovanou aplikáciou nymea: alebo prostredníctvom PushBullet. Zjavnou vecou je poslať si upozornenia push vždy, keď vlhkosť pôdy klesne pod 15%. Je veľmi jednoduché to nastaviť v aplikácii. Ako predpoklad musíte mať účet v nymea: cloud alebo na PushBullet. Pre upozornenia nymea: cloud založené na upozorneniach stačí povoliť nymea: cloud na nymea: core a v nymea: app. Hneď ako sú obe prepojené, automaticky sa zobrazí upozornenie. Pre PushBullet pridajte do systému novú vec, v zozname nájdete PushBullet. Požiada vás o kľúč API, ktorý získate pri registrácii pomocou služby PushBullet. Akonáhle máte v nymea vec s upozornením push, môžete vytvoriť pravidlo.

Samozrejme môžete robiť čokoľvek iné, čo chcete … Môžete tiež zapnúť určité svetlo, aby odrážalo hodnoty senzorov, alebo napríklad použiť doplnok HTTP Commander na odosielanie hodnôt senzorov na server na internete. Nemám napríklad vodný ventil ktoré je možné ovládať ešte (zatiaľ) digitálne, ale samozrejme, ak niečo také máte a nymea to ešte nepodporuje, pridanie doplnku by bolo dosť podobné ako toto.

Krok 5: Záverečné slová

Záverečné slová
Záverečné slová

Doplnok starostlivosti o kvety bol už prijatý proti prúdu, a ak jeden z nich máte, je pripravený na použitie s nymea. Dúfam však, že tento článok by mohol byť zaujímavý, ak niekto chce pridať podporu pre ďalšie zariadenia. Mal by to byť návod, ako si vytvoriť vlastný doplnok pre nymea.

Ak si chcete toto nastavenie jednoducho vytvoriť doma, potrebujete iba senzor FlowerCare, Raspberry Pi, obrázok komunity nymea (v súčasnosti obsahuje doplnok starostlivosti o kvety) a aplikáciu nymea: ktorá je k dispozícii v obchodoch s aplikáciami. Tiež môj Monstera Deliciosa je zatiaľ opäť šťastný a ako ste mohli vidieť na snímkach obrazovky, zaobstaral som si druhý z týchto senzorov na sledovanie zdravia mojej citrónovej stromy. Na ten si posielam upozornenie vždy, keď vonku mrzne, aby som ho mohol bezpečne preniesť cez zimu.

Odporúča: