区块链和物联网解决方案实用指南(二)(2)

简介: 区块链和物联网解决方案实用指南(二)

区块链和物联网解决方案实用指南(二)(1)https://developer.aliyun.com/article/1515721

将业务网络升级为新版本

升级部署的业务网络只需要四个步骤:

  1. 打开package.json文件并更新应用程序的版本号。在我们的情况下,它将更新为0.0.2,看起来像这样:
{
 "engines": {
 "composer": "⁰.20.4"
 },
 "name": "food-safety-b10407",
 "version": "0.0.2",
...
  1. 通过运行composer archive create -t dir -n .命令创建一个新的 BNA 文件:
$ composer archive create -t dir -n .
Creating Business Network Archive
Looking for package.json of Business Network Definition
 Input directory: /projects/hands-on-iot-solutions-with-blockchain/ch7/food-safety-b10407
Found:
 Description: Hands-on IoT solutions with Blockchain
 Name: food-safety-b10407
 Identifier: food-safety-b10407@0.0.2
Written Business Network Definition Archive file to
 Output file: food-safety-b10407@0.0.2.bna
Command succeeded
  1. 在 Hyperledger 环境中安装新的归档文件:
$ composer network install --card PeerAdmin@hlfv1 --archiveFile food-safety-b10407\@0.0.2.bna
√ Installing business network. This may take a minute...
Successfully installed business network food-safety-b10407, version 0.0.2
Command succeeded
  1. 最后,将网络版本upgrade到新版本:
$ composer network upgrade --card PeerAdmin@hlfv1 --networkName food-safety-b10407 --networkVersion 0.0.2
Upgrading business network food-safety-b10407 to version 0.0.2
√ Upgrading business network definition. This may take a minute...
Command succeeded

如果所有命令都成功运行,那么业务网络现在将在新版本上运行,包括在前面的章节中创建的交易和 ACLs。

为每个参与者设置 Composer REST 服务器

作为安装 Hyperledger Composer 开发环境的先决条件的一部分,您还将安装了 Composer REST 服务器。

这个组件是基于 Loopback 框架(loopback.io)的 API 服务器,包括一个loopback-connector-composer用于连接到 Hyperledger Composer 环境,以及一个动态收集资产、参与者和交易模型的脚本。

启动 Composer REST 服务器的最简单方法是运行cli命令并正确填写启动问卷。为了我们的方便,我们将使用以下命令运行它:

composer-rest-server -c "<business card name>" -n never -u true -w true -p <port defined for the participant server> 

为每个参与者打开一个终端窗口,以启动专用的 Composer REST 服务器:

composer-rest-server -c "Factory@food-safety-b10407" -n never -u true -w true -p 3000
composer-rest-server -c "Warehouse@food-safety-b10407" -n never -u true -w true -p 3001
composer-rest-server -c "Store@food-safety-b10407" -n never -u true -w true -p 3002
composer-rest-server -c "Consumer@food-safety-b10407" -n never -u true -w true -p 3003
composer-rest-server -c "Transporter@food-safety-b10407" -n never -u true -w true -p 3004

每个运行实例都与单个用户相关联,这意味着通过监听端口3003的 Composer REST 服务器调用的所有操作都与具有标识符 5**的Consumer相关。例如,如果创建了一个新的Consumer参与者(假设 ID 为 6),那么必须向参与者发放新的名片,并使用新的名片启动另一个 Composer REST 服务器实例。

在大多数情况下,一个商业名片就足以满足整个组织的需求。其他发放名片的规则可以由治理定义,例如每个分支/子公司一个名片,或者每个用户必须有自己的名片。

此时,您的计算机上应该有五个 Composer REST 服务器实例正在运行,每个服务器都可以通过浏览器访问以下地址:http://localhost:

创建解决方案的物联网部分

在定义了整个区块链网络并使一切正常运行之后,我们现在将设置和开发将用于更新盒子和托盘测量值的设备。

为了完成这一点,我们将使用与第二章相同的方法创建一个新的设备,创建您的第一个物联网解决方案,并创建一个应用程序,该应用程序接收测量事件并使用 Composer REST 服务器提供的 API 更新区块链账本。

硬件设置

为了组装这个监控设备,我们将应用一些可能与生产环境相关的假设:

  • 运输车辆有可用的 Wi-Fi 连接,使设备可以连接到互联网
  • 监测设备时间与应用程序时间同步,包括时区
  • 所有的箱子都是同时运输,使用相同的车辆,因此对于托盘上的所有箱子都适用相同的条件和测量标准。

在生产级应用中,必须使用诸如缓存未发布的事件和使用不同的网络提供商(Sigfox,LoRAWan,移动连接等)等技术来处理这些限制/假设,并且实际时间必须与设备位置同步。

此项目中使用的零件如下所示:


此图像是使用 Fritzing 创建的,并在 CC BY-SA 3.0 下许可;请参阅 https://creativecommons.org/licenses/by-sa/3.0/

组件的描述如下表所示。鉴于它们是第二章创建您的第一个物联网解决方案中所使用的子集,您应该对它们很熟悉。

数量 组件
1 英特尔 Edison 模块
1 英特尔 Edison Arduino 扩展板
1 Grove 基本盾牌 v2
1 Grove 温度传感器 v1.2
1 Grove 通用 4 针线缆

在这些假设的前提下,用于此应用程序的设备如下图所示连接。在这里,我们已经将 Grove 温度传感器连接到基本盾牌上的A3连接插孔。


此图像是使用 Fritzing 创建的,并在 CC BY-SA 3.0 下许可;请参阅 https://creativecommons.org/licenses/by-sa/3.0/

这样就完成了监测食品箱运输的设备。

固件开发

下面的代码是从第二章创建您的第一个物联网解决方案中借用的,因为它具有相同的硬件特性和相同的目标。

唯一的修改是在已发布的 JSON 中:在从工厂运输到仓库时,我们必须移除soilMoisture属性,并在从仓库运输到商店时添加箱子 ID,并在添加托盘 ID 时进行运输。

它获取 Grove 传感器的温度并将其发布到 Watson IoT 平台:

var iotf = require("ibmiotf");
var mraa = require('mraa');
var config = require("./device.json");
var deviceClient = new iotf.IotfDevice(config);
var temperatureSensor = new mraa.Aio(3);
var RESISTOR = 100000;
var THERMISTOR = 4250;
var getTemperature = function() {
    var sensorReading = temperatureSensor.read();
    var R = 1023 / sensorReading - 1;
    R = RESISTOR * R;
    var temperature = 1 / (Math.log(R/RESISTOR)/THERMISTOR+1/298.15)-273.15;
    return temperature;
};
deviceClient.connect();
deviceClient.on('connect', function(){
    console.log("connected");
    setInterval(function function_name () {
// When transporting from Factory to Warehouse
    deviceClient.publish('status','json','{ "foodBoxId":"1", "temperature":+         getTemperature()}',         2);
// When transporting from Warehouse to Store
// deviceClient.publish('status','json','{ "palletId":"1", "temperature":+ 
// getTemperature()}', 2);
 },300000);
});

应用程序开发

由于我们在本地运行 Hyperledger 环境,因此在此开发的应用程序必须在与 Hyperledger 相同的网络上运行。鉴于我们不是在 IBM Cloud/Bluemix 上运行它,配置将存储在 JSON 文件中,在与应用程序的主.js文件相同的目录中运行。

配置 JSON 文件的内容结构列在这里,并且必须更新为在第二章创建您的第一个物联网解决方案中定义的详细信息。

{
    "org": "<your IoT organization id>",
    "id": "sample-app",
    "auth-key": "<application authentication key>",
    "auth-token": "<application authentication token>"
}

应用程序代码接收设备发布的所有事件,并使用收集的温度更新托盘中的FoodBoxes

// Composer Rest Server definitions
var request = require('request');
var UPDATE_BOX_URL = "http://<composer rest server url>:3004/api/UpdateFoodBoxTransportationData"
var UPDATE_PALLET_URL = "http://<composer rest server url>:3004/api/UpdateTransportationData"
// Watson IoT definitions
var Client = require("ibmiotf");
var appClientConfig = require("./application.json");
var appClient = new Client.IotfApplication(appClientConfig);
appClient.connect();]
appClient.on("connect", function () {
 appClient.subscribeToDeviceEvents();
});
appClient.on("deviceEvent", function (deviceType, deviceId, eventType, format, payload) {
 // update food box
 // updateFoodBox(payload.temperature);
 // update pallet
 // updatePallet(payload.temperature);
 });

