Contenido


Crear sensores inteligentes con Business Rules, Watson IoT Platform e Insights para los servicios Weather IBM Cloud

Comments

Con Watson Internet of Things (IoT) Platform en IBM Cloud, sus aplicaciones pueden usar la información de los dispositivos conectados. Por ejemplo, es posible diseñar aplicaciones para verificar la temperatura a partir de los sensores y desencadenar una acción basada en la temperatura. Con la flexible gestión de toma de decisiones del servicio Business Rules de IBM Cloud, es posible transformar decisiones en forma de reglas de negocio que sean externas a sus aplicaciones.

Este tutorial muestra cómo usar el servicio Business Rules para generar alertas basándose en los datos de temperatura recuperados a través del servicio Watson IoT Platform. También muestra lo fácil que es modificar las decisiones acerca de cuándo se generan las alertas, sin tener que introducir cambios de código en la aplicación IoT. También aprenderá cómo comparar la información inmediata del sensor y la temperatura con el servicio Insights for Weather.

Cuando finalice este tutorial, podrá aprovechar las reglas de negocio en una solución IoT con los servicios IBM Cloud. Use el código de muestra como un proyecto inicial para una solución de gestión de energía de una casa inteligente.

Lo que necesita para crear su aplicación

Paso 1. Crear una aplicación de inicio de Watson IoT Platform

Empiece investigando de qué manera la actual aplicación de inicio de IoT Platform utiliza datos del sensor simulados y reglas simples que están definidas en el editor de flujos Node-RED para generar alertas de altas temperaturas.

  1. Cree una aplicación de inicio de IoT Platform siguiendo las instrucciones de Crear aplicaciones con la aplicación de inicio de Internet of Things en Uso. Luego, abra el editor de flujo Node-RED, como se muestra en la siguiente captura de pantalla. Node-RED                     flow editor for the IoT Platform starter                     app
    Node-RED flow editor for the IoT Platform starter app
  2. Siga las instrucciones para configurar el sensor simulado en Node-RED y los siguientes nodos: El nodo IBM Iot App In se conecta al dispositivo simulado, y el nodo datos de dispositivo muestra el contenido del objeto del mensaje proveniente del dispositivo simulado en el panel de depuración.
  3. Despliegue el flujo y vea los mensajes de estado de laTemperatura en el panel de depuración ubicado a la derecha.
  4. Use el simulador de sensor para incrementar el valor de la temperatura y vea el resultado en el nodo datos de dispositivo en el panel de depuración ubicado a la derecha. Observe el elemento carga del mensaje, que contiene un elemento d , que contiene los atributos name, temp, humidity, objectTemp , como se muestra en la siguiente captura de pantalla. El sensor simulado contiene los datos en este formato. Debug pane after sensor simulator temperature                     change
    Debug pane after sensor simulator temperature change
  5. Investigue el nodo umbral de temp para ver las reglas que determinan si la temperatura está dentro de los límites seguros, como se muestra en la siguiente captura de pantalla. Rules for temperature threshold
    Rules for temperature threshold
  6. Use el simulador de sensor para incrementar el valor de la temperatura y vea cómo se modifican los mensajes en el panel de depuración ubicado a la derecha, como se ve en la siguiente captura de pantalla. Para ver de qué manera las reglas generan un mensaje diferente con una alerta de temperatura alta, incremente la temperatura por encima de 40 °C.Debug pane after sensor simulator temperature                     change
    Debug pane after sensor simulator temperature change

El resto del tutorial explica cómo utilizar el servicio Business Rules para incorporar reglas complejas a la aplicación IoT Platform que usted creó, también llamada aplicación IoT. Estas reglas calculan la sensación térmica mediante el uso de los datos de temperatura y humedad del sensor, y generan alertas en función de la sensación térmica y el tipo de sensor (de interior o de exterior).

Paso 2. Crear una instancia del servicio Business Rules

Ahora que ya se familiarizó con la aplicación IoT, puede crear una instancia del servicio Business Rules que la aplicación utiliza para ejecutar reglas de negocio complejas. Estas reglas de negocio no están definidas en el editor de flujo Node-RED de la aplicación IoT. En vez de eso, son diseñadas y ejecutadas con el servicio Business Rules.

  1. Inicie sesión en IBM Cloud y cree un espacio con un nombre como dev.
  2. Cree una instancia del servicio de Business Rules, tal como se describe en la documentación de IBM Cloud Como crear una instancia del servicio Business Rules . En el catálogo de IBM Cloud, bajo Web y Servicios de Aplicaciones, seleccione el servicio Business Rules.
  3. Bajo Añadir Servicio, escriba dev para el espacio y MyApp para el nombre de su aplicación IoT para vincular la instancia del servidor de Business Rules. Haga clic en CREAR. Debe reevaluar la aplicación IoT.
  4. Busque la instancia del servicio Business Rules en la pestaña Configuración de Conexión, como se muestra en la siguiente captura de pantalla. Es posible ver el ID de la instancia de la instancia del servicio (empieza con brsv2-) en la URL. También es posible ver el nombre de usuario y la contraseña para utilizar la instancia del servicio, que usted usó en el Paso 4 para desplegar las reglas en la instancia del servicio y en el Paso 6 para configurar el flujo Node-RED de la aplicación IoT para ejecutar las reglas con la instancia de servicio. Connection Settings of the Business Rules service                     instance
    Connection Settings of the Business Rules service instance

