From 7fe11468193c4fcaab5099a03b45559d67ce219c Mon Sep 17 00:00:00 2001 From: gesslinger <20811609+gesslinger@users.noreply.github.com> Date: Tue, 16 Apr 2024 11:44:15 +0200 Subject: [PATCH 1/3] chore: update development license agreement --- LICENSE.md | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/LICENSE.md b/LICENSE.md index 11f5778..8f81f08 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,59 +1,59 @@ -# MindSphere Development License Agreement +# Development License Agreement -December 2018 +April 2023 -This Development License Agreement (the “License”) stipulates the rights that Siemens AG, Germany (“Siemens”) grants to you (“you”) in receipt of certain development material in relation to MindSphere (the “Platform”). This material may include software, sample code, scripts, libraries, software development kits, technology, documentation, and other proprietary material or information (collectively, the “Licensed Material”). +This Development License Agreement (the “License”) stipulates the rights that Siemens AG, Germany (“Siemens”) grants to you (“you”) in receipt of certain development material in relation to Insights Hub and Industrial IoT offerings (the "Platform"). This material may include software, sample code, scripts, libraries, software development kits, technology, documentation, and other proprietary material or information (collectively, the “Licensed Material”). Siemens retains the right to utilize its affiliated companies in pursuing any of its rights and fulfilling any of its obligations under this License. Therefore, the term “Siemens” as used herein may also refer to affiliated companies that are directly or indirectly owned or controlled by the ultimate parent company of Siemens AG and who have been authorized by Siemens AG to distribute the Licensed Material. -## 1. Proprietary Rights in the Licensed Material +## 1. Proprietary Rights in the Licensed Material All rights, title, interest and know-how in and to the Licensed Material, any part and improvement thereof and all intellectual property rights in or to the foregoing, other than those rights expressly granted in this License, shall remain wholly vested in Siemens or its third party business partners and/or licensors. -## 2. License Grant +## 2. License Grant If you have entered a separate commercial license agreement with Siemens that covers the Licensed Material, such license agreement shall prevail and this License shall not apply. You must accept this License to use the Licensed Material. If you use the Licensed Material, any such use shall constitute acceptance of this License. The Licensed Material is licensed, not sold. Subject to the terms and conditions of this License, Siemens grants you a non-exclusive, worldwide, royalty-free, non-transferable right to: -- publish, modify and create derivative works of small source code examples (no longer than 50 lines of code) contained in Licensed Material, -- integrate and publish Licensed Material in software that interoperates with the Platform, e.g. by transmission of data between applications, devices, systems or equipment and the Platform (hereinafter referred as “Customizations”), and license such Customizations to third parties to enable your offering of services relating to the Platform, -- use, run and copy Licensed Material for your own internal use, and -- sublicense Licensed Material to a service provider for the purposes of this section. +* publish, modify and create derivative works of small source code examples (no longer than 50 lines of code) contained in Licensed Material, +* integrate and publish Licensed Material in software that interoperates with the Platform, e.g. by transmission of data between applications, devices, systems or equipment and the Platform (hereinafter referred as “Customizations”), and license such Customizations to third parties to enable your offering of services relating to the Platform, +* use, run and copy Licensed Material for your own internal use, and +* sublicense Licensed Material to a service provider for the purposes of this section. You shall not: -- use the Licensed Material for any other technology than the Platform, or -- use the Licensed Material to abuse the Platform, or to compromise its integrity or security, or -- disassemble or reverse-engineer any Licenses Material provided in object-code format, unless such action is permitted by an applicable Open Source license or the law that applies to you, or -- remove or modify Siemens copyright, patent, trademark or attribution notices in the Licensed Material. +* use the Licensed Material for any other technology than the Platform, or +* use the Licensed Material to abuse the Platform, or to compromise its integrity or security, or +* disassemble or reverse-engineer any Licenses Material provided in object-code format, unless such action is permitted by an applicable Open Source license or the law that applies to you, or +* remove or modify Siemens copyright, patent, trademark or attribution notices in the Licensed Material. -## 3. Feedback +## 3. Feedback If you provide Siemens with feedback regarding the Licensed Material, you grant Siemens a non-exclusive, worldwide, royalty-free and perpetual right to use, copy, modify, distribute, and sublicense any such feedback in any way. -## 4. Open Source Software +## 4. Open Source Software The Licensed Material may contain third-party software, including Open Source Software (“OSS”). If required, Siemens will furnish a notice file with the Licensed Material. To the extent the licenses terms applicable to such OSS are in contradiction to this License, the OSS license conditions shall prevail. -## 5. Responsibility for Use of the Licensed Material and Customizations +## 5. Responsibility for Use of the Licensed Material and Customizations Except any liability directly caused by Siemens violating its obligations under this License, you are responsible for the use of the Licensed Material (and all consequences arising therefrom), regardless of whether the use is undertaken by you, your employees or any third parties. You will ensure that the use of the Licensed Material by you, your employees or your customers complies with your obligations under this License. Should you become aware of any violation of your obligations under this License, you will (i) immediately inform Siemens thereof in reasonable detail and (ii) cease to use the Licensed Material. You are responsible for (i) properly integrating the Licensed Material into your Customizations, (ii) configuring and testing any Customization and making sure that a Customization is able to connect to and/or interoperate with the Platform, (iii) regular testing and monitoring of integrity, accuracy and timeliness of data transmission through a Customization (e.g. by monitoring over the Platform), (iv) the security of a Customization, and (v) the security of your and your customer’s system, any third party system or any data stored on such systems. You are responsible for the integrity, accuracy and timeliness of the exchange of data between a Customization and the Platform. Nothing in this License shall in any way constitute or be communicated by you or your customers to be an endorsement from us of a Customization in which you implemented the Licensed Material. -## 6. Warranty, Liability and Indemnification +## 6. Warranty, Liability and Indemnification SIEMENS PROVIDES THE LICENSED MATERIAL FREE OF CHARGE AND THEREFORE “AS IS” WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. ANY STATEMENTS OR REPRESENTATIONS ABOUT THE LICENSED MATERIAL AND ITS RESPECTIVE FUNCTIONALITY IN THE LICENSED MATERIAL CONSTITUTE MERELY TECHNICAL INFORMATION AND ARE NEITHER A GUARANTEE NOR A WARRANTY. SIEMENS IS NOT AWARE THAT THE LICENSED MATERIAL VIOLATES ANY THIRD PARTY RIGHTS IF USED IN ACCORDANCE WITH THE LICENSE. FURTHERMORE, SIEMENS DOES NOT WARRANT THAT THE LICENSED MATERIAL IS FAIL-SAFE, FAULT-TOLERANT, ERROR-FREE OR THAT ANY DATA TRANSMITTED THROUGH THE LICENSED MATERIAL OR A CUSTOMIZATION WILL BE SECURE OR NOT OTHERWISE LOST OR DAMAGED. Siemens disclaims all liability for all damages of any kind irrespective of the legal ground in relation to the Licensed Material. However, nothing in this License shall exclude or limit Siemens’ liability in case of death or personal injury of any person, or in case of our willful misconduct, gross negligence, fraud or fraudulent misrepresentation. Any limitations of liability set forth in this License shall also apply for the benefit of Siemens’ subcontractors, employees, directors, agents or any other person acting for Siemens. You agree to indemnify, defend, and hold Siemens harmless from and against all losses, expenses, damages and costs, including reasonable attorneys’ fees, resulting from or arising out of any violation of this License by you or any other person you provided with the Licensed Material, regardless of your knowledge, including any claim, proceeding, action, fine, loss, cost and damages arising out of or relating to any non-compliance with export control regulations. -## 7. Term and Termination, Updates +## 7. Term and Termination, Updates If Siemens reasonably determines that you are breaching this License and you fail to remediate such breach without undue delay, Siemens may suspend or terminate your Platform access temporarily or permanently and terminate this License at its sole discretion. Siemens may, at its sole discretion, make available updates or security patches for the Licensed Material. Outdated versions of the Licensed Material may not be able to connect to and/or interoperate with the Platform. -## 8. Applicable Law +## 8. Applicable Law This License shall be governed by and construed in accordance with the laws of Switzerland, without giving effect to any choice-of-law rules that may require the application of the law of another jurisdiction. The UN Convention on Contracts for the International Sale of Goods shall not apply. From 67b0dc696bf410e7fd271f4fec13a533531562cd Mon Sep 17 00:00:00 2001 From: gesslinger <20811609+gesslinger@users.noreply.github.com> Date: Tue, 16 Apr 2024 11:44:32 +0200 Subject: [PATCH 2/3] chore: remove deprecated Fleet Manager examples --- createDashboardForFleetManager/doc/example.png | Bin 39869 -> 0 bytes createDashboardForFleetManager/readme.md | 17 ----------------- createDashboardForFleetManager/template.json | 1 - 3 files changed, 18 deletions(-) delete mode 100644 createDashboardForFleetManager/doc/example.png delete mode 100644 createDashboardForFleetManager/readme.md delete mode 100644 createDashboardForFleetManager/template.json diff --git a/createDashboardForFleetManager/doc/example.png b/createDashboardForFleetManager/doc/example.png deleted file mode 100644 index 64a746571b23d5e58a6a1517a9c568943abcf226..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39869 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 Gc>Eu=%yp6g diff --git a/createDashboardForFleetManager/readme.md b/createDashboardForFleetManager/readme.md deleted file mode 100644 index 46ccee5..0000000 --- a/createDashboardForFleetManager/readme.md +++ /dev/null @@ -1,17 +0,0 @@ -# FLOW: Create dashboard for Fleet Manager - -TODO - - - -# Example image - - - -# How to - - - -# How does this flow works - - diff --git a/createDashboardForFleetManager/template.json b/createDashboardForFleetManager/template.json deleted file mode 100644 index b94c3a0..0000000 --- a/createDashboardForFleetManager/template.json +++ /dev/null @@ -1 +0,0 @@ -// insert your exported json here \ No newline at end of file From ddabf91024d006d0cea155e8b4457c2f5ff17ba0 Mon Sep 17 00:00:00 2001 From: gesslinger <20811609+gesslinger@users.noreply.github.com> Date: Tue, 16 Apr 2024 11:57:23 +0200 Subject: [PATCH 3/3] chore: fix spelling issues and small corrections --- Dashboard_getting_started/readme.md | 2 +- DataLake_provideAccessToken/readme.md | 5 +++-- README.md | 10 ++-------- commandMqttDevice_MindConnect/readme.md | 2 +- createCustomEndpoint/readme.md | 6 +++--- generateSampleData/readme.md | 4 ++-- integrateExternalApi/readme.md | 4 ++-- virtualMachineSimulator/readme.md | 14 +++----------- 8 files changed, 17 insertions(+), 30 deletions(-) diff --git a/Dashboard_getting_started/readme.md b/Dashboard_getting_started/readme.md index a40ad10..ec7c811 100644 --- a/Dashboard_getting_started/readme.md +++ b/Dashboard_getting_started/readme.md @@ -68,7 +68,7 @@ Now create a second tab called *Detail* with only one group named *Events*. We w # Designing the Dashboard: In this chapter, we will bring some life and functionality to our Overview dashboard. This tutorial is designed to build all elements from scratch and simultaneously show the logic behind a VFC dashboard. Some steps might be overcomplicated with the purpose of demonstrating several VFC nodes. -> If you just want to check out the final result, you can copy paste the [Json Flow Data From Here](./Resources/Dashboard.json). It will import all elements, including nodes, tabs and groups. Remember to adjust all *read-timeseries* and *write-timeseries* nodes to your own assets. +> If you just want to check out the final result, you can copy paste the [Json Flow Data From Here](./Resources/IMPORT_Dashboard.json). It will import all elements, including nodes, tabs and groups. Remember to adjust all *read-timeseries* and *write-timeseries* nodes to your own assets. For the beginning, we will place three *text* nodes and three *button* nodes in the flow. This will be our Asset selector, where each machine has it's own button like below: diff --git a/DataLake_provideAccessToken/readme.md b/DataLake_provideAccessToken/readme.md index 09c3005..70a74e2 100644 --- a/DataLake_provideAccessToken/readme.md +++ b/DataLake_provideAccessToken/readme.md @@ -25,8 +25,9 @@ This small flow triggers sets up an API endpoint which can be called from extern The function delivers the body for the API request against the `/api/datalake/v3/generateAccessToken` endpoint. From here, the Access Token is provided and feedback to the user via the `http`-Node ## Result -Once the API endpoint is accessed, the user is presented with a JSON respose containing the Access Token for IDL. -This can then be used in native S3-Tools to be worked with and connect to the IDL: +Once the API endpoint is accessed, the user is presented with a JSON response containing the Access Token for IDL. +This can then be used in native S3-Tools to be worked with and connect to the IDL: + In this example, calling the full API endpoint https://presiot-visualflowcreatorhttp.eu1.mindsphere.io/public/presiot/getAccessTokenForIDL?key=1a03090a3cc44d56c57d5cd7d545899219523b5127079317fcc2c637b3a0cab23cc1fcadce75196b36f761428e6ee80dacc64e4349928b23a2cf8e0e6495b897 results in a JSON response like shown below. ![image](./doc/result_IDL_AccessToken.png) diff --git a/README.md b/README.md index bc5602f..a2374ab 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,5 @@ # Insights Hub Visual Flow Creator Examples -[![The MDL License](https://img.shields.io/badge/license-MDL-009999.svg?style=flat)](./LICENSE.md) [![Documentation](https://img.shields.io/badge/mindsphere-documentation-%23009999.svg)](https://opensource.mindsphere.io/docs/mindconnect-nodejs/index.html) [![Forum](https://img.shields.io/badge/mindsphere-community-%23009999.svg)](https://community.plm.automation.siemens.com/t5/Developer-Space/bd-p/MindSphere-platform-forum) @@ -40,17 +39,12 @@ Please note, that the json-files are exported from another tenant. So their migh | [Virtual machine simulator](./virtualMachineSimulator/readme.md) | | :star: | - | | [Write location data to your Asset](./WriteLocationToAsset/readme.md) | Write locational information directly to your Asset using the Asset Management API | :star: | - | | [VFC Dashboard - Getting Started Guide](./Dashboard_getting_started/readme.md) | Create a dynamic Dashboard completely from scratch and learn the basics of VFC Dashboarding | :star: | - | - -### Examples which have to be added: -| Name | Description | Complexity Rating | Prerequisites | -| --- | --- | --- | --- | -| [TODO: Integrate external API](./integrateExternalApi/readme.md) | | :star: | | -| [TODO: Dashboard with dynamic data layer](./dynamicDashboards/readme.md) | | :star: :star: | | +| [Integrate external API](./integrateExternalApi/readme.md) | | :star: | | You can add here your ideas or requests for further examples. ### Example template -You want to create your own example? Just copy the [template flow-directory](./templateFlow/), adapt it and send us your pull request. +You want to create your own example? Just copy an existing folder, adapt it and send us your pull request. ## Remarks Please note that the screenshots show just the current state, when these examples have been created. They might differ to the latest software release. diff --git a/commandMqttDevice_MindConnect/readme.md b/commandMqttDevice_MindConnect/readme.md index 8121ce3..cb39b4f 100644 --- a/commandMqttDevice_MindConnect/readme.md +++ b/commandMqttDevice_MindConnect/readme.md @@ -27,7 +27,7 @@ Commanding can be initiated via a dedicated API. Here we will use VFC to initiat A dedicated commanding node was added to the standard nodes of Visual Flow Creator. https://documentation.mindsphere.io/MindSphere/apps/visual-flow-creator/mindconnect-nodes.html#command-mindconnect -Manual confuguration towards the API endpoint for commanding is no longer needed but still shown in depth in the description below. +Manual configuration towards the API endpoint for commanding is no longer needed but still shown in depth in the description below. With "MindConnect" nodes, you can send a command to MindConnect MQTT device and check the status of the sent command. For more information about MindConnect Elements, refer to [Connectivity](https://documentation.mindsphere.io/MindSphere/connectivity/overview.html). diff --git a/createCustomEndpoint/readme.md b/createCustomEndpoint/readme.md index e9b4f0b..34828c4 100644 --- a/createCustomEndpoint/readme.md +++ b/createCustomEndpoint/readme.md @@ -7,7 +7,7 @@ The example shows how you can - choose who has access to this endpoint (only users of the flow, all users on the tenant, public access) - develop the API functionality using VFC nodes -This flow demonstrates a simple getting-started example on how to provide machine data via an API for external access of the last 15min intervall of machine data as JSON object. +This flow demonstrates a simple getting-started example on how to provide machine data via an API for external access of the last 15min interval of machine data as JSON object. ![image](./doc/createCustomEndpoint.png) @@ -20,7 +20,7 @@ This flow demonstrates a simple getting-started example on how to provide machin - generate key in case of public API access - the URL shown in the node setup is the direct URL to access the service ![image](./doc/setup_KeyGeneration.png) -3. Selet an Asset / Aspect / Variable(s) where you want to read the time series data from (yellow node) +3. Select an Asset / Aspect / Variable(s) where you want to read the time series data from (yellow node) ![image](./doc/setup_selectAssetToRead.png) 4. Save the flow @@ -31,7 +31,7 @@ https://[TenantName]-visualflowcreatorhttp.eu1.mindsphere.io/public/presiot/mach ## Result -When querying the service URL e.g. via a Browser/Postman/Pyhton/... the JSON-object with the timeseries data will be received. +When querying the service URL e.g. via a Browser/Postman/Python/... the JSON-object with the timeseries data will be received. ![image](./doc/result.png) diff --git a/generateSampleData/readme.md b/generateSampleData/readme.md index 17bf316..5ff94f1 100644 --- a/generateSampleData/readme.md +++ b/generateSampleData/readme.md @@ -9,7 +9,7 @@ With this example you are able to do that. ![image](./doc/generateSampleData.png) - Import the flow in Visual Flow Creator -- Selet an asset / aspect / variable where you want to write time series data -- Doubleclick on the datatype node like `Integer` and rename the `Parameter out` value with the name of your data variable +- Select an asset / aspect / variable where you want to write time series data +- Double click on the datatype node like `Integer` and rename the `Parameter out` value with the name of your data variable - Save the flow - Trigger the flow \ No newline at end of file diff --git a/integrateExternalApi/readme.md b/integrateExternalApi/readme.md index 65f31c1..8ee0343 100644 --- a/integrateExternalApi/readme.md +++ b/integrateExternalApi/readme.md @@ -18,9 +18,9 @@ Your business case may require to use external services over HTTP. Visual Flow C - The inject node passes the `CITY` and `API_KEY` information to HTTP Request node through `msg` object. - (**Get Weather**) node is the HTTP Request node and it contains the URL with query parameters. - - This node performs the substitution of variables with the values it recieves from the inject node. + - This node performs the substitution of variables with the values it receives from the inject node. - Then HTTP request node fetches the data synchronously from Openweather service endpoint. - - It converts the recieved response to JSON format and sets it as value for the payload field of the msg object. + - It converts the received response to JSON format and sets it as value for the payload field of the msg object. - Debug node in the end displays the contents of payload field to the debug window. diff --git a/virtualMachineSimulator/readme.md b/virtualMachineSimulator/readme.md index 84f85bb..ff63fba 100644 --- a/virtualMachineSimulator/readme.md +++ b/virtualMachineSimulator/readme.md @@ -8,7 +8,7 @@ It can be used if no physical assets are available or to learn about the feature ![image](./doc/virtualMachineSimulator.png) ## Prerequisites -- access to Asset-Managment +- access to Asset-Management ## Setup & Configuration ### Setup machine asset @@ -27,23 +27,15 @@ e.g. `my virtual machine` 2. Open the settings for the **upper** write-timeseries node select the previously generated asset instance `my virtual machine` and aspect `machine_states`. Do not select any variables. ![image](./doc/VFC_setup_Asset-Aspect.png) 4. Repeat this for the **lower** write-timeseries node and select `my virtual machine` -> `product_counter`. Do not select any variables. -5. Adjust the execution intervall for the simulation as desired in the link-in node. +5. Adjust the execution interval for the simulation as desired in the link-in node. 6. Save the flow :cloud: :heavy_check_mark: You're done, your machine simulation is now running - enjoy! ## Result -After saving the flow, the output of the simulation is written to the asset and you can monitor the results e.g. in Fleet Manager. Based on this you can also now start calculating the machine KPIs (OEE, Availability, Quality, ...) using the VFC or other apps. +After saving the flow, the output of the simulation is written to the asset and you can monitor the results e.g. in Insights Hub Monitor. Based on this you can also now start calculating the machine KPIs (OEE, Availability, Quality, ...) using the VFC or other apps. ![image](./doc/FleetManager_Results.png) ## See also - [Asset Manager Documentation](https://documentation.mindsphere.io/resources/html/asset-manager/en-US/index.html) - - - - - - - -