区块链和物联网解决方案实用指南(二)(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
相关文章
|
6天前
|
供应链 物联网 区块链
新技术浪潮下的变革:区块链、物联网与虚拟现实的融合与创新####
【10月更文挑战第21天】 本文深入剖析了当下三大前沿技术——区块链、物联网(IoT)与虚拟现实(VR)的最新发展趋势,并探讨了它们各自在实际应用中的突破性进展与交叉融合的创新潜力,特别是在提升数据安全、优化用户体验及推动行业数字化转型方面的贡献。通过实例分析,本文揭示了这些技术如何单独及协同作用,重塑传统行业格局,促进数字经济与实体经济深度融合,开启智能化、透明化与沉浸式体验的新纪元。 ####
52 27
|
17天前
|
存储 安全 物联网
未来已来:区块链技术在物联网与虚拟现实中的应用
随着科技的不断进步,新兴技术如区块链、物联网(IoT)和虚拟现实(VR)正在逐渐改变我们的生活和工作方式。本文将探讨这些技术的发展趋势和应用场景,以及它们如何相互融合,为我们带来更便捷、安全和沉浸式的体验。
|
17天前
|
物联网 区块链 vr&ar
探索未来:区块链、物联网与虚拟现实的革新之路
随着科技的飞速发展,新兴技术如区块链、物联网(IoT)和虚拟现实(VR)正在重塑我们的世界。本文将深入探讨这些技术的发展趋势和应用场景,揭示它们如何相互交织,共同构建一个更加互联、高效和沉浸式的未来。我们将通过实际代码示例,展示这些技术如何在现实生活中得到应用,并讨论它们面临的挑战及解决方案。让我们一起踏上这场技术革命的旅程,探索它们的无限可能。
34 9
|
17天前
|
供应链 物联网 新制造
新技术浪潮:区块链、物联网与虚拟现实的融合创新###
随着科技的迅猛发展,新兴技术如区块链、物联网和虚拟现实正逐步改变我们的生活。本文将探讨这些技术的发展趋势和应用场景,并分析它们如何相互融合,创造出更加智能、互联和沉浸式的未来世界。 ###
|
19天前
|
供应链 物联网 区块链
新技术趋势与应用:探讨新兴技术如区块链、物联网、虚拟现实等的发展趋势和应用场景
本文将探讨新兴技术的发展趋势和应用场景,包括区块链技术、物联网和虚拟现实等。我们将深入了解这些技术的发展现状,以及它们在未来可能带来的变革。同时,我们还将提供一些代码示例,以帮助读者更好地理解这些技术的应用。
|
22天前
|
供应链 物联网 区块链
未来技术的脉动:探索区块链、物联网与虚拟现实的融合趋势
本文深入探讨了区块链技术、物联网(IoT)和虚拟现实(VR)这三个领域的最新发展趋势,以及它们在现代科技生态中的交互作用。通过分析这些技术的独特优势和面临的挑战,我们揭示了它们如何共同塑造未来的技术景观,特别是在数据安全、智能设备管理和沉浸式体验方面。文章还讨论了这些技术融合后可能带来的社会和文化影响,以及它们如何推动创新和促进经济增长。
48 3
|
23天前
|
传感器 物联网 区块链
新技术趋势与应用:探讨新兴技术如区块链、物联网、虚拟现实等的发展趋势和应用场景###
随着科技的不断进步,新兴技术如区块链、物联网和虚拟现实正逐步改变我们的生活和工作方式。本文将探讨这些技术的发展趋势和应用场景,旨在提供一个全面的概述,帮助读者理解它们对未来可能产生的影响。 ###
22 0
|
1月前
|
存储 安全 物联网
政府在推动物联网技术标准和规范的统一方面可以发挥哪些作用?
政府在推动物联网技术标准和规范的统一方面可以发挥哪些作用?
100 50
|
1月前
|
安全 物联网 物联网安全
制定统一的物联网技术标准和规范的难点有哪些?
制定统一的物联网技术标准和规范的难点有哪些?
51 2
|
1月前
|
供应链 物联网 区块链
探索未来技术潮流:区块链、物联网、虚拟现实的融合与创新
【10月更文挑战第41天】随着科技的不断进步,新技术如区块链、物联网、虚拟现实等正在逐步渗透到我们的日常生活中。本文将深入探讨这些技术的发展趋势和应用场景,以及它们如何相互融合,共同推动社会的进步。我们将通过具体的代码示例,展示这些技术在实际应用中的潜力和价值。无论你是科技爱好者,还是对未来充满好奇的探索者,这篇文章都将为你打开一扇通往未来的窗口。
100 56