开发客户端应用程序我们使用了 来开发样本客户端 Web 应用程序,以便与区块链交互并从区块链查询数据。这个客户端应用程序将会查询区块链,以显示资产和事务细节。它还会触发模拟数据,这些数据被发送到 Watson IoT Platform ,然后发送到驾驶员分析服务来获得驾驶行为评级。
Blockchain REST API 调用配置这是所有 REST API 调用所使用的配置。它建立了您将要连接的对等节点,用于验证 API 调用的用户 id 和密码,以及调用参数。
清单 4. Blockchain REST API 调用配置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
| 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
},
};
|
以下各节将逐步指导您实现演示应用程序。其中的代码段将展示如何使用 IBM Blockchain REST API 注册资产、更新资产数据,以及在区块链中查询当前和历史资产数据。
1a.注册资产用户首先将他或她拥有的车辆注册为资产。图 5 显示了演示应用程序支持的资产细节。
图 5. 演示应用程序资产细节
1b.创建一个新资产需要使用这个区块链方法:createAsset()。另外,使用一个 Cloudant 数据库作为该演示的车辆存储库。在区块链中创建资产后,将车辆插入该数据库中。
清单 5. createAsset()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
| // Prepare the rest body for 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 +"\"}"];
// Call blockchain createAsset function using rest api
https.request(options, function(res4) {
res4.setEncoding('utf8');
res4.on('data', function (chunk) {
console.log('BODY: ' + chunk);
});
// Prepare the vehicle JSON structure for inserting into Cloudant
var vehicle = {
vin: input_vin,
owner: input_ownerName,
number: input_numberPlate,
status: 'active',
createDate: v_createdt
};
var v_id = input_vin + ' - ' + input_numberPlate;
// Insert the vehicle into Cloudant
db.insert(vehicle, v_id, function(err, body, header) {
if (err) {
return console.log(v_id + ' -- [insert] ', err.message);
}
});
}).end(JSON.stringify(createBody));
|
这就完成了要跟踪的资产的准备工作。第 2 步将展示如何捕获和扩充 IoT 数据。
2a.发送已注册车辆的模拟车辆数据注册一辆车后,需要发送车载传感器数据。使用一个设备模拟器将车辆探测数据发送到 Watson IoT Platform。请参阅设备模拟器代码,了解模拟器车辆驾驶数据。
下面这段代码展示了如何将数据发送到 Watson IoT Platform:
清单 6. 将数据发送到 Watson IoT Platform1
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
| 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++;
processingStatus = "Capturing car data "+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("End of on connect..");
}
});
|
|