Contenido


Conserve el Agua con Internet of Things, Parte 1

Construya una solución de supervisión en IBM Cloud con IoT Foundation Starter, Node-RED y Cloudant

Comments

El proyecto Poseidon es una iniciativa voluntaria que tiene como objetivo reducir el uso de agua en el mundo. Como primer paso, el proyecto desarrolló material educativo para supervisar el agua de la tierra de plantas domésticas mediante una aplicación que visualiza datos de sensores de una planta para entender cuándo necesita riego. El objetivo es construir una comunidad entusiasta enfocada en encontrar soluciones que reduzcan el uso del agua mediante la aplicación de tecnologías como Internet of Things (IoT), la computación en nube, móvil y la analítica.

En esta serie de tutoriales en tres partes se construirá una solución de riego de plantas económica y descubrirá cómo trabajar en colaboración para mejorarla. La solución está basada en Raspberry Pi y utiliza IBM Cloud para recolectar y visualizar datos de sensores, y publicar actualizaciones en su red social.

Aquí puede ver el dispositivo en uso:

Photo of the plant-monitoring device in operation
Photo of the plant-monitoring device in operation


Y este es un mensaje que la solución publicó en Twitter:

Screenshot of tweet generated by the plant-monitoring system
Screenshot of tweet generated by the plant-monitoring system


La arquitectura de la solución tiene este aspecto:

Diagram of the solution design
Diagram of the solution design


El sistema utiliza:

  • Una placa de extensión Raspberry Pi con GrovePi, un sensor de temperatura/barométrico y un sensor de humedad de la tierra.
  • Un agente de nube IoT. Este servicio gratuito, disponible en Internet, recibe los datos del sensor y los redistribuye a todos los clientes suscritos. Utilizará el protocolo MQTT abierto para el intercambio de los datos del sensor.
  • IBM Cloud como plataforma de nube para ejecutar la aplicación. Utilizará Internet of Things Foundation Starter para almacenar y visualizar datos del sensor para dispositivos de escritorio y móviles. El arrancador IoT utiliza estos servicios de IBM Cloud:
    • Node.js: una plataforma del lado del servidor para ejecutar aplicaciones de JavaScript.
    • Node-RED: un servicio que le permite conectar nodos entre sí (funcionalidad) visualmente en un navegador. Utilizará Node-RED para conectar datos entrantes del sensor a una base de datos para almacenar los datos, y a un nodo tweet que envía los datos a Twitter.
    • Cloudant: una base de datos de nube NoSQL basada en CouchDB.
  • Servicios externos como Twitter para publicar notificaciones cuando su planta necesita agua.

Internet of Things Foundation Starter de IBM proporciona el tiempo de ejecución Node.js y la aplicación Node-RED, y crea una instancia de la base de datos Cloudant NoSQL.

Qué necesita para construir la solución

  • Una cuenta IBM Cloud y una cuenta DevOps Services , ambas vinculadas a su IBM ID. (Utilizará su cuenta de DevOps Services en la Parte 2 y 3.)
  • Estar familiarizado con Linux y Python es útil pero no se requiere.

Hardware requerido

  • Raspberry Pi Modelo B (SKU: 800025001). (El Modelo B+ fue lanzado más tarde y probablemente también funcione).
  • Placa de extensión GrovePi para Raspberry Pi (SKU: 830004001)
  • Grove - Barómetro (alta precisión) (incluye temperatura) (SKU: 811027001)
  • Grove - Sensor de humedad (SKU: SEN92355P)
  • 2 cables con hebilla de 4 clavijas universales Grove (SKU ACC90453O)
  • Tarjeta SD de 4GB

Hardware opcional

  • Fuente de alimentación Raspberry Pi (u otra fuente de alimentación mini USB)
  • Cable HDMI para conectar el Pi a su TV o monitor
  • Cable de red Ethernet
  • Mouse USB y teclado para la configuración (única) de Pi

Ejecutar la aplicaciónObtener el código

Paso 1. Configuración de Raspberry Pi

