Съдържание:

FlowerCare и Nymea за спасяване на моите растения: 5 стъпки
FlowerCare и Nymea за спасяване на моите растения: 5 стъпки

Видео: FlowerCare и Nymea за спасяване на моите растения: 5 стъпки

Видео: FlowerCare и Nymea за спасяване на моите растения: 5 стъпки
Видео: Xiaomi Mi Flora Monitor Sensor прибор для ваших растений II Что это за зверь? 2024, Ноември
Anonim
FlowerCare и Nymea за спасяване на моите растения
FlowerCare и Nymea за спасяване на моите растения

Изцапване на ръцете при свързване на сензори за грижа за растенията към съществуващия умен дом с отворен код. Помощ за разработка на плъгини за nymea.

Историята

Както много други калайджии и хакери, аз също страдам от проблема, че хакването на неща отнема толкова много време, че понякога забравям да поливам растенията си. След като моята Monstera Deliciosa отново пострада от суха почва, реших да видя дали мога да направя нещо по въпроса, за да ми напомня, когато е жаден.

Бързо проучване в мрежата привлече вниманието ми към Xiaomi FlowerCare, известен също като MiCare или PlantCare. Това е Bluetooth устройство с ниска енергия и някои основни изследвания разкриха, че протоколът му изглежда доста лесен за разбиране. Въпреки че Xiaomi не предоставя публични спецификации, в интернет все още има доста обратен инженеринг за това устройство. Затова реших да поръчам един от тях.

Няколко дни по -късно беше доставен и разбира се веднага започнах да си играя с него. Накратко проверих приложението, което се доставя с него, но както вероятно се досещате, използването му в настройката по подразбиране никога не е бил планът ми. Разбира се, това трябва да бъде интегрирано със съществуващата ми настройка за интелигентен дом. Както е описано тук, използвам nymea като мое решение за интелигентен дом (Да, дори можете да забележите Monstera на една от снимките там:)). За съжаление, nymea все още не поддържа този сензор, така че стартирането на някаква IDE беше наред.

Стъпка 1: Зареждане на плъгин

Получаване на плъгин Stub Loaded
Получаване на плъгин Stub Loaded
Получаване на плъгин Stub Loaded
Получаване на плъгин Stub Loaded
Получаване на плъгин Stub Loaded
Получаване на плъгин Stub Loaded

Първото нещо, което направих, беше да копирам съществуващата приставка на Texas Instruments Sensor Tag, тя изглеждаше достатъчно подобна на това, което предполагах, че трябва да работи и за устройството FlowerCare. След основното преименуване на нещата в plugininfo.json и коментирането на по -голямата част от кода на плъгина на сензорния маркер бях готов да заредя новия плъгин.

Както се очакваше, откритието вече щеше да покаже сензора веднага и ще ми позволи да го добавя към системата. Разбира се, това няма да даде значими данни на този етап.

Стъпка 2: Намиране на данни на сензора

Намиране на данни на сензора
Намиране на данни на сензора

Както при всяко Bluetooth LE устройство, първото нещо, което искате да направите, е да разберете за услугите, които предлага, и техните характеристики. Някъде там действителните данни са скрити. С бърз печат за отстраняване на грешки, обхождащ всички открити услуги и отпечатвайки техните характеристики, бях на мястото, където можех да сравня информацията, която намерих в интернет, с това, което устройството всъщност съобщава.

void FlowerCare:: onServiceDiscoveryFinished () {BluetoothLowEnergyDevice *btDev = static_cast (изпращач ()); qCDebug (dcFlowerCare ()) << "има сервизни uuids" controller ()-> createServiceObject (sensorServiceUuid, това); connect (m_sensorService, & QLowEnergyService:: stateChanged, this, & FlowerCare:: onSensorServiceStateChanged); connect (m_sensorService, & QLowEnergyService:: characterRead, this, & FlowerCare:: onSensorServiceCharacteristicRead); m_sensorService-> discoverDetails (); } void FlowerCare:: onSensorServiceStateChanged (const QLowEnergyService:: ServiceSate & state) {if (състояние! = QLowEnergyService:: ServiceDiscovered) {return; } foreach (const QLowEnergyCharacteristic & character, m_sensorService-> характеристики ()) {qCDebug (dcFlowerCare ()). nospace () <"<< character.uuid (). toString () <<" ("<< характеристика.handle () << "Име:" << character.name () << "):" << character.value () << "," << character.value (). ToHex (); foreach (const QLowEnergyDescriptor & дескриптор, характеристика.descriptors ()) {qCDebug (dcFlowerCare ()). nospace () <"<< Descriptor.uuid (). toString () <<" ("<< дескриптор.handle () <<" Име: "<< дескриптор.name () << "):" << Descriptor.value () << "," << Descriptor.value (). toHex (); }}}

Версията на фърмуера и нивото на батерията бяха лесни. Вече можех да видя съответните стойности, отпечатани в този първи опит за изброяване на данните. Действителните стойности на сензора са скрити малко по -дълбоко там, но комбинирането им с данните от интернет веднага посочи къде да го намерите и най -вече как да го прочетете.

void FlowerCare:: onSensorServiceCharacteristicRead (const QLowEnergyCharacteristic & character, const QByteArray & value) {qCDebug (dcFlowerCare ()) << "Характеристично четене" << QString:: number (karakteristična.handle (), 16) temp; qint8 пропускане; поток >> пропуснете; quint32 лукса; поток >> лукс; qint8 влага; поток >> влага; qint16 плодовитост; поток >> плодородие; излъчват завършени (m_batteryLevel, 1.0 * temp / 10, lux, влага, плодородие); }

Сглобявайки това, плъгинът вече започна да произвежда значими данни.

Стъпка 3: Довършителни щрихи

Довършителни щрихи
Довършителни щрихи

Така че по принцип работи сега, но един въпрос все още беше оставен там. Сензорът FlowerCare, за разлика от Texas Instruments SensorTag, ще прекъсне Bluetooth връзката след няколко секунди. Като се има предвид случаят на използване, това не изглежда да е проблем, тъй като е доста надеждно в отговор на опитите за свързване. Като се има предвид, че обикновено растението не изсмуква литър вода в рамките на минути, а по -скоро дни, не изглежда необходимо да поддържате връзка през цялото време. Също така това ще изтощи доста батерията. Затова реших да добавя PluginTimer, който да свързва отново сензора на всеки 20 минути и да извлича данни от него. Ако по някаква причина сензорът не реагира на опита за свързване, кодът ще стартира друг таймер, който се опитва да се свърже отново всяка минута от този момент нататък, докато успее да получи данните. След това отново ще се върне, за да извлече данни за 20 -минутния интервал. Ако устройството не успее да се свърже два пъти подред (което означава, след 20 + 1 минути), то ще бъде маркирано като офлайн в системата и потребителят може да бъде предупреден за това.

void DevicePluginFlowercare:: onPluginTimer () {foreach (FlowerCare *flowerCare, m_list) {if (--m_refreshMinutes [flowerCare] <= 0) {qCDebug (dcFlowerCare ()) << "Опресняване" на адрес (); flowerCare-> refreshData (); } else {qCDebug (dcFlowerCare ()) << "Не се опреснява" адрес () << "Следващо опресняване в" << m_refreshMinutes [flowerCare] << "минути"; } // Ако имахме 2 или повече неуспешни опита за свързване, маркирайте го като прекъснат, ако (m_refreshMinutes [flowerCare] <-2) {qCDebug (dcFlowerCare ()) << "Неуспешно опресняване за" << (m_refreshMinutes [flowerCare] * -1) <setStateValue (flowerCareConnectedStateTypeId, false); }}}

С тази стратегия изглежда, че nymea доставя напълно надеждни данни от този сензор.

Стъпка 4: Използването му в по -големия контекст

Използването му в по -широк контекст
Използването му в по -широк контекст
Използването му в по -широк контекст
Използването му в по -широк контекст

Само получаването на стойности от сензора обаче не е толкова полезно, можех да използвам и оригиналното приложение за това. Сега нека направим някои умни неща с него.

Nymea поддържа изпращане на push известия, или на телефони с инсталирано приложение nymea: или чрез PushBullet. Така че очевидното нещо, което трябва да направите, е да си изпращам известни push известия, когато влажността на почвата падне под 15%. Това е доста лесно да се настрои в приложението. Като предпоставка имате нужда от акаунт в nymea: cloud или в PushBullet. За nymea: cloud базирани push известия е достатъчно да активирате nymea: cloud на nymea: core и в nymea: app. Веднага щом и двете са свързани, автоматично ще се появи известие. За PushBullet добавете нещо ново в системата, ще намерите PushBullet в списъка там. Той ще ви поиска API ключ, който получавате, когато се регистрирате с PushBullet. След като имате нещо с push известия в nymea, можете да създадете правило.

Разбира се, можете да правите каквото искате … Можете също така да включите светлина, за да отразявате стойностите на сензора, или да използвате приставката за HTTP командир, за да публикувате например стойности на сензора на сървър в интернет. Нямам клапан за вода което може да се контролира цифрово (все още), но разбира се, ако имате такова нещо и все още не се поддържа от nymea, добавянето на плъгин за това би било по -скоро подобно на това.

Стъпка 5: Заключване на думите

Заключителни думи
Заключителни думи

Плъгинът за грижа за цветя вече е приет нагоре по веригата и ако имате един от тях, той вече е готов за използване с nymea. Надявам се обаче тази статия да представлява интерес, ако някой иска да добави поддръжка за други устройства. Това трябва да бъде упътване за това как да създадете свой собствен плъгин за nymea.

Ако искате просто да изградите тази настройка у дома си, всичко, от което се нуждаете, е сензорът FlowerCare, Raspberry Pi, изображението на общността nymea (до момента включва приставката за грижа за цветята) и приложението nymea:, което се предлага в магазините за приложения. Също така, досега моята Monstera Deliciosa отново е щастлива и както може би сте виждали на екранните снимки, аз си взех втори такъв сензор за проследяване на здравето на моето лимоново дърво. За това си изпращам push известие, когато навън замръзне, за да мога да го пренеса безопасно през зимата.

Препоръчано: