INHOUDSOPGAWE:

FlowerCare en Nymea om my plante te red: 5 stappe
FlowerCare en Nymea om my plante te red: 5 stappe

Video: FlowerCare en Nymea om my plante te red: 5 stappe

Video: FlowerCare en Nymea om my plante te red: 5 stappe
Video: Growing Plumerias with Steve Hampson 2024, Julie
Anonim
FlowerCare en Nymea om my plante te red
FlowerCare en Nymea om my plante te red

Ek raak vuil om plantversorgingsensors aan te sluit by my bestaande open source slimhuis. 'N Inleiding tot die ontwikkeling van inproppe vir nymea.

Die storie

Soos baie ander klinkers en hackers, ly ek ook aan die probleem dat inbraak op dinge soveel tyd in beslag neem dat ek soms vergeet om my plante nat te maak. Nadat my Monstera Deliciosa weer aan droë grond gely het, het ek besluit om te kyk of ek iets daaraan kan doen om my te herinner as dit dors is.

'N Vinnige navorsing op die internet het my aandag gevestig op die Xiaomi FlowerCare, ook bekend as MiCare of PlantCare. Dit is 'n Bluetooth -laenergietoestel en 'n paar basiese navorsing het aan die lig gebring dat die protokol redelik maklik is om te verstaan. Alhoewel dit lyk asof Xiaomi geen openbare spesifikasies bied nie, was daar nogal 'n bietjie reverse engineering op die internet vir hierdie toestel. Daarom het ek besluit om een daarvan te bestel.

'N Paar dae later is dit afgelewer, en ek het natuurlik dadelik daarmee begin speel. Ek het kortliks na die app gekyk, maar soos u waarskynlik kan raai, was dit nooit my plan om dit in die standaardopstelling te gebruik nie. Dit moet natuurlik geïntegreer word met my bestaande slimhuisopset. Soos ek hier ook beskryf, gebruik ek nymea as my slimhuisoplossing (Ja, u kan selfs die Monstera in een van die foto's daar sien:)). Ongelukkig het nymea die sensor nog nie ondersteun nie, dus was dit nodig om 'n paar IDE aan te steek.

Stap 1: Laai 'n inpropstomp gelaai

Laai 'n inpropstomp gelaai
Laai 'n inpropstomp gelaai
Laai 'n inpropstomp gelaai
Laai 'n inpropstomp gelaai
Laai 'n inpropstomp gelaai
Laai 'n inpropstomp gelaai

Die eerste ding wat ek gedoen het, was om die bestaande plug -in vir Texas Instruments Sensor Tag te kopieer. Na die basiese hernoeming van dinge in die plugininfo.json en kommentaar op die meeste van die sensortag -inprop se kode, was ek gereed om die nuwe plugin -stomp te laai.

Soos verwag, sou die ontdekking die sensor dadelik wys en my toelaat om dit by die stelsel te voeg. Natuurlik sou dit op hierdie stadium geen betekenisvolle data oplewer nie.

Stap 2: Soek data op die sensor

Vind data oor die sensor
Vind data oor die sensor

Soos met enige ander Bluetooth LE -toestel, is die eerste ding wat u wil doen om meer te wete te kom oor die dienste wat dit bied en die kenmerke daarvan. Iewers daar is die werklike data verborge. Met 'n vinnige ontfout -afdruk van al die ontdekte dienste en die afdruk van hul eienskappe, was ek op die punt waar ek die inligting wat ek op die internet gevind het, kon vergelyk met wat die toestel eintlik rapporteer.

void FlowerCare:: onServiceDiscoveryFinished () {BluetoothLowEnergyDevice *btDev = static_cast (sender ()); qCDebug (dcFlowerCare ()) << "het diens -uuids" kontroleerder ()-> createServiceObject (sensorServiceUuid, hierdie); connect (m_sensorService, & QLowEnergyService:: stateChanged, this, & FlowerCare:: onSensorServiceStateChanged); connect (m_sensorService, & QLowEnergyService:: characteristies, hierdie, en FlowerCare:: onSensorServiceCharacteristicRead); m_sensorService-> discoverDetails (); } void FlowerCare:: onSensorServiceStateChanged (const QLowEnergyService:: ServiceSate & state) {if (state! = QLowEnergyService:: ServiceDiscovered) {return; } foreach (const QLowEnergyCharacteristic & characterist, m_sensorService-> features ()) {qCDebug (dcFlowerCare ()). nospace () <"<< karakteristiek.uuid (). toString () <<" ("<< kenmerkend.hanteer () << "Naam:" << kenmerkend.naam () << "):" << kenmerkend.waarde () << "," << kenmerkend.waarde (). ToHex (); foreach (konst QLowEnergyDescriptor en beskrywer, kenmerkend.descriptors ()) {qCDebug (dcFlowerCare ()). nospace () <"<< descriptor.uuid (). toString () <<" ("<< descriptor.handle () <<" Naam: "<< descriptor.name () << "):" << descriptor.value () << "," << descriptor.value (). toHex (); }}}

Die firmware -weergawe en die batteryniveau was maklik. Ek kon alreeds die ooreenstemmende waardes sien druk in hierdie heel eerste poging om die gegewens te lys. Die werklike sensorwaardes is 'n bietjie dieper daar weggesteek, maar deur dit te kombineer met die data van die internet, word onmiddellik aangetoon waar dit gevind kan word en veral hoe om dit te lees.

