如何通过物联网有效利用会议室?

7月,我们在莫斯科开设了自己的技术和展览中心,即数字领导中心。 这是一个新的活动平台,用于展示与客户和SAP合作伙伴共同开发的创新方案。



在我们自己的中心建设过程中,我们认为不仅要在演示台上展示新技术,而且还要将它们引入中心本身的工作中。
例如,中心的所有大厅和观众都可以变换-分为几个部分-并重新组合成一个空间。 该站点还配备了一个“智能办公室”-资源管理解决方案,带面部识别的摄像头,用于物联网的传感器。

在此过程中,我们提出了一个基于SAP Cloud Platform的简单有效的方案,以监控会议室的有效使用方式。 在本文中,我们将告诉您如何在一天内快速,轻松地组装这种情况。

进一步-关于传感器,SAP Cloud Platform中的IoT服务以及员工的“业力评级”。

我们首先在SAP Cloud Platform上准备与物联网传感器集成的服务。 为了开发解决方案,我们使用了SAP Cloud Platform(SCP)中的IoT Service来自动化数据传输,并使用SCP中的Cloud Foundry开发环境。

我们使用以下传感器进行了演示:

  1. 磁接触传感器,可同时用于开门和关门
  2. 红外运动传感器可检测到进入保护区的情况,在本例中还包括进入会议室的情况

应当对会议室进行监视,以检查员工实际使用场所的方式-会议是否举行或当时会议室是空的,最终有多少人参加会议以及其他详细信息。 因此,您可以收集有关员工在一段时间内如何有效使用会议室的统计信息。


图1. SAP Cloud Platform中的物联网服务架构

我们以SAP Cloud Platform和物联网服务为例。 该平台的体系结构如图1所示,它支持用于将单个设备和访问点(网关)组合到基于SAP Cloud Platform中的物联网服务的公共网络中的功能。

对于没有HTTPS / MQTT协议的设备,以及将设备划分为合并消息并将其集中发送到SAP Cloud of Things的段,将使用IoT GateWay Edge。 这是一个可以通过以下协议与设备通信的软件组件:HTTPS,MQTT,Modbus(1),CoAP,文件(2),OPC UA(3),SigFox(4),SNMP(5)。 此外,开发人员可以使用SDK扩展GateWay功能并实现其协议以与设备交换数据。

注意事项
SAP Cloud Platform文档中的注释:

1)当前使用以下方式实现方式:
•以太网上的TCP / IP
•通过各种媒体(有线:RS-232,RS-485;光纤,无线电等)进行异步串行传输
•ModbusPLUS,一种高速令牌传递网络。
Modbus定义了一个独立于底层通信层的简单协议数据单元。 特定总线或网络上的映射可能会在应用程序数据单元上引入一些其他字段。 该协议遵循客户端-服务器方法,其中客户端启动Modbus事务以轮询服务器以获取数据。

2)适配器的典型工作流程如下:
1.根据一组配置参数读取某个文件。
2.按照适配器解析模式文件的指示浏览文件内容并提取有价值的字段。
3.同样基于适配器的解析模式文件,将此类字段映射到物联网服务的概念和实体(例如,设备寻址元数据,度量等)。
4.将标准化的数据流传输到物联网核心服务。
5.从目标文件的原始位置删除目标文件,然后选择将其备份到另一个文件夹中。
支持的文件格式为JSON,CSV和二进制。 对于二进制文件,该文件作为Base64编码的字符串传输到物联网核心服务。

3)物联网网关通过充当OPC UA客户端来集成OPC UA服务器。 适配器可以连接到服务器以建立OPC UA会话。 在第一次连接时,适配器浏览服务器地址空间并创建带有一组传感器的相应设备。 然后,它通过两个可能的选项配置数据的检索:
•定期提取模式:适配器以可配置的轮询间隔定期轮询服务器以获取数据
•订阅模式:适配器在服务器节点上创建订阅,每当节点的值更改时,服务器本身都会通知该订阅

4)SigFox是一家法国公司,采用基于UNB的(超窄带)无线电技术将IoT设备连接到其网络。 根据特定的地区法规,它目前在欧洲使用868MHz(由ETSI和CEPT定义)和在美国902MHz(由FCC定义)上的ISM频段。 为了扩大服务范围,SigFox与全球多家网络运营商建立了合作伙伴关系。 通过利用这些合作伙伴提供的UNB基础架构,SigFox可以在运行SigFox无线电协议的设备与SigFox云之间进行通信。 在这种情况下,SigFox基础架构充当将设备生成的数据发送到云的传输层。 该层与数据无关,这意味着它不解释数据,而只是传输数据。 考虑到这一点,在其产品上安装SigFox固件的设备制造商可以使用SigFox服务访问其数据,并使用一组REST API来基于此数据构建应用程序。 该图以简化方式说明了SigFox网络。

5)数据流遵循两条路径:
•物联网网关对所有设备进行循环轮询,为每个连接的设备执行完整的MIB-WALK。
•物联网网关从设备接收陷阱(如果设备能够发送陷阱)。

在物联网体系结构中,既可以将GateWay服务部署为SAP Cloud Platform的一部分,也可以部署在最终设备上。 GateWay的主要优势之一是与SAP Cloud Platform集成,因为它解决了将数据从设备传输到云平台的问题。 但是,也可以使用MQTT / HTTPS协议在不使用GateWay的情况下与物联网服务集成。

物联网服务的体系结构是使用Cloud Foundry环境构建的,它允许您将基于Python,JavaScript(Nodejs),Java(Tomcat),Go,Scala 语言开发的应用程序部署到SAP Cloud Platform。 在这种情况下,我们使用Nodejs应用程序服务器创建了自己的服务,用于处理SAP Cloud Platform环境中来自传感器的消息。

可以在此处找到基于Node.js的服务的示例代码。
const http = require('http'); const hdb = require('hdb'); http.createServer(function (req, res) { if (req.method === 'POST') { let body = ''; req.on('data', chunk => { body += chunk.toString(); // convert Buffer to string }); req.on('end', () => { var data = JSON.parse(body); var id = data.id; var data = data.payload; var timestamp = data.TIMESTAMP; var vcap_services = JSON.parse(process.env.VCAP_SERVICES); var db_cred = vcap_services["hana-db"]; var credentials = db_cred[0].credentials; var port = credentials.port; var host = credentials.host; var crt = credentials.certificate; var client = hdb.createClient({ host : host, port : port, user : 'user_name', password : 'password', useTLS: true }); client.on('error', function (err) { console.error('Network connection error', err); }); console.log(client.readyState); // new client.connect(function (err) { if (err) { return console.error('Error:', err); } console.log(client.readyState); // connected }); client.prepare('call NEW_EVENT (?, ?, ?)', function(err, statement){ if (err) { return console.error('Prepare error:', err); } statement.exec({ ID: id, PAYLOAD : data, TS: timestamp}, function(err, affectedRows) { if (err) { return console.error('Exec error:', err); } console.log('Number of affected rows:', affectedRows); }); }); res.write("OK"); res.end(); } 


为了在Nodejs中准备代码,我们使用了node-hdb模块,该模块提供与HANA DBMS的通信,并且已经存在于CloudFoundry的buildpack nodejs中。

在CloudFoundry环境中,您必须定义应用程序和使用的模块之间的依赖关系。 在这种情况下,Nodejs将能够访问该模块并启动我们的应用程序,因此我们在package.json文件中指定了链接

依赖
"dependencies" : {
"hdb" : "0.xx"
}


作为用于创建分析查询的主要数据仓库和引擎,我们使用HANA DBMS。 使用node-hdb模块,可以使用批量插入(以加快数据插入),事务管理(提交,回滚,自动提交),调用存储的SQL过程的功能。

使用物联网传感器获取的数据通过物联网服务到达SAP Cloud Platform,直接到基于Nodejs的服务。 您必须首先在SAP Cloud Internet of Things中配置数据模型和消息格式。

如何快速创建UI并自定义SAP UI5的基本组件?


为了显示服务中会议室的状态,我们使用了GenericTile组件。 图2显示了一个自定义GenericTile组件的示例,该组件指示会议室的状态。



为了在GenericTile组件上绘制图标和彩色显示,我们使用了HTML5 canvas扩展和SAP UI5对象模型的renderer方法。

示例代码可以在这里找到。
 renderer: function (oRM, oControl) { var model; var d; var view = sap.ui.getCore().byId("samplecontainer---mainview"); if (!this.status) this.status = {"door":"","motion":"","color":"#2bbc2d","busy":0}; if (view != undefined) model = view.getModel("DT1"); if (model != undefined){ d = JSON.parse(model.getJSON()); if (this.status){ this.status.busy = d.busy; this.status.door = d.door; this.status.motion = d.motion; this.status.color = d.color; } } oRM.write("<div"); oRM.writeControlData(oControl); oRM.write(">"); </spoiler> if (this.status.busy == 0){ oRM.write("<img id='iDT1' src='/iotex/images/room_empty.png' alt='Empty' height='64' width='70'>"); } else { oRM.write("<img id='iDT1' src='/iotex/images/room_booked.png' alt='Booked' height='64' width='70'>"); } oRM.write("<canvas id='cDT1' width='30' height='30'></canvas>"); oRM.write("<script>"); oRM.write("var canvas = document.getElementById('cDT1');"); oRM.write("var context = canvas.getContext('2d');"); oRM.write("var centerX = canvas.width / 2;"); oRM.write("var centerY = canvas.height / 2;"); oRM.write("var radius = 12;"); oRM.write("context.beginPath();"); oRM.write("context.arc(centerX, centerY, radius, 0, 2 * Math.PI, false);"); if ((this.status.busy == 1)&&((this.status.door != 0)||(this.status.motion != 0))){ oRM.write("context.fillStyle = '#f46e41';");//red } else { oRM.write("context.fillStyle = '#ffff00';"); //yellow } if (this.status.busy == 0){ oRM.write("context.fillStyle = '#2bbc2d';"); //green } oRM.write("context.fill();"); oRM.write("</script>"); oRM.write("</div>"); } 


如何在SCP上的应用程序的UI中创建分析查询并显示图形?

从UI5访问SAP HANA中数据的最简单方法是OData协议。 它允许您使用现成的对象模型将数据传输到UI5显示元素。 但是,如果需要复杂的分析查询来形成数据集,则可以抢救SAP HANA中的SQLScript和存储过程。 您也不能诉诸于SQLScript中查询的复杂开发,而只需使用SAP Web IDE中的Calculation View编辑器。


图3. sap.viz.ui5库中的饼图图表示例

用于显示饼图的示例Javascript和SAP UI5代码

在这里显示
 $.ajax ({ type: "GET", url: "/iotex/odatasource/rooms.xsodata/rooms?$format=json", dataType: 'json', async: false, success: function (data, status){ var aData = data.d.results; var UData = {Data: aData}; room_model.setData(UData); } }); View.setModel(room_model,"Rooms"); var oVizFrame = this.oVizFrame = this.getView().byId("idVizFrame"); var oDataset = new sap.viz.ui5.data.FlattenedDataset({ dimensions : [{ name : 'Time', value : "{Time}"}], measures : [{ name : 'Usage', value : '{Value}'} ], data : { path : "/Data" } }); oVizFrame.setDataset(oDataset); oVizFrame.setVizProperties({ title:{ text : "   " }, plotArea: { colorPalette : ['#2bbc2d','#f46e41','#c5f442'], drawingEffect: "glossy" }}); var feedSize = new sap.viz.ui5.controls.common.feeds.FeedItem({ 'uid': "size", 'type': "Measure", 'values': ["Usage"] }), feedColor = new sap.viz.ui5.controls.common.feeds.FeedItem({ 'uid': "color", 'type': "Dimension", 'values': ["Time"] }); oVizFrame.addFeed(feedSize); oVizFrame.addFeed(feedColor); 


若要在饼图上正确显示数据,必须仔细检查FlattenedDataset对象的Path属性中指定的格式的数据路径。 在这种情况下,Path属性指向/ Data对象,因此有必要以所示形式显示所需的JSON结构。

在这里
 var datapiechart = { "Data" : []}; var yellow = {"Time":"Abused","Value":data.yellow}; var red = {"Time":"Occupied","Value":data.red}; var green = {"Time":"Free","Value":data.green}; datapiechart.Data.push(yellow); datapiechart.Data.push(red); datapiechart.Data.push(green); var mod = viz.getModel(); mod.setData(datapiechart); viz.setModel(mod); 


为了显示有关预定会议室用户的统计信息(参见图4),我们使用了一个简单的UI5 Table元素。 它显示取决于事件“访问”次数的“积分”。 因此,可以确定保留会议室的不道德雇员。


图4.特定用户的访问统计

使用物联网服务以及SAP Cloud Platform中的CloudFoundry环境,您可以快速创建IoT服务并将其轻松集成到任何设备。 作为物联网服务参考信息的来源,您可以使用该链接 ,其中详细描述了服务的体系结构并提供了代码示例。



您还可以在此处使用“试用”访问来测试Cloud Foundry环境,方法是先按“登录”按钮并完成注册过程。

Source: https://habr.com/ru/post/zh-CN422475/


All Articles