Obsah:

FlowerCare a Nymea na záchranu mých rostlin: 5 kroků
FlowerCare a Nymea na záchranu mých rostlin: 5 kroků

Video: FlowerCare a Nymea na záchranu mých rostlin: 5 kroků

Video: FlowerCare a Nymea na záchranu mých rostlin: 5 kroků
Video: Anthurium ze semínka. 2024, Listopad
Anonim
FlowerCare a Nymea na záchranu mých rostlin
FlowerCare a Nymea na záchranu mých rostlin

Znečištění rukou zapojením senzorů péče o rostliny do mého stávajícího inteligentního domu s otevřeným zdrojovým kódem. Návod na vývoj pluginu pro nymea.

Příběh

Jako mnoho dalších drotářů a hackerů také trpím problémem, že hackování věcí mi zabírá tolik času, že občas zapomenu zalévat své rostliny. Poté, co moje Monstera Deliciosa opět trpěla suchou půdou, rozhodl jsem se zjistit, zda s tím mohu něco udělat, aby mi to připomnělo, když má žízeň.

Rychlý průzkum na webu mě upozornil na Xiaomi FlowerCare, známý také jako MiCare nebo PlantCare. Jedná se o zařízení Bluetooth s nízkou spotřebou energie a některé základní průzkumy odhalily, že jeho protokol se zdá být docela snadno pochopitelný. Ačkoli se zdá, že Xiaomi neposkytuje žádné veřejné specifikace, na internetu bylo pro toto zařízení dosud docela dost reverzního inženýrství. Rozhodl jsem se tedy jeden takový objednat.

O několik dní později to bylo doručeno a já jsem si s tím samozřejmě začal hned hrát. Krátce jsem zkontroloval aplikaci, která je součástí dodávky, ale jak pravděpodobně uhodnete, použití ve výchozím nastavení nebylo nikdy mým plánem. Samozřejmě to musí být integrováno s mým stávajícím nastavením chytré domácnosti. Jak zde bylo také popsáno, jako řešení pro chytrou domácnost používám nymea (Ano, Monsteru můžete dokonce spatřit na jednom z obrázků:)). Nymea bohužel tento senzor ještě nepodporovala, takže vypálit nějaké IDE bylo v pořádku.

Krok 1: Načtení stubu pluginu

Načtení stubu pluginu
Načtení stubu pluginu
Načtení stubu pluginu
Načtení stubu pluginu
Načtení stubu pluginu
Načtení stubu pluginu

Takže první věc, kterou jsem udělal, bylo zkopírovat stávající plugin Texas Instruments Sensor Tag, zdálo se to dost podobné tomu, co jsem předpokládal, že by mělo fungovat i pro zařízení FlowerCare. Po základním přejmenování věcí v plugininfo.json a odkomentování většiny kódu pluginu sensortag jsem byl připraven načíst nový pahýl pluginu.

Jak se dalo očekávat, objev by již ukázal senzor hned a umožnil mi jej přidat do systému. V tuto chvíli by to samozřejmě nepřineslo žádná smysluplná data.

Krok 2: Vyhledání dat na senzoru

Hledání dat na senzoru
Hledání dat na senzoru

Jako u každého zařízení Bluetooth LE je první věcí, kterou musíte udělat, zjistit informace o službách, které nabízí, a jejich charakteristikách. Někde tam jsou skrytá skutečná data. Díky rychlému ladění tisku ve smyčce nad všemi objevenými službami a tiskem jejich charakteristik jsem byl v bodě, kdy jsem mohl porovnat informace, které jsem našel na internetu, s tím, co zařízení ve skutečnosti hlásí.

