UNPKG

@mindconnect/mindconnect-nodejs

Version:

NodeJS Library for Siemens Insights Hub Connectivity - TypeScript SDK for Insights Hub and Industrial IoT - Command Line Interface - Insights Hub Development Proxy (Siemens Insights Hub was formerly known as MindSphere)

155 lines 8.35 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); // Copyright (C), Siemens AG 2017 const __1 = require(".."); (function () { return __awaiter(this, void 0, void 0, function* () { const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); const configuration = require("../../agentconfig.json"); const agent = new __1.MindConnectAgent(configuration); const log = (text) => { console.log(`[${new Date().toISOString()}] ${text.toString()}`); }; const RETRYTIMES = 5; // retry the operation before giving up and throwing exception // onboarding the agent // Check in the local agent state storage if agent is onboarded. // https://developer.siemens.com/industrial-iot-open-source/mindconnect-nodejs/agent-development/agent-state-storage.html if (!agent.IsOnBoarded()) { // wrapping the call in the retry function makes the agent a bit more resillient // if you don't want to retry the operations you can always just call await agent.OnBoard(); instead. yield (0, __1.retry)(RETRYTIMES, () => agent.OnBoard()); log("Agent onboarded"); } // you can use agent.Sdk().GetAssetManagementClient() to get the asset id and asset type from mindsphere const targetAssetId = "1234567...."; const targetAssetType = `${agent.GetTenant()}.Engine`; // create data sourceconfiguration and mappings // this generates a data source configuration from an asset type const config = yield agent.GenerateDataSourceConfiguration(targetAssetType); // create/overwrite the data source configuration yield agent.PutDataSourceConfiguration(config); // create mappings for asset id const mappings = yield agent.GenerateMappings(targetAssetId); // store mappings in mindsphere yield agent.PutDataMappings(mappings); // instead of creating the data source configuration and mappings separately // you can also just use the method below which takes care of everything // this is only used for 1:1 asset -> agent mappings // the method above can also map the data source configuration to multiple assets // just call GenerateMappings with different asset ids yield agent.ConfigureAgentForAssetId(targetAssetId); // Check in the local agent state storage if agent has data source configuration. if (!agent.HasDataSourceConfiguration()) { yield (0, __1.retry)(RETRYTIMES, () => agent.GetDataSourceConfiguration()); log("Configuration aquired"); } for (let index = 0; index < 5; index++) { try { log(`Iteration : ${index}`); // if you have configred the data points in the mindsphere UI you will have to use the long integer values instead of descriptive dataPointIds. const values = [ { dataPointId: "DP-Temperature", qualityCode: "0", value: (Math.sin(index) * (20 + (index % 2)) + 25).toString(), }, { dataPointId: "DP-Pressure", qualityCode: "0", value: (Math.cos(index) * (20 + (index % 25)) + 25).toString(), }, { dataPointId: "DP-Humidity", qualityCode: "0", value: ((index + 30) % 100).toString(), }, { dataPointId: "DP-Acceleration", qualityCode: "0", value: (1000.0 + index).toString(), }, { dataPointId: "DP-Frequency", qualityCode: "0", value: (60.0 + index * 0.1).toString(), }, { dataPointId: "DP-Displacement", qualityCode: "0", value: (index % 10).toString(), }, { dataPointId: "DP-Velocity", qualityCode: "0", value: (50.0 + index).toString(), }, ]; // same like above, you can also just call await agent.PostData(values) if you don't want to retry the operation // this is how to send the data with specific timestamp // await agent.PostData(values, new Date(Date.now() - 86400 * 1000)); yield (0, __1.retry)(RETRYTIMES, () => agent.PostData(values)); log("Data posted"); yield sleep(1000); const event = { entityId: agent.ClientId(), // use assetid if you want to send event somewhere else :) sourceType: "Event", sourceId: "application", source: "Meowz", severity: 20, // 0-99 : 20:error, 30:warning, 40: information timestamp: new Date().toISOString(), description: "Test", }; // send event with current timestamp; you can also just call agent.PostEvent(event) if you don't want to retry the operation yield (0, __1.retry)(RETRYTIMES, () => agent.PostEvent(event)); log("event posted"); yield sleep(1000); // upload file // the upload-file can be a multipart operation and therefore can be configured to // retry the upload of the chunks instead the upload of the whole file. // if you don't specify the type , the mimetype is automatically determined by the library yield agent.UploadFile(agent.ClientId(), "custom/mindsphere/path/package.json", "package.json", { retry: RETRYTIMES, description: "File uploaded with MindConnect-NodeJS Library", chunk: true, // the chunk parameter activates multipart upload }); log("file uploaded"); yield sleep(1000); const yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); const bulk = [ { timestamp: yesterday.toISOString(), values: [ { dataPointId: "DP-Temperature", qualityCode: "0", value: "10" }, { dataPointId: "DP-Pressure", qualityCode: "0", value: "10" }, ], }, { timestamp: new Date().toISOString(), values: [ { dataPointId: "DP-Temperature", qualityCode: "0", value: "10" }, { dataPointId: "DP-Pressure", qualityCode: "0", value: "10" }, ], }, ]; yield (0, __1.retry)(RETRYTIMES, () => agent.BulkPostData(bulk)); log("bulk data uploaded"); yield sleep(1000); } catch (err) { // add proper error handling (e.g. store data somewhere, retry later etc. ) console.error(err); } } }); })(); //# sourceMappingURL=test-agent.js.map