Raspberry Foundation hace que la instalación de un sistema operativo para Raspberry Pi sea lo más sencilla posible proporcionando el instalador NOOBS (New Out Of The Box).

  1. Configure su Raspberry Pi de modo que esté listo para instalar el sistema operativo:
    1. Conecte Pi con el cable HDMI a un monitor o TV.
    2. Conecte un cable de red Ethernet.
    3. Conecte el mouse y teclado USB.
  2. Configure Pi con el sistema operativo Raspian siguiendo las instrucciones de Getting Started with NOOBS.
  3. Verifique que pueda conectarse e inicie sesión en Pi a través de SSH.
  4. No conecte la placa de extensión GrovePi aún. Siga las instrucciones en Connecting the Raspberry Pi and Grove Sensors de Dexter Industries (fabricante de GrovePi).

El hardware ahora está configurado. Ahora debe instalar el script que envía los datos de los sensores a un servicio de nube central para continuar el procesamiento.

Paso 2. Instalación del script de cliente Poseidon

Utilizará MQTT— un protocolo ligero de mensajería para suscripción/publicación — para enviar datos del sensor a la nube IoT de IBM. Los clientes MQTT están disponibles en diversos lenguajes de programación del proyecto Paho . Utilizará un cliente Python.

  1. Cambie a su directorio local (cd ~) y clone el repositorio PoseidonProject Git:
     git clone https://hub.jazz.net/git/bbhavers/PoseidonProject
  2. Copie los archivos y módulos dependientes:
     cd PoseidonProject/Tutorial1/PoseidonClient cp ~/GrovePi/Software/Python/grove_barometer_lib.py cp ~/GrovePi/Software/Python/grovepi.py
  3. Edite el archivo de configuración config.py (utilizando vi o nano): introduzca el nombre del sensor en el campo clientID y la latitud y longitud en el campo location .
  4. Instale las bibliotecas del cliente MQTT:
     sudo pip install paho-mqtt
  5. Pruebe el código:
     sudo python PoseidonClient.py
  6. Inicie automáticamente PoseidonClient al arrancar:
    1. Copie el archivo de script en el directorio de inicio:
       sudo cp poseidon.sh /etc/init.d
    2. Cambie los permisos:
       sudo chmod 755 /etc/init.d/poseidon.sh
    3. Pruebe el script de inicio:
       sudo /etc/init.d/poseidon.sh start

      Debe ver el mensaje "Starting PoseidonClient".
    4. Pruebe si el script se está ejecutando:
       ps -ef |grep Poseidon

      Debe ver dos entradas.
    5. Pruebe si el script se está registrando:
       tail /home/pi/PoseidonProject/Tutorial1/PoseidonClient/poseidon.log

      El registro contiene todos los datos enviados y se sobrescribe cada vez que se reinicia el cliente.
    6. Pruebe detener el script (lo que detiene todos los procesos de Python en ejecución):
       sudo /etc/init.d/poseidon.sh stop
    7. Pruebe que el script se haya detenido:
       ps -ef |grep Poseidon
    Las entradas que vio en el paso 6d deben haber desaparecido.
  7. Si todo funcionó hasta el momento, active el script para arrancar automáticamente (ignore la advertencia acerca de las etiquetas LSB faltantes):
     sudo update-rc.d poseidon.sh defaults
  8. Pruebe si el script se reinicia en el arranque:
     sudo shutdown -r now

    Después del arranque, verifique con los comandos que ejecutó anteriormente en esta sección.
  9. Conecte el sensor de humedad en la tierra que rodea la planta para iniciar la supervisión.

Su Raspberry Pi ahora está configurado y está enviando datos a un microagente en Internet. Cada cliente MQTT que se suscribe al tema como configurado en config.py puede ver los datos que usted está publicando.

Luego, establecerá un entorno de nube basado en IBM Cloud para capturar estos datos, almacenarlos en una base de datos y publicarlos en Twitter.

Paso 3. Configuración del entorno de IBM Cloud

Ahora creará una aplicación en IBM Cloud que utilice Internet of Things Foundation Starter. El IoT starter proporciona el tiempo de ejecución Node.js y la aplicación Node-RED, y crea una instancia de la base de datos Cloudant NoSQL.

  1. Inicie sesión en IBM Cloud. En el panel de instrumentos, haga clic en el botón CREAR UNA APLICACIÓN . Encuentre y seleccione el Internet of Things Foundation Starter de la sección Boilerplates del catálogo: Screenshot of the IoT Foundation Starter in the catalog
    Screenshot of the IoT Foundation Starter in the catalog
  2. Ingrese el nombre y el nombre de host de la aplicación. Deje todo lo demás con los valores predeterminados y haga clic en CREATE: Screenshot of the UI for creating an IoT Foundation app
    Screenshot of the UI for creating an IoT Foundation app

    La aplicación iniciará automáticamente cuando el aprovisionamiento esté completo.
  3. Haga clic en la ruta RUTAS de la aplicación para examinar el Web site de la aplicación: Screenshot of the initial Node-RED app UI
    Screenshot of the initial Node-RED app UI
  4. Haga clic en Go to your Node-RED flow editor.
  5. En el editor de flujo Node-RED, usted puede ver un diagrama de flujo de IoT predeterminado: Screenshot of the Node-RED flow editor
    Screenshot of the Node-RED flow editor

    En el lado izquierdo se encuentra la lista de nodos disponibles ("conectores" de entrada y salida y funciones para desempeñarse sobre los datos de entrada o para producir una salida). En el lado derecho se encuentran las propiedades del nodo que está seleccionado en la hoja de trabajo.
  6. Seleccione todos los nodos en la hoja (presionando la tecla Shift y seleccionando cada nodo) y presione Delete para eliminarlos de la hoja.

Paso 4. Configuración de IBM Cloud para almacenar datos

En este paso, configurará el entorno de IBM Cloud para recibir datos del sensor y guardarlos en una base de datos Cloudant.

  1. En el editor de flujo Node-RED, arrastre el nodo de entrada mqtt a la hoja de trabajo para crear un nodo que reciba datos del agente MQTT en el cual el cliente de Raspberry Pi está publicando los datos del sensor.
  2. Haga doble clic en el nodo de entrada mqtt en la hoja e ingrese la configuración siguiente:
    • Broker:realtime.ngi.ibm.com (sin ID de cliente y sin ID de usuario y contraseña)
    • ClientID: elija su propio ID, como MyPoseidon23.
    • Topic:/org/dutchcourage/poseidon/client/sensor
    • Name:Receive Sensor Data
    Screenshot of the dialog box for editing the mqtt input node
    Screenshot of the dialog box for editing the mqtt input node
  3. Agregue un nodo debug al flujo y conéctelo con el nodo de entrada Receive Sensor Data . El nodo debug mostrará los mensajes recibidos en la pestaña debug a la derecha del editor:
  4. Implemente el flujo para probarlo. (En la esquina superior derecha del editor, haga clic en Deploy.)
  5. Observe la pestaña depurar en busca de mensajes entrantes: Screenshot of the debug tab
    Screenshot of the debug tab

    Reinicie el cliente Poseidon en su Raspberry Pi para desencadenar el envío de nuevos valores. (Por defecto, envía mensajes cada una hora.) Vea el Paso 2 para obtener detalles sobre cómo reiniciar el cliente.
  6. Después de probar que los datos están entrando correctamente, agréguelos a la base de datos Cloudant añadiendo el nodo de salida cloudant al flujo y conéctelo al nodo Receive Sensor Data .
  7. Haga doble clic en el nodo de salida cloudant para editar sus parámetros:
    • Service: Seleccione su instancia de Cloudant IBM Cloud.
    • Database: poseidonsensors
    • Only store msg.payload object?: Seleccione el cuadro de selección.
    • Name:Save to Cloudant
    Screenshot of the dialog box for editing the cloudant out node
    Screenshot of the dialog box for editing the cloudant out node
  8. Haga clic en Deploy en el editor para activar el flujo y almacenar los datos en la base de datos Cloudant.
  9. Para ver los datos guardados en Cloudant, vuelva a examinar la cuenta de IBM Cloud. En el panel de instrumentos, puede ver la instancia de Cloudant incluida en la sección Services: Screenshot of the LAUNCH button
    Screenshot of the LAUNCH button

    Haga clic en la instancia de Cloudant y luego en LAUNCH. Ahora se encuentra en el panel de instrumentos de Cloudant, donde puede crear nuevas bases de datos, crear tareas de réplica y ver y editar entradas de base de datos.
  10. Haga clic en la base de datos poseidonsensors (creada por el nodo Save to Cloudant ). Para ver los datos reales del sensor, mueva el puntero del mouse sobre el documento y haga clic en Edit doc en la esquina superior derecha del documento: Screenshot of the poseidonsensors database
    Screenshot of the poseidonsensors database

    Ahora puede ver la estructura de datos JSON y el contenido del documento: Screenshot of the JSON contents of the poseidonsensors document
    Screenshot of the JSON contents of the poseidonsensors document

Sus datos ahora están almacenados en la base de datos.

Paso 5. Configuración de IBM Cloud para enviar tweets

Ahora que su instancia de Node-RED está en funcionamiento, puede extender el flujo para publicar los mensajes de MQTT recibidos en Twitter:

  1. Examine el editor de flujo Node-RED.
  2. Haga clic en el botón de menú de la esquina superior derecha del editor de flujo y seleccione Import > Clipboard: Screenshot of importing data into Node-RED from the clipboard
    Screenshot of importing data into Node-RED from the clipboard
  3. Importe el código de origen del flujo Node-RED completo:
    1. En una ventana independiente del navegador, examine el repositorio del código PoseidonProject y seleccione Tutorial1/Nodered/NodeRedFlow.txt.
    2. Copie el contenido de NodeRedFlow.txt en el portapapeles.
    3. Vuelva al editor Node-RED. Pegue el contenido del portapapeles en el recuadro de texto y haga clic en Ok: Screenshot of the pasted data
      Screenshot of the pasted data
    4. Coloque el flujo en algún lugar de la hoja de trabajo.
  4. Conecte los nuevos nodos a su flujo Node-RED existente:
    1. Elimine el flujo importado de los nodos que ya creó (Receive Sensor Data, Save to Cloudant y debug).
    2. Conecte el nodo Receive Sensor Data al nodo (recién importado) JSON to JSOBJECT .
    El flujo Node-RED debe tener este aspecto: Screenshot of the full Node-RED flow
    Screenshot of the full Node-RED flow
  5. Haga doble clic en el nodo Tweet Sensor Values , y haga clic en el ícono del lápiz para autenticar su cuenta de Twitter con Node-RED: Screenshot of the dialog box for authenticating with Node-RED
    Screenshot of the dialog box for authenticating with Node-RED
  6. Haga clic en Deploy para guardar los cambios.
  7. Detenga e inicie el cliente Poseidon en su Raspberry Pi para iniciar el reenvío de datos, y observe su cuenta de Twitter en busca de un mensaje que informe los datos del sensor: Screenshot of sensor-data tweet
    Screenshot of sensor-data tweet

Ahora está enviando sus datos a Twitter.

Conclusión de la Parte 1

En este tutorial, aprendió a establecer un Raspberry Pi con sensores para supervisar la humedad de la tierra, la presión barométrica y la temperatura. Configuró el cliente para enviar datos a través de MQTT al agente de nube IBM IoT. Con IBM Cloud, capturó estos datos, los almacenó en una base de datos Cloudant y publicó los datos en Twitter. Aprendió a crear un flujo end-to-end desde el sensor para compartir datos en las redes sociales y ahora puede comenzar a extender la funcionalidad de la solución— por ejemplo, con aplicaciones móviles y mediante el análisis de datos para pronosticar cuándo la planta necesita agua.

Ahora, proceda a la Parte 2 para descubrir cómo asegurar su instancia Node-RED y autoimplementar cambios en la aplicación. Y luego en la Parte 3, mejorará la solución mediante la construcción de una aplicación de cliente que muestre los datos del sensor en forma de gráfico.


Recursos para Descargar


Temas relacionados


Comentarios

Inicie Sesión o Regístrese para agregar comentarios.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Internet of Things
ArticleID=1007304
ArticleTitle=Conserve el Agua con Internet of Things, Parte 1
publish-date=05292015