neplatné FlowerCare:: onServiceDiscoveryFinished () {BluetoothLowEnergyDevice *btDev = static_cast (sender ()); qCDebug (dcFlowerCare ()) << "mít servisní uuids" controller ()-> createServiceObject (sensorServiceUuid, this); connect (m_sensorService, & QLowEnergyService:: stateChanged, this, & FlowerCare:: onSensorServiceStateChanged); connect (m_sensorService, & QLowEnergyService:: CharacterRead, this, & FlowerCare:: onSensorServiceCharacteristicRead); m_sensorService-> objevitDetails (); } 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.rucka () << "Jméno:" << charakteristika.název () << "):" << charakteristika.hodnota () << "," << charakteristika.hodnota (). ToHex (); foreach (konst QLowEnergyDescriptor & deskriptor, charakteristika.descriptors ()) {qCDebug (dcFlowerCare ()). nospace () <"<< descriptor.uuid (). toString () <<" ("<< descriptor.handle () <<" Jméno: "<< descriptor.name () << "):" << descriptor.value () << "," << descriptor.value (). toHex (); }}}

Verze firmwaru a úroveň baterie byly snadné. Už při prvním pokusu o výpis dat jsem viděl vytištěné odpovídající hodnoty. Skutečné hodnoty senzorů jsou tam skryty trochu hlouběji, ale jejich kombinace s daty z internetu okamžitě ukázala, kde je najít a hlavně jak je číst.

neplatné FlowerCare:: onSensorServiceCharacteristicRead (const QLowEnergyCharacteristic & charakteristické, konst QByteArray & hodnota) {qCDebug (dcFlowerCare ()) << "čtení charakteristik" << QString:: number (charakteristika.handle (), 16) temp; qint8 přeskočit; stream >> přeskočit; quint32 lux; stream >> lux; qint8 vlhkost; proud >> vlhkost; qint16 plodnost; proud >> plodnost; emitovat hotové (m_batteryLevel, 1,0 * teplota / 10, lux, vlhkost, plodnost); }

Když to shrneme, plugin již začal produkovat smysluplná data.

Krok 3: Dokončení dotyků

Dokončovací doteky
Dokončovací doteky

Takže to v podstatě fungovalo nyní, nicméně jeden problém tam stále zůstal. Senzor FlowerCare by na rozdíl od Texas Instruments SensorTag po několika sekundách přerušil připojení Bluetooth. Vzhledem k případu použití se však nezdá, že by to byl problém, protože je docela spolehlivý při reakci na pokusy o připojení. Vzhledem k tomu, že rostlina obvykle nesaje litr vody během několika minut, ale spíše dnů, nezdá se nutné zůstat neustále ve spojení. Také by to docela vybilo baterii. Rozhodl jsem se tedy přidat PluginTimer, který každých 20 minut senzor znovu připojí a načte z něj data. Pokud z nějakého důvodu senzor nereaguje na pokus o připojení, kód spustí další časovač, který se od tohoto bodu každou minutu pokusí znovu připojit, dokud se mu nepodaří získat data. Poté se vrátí zpět k načtení dat v 20minutovém intervalu znovu. Pokud se zařízení nepodaří připojit dvakrát za sebou (to znamená po 20 + 1 minutách), bude v systému označeno offline a uživatel na to může být upozorněn.

zrušit DevicePluginFlowercare:: onPluginTimer () {foreach (FlowerCare *flowerCare, m_list) {if (--m_refreshMinutes [flowerCare] <= 0) {qCDebug (dcFlowerCare ()) << "Obnovovací" adresa (); flowerCare-> refreshData (); } else {qCDebug (dcFlowerCare ()) << "Neobnovující se adresa" () << "Další aktualizace v" << m_refreshMinutes [flowerCare] << "minut"; } // Pokud jsme měli 2 nebo více neúspěšných pokusů o připojení, označte to jako odpojené, pokud (m_refreshMinutes [flowerCare] <-2) {qCDebug (dcFlowerCare ()) << "Obnovení se nezdařilo pro" << (m_refreshMinutes [flowerCare] * -1) <setStateValue (flowerCareConnectedStateTypeId, false); }}}

S touto strategií se zdálo, že nymea nyní poskytuje dokonale spolehlivá data z tohoto senzoru.

Krok 4: Použití v širším kontextu

Použití v širším kontextu
Použití v širším kontextu
Použití v širším kontextu
Použití v širším kontextu

Získání hodnot ze senzoru není tak užitečné, ale mohl jsem k tomu také použít původní aplikaci. Nyní s tím uděláme pár chytrých věcí.

Nymea podporuje zasílání push notifikací, a to buď na telefony s nainstalovanou aplikací nymea: nebo prostřednictvím PushBullet. Zjevnou věcí, kterou je třeba udělat, je zaslat si několik oznámení, kdykoli půdní vlhkost klesne pod 15%. Je docela snadné to nastavit v aplikaci. Předpokladem je, že budete potřebovat účet v nymea: cloud nebo na PushBullet. Pro nymea: cloudová push oznámení stačí povolit nymea: cloud na nymea: core a v nymea: app. Jakmile jsou obě propojeny, automaticky se zobrazí oznámení. Pro PushBullet přidejte do systému novou věc, v seznamu najdete PushBullet. Požádá vás o klíč API, který získáte při registraci pomocí PushBullet. Jakmile máte v nymea věc s push notifikací, můžete vytvořit pravidlo.

Samozřejmě můžete dělat cokoli jiného, co chcete … Můžete také zapnout nějaké světlo, aby odráželo hodnoty senzorů, nebo použít plugin HTTP Commander například pro odeslání hodnot senzorů na server na internetu. Nemám vodní ventil který lze ovládat digitálně (zatím), ale samozřejmě, pokud něco takového máte a není to zatím podporováno nymea, přidání pluginu pro to by bylo dost podobné než toto.

Krok 5: Uzavření slov

Závěrečná slova
Závěrečná slova

Plugin pro péči o květiny byl již přijat proti proudu, a pokud máte jeden z nich, je připraven k použití s nymea. Doufám však, že tento článek by mohl být zajímavý, pokud někdo chce přidat podporu pro další zařízení. Měl by to být návod, jak vytvořit vlastní plugin pro nymea.

Pokud si chcete toto nastavení postavit doma, potřebujete pouze senzor FlowerCare, Raspberry Pi, image komunity nymea (již nyní obsahuje plugin pro péči o květiny) a aplikaci nymea: která je k dispozici v obchodech s aplikacemi. Také zatím je moje Monstera Deliciosa opět šťastná a jak jste si mohli všimnout na screenshotech, pořídil jsem si druhý z těchto senzorů pro sledování zdraví i mého citroníku. Kvůli tomu posílám oznámení push, kdykoli venku mrzne, abych to mohl bezpečně přenést přes zimu.

Doporučuje: