Tabla de contenido:
- Paso 1: Obtener un stub de complemento cargado
- Paso 2: búsqueda de datos en el sensor
- Paso 3: Toques finales
- Paso 4: usándolo en un contexto más amplio
- Paso 5: Palabras de cierre
Video: FlowerCare y Nymea para rescatar mis plantas: 5 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:43
Ensuciarme las manos al conectar sensores de cuidado de plantas a mi hogar inteligente de código abierto existente. Un tutorial sobre el desarrollo de complementos para nymea.
La historia
Como muchos otros manipuladores y piratas informáticos, también estoy sufriendo el problema de que piratear cosas me ocupa tanto tiempo que de vez en cuando me olvido de regar mis plantas. Después de que mi Monstera Deliciosa volviera a sufrir de suelo seco, decidí ver si podía hacer algo al respecto para recordarme cuando tengo sed.
Una rápida búsqueda en la web me llamó la atención sobre Xiaomi FlowerCare, también conocido como MiCare o PlantCare. Es un dispositivo Bluetooth Low Energy y algunas investigaciones básicas revelaron que su protocolo parece ser bastante fácil de entender. Si bien Xiaomi no parece proporcionar ninguna especificación pública, todavía ha habido bastante ingeniería inversa en Internet para este dispositivo. Así que decidí pedir uno de esos.
Unos días después me lo entregaron y, por supuesto, comencé a jugar con él de inmediato. Revisé brevemente la aplicación que viene con él, pero como probablemente puedas adivinar, usarla en su configuración predeterminada nunca fue mi plan. Por supuesto, esto debe integrarse con la configuración de mi hogar inteligente existente. Como también se describe aquí, estoy usando nymea como mi solución de hogar inteligente (Sí, incluso puedes ver la Monstera en una de las imágenes allí:)). Lamentablemente, nymea aún no era compatible con ese sensor, por lo que era necesario activar un IDE.
Paso 1: Obtener un stub de complemento cargado
Entonces, lo primero que hice fue copiar el complemento existente de Texas Instruments Sensor Tag, parecía lo suficientemente similar a lo que asumí que también debería funcionar para el dispositivo FlowerCare. Después del cambio de nombre básico de las cosas en plugininfo.json y comentando la mayor parte del código del complemento sensortag, estaba listo para cargar el nuevo código auxiliar del complemento.
Como era de esperar, el descubrimiento ya mostraría el sensor de inmediato y me permitiría agregarlo al sistema. Por supuesto, no produciría ningún dato significativo en este momento.
Paso 2: búsqueda de datos en el sensor
Como ocurre con cualquier dispositivo Bluetooth LE, lo primero que quieres hacer es conocer los servicios que ofrece y sus características. En algún lugar de allí, los datos reales están ocultos. Con una impresión de depuración rápida recorriendo todos los servicios descubiertos e imprimiendo sus características, estaba en el punto en el que podía comparar la información que encontré en Internet con lo que el dispositivo realmente reporta.
void FlowerCare:: onServiceDiscoveryFinished () {BluetoothLowEnergyDevice * btDev = static_cast (remitente ()); qCDebug (dcFlowerCare ()) << "tener uuids de servicio"
La versión de firmware y el nivel de la batería fueron fáciles. Ya pude ver los valores correspondientes impresos en este primer intento de enumerar los datos. Los valores reales del sensor están ocultos un poco más allá, pero combinándolos con los datos de Internet inmediatamente indicaron dónde encontrarlos y especialmente cómo leerlos.
void FlowerCare:: onSensorServiceCharacteristicRead (const QLowEnergyCharacteristic & feature, const QByteArray & value) {qCDebug (dcFlowerCare ()) << "Lectura de característica" << QString:: number (feature.handle (), 16) temp; qint8 skip; secuencia >> saltar; quint32 lux; corriente >> lux; qint8 humedad; corriente >> humedad; qint16 fertilidad; arroyo >> fertilidad; emitir terminado (m_batteryLevel, 1.0 * temp / 10, lux, humedad, fertilidad); }
Al juntar esto, el complemento ya comenzó a producir datos significativos.
Paso 3: Toques finales
Así que básicamente funcionó ahora, sin embargo, todavía quedaba un problema allí. El sensor FlowerCare, a diferencia del SensorTag de Texas Instruments, interrumpiría la conexión Bluetooth después de unos segundos. Sin embargo, teniendo en cuenta el caso de uso, esto no parece ser un problema, ya que es bastante confiable para responder a los intentos de conexión. Dado que normalmente una planta no absorbe un litro de agua en minutos, sino en días, no parece necesario estar conectado todo el tiempo. Además, esto agotaría bastante la batería. Así que decidí agregar un PluginTimer que volvería a conectar el sensor cada 20 minutos y obtendría datos de él. Si, por alguna razón, el sensor no responde al intento de conexión, el código iniciará otro temporizador que intentará reconectarse cada minuto a partir de ese momento hasta que logre obtener los datos. Luego, volvería a buscar datos en el intervalo de 20 minutos. Si el dispositivo no se conecta dos veces seguidas (es decir, después de 20 + 1 minutos), se marcará como fuera de línea en el sistema y se puede alertar al usuario al respecto.
nulo DevicePluginFlowercare:: onPluginTimer () {foreach (FlowerCare * flowerCare, m_list) {if (--m_refreshMinutes [flowerCare] <= 0) {qCDebug (dcFlowerCare ()) << Dirección "Refrescante" (); flowerCare-> refreshData (); } else {qCDebug (dcFlowerCare ()) << "No actualizando" address () << "Siguiente actualización en" << m_refreshMinutes [flowerCare] << "minutos"; } // Si tuvimos 2 o más intentos de conexión fallidos, márquelo como desconectado if (m_refreshMinutes [flowerCare] <-2) {qCDebug (dcFlowerCare ()) << "No se pudo actualizar para" << (m_refreshMinutes [flowerCare] * -1) <setStateValue (flowerCareConnectedStateTypeId, falso); }}}
Con esta estrategia, nymea ahora parecía entregar datos perfectamente confiables de este sensor.
Paso 4: usándolo en un contexto más amplio
Sin embargo, obtener valores del sensor no es tan útil, también podría haber usado la aplicación original para eso. Ahora hagamos algunas cosas inteligentes con él.
Nymea admite el envío de notificaciones push, ya sea a teléfonos con la aplicación nymea: instalada o mediante PushBullet. Entonces, lo más obvio es enviarme algunas notificaciones automáticas cada vez que la humedad del suelo caiga por debajo del 15%. Es bastante fácil configurar eso en la aplicación. Como requisito previo, necesita una cuenta en nymea: cloud o en PushBullet. Para las notificaciones push basadas en nymea: cloud, basta con habilitar nymea: cloud en nymea: core y en nymea: app. Tan pronto como ambos estén conectados, aparecerá automáticamente una notificación. Para que PushBullet agregue algo nuevo en el sistema, encontrará PushBullet en la lista allí. Le pedirá la clave API que obtiene al registrarse con PushBullet. Una vez que tenga una notificación push en nymea, puede crear una regla.
Por supuesto, puede hacer lo que quiera … También puede encender algo de luz para reflejar los valores del sensor, o usar el complemento HTTP commander para publicar los valores del sensor en un servidor en Internet, por ejemplo. No tengo una válvula de agua que se puede controlar digitalmente (todavía) pero, por supuesto, si tiene tal cosa y aún no es compatible con nymea, agregar un complemento para eso sería bastante similar a esto.
Paso 5: Palabras de cierre
El complemento flowercare ya se ha aceptado en sentido ascendente y, si tiene uno de esos, ya está listo para usarse con nymea. Sin embargo, espero que este artículo sea de interés si alguien quiere agregar soporte para otros dispositivos. Debería ser un tutorial sobre cómo crear su propio complemento para nymea.
Si solo desea construir esta configuración en su hogar, todo lo que necesita es el sensor FlowerCare, una Raspberry Pi, la imagen de la comunidad nymea (ahora incluye el complemento de cuidado de flores) y nymea: aplicación que está disponible en las tiendas de aplicaciones. Además, hasta ahora mi Monstera Deliciosa está feliz de nuevo y, como habrás visto en las capturas de pantalla, también me he conseguido un segundo de esos sensores para rastrear la salud de mi limonero. Para eso, me envío una notificación automática cada vez que hace frío afuera para poder pasar el invierno de manera segura.
Recomendado:
Monitor inteligente de plantas para interiores: sepa cuándo su planta necesita riego: 8 pasos (con imágenes)
Monitor inteligente de plantas para interiores: sepa cuándo su planta necesita riego: Hace un par de meses, hice una varilla de control de la humedad del suelo que funciona con baterías y se puede pegar en la tierra de la maceta de su planta de interior para brindarle información útil sobre el suelo. el nivel de humedad y los LED parpadean para indicarle cuándo debe
¿Rescatar un cargador de coche ?: 6 pasos
Rescue a Car Charger?: Este es el cargador de auto para mi iPhone. Los remolinos amarillos se iluminan cuando está funcionando. Eso sucede solo de manera intermitente. Decidí ver qué se podía hacer
Alimentador automático de plantas WiFi con depósito - Configuración de cultivo interior / exterior - Plantas de agua automáticamente con monitoreo remoto: 21 pasos
Alimentador automático de plantas WiFi con depósito - Configuración de cultivo interior / exterior - Riegue las plantas automáticamente con monitoreo remoto: En este tutorial, demostraremos cómo configurar un sistema de alimentador de plantas interior / exterior personalizado que riega las plantas automáticamente y se puede monitorear de forma remota utilizando la plataforma Adosia
Rescatar Windows fuera de la pantalla al instante (Windows y Linux): 4 pasos
Rescatar Windows fuera de la pantalla al instante (Windows y Linux): cuando un programa se mueve fuera de la pantalla, tal vez a un segundo monitor que ya no está conectado, necesita una forma rápida y fácil de moverlo al monitor actual. Esto es lo que hago -NOTA --- He difuminado las imágenes por privacidad
Crear mis propios gráficos para mis datos de IOT en una Raspberry PI: 3 pasos
Crear mis propios gráficos para mis datos de IOT en una Raspberry PI: siga leyendo si desea poder crear sus propios gráficos de IOT utilizando 7 líneas de código. Quería crear gráficos para mostrar datos en un formato gráfico de mis sensores de IOT en una página web. Anteriormente, para esto, había utilizado servicios de terceros (algunos pa