实现细节本节将介绍一种实现上述用例的详细方法。我们将介绍所需的实现组件,以及它们如何通过交互来实现所需的功能。然后列出功能流的各个步骤,以及如何使用 Bluemix 服务和 IBM Watson IoT Platform 实现这些步骤。
图 2 展示了演示应用程序的不同组件。
图 2. 应用程序组件
在分析来自传感器的数据的过程中,以下组件发挥着重要作用:
- Node-RED 编排— 使用 Bluemix 中的 服务来编排 IoT 事件,并在扩充后将这些事件发送到驾驶模式分析服务。
- 驾驶员行为分析— 服务获取经过扩充的事件数据,并分析驾驶员行为和车辆使用模式。
图 3 展示了这些组件如何使用 Node-RED 和 Driver Behavior Analysis 服务进行交互,以实现所需的功能。在此场景中,我们直接利用基于 Node.js 的自定义应用程序触发了智能合约。
图 3. 演示应用程序的工作流该流程的工作原理如下:
- 车主使用客户端应用程序注册其车辆,然后该应用程序在区块链中创建这些资产。
- 已注册车辆中的传感器会将车辆探测数据发送到 Watson IoT Platform。
- 使用基于 Node-RED 的编排工具(下面将详细介绍),调用 Driver Behavior 服务来分析传感器数据。
- 然后使用 Driver Behavior 服务的输出触发 Blockchain 服务,后者进而执行智能合约和上述操作。
车载 IoT 和 V2V 数据集合车载设备收集 V2V 和 IoT 数据,并将其发送到 Watson IoT Platform。在演示应用程序中,我们将使用一个设备模拟器来发送车辆驾驶数据,如下面的代码清单所示。
来自车辆传感器的数据车辆传感器数据是一个有序的车辆事件序列。每个事件包含从车辆的一次行程中获得的行驶方向、纬度、经度、速度和时间戳。下面给出了用于分析驾驶模式的样本传感器数据:
清单 1. 样本传感器数据1
2
3
4
5
6
7
8
| {
"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"
}
|
来自 V2V 传感器的数据两种模拟的车辆通信消息被发送到 Watson IoT Platform:
- 基本安全消息 (BSM)— 这包括已连接的车辆中的接收器收到的 V2V 消息。BSM 包括紧急刹车灯、车辆速度和方向。
- 道旁警报消息 (RSA)— 这些消息由道旁基础架构组件触发。RSA 消息包括交通信号灯、静止车辆警告、事故和车道偏离。
下面给出了一条样本 V2V BSM 消息:
清单 2. 样本 V2V BSM 消息1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| {
"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": {}
}
|
分析这些消息可以获得与驾驶相关的事件(比如违反交通信号灯指示、违反限速规定和车辆险些相撞),这些事件被发送到 实例来进行分析和记录。
将 V2V 和 IoT 事件与分布式账本相链接在 IoT Platform 收到数据后,会触发相应的 Node-RED 流。该流将会过滤和扩充数据,并在必要时应用特定的规则。在我们的演示应用程序中,车载数据由 Node-RED 流发送到 Driver Behavior 服务。Driver Behavior 服务根据行程来识别事件,将其作为一个批处理作业。完成作业后,演示应用程序会在 Blockchain 服务上触发一个事务。因此,在我们的演示应用程序中,每个行程都会导致向区块链添加一个事务。
Node-RED 工作流图 4 展示了我们在演示应用程序中使用的 Node-RED 工作流。
图 4. Node-RED 工作流
这个 Node-RED 流的用途是使 IoT 数据能流入 Driver Behavior 服务中,并在必要时进行地图扩充。
该工作流会读取传入的 IoT 消息,并开始向 Driver Behavior 服务(与您的 Bluemix 应用程序相关)添加合适的租户 ID 和主机名。从传入的 IoT 消息中提取各种设备数据,并将其转换为一种可被 Driver Behavior 服务理解的格式。
然后将此数据与来自 Context Mapping 服务的地图信息进行匹配。我们调用了两个 Context Mapping API:/matching 和 /link。生成的日志显示了向消息中添加了哪些数据。
在演示中,我们模拟了要传递给 Driver Behavior 服务的行程数据(上面显示的事件序列),该服务为该行程生成了具体的驾驶行为。要查看从传感器数据生成的行为事件的描述,请查阅。
最后,使用该消息来调用来自 Driver Behavior 服务的 /carProbe API,以便该服务能够将针对特定行程的探测数据添加到其数据存储中。
绿色的 “log” 节点用于生成调试输出。对应的 “delay” 节点可确保在前进到下一个节点前已将日志消息全部写入输出中,使日志消息不会相互覆盖。
可以在该 Bluemix 服务的文档中获得更多 API 细节,也可以在中进一步了解如何设置这个流。
执行账本事务事件 — 以及事务 — 可由 IoT Platform 发起的事件触发,或者由参与者发起的事件触发。
Blockchain 服务中的验证对等节点收到事务后,该事务会与网络中的其他验证对等节点发起一个共识流程。在默认的 中,有 4 个验证对等节点。达成共识后,验证对等节点就会提交该事务。
根据收到并提交到账本的事务,参与者可以发起一个跟进事务。例如,当收到一个不良驾驶事件时,政府机构可以发起一个事务来降低驾驶评级。
智能合约模式智能合约处理来自传感器和 Driver Behavior 服务的数据。下面的代码清单给出了演示应用程序中用来处理事务中的所有事件的样本模式。这个模式基于。
清单 3. 用于处理所有事务事件的样本模式1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
| "state": {
"type": "object",
"description": "A set of properties that constitute a complete asset state. Includes event properties and any other calculated properties such as compliance related alerts.",
"properties": {
"assetID": {
"$ref": "#/definitions/assetID"
},
"vehicleID": {
"$ref": "#/definitions/vehicleID"
},
"timestamp": {
"type": "string",
"description": "Event timestamp."
},
"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": "Transaction timestamp matching that in the 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"
}
}
}
|
|