Paso 3. Definir las reglas de negocio con Rule Designer

Ahora usted necesita definir las reglas de negocio que ejecuta su aplicación IoT mediante el uso de la instancia del servicio. Las reglas se diseñan en Rule Designer basado en Eclipse.

  1. Instale Rule Designer para el servicio Business Rules en su IDE de Eclipse Juno 4.2.2, tal como se describe en la documentación de Desarrollo para el servicio Business Rules.
  2. Descargue los proyectos sensor-xom y sensor-rules del enlace de la documentación. Impórtelos a su área de trabajo de Eclipse, y luego cambie a la perspectiva de Reglas para abrir el Explorador de Reglas.
  3. Explore el modelo de ejecución de objetos (XOM), que es el modelo de tiempo de ejecución contra el que se ejecutan las reglas. El XOM está definido en el proyecto Java sensor-xom , pero también puede estar basado en XML. Explore la clase Sensor , que representa la información que se recibe de un sensor y se define con los siguientes atributos. Observe que los cuatro primeros atributos de la siguiente lista corresponden a los datos de carga del mensaje del Paso 1: Crear una aplicación de arranque de Watson IoT Platform.

    name (Nombre del sensor)

    temp (Temperatura del sensor en grados centígrados)

    humidity (Porcentaje de humedad, varía entre 0 y 100)

    objectTemp (Temperatura del objeto en grados centígrados)

    type (Tipo de sensor, por ejemplo "de interior" o "de exterior")

    feelsLikeTemp (La sensación térmica en grados centígrados, que se calcula a partir de temp y humidity)

    warning (Alerta de temperatura, que se genera en base a feelsLikeTemp)

    También contiene un método computeFeelsLikeTemperature() que calcula la sensación térmica en base a la humedad y a la temperatura.

  4. Familiarícese con el proyectosensor-rules y con la entrada de los sensores del modelo de objeto de negocios (BOM), que se crea desde el XOM de Rule Designer. Para que usted utilice la entrada del BOM en este tutorial, ya está creada en el código de muestra. Contiene una clase Sensor que corresponde con la clase Sensor que está definida en Java, que se muestra en la siguiente captura de pantalla.Connection Settings of the Business Rules service                     instance
    Connection Settings of the Business Rules service instance
  5. Analice la carpeta reglas del proyecto de reglas sensor-rules. Contiene la tabla de decisión generateWarning y en el principal flujo de reglas, como se muestra en la siguiente captura de pantalla. La tabla de decisión generateWarning genera la alerta de temperatura, que depende del tipo de sensor y del valor de la sensación térmica.Generate warnings based on the feels like                     temperature
    Generate warnings based on the feels like temperature

    La acción inicial de mainRuleflow calcula la "sensación" térmica, a partir de la temperatura y de la humedad especificada en los datos de entrada, como se ve en la siguiente captura de pantalla.

    Ruleflow with the initial actions
    Ruleflow with the initial actions

    El flujo de reglas después ejecuta la tabla de decisión generateWarning del paquete sensor . Cuando se ejecuta el conjunto de reglas, el flujo de reglas ejecuta las reglas en el orden especificado.

  6. Defina el contrato entre la lógica de negocio y su aplicación de cliente con los parámetros del conjunto de reglas. Es posible ver los parámetros definidos para el conjunto de reglas si hace clic en el proyecto sensor-rules y selecciona Propiedades. Al nombre del parámetro de entrada/salida se le llamasensor y tiene un tipo de Sensor , como muestra la siguiente captura de pantalla. Se usa el nombre de este parámetro en el Paso 6: Añadir nuevos nodos al flujo Node-RED cuando se configura el flujo Node-RED para proporcionar los datos de entrada a las reglas de la aplicación IoT.Ruleset parameter
    Ruleset parameter

Paso 4. Desplegar sus reglas y probar la carga útil

Para ejecutar las reglas de negocio definidas recientemente desde la instancia del servicio Business Rules, debe desplegarlas en la instancia que creó en el Paso 2: Crear una instancia del servicio de Business Rules. Las reglas se despliegan en archivos llamados RuleApps, del Rule Designer al Servidor de Ejecución de Reglas que está asociado con la instancia del servicio. Complete los siguientes pasos.

  1. En Rule Designer, cree un proyecto de configuración del Servidor de Ejecución de Reglas siguiendo los pasos de Cómo rear una configuración del Servidor de Ejecución de Reglas. Para la URL, el Inicio de Sesión y la Contraseña de la ventana de Configuración del Servidor, recupere la información de la pestaña Configuración de Conexión de la instancia del servicio Business Rules que usted creó en el Paso 2 y haga clic en Probar Conexión.
  2. En Rule Designer, cree un Proyecto de RuleApp llamado SensorRuleApp, y añada el proyecto de reglas sensor-rules . En el Mapa del Proyecto de Reglas, haga clic en el proyecto Crear RuleApp. (Siga el Paso 3: Crear RuleApp en las reglas de creación y cómo crear un RuleApp de la documentación de IBM Cloud.)
  3. Para desplegar el RuleApp, haga clic derecho en el proyecto SensorRuleApp y seleccione RuleApp > Desplegar. Luego, seleccione el tipo de despliegue Incrementar la versión principal del RuleApp , como se describe en la documentación de IBM Cloud Desplegar RuleApp en la instancia del servicio de Business Rules. En la ventana Desplegar un RuleApp para el Servidor de Ejecución de Reglas, seleccione la configuración del Servidor de Ejecución de Reglas para la instancia de su servicio Business Rules y asegúrese de que Desplegar el XOM de los proyectos y archivos de reglas contenidos en el RuleApp esté seleccionado, como muestra la siguiente captura de pantalla. Haga clic en Finalizar.
  4. Vaya a la instancia del servicio Business Rules del panel de instrumentos de IBM Cloud y seleccione la pestaña Servicios de Decisión para ver los RuleApps y los conjuntos de reglas que desplegó. Si fuera necesario haga clic en Actualizar , tal como se muestra en la siguiente captura de pantalla. Decision Services tab of Business Rules                 service
    Decision Services tab of Business Rules service
  5. Haga clic en el nombre del conjunto de reglas (sensorrules 1.0 en este ejemplo) para abrir la página de Detalles para el conjunto de reglas. Haga clic en la pestaña JSON y luego haga clic en el botón WADL (como se muestra en la esquina inferior derecha de la siguiente captura de pantalla), para garantizar que el lenguaje de la descripción del conjunto de reglas se genere correctamente. Si ve errores, revise el Paso 3. Definir reglas de negocio con el Rule Designer para configurar el XOM correctamente.

    Tome nota de la URL para el conjunto de reglas, que especifica las versiones del RuleApp y del conjunto de reglas establecidas cuando desplegó el RuleApp, basándose en el tipo de despliegue que seleccionó. Usted usa esta URL en el Paso 6: Añadir nuevos nodos al flujo Node-RED cuando configura el flujo Node-RED de la aplicación IoT para la ejecución del conjunto de reglas.

    Ruleset Details page of Business Rules                     service
    Ruleset Details page of Business Rules service
  6. Desde la consola de IBM Cloud pruebe la carga del conjunto de reglas realizando las siguientes acciones.
    • Desde la página de detalles del conjunto de reglas, haga clic en Volver a Servicios de Decisión para ir a la página Servicios de Decisión. Para probar el conjunto de reglas, haga clic en la flecha de al lado. La página Pruebas se carga con los paneles Solicitud de la Decisión y Respuesta de la Decisión. El panel Solicitud de la Decisión se completa con una carga de muestra, y el panel Respuesta de la Decisión está vacío.
    • Después de generar la carga JSON de muestra, complétela con datos de prueba, como se muestra en la siguiente captura de pantalla, y haga clic en Ejecutar Prueba. Se ejecuta el conjunto de reglas con los datos de prueba y la respuesta de la ejecución del conjunto de reglas se muestra debajo de la Respuesta de la Decisión. La respuesta contiene los valores de "sensación" térmica y una alerta que se calcula por las reglas que se ejecutan. Para obtener más detalles, vea la documentación de IBM Cloud Cómo probar un conjunto de reglas .Testing the Business Rules service payload
      Testing the Business Rules service payload

Paso 5. Entender el nuevo flujo Node-RED

Ahora usted extiende el flujo Node-RED de la aplicación IoT para ejecutar las reglas que se despliegan en la instancia del servicio Business Rules. Estas reglas calculan la sensación térmica y generan las alertas necesarias.

En el panel de instrumentos de IBM Cloud, vaya a su aplicación IoT y abra el editor de flujos de Node-RED. La siguiente captura de pantalla muestra la apariencia del flujo completo.

Node-RED flow with Business rules                 invocation
Node-RED flow with Business rules invocation

Los nodos ¿cambiaron los datos? y datos cambiados aseguran que las reglas solo se ejecuten si la temperatura del sensor o la humedad se modifican en un determinado rango, no en cada intervalo en que se reciben datos del sensor. El nodo crear entrada de reglas convierte la carga del mensaje al formato esperado por las reglas, y el nodo entrada de reglas lo muestra. El nodo Reglas del sensor inicia el conjunto de reglas que se despliega en la instancia del servicio de Business Rules, y el nodo salida de reglas muestra el resultado de la ejecución de las reglas. Los nodos obtener alerta, nueva alerta y mostrar alerta recuperan y muestran la alerta que las reglas generan cuando los datos cambian.

Paso 6. Añadir nuevos nodos al flujo de Node-RED

Añada nuevos nodos al flujo Node-RED de la aplicación IoT.

Como acceso directo, copie a su portapapeles el siguiente flujo JSON y luego impórtelo a Node-RED, haga clic en Importar > Portapapeles (o Ctrl-I).

[{"id":"1f968581.e0697a","type":"http request","z":"fb2728c1.04d8d8","name":"Sensor rules","method":"POST","ret":"obj","url":"ruleset_url","x":654.5555801391602,"y":405.00000762939453,"wires":[["3afab48f.c5054c","e07eb510.1f8148"]]},{"id":"3afab48f.c5054c","type":"debug","z":"fb2728c1.04d8d8","name":"rules output","active":true,"console":"false","complete":"payload.sensor","x":830.5283584594727,"y":360.50000762939453,"wires":[]},{"id":"e07eb510.1f8148","type":"function","z":"fb2728c1.04d8d8","name":"get warning","func":"context.global.set(\"sensorFeelsLikeTemp\",msg.payload.sensor.feelsLikeTemp);\ncontext.global.set(\"sensorWarning\",msg.payload.sensor.warning);\n\nmsg.payload = msg.payload.sensor.warning;\nreturn msg;\n","outputs":1,"noerr":0,"x":825.5279312133789,"y":403.9722366333008,"wires":[["c55fc999.8f0318"]]},{"id":"6be8839.f94177c","type":"debug","z":"fb2728c1.04d8d8","name":"show warning","active":true,"console":"false","complete":"payload","x":1213.363624572754,"y":403.0833206176758,"wires":[]},{"id":"71fc0d5e.8bf2d4","type":"function","z":"fb2728c1.04d8d8","name":"create rules input","func":"msg.payload.sensor = msg.payload.d;\nmsg.payload.sensor.type=\"outdoor\";\nmsg.payload.sensor.warning=\"\";\ndelete msg.payload.d;\ndelete msg.payload.dataChanged;\nreturn msg;","outputs":1,"noerr":0,"x":449.74060821533203,"y":404.12271881103516,"wires":[["1f968581.e0697a","f1266aa4.b81db8"]]},{"id":"2f97466f.dc436a","type":"function","z":"fb2728c1.04d8d8","name":"data changed?","func":"var dataChanged = false;\nif ((msg.payload.d.temp >= context.global.get(\"currentTemp\") + 2) \n    ||(msg.payload.d.temp <= context.global.get(\"currentTemp\") - 2)){\n    dataChanged = true;\n} else if ((msg.payload.d.humidity >= context.global.get(\"currentHumidity\") + 5) \n    ||(msg.payload.d.humidity <= context.global.get(\"currentHumidity\") - 5)){\n    dataChanged = true;\n}\nif (dataChanged){\n    context.global.set(\"currentTemp\",msg.payload.d.temp);\n    context.global.set(\"currentHumidity\",msg.payload.d.humidity);\n    msg.payload.dataChanged = \"true\";\n} else {\n    msg.payload.dataChanged = \"false\";\n}\nmsg.headers = { \"Content-type\" : \"application/json\"};\nreturn msg;","outputs":1,"noerr":0,"x":449.5148162841797,"y":311.5407180786133,"wires":[["a7d743f4.3e8fa"]]},{"id":"f1266aa4.b81db8","type":"debug","z":"fb2728c1.04d8d8","name":"rules input","active":true,"console":"false","complete":"payload.sensor","x":651.3995132446289,"y":361.2501907348633,"wires":[]},{"id":"a7d743f4.3e8fa","type":"switch","z":"fb2728c1.04d8d8","name":"data changed","property":"payload.dataChanged","propertyType":"msg","rules":[{"t":"eq","v":"true","vt":"str"}],"checkall":"true","outputs":1,"x":448.17554473876953,"y":358.5407485961914,"wires":[["71fc0d5e.8bf2d4"]]},{"id":"c55fc999.8f0318","type":"rbe","z":"fb2728c1.04d8d8","name":"new warning","func":"rbe","gap":"","start":"","x":995.4109878540039,"y":403.5502395629883,"wires":[["6be8839.f94177c","86eba0fb.3365"]]}]

Conecte el resultado de la Aplicación IBM IoT a la entrada ¿cambiaron los datos? . Haga doble clic en el nodo Reglas del sensor , y reemplace ruleset_url con la URL de la página Detalles del conjunto de reglas que desplegó en la instancia del servicio Business Rules en el Paso 4. Seleccione Usar autentificación básica y especifique el nombre de usuario y la contraseña con la información de la pestaña Configuración de la Conexión del Paso 2. La ventana del nodo de la solicitud Edit http para su nodo Reglas del sensor debería parecerse al ejemplo de la siguiente captura de pantalla:

Sensor rules node
Sensor rules node

Opcionalmente, es posible crear nodos con los siguientes pasos:

  1. En el editor de flujo Node-RED, añada un nodo de función (enumerado bajo los nodos de filtro de función del panel de la izquierda) llamado ¿cambiaron los datos?. Añada el siguiente código para actualizar los valores de temperatura y humedad actuales en el contexto global de Node-RED, si se modificaron en un determinado rango, y defina msg.payload.dataChanged como verdadero.
    	var dataChanged = false;
    if ((msg.payload.d.temp >= context.global.get("currentTemp") + 2) 
     ||(msg.payload.d.temp <= context.global.get("currentTemp") - 2)){
     dataChanged = true;
    } else if ((msg.payload.d.humidity >= context.global.get("currentHumidity") + 5) 
     ||(msg.payload.d.humidity <= context.global.get("currentHumidity") - 5)){
     dataChanged = true;
    }
    if (dataChanged){
     context.global.set("currentTemp",msg.payload.d.temp);
     context.global.set("currentHumidity",msg.payload.d.humidity);
     msg.payload.dataChanged = "true";
    } else {
     msg.payload.dataChanged = "false";
    }
    msg.headers = { "Content-type" : "application/json"};
    return msg;

    Todos los nodos del flujo pueden acceder a los valores guardados en el contexto global. También ajuste las cabeceras del mensaje para especificar que los datos tienen el formato JSON.

    Conecte la salida de IBM IoT App In a la entrada ¿cambiaron los datos? .

  2. Después, añada un nodo de cambio (enumerado bajo los nodos del filtro de función del panel de la izquierda) llamado datos cambiados, para verificar si msg.payload.dataChanged es verdadero. Configúrelo como se muestra en la siguiente captura de pantalla. Conecte la salida de ¿cambiaron los datos? a la entrada de datos cambiados . Data changed node
    Data changed node
  3. Añada un nodo de función llamado crear entrada de reglas. Esta función inicializa el parámetro de entrada del conjunto de reglas sensor que usted creó en el Paso 3: Definir reglas de negocio con el Rule Designer con los datos recibidos del sensor. Use el siguiente código para inicializar el elemento de carga del sensor en el elemento de carga de d . También es posible inicializar el atributo sensor.type para "de exterior", y el atributo sensor.warning para una cadena de caracteres vacía.
    	msg.payload.sensor = msg.payload.d;
    msg.payload.sensor.type="outdoor";
    msg.payload.sensor.warning="";
    delete msg.payload.d;
    delete msg.payload.dataChanged;
    return msg;

    Para ejecutar las reglas solamente si el sensor de temperatura o humedad se modifican en un determinado rango, conecte la salida de datos cambiados a la entrada crear entrada de reglas .

  4. Añada un nodo de depuración (enumerado bajo los nodos del filtro de salida del panel de la izquierda), llamado entrada de reglas. Defina la salida como msg.payload.sensor para imprimir los valores de los datos de las reglas de entrada, como se muestra en la siguiente captura de pantalla. Conecte la salida de crear entrada de reglas a la entrada de entrada de reglas , tal como se muestra en la siguiente captura de pantalla. Rules input debug node
    Rules input debug node
  5. Añada un nodo de solicitud http (enumerado bajo los nodos del filtro de función del panel de la izquierda), llamado Reglas del sensor. Use este nodo para ejecutar las reglas desplegadas en la instancia del servicio Business Rules como un servicio web que utiliza la API de REST. Recupere el valor de la URL desde la página Detalles del conjunto de reglas que usted desplegó en la instancia del servicio Business Rules en el Paso 4: Desplegar sus reglas y probar la carga útil y el nombre de usuario y la contraseña de la pestaña Ajustes de la Conexión del Paso 2: Crear una instancia del servicio de Business Rules. Conecte la salida del nodo crear entrada de reglas a la entrada del nodo Reglas del sensor .
  6. Añada un nodo de depuración llamado salida de reglas. Establezca la salida a msg.payload.sensor para imprimir los valores de los datos del sensor después de los cálculos de las reglas. Conecte la salida del nodo Reglas del sensor a la entrada del nodo salida de reglas .
  7. Añada un nodo de función llamado obtener alerta. Para su uso futuro, utilice el siguiente código para guardar la sensación térmica y la alerta generada por las reglas para el contexto global. Devuelva la alerta como carga del mensaje. Conecte la salida de Reglas del sensor a la entrada de obtener alerta.
    	context.global.set("sensorFeelsLikeTemp",msg.payload.sensor.feelsLikeTemp);
    context.global.set("sensorWarning",msg.payload.sensor.warning);
    msg.payload = msg.payload.sensor.warning;
    return msg;
  8. Añada un nodo rbe (enumerado bajo los nodos del filtro de función del panel de la izquierda), llamado nueva alerta. Para el Modo, seleccione bloquear a no ser que el valor cambie. Conecte la salida de obtener alerta a la entrada de nueva alerta .
  9. Añada un nodo depuración llamado mostrar alerta. Establezca la salida a msg.payload para imprimir la alerta. Conecte la salida de nueva alerta a la entrada de mostrar alerta .

Paso 7. Desplegar y probar el nuevo flujo

Asegúrese de que los nuevos nodos estén conectados como se muestra en el Paso 5. Entender el flujo nuevo Node-RED. Despliegue el flujo nuevo y cambie la temperatura del sensor por al menos 2 grados. Usted ve que la salida para entrada de reglas y el nodo salida de reglas se muestran en el panel de depuración, lo que significa que las reglas se lanzaron después del cambio de 2 grados en la temperatura del sensor.

A continuación, cambie la humedad del sensor para ver cómo el nodo salida de reglas cambia en el panel de depuración. Además, observe las alertas que se muestran en la salida de mostrar alerta , por ejemplo "¡Por debajo del punto de congelación!", si la sensación térmica cae por debajo de la congelación.

La siguiente captura de pantalla muestra el nodo salida de reglas después de que el sensor de temperatura se cambió a 27 °C, 34 °C y 20 °C, con una humedad del 78 %. Observe que la sensación térmica se calcula mediante las reglas y que la alerta generada se basa en la sensación térmica y el tipo de sensor.

Rule output data for varying sensor                     temperatures
Rule output data for varying sensor temperatures

Ahora es posible usar los datos de salida de las reglas. Por ejemplo, para dispositivos móviles, es posible crear una alerta de aviso en IBM Cloud con el servicio Notificaciones Push de IBM. También es posible usar el servicio Watson Text to Speech para convertir a voz el texto de alerta.

Paso 8. Modificar las reglas de negocios

Ahora modificará las reglas de negocio y probará si la aplicación IoT ejecuta las reglas modificadas.

  1. En Rule Designer, modifique las reglas de su proyecto sensor-rules . En la tabla de decisión generateWarning cambie el valor 35 a 30 de la fila resaltada en la siguiente captura de pantalla, para que la alerta Temperaturas aumentando, limite el tiempo en el exterior durante la luz del día se genere para sensaciones térmicas mayores o iguales a 30 °C en vez de para 35 °C. Guarde los cambios.Modified generateWarning decision
    Modified generateWarning decision
  2. Despliegue SensorRuleApp en la instancia del servicio Business Rules. En la ventana Desplegar un RuleApp en Servidor de Ejecución de Reglas, seleccione el tipo de despliegue de la versión Reemplazar RuleApp .
  3. Cambie la temperatura en el simulador de sensores.

    Para una sensación térmica entre 30 °C y 35 °C, puede ver en el panel de depuración que la alerta se ha actualizado a 'Temperaturas aumentando, limite el tiempo en el exterior durante la luz del día'.

    Para que las nuevas reglas surtan efecto, no necesita cambiar la aplicación IoT, ya que usted seleccionó para el RuleApp el tipo de despliegue Reemplazar la versión de RuleApp .

    Si para el tipo de despliegue de RuleApp usted selecciona Incrementar la versión principal de RuleApp o Incrementar la versión menor de RuleApp , modifique la URL en el nodo Reglas del sensor que añadió en el Paso 6: Añadir nuevos nodos al flujo Node-RED para apuntar a la versión del conjunto de reglas más reciente. Despliegue el cambio más reciente en el editor Node-RED para asegurarse de que la nueva versión de las reglas surta efecto.

  4. En el flujo Node-RED, en el nodo crear entrada de reglas , defina el valor msg.payload.sensor.type como "de interior", y vea cómo el resultado y la alerta de la regla cambian a medida que se modifican la temperatura y la humedad el sensor de un sensor de interior. Para incorporar reglas basadas en la ubicación de la casa en la que se encuentran los sensores de interior, es posible añadir filas como "living" y "dormitorio" a la tabla de decisión generateWarning para tipos de sensores de interior específicos.

En adelante, es posible usar este proyecto de inicio de reglas y extender el XOM, el BOM y las reglas para generar alertas basadas en la hora del día (por ejemplo durante las horas de luz y por la noche). Puede considerar diferenciar las horas de la luz del día basándose en los días de semana y en los fines de semana. También, puede establecer más condiciones para las diferentes estaciones, como se muestra en el siguiente ejemplo de captura de pantalla (no forma parte del código de muestra).

Additional conditions in generateWarning decision                     table
Additional conditions in generateWarning decision table

Paso 9. Comparar la sensación térmica desde los datos del sensor con Insights for Weather

es posible utilizar la sensación térmica a partir del servicio Insights for Weather para comparar la sensación térmica de los datos del sensor con las condiciones climáticas en tiempo real (si cambió la alerta generada por las reglas). Si no tiene un sensor de exterior, puede usar la sensación térmica de Insights para compararla con los datos del sensor del interior y tomar decisiones como abrir las ventanas para enfriar una habitación en verano, en vez de usar aire acondicionado.

Añada el servicio Insights for Weather a su aplicación IoT siguiendo las instrucciones de la sección del servicio Añadir Insights for Weather Cómo añadir a su aplicación el Insights for Weather de la documentación de IBM Cloud. Reinicie la aplicación IoT. Vaya a la instancia del servicio Insights for Weather para ver la URL y las credenciales del servicio, como muestra la siguiente captura de pantalla.

Insights for Weather Service credentials
Insights for Weather Service credentials

Vaya al editor de flujos de Node-RED para la aplicación IoT. Añada nodos al flujo que utilicen el servicio Insights for Weather para obtener la actual sensación térmica, y compararla con la sensación térmica del sensor (calculada por el servicio Business Rules). Después, muestre el resultado de la comparación. La siguiente captura de pantalla muestra los nodos nuevos.

Flow to compare with Insights feels like                     temperature
Flow to compare with Insights feels like temperature

Como acceso directo, copie a su portapapeles el siguiente flujo JSON y luego haga clic en Importar > Portapapeles (o presione Ctrl-I) para importarlo a Node-RED.

[{"id":"86eba0fb.3365","type":"http request","z":"fb2728c1.04d8d8","name":"Insights weather","method":"GET","ret":"obj","url":"insights_url","x":658.0973892211914,"y":466.5407180786133,"wires": [["22615c13.055cb4"]]},{"id":"22615c13.055cb4","type":"switch","z":"fb2728c1.04d8d8","name":"compare 'Feels like'","property":"payload.observation.metric.feels_like","propertyType":"msg","rules":[{"t":"lt","v":"sensorFeelsLikeTemp","vt":"global"},{"t":"gte","v":"sensorFeelsLikeTemp","vt":"global"}],"checkall":"true","outputs":2,"x":882.1528091430664,"y":465.7073440551758,"wires":[["1520303b.8b7e1"],["155a17fd.51c268"]]},{"id":"1520303b.8b7e1","type":"function","z":"fb2728c1.04d8d8","name":"sensor warmer","func":"msg.payload=\"The sensor 'Feels like' temperature \" + context.global.get(\"sensorFeelsLikeTemp\") + \" is warmer than the Insights 'Feels like' temperature \" + msg.payload.observation.metric.feels_like;\nreturn msg;","outputs":1,"noerr":0,"x":1079.375099182129,"y":443.23511505126953,"wires":[["1cf07b90.02a7d4"]]},{"id":"155a17fd.51c268","type":"function","z":"fb2728c1.04d8d8","name":"sensor cooler","func":"msg.payload=\"The sensor 'Feels like' temperature \" + context.global.get(\"sensorFeelsLikeTemp\") + \" is cooler than the Insights 'Feels like' temperature \" + msg.payload.observation.metric.feels_like;\nreturn msg; \n","outputs":1,"noerr":0,"x":1077.625099182129,"y":491.48511505126953,"wires":[["1cf07b90.02a7d4"]]},{"id":"1cf07b90.02a7d4","type":"debug","z":"fb2728c1.04d8d8","name":"'Feels like' status","active":true,"console":"false","complete":"payload","x":1279.2741928100586,"y":465.5407772064209,"wires":[]}]

Conecte la salida de nueva alerta a la entrada de clima de Insights . Haga doble clic en el nodo clima de Insights y reemplace insights_url por url/api/weather/v2/observations/current?units=m&geocode=latitude%2Clongitude&language=en-US. Recupere la url de las credenciales del servicio Insights for Weather. Reemplace latitude y longitude por los valores de la actual ubicación geográfica de su sensor, como muestra la siguiente captura de pantalla.

Insights weather node
Insights weather node

de maneira opcional, es posible crear los nodos adicionales con los siguientes pasos:

  1. Vaya al editor de flujos de Node-RED para la aplicación IoT y añada un nodo solicitud http (enumerado bajo los nodos del filtro de función del panel de la izquierda), llamado clima de Insights. Para obtener información del clima actual, utilice este nodo para ejecutar el servicio Insights for Weather. Defina los valores mostrados en la captura de pantalla anterior.
    • Defina el valor de la URL url/api/weather/v2/observations/current?units=m&geocode=latitude%2Clongitude&language=en-US. Recupere el url de las credenciales del servicio Insights for Weather. Reemplace latitude y longitude con los valores de la actual ubicación geográfica de su sensor.
    • Lea la documentación de IBM Cloud Obtener las condiciones actuales para saber cómo usar el servicio Insights for Weather para obtener el clima actual y para saber cómo aprender el formato de los datos de la respuesta. La carga de la respuesta tiene el atributo observation.metric.feels_like , que contiene el valor para la actual sensación térmica.
  2. Conecte la salida de nueva alerta a la entrada de clima de Insights .
  3. Añada un nodo de cambio (enumerado bajo los nodos del filtro de función del panel de la izquierda), llamado compare la Sensación, para comparar la sensación térmica de Insights con la sensación térmica del sensor en el contexto global. Configúrelo como se muestra en la siguiente captura de pantalla. Si la sensación térmica de Insights es menor que la sensación térmica del sensor, envíe el mensaje a la primera salida. De lo contrário, envíe el mensaje a la segunda salida. Conecte la salida de clima de Insights a la entrada de compare la Sensación . Compare feels like node
    Compare feels like node
  4. Añada dos nodos de función , llamados calentador del sensor y enfriador del sensor.
    • Añada el siguiente código al calentador del sensor para devolver el mensaje correcto.

      	msg.payload="The sensor 'Feels like' temperature " + context.global.get("sensorFeelsLikeTemp") + " is warmer than the Insights 'Feels like' temperature " + msg.payload.observation.metric.feels_like;
      return msg;
    • Añada el siguiente código al enfriador del sensor para devolver el mensaje apropiado.

      	msg.payload="The sensor 'Feels like' temperature " + context.global.get("sensorFeelsLikeTemp") + " is cooler than the Insights 'Feels like' temperature " + msg.payload.observation.metric.feels_like;
      return msg;

      Conecte la primera salida de compare la Sensación a la entrada de calentador del sensor . Conecte la segunda salida de compare la Sensación a la entrada de enfriador del sensor .

  5. Añada un nodo de depuración llamado estado de la Sensación. Para imprimir el resultado de la comparación de la sensación térmica, defina la salida como msg.payload. Conecte las salidas de calentador del sensor y enfriador del sensor a la entrada de estado de la Sensación .
  6. Despliegue el flujo actualizado y cambie la temperatura o la humedad del sensor. El panel de depuración muestra la comparación de las sensaciones térmicas del sensor y de Insights, por ejemplo: la sensación térmica del sensor 30 es más fría que la sensación térmica de Insights 35.

Finalización

En este tutorial, usted aprendió cómo usar el servicio Business Rules en IBM Cloud para incorporar reglas complejas a una aplicación Internet of Things. Utilizó reglas de negocio para introducir cambios de decisión sin la necesidad de modificar la aplicación Internet of Things.

Utilice lo que aprendió en este tutorial para que pueda pasar menos tiempo recodificando y probando su aplicación. En vez de eso, se puede cambiar y probar la lógica en el servicio Business Rules. Este enfoque permite una mayor agilidad en la toma de decisiones.

También aprendió cómo usar el servicio Insights for Weather en una aplicación de Internet of Things para incorporar información del clima en tiempo real. La muestra que usted creó se puede utilizar como un proyecto de inicio para un sistema de gestión inteligente de la energía. Por ejemplo, considere un sistema que controle el calentamiento y enfriamiento del interior dependiendo de las temperaturas internas y externas, la hora del día y los cambios estacionales. Usted puede incorporar y modificar estas decisiones sin modificar repetidas veces el flujo Node-RED de la aplicación IoT.

Agradecimientos

El autor quiere agradecer a Alain Robert, Valerie Lampkin y Alex Melamed por haber revisado este tutorial.


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=1052414
ArticleTitle=Crear sensores inteligentes con Business Rules, Watson IoT Platform e Insights para los servicios Weather IBM Cloud
publish-date=05312016