区块链和物联网解决方案实用指南(二)(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天前
|
供应链 安全 物联网
未来科技的融合与创新:区块链、物联网与虚拟现实的交响曲
【6月更文挑战第20天】本文深入剖析了区块链技术、物联网(IoT)以及虚拟现实(VR)三大领域的最新发展趋势,并探讨它们在多个应用场景中的相互作用和综合应用潜力。通过分析这些技术的独特属性和优势,文章揭示了它们如何相互补充,共同推动着智能技术和数字化转型的新浪潮。进一步地,本文提出了一系列创新的应用模式,旨在激发读者对这些技术未来可能性的想象。
|
1天前
|
供应链 监控 物联网
未来技术的潮流:区块链、物联网与虚拟现实的融合与创新
【6月更文挑战第20天】在技术不断进步的时代,新兴技术如区块链、物联网(IoT)和虚拟现实(VR)正在逐渐改变我们的生活和工作方式。本文将深入探讨这些技术的发展趋势和应用场景,以及它们如何相互融合,创造出新的商业模式和用户体验。我们将看到,随着这些技术的成熟和应用,未来的世界将变得更加智能、互联和沉浸。
|
1天前
|
数据采集 物联网 区块链
未来触手可及:探索区块链、物联网与虚拟现实的融合革新
【6月更文挑战第20天】在数字化浪潮中,新兴技术的融合正开启着前所未有的创新之门。本文将深入探讨区块链技术、物联网(IoT)、以及虚拟现实(VR)如何相互交织,共同塑造一个更加智能、互联的未来世界。我们将从技术发展的现状出发,分析它们各自的独特优势,进而阐述当这些技术结合时可能催生的新应用场景和商业模式,以及这一趋势对社会经济的潜在影响。最终,文章将提供对这些技术未来发展的展望,为读者描绘一个由区块链、物联网和虚拟现实共同构建的未来图景。
|
2天前
|
监控 安全 物联网
新兴技术的未来:区块链、物联网与虚拟现实的应用与展望
在当今科技迅猛发展的时代,区块链、物联网和虚拟现实正逐步改变各行各业的面貌。这篇文章深入探讨了这些新兴技术的发展趋势及其在实际应用中的广泛前景,并着重分析它们如何革新商业模式、提升用户体验以及促进社会进步。
11 1
|
2天前
|
传感器 供应链 物联网
新兴科技驱动下的未来:区块链、物联网与虚拟现实的发展与应用探析
随着科技的迅猛发展,区块链、物联网和虚拟现实等新兴技术正成为未来的关键驱动力。本文将深入探讨这些技术的发展趋势与广泛应用场景,揭示它们在不同领域中的革新潜力和实际应用价值。
7 1
|
2天前
|
存储 供应链 物联网
新技术革命:区块链、物联网、虚拟现实引领未来发展
在当今数字化时代,新兴技术如区块链、物联网、虚拟现实正以前所未有的速度蓬勃发展,并在各行各业展现出巨大的潜力。本文探讨这些新技术的发展趋势和应用场景,展示它们在推动未来社会进步和创新中的重要作用。
6 0
|
2天前
|
存储 安全 物联网
未来已来:探索区块链、物联网与虚拟现实技术的融合趋势
【6月更文挑战第19天】随着科技的不断进步,新兴技术如区块链、物联网(IoT)和虚拟现实(VR)已经逐渐从概念走向实际应用,它们之间的融合预示着一个全新的技术革命。本文将深入探讨这些技术各自的发展趋势,并分析它们如何相互促进,共同塑造未来的应用场景。我们将看到,这些技术的融合不仅能够推动创新的发展,还将重塑多个行业的运作方式。
|
2天前
|
存储 供应链 安全
探索区块链技术在供应链管理中的应用
【6月更文挑战第19天】随着技术的不断进步,区块链技术已经从加密货币的幕后走向前台,开始在多个行业中扮演重要角色。本文将深入探讨区块链技术如何革新现代供应链管理,通过案例分析揭示其在实际业务中的价值与挑战,并讨论未来发展趋势。
|
1天前
|
存储 供应链 安全
探索区块链技术在供应链管理中的应用
本文将深入探讨区块链技术如何革新传统供应链管理。区块链,作为一种分布式账本技术,提供了一种透明、安全的数据记录和交换方式。我们将讨论其核心特性,包括去中心化、不可篡改性以及智能合约功能,并分析它们如何增强供应链的透明度、效率和安全性。此外,文章还将介绍一些实际应用案例,展示区块链如何解决供应链管理中的一些常见问题,如产品溯源、库存管理和合作伙伴间的信任问题。最后,我们会讨论区块链技术面临的挑战和未来发展方向。
|
2天前
|
存储 物联网 区块链
未来技术的融合与创新:区块链、物联网和虚拟现实的交汇点
在技术不断进步的今天,新兴技术如区块链、物联网(IoT)、和虚拟现实(VR)不仅各自发展迅速,而且在许多场景中开始相互融合。本文将探讨这三种技术如何独立发展,以及它们如何结合创造新的应用场景,从而推动技术革新和社会变革。我们将通过分析它们的发展趋势,探索它们在未来可能带来的影响,并提出这些技术融合的潜在挑战和机遇。

热门文章

最新文章