Как эффективно использовать переговорные комнаты при помощи интернета вещей?

в 9:59, , рубрики: internet of things, sap, sap cloud platform, Блог компании SAP, Интернет вещей, разработка, Разработка для интернета вещей, умный дом

В июле мы открыли в Москве собственный технологический и выставочный хаб — Центр цифрового лидерства. Это новая площадка для мероприятий, демонстрации новых инновационных сценариев, разработанных совместно с клиентами и партнёрами SAP.

Как эффективно использовать переговорные комнаты при помощи интернета вещей? - 1

При строительстве собственного Центра мы решили, что необходимо не просто показывать новые технологии в качестве демо-стендов, но и также внедрять их в работу самого Центра.
Например, все залы и аудитории в Центре могут трансформироваться – делиться на несколько частей — и вновь объединяться в единое пространство. Также площадка оборудована «умным офисом» — решениями для управления ресурсами, камерами с функцией распознавания лиц, датчиками для интернета вещей.

В процессе мы придумали простой и эффективный сценарий на базе SAP Cloud Platform для мониторинга того, как эффективно используются переговорные комнаты. В этой статье мы расскажем, как можно быстро и просто собрать такой сценарий за один день.

Далее — про датчики, IoT-сервис в SAP Cloud Platform и «рейтинг кармы» для сотрудников.

Мы начали работу c подготовки сервисов в SAP Cloud Platform для интеграции с датчиками для интернета вещей. Для разработки решения мы использовали IoT Service в SAP Cloud Platform (SCP) для автоматизации передачи данных, а также среду разработки Cloud Foundry в SCP.

Демо-пример мы сделали с помощью этих датчиков:

  1. Магнитоконтактный датчик, который срабатывает как на открывание, так и на закрывание дверей
  2. Инфракрасный датчик движения для обнаружения проникновения в охраняемую зону, а в нашем случае ещё и в переговорную комнату

Мониторинг переговорных комнат нужно проводить, чтобы проверять, как сотрудники используют помещения на самом деле – состоялась ли встреча или переговорная была пустой в это время, сколько людей в итоге посетило встречу и другие детали. В результате можно собирать статистику о том, как сотрудники эффективно использовали переговорные в течение определённого периода времени.

Как эффективно использовать переговорные комнаты при помощи интернета вещей? - 2
Рис 1. Архитектура сервиса Internet of Things в SAP Cloud Platform

В качестве основы для данного примера мы использовали SAP Cloud Platform и сервис Internet of Things. Архитектура платформы представлена на Рис.1, она поддерживает функции для объединения как отдельных устройств, так и точек доступа (Gateway) в общую сеть на основе сервиса Internet of Things в SAP Cloud Platform.

Для устройств без поддержки протоколов HTTPS/MQTT, а также для разделения устройств на сегменты, которые консолидируют сообщения и отправляют их централизованно в SAP Cloud Internet of Things, используется IoT GateWay Edge. Это программный компонент, который умеет общаться с устройствами по протоколам: HTTPS, MQTT, Modbus(1), CoAP, File(2), OPC UA (3), SigFox(4), SNMP(5). Дополнительно разработчик может использовать SDK для расширения возможностей GateWay и имплементации своих протоколов по обмену данными с устройствами.

Примечания

Примечания из документации по SAP Cloud Platform:

1) Modus is currently implemented using:
• TCP/IP over Ethernet
• Asynchronous serial transmission over various media (wire: RS-232, RS-485; fiber, radio, and so on)
• ModbusPLUS, a high speed token passing network.
Modbus defines a simple protocol data unit that is independent of the underlying communication layers. The mapping on specific buses or networks can introduce some additional fields on the application data unit. The protocol follows a client-server approach, where a client initiates a Modbus transaction to poll a server for data.

2) The typical workflow of the adapter is the following:
1. Read a certain file, based on a set of configuration parameters.
2. Go through the file content and extract valuable fields as instructed by an adapter parsing schema file.
3. Map such fields onto the concepts and entities of the Internet of Things Service (for example, device addressing metadata, measurements and so on), also based on the parsing schema file of the adapter.
4. Stream normalized data up to Internet of Things Core Service.
5. Remove the target file from its original location and, optionally, back it up into another folder.
The supported file formats are JSON, CSV, and binary. For binary, the file is transferred as a Base64 encoded string to the Internet of Things Core Service.

3) The Internet of Things Gateway integrates OPC UA Servers by acting as an OPC UA Client. The adapter can connect to the server to establish an OPC UA session; at first connection, the adapter browses the server address space and creates a corresponding device with a set of sensors. Then, it configures the retrieval of data, per two possible options:
• Periodic pull mode: the adapter polls the server for data on a periodic base, with a configurable polling interval
• Subscription mode: the adapter creates a subscription on the server nodes, to be notified by the server itself whenever the value of a node changes

4) SigFox is a French company employing a UNB-based (Ultra Narrow Band) radio technology to connect IoT devices to its network. It currently uses the ISM band on 868MHz (as defined by ETSI and CEPT) in Europe and on 902MHz in the US (as defined by the FCC), depending on specific regional regulations. To expand the service coverage area, SigFox has partnerships with several network operators around the world. By utilizing the UNB infrastructure provided by these partners, SigFox enables communication between devices operating the SigFox radio protocol and the SigFox cloud. In this context, the SigFox infrastructure acts as the transport layer which sends the data generated by the devices to the cloud. This layer is data-agnostic, meaning that it does not interpret the data but simply transfers it. Considering this, device manufacturers who install the SigFox firmware on their products can use the SigFox service to access their data, and a set of REST APIs to build applications based on this data. The graphic illustrates the SigFox network in a simplified way.

5) The data flow follows two routes:
• The Internet of Things Gateway issues a cyclic polling over all the devices, performing a complete MIB-WALK for each connected device.
• The Internet of Things Gateway receives traps from devices, if the devices are able to send the traps.

В архитектуре Internet of Things сервис GateWay возможно развернуть как в составе SAP Cloud Platform, так и на конечном устройстве. Одним из серьёзных преимуществ GateWay является интеграция с SAP Cloud Platform, так как он решает задачу по передаче данных от устройств в облачную платформу. Но также возможно осуществлять интеграцию с сервисом Internet of Things и без участия GateWay, по протоколам MQTT/HTTPS.

Архитектура сервиса Internet of Things построена с помощью среды Cloud Foundry, которая позволяет разворачивать в SAP Cloud Platform свои приложения, разработанные на базе языков Python, JavaScript (Nodejs), Java (Tomcat), Go, Scala и др. В данном сценарии мы использовали Nodejs-сервер приложений для создания своего сервиса по обработке сообщений от датчиков в среде SAP Cloud Platform.

Пример кода для сервиса на базе Nodejs можно посмотреть здесь

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 и уже присутствует в buildpack nodejs в CloudFoundry.

В среде CloudFoundry необходимо задать зависимости между приложением и используемыми модулями. В этом случае Nodejs сможет получить доступ к модулю и запустить наше приложение, поэтому мы указываем в файле package.json ссылку

dependency

"dependencies" : {
"hdb" : "0.x.x"
}

В качестве основного хранилища данных и движка для создания аналитических запросов мы используем СУБД HANA. При помощи модуля node-hdb можно использовать возможности Bulk Insert (для ускорения вставки данных), управление транзакциями (commit, rollback, autocommit), вызов хранимых SQL-процедур.

Данные, полученные с помощью датчиков интернета вещей, поступают через Internet of Things Service в SAP Cloud Platform — напрямую в наш сервис на базе Nodejs. Предварительно необходимо настроить модель данных и формат сообщений в SAP Cloud Internet of Things.

Как быстро создать UI и кастомизировать базовые компоненты SAP UI5?

Для отображения состояния переговорной комнаты в сервисе мы использовали компонент GenericTile. На Рис.2 показан пример кастомизированного компонента GenericTile для индикации состояния переговорной комнаты.

Как эффективно использовать переговорные комнаты при помощи интернета вещей? - 3

Для прорисовки пиктограмм и цветовой индикации на компоненте GenericTile мы использовали HTML5-расширение canvas и метод renderer объектной модели SAP UI5.

Пример кода можно посмотреть здесь

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>");
		    
		}

Как можно создавать аналитические запросы и отображать графики в UI в приложении на SCP?

Самый простой способ для доступа к данным в SAP HANA из UI5 – протокол OData. Он позволяет использовать готовую объектную модель Model для переноса данных в UI5-элемент отображения. Однако, если требуется сложный аналитический запрос, чтобы сформировать набор данных, то здесь на помощь приходит язык SQLScript и хранимые процедуры в SAP HANA. Также можно не прибегать к сложной разработке запросов на языке SQLScript, а просто воспользоваться редактором Calculation View в SAP Web IDE.

Как эффективно использовать переговорные комнаты при помощи интернета вещей? - 4
Рис 3. Пример графика Pie chart из библиотеки sap.viz.ui5

Пример кода на Javascript и SAP UI5 для отображения графика Pie chart

показан здесь

$.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);

Для корректного отображения данных на графике Pie chart необходимо внимательно проверить путь к данным в формате, указанном в свойстве Path объекта FlattenedDataset. В данном случае свойство 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. Он отображает «баллы», начисленные в зависимости от количества «посещений» мероприятий. Таким образом можно выявлять недобросовестных сотрудников, которые резервируют переговорные комнаты.

Как эффективно использовать переговорные комнаты при помощи интернета вещей? - 5
Рис 4. Статистика посещений по конкретному пользователю

При помощи сервиса Internet of Things, а также среды CloudFoundry в SAP Cloud Platform можно быстро создавать свои сервисы IoT и легко их интегрировать с любыми устройствами. В качестве источника справочной информации по сервису Internet of Things можно использовать ссылку, где подробно описывается архитектура сервиса и приводятся примеры кода.

Как эффективно использовать переговорные комнаты при помощи интернета вещей? - 6

Также для тестирования среды Cloud Foundry можно использовать Trial доступ здесь, предварительно нажав кнопку Login и пройдя процедуру регистрации.

Автор: SAP

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js