以下代码通过 Composer REST 服务器调用区块链网络中定义的交易:

var updateFoodBox = function (temperature) {
   var options = {
      uri: UPDATE_BOX_URL,
      method: 'POST',
      json: {
  "$class": "com.packtpublishing.businessnetwork.foodsafety.UpdateFoodBoxTransportationData",
  "asset": "resource:com.packtpublishing.businessnetwork.foodsafety.FoodBox#<YOUR FOODBOX ID>",
  "locationInformation": {
    "$class": "com.packtpublishing.businessnetwork.foodsafety.Location",
    "date": "2018-12-24T15:08:27.912Z",
    "location": "<LOCATION TYPE>",
    "locationIdentifier": "<LOCATION ID>",
    "status": "<LOCATION STATUS>"
  },
  "measurementInformation": {
    "$class": "com.packtpublishing.businessnetwork.foodsafety.Measurement",
    "date": "2018-12-24T15:08:27.912Z",
    "value": 0
  }
}
    };
}
var updatePallet = function (temperature) {
    var options = {
      uri: UPDATE_BOX_URL,
      method: 'POST',
      json: {
  "$class": "com.packtpublishing.businessnetwork.foodsafety.UpdateTransportationData",
  "asset": "resource:com.packtpublishing.businessnetwork.foodsafety.FoodBoxPallet#<YOUR PALLET ID>",
  "locationInformation": {
    "$class": "com.packtpublishing.businessnetwork.foodsafety.Location",
    "date": "2018-12-24T15:09:02.944Z",
    "location": "<LOCATION TYPE>",
    "locationIdentifier": "<LOCATION ID>",
    "status": "<STATUS>"
  },
  "measurementInformation": {
    "$class": "com.packtpublishing.businessnetwork.foodsafety.Measurement",
    "date": "2018-12-24T15:09:02.944Z",
    "value": 0
  }
}
    };
}

端到端测试

为了测试目的,我们将使用 Hyperledger Composer Playground 进行大部分操作,除了运输者更新。所以,在这一点上,您可以停止之前启动的所有 Composer REST 服务器,除了在传输者参与者上启动的服务器(监听端口 3004)。

如果您在开发环境设置期间安装了 Hyperledger Composer Playground,则您只需运行composer-playground命令,或者使用npm进行安装(npm install -g composer-playground)。

您的默认浏览器将打开 Composer-Playground Web 应用程序,如下截图所示:


Composer playground 登陆页面

你可以看到之前创建的相同参与者。

创建一个食品箱

根据我们授予的权限,工厂可以创建FoodBoxes。让我们来看看如何:

  1. 找到 Factory 1 @food-safety-b10407 名片,选择 Connect now 选项。然后,点击屏幕左上角的测试。
  2. 在左侧面板中,选择资产 -> 食品箱,并在右上角点击 + 创建新资产:


  1. 用以下内容填写 JSON 并使用“创建新建”按钮创建资产:
{
  "$class": "com.packtpublishing.businessnetwork.foodsafety.FoodBox",
  "foodBoxIdentifier": "2015",
  "assetTrackingInformation": [],
  "measureTrackingInformation": [],
  "owner": "resource:com.packtpublishing.businessnetwork.foodsafety.FoodFactory#1"
}

将资产转移给运输者

使用 Hyperledger Composer Playground 转移食品安全网络的资产,请按照以下步骤进行:

  1. 在应用程序的右上角,选择“我的业务网络”选项,并作为运输者连接。
  2. 如果您选择测试,资产 → 食品箱,您将看到没有可用的资产:


  1. 返回到“工厂”身份,选择资产数据右侧的编辑按钮,并使用以下数据更新 JSON 文件:
{
 "$class": "com.packtpublishing.businessnetwork.foodsafety.FoodBox",
 "foodBoxIdentifier": "1",
 "assetTrackingInformation": [],
 "measureTrackingInformation": [],
 "owner": "resource:com.packtpublishing.businessnetwork.foodsafety.Transporter#2"
}
  1. 保存资产;它将从工厂视图中消失。当您返回到运输者视图时,您会发现运输者现在可以看到该资产。

在运输过程中测量温度

在这一点上,我们将模拟运输过程中的温度测量。

我们在 IoT 应用程序代码中创建了以下注释代码,因为我们在不同时间处理传输收集的数据。

首先是当一个FoodBox工厂运到仓库时,这是由updateFoodBox函数实现的,而updatePallet函数旨在处理从仓库到商店的运输:

appClient.on("deviceEvent", function (deviceType, deviceId, eventType, format, payload) {
 // update food box
 // updateFoodBox(payload.temperature);
 // update pallet
 // updatePallet(payload.temperature);
 });

此时,我们正在处理从 工厂仓库 的运输,因此取消注释代码的第 19 行—updateFoodBox(payload.temperature);— 然后更新第 30、34、35 和 36 行,提供正确的数据值。

确保运输车的 Composer REST 服务器正在运行,并且设备代码的第 2 和第 3 行中定义的 URL 指向正确的 Composer REST 服务器主机。

启动设备应用程序。

将资产转移到仓库

当资产转移到运输车时,情况也是如此。转到运输车的资产视图,编辑 JSON 文件,并使用相应的值更改所有者:

"owner": "resource:com.packtpublishing.businessnetwork.foodsafety.Warehouse#3"

创建一个托盘并将箱子添加到其中

要创建托盘,我们需要按照与 FoodBox 相同的过程进行操作:

  1. 在左侧面板中,选择 Assets → FoodBoxPallet,然后在右上角点击 + 创建新资产。
  2. 然后,使用以下数据填充 JSON。确保您在 foodBoxInPallet 字段中使用相同的 FoodBox ID,而在 owner 字段中使用 Warehouse ID (3):
{
 "$class": "org.hyperledger.composer.system.AddAsset",
 "resources": [
 {
 "$class": "com.packtpublishing.businessnetwork.foodsafety.FoodBoxPallet",
 "foodBoxPalletIdentifier": "3485",
 "foodBoxInPallet": "resource:com.packtpublishing.businessnetwork.foodsafety.FoodBox#2473",
 "assetTrackingInformation": [],
 "measureTrackingInformation": [],
 "owner": "resource:com.packtpublishing.businessnetwork.foodsafety.Warehouse#3"
 }
 ],
 "targetRegistry": "resource:org.hyperledger.composer.system.AssetRegistry#com.packtpublishing.businessnetwork.foodsafety.FoodBoxPallet",
 "transactionId": "0dfe3b672a78dd1d6728acd763d125f813ed0ca74450a2596b9cf79f47f054ad",
 "timestamp": "2018-12-24T14:43:34.217Z"
}
  1. 创建托盘后,像以前一样将托盘和箱子转移到运输车上。 JSON 的所有者值应如下所示:
"owner": "resource:com.packtpublishing.businessnetwork.foodsafety.Transporter#2"

在运输托盘时测量温度

这与 FoodBox 运输的测量规则相同,但您必须注释设备代码的第 19 行并取消注释第 20 行,以及更新第 53、57、58 和 59 行的正确值以适用于您的托盘。

在运输结束时,通过使用托盘的 owner 和以下行将资产转移到仓库中的箱子:

"owner": "resource:com.packtpublishing.businessnetwork.foodsafety.Store#4"

跟踪食品盒

要跟踪食品盒作为消费者,我们将通过 composer-playground 使用 Hyperledger Composer Historian。

要访问已应用于资产的操作历史记录,请使用 Consumer business card 连接到 Hyperledger 环境,并从游乐场的左侧面板中选择 All Transactions 选项。

我们将能够查看对资产执行的所有交易,从其创建到托盘及其内部箱子到达仓库为止:


Composer 游乐场 - 历史学家

我们还可以通过单击查看记录链接来查看交易详细信息,如下所示:


摘要

在本章中,我们学习了如何使用 Hyperledger Composer 和 Watson IoT 平台创建业务网络。

在开发解决方案的过程中,我们能够使用 Yeoman 创建 Hyperledger Composer 项目;定义共享数据结构;创建资产、参与者交易和访问控制列表;以及创建网络的第一个版本并将其升级为新版本。

我们还能够创建一个设备,负责从工厂到仓库的食品箱的假设运输中读取温度,并且后来,从仓库到商店,将该信息添加到区块链网络的共享账本中的食品箱资产中。

食品箱的消费者还能够追踪与该箱相关的信息,从生产链的最初开始。

尽管 Hyperledger Composer 和 Watson IoT 开发相当简单,但我们所创建的解决方案解决了食品链安全方面的重大问题。

以下章节将向您介绍作者对实际项目中所学到的教训、实践和模式的观点,以及在当前工业 4.0 情景下,物联网和区块链如何成为创造业务模型和解决新挑战的必要工具。

第八章:物联网、区块链和工业 4.0

物联网和区块链并不是推动新经济和制造革命演进的唯一技术集合。工业 4.0 是一个概念,发生在一个新方法、新技术和空前的计算能力的时代,任何拥有互联网接入的人都可以使用。

在本章中,我们将探讨物联网(IoT)、区块链和云计算等关键技术的作用,重点关注这些因素如何推动工业 4.0 的演进。

本章将涵盖以下主题:

  • 云计算在新经济模型中的作用
  • 物联网如何帮助创新产业
  • 区块链作为工业 4.0 的业务平台

工业 4.0

工业 4.0,又称为经济 4.0,是一个新的制造模式的名称,其中连接性、数据收集和处理广泛应用于整个制造链中。

智能工厂与自动化工厂的区别在于,智能工厂不仅仅是自动化的;它们是连接的、可监控的、协作的。

重要的是要知道,工业 4.0 不仅与制造业有关;它可以被理解为设计新的制造模式,旨在创造更个性化和引人入胜的体验。 新模式强调拥有数据是成功的关键因素,并且在当前业务模型的交叉点上正在创建新的商业模型。 云计算、物联网、认知计算和区块链是推动这一新模式的一些技术。

区块链和物联网解决方案实用指南(二)(3)https://developer.aliyun.com/article/1515723

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
1天前
|
供应链 物联网 区块链
新兴技术趋势与应用:探索区块链、物联网和虚拟现实的未来
在科技迅猛发展的今天,区块链、物联网和虚拟现实等新兴技术正逐步改变我们的生活和工作方式。这些技术不仅在各自领域内展现出巨大的潜力,还通过相互交织和融合,为社会带来全新的应用场景和解决方案。本文将深入探讨这些新兴技术的发展趋势,并剖析其在不同领域中的实际应用,从而揭示它们对未来社会的深远影响。
7 1
|
1天前
|
监控 供应链 物联网
新兴技术趋势与应用:区块链、物联网、虚拟现实的融合与发展
【6月更文挑战第13天】随着科技的飞速发展,新兴技术如区块链、物联网、虚拟现实等正在逐渐改变我们的生活和工作方式。本文将探讨这些技术的发展趋势和应用场景,以及它们如何相互融合,为我们带来更便捷、高效和安全的未来。
|
2天前
|
供应链 安全 物联网
新兴技术浪潮下的未来图景:区块链、物联网与虚拟现实的融合与创新
【6月更文挑战第12天】随着技术的不断进步,新兴技术如区块链、物联网和虚拟现实正在逐渐改变我们的工作和生活方式。这些技术不仅各自拥有独特的发展趋势,而且在相互融合中展现出无限的可能性。本文将探讨这些技术的发展趋势,并分析它们在各个领域中的应用场景,以揭示它们如何共同塑造未来的技术景观。
|
4天前
|
传感器 供应链 物联网
新兴技术的未来蓝图:区块链、物联网与虚拟现实的前景和应用
在当今快速变化的科技世界中,区块链、物联网(IoT)和虚拟现实(VR)作为新兴技术,正逐步改变各行各业的运作模式和用户体验。本文将深入探讨这些技术的发展趋势和应用场景,展示它们如何在不同领域带来革命性的变革,并对未来的潜在影响进行预判。
19 2
|
4天前
|
存储 供应链 物联网
未来科技的风向标:区块链、物联网与虚拟现实的融合趋势
【6月更文挑战第10天】随着技术的不断进步,新兴技术如区块链、物联网(IoT)、虚拟现实(VR)等正在逐渐改变我们的工作和生活方式。本文将探讨这些技术的发展趋势和应用场景,以及它们如何相互融合,共同推动未来科技的发展。
|
8天前
|
人工智能 物联网 区块链
新兴科技趋势:区块链、物联网、虚拟现实的发展与应用探讨
随着科技的不断发展,新兴技术如区块链、物联网、虚拟现实等正日益成为各行各业的关注焦点。本文将探讨这些新技术的发展趋势和广泛应用场景,以期为读者提供对未来科技发展的深入理解。
10 0
|
9天前
|
传感器 供应链 物联网
新兴科技助力未来发展:区块链、物联网和虚拟现实的趋势与应用
在当今数字化时代,新兴技术如区块链、物联网和虚拟现实正在迅猛发展,为各行各业带来了巨大的变革。本文将探讨这些新技术的发展趋势,并深入剖析它们在不同领域的应用场景,揭示其对未来社会发展的重要影响。
14 0
|
9天前
|
安全 物联网 区块链
未来技术纵横谈:区块链、物联网与虚拟现实的融合革新
【5月更文挑战第37天】 在数字化浪潮不断推进的今天,新兴技术如区块链、物联网(IoT)和虚拟现实(VR)正逐步改变我们的生活与工作方式。这些技术的独立发展已经引起了广泛关注,但它们之间的交叉融合与协同效应,则预示着一个更加智能、互联且安全的未来。本文将深入探讨这些技术的最新发展趋势,以及在不同行业中的创新应用,揭示它们如何共同塑造下一代的技术景观。
|
8天前
|
传感器 监控 安全
楼宇自动化中的物联网技术
【6月更文挑战第7天】物联网技术在楼宇自动化中广泛应用,实现设备智能化监控与管理,提高能效,保障安全与便利。通过远程控制,提升管理效率;示例代码展示灯光控制功能。尽管面临设备兼容性、数据安全挑战,物联网技术前景广阔,将持续推动楼宇自动化发展,塑造更智能、舒适的生活工作环境。
|
9天前
|
存储 安全 算法
物联网中的数据加密技术
【6月更文挑战第1天】物联网中的数据加密技术
60 0