Taula de continguts:

FlowerCare i Nymea per rescatar les meves plantes: 5 passos
FlowerCare i Nymea per rescatar les meves plantes: 5 passos

Vídeo: FlowerCare i Nymea per rescatar les meves plantes: 5 passos

Vídeo: FlowerCare i Nymea per rescatar les meves plantes: 5 passos
Vídeo: Shanghai Yuuki(上海遊記) 1-10 Ryunosuke Akutagawa (Audiobook) 2024, Desembre
Anonim
FlowerCare i Nymea per rescatar les meves plantes
FlowerCare i Nymea per rescatar les meves plantes

Embrutar-se les mans en connectar els sensors de cura de les plantes a la meva llar intel·ligent de codi obert existent. Un tutorial sobre el desenvolupament de connectors per a nymea.

La història

Com molts altres pirates informàtics i pirates informàtics, també pateixo el problema que piratejar coses m’ocupa tant del temps que de tant en tant m’oblido de regar les meves plantes. Després que el meu Monstera Deliciosa tornés a patir terra seca, vaig decidir veure si puc fer alguna cosa per recordar-me quan té set.

Una ràpida investigació al web em va cridar l’atenció sobre el Xiaomi FlowerCare, també conegut com MiCare o PlantCare. Es tracta d’un dispositiu Bluetooth de baix consum i algunes investigacions bàsiques van revelar que el seu protocol sembla ser molt fàcil d’entendre. Tot i que sembla que Xiaomi no proporciona cap especificació pública, encara hi ha hagut força enginyeria inversa a Internet per a aquest dispositiu. Així que vaig decidir demanar-ne un.

Pocs dies després es va lliurar i, per descomptat, vaig començar a jugar-hi de seguida. Vaig comprovar breument l'aplicació que s'inclou, però, com és probable que pugueu endevinar, utilitzar-lo en la configuració predeterminada mai no era el meu pla. Per descomptat, cal integrar-ho amb la configuració de casa intel·ligent existent. Com també es descriu aquí, estic fent servir nymea com a solució per a casa intel·ligent (sí, fins i tot podeu veure el Monstera en una de les imatges allà:)). Malauradament, nymea no admetia aquest sensor, de manera que calia activar una mica d'IDE.

Pas 1: Com es carrega un taló de complement

S'està carregant una memòria de complement
S'està carregant una memòria de complement
S'està carregant una memòria de complement
S'està carregant una memòria de complement
S'està carregant una memòria de complement
S'està carregant una memòria de complement

Per tant, el primer que vaig fer va ser copiar el connector existent de Texas Instruments Sensor Tag, semblava prou similar al que suposava que també funcionaria per al dispositiu FlowerCare. Després de canviar el nom bàsic de les coses al plugininfo.json i comentar la majoria del codi del connector sensortag, estava preparat per carregar el nou complement del complement.

Com era d’esperar, el descobriment ja mostraria el sensor de seguida i em permetria afegir-lo al sistema. Per descomptat, no produiria cap dada significativa en aquest moment.

Pas 2: cercar dades al sensor

Cerca de dades al sensor
Cerca de dades al sensor

Com passa amb qualsevol dispositiu Bluetooth LE, el primer que voleu fer és conèixer els serveis que ofereix i les seves característiques. En algun lloc d’aquí s’amaguen les dades reals. Amb una impressió de depuració ràpida en bucle sobre tots els serveis descoberts i la impressió de les seves característiques, vaig estar en el punt en què vaig poder comparar la informació que vaig trobar a Internet amb la que realment informa el dispositiu.

void FlowerCare:: onServiceDiscoveryFinished () {BluetoothLowEnergyDevice * btDev = static_cast (remitent ()); qCDebug (dcFlowerCare ()) << "tenen uuids de servei" controller () -> createServiceObject (sensorServiceUuid, this); connect (m_sensorService, & QLowEnergyService:: stateChanged, this, & FlowerCare:: onSensorServiceStateChanged); connect (m_sensorService, & QLowEnergyService:: característicRead, this, & FlowerCare:: onSensorServiceCharacteristicRead); m_sensorService-> discoverDetails (); } void FlowerCare:: onSensorServiceStateChanged (const QLowEnergyService:: ServiceSate & state) {if (state! = QLowEnergyService:: ServiceDiscovered) {return; } foreach (const QLowEnergyCharacteristic & característica, m_sensorService-> característiques ()) {qCDebug (dcFlowerCare ()). nospace () <"<< caractéristique.uuid (). toString () <<" ("<< característica.handle () << "Nom:" << característica.nom () << "):" << característica.valor () << "," << característica.valor (). ToHex (); foreach (const QLowEnergyDescriptor & descriptor, característica.descriptors ()) {qCDebug (dcFlowerCare ()). nospace () <"<< descriptor.uuid (). toString () <<" ("<< descriptor.handle () <<" Name: "<< descriptor.name () << "):" << descriptor.value () << "," << descriptor.value (). toHex (); }}}

La versió del firmware i el nivell de bateria eren fàcils. Ja vaig poder veure els valors d’acord impresos en aquest primer intent d’enumerar les dades. Els valors reals del sensor s’amaguen una mica més a dins, però combinant-los amb les dades d’Internet de seguida es va assenyalar on trobar-lo i sobretot com llegir-lo.