void FlowerCare:: onSensorServiceCharacteristicRead (const QLowEnergyCharacteristic & characterist, const QByteArray & value) {qCDebug (dcFlowerCare ()) << "Characteristic read" << QString:: number (characterist.handle (), 16) temp; qint8 oorslaan; stroom >> oorslaan; quint32 lux; stroom >> lux; qint8 vog; stroom >> vog; qint16 vrugbaarheid; stroom >> vrugbaarheid; afgee klaar (m_batteryLevel, 1.0 * temp / 10, lux, vog, vrugbaarheid); }

Deur dit bymekaar te sit, het die inprop reeds betekenisvolle data begin produseer.

Stap 3: afwerking

Afwerking
Afwerking

So dit het nou basies gewerk, maar een probleem was nog daar. Die FlowerCare -sensor sou, in teenstelling met die Texas Instruments SensorTag, die Bluetooth -verbinding na 'n paar sekondes verbreek. Met inagneming van die gebruiksgeval, blyk dit nie 'n probleem te wees nie, aangesien dit baie betroubaar is om te reageer op verbindingspogings. Aangesien 'n plant gewoonlik nie 'n liter water binne 'n paar minute opneem nie, maar eerder dae, lyk dit nie nodig om heeltyd verbind te bly nie. Dit sal ook die battery baie leegmaak. Daarom het ek besluit om 'n PluginTimer by te voeg wat die sensor elke 20 minute weer sal koppel en data daaruit kan haal. As die sensor om een of ander rede nie op die aansluitingspoging reageer nie, begin die kode met 'n ander tydskakelaar wat elke minuut vanaf daardie tydstip weer probeer koppel totdat dit die data kan kry. Dan gaan dit weer om data oor die 20 minute interval te gaan haal. As die toestel nie twee keer agtereenvolgens konnekteer nie (dit wil sê na 20 + 1 minute), word dit vanlyn in die stelsel gemerk en kan die gebruiker daaroor gewaarsku word.

void DevicePluginFlowercare:: onPluginTimer () {foreach (FlowerCare *flowerCare, m_list) {if (--m_refreshMinutes [flowerCare] <= 0) {qCDebug (dcFlowerCare ()) << "Refreshing" adres (); flowerCare-> refreshData (); } anders {qCDebug (dcFlowerCare ()) << "Nie verfrissend" adres () << "Volgende herlaai in" << m_refreshMinutes [flowerCare] << "minute"; } // As ons 2 of meer mislukte verbindingspogings gehad het, merk dit as ontkoppel as (m_refreshMinutes [flowerCare] <-2) {qCDebug (dcFlowerCare ()) << "Kon nie herlaai vir" << (m_refreshMinutes [flowerCare] * -1) <setStateValue (flowerCareConnectedStateTypeId, false); }}}

Met hierdie strategie het nymea blykbaar volkome betroubare data van hierdie sensor gelewer.

Stap 4: Gebruik dit in die groter konteks

Gebruik dit in die groter konteks
Gebruik dit in die groter konteks
Gebruik dit in die groter konteks
Gebruik dit in die groter konteks

Om net waardes van die sensor te kry, is egter nie so nuttig nie; ek kon ook die oorspronklike app daarvoor gebruik het. Kom ons doen nou 'n paar slim dinge daarmee.

Nymea ondersteun push -kennisgewings, óf na telefone met nymea: app geïnstalleer, óf via PushBullet. Die voor die hand liggende ding is om vir my 'n paar kennisgewings te stuur wanneer die grondvog onder 15%val. Dit is redelik maklik om dit in die app op te stel. As voorvereiste het u óf 'n rekening nodig in nymea: cloud of op PushBullet. Vir nymea: wolkgebaseerde stootkennisgewings is dit genoeg om nymea: wolk op die nymea: kern en in nymea: app moontlik te maak. Sodra albei verbind is, verskyn daar outomaties 'n kennisgewing. As PushBullet 'n nuwe ding in die stelsel byvoeg, vind u PushBullet in die lys daar. Dit sal u vra vir die API -sleutel wat u kry wanneer u by PushBullet aanmeld. As u eers 'n push -kennisgewing in nymea het, kan u 'n reël skep.

U kan natuurlik alles doen wat u wil … Kan ook lig aanskakel om sensorwaardes te weerspieël, of die HTTP -beveler -inprop gebruik om sensorwaardes byvoorbeeld na 'n bediener op die internet te plaas. Ek het nie 'n waterklep nie wat digitaal (nog) beheer kan word, maar natuurlik, as u so iets het en dit nog nie deur nymea ondersteun word nie, sou 'n inprop daarvoor baie meer soortgelyk wees as dit.

Stap 5: Sluitwoorde

Slotwoorde
Slotwoorde

Die plug -in vir blomversorging is nou stroomop aanvaar, en as u een het, is dit gereed om nou saam met nymea gebruik te word. Ek hoop egter dat hierdie artikel van belang kan wees as iemand ondersteuning vir ander toestelle wil byvoeg. Dit behoort 'n uiteensetting te wees van hoe u u eie inprop vir nymea kan bou.

As u hierdie opset net by u huis wil bou, is die FlowerCare -sensor, 'n Raspberry Pi, die beeld van die nymea -gemeenskap (dit bevat nou die plug -in vir blomversorging) en nymea: app wat beskikbaar is in appwinkels. Tot dusver is my Monstera Deliciosa ook weer gelukkig, en soos u dalk op die kiekies kon sien, het ek vir my 'n tweede van die sensors gekry om die gesondheid van my suurlemoenboom ook op te spoor. Vir die een stuur ek vir myself 'n push -kennisgewing wanneer dit buite vries, sodat ek dit veilig deur die winter kan bring.

Aanbeveel: