Contenido


Implementación de blockchain para aplicaciones de IoT cognitivas, Parte 2

Utilice datos de sensores de vehículos para ejecutar transacciones inteligentes en Blockchain

Integre IBM Watson IoT Platform con los servicios de IBM Blockchain para desarrollar un caso de uso de ejemplo

Comments

Contenido de la serie:

Este contenido es la parte # de # de la serie: Implementación de blockchain para aplicaciones de IoT cognitivas, Parte 2

Manténgase en contacto por contenidos adicionales de esta serie.

Este contenido es parte de la serie:Implementación de blockchain para aplicaciones de IoT cognitivas, Parte 2

Manténgase en contacto por contenidos adicionales de esta serie.

En la Parte 1 de esta serie de dos partes se debatió el uso de blockchain en soluciones de IoT y exploró qué es lo que diferentes industrias están haciendo para aprovechar esas dos tecnologías con la finalidad de construir soluciones integrales automáticas y seguras. En la parte 2 le mostraremos cómo utilizar la plataforma IBM Watson IoT y el servicio IBM Blockchain para construir un caso de uso de ejemplo.

Detalles del caso de uso

Este escenario se enfoca principalmente en los datos del vehículo, como los mensajes de Vehículo a Vehículo (V2V), los mensajes de Vehículo a Infraestructura (V2I) y los datos de comprobación técnica de a bordo del vehículo. Por lo tanto, las infraestructuras críticas incluyen la fecha de registro, latitud, longitud, elevación, velocidad, vector de dirección y aceleración del vehículo conectado y de los vehículos próximos. Aunque no estén incluidos en esta demo, los datos adicionales internos del vehículo gestionado, como los niveles de combustible y de aceite, además de otros datos de apoyo (información del clima, condiciones de la carretera, normativas de tráfico específicas a la ubicación), se pueden aprovechar para ampliar aún más el caso de uso.

Ha sido relativamente fácil construir una aplicación cognitiva de IoT que se integre con una instancia del servicio de IBM Blockchain.

La tabla 1 describe los participantes de nuestro escenario.

Tabla 1. Participantes principales
ParticipanteDescripción
VehículoLos sensores de dentro del carro y los sensores V2V/V2I envían todos los datos relacionados que se requieren para ejecutar las transacciones en el blockchain.
Autoridad gubernamentalNormalmente, la autoridad gubernamental supervisa los patrones de conducción (basándose en zonas específicas) y establece las puntuaciones de los conductores. Podría imponer multas basándose en esos patrones de conducción (como la velocidad).
Conductor o propietarioVistas de las puntuaciones del conductor.
AseguradoraLee las puntuaciones del conductor y actualiza las reglas del chaincode para ajustar los valores relativos al seguro (como la franquicia del seguro).

La aplicación demo incluye una vista del libro contable que almacena todas las interacciones que tienen los participantes anteriores con los vehículos gestionados (activos). La autoridad Gubernamental y la Aseguradora pueden utilizar la vista del libro contable para revisar y puntuar el comportamiento del conductor de un vehículo específico y de los vehículos próximos. Aunque no se ha incluido en esta aplicación demo, también se puede extender para permitir que los proveedores de servicios del carro determinen el rendimiento y el estado del vehículo en la carretera y que hagan una reserva de mantenimiento basándose en las reglas que se establecen en blockchain.

De este modo, todos los participantes pueden reaccionar basándose en los datos recibidos y desencadenar acciones en los atributos del libro contable que poseen. Algunos escenarios posibles están descritos en la Tabla 2:

Tabla 2. Escenarios
ParticipanteEscenarioAcción de contrato inteligente
AseguradoraRevisar la puntuación/franquicia del seguroSi la puntuación de la conducción está por debajo de un determinado nivel, revise la puntuación/franquicia del seguro
Vehículo (IoT)Registrar un patrón de conducción o una conducción peligrosaActualizar la puntuación de la conducción
Vehículo (IoT)Registrar el estado de las partes del vehículoMantener actualizado el estado de las partes basándose en los datos en tiempo real
Vehículo (V2V/V2I)Identificar conducción peligrosa

Registrar violaciones de tráfico
Actualizar la puntuación de la conducción

Actualizar registros de tráfico
Autoridad gubernamentalEnviar caso de tráficoEn caso de violación, cree un caso de tráfico

Puede soportar multas automáticas basándose en una violación identificada de tráfico

Aquí están los detalles para estos escenarios:

  • Clase de activo primario:
    • Vehículo—abarca los datos de la conducción del vehículo, los datos de las partes del vehículo, puntuación de la conducción, registro del seguro y datos de las violaciones de tráfico
  • Eventos:
    • Conducción no segura—derivada de los datos IoT del vehículo que registran ubicación, movimiento, velocidad, dirección, etc.
    • Violación del tráfico o conducción peligrosa—que se registra a partir de los datos de V2V/V2I
    • Tarifa revisada del seguro—derivada de otros eventos como la Conducción no segura y las Violaciones de tráfico
    • Caso de tráfico resuelto—cuando la autoridad gubernamental ha resuelto el caso relativo a la violación de tráfico
  • Reglas y alertas:
    • Caso de tráfico pendiente la regla lanza una alerta sobre un evento de Violación de tráfico, hasta que se elimine por un evento de Caso de tráfico resuelto
    • Largo historial de conducción peligrosa podría desencadenar otras acciones relacionadas

Consulte Presentación de los Contratos Inteligentes de Hyperledger para las Mejores Prácticas y Patrones de IoT para obtener más información sobre el seguro del contrato, el comportamiento, el estado, etc.

Visión general de la arquitectura

Con la tecnología blockchain, cuando se añade una nueva transacción empieza un proceso de consenso antes de asignar esa transacción al libro contable. Si los datos de la transacción son muchos, la latencia aumenta a medida que el servicio de consenso hace su trabajo. Esto significa que puede pasar algo de tiempo antes de que la transacción se vuelva visible como "asignada" en los sistemas de supervisión. Este retraso se puede considerar como una latencia del consenso.

Además, una aplicación que interactúa con blockchain normalmente tendrá que ser consciente de cuáles datos tienen que ser no rechazables, y cuáles no. Para los datos que no tienen que ser no rechazables, puede tener sentido almacenar los datos directamente en los repositorios, en vez de en el blockchain.

Debido a que realmente esto limita el volumen y la velocidad a la que se pueden añadir datos a blockchain, los datos en tiempo real de los sensores IoT y V2V del vehículo no se enviarán directamente a blockchain.

En el diseño de esta aplicación demo, nos hemos centrado principalmente en el procesamiento de blockchain. Los datos en tiempo real que vienen de V2V e IoT se analizan para identificar eventos específicos, que después se envían al servicio del blockchain. Esto garantiza una separación adecuada entre el procesamiento en tiempo real y el procesamiento de blockchain.

Esta demo no incluye ningún componente que requiera el acceso inmediato a datos en tiempo real.

La imagen 1 ilustra la arquitectura de alto nivel de la aplicación demo:

Figura 1. Arquitectura de la aplicación
Application architecture
Application architecture

Sensores y la plataforma Watson IoT

Los sensores internos del vehículo son los responsables por supervisar los datos del carro durante la conducción, y después de enviar esos datos a la plataforma Watson IoT. Para esta aplicación demo se usan principalmente dos tipos de datos de sensores:

  • Los dispositivos internos de supervisión del vehículo monitorizan la velocidad, la ubicación, la dirección y otros parámetros necesarios para el análisis de los patrones de conducción.
  • Los sensores V2V y V2I recibirán los eventos de infraestructura o vehículos próximos y los trasmitirá a la plataforma Watson IoT para analizarlos más a fondo.

Hemos utilizado un simulador de dispositivos para simular los datos de los sensores que necesita esta demo.

La plataforma Watson IoT recibe todos los eventos del vehículo que provienen de los sensores. Los servicios basados en Bluemix analizan esos eventos para encontrar patrones de conducción, y después redirigen los eventos salientes a una instancia del servicio de IBM Blockchain para realizar acciones posteriores.

Los contratos inteligentes e IBM Blockchain

El contrato inteligente que se utiliza en esta demo deriva del Contrato de Muestra Genérico de IoT y se adapta a un escenario de conducción de carros. Este contacto inteligente se ejecuta en una tecnología blockchain basada en Hyperledger Fabric y está diseñada para su integración con Watson IoT Platform.

Al igual que en el Contrato de Muestra Genérico de IoT, en el libro contable de blockchain se manejan dos clases de mensajes:

  • Transacciones, que cambian el estado del libro contable
  • Consultas, que leen el estado del libro contable

Este contrato inteligente hereda del Contrato de Muestra Genérico de IoT algunas funciones muy útiles, como el almacenamiento histórico de archivos, primero la actualización más reciente, un motor de reglas para lanzar o eliminar alertas, un mecanismo para realizar el seguimiento de las alertas activas, y un patrón de “estado parcial como evento”.

La aplicación cliente basada en Node.js brinda a los clientes acceso a todos los datos almacenados en el almacén seguro de IBM Blockchain como resultado de la ejecución del chaincode. Las partes interesadas (Aseguradora, Conductor y Autoridad gubernamental) pueden ver el resultado de las transacciones a medida que los datos de IoT son recibidos y procesados por el chaincode.

La aplicación del cliente utiliza la REST API de IBM Blockchain para consultar al chaincode y para mostrar los datos a través de una simple interfaz web.

Detalles de la implementación

Esta sección describe un enfoque detallado para implementar el caso de uso anterior. Describimos los componentes necesarios para la implementación y cómo interactúan para lograr la funcionalidad necesaria. A continuación, enumeramos los pasos individuales del flujo funcional y cómo esos pasos se implementan utilizando los servicios de Bluemix e IBM Watson IoT Platform.

Obtenga el código de muestra de la aplicación clienteObtenga la muestra del código del contrato inteligente

La imagen 2 muestra los diferentes componentes de la aplicación demo.

Figura 2. Componentes de la aplicación
Application components
Application components

Los siguientes componentes juegan un rol importante en el análisis de los datos que provienen de los sensores:

  • Organización de Node-RED—El servicio Node-RED Starter de Bluemix se utiliza para organizar los eventos de IoT y, después de su mejora, los envía al servicio de análisis de patrones de conducción.
  • Análisis del Comportamiento del ConductorLos servicios Watson IoT Driver Behavior toman los datos mejorados del evento y analizan el Comportamiento del Conductor y los patrones de uso del vehículo.

La imagen 3 muestra cómo interactúan los componentes para implementar la funcionalidad necesaria con Node-RED y con los servicios de análisis del Comportamiento del Conductor. En este escenario hemos lanzado los contratos inteligentes directamente desde la aplicación personalizada basada en Node.js.

Figura 3. Flujo de la aplicación demo
Flow of the demo application
Flow of the demo application

Así es como funciona el proceso:

  1. El propietario registra su propio vehículo utilizando la aplicación del cliente, quien, a su vez, crea los activos en el blockchain.
  2. Los sensores del vehículo registrado envían datos de sonda a la plataforma Watson IoT.
  3. Los datos del sensor se utilizan con una organización basada en Node-RED (a continuación, se muestran los detalles), que invoca el servicio de Comportamiento del Conductor.
  4. El resultado del servicio Comportamiento del Conductor se utiliza más tarde para lanzar el servicio blockchain, que, a cambio, ejecuta contratos inteligentes y realiza las acciones descritas anteriormente.

Colección de datos internos de IoT y V2V

Los datos de V2V e IoT serán recopilados por el dispositivo interno del vehículo, y el dispositivo enviará los datos a Watson IoT Platform. Para la aplicación demo utilizaremos un simulador de dispositivos y enviaremos los datos de conducción del dispositivo como se muestra en el siguiente listado de códigos.

Datos de los sensores del carro

Los datos de los sensores del carro es una secuencia ordenada de eventos del carro. Cada elemento está formado por la cabecera, latitud, longitud, velocidad y el sello temporal que se obtiene del viaje del carro. Los datos de muestra del sensor que se utilizan para el análisis del patrón de conducción se muestran aquí:

Listado 1. Datos de muestra del sensor
{
    "heading":273.995431,
    "latitude":30.398981,
    "longitude":97.746804,
    "speed":8.256416399999999,
    "timestamp":"2016-03-11T13:43:17.000Z",
    "trip_id":"1HGFM82644B006001_2017-02-10"
}

Datos de los sensores V2V

La plataforma Watson IoT recibe dos tipos de mensajes de comunicaciones simuladas del vehículo:

  1. Mensajes de seguridad básica (BSM)—Esto incluye los mensajes V2V que recibe el receptor del carro conectado. Los BSMs incluyen las luces de los frenos de emergencia, la velocidad del vehículo y la dirección.
  2. Mensaje de alerta de la carretera (RSA)—Esos mensajes son lanzados por los componentes de la infraestructura de la carretera. Los mensajes RSA incluyen las señales de tráfico, avisos de vehículos parados y desvíos.

Éste es un mensaje V2V BSM de muestra:

Listado 2. Mensaje V2V BSM de muestra
{
    "msgID": "basicSafetyMessage",
    "secMark":10,
    "id": 1111111111,
    "lat":60369542144,
    "lng": -984987654,
    "elev": 13000,
    "speed": 10000,
    "heading": 1820,
    "accelset": {
        "lat":0,
        "lng":0,
        "vert": 0,
        "yaw": 0
    },
    "brakes": {
        "wheelBrakes": 11110000,
        "traction": "off",
        "abs": "off"
    },
    "steering": 1501,
    "throttle": 60,
    "lightSet": {},
    "size": {
        "width": 213,
        "length": 640
    },
    "valueCnt1": 0,
    "items1": {},
    "valueCnt2": 0,
    "items2": {}	
}

Estos mensajes se analizan para producir eventos específicos de la conducción (como violaciones de señales de tráfico, violaciones de límites de velocidad y colisiones próximas), que se pasan a la instancia de Bluemix Blockchain para que se analicen y registren.

Enlazar los eventos de V2V y de IoT con un libro contable distribuido

Una vez que la plataforma IoT reciba los datos, se lanza el flujo de Node-RED correspondiente. El flujo filtra los datos, los incrementa y aplica las reglas específicas necesarias. En nuestra aplicación demo, el flujo de Node-RED envía los datos internos al servicio de Comportamiento del Conductor. El servicio de Comportamiento del Conductor identifica los eventos basándose en los viajes, como un trabajo de lotes. Cuando el trabajo finaliza, la aplicación demo lanza una transacción en el servicio de blockchain. Así, en nuestra aplicación demo cada viaje crea una transacción que tiene que ser añadida al blockchain.

Flujo de trabajo de Node-RED

La imagen 4 muestra el flujo de trabajo de Node-RED que estamos utilizando en nuestra aplicación demo.

Figura 4. flujo de trabajo de Node-RED
Node-RED workflow
Node-RED workflow

El objetivo de este flujo de Node-RED es permitir que los datos de IoT fluyan hacia el servicio de Comportamiento del conductor, con las mejoras necesarias de mapas geográficos.

El flujo lee el mensaje de IoT entrante y empieza añadiendo el ID adecuado del poseedor y el nombre del host para el servicio de Comportamiento del Conductor que se asocia a su aplicación de Bluemix. Los datos respectivos del dispositivo se extraen del mensaje entrante de IoT y se convierten en un formato comprensible por el servicio de Comportamiento del Conductor.

Estos datos se coordinan más tarde con la información de los mapas geográficos del servicio de Cartografía del Contexto. Se seleccionan dos APIs de Cartografías del Contexto: /matching y /link. Los registros generados le muestran cuáles son los datos que se añaden al mensaje.

Para nuestra demo, hemos simulado datos del viaje (la secuencia de eventos mostrados anteriormente) que se deben enviar al servicio de Comportamiento del Conductor, lo que genera comportamientos específicos de la conducción en el viaje. Consulte la documentación para obtener una descripción de los eventos de comportamiento generados a partir de datos de sensores.

Finalmente, con el mensaje se selecciona la API /carProbe del servicio de Comportamiento del Conductor para que el servicio pueda añadir a su almacén de datos los datos sonda de un determinado viaje.

Los nodos "log" que están en verde son para producir el resultado de la depuración. Los nodos “delay” correspondientes se asegurarán de que el mensaje del registro se escriba completamente en el resultado antes de pasar al siguiente nodo, para que los mensajes del registro no se sobrescriban entre ellos.

Puede obtener más información sobre los detalles de la API en la documentación del servicio de Bluemix, y encontrará más información acerca de cómo configurar este flujo en este tutorial.

Cómo ejecutar las transacciones del libro contable

Los eventos—y, por lo tanto, las transacciones—pueden ser lanzados por eventos que hayan sido iniciados por la plataforma de IoT, o por eventos iniciados por los participantes.

Cuando se reciba la transacción por un par en la validación del servicio de blockchain, se iniciará un consenso con otros pares de validación de la red. En el servicio Bluemix Blockchainpredeterminado, hay cuatro pares de validación. Cuando se alcanza el consenso, los pares de validación asignarán la transacción.

Cualquier participante puede iniciar una transacción de seguimiento en base a las transacciones recibidas y enviadas al libro contable. Por ejemplo, cuando se recibe un evento de mala conducción, la Autoridad gubernamental puede iniciar una transacción para reducir la puntuación de la conducción.

Esquema del contrato inteligente

Los contratos inteligentes procesan los datos provenientes de los sensores y del servicio del comportamiento del conductor. El listado de códigos siguiente exhibe el esquema de muestra que se utiliza en la aplicación demo para procesar todos los eventos de las transacciones. Esto se basa en el esquema de muestra Muestra de Ruta Comercial para IoT Avanzado.

Listado 3. Esquema de muestra que se utiliza para procesar todos los eventos de transacciones
"state": {
	            "type": "object",
	            "description": "Un conjunto de propiedades que constituyen el estado completo de un activo. Incluye propiedades de eventos y las otras propiedades calculadas, como las alertas relacionadas con la conformidad.",
	            "properties": {
	                "assetID": {
	                    "$ref": "#/definitions/assetID"
	                },
	                "vehicleID": {
	                		"$ref": "#/definitions/vehicleID"
	                },
	                "timestamp": {
	                    "type": "string",
	                    "description": "Sello temporal del evento."
	                },
	                "lastKnownLocation": {
	                    "$ref": "#/definitions/geo"
	                },
	                "extension": {
	                    "type": "object",
	                    "description": "Application-managed state. Opaque to contract.",
	                    "properties": {
	                   		"authorityRating": {
	                    		"$ref": "#/definitions/rating"
	                    	},
	                   		"insurerRating": {
	                    		"$ref": "#/definitions/rating"
	                    	},
	                    	"lastTrip": {
	                    		"$ref": "#/definitions/trip"
	                    	}
	                    }
	                },
	                "txntimestamp": {
	                    "type": "string",
	                    "description": "Sello temporal de la aplicación que coincide con el de blockchain."
	                },
	                "txnuuid": {
	                    "type": "string",
	                    "description": "Transaction UUID matching that in the blockchain."
	                },
	                "compliant": {
	                    "type": "boolean",
	                    "description": "A contract-specific indication that this asset is compliant."
	                },
	                "alerts": {
	                    "$ref": "#/definitions/alertStatus"
	                },
	                "lastEvent": {
	                    "$ref": "#/definitions/eventWithFunction"
	                }
	            }
	        }

Desarrollo de la aplicación del cliente

Hemos utilizado el SDK de Bluemix Node.js para desarrollar la aplicación web de muestra del cliente que interactúa y consulta los datos de blockchain. La aplicación del cliente consulta a blockchain para mostrar detalles de activos y de transacciones. También lanza los datos simulados que se envían a la plataforma Watson IoT, y después se los entrega al servicio de análisis del conductor para obtener la puntuación de su comportamiento al volante.

Configuración de la llamada a la REST API de Blockchain

Ésta es la configuración que utilizan todas las llamadas de la REST API. Establece el par al que usted se está conectando, el id de usuario y el secreto para autenticar la llamada a la API y los argumentos de la llamada.

Listado 4. Configuración de la llamada a la REST API de Blockchain
var config = {
		host: "<peer id>-vp0.us.blockchain.ibm.com", 
		port: "5003", 
		secure_context: "<user id>", 
		enroll_secret: "<enroll secret>",
		protocol: "https",
		debug_mode: true,
		chaincodeURL: "<peer id>-vp0.us.blockchain.ibm.com:5003/chaincode",
		name: blk_chaincode,
		path: blk_chaincode,
		messageId: "",
		contract_version: "1.0",
		timeout: 3000,
		template: {
				"jsonrpc": "2.0",
				"method": "{{method}}",
				"params": {
					"type": 1,
					"chaincodeID":{
						"name":"mycc",
					},
					"ctorMsg": {
						"function":"{{function}}",
						"args":[],
					},
					"secureContext": "<user id>",
				},
				"id": 0
			},
	};

Las secciones siguientes brindan una guía paso a paso para implementar la aplicación de demo. Los fragmentos del código muestran cómo se utiliza la API de REST de IBM Blockchain para registrar activos, actualizar los datos de los activos y consultar a blockchain para obtener los datos históricos y actuales de los activos.

1a. Registrar un activo

El usuario empieza registrando su vehículo como un activo. La imagen 5 muestra los detalles del activo que la aplicación demo soporta.

Figura 5. Detalles del activo de la aplicación demo
Demo application asset details
Demo application asset details

1b. Crear un activo nuevo

Método de blockchain a utilizar: createAsset(). También se utiliza una base de datos de Cloudant como el repositorio de vehículos para la demo. El vehículo se introduce en la base de datos después de crear el activo en blockchain.

Listado 5. createAsset()
// Preparar el cuerpo de rest para createAsset
createBody.method = 'invoke';
createBody.params.ctorMsg.function = 'createAsset';
createBody.params.ctorMsg.args = ["{\"assetID\":\""+ input_vin +"\",\"ownerName\":\""+ input_ownerName +"\",\"createDate\":\""+ v_createdt +"\",\"numberPlate\":\""+ input_numberPlate +"\"}"];
	
// Llamar a la función createAsset de blockchain con rest api
https.request(options, function(res4) {
	  res4.setEncoding('utf8');
	  res4.on('data', function (chunk) {
	    console.log('BODY: ' + chunk);
	  });
	
// Preparar la estructura del vehículo de JSON para introducirla en Cloudant
var vehicle = {
		vin: input_vin,
		owner: input_ownerName,
		number: input_numberPlate,
		status: 'active',
		createDate: v_createdt
	};
var v_id = input_vin + ' - ' + input_numberPlate;

// Insertar el vehículo en Cloudant
db.insert(vehicle, v_id, function(err, body, header) {
    if (err) {
      return console.log(v_id + ' -- [insert] ', err.message);
    }
  });

}).end(JSON.stringify(createBody));

Esto completa la preparación del activo para su seguimiento. El paso 2 le muestra cómo capturar y mejorar los datos de IoT.

2a. Enviar datos del vehículo simulado para los vehículos registrados

Una vez que el vehículo esté registrado, necesitará enviar los datos del sensor interno del vehículo. Se utiliza un dispositivo simulador para enviar los datos de sonda a la plataforma Watson IoT. Consulte el código simulador de dispositivos para obtener los datos del simulador de conducción de carros.

Este fragmento de código le muestra cómo enviar datos a la plataforma Watson IoT:

Listado 6. Cómo enviar datos a la plataforma Watson IoT
deviceClient.connect();
deviceClient.on('connect', function(){

if(iotDeviceConnectionStatus == false) {
 	iotDeviceConnectionStatus = true;	
     var i=0;
     console.log("connected");
     var IOTSent = setInterval(function sendIOTData() {
        if (i >= totalcount)
        {	
                deviceClient.disconnect();
                iotDeviceConnectionStatus = false;
                selectedVehicle.sim_status_id="1";
                iotDataSent = true;
                clearInterval(IOTSent);
                return;
        }
        datatopublish.d = carprobesampledata[i];
        i++;
	   processingStatus = "Capturando datos del carro "+i+"/"+totalcount;
        console.log(processingStatus);
	   var driveTimestamp = new Date().toISOString();
        datatopublish.d.timestamp = drivedate + driveTimestamp.substr(10,driveTimestamp.length);
        datatopublish.d.trip_id = assetid+moment(new Date()).format('DD');
        datatopublish.ts = drivedate + moment(new Date()).format('THH:mm:ss.SSSZZ');

        deviceClient.publish('load', 'json', JSON.stringify(datatopublish), 0);
    	},delay*800);
    	console.log("Final de la conexión..");
    }
});

2b. Después de que la plataforma de IoT haya recibido los datos brutos de los sensores, mejórelos con datos de la cartografía del contexto

El flujo personalizado de Node-RED, que se ha descrito anteriormente, obedece a los eventos de la plataforma de IoT. El flujo recibe los datos de los sensores de la plataforma de IoT. Hemos implementado el flujo para seleccionar el servicio de Cartografía de Contexto y para mejorar los datos.

2c. Una vez que los datos estén mejorados, envíelos al análisis del conductor

El flujo de Node-RED envía, a continuación, los datos mejorados del sensor al servicio de Análisis del Conductor para almacenar los datos.

Después, usted tiene que coordinar el análisis de los datos y actualizar los resultados del análisis en el activo de blockchain. En este tutorial, esa coordinación se realiza por la aplicación frontal de la demo simuladora.

3a. Cuando el conjunto de datos esté listo en el Análisis del Conductor, es el momento de lanzar el análisis de los datos

El usuario debería continuar para ver en la UI el estado actualizado.

El URL de la API (POST) de envío de trabajo de análisis del conductor es el siguiente:

https://automotive.internetofthings.ibmcloud.com/driverinsights/jobcontrol/job?tenant_id=yourtenantid&from= dateoftravel&to=dateoftravel

userid:secretkey Básico de la Autorización

Este userid y la secretkey son del servicio de Comportamiento del Conductor que usted ha añadido a su aplicación de Bluemix. La fecha "hasta" también puede ser posterior a la fecha "desde", si quiere analizar datos de varios días en un único lote.

Listado 7. fecha "hasta" y fecha "desde"
var new_event_date = moment(selectedVehicle.lastEventDate, 'DD-MMM-YYYY').add(1, 'days').format('YYYY-MM-DD');
path_str = "&from=" + new_event_date + "&to=" + new_event_date;
console.log(path_str);
driver_path_post =
“https://automotive.internetofthings.ibmcloud.com/driverinsights/jobcontrol/job?tenant_id=<tenant_id>”+
path_str;
    request(
    {
		url : driver_path_post,
		method : 'POST',
		headers : {
            "Authorization" : auth,
            "content-Type" : 'application/x-www-form-urlencoded'
        }
     },
     function (error, response, body) {
	    	var jsonbody = JSON.parse(body);
        	selectedVehicle.job_id = jsonbody.job_id;
        	selectedVehicle.sim_status_id = "2";
        	selectedVehicle.sim_status_desc = "El análisis de conductor está realizándose. Esto puede tardar un par de minutos. Job id = " + jsonbody.job_id;
          res7.render('index', { title : 'Home', moment: moment, selectedVehicle : selectedVehicle, vehicleList : db_vehicle_list, sim_triggered : 'true'});
	});

Esto devuelve un job_id en un JSON como este:

    {
        "job_id": "4f9b70ef-6bcd-4a21-b311-e57ba9729a3d"
    }

Con este job_id, espere a que se finalice el análisis del conductor. Esto puede tardar aproximadamente un minuto con nuestros datos de muestra.

Éste es el URL del API (GET) del estado del trabajo:

https://automotive.internetofthings.ibmcloud.com/driverinsights/drbresult/tripSummaryList?tenant_id=yourtenantid&job_id=yourjobid

El fragmento de código se muestra aquí:

Listado 8. API de estado del trabajo
path_str = "&job_id=" + selectedVehicle.job_id;
driver_path_get =
“https://automotive.internetofthings.ibmcloud.com/driverinsights/jobcontrol/job?tenant_id=<tenant_id>”
+ path_str;
    request(
        {
            url : driver_path_get,
            method : 'GET',
            headers : {
                "Authorization" : auth,
                "content-Type" : 'application/x-www-form-urlencoded'
            }
        },
     function (error, response, body) {
	    	var jbody_1 = JSON.parse(body);
        	var sim_stat = jbody_1["job_status"];
        	console.log("Estado del trabajo - " + sim_stat);
        	if(sim_stat=="SUCCEEDED")
        	{
	            	selectedVehicle.sim_status_id = "3";
	        	selectedVehicle.sim_status_desc = "El análisis del conductor ha finalizado. Obteniendo los resultados...";
        	}	
});

El JSON devuelto contendrá el estado del trabajo como es "RUNNING" o "SUCCEEDED." Si está en estado es "RUNNING", llame a la misma API después de un intervalo.

Después de que los resultados de análisis del conductor estén disponibles, la estructura resultante de los datos se tiene que transformar en una estructura de datos que será aceptada por el chaincode que hemos desarrollado.

En nuestro código de muestra, esta estructura se mantiene prácticamente igual para que sea breve; no se necesita ninguna transformación importante.

3b. Obtenga los resultados del análisis del conductor

Para obtener los detalles del viaje se realizan dos llamadas a la API del servicio del conductor. La primera llamada se realiza con el id del poseedor y con el id del trabajo para recuperar el uuid del viaje:
https://automotive.internetofthings.ibmcloud.com/driverinsights/drbresult/tripSummaryList?tenant_id=<tenant_id>&job_id=<job_id>

Y la segunda llamada se realiza con el uuid del viaje para recuperar los detalles del viaje:
https://automotive.internetofthings.ibmcloud.com/driverinsights/drbresult/trip?tenant_id=<tenant_id>&trip_uuid=<trip_uuid>

Las puntuaciones del conductor y de la aseguradora se actualizan en esta estructura de datos. La puntuación se reduce si se detectan eventos de mala conducción, y se incrementa si no se detecta ningún evento, lo que indica una buena conducción.

3c. Coloque la solicitud para el blockchain que tiene los datos nuevos del activo con el ID del activo, y el estado del activo se debería actualizar

A continuación, se llama al método updateAsset de nuestro chaincode, utilizando una cadena de caracteres como el argumento de entrada. La longitud de la cadena es 1. Así que el elemento en posición cero de la cadena contendrá la estructura de datos que se ha obtenido en el paso anterior.

Listado 9. Llamar al método updateAsset
// Preparar el cuerpo de rest para updateAsset
updateBody.method = 'invoke';
updateBody.params.ctorMsg.function = 'updateAsset';
updateBody.params.ctorMsg.args = ["{\"assetID\":\""+ input_vin +"\",\"lastEvent\":\""+ input_lastEvent +"\"}"];
	
// Llamar a la función updateAsset de blockchain con rest api
https.request(options, function(res4) {
	  res4.setEncoding('utf8');
	  res4.on('data', function (chunk) {
	    console.log('BODY: ' + chunk);
	  });
}).end(JSON.stringify(updateBody));

4. Consultar el blockchain para obtener el estado del activo

Llamar a readAsset() con el id del activo para obtener las puntuaciones más recientes y para mostrarlas a la UI.

Listado 10. readAsset()
var queryBody = config.template;
queryBody.params.chaincodeID.name = blk_chaincode;
// Preparar el cuerpo de rest para readAsset
queryBody.method = 'query';
queryBody.params.ctorMsg.function = 'readAsset';
queryBody.params.ctorMsg.args = [ "{\"assetID\":\""+selected_vin+"\"}"];

console.log('queryBody - ' + JSON.stringify(queryBody));
var raw_str;	
// Llamar a la función readAsset de blockchain con rest api
https.request(options, function(res2) {
	  res2.setEncoding('utf8');
	  res2.on('data', function (chunk) {
	    console.log('BODY: ' + chunk);
	    raw_str+=chunk;
	    var json_str = eval('(' + chunk + ')');
	    var json_msg = eval('(' + json_str.result.message + ')');
	    selectedVehicle.assetID = json_msg.assetID;
	    selectedVehicle.createDate = json_msg.createDate;
	    selectedVehicle.ownerName = json_msg.ownerName;
	    selectedVehicle.numberPlate = json_msg.numberPlate;
	    selectedVehicle.lastEventDate = moment(new Date(json_msg.txntimestamp)).format('DD-MMM-YYYY');
	  });
	}).end(JSON.stringify(queryBody));

Consultar el blockchain para obtener el historial del estado del activo

Como se muestra en el siguiente fragmento de código, los datos del historial se recuperan llamando al método readAssetHistory() del chaincode. Con los datos del historial se pueden enumerar los viajes pasados del vehículo, y se pueden mostrar el viaje en un mapa con las latitudes y las longitudes.

Listado 11. Recuperación de los datos del historial
queryBody.method = 'query';
queryBody.params.ctorMsg.function = 'readAssetHistory';
queryBody.params.ctorMsg.args = [ "{\"assetID\":\""+selectedVehicle.assetID+"\"}"];
 
// Llamar a la función readAsset de blockchain con rest api
https.request(options, function(res2) {
      res2.setEncoding('utf8');
      res2.on('data', function (chunk) {
        console.log('BODY: ' + chunk);
        var jbody_1 = JSON.parse(chunk);
        var json_msg = jbody_1[0].result.message;
      });
    }).end(JSON.stringify(queryBody));

Conclusión

Como se demuestra en este tutorial (y en las muestras de código, es relativamente fácil construir una aplicación cognitiva de IoT que se integre con una instancia del servicio de IBM Blockchain. Los datos de los sensores de IoT se pueden analizar y enviar a contratos inteligentes de blockchain para ejecutar reglas y completar transacciones que se pueden validar y acordar por todos los pares participantes.

Esta aplicación se puede mejorar aún más mediante la inclusión de servicios cognitivos adicionales que integren, por ejemplo, datos del clima que había durante un viaje o las restricciones a la circulación en diferentes ubicaciones, para analizar más a fondo cómo responden los conductores bajo diferentes condiciones. También se pueden utilizar soluciones similares para analizar el rendimiento de los conductores nuevos en escenarios de capacitación.


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=Cloud computing, Internet of Things
ArticleID=1057961
ArticleTitle=Implementación de blockchain para aplicaciones de IoT cognitivas, Parte 2: Utilice datos de sensores de vehículos para ejecutar transacciones inteligentes en Blockchain
publish-date=02082018