void FlowerCare:: onSensorServiceCharacteristicRead (const QLowEnergyCharacteristic & caractéristique, const QByteArray & value) {qCDebug (dcFlowerCare ()) << "Lectura característica" << QString:: number (caractéristique.handle (), 16) temp; qint8 saltar; corrent >> saltar; quint32 lux; corrent >> lux; qint8 humitat; corrent >> humitat; qint16 fertilitat; corrent >> fertilitat; emetre acabat (m_batteryLevel, 1,0 * temp / 10, lux, humitat, fertilitat); }

Unint això, el connector ja va començar a produir dades significatives.

Pas 3: Acabat de tocs

Tocs d'acabat
Tocs d'acabat

Per tant, bàsicament funcionava ara, però, encara quedava un tema. Al contrari del Texas Instruments SensorTag, el sensor FlowerCare deixaria caure la connexió Bluetooth al cap d’uns segons. Tanmateix, tenint en compte el cas d’ús, no sembla que sigui un problema, ja que és bastant fiable per respondre als intents de connexió. Tenint en compte que normalment una planta no aspira un litre d’aigua en qüestió de minuts, sinó dies, no sembla necessari mantenir-se connectada tot el temps. A més, això esgotaria força la bateria. Així que vaig decidir afegir un PluginTimer que tornaria a connectar el sensor cada 20 minuts i en recolliria dades. Si, per alguna raó, el sensor no responia a l’intent de connexió, el codi iniciarà un altre temporitzador que intentarà tornar a connectar-se cada minut a partir d’aquest moment fins que aconsegueixi obtenir les dades. Després tornaria a recuperar les dades de l'interval de 20 minuts. Si el dispositiu no es connecta dues vegades seguides (és a dir, al cap de 20 + 1 minuts), es marcarà fora de línia al sistema i es podrà alertar a l'usuari sobre això.

void DevicePluginFlowercare:: onPluginTimer () {foreach (FlowerCare * flowerCare, m_list) {if (--m_refreshMinutes [flowerCare] <= 0) {qCDebug (dcFlowerCare ()) << Adreça "refrescant" (); flowerCare-> refreshData (); } else {qCDebug (dcFlowerCare ()) << Adreça "No refrescant" () << "Següent refresc a" << m_refreshMinutes [flowerCare] << "minuts"; } // Si hem tingut dos o més intents de connexió fallits, marqueu-lo com a desconnectat si (m_refreshMinutes [flowerCare] <-2) {qCDebug (dcFlowerCare ()) << "No s'ha pogut actualitzar" << (m_refreshMinutes [flowerCare] * -1) <setStateValue (flowerCareConnectedStateTypeId, false); }}}

Amb aquesta estratègia, ara nymea semblava proporcionar dades perfectament fiables d’aquest sensor.

Pas 4: utilitzar-lo en el context més gran

Ús en el context més gran
Ús en el context més gran
Ús en el context més gran
Ús en el context més gran

Només obtenir valors del sensor no és tan útil, però, també podria haver utilitzat l'aplicació original per a això. Ara fem algunes coses intel·ligents amb ell.

Nymea admet l'enviament de notificacions push, ja sigui a telèfons amb nymea: aplicació instal·lada o mitjançant PushBullet. Per tant, el que cal fer és enviar-me algunes notificacions push quan la humitat del sòl caigui per sota del 15%. És bastant fàcil configurar-ho a l'aplicació. Com a requisit previ, cal un compte a nymea: cloud o a PushBullet. Per a les notificacions push nymea: cloud, n'hi ha prou amb habilitar nymea: cloud al nymea: core i a nymea: app. Tan aviat com tots dos estiguin connectats, apareixerà automàticament una notificació. Per a PushBullet, afegiu una cosa nova al sistema, hi trobareu PushBullet a la llista. Us demanarà la clau API que obtingueu quan us registreu a PushBullet. Un cop tingueu una notificació push a nymea, podeu crear una regla.

Per descomptat, podeu fer el que vulgueu … També podeu encendre una mica de llum per reflectir els valors del sensor o, per exemple, utilitzar el connector HTTP commander per publicar els valors del sensor a un servidor d'Internet. No tinc cap vàlvula d'aigua que es pot controlar digitalment (encara) però, per descomptat, si teniu tal cosa i encara no és compatible amb nymea, afegir un connector per a això seria més aviat similar a aquest.

Pas 5: clausura de paraules

Paraules de cloenda
Paraules de cloenda

El connector flowercare ja s'ha acceptat aigües amunt i, si en teniu un, ja està llest per utilitzar-lo amb nymea. Tot i això, espero que aquest article pugui ser d’interès si algú vol afegir assistència a altres dispositius. Hauria de ser un pas a continuació sobre com crear el vostre propi connector per a nymea.

Si només voleu construir aquesta configuració a casa vostra, només necessiteu el sensor FlowerCare, un Raspberry Pi, la imatge de la comunitat nymea (ja inclou el complement per a la cura de les flors) i l’aplicació nymea: disponible a les botigues d’aplicacions. A més, fins ara la meva Monstera Deliciosa torna a estar contenta i, tal com podríeu haver vist a les captures de pantalla, he obtingut un segon d'aquests sensors per controlar també la salut del meu llimoner. Per a això, m'envio una notificació push cada vegada que es congela a l'exterior per poder portar-la durant l'hivern amb seguretat.

Recomanat: