首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用车辆传感器数据在区块链中执行智能事务(4)

使用车辆传感器数据在区块链中执行智能事务(4)

开发客户端应用程序我们使用了  来开发样本客户端 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                    Platform
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
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..");
    }
});







返回列表