fix(ppmp v3): time in process not mandatory

Signed-off-by: Axel Meinhardt <axel.meinhardt@bosch-si.com>
diff --git a/200.html b/200.html
index 710f7c9..e408ab1 100644
--- a/200.html
+++ b/200.html
@@ -26,6 +26,6 @@
     We started to capture this information in a simple payload specification and just like in the introducing language example where you can use phrases via phone, letter or in person, the payload is meant to be sent over different protocols (REST, MQTT, AMQP). This payload is the Production Performance Management Protocol (<i>PPMP</i>).
     <div class="card is-pulled-left"><div class="card-image"><figure class="image"><img src="images/eclipse-426x100.png" alt="Eclipse logo" title="Eclipse logo"></figure></div></div><p>
     In order to, first, leverage the Eclipse IoT stack in Industry 4.0 scenarios and, second, build a lively community around the specification, we consider the Eclipse iot working group as the premier place to host Unide. 
-    </div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"default",data:[{}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_default.abbae1ad205e6f253d03.js"></script><script defer src="/unide/files/pages_index.922f1427ed81a1db7207.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"default",data:[{}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_default.abbae1ad205e6f253d03.js"></script><script defer src="/unide/files/pages_index.922f1427ed81a1db7207.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/article/index.html b/article/index.html
index 132cd30..e625eb8 100644
--- a/article/index.html
+++ b/article/index.html
@@ -60,6 +60,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{post:{}}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_article.dfd7fcb83848670d21b1.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{post:{}}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_article.dfd7fcb83848670d21b1.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2016/9/12/Unide-proposal-online/index.html b/blog/2016/9/12/Unide-proposal-online/index.html
index fb1c004..b01531c 100644
--- a/blog/2016/9/12/Unide-proposal-online/index.html
+++ b/blog/2016/9/12/Unide-proposal-online/index.html
@@ -76,6 +76,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{post:{name:"Unide-proposal-online",content:'<p>We\'re happy to announce, that the proposal for our new Eclipse Project is online! You can find it at <a href="https://projects.eclipse.org/proposals/unide">https://projects.eclipse.org/proposals/unide</a>. For further discussions, there\'s the <a href="https://www.eclipse.org/forums/index.php/t/1080186/">forum post</a> as well.<br>\nNow, it\'s time to study all details about Eclipse processes and <a href="https://eclipse.org/legal/eplfaq.php#3RDPARTY">license regulations</a>.</p>\n<div class="card">\n\t<header class="card-header is-primary">\n\t\t<p class="card-header-title"><i class="fa fa-pencil">&nbsp;</i>Did you know?</p>\n\t</header>\n\t<div class="card-content">\n\t\t<div class="content">\n\t\t\tThe projects name is derived from <b>un</b>derstand <b>i</b>ndustry <b>de</b>vices. Other ideas like <b>co</b>nnect <b>i</b>ndustry <b>ma</b>chines turned out to have meanings in foreign languages or being trademarked already.\n\t\t</div>\n\t</div>\n</div>\n',url:"/blog/2016/9/12/Unide-proposal-online",title:"Unide proposal online",date:"2016-09-12T09:26:37.000Z",tags:["project start"],next:{url:"/blog/2016/9/16/Project-approved",title:"Eclipse Project approved"}}}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_article.dfd7fcb83848670d21b1.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{post:{name:"Unide-proposal-online",content:'<p>We\'re happy to announce, that the proposal for our new Eclipse Project is online! You can find it at <a href="https://projects.eclipse.org/proposals/unide">https://projects.eclipse.org/proposals/unide</a>. For further discussions, there\'s the <a href="https://www.eclipse.org/forums/index.php/t/1080186/">forum post</a> as well.<br>\nNow, it\'s time to study all details about Eclipse processes and <a href="https://eclipse.org/legal/eplfaq.php#3RDPARTY">license regulations</a>.</p>\n<div class="card">\n\t<header class="card-header is-primary">\n\t\t<p class="card-header-title"><i class="fa fa-pencil">&nbsp;</i>Did you know?</p>\n\t</header>\n\t<div class="card-content">\n\t\t<div class="content">\n\t\t\tThe projects name is derived from <b>un</b>derstand <b>i</b>ndustry <b>de</b>vices. Other ideas like <b>co</b>nnect <b>i</b>ndustry <b>ma</b>chines turned out to have meanings in foreign languages or being trademarked already.\n\t\t</div>\n\t</div>\n</div>\n',url:"/blog/2016/9/12/Unide-proposal-online",title:"Unide proposal online",date:"2016-09-12T09:26:37.000Z",tags:["project start"],next:{url:"/blog/2016/9/16/Project-approved",title:"Eclipse Project approved"}}}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_article.dfd7fcb83848670d21b1.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2016/9/12/index.html b/blog/2016/9/12/index.html
index e488aeb..070d62a 100644
--- a/blog/2016/9/12/index.html
+++ b/blog/2016/9/12/index.html
@@ -66,6 +66,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2016/9/12/Unide-proposal-online",title:"Unide proposal online",date:"2016-09-12T09:26:37.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2016/9/12/Unide-proposal-online",title:"Unide proposal online",date:"2016-09-12T09:26:37.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2016/9/16/Project-approved/index.html b/blog/2016/9/16/Project-approved/index.html
index 3357436..280b75c 100644
--- a/blog/2016/9/16/Project-approved/index.html
+++ b/blog/2016/9/16/Project-approved/index.html
@@ -73,6 +73,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{post:{name:"Project-approved",content:'<p>Unide proposal has been approved to be an Eclipse Project! You can now find all relevant information at <a href="https://projects.eclipse.org/projects/iot.unide">https://projects.eclipse.org/projects/iot.unide</a>.</p>\n<p>There\'s still some paperwork pending, but it looks promising! Next steps are</p>\n<ul>\n<li>creating a proper homepage with relevant information and the PPMP specification</li>\n<li>license checking of initial commitment code.</li>\n<li>getting in touch with Eclipse community</li>\n<li>making plans for the upcoming months</li>\n</ul>\n<p>If you are interested in industry 4.0, IoT stack in manufacturing or you are building industry machines and want to find out more about the possiblities with PPMP, let us know: <a href="mailto:unide-inbox@eclipse.org?subject=Interested%20in%20contributing">unide-inbox@eclipse.org</a></p>\n',url:"/blog/2016/9/16/Project-approved",title:"Eclipse Project approved",date:"2016-09-16T12:16:37.000Z",tags:["project start"],prev:{url:"/blog/2016/9/12/Unide-proposal-online",title:"Unide proposal online"},next:{url:"/blog/2016/9/21/Official-launch",title:"Official launch"}}}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_article.dfd7fcb83848670d21b1.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{post:{name:"Project-approved",content:'<p>Unide proposal has been approved to be an Eclipse Project! You can now find all relevant information at <a href="https://projects.eclipse.org/projects/iot.unide">https://projects.eclipse.org/projects/iot.unide</a>.</p>\n<p>There\'s still some paperwork pending, but it looks promising! Next steps are</p>\n<ul>\n<li>creating a proper homepage with relevant information and the PPMP specification</li>\n<li>license checking of initial commitment code.</li>\n<li>getting in touch with Eclipse community</li>\n<li>making plans for the upcoming months</li>\n</ul>\n<p>If you are interested in industry 4.0, IoT stack in manufacturing or you are building industry machines and want to find out more about the possiblities with PPMP, let us know: <a href="mailto:unide-inbox@eclipse.org?subject=Interested%20in%20contributing">unide-inbox@eclipse.org</a></p>\n',url:"/blog/2016/9/16/Project-approved",title:"Eclipse Project approved",date:"2016-09-16T12:16:37.000Z",tags:["project start"],prev:{url:"/blog/2016/9/12/Unide-proposal-online",title:"Unide proposal online"},next:{url:"/blog/2016/9/21/Official-launch",title:"Official launch"}}}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_article.dfd7fcb83848670d21b1.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2016/9/16/index.html b/blog/2016/9/16/index.html
index 9556151..41f9e96 100644
--- a/blog/2016/9/16/index.html
+++ b/blog/2016/9/16/index.html
@@ -66,6 +66,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2016/9/16/Project-approved",title:"Eclipse Project approved",date:"2016-09-16T12:16:37.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2016/9/16/Project-approved",title:"Eclipse Project approved",date:"2016-09-16T12:16:37.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2016/9/21/Official-launch/index.html b/blog/2016/9/21/Official-launch/index.html
index 78ce491..7d787d1 100644
--- a/blog/2016/9/21/Official-launch/index.html
+++ b/blog/2016/9/21/Official-launch/index.html
@@ -72,6 +72,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{post:{name:"Official-launch",content:'<p>Today, we officially launch Unide. In the last days, we have redesigned the logo, published Blog posts and started work on the initial (code) contributions.<br>\nIt even seems like good timing, since there was a <a href="http://m.heise.de/newsticker/meldung/Umfrage-Unternehmen-fordern-offene-Plattform-fuer-die-Industrie-4-0-3327135.html">survey in Germany about open platforms &amp; standards in industry 4.0</a>, basically asking for something like Unide/PPMP.</p>\n<h3>the logo</h3>\n<p>Unide and PPMP\'s goal is to enable you to connect machines and receive their measurements / alerts. The logo represents that. It has you (&quot;<em>U</em>&quot;) highlighted and connects to rings. As a side note, we found that the words almost look like <em>you-nice</em>.</p>\n<h3>blog entries</h3>\n<p>If you are interested in further readings, check out the post at <a href="http://blog.bosch-si.com">blog.bosch-si.com</a>.</p>\n<h3>initial contributions</h3>\n<p>We are working on creating the initial contributions for Unide. Since there are a few legal aspects we have to consider, stay tuned. The code will be published to our <a href="https://github.com/eclipse/unide">github repository</a>.</p>\n',url:"/blog/2016/9/21/Official-launch",title:"Official launch",date:"2016-09-21T09:47:43.000Z",tags:["project start"],prev:{url:"/blog/2016/9/16/Project-approved",title:"Eclipse Project approved"},next:{url:"/blog/2016/9/27/News-coverage",title:"News Coverage"}}}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_article.dfd7fcb83848670d21b1.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{post:{name:"Official-launch",content:'<p>Today, we officially launch Unide. In the last days, we have redesigned the logo, published Blog posts and started work on the initial (code) contributions.<br>\nIt even seems like good timing, since there was a <a href="http://m.heise.de/newsticker/meldung/Umfrage-Unternehmen-fordern-offene-Plattform-fuer-die-Industrie-4-0-3327135.html">survey in Germany about open platforms &amp; standards in industry 4.0</a>, basically asking for something like Unide/PPMP.</p>\n<h3>the logo</h3>\n<p>Unide and PPMP\'s goal is to enable you to connect machines and receive their measurements / alerts. The logo represents that. It has you (&quot;<em>U</em>&quot;) highlighted and connects to rings. As a side note, we found that the words almost look like <em>you-nice</em>.</p>\n<h3>blog entries</h3>\n<p>If you are interested in further readings, check out the post at <a href="http://blog.bosch-si.com">blog.bosch-si.com</a>.</p>\n<h3>initial contributions</h3>\n<p>We are working on creating the initial contributions for Unide. Since there are a few legal aspects we have to consider, stay tuned. The code will be published to our <a href="https://github.com/eclipse/unide">github repository</a>.</p>\n',url:"/blog/2016/9/21/Official-launch",title:"Official launch",date:"2016-09-21T09:47:43.000Z",tags:["project start"],prev:{url:"/blog/2016/9/16/Project-approved",title:"Eclipse Project approved"},next:{url:"/blog/2016/9/27/News-coverage",title:"News Coverage"}}}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_article.dfd7fcb83848670d21b1.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2016/9/21/index.html b/blog/2016/9/21/index.html
index d031b28..ac29ccc 100644
--- a/blog/2016/9/21/index.html
+++ b/blog/2016/9/21/index.html
@@ -66,6 +66,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2016/9/21/Official-launch",title:"Official launch",date:"2016-09-21T09:47:43.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2016/9/21/Official-launch",title:"Official launch",date:"2016-09-21T09:47:43.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2016/9/27/News-coverage/index.html b/blog/2016/9/27/News-coverage/index.html
index 89db4df..705c496 100644
--- a/blog/2016/9/27/News-coverage/index.html
+++ b/blog/2016/9/27/News-coverage/index.html
@@ -71,6 +71,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{post:{name:"News-coverage",content:'<p>After the <a href="/unide/2016/09/21/Official%20launch/">Official launch</a> of unide and PPMP, there was some media coverage about the project.</p>\n<p>Triggered by a statement by <a href="http://www.bosch.com/en/com/bosch_group/board_management/dr_rer_nat_volkmar_denner/volkmar-denner.html">Bosch CEO Volkmar Denner</a> on <em><a href="http://www.bosch-presse.de/pressportal/en/bosch-initiates-new-machine-language-for-industry-4-0-65216.html">&quot;initiating new machine language for Industry 4.0&quot;</a></em>, twitter, blogs and magazines mention PPMP, e.g.:</p>\n<ul>\n<li><a href="https://www.elektormagazine.com/news/free-ppmp-from-bosch-makes-industry-4-0-open-for-all">electormagazine</a></li>\n<li><a href="http://www.computer-automation.de/feldebene/vernetzung/artikel/134233/">computer-automation</a> (de)</li>\n</ul>\n<p>Looking forward to spreading the word further.</p>\n',url:"/blog/2016/9/27/News-coverage",title:"News Coverage",date:"2016-09-27T09:14:27.000Z",tags:["media"],prev:{url:"/blog/2016/9/21/Official-launch",title:"Official launch"},next:{url:"/blog/2017/3/23/Unide-at-BCX",title:"Unide at Bosch Hackaton"}}}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_article.dfd7fcb83848670d21b1.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{post:{name:"News-coverage",content:'<p>After the <a href="/unide/2016/09/21/Official%20launch/">Official launch</a> of unide and PPMP, there was some media coverage about the project.</p>\n<p>Triggered by a statement by <a href="http://www.bosch.com/en/com/bosch_group/board_management/dr_rer_nat_volkmar_denner/volkmar-denner.html">Bosch CEO Volkmar Denner</a> on <em><a href="http://www.bosch-presse.de/pressportal/en/bosch-initiates-new-machine-language-for-industry-4-0-65216.html">&quot;initiating new machine language for Industry 4.0&quot;</a></em>, twitter, blogs and magazines mention PPMP, e.g.:</p>\n<ul>\n<li><a href="https://www.elektormagazine.com/news/free-ppmp-from-bosch-makes-industry-4-0-open-for-all">electormagazine</a></li>\n<li><a href="http://www.computer-automation.de/feldebene/vernetzung/artikel/134233/">computer-automation</a> (de)</li>\n</ul>\n<p>Looking forward to spreading the word further.</p>\n',url:"/blog/2016/9/27/News-coverage",title:"News Coverage",date:"2016-09-27T09:14:27.000Z",tags:["media"],prev:{url:"/blog/2016/9/21/Official-launch",title:"Official launch"},next:{url:"/blog/2017/3/23/Unide-at-BCX",title:"Unide at Bosch Hackaton"}}}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_article.dfd7fcb83848670d21b1.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2016/9/27/index.html b/blog/2016/9/27/index.html
index 7b7a127..f860069 100644
--- a/blog/2016/9/27/index.html
+++ b/blog/2016/9/27/index.html
@@ -66,6 +66,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2016/9/27/News-coverage",title:"News Coverage",date:"2016-09-27T09:14:27.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2016/9/27/News-coverage",title:"News Coverage",date:"2016-09-27T09:14:27.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2016/9/index.html b/blog/2016/9/index.html
index 90690a8..4389064 100644
--- a/blog/2016/9/index.html
+++ b/blog/2016/9/index.html
@@ -78,6 +78,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2016/9/27/News-coverage",title:"News Coverage",date:"2016-09-27T09:14:27.000Z"},{url:"/blog/2016/9/21/Official-launch",title:"Official launch",date:"2016-09-21T09:47:43.000Z"},{url:"/blog/2016/9/16/Project-approved",title:"Eclipse Project approved",date:"2016-09-16T12:16:37.000Z"},{url:"/blog/2016/9/12/Unide-proposal-online",title:"Unide proposal online",date:"2016-09-12T09:26:37.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2016/9/27/News-coverage",title:"News Coverage",date:"2016-09-27T09:14:27.000Z"},{url:"/blog/2016/9/21/Official-launch",title:"Official launch",date:"2016-09-21T09:47:43.000Z"},{url:"/blog/2016/9/16/Project-approved",title:"Eclipse Project approved",date:"2016-09-16T12:16:37.000Z"},{url:"/blog/2016/9/12/Unide-proposal-online",title:"Unide proposal online",date:"2016-09-12T09:26:37.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2016/index.html b/blog/2016/index.html
index 5ca65d9..af99d71 100644
--- a/blog/2016/index.html
+++ b/blog/2016/index.html
@@ -78,6 +78,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2016/9/27/News-coverage",title:"News Coverage",date:"2016-09-27T09:14:27.000Z"},{url:"/blog/2016/9/21/Official-launch",title:"Official launch",date:"2016-09-21T09:47:43.000Z"},{url:"/blog/2016/9/16/Project-approved",title:"Eclipse Project approved",date:"2016-09-16T12:16:37.000Z"},{url:"/blog/2016/9/12/Unide-proposal-online",title:"Unide proposal online",date:"2016-09-12T09:26:37.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2016/9/27/News-coverage",title:"News Coverage",date:"2016-09-27T09:14:27.000Z"},{url:"/blog/2016/9/21/Official-launch",title:"Official launch",date:"2016-09-21T09:47:43.000Z"},{url:"/blog/2016/9/16/Project-approved",title:"Eclipse Project approved",date:"2016-09-16T12:16:37.000Z"},{url:"/blog/2016/9/12/Unide-proposal-online",title:"Unide proposal online",date:"2016-09-12T09:26:37.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2017/10/19/i40-testbed-started/index.html b/blog/2017/10/19/i40-testbed-started/index.html
index a609114..c3b04ab 100644
--- a/blog/2017/10/19/i40-testbed-started/index.html
+++ b/blog/2017/10/19/i40-testbed-started/index.html
@@ -67,6 +67,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{post:{name:"i40-testbed-started",content:'<p>The Eclipse IoT Working group has started another testbed around Production Performance Management. Together with other Eclipse projects but also manufacturing companies, we aim to showcase and test the software in real life scenarios.<br>\n<a href="https://www.contact-software.com">Contact Software</a>, <a href="https://www.eurotech.com">Eurotech</a> and <a href="https://www.eclipse.org/4diac/">Eclipse 4diac</a> provide bindings to actual machines, Unide and PPMP will be used for structuring and normalizing the information, <a href="https://projects.eclipse.org/projects/iot.hono">Ecipse Hono</a> and other provide the advanced infrastructure and <a href="https://www.influxdata.com/">influx data</a> persists the data.<br>\nYou can find more information in the <a href="https://eclipse.org/org/press-release/20171019_industry40_testbed.php">Press Release</a> or the <a href="https://iot.eclipse.org/testbeds/production-performance-management/#">homepage of the testbed</a>.</p>\n',url:"/blog/2017/10/19/i40-testbed-started",title:"Unide is part of Industry 4.0 Testbed",date:"2017-10-19T00:00:00.000Z",tags:["testbed"],prev:{url:"/blog/2017/10/6/DZone-article-published",title:"DZone article published"},next:{url:"/blog/2018/1/26/New-website",title:"Updated Website"}}}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_article.dfd7fcb83848670d21b1.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{post:{name:"i40-testbed-started",content:'<p>The Eclipse IoT Working group has started another testbed around Production Performance Management. Together with other Eclipse projects but also manufacturing companies, we aim to showcase and test the software in real life scenarios.<br>\n<a href="https://www.contact-software.com">Contact Software</a>, <a href="https://www.eurotech.com">Eurotech</a> and <a href="https://www.eclipse.org/4diac/">Eclipse 4diac</a> provide bindings to actual machines, Unide and PPMP will be used for structuring and normalizing the information, <a href="https://projects.eclipse.org/projects/iot.hono">Ecipse Hono</a> and other provide the advanced infrastructure and <a href="https://www.influxdata.com/">influx data</a> persists the data.<br>\nYou can find more information in the <a href="https://eclipse.org/org/press-release/20171019_industry40_testbed.php">Press Release</a> or the <a href="https://iot.eclipse.org/testbeds/production-performance-management/#">homepage of the testbed</a>.</p>\n',url:"/blog/2017/10/19/i40-testbed-started",title:"Unide is part of Industry 4.0 Testbed",date:"2017-10-19T00:00:00.000Z",tags:["testbed"],prev:{url:"/blog/2017/10/6/DZone-article-published",title:"DZone article published"},next:{url:"/blog/2018/1/26/New-website",title:"Updated Website"}}}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_article.dfd7fcb83848670d21b1.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2017/10/19/index.html b/blog/2017/10/19/index.html
index 89ba0e1..6b1ee26 100644
--- a/blog/2017/10/19/index.html
+++ b/blog/2017/10/19/index.html
@@ -66,6 +66,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2017/10/19/i40-testbed-started",title:"Unide is part of Industry 4.0 Testbed",date:"2017-10-19T00:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2017/10/19/i40-testbed-started",title:"Unide is part of Industry 4.0 Testbed",date:"2017-10-19T00:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2017/10/6/DZone-article-published/index.html b/blog/2017/10/6/DZone-article-published/index.html
index 4eefcb3..50de80e 100644
--- a/blog/2017/10/6/DZone-article-published/index.html
+++ b/blog/2017/10/6/DZone-article-published/index.html
@@ -66,6 +66,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{post:{name:"DZone-article-published",content:'<p>A new article about PPMP and the Eclipse Unide project was published at <a href="https://dzone.com/articles/eclipse-unide-a-way-to-establish-an-open-industry">DZone</a>!<br>\nIt explains how to use the <a href="https://www.eclipse.org/unide/2017/06/29/Validator-Online/">PPMP validator</a>, gives an overview of the InfluxDB / Grafana visualisation and how this setup can be used in an Eclipse Testbed.</p>\n',url:"/blog/2017/10/6/DZone-article-published",title:"DZone article published",date:"2017-10-06T00:00:00.000Z",tags:["media"],prev:{url:"/blog/2017/6/29/Validator-Online",title:"First PPMP-Validator Online"},next:{url:"/blog/2017/10/19/i40-testbed-started",title:"Unide is part of Industry 4.0 Testbed"}}}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_article.dfd7fcb83848670d21b1.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{post:{name:"DZone-article-published",content:'<p>A new article about PPMP and the Eclipse Unide project was published at <a href="https://dzone.com/articles/eclipse-unide-a-way-to-establish-an-open-industry">DZone</a>!<br>\nIt explains how to use the <a href="https://www.eclipse.org/unide/2017/06/29/Validator-Online/">PPMP validator</a>, gives an overview of the InfluxDB / Grafana visualisation and how this setup can be used in an Eclipse Testbed.</p>\n',url:"/blog/2017/10/6/DZone-article-published",title:"DZone article published",date:"2017-10-06T00:00:00.000Z",tags:["media"],prev:{url:"/blog/2017/6/29/Validator-Online",title:"First PPMP-Validator Online"},next:{url:"/blog/2017/10/19/i40-testbed-started",title:"Unide is part of Industry 4.0 Testbed"}}}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_article.dfd7fcb83848670d21b1.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2017/10/6/index.html b/blog/2017/10/6/index.html
index 88218e3..95952db 100644
--- a/blog/2017/10/6/index.html
+++ b/blog/2017/10/6/index.html
@@ -66,6 +66,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2017/10/6/DZone-article-published",title:"DZone article published",date:"2017-10-06T00:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2017/10/6/DZone-article-published",title:"DZone article published",date:"2017-10-06T00:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2017/10/index.html b/blog/2017/10/index.html
index dcdb8b1..242aef5 100644
--- a/blog/2017/10/index.html
+++ b/blog/2017/10/index.html
@@ -70,6 +70,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2017/10/19/i40-testbed-started",title:"Unide is part of Industry 4.0 Testbed",date:"2017-10-19T00:00:00.000Z"},{url:"/blog/2017/10/6/DZone-article-published",title:"DZone article published",date:"2017-10-06T00:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2017/10/19/i40-testbed-started",title:"Unide is part of Industry 4.0 Testbed",date:"2017-10-19T00:00:00.000Z"},{url:"/blog/2017/10/6/DZone-article-published",title:"DZone article published",date:"2017-10-06T00:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2017/3/23/Unide-at-BCX/index.html b/blog/2017/3/23/Unide-at-BCX/index.html
index 64a4e99..1fdda84 100644
--- a/blog/2017/3/23/Unide-at-BCX/index.html
+++ b/blog/2017/3/23/Unide-at-BCX/index.html
@@ -74,6 +74,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{post:{name:"Unide-at-BCX",content:'<p>Unide and PPMP were used in <a href="http://bcw.bosch-si.com/berlin/bcw-hackathon/?refresh=1">Bosch Connected Experience Hackaton</a> by students and developers to connect sensors to backend solutions in just two days!<br>\nThey even took a professional video:</p>\n<center>\n<iframe width="400" height="300" src="https://www.youtube.com/embed/Pq88mIx-lnQ?ecver=1" frameborder="0" allowfullscreen></iframe>\n</center>\n<p>Also in the same conference, Bosch CEO Dr. Volkmar Denner <a href="http://bcw.bosch-si.com/berlin/bcw-hackathon/?refresh=1">refered to PPMP again</a>:</p>\n<blockquote>\n\t<p>On a more practical level, the product performance management protocol, or PPMP, is being tried out at the Bosch plant in Homburg, Germany, as part of a joint Industrie 4.0 and IIC testbed. Bosch itself developed the PPMP, which is available to all at no cost. It allows small and medium-sized enterprises to transmit data from their sensors quickly, simply, and securely to the production systems of large companies. This helps remove some of the obstacles preventing entry into connected manufacturing. This first practical experience will be used to further refine the new protocol – work which will be done by Eclipse, an open-source community. Once again, we see that openness is our life blood.</p>\n\t<footer>Dr. Volkmar Denner, Bosch CEO</footer>\n</blockquote>\n',url:"/blog/2017/3/23/Unide-at-BCX",title:"Unide at Bosch Hackaton",date:"2017-03-23T17:00:00.000Z",tags:["media"],prev:{url:"/blog/2016/9/27/News-coverage",title:"News Coverage"},next:{url:"/blog/2017/6/1/New-process-message-spec",title:"New PPMP-Specification for processes"}}}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_article.dfd7fcb83848670d21b1.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{post:{name:"Unide-at-BCX",content:'<p>Unide and PPMP were used in <a href="http://bcw.bosch-si.com/berlin/bcw-hackathon/?refresh=1">Bosch Connected Experience Hackaton</a> by students and developers to connect sensors to backend solutions in just two days!<br>\nThey even took a professional video:</p>\n<center>\n<iframe width="400" height="300" src="https://www.youtube.com/embed/Pq88mIx-lnQ?ecver=1" frameborder="0" allowfullscreen></iframe>\n</center>\n<p>Also in the same conference, Bosch CEO Dr. Volkmar Denner <a href="http://bcw.bosch-si.com/berlin/bcw-hackathon/?refresh=1">refered to PPMP again</a>:</p>\n<blockquote>\n\t<p>On a more practical level, the product performance management protocol, or PPMP, is being tried out at the Bosch plant in Homburg, Germany, as part of a joint Industrie 4.0 and IIC testbed. Bosch itself developed the PPMP, which is available to all at no cost. It allows small and medium-sized enterprises to transmit data from their sensors quickly, simply, and securely to the production systems of large companies. This helps remove some of the obstacles preventing entry into connected manufacturing. This first practical experience will be used to further refine the new protocol – work which will be done by Eclipse, an open-source community. Once again, we see that openness is our life blood.</p>\n\t<footer>Dr. Volkmar Denner, Bosch CEO</footer>\n</blockquote>\n',url:"/blog/2017/3/23/Unide-at-BCX",title:"Unide at Bosch Hackaton",date:"2017-03-23T17:00:00.000Z",tags:["media"],prev:{url:"/blog/2016/9/27/News-coverage",title:"News Coverage"},next:{url:"/blog/2017/6/1/New-process-message-spec",title:"New PPMP-Specification for processes"}}}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_article.dfd7fcb83848670d21b1.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2017/3/23/index.html b/blog/2017/3/23/index.html
index 412eb20..573ae1f 100644
--- a/blog/2017/3/23/index.html
+++ b/blog/2017/3/23/index.html
@@ -66,6 +66,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2017/3/23/Unide-at-BCX",title:"Unide at Bosch Hackaton",date:"2017-03-23T17:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2017/3/23/Unide-at-BCX",title:"Unide at Bosch Hackaton",date:"2017-03-23T17:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2017/3/index.html b/blog/2017/3/index.html
index 377075c..7bae9f7 100644
--- a/blog/2017/3/index.html
+++ b/blog/2017/3/index.html
@@ -66,6 +66,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2017/3/23/Unide-at-BCX",title:"Unide at Bosch Hackaton",date:"2017-03-23T17:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2017/3/23/Unide-at-BCX",title:"Unide at Bosch Hackaton",date:"2017-03-23T17:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2017/6/1/New-process-message-spec/index.html b/blog/2017/6/1/New-process-message-spec/index.html
index 8979909..93c609c 100644
--- a/blog/2017/6/1/New-process-message-spec/index.html
+++ b/blog/2017/6/1/New-process-message-spec/index.html
@@ -65,6 +65,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{post:{name:"New-process-message-spec",content:'<p>We’re happy to announce, that the process message specification is online! You can find it at <a href="http://www.eclipse.org/unide/specification">http://www.eclipse.org/unide/specification</a>. With this type of messages you have a standard format for sending data out of discrete and possibly complex processes. <img src="/unide/images/processPayload.png" alt="alt text"></p>\n',url:"/blog/2017/6/1/New-process-message-spec",title:"New PPMP-Specification for processes",date:"2017-06-01T00:00:00.000Z",tags:["process message"],prev:{url:"/blog/2017/3/23/Unide-at-BCX",title:"Unide at Bosch Hackaton"},next:{url:"/blog/2017/6/29/Validator-Online",title:"First PPMP-Validator Online"}}}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_article.dfd7fcb83848670d21b1.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{post:{name:"New-process-message-spec",content:'<p>We’re happy to announce, that the process message specification is online! You can find it at <a href="http://www.eclipse.org/unide/specification">http://www.eclipse.org/unide/specification</a>. With this type of messages you have a standard format for sending data out of discrete and possibly complex processes. <img src="/unide/images/processPayload.png" alt="alt text"></p>\n',url:"/blog/2017/6/1/New-process-message-spec",title:"New PPMP-Specification for processes",date:"2017-06-01T00:00:00.000Z",tags:["process message"],prev:{url:"/blog/2017/3/23/Unide-at-BCX",title:"Unide at Bosch Hackaton"},next:{url:"/blog/2017/6/29/Validator-Online",title:"First PPMP-Validator Online"}}}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_article.dfd7fcb83848670d21b1.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2017/6/1/index.html b/blog/2017/6/1/index.html
index 27c5182..1f2cd82 100644
--- a/blog/2017/6/1/index.html
+++ b/blog/2017/6/1/index.html
@@ -66,6 +66,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2017/6/1/New-process-message-spec",title:"New PPMP-Specification for processes",date:"2017-06-01T00:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2017/6/1/New-process-message-spec",title:"New PPMP-Specification for processes",date:"2017-06-01T00:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2017/6/29/Validator-Online/index.html b/blog/2017/6/29/Validator-Online/index.html
index 7377ca0..fbb5b59 100644
--- a/blog/2017/6/29/Validator-Online/index.html
+++ b/blog/2017/6/29/Validator-Online/index.html
@@ -73,6 +73,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{post:{name:"Validator-Online",content:"<p>Our first PPMP-Validator as a HTTP-server is online!</p>\n<p>What we already contribtuted as sourcecode to the Unide-project we've also installed on an eclipse sandbox server. Now you are able to validate your PPMP-messages through the internet without running the server on your local machine. The intention is to make the latest specification validator accessible to everyone at anytime.</p>\n<p>You can reach the server by sending POST-requests to the following endpoints:</p>\n<pre>\n<a>http://unide.eclipse.org/rest/v2/message?validate=true</a>\n<a>http://unide.eclipse.org/rest/v2/measurement?validate=true</a>\n<a>http://unide.eclipse.org/rest/v2/process?validate=true</a>\n</pre>\n<p>Further functions of the sandbox server will be also visualization and storaging of incoming PPMP-messages.</p>\n",url:"/blog/2017/6/29/Validator-Online",title:"First PPMP-Validator Online",date:"2017-06-29T00:00:00.000Z",tags:["validator"],prev:{url:"/blog/2017/6/1/New-process-message-spec",title:"New PPMP-Specification for processes"},next:{url:"/blog/2017/10/6/DZone-article-published",title:"DZone article published"}}}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_article.dfd7fcb83848670d21b1.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{post:{name:"Validator-Online",content:"<p>Our first PPMP-Validator as a HTTP-server is online!</p>\n<p>What we already contribtuted as sourcecode to the Unide-project we've also installed on an eclipse sandbox server. Now you are able to validate your PPMP-messages through the internet without running the server on your local machine. The intention is to make the latest specification validator accessible to everyone at anytime.</p>\n<p>You can reach the server by sending POST-requests to the following endpoints:</p>\n<pre>\n<a>http://unide.eclipse.org/rest/v2/message?validate=true</a>\n<a>http://unide.eclipse.org/rest/v2/measurement?validate=true</a>\n<a>http://unide.eclipse.org/rest/v2/process?validate=true</a>\n</pre>\n<p>Further functions of the sandbox server will be also visualization and storaging of incoming PPMP-messages.</p>\n",url:"/blog/2017/6/29/Validator-Online",title:"First PPMP-Validator Online",date:"2017-06-29T00:00:00.000Z",tags:["validator"],prev:{url:"/blog/2017/6/1/New-process-message-spec",title:"New PPMP-Specification for processes"},next:{url:"/blog/2017/10/6/DZone-article-published",title:"DZone article published"}}}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_article.dfd7fcb83848670d21b1.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2017/6/29/index.html b/blog/2017/6/29/index.html
index 8f74e46..fddc484 100644
--- a/blog/2017/6/29/index.html
+++ b/blog/2017/6/29/index.html
@@ -66,6 +66,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2017/6/29/Validator-Online",title:"First PPMP-Validator Online",date:"2017-06-29T00:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2017/6/29/Validator-Online",title:"First PPMP-Validator Online",date:"2017-06-29T00:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2017/6/index.html b/blog/2017/6/index.html
index b3f116c..34f7d85 100644
--- a/blog/2017/6/index.html
+++ b/blog/2017/6/index.html
@@ -70,6 +70,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2017/6/29/Validator-Online",title:"First PPMP-Validator Online",date:"2017-06-29T00:00:00.000Z"},{url:"/blog/2017/6/1/New-process-message-spec",title:"New PPMP-Specification for processes",date:"2017-06-01T00:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2017/6/29/Validator-Online",title:"First PPMP-Validator Online",date:"2017-06-29T00:00:00.000Z"},{url:"/blog/2017/6/1/New-process-message-spec",title:"New PPMP-Specification for processes",date:"2017-06-01T00:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2017/index.html b/blog/2017/index.html
index dd516ad..fdbfc67 100644
--- a/blog/2017/index.html
+++ b/blog/2017/index.html
@@ -82,6 +82,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2017/10/19/i40-testbed-started",title:"Unide is part of Industry 4.0 Testbed",date:"2017-10-19T00:00:00.000Z"},{url:"/blog/2017/10/6/DZone-article-published",title:"DZone article published",date:"2017-10-06T00:00:00.000Z"},{url:"/blog/2017/6/29/Validator-Online",title:"First PPMP-Validator Online",date:"2017-06-29T00:00:00.000Z"},{url:"/blog/2017/6/1/New-process-message-spec",title:"New PPMP-Specification for processes",date:"2017-06-01T00:00:00.000Z"},{url:"/blog/2017/3/23/Unide-at-BCX",title:"Unide at Bosch Hackaton",date:"2017-03-23T17:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2017/10/19/i40-testbed-started",title:"Unide is part of Industry 4.0 Testbed",date:"2017-10-19T00:00:00.000Z"},{url:"/blog/2017/10/6/DZone-article-published",title:"DZone article published",date:"2017-10-06T00:00:00.000Z"},{url:"/blog/2017/6/29/Validator-Online",title:"First PPMP-Validator Online",date:"2017-06-29T00:00:00.000Z"},{url:"/blog/2017/6/1/New-process-message-spec",title:"New PPMP-Specification for processes",date:"2017-06-01T00:00:00.000Z"},{url:"/blog/2017/3/23/Unide-at-BCX",title:"Unide at Bosch Hackaton",date:"2017-03-23T17:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2018/1/26/New-website/index.html b/blog/2018/1/26/New-website/index.html
index 8bde322..0266958 100644
--- a/blog/2018/1/26/New-website/index.html
+++ b/blog/2018/1/26/New-website/index.html
@@ -66,6 +66,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{post:{name:"New-website",content:'<p>It turned out that even with multiple reviews, it is possible to have small mistakes in the PPMP documentation. In order to avoid such contradictions between diagrams, specification, json-schema and eventual implementation, we decided to rework the project structure and fixed <a href="https://github.com/eclipse/unide/issues/21">the JSON Schemas</a>. The corresponding uml diagrams are generated with <a href="http://plantuml.com/">plantuml</a>. For even better understandibility, the attributes are sorted lexicographically.</p>\n<p>Although the website has the same look, it is completely reworked as a <a href="https://en.wikipedia.org/wiki/Single-page_application">single-page application</a> to generate the specification directly from the json-schema. Instead of using <a href="https://hexo.io/">hexo</a> it is now based on <a href="https://nuxtjs.org/">nuxt.js</a>. <a href="https://vuejs.org/">Vue.js</a> as a basis for nuxt is also used in the <a href="https://github.com/eclipse/unide/tree/master/clients/binsa">new PPMP client application called binsa</a>.</p>\n',url:"/blog/2018/1/26/New-website",title:"Updated Website",date:"2018-01-26T00:00:00.000Z",tags:["media"],prev:{url:"/blog/2017/10/19/i40-testbed-started",title:"Unide is part of Industry 4.0 Testbed"},next:{url:"/blog/2018/2/11/Transform-PPMP-with-camel",title:"PPMP Use Cases: Simple Transformation with Apache Camel"}}}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_article.dfd7fcb83848670d21b1.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{post:{name:"New-website",content:'<p>It turned out that even with multiple reviews, it is possible to have small mistakes in the PPMP documentation. In order to avoid such contradictions between diagrams, specification, json-schema and eventual implementation, we decided to rework the project structure and fixed <a href="https://github.com/eclipse/unide/issues/21">the JSON Schemas</a>. The corresponding uml diagrams are generated with <a href="http://plantuml.com/">plantuml</a>. For even better understandibility, the attributes are sorted lexicographically.</p>\n<p>Although the website has the same look, it is completely reworked as a <a href="https://en.wikipedia.org/wiki/Single-page_application">single-page application</a> to generate the specification directly from the json-schema. Instead of using <a href="https://hexo.io/">hexo</a> it is now based on <a href="https://nuxtjs.org/">nuxt.js</a>. <a href="https://vuejs.org/">Vue.js</a> as a basis for nuxt is also used in the <a href="https://github.com/eclipse/unide/tree/master/clients/binsa">new PPMP client application called binsa</a>.</p>\n',url:"/blog/2018/1/26/New-website",title:"Updated Website",date:"2018-01-26T00:00:00.000Z",tags:["media"],prev:{url:"/blog/2017/10/19/i40-testbed-started",title:"Unide is part of Industry 4.0 Testbed"},next:{url:"/blog/2018/2/11/Transform-PPMP-with-camel",title:"PPMP Use Cases: Simple Transformation with Apache Camel"}}}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_article.dfd7fcb83848670d21b1.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2018/1/26/index.html b/blog/2018/1/26/index.html
index b9b6cc3..8140b59 100644
--- a/blog/2018/1/26/index.html
+++ b/blog/2018/1/26/index.html
@@ -66,6 +66,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2018/1/26/New-website",title:"Updated Website",date:"2018-01-26T00:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2018/1/26/New-website",title:"Updated Website",date:"2018-01-26T00:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2018/1/index.html b/blog/2018/1/index.html
index 7dfe75d..c6f245a 100644
--- a/blog/2018/1/index.html
+++ b/blog/2018/1/index.html
@@ -66,6 +66,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2018/1/26/New-website",title:"Updated Website",date:"2018-01-26T00:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2018/1/26/New-website",title:"Updated Website",date:"2018-01-26T00:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2018/2/11/Transform-PPMP-with-camel/index.html b/blog/2018/2/11/Transform-PPMP-with-camel/index.html
index 2ee8584..d9a0dfe 100644
--- a/blog/2018/2/11/Transform-PPMP-with-camel/index.html
+++ b/blog/2018/2/11/Transform-PPMP-with-camel/index.html
@@ -702,6 +702,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{post:{name:"Transform-PPMP-with-camel",content:'<p>The Production Performance Management Protocol (PPMP) is a simple structure to send out machine data. Unide, as its hosting project, is supposed to provide exemplary implementations.</p>\n<p>We have already published <a href="https://github.com/eclipse/unide/tree/master/servers/rest">a REST server</a>, <a href="https://github.com/eclipse/unide.java">java-</a> and <a href="https://github.com/eclipse/unide.python">python-</a> bindings and an <a href="https://github.com/eclipse/unide/tree/master/clients/binsa">html5-client</a>. But how are these implementations used in real life?</p>\n<h1>The Challenge</h1>\n<div class="card figure">\n\t<div class="card-image">\n\t\t<figure class="image">\n\t\t\t<img alt="Welding robots" title="BMW plant, spot welding" src="/unide/images/blog/Transform-PPMP-with-camel-welding.jpg"></img>\n\t\t</figure>\n\t</div>\n\t<div class="card-content">\n\t\tBMW plant in Leipzig, Germany: Spot welding <a href="https://creativecommons.org/licenses/by-sa/2.0/de/deed.en">(CC BY-SA 2.0 DE)</a>\n\t</div>\n</div>\n<p>In the automotive industry, <a href="https://en.wikipedia.org/wiki/Spot_welding">welding spots</a> are crucial for the quality of a car and the security of the passenger. In modern production lines, hundreds of welding spots have to be precisely set in a single shift. In order to reduce product rework, scrap, destructible tests and machine downtime, the quality should be monitored consistently. That\'s what special welding controller in machines do. Unfortunately, this data is often only used locally, for a short period of time and in proprietary formats. Just enough to determine the immediate process outcome. In that case, further opportunities of analysing the information are not taken. With the continuous increase in complexity, price and time pressure, the demand for further processing and optimization grows. The data could be used to prevent or even predict maintenance or just store the data in long time archives in case of legal disputes.</p>\n<p>One prerequisite for such connectivity is the hardware and its connectivity. Older generations of welding controllers can only be accessed with proprietary stacks (like the <a href="https://www.boschrexroth.com/en/xc/products/product-groups/welding-technology/controllers-with-power-section/mf-system-psi6000/index">PSI 6000</a>) whereas newer generations (like the <a href="https://www.boschrexroth.com/en/xc/company/press/index2-29696">PRC 7000</a>) are much more flexible in terms of networking and communication. In general, there are two aspects that make up the communication: the transport protocol and the structure of the payload. This is similar to our daily life: if you want to chat with your friends, you need to use the same messenger or communication technology (phone, email) and you need speak the same language (English, German etc.).</p>\n<p>In the following sections, let\'s assume we need to transform the transport protocol as well as the payload. The data is generated by a welding controller and should be passed to <a href="https://unide.eclipse.org">the unide REST server</a> for persisting it in a dedicated timeseries database.</p>\n<h1>The Approach</h1>\n<p>We want to find a way to receive the data, transform it into PPMP and store it into a database in our <a href="https://unide.eclipse.org">REST Server</a>.</p>\n<p>First, we need to understand which interfaces the controller has, which communication protocol is used, and how the payload would be interpreted. In the case of the PSI 6000, it was configured to publish the quality data to a <a href="https://de.wikipedia.org/wiki/MQTT">mqtt</a> message broker (here: <a href="https://mosquitto.org/">Eclipse mosquitto</a>). We don\'t have an extensive documentation of the payload, but we can look at samples of it (some Curve data shortened at the end):</p>\n<pre class="language-json"><code class="language-json"><span class="token punctuation">{</span>\n  <span class="token property">"Name"</span><span class="token operator">:</span> <span class="token string">"WeldLog/UIR Testrack 24/"</span><span class="token punctuation">,</span>\n  <span class="token property">"WeldTimer"</span><span class="token operator">:</span> <span class="token string">"UIR Testrack 24"</span><span class="token punctuation">,</span>\n  <span class="token property">"TimeStamp"</span><span class="token operator">:</span> <span class="token string">"2018-01-17T10:41:00.0008436+01:00"</span><span class="token punctuation">,</span>\n  <span class="token property">"OutputFormat"</span><span class="token operator">:</span> <span class="token string">"JSON"</span><span class="token punctuation">,</span>\n  <span class="token property">"Message"</span><span class="token operator">:</span> <span class="token punctuation">{</span>\n    <span class="token property">"WeldLog"</span><span class="token operator">:</span> <span class="token punctuation">{</span>\n      <span class="token property">"protRecord_ID"</span><span class="token operator">:</span> <span class="token number">734827</span><span class="token punctuation">,</span>\n      <span class="token property">"dateTime"</span><span class="token operator">:</span> <span class="token string">"2018-01-15T16:52:32.09"</span><span class="token punctuation">,</span>\n      <span class="token property">"timerName"</span><span class="token operator">:</span> <span class="token string">"UIR Testrack 24"</span><span class="token punctuation">,</span>\n      <span class="token property">"progNo"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"spotName"</span><span class="token operator">:</span> <span class="token string">""</span><span class="token punctuation">,</span>\n      <span class="token property">"wear"</span><span class="token operator">:</span> <span class="token number">8312480</span><span class="token punctuation">,</span>\n      <span class="token property">"wearPerCent"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"monitorState"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"regulationState"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"measureState"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"powerState"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"sequenceState"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"sequenceStateAdd"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"sequenceRepeat"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"monitorMode"</span><span class="token operator">:</span> <span class="token number">1</span><span class="token punctuation">,</span>\n      <span class="token property">"iDemandStd"</span><span class="token operator">:</span> <span class="token number">3</span><span class="token punctuation">,</span>\n      <span class="token property">"ilsts"</span><span class="token operator">:</span> <span class="token number">13.14</span><span class="token punctuation">,</span>\n      <span class="token property">"regulationStd"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"iDemand1"</span><span class="token operator">:</span> <span class="token number">3</span><span class="token punctuation">,</span>\n      <span class="token property">"iActual1"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"regulation1"</span><span class="token operator">:</span> <span class="token number">4</span><span class="token punctuation">,</span>\n      <span class="token property">"iDemand2"</span><span class="token operator">:</span> <span class="token number">3</span><span class="token punctuation">,</span>\n      <span class="token property">"iActual2"</span><span class="token operator">:</span> <span class="token number">13.16</span><span class="token punctuation">,</span>\n      <span class="token property">"regulation2"</span><span class="token operator">:</span> <span class="token number">4</span><span class="token punctuation">,</span>\n      <span class="token property">"iDemand3"</span><span class="token operator">:</span> <span class="token number">3</span><span class="token punctuation">,</span>\n      <span class="token property">"iActual3"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"regulation3"</span><span class="token operator">:</span> <span class="token number">4</span><span class="token punctuation">,</span>\n      <span class="token property">"phaStd"</span><span class="token operator">:</span> <span class="token number">24.96</span><span class="token punctuation">,</span>\n      <span class="token property">"pha1"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"pha2"</span><span class="token operator">:</span> <span class="token number">24.64</span><span class="token punctuation">,</span>\n      <span class="token property">"pha3"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"t_iDemandStd"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"tActualStd"</span><span class="token operator">:</span> <span class="token number">878</span><span class="token punctuation">,</span>\n      <span class="token property">"partIdentString"</span><span class="token operator">:</span> <span class="token string">""</span><span class="token punctuation">,</span>\n      <span class="token property">"tipDressCounter"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"electrodeNo"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"sgForceSetPoint"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"sgSheetThicknessSetPoint"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"sgSagGpSetPoint"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"sgSpotWithSg"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"sgMotorCurrent"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"sgMotorTemp"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"sgForce"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"sgSheetThickness"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"sgSagGp"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"sgSagGc"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"regUsrUspJunction"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"regUsrUspMax"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"regSpotDiaActual"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"regSpotDiaMinDemand"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"regSplashTime"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"nuggetDiameter"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"usp"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"normingTime"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"regulationStartTime"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"returnToConstantCurrent"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"declineUsp"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"offsetUsp"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"currentFactor"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"triggerTime"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"xqrMeasuringActive"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"xqrRegulationActive"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"xqrMonitoringActive"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"xqrWeldTimeProlongationActive"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"voltageActualValue"</span><span class="token operator">:</span> <span class="token number">0.03</span><span class="token punctuation">,</span>\n      <span class="token property">"voltageRefValue"</span><span class="token operator">:</span> <span class="token number">0.03</span><span class="token punctuation">,</span>\n      <span class="token property">"currentActualValue"</span><span class="token operator">:</span> <span class="token number">13.17</span><span class="token punctuation">,</span>\n      <span class="token property">"currentReferenceValue"</span><span class="token operator">:</span> <span class="token number">13.95</span><span class="token punctuation">,</span>\n      <span class="token property">"weldTimeActualValue"</span><span class="token operator">:</span> <span class="token number">876</span><span class="token punctuation">,</span>\n      <span class="token property">"weldTimeRefValue"</span><span class="token operator">:</span> <span class="token number">760</span><span class="token punctuation">,</span>\n      <span class="token property">"energyActualValue"</span><span class="token operator">:</span> <span class="token number">395.1261</span><span class="token punctuation">,</span>\n      <span class="token property">"energyRefValue"</span><span class="token operator">:</span> <span class="token number">342</span><span class="token punctuation">,</span>\n      <span class="token property">"powerActualValue"</span><span class="token operator">:</span> <span class="token number">395.133</span><span class="token punctuation">,</span>\n      <span class="token property">"powerRefValue"</span><span class="token operator">:</span> <span class="token number">449.35</span><span class="token punctuation">,</span>\n      <span class="token property">"resistanceActualValue"</span><span class="token operator">:</span> <span class="token number">2</span><span class="token punctuation">,</span>\n      <span class="token property">"resistanceRefValue"</span><span class="token operator">:</span> <span class="token number">2</span><span class="token punctuation">,</span>\n      <span class="token property">"pulseWidthActualValue"</span><span class="token operator">:</span> <span class="token number">25.02</span><span class="token punctuation">,</span>\n      <span class="token property">"pulseWidthRefValue"</span><span class="token operator">:</span> <span class="token number">26.19</span><span class="token punctuation">,</span>\n      <span class="token property">"stabilisationFactorActValue"</span><span class="token operator">:</span> <span class="token number">55</span><span class="token punctuation">,</span>\n      <span class="token property">"stabilisationFactorRefValue"</span><span class="token operator">:</span> <span class="token number">100</span><span class="token punctuation">,</span>\n      <span class="token property">"thresholdStabilisationFactor"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"wldEffectStabilisationFactor"</span><span class="token operator">:</span> <span class="token number">100</span><span class="token punctuation">,</span>\n      <span class="token property">"uipActualValue"</span><span class="token operator">:</span> <span class="token number">126</span><span class="token punctuation">,</span>\n      <span class="token property">"uipRefValue"</span><span class="token operator">:</span> <span class="token number">100</span><span class="token punctuation">,</span>\n      <span class="token property">"uirExpulsionTime"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"uirMeasuringActive"</span><span class="token operator">:</span> <span class="token number">1</span><span class="token punctuation">,</span>\n      <span class="token property">"uirRegulationActive"</span><span class="token operator">:</span> <span class="token number">1</span><span class="token punctuation">,</span>\n      <span class="token property">"uirMonitoringActive"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"uirWeldTimeProlongationActive"</span><span class="token operator">:</span> <span class="token number">1</span><span class="token punctuation">,</span>\n      <span class="token property">"uirQStoppRefCntValue"</span><span class="token operator">:</span> <span class="token number">9</span><span class="token punctuation">,</span>\n      <span class="token property">"uirQStoppActCntValue"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"uirUipUpperTol"</span><span class="token operator">:</span> <span class="token number">100</span><span class="token punctuation">,</span>\n      <span class="token property">"uirUipLowerTol"</span><span class="token operator">:</span> <span class="token number">100</span><span class="token punctuation">,</span>\n      <span class="token property">"uirUipCondTol"</span><span class="token operator">:</span> <span class="token number">100</span><span class="token punctuation">,</span>\n      <span class="token property">"uirPsfLowerTol"</span><span class="token operator">:</span> <span class="token number">100</span><span class="token punctuation">,</span>\n      <span class="token property">"uirPsfCondTol"</span><span class="token operator">:</span> <span class="token number">100</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP16_1"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP16_2"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP16_3"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP16_4"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP16_5"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP32_6"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP16_7"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP16_8"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP16_9"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP16_10"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP16_11"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP32_12"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP16_13"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP16_14"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP16_15"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP16_16"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP16_17"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP32_18"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"uipMonCondUpperTol"</span><span class="token operator">:</span> <span class="token number">100</span><span class="token punctuation">,</span>\n      <span class="token property">"fqfActualValue"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"fqfRefValue"</span><span class="token operator">:</span> <span class="token number">100</span><span class="token punctuation">,</span>\n      <span class="token property">"fqfMonUpperTol"</span><span class="token operator">:</span> <span class="token number">100</span><span class="token punctuation">,</span>\n      <span class="token property">"fqfMonLowerTol"</span><span class="token operator">:</span> <span class="token number">100</span><span class="token punctuation">,</span>\n      <span class="token property">"fqfMonCondUpperTol"</span><span class="token operator">:</span> <span class="token number">100</span><span class="token punctuation">,</span>\n      <span class="token property">"fqfMonCondLowerTol"</span><span class="token operator">:</span> <span class="token number">100</span><span class="token punctuation">,</span>\n      <span class="token property">"fqfMeasuringActive"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"xqrModeOff"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"reweldActive"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"weldspotRefIdent"</span><span class="token operator">:</span> <span class="token string">"UIR_PART"</span><span class="token punctuation">,</span>\n      <span class="token property">"sg_Torque_Gp"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"sg_Force_Corr"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"sg_Weldspot_Geo_Wear"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"sg_Wear_Length"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"sg_Beam_UpArching"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"CurrentCurve"</span><span class="token operator">:</span> <span class="token punctuation">[</span>\n        <span class="token number">11621</span><span class="token punctuation">,</span>\n        <span class="token number">15434</span><span class="token punctuation">,</span>\n        ...\n      <span class="token punctuation">]</span><span class="token punctuation">,</span>\n      <span class="token property">"VoltageCurve"</span><span class="token operator">:</span> <span class="token punctuation">[</span>\n        <span class="token number">39</span><span class="token punctuation">,</span>\n        <span class="token number">29</span><span class="token punctuation">,</span>\n        ...\n      <span class="token punctuation">]</span><span class="token punctuation">,</span>\n      <span class="token property">"ForceCurve"</span><span class="token operator">:</span> <span class="token punctuation">[</span>\n        <span class="token number">49</span><span class="token punctuation">,</span>\n        <span class="token number">49</span><span class="token punctuation">,</span>\n        ...\n      <span class="token punctuation">]</span>\n    <span class="token punctuation">}</span>\n  <span class="token punctuation">}</span>\n<span class="token punctuation">}</span>\n</code></pre>\n<p>That\'s already very detailed, but it\'s unclear which device / welding spot the data comes from and what the timing of the curves was. Let\'s get some more structure in with PPMP!</p>\n<p>In PPMP, we have the option to differentiate between discrete manufacturing data (MES - part produced) by using the <a href="/unide/specification/measurement-message">measurement-message</a> and detailed process data by using the <a href="https://www.eclipse.org/unide/specification/process-message">process-message</a>. In the welding payload, that\'s all combined in one message. So we also want to split this payload into two.</p>\n<h2>Introducing Apache Camel</h2>\n<div class="card figure is-pulled-left">\n\t<div class="card-image">\n\t\t<figure class="image">\n\t\t\t<img alt="Apache Camel" title="Apache Camel" src="/unide/images/blog/Transform-PPMP-with-camel-camel.png"></img>\n\t\t</figure>\n\t</div>\n\t<div class="card-content">\n\t\tApache Camel, <a href="https://www.apache.org/licenses/LICENSE-2.0">(Apache&nbsp;License&nbsp;2.0)</a>\n\t</div>\n</div>\n<p><a href="https://en.wikipedia.org/wiki/Apache_Camel">Apache Camel</a> is a java-based Open Source framework, that can transform and route data. It supports most of the <a href="https://en.wikipedia.org/wiki/Enterprise_Integration_Patterns">Enterprise Integration Patterns</a> and hundreds(!) of <a href="http://camel.apache.org/components.html">connectors / components</a>. Think of it as an extensive transformation and workflow automation engine. In fact, it\'s so powerful and versatile, that it unfortunately doesn\'t come with a visual user interface or a plug-and-play installer. Luckily, for everyone who doesn\'t happen to be a java expert, there\'s also an xml configuration (via <a href="https://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/xsd-configuration.html">spring xml</a>). And that\'s mostly all we need!</p>\n<h2>Transforming the Communication Protocol</h2>\n<p>We will use Spring XML to configure Apache Camel. The workflow in Camel are called <code>&lt;routes&gt;</code>. So let\'s create a route that transforms our mqtt to REST protocol:</p>\n<pre class="language-xml"><code class="language-xml"><span class="token prolog">&lt;?xml version="1.0" encoding="UTF-8"?></span>\n<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>beans</span> <span class="token attr-name">xmlns</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.springframework.org/schema/beans<span class="token punctuation">"</span></span>\n\t<span class="token attr-name"><span class="token namespace">xmlns:</span>xsi</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.w3.org/2001/XMLSchema-instance<span class="token punctuation">"</span></span> <span class="token attr-name"><span class="token namespace">xmlns:</span>camel</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://camel.apache.org/schema/spring<span class="token punctuation">"</span></span>\n\t<span class="token attr-name"><span class="token namespace">xmlns:</span>util</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.springframework.org/schema/util<span class="token punctuation">"</span></span>\n\t<span class="token attr-name"><span class="token namespace">xsi:</span>schemaLocation</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.springframework.org/schema/util\n\thttp://www.springframework.org/schema/util/spring-util.xsd \n\thttp://www.springframework.org/schema/beans\n    http://www.springframework.org/schema/beans/spring-beans.xsd\n    http://camel.apache.org/schema/spring\n    http://camel.apache.org/schema/spring/camel-spring.xsd<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>\n\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>camelContext</span> <span class="token attr-name">xmlns</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://camel.apache.org/schema/spring<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>route</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>from</span>\n\t\t\t\t<span class="token attr-name">uri</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>mqtt://psi6000?host=tcp://192.168.123.135:1883<span class="token entity" title="&amp;">&amp;amp;</span>subscribeTopicName=PSI6000//PROCESS/PPMP/PROCESS<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>to</span>\n\t\t\t\t<span class="token attr-name">uri</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>jetty:http://unide.eclipse.org:8080/rest/v2/measurement?bridgeEndpoint=true<span class="token entity" title="&amp;">&amp;amp;</span>throwExceptionOnFailure=true<span class="token punctuation">"</span></span><span class="token punctuation">/></span></span>\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>route</span><span class="token punctuation">></span></span>\n\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>camelContext</span><span class="token punctuation">></span></span>\n<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>beans</span><span class="token punctuation">></span></span>\n</code></pre>\n<p>That\'s it! A <code>&lt;route&gt;</code> that reads<code>&lt;from&gt;</code> mqtt and forwards <code>&lt;to&gt;</code> http. Not so difficult, is it? We could use many of the other <a href="http://camel.apache.org/components.html">connectors / components</a> in the example above as well to transform from/to different protocols.</p>\n<p>But wait! The welding payload above was not PPMP. So we also need to normalize the payload.</p>\n<h2>Normalizing the Payload</h2>\n<p>Now that we can easily convert protocols, let\'s address the structure of the payload. Overall, we want to have a workflow that looks as described in the diagram below:</p>\n<div class="card figure">\n\t<div class="card-image">\n\t\t<figure class="image">\n\t\t\t<img alt="data workflow" title="data workflow" src="/unide/images/blog/Transform-PPMP-with-camel-1.svg"></img>\n\t\t</figure>\n\t</div>\n\t<div class="card-content">\n\t\tWorkflow to extract the data from controller, convert it and send the data to the cloud application\n\t</div>\n</div>\n<p>The extra steps here are:</p>\n<ol>\n<li>transform the PSI 6000 JSON String payload to a java object</li>\n<li>transform the PSI 6000 java object to two PPMP-java objects (<a href="/unide/specification/measurement-message">measurement-message</a> and <a href="https://www.eclipse.org/unide/specification/process-message">process-message</a>)</li>\n<li>split up the two PPMP objects</li>\n<li>route the objects individually</li>\n<li>transform each PPMP object back to a String</li>\n</ol>\n<h3>Create the PSI 6000 Java Object</h3>\n<p>Luckily, there are helpers for transforming json (or xml) to plain old java objects (POJOs). We are using <a href="http://www.jsonschema2pojo.org/">jsonschema2pojo</a> to convert the above json sample to POJOs with Jackson 2.x annotation. I name the resulting data type class <code>PSI6000DataType</code> and organize it in the package <code>org.eclipse.iot.unide.integrators</code>. Based on the given testdata, jsonschema2pojo cannot fully deduct all attribute types correctly. In order to allow floating point values, we would rename all <code>Integer</code> and <code>Object</code> types to <code>Number</code> in the WeldLog.java file. Also in the same file, we would change the type of the <code>dateTime</code> field from String to <code>LocalDateTime</code> to be more accurate:</p>\n<pre class="language-java"><code class="language-java"><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>\n<span class="token annotation punctuation">@JsonProperty</span><span class="token punctuation">(</span><span class="token string">"dateTime"</span><span class="token punctuation">)</span>\n<span class="token annotation punctuation">@JsonSerialize</span><span class="token punctuation">(</span>using <span class="token operator">=</span> LocalDateTimeSerializer<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span>\n<span class="token annotation punctuation">@JsonDeserialize</span><span class="token punctuation">(</span>using <span class="token operator">=</span> LocalDateTimeDeserializer<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span>\n<span class="token keyword">private</span> LocalDateTime dateTime<span class="token punctuation">;</span>\n<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>\n</code></pre>\n<p>For that, we also need to include the respective imports:</p>\n<pre class="language-java"><code class="language-java"><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>\n<span class="token keyword">import</span> com<span class="token punctuation">.</span>fasterxml<span class="token punctuation">.</span>jackson<span class="token punctuation">.</span>databind<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span>JsonDeserialize<span class="token punctuation">;</span>\n<span class="token keyword">import</span> com<span class="token punctuation">.</span>fasterxml<span class="token punctuation">.</span>jackson<span class="token punctuation">.</span>databind<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span>JsonSerialize<span class="token punctuation">;</span>\n<span class="token keyword">import</span> com<span class="token punctuation">.</span>fasterxml<span class="token punctuation">.</span>jackson<span class="token punctuation">.</span>datatype<span class="token punctuation">.</span>jsr310<span class="token punctuation">.</span>deser<span class="token punctuation">.</span>LocalDateTimeDeserializer<span class="token punctuation">;</span>\n<span class="token keyword">import</span> com<span class="token punctuation">.</span>fasterxml<span class="token punctuation">.</span>jackson<span class="token punctuation">.</span>datatype<span class="token punctuation">.</span>jsr310<span class="token punctuation">.</span>ser<span class="token punctuation">.</span>LocalDateTimeSerializer<span class="token punctuation">;</span>\n<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>\n</code></pre>\n<p>and adjust the getter (<code>getDateTime()</code>), setter (<code>setDateTime()</code>) and the type in the constructor (<code>public WeldLog(...)</code>) accordingly.</p>\n<p>Camel will be able to transform (&quot;<em>unmarshal</em>&quot;) this datatype from a string to a POJO after adding the definition to the above Spring XML:</p>\n<pre class="language-xml"><code class="language-xml">...\n<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>camelContext</span> <span class="token attr-name">xmlns</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://camel.apache.org/schema/spring<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>\n\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dataFormats</span><span class="token punctuation">></span></span>\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>json</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>psi6000<span class="token punctuation">"</span></span> <span class="token attr-name">library</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>Jackson<span class="token punctuation">"</span></span>\n\t\t\t<span class="token attr-name">unmarshalTypeName</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>org.eclipse.iot.unide.integrators.PSI6000DataType<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dataFormats</span><span class="token punctuation">></span></span>\n\t...\n<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>camelContext</span><span class="token punctuation">></span></span>\n</code></pre>\n<h3>Use unide.java binding for PPMP Java Objects</h3>\n<p>For eventually transforming the PPMP objects back to String (&quot;<em>marshal</em>&quot;), we can make use of the <a href="https://github.com/eclipse/unide.java">unide PPMP java binding</a>. Just adjust the dataFormats section of the Spring XML so that it reads:</p>\n<pre class="language-xml"><code class="language-xml">...\n<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>camelContext</span> <span class="token attr-name">xmlns</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://camel.apache.org/schema/spring<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>\n\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dataFormats</span><span class="token punctuation">></span></span>\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>json</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>psi6000<span class="token punctuation">"</span></span> <span class="token attr-name">library</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>Jackson<span class="token punctuation">"</span></span>\n\t\t\t<span class="token attr-name">unmarshalTypeName</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>org.eclipse.iot.unide.integrators.PSI6000DataType<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>json</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>ppmpMeasurementMessage<span class="token punctuation">"</span></span> <span class="token attr-name">library</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>Jackson<span class="token punctuation">"</span></span>\n\t\t\t<span class="token attr-name">unmarshalTypeName</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>org.eclipse.iot.unide.ppmp.measurements.MeasurementsWrapper<span class="token punctuation">"</span></span>\n\t\t\t<span class="token attr-name">moduleClassNames</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>com.fasterxml.jackson.datatype.jsr310.JavaTimeModule<span class="token punctuation">"</span></span>\n\t\t\t<span class="token attr-name">disableFeatures</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>WRITE_DATES_AS_TIMESTAMPS<span class="token punctuation">"</span></span> \n\t\t\t<span class="token attr-name">include</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>NON_NULL<span class="token punctuation">"</span></span><span class="token punctuation">/></span></span>\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>json</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>ppmpProcessMessage<span class="token punctuation">"</span></span> <span class="token attr-name">library</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>Jackson<span class="token punctuation">"</span></span>\n\t\t\t<span class="token attr-name">unmarshalTypeName</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>org.eclipse.iot.unide.ppmp.process.ProcessWrapper<span class="token punctuation">"</span></span>\n\t\t\t<span class="token attr-name">moduleClassNames</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>com.fasterxml.jackson.datatype.jsr310.JavaTimeModule<span class="token punctuation">"</span></span>\n\t\t\t<span class="token attr-name">disableFeatures</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>WRITE_DATES_AS_TIMESTAMPS<span class="token punctuation">"</span></span>\n\t\t\t<span class="token attr-name">include</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>NON_NULL<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dataFormats</span><span class="token punctuation">></span></span>\n\t...\n<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>camelContext</span><span class="token punctuation">></span></span>\n</code></pre>\n<h3>Create the Workflow</h3>\n<p>In order to better structure data flow, we use multiple <code>&lt;route&gt;</code>-s: one for retrieving the data and two more after the split of the payload. They are connected via the virtual camel protocol &quot;<em>direct</em>&quot;. In the following Spring XML, you can also find some <code>&lt;log&gt;</code> points and additional steps to set http header (<code>&lt;setHeader&gt;</code>) for posting to the unide server:</p>\n<pre class="language-xml"><code class="language-xml"><span class="token prolog">&lt;?xml version="1.0" encoding="UTF-8"?></span>\n<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>beans</span> <span class="token attr-name">xmlns</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.springframework.org/schema/beans<span class="token punctuation">"</span></span>\n\t<span class="token attr-name"><span class="token namespace">xmlns:</span>xsi</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.w3.org/2001/XMLSchema-instance<span class="token punctuation">"</span></span> <span class="token attr-name"><span class="token namespace">xmlns:</span>camel</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://camel.apache.org/schema/spring<span class="token punctuation">"</span></span>\n\t<span class="token attr-name"><span class="token namespace">xmlns:</span>util</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.springframework.org/schema/util<span class="token punctuation">"</span></span>\n\t<span class="token attr-name"><span class="token namespace">xsi:</span>schemaLocation</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.springframework.org/schema/util\n\thttp://www.springframework.org/schema/util/spring-util.xsd \n\thttp://www.springframework.org/schema/beans\n    http://www.springframework.org/schema/beans/spring-beans.xsd\n    http://camel.apache.org/schema/spring\n    http://camel.apache.org/schema/spring/camel-spring.xsd<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>\n\n\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>bean</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>psi6000-to-ppmp<span class="token punctuation">"</span></span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>org.eclipse.iot.unide.integrators.PSI6000<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>bean</span><span class="token punctuation">></span></span>\n\n\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>camelContext</span> <span class="token attr-name">xmlns</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://camel.apache.org/schema/spring<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dataFormats</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>json</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>psi6000<span class="token punctuation">"</span></span> <span class="token attr-name">library</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>Jackson<span class="token punctuation">"</span></span>\n\t\t\t\t<span class="token attr-name">unmarshalTypeName</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>org.eclipse.iot.unide.integrators.PSI6000DataType<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>json</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>ppmpMeasurementMessage<span class="token punctuation">"</span></span> <span class="token attr-name">library</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>Jackson<span class="token punctuation">"</span></span>\n\t\t\t\t<span class="token attr-name">unmarshalTypeName</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>org.eclipse.iot.unide.ppmp.measurements.MeasurementsWrapper<span class="token punctuation">"</span></span>\n\t\t\t\t<span class="token attr-name">moduleClassNames</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>com.fasterxml.jackson.datatype.jsr310.JavaTimeModule<span class="token punctuation">"</span></span>\n\t\t\t\t<span class="token attr-name">disableFeatures</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>WRITE_DATES_AS_TIMESTAMPS<span class="token punctuation">"</span></span> <span class="token attr-name">include</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>NON_NULL<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>json</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>ppmpProcessMessage<span class="token punctuation">"</span></span> <span class="token attr-name">library</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>Jackson<span class="token punctuation">"</span></span>\n\t\t\t\t<span class="token attr-name">unmarshalTypeName</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>org.eclipse.iot.unide.ppmp.process.ProcessWrapper<span class="token punctuation">"</span></span>\n\t\t\t\t<span class="token attr-name">moduleClassNames</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>com.fasterxml.jackson.datatype.jsr310.JavaTimeModule<span class="token punctuation">"</span></span>\n\t\t\t\t<span class="token attr-name">disableFeatures</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>WRITE_DATES_AS_TIMESTAMPS<span class="token punctuation">"</span></span> <span class="token attr-name">include</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>NON_NULL<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dataFormats</span><span class="token punctuation">></span></span>\n\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>route</span> <span class="token attr-name">autoStartup</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>true<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>from</span>\n\t\t\t\t<span class="token attr-name">uri</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>mqtt://psi6000?host=tcp://192.168.123.135:1883<span class="token entity" title="&amp;">&amp;amp;</span>subscribeTopicName=PSI6000//PROCESS/PPMP/PROCESS<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>unmarshal</span> <span class="token attr-name">ref</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>psi6000<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>bean</span> <span class="token attr-name">ref</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>psi6000-to-ppmp<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>setHeader</span> <span class="token attr-name">headerName</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>Content-Type<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>\n\t\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>constant</span><span class="token punctuation">></span></span>application/json; charset=utf-8<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>constant</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>setHeader</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>setHeader</span> <span class="token attr-name">headerName</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>CamelHttpMethod<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>\n\t\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>constant</span><span class="token punctuation">></span></span>POST<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>constant</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>setHeader</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>multicast</span><span class="token punctuation">></span></span>\n\t\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>to</span> <span class="token attr-name">uri</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>direct:measurement<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>to</span> <span class="token attr-name">uri</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>direct:process<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>multicast</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>log</span> <span class="token attr-name">message</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>done<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>setBody</span><span class="token punctuation">></span></span>\n\t\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>simple</span><span class="token punctuation">></span></span>{"result": true }<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>simple</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>setBody</span><span class="token punctuation">></span></span>\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>route</span><span class="token punctuation">></span></span>\n\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>route</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>from</span> <span class="token attr-name">uri</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>direct:measurement<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>setBody</span><span class="token punctuation">></span></span>\n\t\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>simple</span><span class="token punctuation">></span></span>${body[0]}<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>simple</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>setBody</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>log</span> <span class="token attr-name">message</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>deviceId measurement: ${body.device.deviceID}<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>marshal</span> <span class="token attr-name">ref</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>ppmpMeasurementMessage<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>log</span> <span class="token attr-name">message</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>sending measurement<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>setHeader</span> <span class="token attr-name">headerName</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>Content-Length<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>\n\t\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>simple</span><span class="token punctuation">></span></span>body.length<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>simple</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>setHeader</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>to</span>\n\t\t\t\t<span class="token attr-name">uri</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>jetty:http://unide.eclipse.org:8080/rest/v2/measurement?bridgeEndpoint=true<span class="token entity" title="&amp;">&amp;amp;</span>throwExceptionOnFailure=true<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>log</span> <span class="token attr-name">message</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>measurement sent<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>route</span><span class="token punctuation">></span></span>\n\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>route</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>from</span> <span class="token attr-name">uri</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>direct:process<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>setBody</span><span class="token punctuation">></span></span>\n\t\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>simple</span><span class="token punctuation">></span></span>${body[1]}<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>simple</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>setBody</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>log</span> <span class="token attr-name">message</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>deviceId process: ${body.device.deviceID}<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>marshal</span> <span class="token attr-name">ref</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>ppmpProcessMessage<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>log</span> <span class="token attr-name">message</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>sending process<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>setHeader</span> <span class="token attr-name">headerName</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>Content-Length<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>\n\t\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>simple</span><span class="token punctuation">></span></span>body.length<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>simple</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>setHeader</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>to</span>\n\t\t\t\t<span class="token attr-name">uri</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>jetty:http://unide.eclipse.org:8080/rest/v2/process?bridgeEndpoint=true<span class="token entity" title="&amp;">&amp;amp;</span>throwExceptionOnFailure=true<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>log</span> <span class="token attr-name">message</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>process sent<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>route</span><span class="token punctuation">></span></span>\n\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>camelContext</span><span class="token punctuation">></span></span>\n<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>beans</span><span class="token punctuation">></span></span>\n</code></pre>\n<p>You might have noticed that we have not yet discussed one important item in this workflow: how do we actually transform the payload from one format to another?</p>\n<h3>Transforming from PSI 6000 POJO to PPMP POJOs</h3>\n<p>One thing that we\'ll hardwire as java code is the transformation from the source to the target structure. The same functionality could be achieved with scripting components (e.g. <a href="http://camel.apache.org/groovy.html">groovy</a>, but that would be less powerful and worse performance. Since we don\'t expect the format to change but mostly the workflow or endpoints, implementing a java bean is not too much effort. Here\'s how:<br>\nApache Camel offers a <code>Processor</code> interface that can be used to override the <code>process()</code> function. This function receives the complete message (<code>exchange</code>) and can modify it in any way. Since we have created the PSI 6000 Java Object already and want to produce PPMP java objects, the logic is mostly about creating the child objects and wiring the suitable getter to corresponding setter.</p>\n<pre class="language-java"><code class="language-java"><span class="token keyword">package</span> org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>integrators<span class="token punctuation">;</span>\n\n<span class="token keyword">import</span> java<span class="token punctuation">.</span>time<span class="token punctuation">.</span>OffsetDateTime<span class="token punctuation">;</span>\n<span class="token keyword">import</span> java<span class="token punctuation">.</span>time<span class="token punctuation">.</span>ZoneOffset<span class="token punctuation">;</span>\n<span class="token keyword">import</span> java<span class="token punctuation">.</span>util<span class="token punctuation">.</span>Arrays<span class="token punctuation">;</span>\n<span class="token keyword">import</span> java<span class="token punctuation">.</span>util<span class="token punctuation">.</span>LinkedList<span class="token punctuation">;</span>\n<span class="token keyword">import</span> java<span class="token punctuation">.</span>util<span class="token punctuation">.</span>List<span class="token punctuation">;</span>\n\n<span class="token keyword">import</span> org<span class="token punctuation">.</span>apache<span class="token punctuation">.</span>camel<span class="token punctuation">.</span>Exchange<span class="token punctuation">;</span>\n<span class="token keyword">import</span> org<span class="token punctuation">.</span>apache<span class="token punctuation">.</span>camel<span class="token punctuation">.</span>Message<span class="token punctuation">;</span>\n<span class="token keyword">import</span> org<span class="token punctuation">.</span>apache<span class="token punctuation">.</span>camel<span class="token punctuation">.</span>Processor<span class="token punctuation">;</span>\n<span class="token keyword">import</span> org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>commons<span class="token punctuation">.</span>Device<span class="token punctuation">;</span>\n<span class="token keyword">import</span> org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>commons<span class="token punctuation">.</span>MetaData<span class="token punctuation">;</span>\n<span class="token keyword">import</span> org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>measurements<span class="token punctuation">.</span>MeasurementsWrapper<span class="token punctuation">;</span>\n<span class="token keyword">import</span> org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>process<span class="token punctuation">.</span>Process<span class="token punctuation">;</span>\n<span class="token keyword">import</span> org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>process<span class="token punctuation">.</span>ProcessWrapper<span class="token punctuation">;</span>\n\n<span class="token keyword">import</span> com<span class="token punctuation">.</span>fasterxml<span class="token punctuation">.</span>jackson<span class="token punctuation">.</span>core<span class="token punctuation">.</span>JsonProcessingException<span class="token punctuation">;</span>\n\n<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">PSI6000</span> <span class="token keyword">implements</span> <span class="token class-name">Processor</span> <span class="token punctuation">{</span>\n\n\t<span class="token keyword">public</span> <span class="token function">PSI6000</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>\n\n\t<span class="token keyword">private</span> org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>measurements<span class="token punctuation">.</span>SeriesMap <span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>\n\t\t\torg<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>measurements<span class="token punctuation">.</span>SeriesMap map<span class="token punctuation">,</span> String name<span class="token punctuation">,</span> Number value<span class="token punctuation">)</span> <span class="token punctuation">{</span>\n\t\t<span class="token keyword">if</span> <span class="token punctuation">(</span>value <span class="token operator">!=</span> null<span class="token punctuation">)</span> <span class="token punctuation">{</span>\n\t\t\tmap<span class="token punctuation">.</span><span class="token function">setSeriesValue</span><span class="token punctuation">(</span>name<span class="token punctuation">,</span> Arrays<span class="token punctuation">.</span><span class="token function">asList</span><span class="token punctuation">(</span>value<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token punctuation">}</span>\n\t\t<span class="token keyword">return</span> map<span class="token punctuation">;</span>\n\t<span class="token punctuation">}</span>\n\n\t<span class="token annotation punctuation">@Override</span>\n\t<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">process</span><span class="token punctuation">(</span>Exchange exchange<span class="token punctuation">)</span> <span class="token keyword">throws</span> JsonProcessingException<span class="token punctuation">,</span> Exception <span class="token punctuation">{</span>\n\t\tMessage msg <span class="token operator">=</span> exchange<span class="token punctuation">.</span><span class="token function">getIn</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tPSI6000DataType doc <span class="token operator">=</span> msg<span class="token punctuation">.</span><span class="token function">getBody</span><span class="token punctuation">(</span>PSI6000DataType<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\n\t\tObject <span class="token punctuation">[</span><span class="token punctuation">]</span>bundle <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Object</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">;</span>\n\t\tbundle<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span>       <span class="token operator">=</span> <span class="token function">transformMeasurement</span><span class="token punctuation">(</span>doc<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tbundle<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span>       <span class="token operator">=</span> <span class="token function">transformProcess</span><span class="token punctuation">(</span>doc<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tmsg<span class="token punctuation">.</span><span class="token function">setBody</span><span class="token punctuation">(</span>bundle<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\texchange<span class="token punctuation">.</span><span class="token function">setOut</span><span class="token punctuation">(</span>msg<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t<span class="token punctuation">}</span>\n\n\t<span class="token keyword">private</span> <span class="token keyword">void</span> <span class="token function">setSpotName</span><span class="token punctuation">(</span>Device device<span class="token punctuation">,</span> WeldLog wl<span class="token punctuation">)</span> <span class="token punctuation">{</span>\n\t\tString spotName <span class="token operator">=</span> wl<span class="token punctuation">.</span><span class="token function">getSpotName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token keyword">if</span> <span class="token punctuation">(</span>spotName <span class="token operator">!=</span> null <span class="token operator">&amp;&amp;</span> spotName<span class="token punctuation">.</span><span class="token function">length</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>\n\t\t\tMetaData md <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MetaData</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t\tmd<span class="token punctuation">.</span><span class="token function">setMetaDataValue</span><span class="token punctuation">(</span><span class="token string">"spotName"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSpotName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t\tdevice<span class="token punctuation">.</span><span class="token function">setMetaData</span><span class="token punctuation">(</span>md<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token punctuation">}</span>\n\t<span class="token punctuation">}</span>\n\n\t<span class="token keyword">private</span> ProcessWrapper <span class="token function">transformProcess</span><span class="token punctuation">(</span>PSI6000DataType doc<span class="token punctuation">)</span> <span class="token punctuation">{</span>\n\t\tProcessWrapper wrapper <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ProcessWrapper</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tWeldLog wl <span class="token operator">=</span> doc<span class="token punctuation">.</span><span class="token function">getMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getWeldLog</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tOffsetDateTime odt <span class="token operator">=</span> OffsetDateTime<span class="token punctuation">.</span><span class="token function">of</span><span class="token punctuation">(</span>wl<span class="token punctuation">.</span><span class="token function">getDateTime</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> ZoneOffset<span class="token punctuation">.</span>UTC<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\n\t\t<span class="token comment">// device</span>\n\t\tDevice device <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Device</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tdevice<span class="token punctuation">.</span><span class="token function">setDeviceID</span><span class="token punctuation">(</span>doc<span class="token punctuation">.</span><span class="token function">getMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getWeldLog</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getTimerName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">setSpotName</span><span class="token punctuation">(</span>device<span class="token punctuation">,</span> wl<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\twrapper<span class="token punctuation">.</span><span class="token function">setDevice</span><span class="token punctuation">(</span>device<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\n\t\t<span class="token comment">// part</span>\n\t\tString partId <span class="token operator">=</span> wl<span class="token punctuation">.</span><span class="token function">getPartIdentString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token keyword">if</span> <span class="token punctuation">(</span>partId <span class="token operator">!=</span> null <span class="token operator">&amp;&amp;</span> partId<span class="token punctuation">.</span><span class="token function">length</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>\n\t\t\torg<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>process<span class="token punctuation">.</span>Part part <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>process<span class="token punctuation">.</span>Part</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t\tpart<span class="token punctuation">.</span><span class="token function">setPartID</span><span class="token punctuation">(</span>partId<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t\twrapper<span class="token punctuation">.</span><span class="token function">setPart</span><span class="token punctuation">(</span>part<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token punctuation">}</span>\n\n\t\t<span class="token comment">// process</span>\n\t\tProcess process <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Process</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tprocess<span class="token punctuation">.</span><span class="token function">setTimestamp</span><span class="token punctuation">(</span>odt<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tprocess<span class="token punctuation">.</span><span class="token function">setExternalProcessId</span><span class="token punctuation">(</span>String<span class="token punctuation">.</span><span class="token function">valueOf</span><span class="token punctuation">(</span>wl<span class="token punctuation">.</span><span class="token function">getProtRecordID</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\twrapper<span class="token punctuation">.</span><span class="token function">setProcess</span><span class="token punctuation">(</span>process<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\n\t\t<span class="token comment">// measurements</span>\n\t\tList<span class="token operator">&lt;</span>org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>process<span class="token punctuation">.</span>Measurements<span class="token operator">></span> measurements <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">LinkedList</span><span class="token operator">&lt;</span>org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>process<span class="token punctuation">.</span>Measurements<span class="token operator">></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\torg<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>process<span class="token punctuation">.</span>Measurements measurement <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>process<span class="token punctuation">.</span>Measurements</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t\n\t\tmeasurement<span class="token punctuation">.</span><span class="token function">setTimestamp</span><span class="token punctuation">(</span>odt<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\n\t\t<span class="token comment">//values</span>\n\t\torg<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>process<span class="token punctuation">.</span>SeriesMap seriesMap <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>process<span class="token punctuation">.</span>SeriesMap</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tseriesMap<span class="token punctuation">.</span><span class="token function">setSeriesValue</span><span class="token punctuation">(</span><span class="token string">"curentCurve"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getCurrentCurve</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tseriesMap<span class="token punctuation">.</span><span class="token function">setSeriesValue</span><span class="token punctuation">(</span><span class="token string">"voltageCurve"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getVoltageCurve</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tseriesMap<span class="token punctuation">.</span><span class="token function">setSeriesValue</span><span class="token punctuation">(</span><span class="token string">"forceCurve"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getForceCurve</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t\n\t\tmeasurement<span class="token punctuation">.</span><span class="token function">setSeriesMap</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tmeasurements<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span>measurement<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\twrapper<span class="token punctuation">.</span><span class="token function">setMeasurements</span><span class="token punctuation">(</span>measurements<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t\n\t\t<span class="token keyword">return</span> wrapper<span class="token punctuation">;</span>\n\t<span class="token punctuation">}</span>\n\n\t<span class="token keyword">private</span> MeasurementsWrapper <span class="token function">transformMeasurement</span><span class="token punctuation">(</span>PSI6000DataType doc<span class="token punctuation">)</span> <span class="token punctuation">{</span>\n\t\tMeasurementsWrapper wrapper <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MeasurementsWrapper</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tWeldLog wl <span class="token operator">=</span> doc<span class="token punctuation">.</span><span class="token function">getMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getWeldLog</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\n\t\t<span class="token comment">// device</span>\n\t\tDevice device <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Device</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tdevice<span class="token punctuation">.</span><span class="token function">setDeviceID</span><span class="token punctuation">(</span>doc<span class="token punctuation">.</span><span class="token function">getMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getWeldLog</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getTimerName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">setSpotName</span><span class="token punctuation">(</span>device<span class="token punctuation">,</span> wl<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\twrapper<span class="token punctuation">.</span><span class="token function">setDevice</span><span class="token punctuation">(</span>device<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\n\t\t<span class="token comment">// part</span>\n\t\tString partId <span class="token operator">=</span> wl<span class="token punctuation">.</span><span class="token function">getPartIdentString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token keyword">if</span> <span class="token punctuation">(</span>partId <span class="token operator">!=</span> null <span class="token operator">&amp;&amp;</span> partId<span class="token punctuation">.</span><span class="token function">length</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>\n\t\t\torg<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>measurements<span class="token punctuation">.</span>Part part <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>measurements<span class="token punctuation">.</span>Part</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t\tpart<span class="token punctuation">.</span><span class="token function">setPartID</span><span class="token punctuation">(</span>partId<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t\twrapper<span class="token punctuation">.</span><span class="token function">setPart</span><span class="token punctuation">(</span>part<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token punctuation">}</span>\n\n\t\t<span class="token comment">// measurements</span>\n\t\tList<span class="token operator">&lt;</span>org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>measurements<span class="token punctuation">.</span>Measurements<span class="token operator">></span> measurements <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">LinkedList</span><span class="token operator">&lt;</span>org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>measurements<span class="token punctuation">.</span>Measurements<span class="token operator">></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\torg<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>measurements<span class="token punctuation">.</span>Measurements measurement <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>measurements<span class="token punctuation">.</span>Measurements</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\n\t\tmeasurement<span class="token punctuation">.</span><span class="token function">setTimestamp</span><span class="token punctuation">(</span>OffsetDateTime<span class="token punctuation">.</span><span class="token function">of</span><span class="token punctuation">(</span>wl<span class="token punctuation">.</span><span class="token function">getDateTime</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> ZoneOffset<span class="token punctuation">.</span>UTC<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\n\t\t<span class="token comment">// values</span>\n\t\torg<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>measurements<span class="token punctuation">.</span>SeriesMap seriesMap <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>measurements<span class="token punctuation">.</span>SeriesMap</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tseriesMap<span class="token punctuation">.</span><span class="token function">setSeriesValue</span><span class="token punctuation">(</span><span class="token string">"$_time"</span><span class="token punctuation">,</span> Arrays<span class="token punctuation">.</span><span class="token function">asList</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"wear"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWear</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"wearPerCent"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWearPerCent</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"monitorState"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getMonitorState</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"regulationState"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getRegulationState</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"measureState"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getMeasureState</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"powerState"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getPowerState</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sequenceState"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSequenceState</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sequenceStateAdd"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSequenceStateAdd</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sequenceRepeat"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSequenceRepeat</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"monitorMode"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getMonitorMode</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"iDemandStd"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getIDemandStd</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"ilsts"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getIlsts</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"regulationStd"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getRegulationStd</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"iDemand1"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getIDemand1</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"iActual1"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getIActual1</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"regulation1"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getRegulation1</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"iDemand2"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getIDemand2</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"iActual2"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getIActual2</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"regulation2"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getRegulation2</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"iDemand3"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getIDemand3</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"iActual3"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getIActual3</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"regulation3"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getRegulation3</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"phaStd"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getPhaStd</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"pha1"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getPha1</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"pha2"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getPha2</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"pha3"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getPha3</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"t_iDemandStd"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getIDemandStd</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"tActualStd"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getTActualStd</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token comment">// addMeasurementPoint(seriesMap, "partIdentString",</span>\n\t\t<span class="token comment">// wl.getPartIdentString());</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"tipDressCounter"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getTipDressCounter</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"electrodeNo"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getElectrodeNo</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sgForceSetPoint"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSgForceSetPoint</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sgSheetThicknessSetPoint"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSgSheetThicknessSetPoint</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sgSagGpSetPoint"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSgSagGpSetPoint</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sgSpotWithSg"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSgSpotWithSg</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sgMotorCurrent"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSgMotorCurrent</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sgMotorTemp"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSgMotorTemp</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sgForce"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSgForce</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sgSheetThickness"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSgSheetThickness</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sgSagGp"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSgSagGp</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sgSagGc"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSgSagGc</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"regUsrUspJunction"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getRegUsrUspJunction</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"regUsrUspMax"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getRegUsrUspMax</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"regSpotDiaActual"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getRegSpotDiaActual</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"regSpotDiaMinDemand"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getRegSpotDiaMinDemand</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"regSplashTime"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getRegSplashTime</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"nuggetDiameter"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getNuggetDiameter</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"usp"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUsp</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"normingTime"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getNormingTime</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"regulationStartTime"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getRegulationStartTime</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"returnToConstantCurrent"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getReturnToConstantCurrent</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"declineUsp"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getDeclineUsp</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"offsetUsp"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getOffsetUsp</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"currentFactor"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getCurrentFactor</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"triggerTime"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getTriggerTime</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"xqrMeasuringActive"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getXqrMeasuringActive</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"xqrRegulationActive"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getXqrRegulationActive</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"xqrMonitoringActive"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getXqrMonitoringActive</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"xqrWeldTimeProlongationActive"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getXqrWeldTimeProlongationActive</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"voltageActualValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getVoltageActualValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"voltageRefValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getVoltageRefValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"currentActualValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getCurrentActualValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"currentReferenceValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getCurrentReferenceValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldTimeActualValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldTimeActualValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldTimeRefValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldTimeRefValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"energyActualValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getEnergyActualValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"energyRefValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getEnergyRefValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"powerActualValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getPowerActualValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"powerRefValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getPowerRefValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"resistanceActualValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getResistanceActualValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"resistanceRefValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getResistanceRefValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"pulseWidthActualValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getPulseWidthActualValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"pulseWidthRefValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getPulseWidthRefValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"stabilisationFactorActValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getStabilisationFactorActValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"stabilisationFactorRefValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getStabilisationFactorRefValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"thresholdStabilisationFactor"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getThresholdStabilisationFactor</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"wldEffectStabilisationFactor"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWldEffectStabilisationFactor</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"uipActualValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUipActualValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"uipRefValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUipRefValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"uirExpulsionTime"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUirExpulsionTime</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"uirMeasuringActive"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUirMeasuringActive</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"uirRegulationActive"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUirRegulationActive</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"uirMonitoringActive"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUirMonitoringActive</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"uirWeldTimeProlongationActive"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUirWeldTimeProlongationActive</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"uirQStoppRefCntValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUirQStoppRefCntValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"uirQStoppActCntValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUirQStoppActCntValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"uirUipUpperTol"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUirUipUpperTol</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"uirUipLowerTol"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUirUipLowerTol</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"uirUipCondTol"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUirUipCondTol</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"uirPsfLowerTol"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUirPsfLowerTol</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"uirPsfCondTol"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUirPsfCondTol</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP16_1"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP161</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP16_2"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP162</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP16_3"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP163</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP16_4"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP164</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP16_5"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP165</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP32_6"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP326</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP16_7"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP167</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP16_8"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP168</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP16_9"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP169</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP16_10"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP1610</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP16_11"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP1611</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP32_12"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP3212</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP16_13"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP1613</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP16_14"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP1614</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP16_15"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP1615</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP16_16"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP1616</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP16_17"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP1617</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP32_18"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP3218</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"uipMonCondUpperTol"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUipMonCondUpperTol</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"fqfActualValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getFqfActualValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"fqfRefValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getFqfRefValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"fqfMonUpperTol"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getFqfMonUpperTol</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"fqfMonLowerTol"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getFqfMonLowerTol</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"fqfMonCondUpperTol"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getFqfMonCondUpperTol</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"fqfMonCondLowerTol"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getFqfMonCondLowerTol</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"fqfMeasuringActive"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getFqfMeasuringActive</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"xqrModeOff"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getXqrModeOff</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"reweldActive"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getReweldActive</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token comment">// addMeasurementPoint(seriesMap, "weldspotRefIdent",</span>\n\t\t<span class="token comment">// wl.getWeldspotRefIdent());</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sg_Torque_Gp"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSgTorqueGp</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sg_Force_Corr"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSgForceCorr</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sg_Weldspot_Geo_Wear"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSgWeldspotGeoWear</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sg_Wear_Length"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSgWearLength</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sg_Beam_UpArching"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSgBeamUpArching</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\n\t\tmeasurement<span class="token punctuation">.</span><span class="token function">setSeriesMap</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tmeasurements<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span>measurement<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\twrapper<span class="token punctuation">.</span><span class="token function">setMeasurements</span><span class="token punctuation">(</span>measurements<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\n\t\t<span class="token keyword">return</span> wrapper<span class="token punctuation">;</span>\n\t<span class="token punctuation">}</span>\n<span class="token punctuation">}</span>\n</code></pre>\n<h1>Summary</h1>\n<p>It takes a while to understand the involved software components. Yet, once the set up is running, it gets much easier to adapt it to another Use Case. And another. The pattern of wiring protocols and transforming the payload is very similar. The involved frameworks are powerful enough to support many Use Cases. This article is supposed to show that there are simple possibilities to transform transport protocols and payloads, so that you can focus on addressing functional challenges.</p>\n',url:"/blog/2018/2/11/Transform-PPMP-with-camel",title:"PPMP Use Cases: Simple Transformation with Apache Camel",date:"2018-02-11T00:00:00.000Z",tags:["use cases"],prev:{url:"/blog/2018/1/26/New-website",title:"Updated Website"},next:{url:"/blog/2018/2/13/grinding-machine-scenario",title:"PPMP Use Cases: Unide and the Eclipse Production Performance Management Testbed"}}}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_article.dfd7fcb83848670d21b1.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{post:{name:"Transform-PPMP-with-camel",content:'<p>The Production Performance Management Protocol (PPMP) is a simple structure to send out machine data. Unide, as its hosting project, is supposed to provide exemplary implementations.</p>\n<p>We have already published <a href="https://github.com/eclipse/unide/tree/master/servers/rest">a REST server</a>, <a href="https://github.com/eclipse/unide.java">java-</a> and <a href="https://github.com/eclipse/unide.python">python-</a> bindings and an <a href="https://github.com/eclipse/unide/tree/master/clients/binsa">html5-client</a>. But how are these implementations used in real life?</p>\n<h1>The Challenge</h1>\n<div class="card figure">\n\t<div class="card-image">\n\t\t<figure class="image">\n\t\t\t<img alt="Welding robots" title="BMW plant, spot welding" src="/unide/images/blog/Transform-PPMP-with-camel-welding.jpg"></img>\n\t\t</figure>\n\t</div>\n\t<div class="card-content">\n\t\tBMW plant in Leipzig, Germany: Spot welding <a href="https://creativecommons.org/licenses/by-sa/2.0/de/deed.en">(CC BY-SA 2.0 DE)</a>\n\t</div>\n</div>\n<p>In the automotive industry, <a href="https://en.wikipedia.org/wiki/Spot_welding">welding spots</a> are crucial for the quality of a car and the security of the passenger. In modern production lines, hundreds of welding spots have to be precisely set in a single shift. In order to reduce product rework, scrap, destructible tests and machine downtime, the quality should be monitored consistently. That\'s what special welding controller in machines do. Unfortunately, this data is often only used locally, for a short period of time and in proprietary formats. Just enough to determine the immediate process outcome. In that case, further opportunities of analysing the information are not taken. With the continuous increase in complexity, price and time pressure, the demand for further processing and optimization grows. The data could be used to prevent or even predict maintenance or just store the data in long time archives in case of legal disputes.</p>\n<p>One prerequisite for such connectivity is the hardware and its connectivity. Older generations of welding controllers can only be accessed with proprietary stacks (like the <a href="https://www.boschrexroth.com/en/xc/products/product-groups/welding-technology/controllers-with-power-section/mf-system-psi6000/index">PSI 6000</a>) whereas newer generations (like the <a href="https://www.boschrexroth.com/en/xc/company/press/index2-29696">PRC 7000</a>) are much more flexible in terms of networking and communication. In general, there are two aspects that make up the communication: the transport protocol and the structure of the payload. This is similar to our daily life: if you want to chat with your friends, you need to use the same messenger or communication technology (phone, email) and you need speak the same language (English, German etc.).</p>\n<p>In the following sections, let\'s assume we need to transform the transport protocol as well as the payload. The data is generated by a welding controller and should be passed to <a href="https://unide.eclipse.org">the unide REST server</a> for persisting it in a dedicated timeseries database.</p>\n<h1>The Approach</h1>\n<p>We want to find a way to receive the data, transform it into PPMP and store it into a database in our <a href="https://unide.eclipse.org">REST Server</a>.</p>\n<p>First, we need to understand which interfaces the controller has, which communication protocol is used, and how the payload would be interpreted. In the case of the PSI 6000, it was configured to publish the quality data to a <a href="https://de.wikipedia.org/wiki/MQTT">mqtt</a> message broker (here: <a href="https://mosquitto.org/">Eclipse mosquitto</a>). We don\'t have an extensive documentation of the payload, but we can look at samples of it (some Curve data shortened at the end):</p>\n<pre class="language-json"><code class="language-json"><span class="token punctuation">{</span>\n  <span class="token property">"Name"</span><span class="token operator">:</span> <span class="token string">"WeldLog/UIR Testrack 24/"</span><span class="token punctuation">,</span>\n  <span class="token property">"WeldTimer"</span><span class="token operator">:</span> <span class="token string">"UIR Testrack 24"</span><span class="token punctuation">,</span>\n  <span class="token property">"TimeStamp"</span><span class="token operator">:</span> <span class="token string">"2018-01-17T10:41:00.0008436+01:00"</span><span class="token punctuation">,</span>\n  <span class="token property">"OutputFormat"</span><span class="token operator">:</span> <span class="token string">"JSON"</span><span class="token punctuation">,</span>\n  <span class="token property">"Message"</span><span class="token operator">:</span> <span class="token punctuation">{</span>\n    <span class="token property">"WeldLog"</span><span class="token operator">:</span> <span class="token punctuation">{</span>\n      <span class="token property">"protRecord_ID"</span><span class="token operator">:</span> <span class="token number">734827</span><span class="token punctuation">,</span>\n      <span class="token property">"dateTime"</span><span class="token operator">:</span> <span class="token string">"2018-01-15T16:52:32.09"</span><span class="token punctuation">,</span>\n      <span class="token property">"timerName"</span><span class="token operator">:</span> <span class="token string">"UIR Testrack 24"</span><span class="token punctuation">,</span>\n      <span class="token property">"progNo"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"spotName"</span><span class="token operator">:</span> <span class="token string">""</span><span class="token punctuation">,</span>\n      <span class="token property">"wear"</span><span class="token operator">:</span> <span class="token number">8312480</span><span class="token punctuation">,</span>\n      <span class="token property">"wearPerCent"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"monitorState"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"regulationState"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"measureState"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"powerState"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"sequenceState"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"sequenceStateAdd"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"sequenceRepeat"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"monitorMode"</span><span class="token operator">:</span> <span class="token number">1</span><span class="token punctuation">,</span>\n      <span class="token property">"iDemandStd"</span><span class="token operator">:</span> <span class="token number">3</span><span class="token punctuation">,</span>\n      <span class="token property">"ilsts"</span><span class="token operator">:</span> <span class="token number">13.14</span><span class="token punctuation">,</span>\n      <span class="token property">"regulationStd"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"iDemand1"</span><span class="token operator">:</span> <span class="token number">3</span><span class="token punctuation">,</span>\n      <span class="token property">"iActual1"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"regulation1"</span><span class="token operator">:</span> <span class="token number">4</span><span class="token punctuation">,</span>\n      <span class="token property">"iDemand2"</span><span class="token operator">:</span> <span class="token number">3</span><span class="token punctuation">,</span>\n      <span class="token property">"iActual2"</span><span class="token operator">:</span> <span class="token number">13.16</span><span class="token punctuation">,</span>\n      <span class="token property">"regulation2"</span><span class="token operator">:</span> <span class="token number">4</span><span class="token punctuation">,</span>\n      <span class="token property">"iDemand3"</span><span class="token operator">:</span> <span class="token number">3</span><span class="token punctuation">,</span>\n      <span class="token property">"iActual3"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"regulation3"</span><span class="token operator">:</span> <span class="token number">4</span><span class="token punctuation">,</span>\n      <span class="token property">"phaStd"</span><span class="token operator">:</span> <span class="token number">24.96</span><span class="token punctuation">,</span>\n      <span class="token property">"pha1"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"pha2"</span><span class="token operator">:</span> <span class="token number">24.64</span><span class="token punctuation">,</span>\n      <span class="token property">"pha3"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"t_iDemandStd"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"tActualStd"</span><span class="token operator">:</span> <span class="token number">878</span><span class="token punctuation">,</span>\n      <span class="token property">"partIdentString"</span><span class="token operator">:</span> <span class="token string">""</span><span class="token punctuation">,</span>\n      <span class="token property">"tipDressCounter"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"electrodeNo"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"sgForceSetPoint"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"sgSheetThicknessSetPoint"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"sgSagGpSetPoint"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"sgSpotWithSg"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"sgMotorCurrent"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"sgMotorTemp"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"sgForce"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"sgSheetThickness"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"sgSagGp"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"sgSagGc"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"regUsrUspJunction"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"regUsrUspMax"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"regSpotDiaActual"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"regSpotDiaMinDemand"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"regSplashTime"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"nuggetDiameter"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"usp"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"normingTime"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"regulationStartTime"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"returnToConstantCurrent"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"declineUsp"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"offsetUsp"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"currentFactor"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"triggerTime"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"xqrMeasuringActive"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"xqrRegulationActive"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"xqrMonitoringActive"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"xqrWeldTimeProlongationActive"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"voltageActualValue"</span><span class="token operator">:</span> <span class="token number">0.03</span><span class="token punctuation">,</span>\n      <span class="token property">"voltageRefValue"</span><span class="token operator">:</span> <span class="token number">0.03</span><span class="token punctuation">,</span>\n      <span class="token property">"currentActualValue"</span><span class="token operator">:</span> <span class="token number">13.17</span><span class="token punctuation">,</span>\n      <span class="token property">"currentReferenceValue"</span><span class="token operator">:</span> <span class="token number">13.95</span><span class="token punctuation">,</span>\n      <span class="token property">"weldTimeActualValue"</span><span class="token operator">:</span> <span class="token number">876</span><span class="token punctuation">,</span>\n      <span class="token property">"weldTimeRefValue"</span><span class="token operator">:</span> <span class="token number">760</span><span class="token punctuation">,</span>\n      <span class="token property">"energyActualValue"</span><span class="token operator">:</span> <span class="token number">395.1261</span><span class="token punctuation">,</span>\n      <span class="token property">"energyRefValue"</span><span class="token operator">:</span> <span class="token number">342</span><span class="token punctuation">,</span>\n      <span class="token property">"powerActualValue"</span><span class="token operator">:</span> <span class="token number">395.133</span><span class="token punctuation">,</span>\n      <span class="token property">"powerRefValue"</span><span class="token operator">:</span> <span class="token number">449.35</span><span class="token punctuation">,</span>\n      <span class="token property">"resistanceActualValue"</span><span class="token operator">:</span> <span class="token number">2</span><span class="token punctuation">,</span>\n      <span class="token property">"resistanceRefValue"</span><span class="token operator">:</span> <span class="token number">2</span><span class="token punctuation">,</span>\n      <span class="token property">"pulseWidthActualValue"</span><span class="token operator">:</span> <span class="token number">25.02</span><span class="token punctuation">,</span>\n      <span class="token property">"pulseWidthRefValue"</span><span class="token operator">:</span> <span class="token number">26.19</span><span class="token punctuation">,</span>\n      <span class="token property">"stabilisationFactorActValue"</span><span class="token operator">:</span> <span class="token number">55</span><span class="token punctuation">,</span>\n      <span class="token property">"stabilisationFactorRefValue"</span><span class="token operator">:</span> <span class="token number">100</span><span class="token punctuation">,</span>\n      <span class="token property">"thresholdStabilisationFactor"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"wldEffectStabilisationFactor"</span><span class="token operator">:</span> <span class="token number">100</span><span class="token punctuation">,</span>\n      <span class="token property">"uipActualValue"</span><span class="token operator">:</span> <span class="token number">126</span><span class="token punctuation">,</span>\n      <span class="token property">"uipRefValue"</span><span class="token operator">:</span> <span class="token number">100</span><span class="token punctuation">,</span>\n      <span class="token property">"uirExpulsionTime"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"uirMeasuringActive"</span><span class="token operator">:</span> <span class="token number">1</span><span class="token punctuation">,</span>\n      <span class="token property">"uirRegulationActive"</span><span class="token operator">:</span> <span class="token number">1</span><span class="token punctuation">,</span>\n      <span class="token property">"uirMonitoringActive"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"uirWeldTimeProlongationActive"</span><span class="token operator">:</span> <span class="token number">1</span><span class="token punctuation">,</span>\n      <span class="token property">"uirQStoppRefCntValue"</span><span class="token operator">:</span> <span class="token number">9</span><span class="token punctuation">,</span>\n      <span class="token property">"uirQStoppActCntValue"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"uirUipUpperTol"</span><span class="token operator">:</span> <span class="token number">100</span><span class="token punctuation">,</span>\n      <span class="token property">"uirUipLowerTol"</span><span class="token operator">:</span> <span class="token number">100</span><span class="token punctuation">,</span>\n      <span class="token property">"uirUipCondTol"</span><span class="token operator">:</span> <span class="token number">100</span><span class="token punctuation">,</span>\n      <span class="token property">"uirPsfLowerTol"</span><span class="token operator">:</span> <span class="token number">100</span><span class="token punctuation">,</span>\n      <span class="token property">"uirPsfCondTol"</span><span class="token operator">:</span> <span class="token number">100</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP16_1"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP16_2"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP16_3"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP16_4"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP16_5"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP32_6"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP16_7"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP16_8"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP16_9"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP16_10"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP16_11"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP32_12"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP16_13"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP16_14"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP16_15"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP16_16"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP16_17"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"weldSpotCustDataP32_18"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"uipMonCondUpperTol"</span><span class="token operator">:</span> <span class="token number">100</span><span class="token punctuation">,</span>\n      <span class="token property">"fqfActualValue"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"fqfRefValue"</span><span class="token operator">:</span> <span class="token number">100</span><span class="token punctuation">,</span>\n      <span class="token property">"fqfMonUpperTol"</span><span class="token operator">:</span> <span class="token number">100</span><span class="token punctuation">,</span>\n      <span class="token property">"fqfMonLowerTol"</span><span class="token operator">:</span> <span class="token number">100</span><span class="token punctuation">,</span>\n      <span class="token property">"fqfMonCondUpperTol"</span><span class="token operator">:</span> <span class="token number">100</span><span class="token punctuation">,</span>\n      <span class="token property">"fqfMonCondLowerTol"</span><span class="token operator">:</span> <span class="token number">100</span><span class="token punctuation">,</span>\n      <span class="token property">"fqfMeasuringActive"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"xqrModeOff"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"reweldActive"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span>\n      <span class="token property">"weldspotRefIdent"</span><span class="token operator">:</span> <span class="token string">"UIR_PART"</span><span class="token punctuation">,</span>\n      <span class="token property">"sg_Torque_Gp"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"sg_Force_Corr"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"sg_Weldspot_Geo_Wear"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"sg_Wear_Length"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"sg_Beam_UpArching"</span><span class="token operator">:</span> <span class="token null">null</span><span class="token punctuation">,</span>\n      <span class="token property">"CurrentCurve"</span><span class="token operator">:</span> <span class="token punctuation">[</span>\n        <span class="token number">11621</span><span class="token punctuation">,</span>\n        <span class="token number">15434</span><span class="token punctuation">,</span>\n        ...\n      <span class="token punctuation">]</span><span class="token punctuation">,</span>\n      <span class="token property">"VoltageCurve"</span><span class="token operator">:</span> <span class="token punctuation">[</span>\n        <span class="token number">39</span><span class="token punctuation">,</span>\n        <span class="token number">29</span><span class="token punctuation">,</span>\n        ...\n      <span class="token punctuation">]</span><span class="token punctuation">,</span>\n      <span class="token property">"ForceCurve"</span><span class="token operator">:</span> <span class="token punctuation">[</span>\n        <span class="token number">49</span><span class="token punctuation">,</span>\n        <span class="token number">49</span><span class="token punctuation">,</span>\n        ...\n      <span class="token punctuation">]</span>\n    <span class="token punctuation">}</span>\n  <span class="token punctuation">}</span>\n<span class="token punctuation">}</span>\n</code></pre>\n<p>That\'s already very detailed, but it\'s unclear which device / welding spot the data comes from and what the timing of the curves was. Let\'s get some more structure in with PPMP!</p>\n<p>In PPMP, we have the option to differentiate between discrete manufacturing data (MES - part produced) by using the <a href="/unide/specification/measurement-message">measurement-message</a> and detailed process data by using the <a href="https://www.eclipse.org/unide/specification/process-message">process-message</a>. In the welding payload, that\'s all combined in one message. So we also want to split this payload into two.</p>\n<h2>Introducing Apache Camel</h2>\n<div class="card figure is-pulled-left">\n\t<div class="card-image">\n\t\t<figure class="image">\n\t\t\t<img alt="Apache Camel" title="Apache Camel" src="/unide/images/blog/Transform-PPMP-with-camel-camel.png"></img>\n\t\t</figure>\n\t</div>\n\t<div class="card-content">\n\t\tApache Camel, <a href="https://www.apache.org/licenses/LICENSE-2.0">(Apache&nbsp;License&nbsp;2.0)</a>\n\t</div>\n</div>\n<p><a href="https://en.wikipedia.org/wiki/Apache_Camel">Apache Camel</a> is a java-based Open Source framework, that can transform and route data. It supports most of the <a href="https://en.wikipedia.org/wiki/Enterprise_Integration_Patterns">Enterprise Integration Patterns</a> and hundreds(!) of <a href="http://camel.apache.org/components.html">connectors / components</a>. Think of it as an extensive transformation and workflow automation engine. In fact, it\'s so powerful and versatile, that it unfortunately doesn\'t come with a visual user interface or a plug-and-play installer. Luckily, for everyone who doesn\'t happen to be a java expert, there\'s also an xml configuration (via <a href="https://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/xsd-configuration.html">spring xml</a>). And that\'s mostly all we need!</p>\n<h2>Transforming the Communication Protocol</h2>\n<p>We will use Spring XML to configure Apache Camel. The workflow in Camel are called <code>&lt;routes&gt;</code>. So let\'s create a route that transforms our mqtt to REST protocol:</p>\n<pre class="language-xml"><code class="language-xml"><span class="token prolog">&lt;?xml version="1.0" encoding="UTF-8"?></span>\n<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>beans</span> <span class="token attr-name">xmlns</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.springframework.org/schema/beans<span class="token punctuation">"</span></span>\n\t<span class="token attr-name"><span class="token namespace">xmlns:</span>xsi</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.w3.org/2001/XMLSchema-instance<span class="token punctuation">"</span></span> <span class="token attr-name"><span class="token namespace">xmlns:</span>camel</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://camel.apache.org/schema/spring<span class="token punctuation">"</span></span>\n\t<span class="token attr-name"><span class="token namespace">xmlns:</span>util</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.springframework.org/schema/util<span class="token punctuation">"</span></span>\n\t<span class="token attr-name"><span class="token namespace">xsi:</span>schemaLocation</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.springframework.org/schema/util\n\thttp://www.springframework.org/schema/util/spring-util.xsd \n\thttp://www.springframework.org/schema/beans\n    http://www.springframework.org/schema/beans/spring-beans.xsd\n    http://camel.apache.org/schema/spring\n    http://camel.apache.org/schema/spring/camel-spring.xsd<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>\n\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>camelContext</span> <span class="token attr-name">xmlns</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://camel.apache.org/schema/spring<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>route</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>from</span>\n\t\t\t\t<span class="token attr-name">uri</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>mqtt://psi6000?host=tcp://192.168.123.135:1883<span class="token entity" title="&amp;">&amp;amp;</span>subscribeTopicName=PSI6000//PROCESS/PPMP/PROCESS<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>to</span>\n\t\t\t\t<span class="token attr-name">uri</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>jetty:http://unide.eclipse.org:8080/rest/v2/measurement?bridgeEndpoint=true<span class="token entity" title="&amp;">&amp;amp;</span>throwExceptionOnFailure=true<span class="token punctuation">"</span></span><span class="token punctuation">/></span></span>\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>route</span><span class="token punctuation">></span></span>\n\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>camelContext</span><span class="token punctuation">></span></span>\n<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>beans</span><span class="token punctuation">></span></span>\n</code></pre>\n<p>That\'s it! A <code>&lt;route&gt;</code> that reads<code>&lt;from&gt;</code> mqtt and forwards <code>&lt;to&gt;</code> http. Not so difficult, is it? We could use many of the other <a href="http://camel.apache.org/components.html">connectors / components</a> in the example above as well to transform from/to different protocols.</p>\n<p>But wait! The welding payload above was not PPMP. So we also need to normalize the payload.</p>\n<h2>Normalizing the Payload</h2>\n<p>Now that we can easily convert protocols, let\'s address the structure of the payload. Overall, we want to have a workflow that looks as described in the diagram below:</p>\n<div class="card figure">\n\t<div class="card-image">\n\t\t<figure class="image">\n\t\t\t<img alt="data workflow" title="data workflow" src="/unide/images/blog/Transform-PPMP-with-camel-1.svg"></img>\n\t\t</figure>\n\t</div>\n\t<div class="card-content">\n\t\tWorkflow to extract the data from controller, convert it and send the data to the cloud application\n\t</div>\n</div>\n<p>The extra steps here are:</p>\n<ol>\n<li>transform the PSI 6000 JSON String payload to a java object</li>\n<li>transform the PSI 6000 java object to two PPMP-java objects (<a href="/unide/specification/measurement-message">measurement-message</a> and <a href="https://www.eclipse.org/unide/specification/process-message">process-message</a>)</li>\n<li>split up the two PPMP objects</li>\n<li>route the objects individually</li>\n<li>transform each PPMP object back to a String</li>\n</ol>\n<h3>Create the PSI 6000 Java Object</h3>\n<p>Luckily, there are helpers for transforming json (or xml) to plain old java objects (POJOs). We are using <a href="http://www.jsonschema2pojo.org/">jsonschema2pojo</a> to convert the above json sample to POJOs with Jackson 2.x annotation. I name the resulting data type class <code>PSI6000DataType</code> and organize it in the package <code>org.eclipse.iot.unide.integrators</code>. Based on the given testdata, jsonschema2pojo cannot fully deduct all attribute types correctly. In order to allow floating point values, we would rename all <code>Integer</code> and <code>Object</code> types to <code>Number</code> in the WeldLog.java file. Also in the same file, we would change the type of the <code>dateTime</code> field from String to <code>LocalDateTime</code> to be more accurate:</p>\n<pre class="language-java"><code class="language-java"><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>\n<span class="token annotation punctuation">@JsonProperty</span><span class="token punctuation">(</span><span class="token string">"dateTime"</span><span class="token punctuation">)</span>\n<span class="token annotation punctuation">@JsonSerialize</span><span class="token punctuation">(</span>using <span class="token operator">=</span> LocalDateTimeSerializer<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span>\n<span class="token annotation punctuation">@JsonDeserialize</span><span class="token punctuation">(</span>using <span class="token operator">=</span> LocalDateTimeDeserializer<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span>\n<span class="token keyword">private</span> LocalDateTime dateTime<span class="token punctuation">;</span>\n<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>\n</code></pre>\n<p>For that, we also need to include the respective imports:</p>\n<pre class="language-java"><code class="language-java"><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>\n<span class="token keyword">import</span> com<span class="token punctuation">.</span>fasterxml<span class="token punctuation">.</span>jackson<span class="token punctuation">.</span>databind<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span>JsonDeserialize<span class="token punctuation">;</span>\n<span class="token keyword">import</span> com<span class="token punctuation">.</span>fasterxml<span class="token punctuation">.</span>jackson<span class="token punctuation">.</span>databind<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span>JsonSerialize<span class="token punctuation">;</span>\n<span class="token keyword">import</span> com<span class="token punctuation">.</span>fasterxml<span class="token punctuation">.</span>jackson<span class="token punctuation">.</span>datatype<span class="token punctuation">.</span>jsr310<span class="token punctuation">.</span>deser<span class="token punctuation">.</span>LocalDateTimeDeserializer<span class="token punctuation">;</span>\n<span class="token keyword">import</span> com<span class="token punctuation">.</span>fasterxml<span class="token punctuation">.</span>jackson<span class="token punctuation">.</span>datatype<span class="token punctuation">.</span>jsr310<span class="token punctuation">.</span>ser<span class="token punctuation">.</span>LocalDateTimeSerializer<span class="token punctuation">;</span>\n<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>\n</code></pre>\n<p>and adjust the getter (<code>getDateTime()</code>), setter (<code>setDateTime()</code>) and the type in the constructor (<code>public WeldLog(...)</code>) accordingly.</p>\n<p>Camel will be able to transform (&quot;<em>unmarshal</em>&quot;) this datatype from a string to a POJO after adding the definition to the above Spring XML:</p>\n<pre class="language-xml"><code class="language-xml">...\n<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>camelContext</span> <span class="token attr-name">xmlns</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://camel.apache.org/schema/spring<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>\n\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dataFormats</span><span class="token punctuation">></span></span>\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>json</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>psi6000<span class="token punctuation">"</span></span> <span class="token attr-name">library</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>Jackson<span class="token punctuation">"</span></span>\n\t\t\t<span class="token attr-name">unmarshalTypeName</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>org.eclipse.iot.unide.integrators.PSI6000DataType<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dataFormats</span><span class="token punctuation">></span></span>\n\t...\n<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>camelContext</span><span class="token punctuation">></span></span>\n</code></pre>\n<h3>Use unide.java binding for PPMP Java Objects</h3>\n<p>For eventually transforming the PPMP objects back to String (&quot;<em>marshal</em>&quot;), we can make use of the <a href="https://github.com/eclipse/unide.java">unide PPMP java binding</a>. Just adjust the dataFormats section of the Spring XML so that it reads:</p>\n<pre class="language-xml"><code class="language-xml">...\n<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>camelContext</span> <span class="token attr-name">xmlns</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://camel.apache.org/schema/spring<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>\n\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dataFormats</span><span class="token punctuation">></span></span>\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>json</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>psi6000<span class="token punctuation">"</span></span> <span class="token attr-name">library</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>Jackson<span class="token punctuation">"</span></span>\n\t\t\t<span class="token attr-name">unmarshalTypeName</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>org.eclipse.iot.unide.integrators.PSI6000DataType<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>json</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>ppmpMeasurementMessage<span class="token punctuation">"</span></span> <span class="token attr-name">library</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>Jackson<span class="token punctuation">"</span></span>\n\t\t\t<span class="token attr-name">unmarshalTypeName</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>org.eclipse.iot.unide.ppmp.measurements.MeasurementsWrapper<span class="token punctuation">"</span></span>\n\t\t\t<span class="token attr-name">moduleClassNames</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>com.fasterxml.jackson.datatype.jsr310.JavaTimeModule<span class="token punctuation">"</span></span>\n\t\t\t<span class="token attr-name">disableFeatures</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>WRITE_DATES_AS_TIMESTAMPS<span class="token punctuation">"</span></span> \n\t\t\t<span class="token attr-name">include</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>NON_NULL<span class="token punctuation">"</span></span><span class="token punctuation">/></span></span>\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>json</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>ppmpProcessMessage<span class="token punctuation">"</span></span> <span class="token attr-name">library</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>Jackson<span class="token punctuation">"</span></span>\n\t\t\t<span class="token attr-name">unmarshalTypeName</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>org.eclipse.iot.unide.ppmp.process.ProcessWrapper<span class="token punctuation">"</span></span>\n\t\t\t<span class="token attr-name">moduleClassNames</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>com.fasterxml.jackson.datatype.jsr310.JavaTimeModule<span class="token punctuation">"</span></span>\n\t\t\t<span class="token attr-name">disableFeatures</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>WRITE_DATES_AS_TIMESTAMPS<span class="token punctuation">"</span></span>\n\t\t\t<span class="token attr-name">include</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>NON_NULL<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dataFormats</span><span class="token punctuation">></span></span>\n\t...\n<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>camelContext</span><span class="token punctuation">></span></span>\n</code></pre>\n<h3>Create the Workflow</h3>\n<p>In order to better structure data flow, we use multiple <code>&lt;route&gt;</code>-s: one for retrieving the data and two more after the split of the payload. They are connected via the virtual camel protocol &quot;<em>direct</em>&quot;. In the following Spring XML, you can also find some <code>&lt;log&gt;</code> points and additional steps to set http header (<code>&lt;setHeader&gt;</code>) for posting to the unide server:</p>\n<pre class="language-xml"><code class="language-xml"><span class="token prolog">&lt;?xml version="1.0" encoding="UTF-8"?></span>\n<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>beans</span> <span class="token attr-name">xmlns</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.springframework.org/schema/beans<span class="token punctuation">"</span></span>\n\t<span class="token attr-name"><span class="token namespace">xmlns:</span>xsi</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.w3.org/2001/XMLSchema-instance<span class="token punctuation">"</span></span> <span class="token attr-name"><span class="token namespace">xmlns:</span>camel</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://camel.apache.org/schema/spring<span class="token punctuation">"</span></span>\n\t<span class="token attr-name"><span class="token namespace">xmlns:</span>util</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.springframework.org/schema/util<span class="token punctuation">"</span></span>\n\t<span class="token attr-name"><span class="token namespace">xsi:</span>schemaLocation</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.springframework.org/schema/util\n\thttp://www.springframework.org/schema/util/spring-util.xsd \n\thttp://www.springframework.org/schema/beans\n    http://www.springframework.org/schema/beans/spring-beans.xsd\n    http://camel.apache.org/schema/spring\n    http://camel.apache.org/schema/spring/camel-spring.xsd<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>\n\n\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>bean</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>psi6000-to-ppmp<span class="token punctuation">"</span></span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>org.eclipse.iot.unide.integrators.PSI6000<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>bean</span><span class="token punctuation">></span></span>\n\n\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>camelContext</span> <span class="token attr-name">xmlns</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://camel.apache.org/schema/spring<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dataFormats</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>json</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>psi6000<span class="token punctuation">"</span></span> <span class="token attr-name">library</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>Jackson<span class="token punctuation">"</span></span>\n\t\t\t\t<span class="token attr-name">unmarshalTypeName</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>org.eclipse.iot.unide.integrators.PSI6000DataType<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>json</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>ppmpMeasurementMessage<span class="token punctuation">"</span></span> <span class="token attr-name">library</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>Jackson<span class="token punctuation">"</span></span>\n\t\t\t\t<span class="token attr-name">unmarshalTypeName</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>org.eclipse.iot.unide.ppmp.measurements.MeasurementsWrapper<span class="token punctuation">"</span></span>\n\t\t\t\t<span class="token attr-name">moduleClassNames</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>com.fasterxml.jackson.datatype.jsr310.JavaTimeModule<span class="token punctuation">"</span></span>\n\t\t\t\t<span class="token attr-name">disableFeatures</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>WRITE_DATES_AS_TIMESTAMPS<span class="token punctuation">"</span></span> <span class="token attr-name">include</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>NON_NULL<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>json</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>ppmpProcessMessage<span class="token punctuation">"</span></span> <span class="token attr-name">library</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>Jackson<span class="token punctuation">"</span></span>\n\t\t\t\t<span class="token attr-name">unmarshalTypeName</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>org.eclipse.iot.unide.ppmp.process.ProcessWrapper<span class="token punctuation">"</span></span>\n\t\t\t\t<span class="token attr-name">moduleClassNames</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>com.fasterxml.jackson.datatype.jsr310.JavaTimeModule<span class="token punctuation">"</span></span>\n\t\t\t\t<span class="token attr-name">disableFeatures</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>WRITE_DATES_AS_TIMESTAMPS<span class="token punctuation">"</span></span> <span class="token attr-name">include</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>NON_NULL<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dataFormats</span><span class="token punctuation">></span></span>\n\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>route</span> <span class="token attr-name">autoStartup</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>true<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>from</span>\n\t\t\t\t<span class="token attr-name">uri</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>mqtt://psi6000?host=tcp://192.168.123.135:1883<span class="token entity" title="&amp;">&amp;amp;</span>subscribeTopicName=PSI6000//PROCESS/PPMP/PROCESS<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>unmarshal</span> <span class="token attr-name">ref</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>psi6000<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>bean</span> <span class="token attr-name">ref</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>psi6000-to-ppmp<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>setHeader</span> <span class="token attr-name">headerName</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>Content-Type<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>\n\t\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>constant</span><span class="token punctuation">></span></span>application/json; charset=utf-8<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>constant</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>setHeader</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>setHeader</span> <span class="token attr-name">headerName</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>CamelHttpMethod<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>\n\t\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>constant</span><span class="token punctuation">></span></span>POST<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>constant</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>setHeader</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>multicast</span><span class="token punctuation">></span></span>\n\t\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>to</span> <span class="token attr-name">uri</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>direct:measurement<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>to</span> <span class="token attr-name">uri</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>direct:process<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>multicast</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>log</span> <span class="token attr-name">message</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>done<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>setBody</span><span class="token punctuation">></span></span>\n\t\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>simple</span><span class="token punctuation">></span></span>{"result": true }<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>simple</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>setBody</span><span class="token punctuation">></span></span>\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>route</span><span class="token punctuation">></span></span>\n\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>route</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>from</span> <span class="token attr-name">uri</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>direct:measurement<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>setBody</span><span class="token punctuation">></span></span>\n\t\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>simple</span><span class="token punctuation">></span></span>${body[0]}<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>simple</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>setBody</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>log</span> <span class="token attr-name">message</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>deviceId measurement: ${body.device.deviceID}<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>marshal</span> <span class="token attr-name">ref</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>ppmpMeasurementMessage<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>log</span> <span class="token attr-name">message</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>sending measurement<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>setHeader</span> <span class="token attr-name">headerName</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>Content-Length<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>\n\t\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>simple</span><span class="token punctuation">></span></span>body.length<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>simple</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>setHeader</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>to</span>\n\t\t\t\t<span class="token attr-name">uri</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>jetty:http://unide.eclipse.org:8080/rest/v2/measurement?bridgeEndpoint=true<span class="token entity" title="&amp;">&amp;amp;</span>throwExceptionOnFailure=true<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>log</span> <span class="token attr-name">message</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>measurement sent<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>route</span><span class="token punctuation">></span></span>\n\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>route</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>from</span> <span class="token attr-name">uri</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>direct:process<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>setBody</span><span class="token punctuation">></span></span>\n\t\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>simple</span><span class="token punctuation">></span></span>${body[1]}<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>simple</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>setBody</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>log</span> <span class="token attr-name">message</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>deviceId process: ${body.device.deviceID}<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>marshal</span> <span class="token attr-name">ref</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>ppmpProcessMessage<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>log</span> <span class="token attr-name">message</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>sending process<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>setHeader</span> <span class="token attr-name">headerName</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>Content-Length<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>\n\t\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>simple</span><span class="token punctuation">></span></span>body.length<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>simple</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>setHeader</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>to</span>\n\t\t\t\t<span class="token attr-name">uri</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>jetty:http://unide.eclipse.org:8080/rest/v2/process?bridgeEndpoint=true<span class="token entity" title="&amp;">&amp;amp;</span>throwExceptionOnFailure=true<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>log</span> <span class="token attr-name">message</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>process sent<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>route</span><span class="token punctuation">></span></span>\n\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>camelContext</span><span class="token punctuation">></span></span>\n<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>beans</span><span class="token punctuation">></span></span>\n</code></pre>\n<p>You might have noticed that we have not yet discussed one important item in this workflow: how do we actually transform the payload from one format to another?</p>\n<h3>Transforming from PSI 6000 POJO to PPMP POJOs</h3>\n<p>One thing that we\'ll hardwire as java code is the transformation from the source to the target structure. The same functionality could be achieved with scripting components (e.g. <a href="http://camel.apache.org/groovy.html">groovy</a>, but that would be less powerful and worse performance. Since we don\'t expect the format to change but mostly the workflow or endpoints, implementing a java bean is not too much effort. Here\'s how:<br>\nApache Camel offers a <code>Processor</code> interface that can be used to override the <code>process()</code> function. This function receives the complete message (<code>exchange</code>) and can modify it in any way. Since we have created the PSI 6000 Java Object already and want to produce PPMP java objects, the logic is mostly about creating the child objects and wiring the suitable getter to corresponding setter.</p>\n<pre class="language-java"><code class="language-java"><span class="token keyword">package</span> org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>integrators<span class="token punctuation">;</span>\n\n<span class="token keyword">import</span> java<span class="token punctuation">.</span>time<span class="token punctuation">.</span>OffsetDateTime<span class="token punctuation">;</span>\n<span class="token keyword">import</span> java<span class="token punctuation">.</span>time<span class="token punctuation">.</span>ZoneOffset<span class="token punctuation">;</span>\n<span class="token keyword">import</span> java<span class="token punctuation">.</span>util<span class="token punctuation">.</span>Arrays<span class="token punctuation">;</span>\n<span class="token keyword">import</span> java<span class="token punctuation">.</span>util<span class="token punctuation">.</span>LinkedList<span class="token punctuation">;</span>\n<span class="token keyword">import</span> java<span class="token punctuation">.</span>util<span class="token punctuation">.</span>List<span class="token punctuation">;</span>\n\n<span class="token keyword">import</span> org<span class="token punctuation">.</span>apache<span class="token punctuation">.</span>camel<span class="token punctuation">.</span>Exchange<span class="token punctuation">;</span>\n<span class="token keyword">import</span> org<span class="token punctuation">.</span>apache<span class="token punctuation">.</span>camel<span class="token punctuation">.</span>Message<span class="token punctuation">;</span>\n<span class="token keyword">import</span> org<span class="token punctuation">.</span>apache<span class="token punctuation">.</span>camel<span class="token punctuation">.</span>Processor<span class="token punctuation">;</span>\n<span class="token keyword">import</span> org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>commons<span class="token punctuation">.</span>Device<span class="token punctuation">;</span>\n<span class="token keyword">import</span> org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>commons<span class="token punctuation">.</span>MetaData<span class="token punctuation">;</span>\n<span class="token keyword">import</span> org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>measurements<span class="token punctuation">.</span>MeasurementsWrapper<span class="token punctuation">;</span>\n<span class="token keyword">import</span> org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>process<span class="token punctuation">.</span>Process<span class="token punctuation">;</span>\n<span class="token keyword">import</span> org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>process<span class="token punctuation">.</span>ProcessWrapper<span class="token punctuation">;</span>\n\n<span class="token keyword">import</span> com<span class="token punctuation">.</span>fasterxml<span class="token punctuation">.</span>jackson<span class="token punctuation">.</span>core<span class="token punctuation">.</span>JsonProcessingException<span class="token punctuation">;</span>\n\n<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">PSI6000</span> <span class="token keyword">implements</span> <span class="token class-name">Processor</span> <span class="token punctuation">{</span>\n\n\t<span class="token keyword">public</span> <span class="token function">PSI6000</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>\n\n\t<span class="token keyword">private</span> org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>measurements<span class="token punctuation">.</span>SeriesMap <span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>\n\t\t\torg<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>measurements<span class="token punctuation">.</span>SeriesMap map<span class="token punctuation">,</span> String name<span class="token punctuation">,</span> Number value<span class="token punctuation">)</span> <span class="token punctuation">{</span>\n\t\t<span class="token keyword">if</span> <span class="token punctuation">(</span>value <span class="token operator">!=</span> null<span class="token punctuation">)</span> <span class="token punctuation">{</span>\n\t\t\tmap<span class="token punctuation">.</span><span class="token function">setSeriesValue</span><span class="token punctuation">(</span>name<span class="token punctuation">,</span> Arrays<span class="token punctuation">.</span><span class="token function">asList</span><span class="token punctuation">(</span>value<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token punctuation">}</span>\n\t\t<span class="token keyword">return</span> map<span class="token punctuation">;</span>\n\t<span class="token punctuation">}</span>\n\n\t<span class="token annotation punctuation">@Override</span>\n\t<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">process</span><span class="token punctuation">(</span>Exchange exchange<span class="token punctuation">)</span> <span class="token keyword">throws</span> JsonProcessingException<span class="token punctuation">,</span> Exception <span class="token punctuation">{</span>\n\t\tMessage msg <span class="token operator">=</span> exchange<span class="token punctuation">.</span><span class="token function">getIn</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tPSI6000DataType doc <span class="token operator">=</span> msg<span class="token punctuation">.</span><span class="token function">getBody</span><span class="token punctuation">(</span>PSI6000DataType<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\n\t\tObject <span class="token punctuation">[</span><span class="token punctuation">]</span>bundle <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Object</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">;</span>\n\t\tbundle<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span>       <span class="token operator">=</span> <span class="token function">transformMeasurement</span><span class="token punctuation">(</span>doc<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tbundle<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span>       <span class="token operator">=</span> <span class="token function">transformProcess</span><span class="token punctuation">(</span>doc<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tmsg<span class="token punctuation">.</span><span class="token function">setBody</span><span class="token punctuation">(</span>bundle<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\texchange<span class="token punctuation">.</span><span class="token function">setOut</span><span class="token punctuation">(</span>msg<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t<span class="token punctuation">}</span>\n\n\t<span class="token keyword">private</span> <span class="token keyword">void</span> <span class="token function">setSpotName</span><span class="token punctuation">(</span>Device device<span class="token punctuation">,</span> WeldLog wl<span class="token punctuation">)</span> <span class="token punctuation">{</span>\n\t\tString spotName <span class="token operator">=</span> wl<span class="token punctuation">.</span><span class="token function">getSpotName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token keyword">if</span> <span class="token punctuation">(</span>spotName <span class="token operator">!=</span> null <span class="token operator">&amp;&amp;</span> spotName<span class="token punctuation">.</span><span class="token function">length</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>\n\t\t\tMetaData md <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MetaData</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t\tmd<span class="token punctuation">.</span><span class="token function">setMetaDataValue</span><span class="token punctuation">(</span><span class="token string">"spotName"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSpotName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t\tdevice<span class="token punctuation">.</span><span class="token function">setMetaData</span><span class="token punctuation">(</span>md<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token punctuation">}</span>\n\t<span class="token punctuation">}</span>\n\n\t<span class="token keyword">private</span> ProcessWrapper <span class="token function">transformProcess</span><span class="token punctuation">(</span>PSI6000DataType doc<span class="token punctuation">)</span> <span class="token punctuation">{</span>\n\t\tProcessWrapper wrapper <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ProcessWrapper</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tWeldLog wl <span class="token operator">=</span> doc<span class="token punctuation">.</span><span class="token function">getMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getWeldLog</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tOffsetDateTime odt <span class="token operator">=</span> OffsetDateTime<span class="token punctuation">.</span><span class="token function">of</span><span class="token punctuation">(</span>wl<span class="token punctuation">.</span><span class="token function">getDateTime</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> ZoneOffset<span class="token punctuation">.</span>UTC<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\n\t\t<span class="token comment">// device</span>\n\t\tDevice device <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Device</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tdevice<span class="token punctuation">.</span><span class="token function">setDeviceID</span><span class="token punctuation">(</span>doc<span class="token punctuation">.</span><span class="token function">getMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getWeldLog</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getTimerName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">setSpotName</span><span class="token punctuation">(</span>device<span class="token punctuation">,</span> wl<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\twrapper<span class="token punctuation">.</span><span class="token function">setDevice</span><span class="token punctuation">(</span>device<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\n\t\t<span class="token comment">// part</span>\n\t\tString partId <span class="token operator">=</span> wl<span class="token punctuation">.</span><span class="token function">getPartIdentString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token keyword">if</span> <span class="token punctuation">(</span>partId <span class="token operator">!=</span> null <span class="token operator">&amp;&amp;</span> partId<span class="token punctuation">.</span><span class="token function">length</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>\n\t\t\torg<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>process<span class="token punctuation">.</span>Part part <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>process<span class="token punctuation">.</span>Part</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t\tpart<span class="token punctuation">.</span><span class="token function">setPartID</span><span class="token punctuation">(</span>partId<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t\twrapper<span class="token punctuation">.</span><span class="token function">setPart</span><span class="token punctuation">(</span>part<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token punctuation">}</span>\n\n\t\t<span class="token comment">// process</span>\n\t\tProcess process <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Process</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tprocess<span class="token punctuation">.</span><span class="token function">setTimestamp</span><span class="token punctuation">(</span>odt<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tprocess<span class="token punctuation">.</span><span class="token function">setExternalProcessId</span><span class="token punctuation">(</span>String<span class="token punctuation">.</span><span class="token function">valueOf</span><span class="token punctuation">(</span>wl<span class="token punctuation">.</span><span class="token function">getProtRecordID</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\twrapper<span class="token punctuation">.</span><span class="token function">setProcess</span><span class="token punctuation">(</span>process<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\n\t\t<span class="token comment">// measurements</span>\n\t\tList<span class="token operator">&lt;</span>org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>process<span class="token punctuation">.</span>Measurements<span class="token operator">></span> measurements <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">LinkedList</span><span class="token operator">&lt;</span>org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>process<span class="token punctuation">.</span>Measurements<span class="token operator">></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\torg<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>process<span class="token punctuation">.</span>Measurements measurement <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>process<span class="token punctuation">.</span>Measurements</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t\n\t\tmeasurement<span class="token punctuation">.</span><span class="token function">setTimestamp</span><span class="token punctuation">(</span>odt<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\n\t\t<span class="token comment">//values</span>\n\t\torg<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>process<span class="token punctuation">.</span>SeriesMap seriesMap <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>process<span class="token punctuation">.</span>SeriesMap</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tseriesMap<span class="token punctuation">.</span><span class="token function">setSeriesValue</span><span class="token punctuation">(</span><span class="token string">"curentCurve"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getCurrentCurve</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tseriesMap<span class="token punctuation">.</span><span class="token function">setSeriesValue</span><span class="token punctuation">(</span><span class="token string">"voltageCurve"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getVoltageCurve</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tseriesMap<span class="token punctuation">.</span><span class="token function">setSeriesValue</span><span class="token punctuation">(</span><span class="token string">"forceCurve"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getForceCurve</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t\n\t\tmeasurement<span class="token punctuation">.</span><span class="token function">setSeriesMap</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tmeasurements<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span>measurement<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\twrapper<span class="token punctuation">.</span><span class="token function">setMeasurements</span><span class="token punctuation">(</span>measurements<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t\n\t\t<span class="token keyword">return</span> wrapper<span class="token punctuation">;</span>\n\t<span class="token punctuation">}</span>\n\n\t<span class="token keyword">private</span> MeasurementsWrapper <span class="token function">transformMeasurement</span><span class="token punctuation">(</span>PSI6000DataType doc<span class="token punctuation">)</span> <span class="token punctuation">{</span>\n\t\tMeasurementsWrapper wrapper <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MeasurementsWrapper</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tWeldLog wl <span class="token operator">=</span> doc<span class="token punctuation">.</span><span class="token function">getMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getWeldLog</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\n\t\t<span class="token comment">// device</span>\n\t\tDevice device <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Device</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tdevice<span class="token punctuation">.</span><span class="token function">setDeviceID</span><span class="token punctuation">(</span>doc<span class="token punctuation">.</span><span class="token function">getMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getWeldLog</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getTimerName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">setSpotName</span><span class="token punctuation">(</span>device<span class="token punctuation">,</span> wl<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\twrapper<span class="token punctuation">.</span><span class="token function">setDevice</span><span class="token punctuation">(</span>device<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\n\t\t<span class="token comment">// part</span>\n\t\tString partId <span class="token operator">=</span> wl<span class="token punctuation">.</span><span class="token function">getPartIdentString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token keyword">if</span> <span class="token punctuation">(</span>partId <span class="token operator">!=</span> null <span class="token operator">&amp;&amp;</span> partId<span class="token punctuation">.</span><span class="token function">length</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>\n\t\t\torg<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>measurements<span class="token punctuation">.</span>Part part <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>measurements<span class="token punctuation">.</span>Part</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t\tpart<span class="token punctuation">.</span><span class="token function">setPartID</span><span class="token punctuation">(</span>partId<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t\twrapper<span class="token punctuation">.</span><span class="token function">setPart</span><span class="token punctuation">(</span>part<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token punctuation">}</span>\n\n\t\t<span class="token comment">// measurements</span>\n\t\tList<span class="token operator">&lt;</span>org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>measurements<span class="token punctuation">.</span>Measurements<span class="token operator">></span> measurements <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">LinkedList</span><span class="token operator">&lt;</span>org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>measurements<span class="token punctuation">.</span>Measurements<span class="token operator">></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\torg<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>measurements<span class="token punctuation">.</span>Measurements measurement <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>measurements<span class="token punctuation">.</span>Measurements</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\n\t\tmeasurement<span class="token punctuation">.</span><span class="token function">setTimestamp</span><span class="token punctuation">(</span>OffsetDateTime<span class="token punctuation">.</span><span class="token function">of</span><span class="token punctuation">(</span>wl<span class="token punctuation">.</span><span class="token function">getDateTime</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> ZoneOffset<span class="token punctuation">.</span>UTC<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\n\t\t<span class="token comment">// values</span>\n\t\torg<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>measurements<span class="token punctuation">.</span>SeriesMap seriesMap <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">org<span class="token punctuation">.</span>eclipse<span class="token punctuation">.</span>iot<span class="token punctuation">.</span>unide<span class="token punctuation">.</span>ppmp<span class="token punctuation">.</span>measurements<span class="token punctuation">.</span>SeriesMap</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tseriesMap<span class="token punctuation">.</span><span class="token function">setSeriesValue</span><span class="token punctuation">(</span><span class="token string">"$_time"</span><span class="token punctuation">,</span> Arrays<span class="token punctuation">.</span><span class="token function">asList</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"wear"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWear</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"wearPerCent"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWearPerCent</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"monitorState"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getMonitorState</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"regulationState"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getRegulationState</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"measureState"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getMeasureState</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"powerState"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getPowerState</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sequenceState"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSequenceState</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sequenceStateAdd"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSequenceStateAdd</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sequenceRepeat"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSequenceRepeat</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"monitorMode"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getMonitorMode</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"iDemandStd"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getIDemandStd</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"ilsts"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getIlsts</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"regulationStd"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getRegulationStd</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"iDemand1"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getIDemand1</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"iActual1"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getIActual1</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"regulation1"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getRegulation1</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"iDemand2"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getIDemand2</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"iActual2"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getIActual2</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"regulation2"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getRegulation2</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"iDemand3"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getIDemand3</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"iActual3"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getIActual3</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"regulation3"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getRegulation3</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"phaStd"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getPhaStd</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"pha1"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getPha1</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"pha2"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getPha2</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"pha3"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getPha3</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"t_iDemandStd"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getIDemandStd</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"tActualStd"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getTActualStd</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token comment">// addMeasurementPoint(seriesMap, "partIdentString",</span>\n\t\t<span class="token comment">// wl.getPartIdentString());</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"tipDressCounter"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getTipDressCounter</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"electrodeNo"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getElectrodeNo</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sgForceSetPoint"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSgForceSetPoint</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sgSheetThicknessSetPoint"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSgSheetThicknessSetPoint</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sgSagGpSetPoint"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSgSagGpSetPoint</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sgSpotWithSg"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSgSpotWithSg</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sgMotorCurrent"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSgMotorCurrent</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sgMotorTemp"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSgMotorTemp</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sgForce"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSgForce</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sgSheetThickness"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSgSheetThickness</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sgSagGp"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSgSagGp</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sgSagGc"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSgSagGc</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"regUsrUspJunction"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getRegUsrUspJunction</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"regUsrUspMax"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getRegUsrUspMax</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"regSpotDiaActual"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getRegSpotDiaActual</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"regSpotDiaMinDemand"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getRegSpotDiaMinDemand</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"regSplashTime"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getRegSplashTime</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"nuggetDiameter"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getNuggetDiameter</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"usp"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUsp</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"normingTime"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getNormingTime</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"regulationStartTime"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getRegulationStartTime</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"returnToConstantCurrent"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getReturnToConstantCurrent</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"declineUsp"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getDeclineUsp</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"offsetUsp"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getOffsetUsp</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"currentFactor"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getCurrentFactor</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"triggerTime"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getTriggerTime</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"xqrMeasuringActive"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getXqrMeasuringActive</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"xqrRegulationActive"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getXqrRegulationActive</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"xqrMonitoringActive"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getXqrMonitoringActive</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"xqrWeldTimeProlongationActive"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getXqrWeldTimeProlongationActive</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"voltageActualValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getVoltageActualValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"voltageRefValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getVoltageRefValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"currentActualValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getCurrentActualValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"currentReferenceValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getCurrentReferenceValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldTimeActualValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldTimeActualValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldTimeRefValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldTimeRefValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"energyActualValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getEnergyActualValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"energyRefValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getEnergyRefValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"powerActualValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getPowerActualValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"powerRefValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getPowerRefValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"resistanceActualValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getResistanceActualValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"resistanceRefValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getResistanceRefValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"pulseWidthActualValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getPulseWidthActualValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"pulseWidthRefValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getPulseWidthRefValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"stabilisationFactorActValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getStabilisationFactorActValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"stabilisationFactorRefValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getStabilisationFactorRefValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"thresholdStabilisationFactor"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getThresholdStabilisationFactor</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"wldEffectStabilisationFactor"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWldEffectStabilisationFactor</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"uipActualValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUipActualValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"uipRefValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUipRefValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"uirExpulsionTime"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUirExpulsionTime</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"uirMeasuringActive"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUirMeasuringActive</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"uirRegulationActive"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUirRegulationActive</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"uirMonitoringActive"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUirMonitoringActive</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"uirWeldTimeProlongationActive"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUirWeldTimeProlongationActive</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"uirQStoppRefCntValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUirQStoppRefCntValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"uirQStoppActCntValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUirQStoppActCntValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"uirUipUpperTol"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUirUipUpperTol</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"uirUipLowerTol"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUirUipLowerTol</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"uirUipCondTol"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUirUipCondTol</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"uirPsfLowerTol"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUirPsfLowerTol</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"uirPsfCondTol"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUirPsfCondTol</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP16_1"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP161</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP16_2"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP162</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP16_3"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP163</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP16_4"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP164</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP16_5"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP165</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP32_6"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP326</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP16_7"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP167</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP16_8"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP168</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP16_9"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP169</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP16_10"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP1610</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP16_11"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP1611</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP32_12"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP3212</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP16_13"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP1613</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP16_14"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP1614</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP16_15"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP1615</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP16_16"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP1616</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP16_17"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP1617</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"weldSpotCustDataP32_18"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getWeldSpotCustDataP3218</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"uipMonCondUpperTol"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getUipMonCondUpperTol</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"fqfActualValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getFqfActualValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"fqfRefValue"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getFqfRefValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"fqfMonUpperTol"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getFqfMonUpperTol</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"fqfMonLowerTol"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getFqfMonLowerTol</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"fqfMonCondUpperTol"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getFqfMonCondUpperTol</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"fqfMonCondLowerTol"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getFqfMonCondLowerTol</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"fqfMeasuringActive"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getFqfMeasuringActive</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"xqrModeOff"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getXqrModeOff</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"reweldActive"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getReweldActive</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token comment">// addMeasurementPoint(seriesMap, "weldspotRefIdent",</span>\n\t\t<span class="token comment">// wl.getWeldspotRefIdent());</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sg_Torque_Gp"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSgTorqueGp</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sg_Force_Corr"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSgForceCorr</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sg_Weldspot_Geo_Wear"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSgWeldspotGeoWear</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sg_Wear_Length"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSgWearLength</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\t<span class="token function">addMeasurementPoint</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">,</span> <span class="token string">"sg_Beam_UpArching"</span><span class="token punctuation">,</span> wl<span class="token punctuation">.</span><span class="token function">getSgBeamUpArching</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\n\t\tmeasurement<span class="token punctuation">.</span><span class="token function">setSeriesMap</span><span class="token punctuation">(</span>seriesMap<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\tmeasurements<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span>measurement<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\t\twrapper<span class="token punctuation">.</span><span class="token function">setMeasurements</span><span class="token punctuation">(</span>measurements<span class="token punctuation">)</span><span class="token punctuation">;</span>\n\n\t\t<span class="token keyword">return</span> wrapper<span class="token punctuation">;</span>\n\t<span class="token punctuation">}</span>\n<span class="token punctuation">}</span>\n</code></pre>\n<h1>Summary</h1>\n<p>It takes a while to understand the involved software components. Yet, once the set up is running, it gets much easier to adapt it to another Use Case. And another. The pattern of wiring protocols and transforming the payload is very similar. The involved frameworks are powerful enough to support many Use Cases. This article is supposed to show that there are simple possibilities to transform transport protocols and payloads, so that you can focus on addressing functional challenges.</p>\n',url:"/blog/2018/2/11/Transform-PPMP-with-camel",title:"PPMP Use Cases: Simple Transformation with Apache Camel",date:"2018-02-11T00:00:00.000Z",tags:["use cases"],prev:{url:"/blog/2018/1/26/New-website",title:"Updated Website"},next:{url:"/blog/2018/2/13/grinding-machine-scenario",title:"PPMP Use Cases: Unide and the Eclipse Production Performance Management Testbed"}}}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_article.dfd7fcb83848670d21b1.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2018/2/11/index.html b/blog/2018/2/11/index.html
index d543b89..7fa65f1 100644
--- a/blog/2018/2/11/index.html
+++ b/blog/2018/2/11/index.html
@@ -66,6 +66,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2018/2/11/Transform-PPMP-with-camel",title:"PPMP Use Cases: Simple Transformation with Apache Camel",date:"2018-02-11T00:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2018/2/11/Transform-PPMP-with-camel",title:"PPMP Use Cases: Simple Transformation with Apache Camel",date:"2018-02-11T00:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2018/2/13/grinding-machine-scenario/index.html b/blog/2018/2/13/grinding-machine-scenario/index.html
index 0f292ae..a3c667e 100644
--- a/blog/2018/2/13/grinding-machine-scenario/index.html
+++ b/blog/2018/2/13/grinding-machine-scenario/index.html
@@ -188,6 +188,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{post:{name:"grinding-machine-scenario",content:'<h2>Abstract</h2>\n<p>In this blog post we present a real world condition monitoring scenario used in<br>\nthe <a href="https://iot.eclipse.org/testbeds/production-performance-management/#">Eclipse Production Performance Management Testbed</a>, where Unide and<br>\nPPMP plays a crucial role. Moreover, we also provide a code repository and<br>\ninstructions so that you can recreate the scenario in your own computer and<br>\nlearn about its components and the communication with each other.</p>\n<h2>Introduction</h2>\n<p>In the context of the <a href="https://iot.eclipse.org/testbeds/production-performance-management/#">Eclipse Production Performance Management Testbed</a>, a<br>\nreal world condition monitoring scenario has been recreated, in which a<br>\ngrinding machine is being continuously monitored allowing to have real time<br>\nhealth checks and prevent unexpected failures.</p>\n<p>This scenario consists of the following building blocks: device, gateway,<br>\nbackend. The communication between them happens seamlessly thanks to the<br>\nProduction Performance management Protocol (PPMP).</p>\n<ul>\n<li>\n<p>The device, i.e. the grinding machine, has been retrofitted with an<br>\nacceleration sensor attached to one of its critical components. The data<br>\nprovided by this sensor is routed to the gateway in the form of a <a href="https://www.eclipse.org/unide/specification/measurement-message#messageDetail">PPMP<br>\nMeasurement Message</a>.</p>\n</li>\n<li>\n<p>The gateway receives the raw acceleration measurements, calculates some<br>\nstatistical characteristics and and applies some machine learning techniques<br>\nto them in order to evaluate the condition of the grinding machine. Then both<br>\nthe statistical values and the condition are routed to the backend, again in<br>\nthe form of a PPMP Measurement Message.</p>\n</li>\n<li>\n<p>The backend, usually in the cloud, is any component that &quot;speaks PPMP&quot; and<br>\nperforms meaningful operations on the incoming messages. Most frequently it<br>\nis responsible for storing the arriving data and making it available to apps<br>\nthat want to consume it. Common responsibilities of these apps are the<br>\nrepresentation or display of the data (e.g. dashboards), or workflows<br>\nmanagement (e.g. the grinding machine is in bad condition and an inspection<br>\nmust be carried out).</p>\n<p>The backend can be swapped effortless with any entity adhering to PPMP standard.<br>\nIn the Eclipse PPM Testbed at least two different backends have been used:</p>\n<ul>\n<li>One directly based on <a href="https://github.com/eclipse/unide">Unide</a></li>\n<li>One based on <a href="https://www.contact-software.com/en/products/elements-for-iot/">CONTACT Elements for IoT</a>.</li>\n</ul>\n</li>\n</ul>\n<h2>Hands-on demonstration</h2>\n<p>In order to make this scenario more hands-on and interesting, within the<br>\n<a href="https://github.com/eclipselabs/eclipseiot-testbed-productionperformancemanagement">Production Performance Management Testbed repository</a> project in Github, we<br>\nhave set up a <a href="https://github.com/eclipselabs/eclipseiot-testbed-productionperformancemanagement/tree/master/grinding-machine">subproject for the grinding machine scenario</a>. There you can<br>\nfind a thorough description and code to simulate the device and the gateway,<br>\nand route messages to a given backend. The only requirements are git and conda<br>\n(the easiest way to get conda is to <a href="https://conda.io/miniconda.html">install miniconda</a>).</p>\n<p>So, let\'s get started! First of all, open your terminal and clone the<br>\nrepository:</p>\n<pre class="language-bash"><code class="language-bash">$ <span class="token function">git</span> clone https://github.com/eclipselabs/eclipseiot-testbed-productionperformancemanagement eclipse-testbed-ppm\n$ <span class="token function">cd</span> eclipse-testbed-ppm/grinding-machine\n</code></pre>\n<p>Then move to the grinding machine subproject directory:</p>\n<pre class="language-bash"><code class="language-bash">$ <span class="token function">cd</span> eclipse-testbed-ppm/grinding-machine\n</code></pre>\n<p>In that folder you will see two subfolders. The first one<br>\n<code>unide-grinding-machine</code> contains a Python program that simulates grinding<br>\nmachine and the second one <code>unide-grinding-machine-gateway</code> simulates the<br>\ngateway.</p>\n<h3>Grinding Machine simulator</h3>\n<p>Let\'s start with the first component. First <code>cd</code> to <code>unide-grinding-machine</code><br>\nand then create the conda environment:</p>\n<pre class="language-bash"><code class="language-bash">$ conda <span class="token function">env</span> create --prefix<span class="token operator">=</span>env\n</code></pre>\n<p>And then in order to use this environment, we need to activate it.</p>\n<pre class="language-bash"><code class="language-bash">$ <span class="token function">source</span> activate <span class="token function">env</span>    <span class="token comment"># or in windows: activate env </span>\n</code></pre>\n<p>Run <code>unide-grinding-machine -h</code> to get familiar with the CLI. With this<br>\nexecutable we can generate some machine grinding data, and (for the moment)<br>\nprint messages to the console. To do so, run <code>unide-grinding-machine send random</code> and you should get a large message on the console. This is the PPMP<br>\nmessage ought to be sent to the gateway.</p>\n<p>We don\'t have a gateway so far, but don\'t worry, we will get to that in a<br>\nminute. Don\'t close this console!</p>\n<h3>Gateway simulator</h3>\n<p>Open a new console, and similarly to the previous point, first <code>cd</code> to<br>\n<code>unide-grinding-machine-gateway</code>, create the environment (<code>conda env create --prefix=env</code>) and activate it (<code>source activate env</code>).</p>\n<p>The run the command <code>unide-grinding-machine-gateway -h</code> to test that everything<br>\nis in place. You should get the CLI documentation.</p>\n<p>Now, let\'s fire up the gateway by calling <code>unide-grinding-machine-gateway start_server</code>, and a message like this should show up:</p>\n<pre class="language-bash"><code class="language-bash">Running <span class="token operator">&lt;</span>unide_grinding_machine_gateway.server.App object at 0x<span class="token punctuation">..</span><span class="token punctuation">..</span>.<span class="token operator">></span>\nListening on http://127.0.0.1:5000\nPress Ctrl-C to stop<span class="token punctuation">..</span>.\n</code></pre>\n<p>We are getting closer. Leave the gateway running.</p>\n<h3>Communication Device-Gateway</h3>\n<p>Let\'s go back to the previous console where we had the <code>unide-grinding-machine</code><br>\nenvironment and  call again the <code>unide-grinding-machine</code> program, but this time<br>\npassing the as an argument where the gateway is listening to messages.</p>\n<pre class="language-bash"><code class="language-bash">$ unide-grinding-machine send random --endpoint<span class="token operator">=</span>http://127.0.0.1:5000\n</code></pre>\n<p>If you take peek at the gateway output, you should see new information printed<br>\nout, which is a PPMP message containing the result of the classification<br>\nalgorithms applied to the device data we just sent to it.</p>\n<p>We are getting somewhere! But still, it is not extremely useful to print some<br>\ncharacters into a console, is it?</p>\n<h3>Communication Device-Gateway-Backend</h3>\n<p>There is only a small but relevant point missing: the routing from the gateway<br>\nto the backend. We need a backend and the Unide project provides a service that<br>\ncan be used as a playground for these purposes. So let\'s restart the gateway,<br>\nthis time passing the Unide endpoint:</p>\n<pre class="language-bash"><code class="language-bash">$ unide-grinding-machine-gateway start_server --endpoint<span class="token operator">=</span>https://unide.eclipse.org/rest/v2\n</code></pre>\n<p>Now we can use the <code>unide-grinding-machine</code> to send raw data to the gateway<br>\nwhich in turn sends its results to the backend.  In order to be able to<br>\nidentify this data later, we are going to define a proper device ID (argument<br>\n<code>--device-id</code>), and also tell it to send data once each 10 seconds (argument<br>\n<code>--period</code>):</p>\n<pre class="language-bash"><code class="language-bash">$ unide-grinding-machine send random --endpoint<span class="token operator">=</span>http://127.0.0.1:5000 --device-id<span class="token operator">=</span>IoT-000028--3 --period<span class="token operator">=</span>10\n</code></pre>\n<p>Once started, a continuous flow of data is pumped through each component until<br>\nit reaches the backend, allowing us to use the applications that consume this<br>\ndata. For instance, the basic backend provided by Unide offers a <a href="https://grafana.com/">Grafana</a> based<br>\ndashboard that offers live monitoring of the statistical values calculated in the<br>\ngateway:</p>\n<p><img src="/unide/images/blog/grinding-machine-grafana-dashboard.png" alt="Grafana based dashboard monitoring grinding machine"></p>\n<p>If instead of that we use the the <a href="https://www.contact-software.com/en/products/elements-for-iot/">CONTACT Elements for IoT</a> based backend,<br>\nwe can see a different and richer dashboard: charts, 3D models, list of<br>\nmaintenance events, device master data and the Activity Stream, a place where<br>\ndifferent parties can exchange information related to the grinding machine:</p>\n<p><img src="/unide/images/blog/grinding-machine-ce4iot-dashboard.png" alt="CONTACT Elements for IoT Dashboard"></p>\n',url:"/blog/2018/2/13/grinding-machine-scenario",title:"PPMP Use Cases: Unide and the Eclipse Production Performance Management Testbed",date:"2018-02-13T00:00:00.000Z",tags:["use cases"],prev:{url:"/blog/2018/2/11/Transform-PPMP-with-camel",title:"PPMP Use Cases: Simple Transformation with Apache Camel"},next:{url:"/blog/2018/3/26/Release-0.2.0",title:"Unide 0.2.0 released"}}}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_article.dfd7fcb83848670d21b1.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{post:{name:"grinding-machine-scenario",content:'<h2>Abstract</h2>\n<p>In this blog post we present a real world condition monitoring scenario used in<br>\nthe <a href="https://iot.eclipse.org/testbeds/production-performance-management/#">Eclipse Production Performance Management Testbed</a>, where Unide and<br>\nPPMP plays a crucial role. Moreover, we also provide a code repository and<br>\ninstructions so that you can recreate the scenario in your own computer and<br>\nlearn about its components and the communication with each other.</p>\n<h2>Introduction</h2>\n<p>In the context of the <a href="https://iot.eclipse.org/testbeds/production-performance-management/#">Eclipse Production Performance Management Testbed</a>, a<br>\nreal world condition monitoring scenario has been recreated, in which a<br>\ngrinding machine is being continuously monitored allowing to have real time<br>\nhealth checks and prevent unexpected failures.</p>\n<p>This scenario consists of the following building blocks: device, gateway,<br>\nbackend. The communication between them happens seamlessly thanks to the<br>\nProduction Performance management Protocol (PPMP).</p>\n<ul>\n<li>\n<p>The device, i.e. the grinding machine, has been retrofitted with an<br>\nacceleration sensor attached to one of its critical components. The data<br>\nprovided by this sensor is routed to the gateway in the form of a <a href="https://www.eclipse.org/unide/specification/measurement-message#messageDetail">PPMP<br>\nMeasurement Message</a>.</p>\n</li>\n<li>\n<p>The gateway receives the raw acceleration measurements, calculates some<br>\nstatistical characteristics and and applies some machine learning techniques<br>\nto them in order to evaluate the condition of the grinding machine. Then both<br>\nthe statistical values and the condition are routed to the backend, again in<br>\nthe form of a PPMP Measurement Message.</p>\n</li>\n<li>\n<p>The backend, usually in the cloud, is any component that &quot;speaks PPMP&quot; and<br>\nperforms meaningful operations on the incoming messages. Most frequently it<br>\nis responsible for storing the arriving data and making it available to apps<br>\nthat want to consume it. Common responsibilities of these apps are the<br>\nrepresentation or display of the data (e.g. dashboards), or workflows<br>\nmanagement (e.g. the grinding machine is in bad condition and an inspection<br>\nmust be carried out).</p>\n<p>The backend can be swapped effortless with any entity adhering to PPMP standard.<br>\nIn the Eclipse PPM Testbed at least two different backends have been used:</p>\n<ul>\n<li>One directly based on <a href="https://github.com/eclipse/unide">Unide</a></li>\n<li>One based on <a href="https://www.contact-software.com/en/products/elements-for-iot/">CONTACT Elements for IoT</a>.</li>\n</ul>\n</li>\n</ul>\n<h2>Hands-on demonstration</h2>\n<p>In order to make this scenario more hands-on and interesting, within the<br>\n<a href="https://github.com/eclipselabs/eclipseiot-testbed-productionperformancemanagement">Production Performance Management Testbed repository</a> project in Github, we<br>\nhave set up a <a href="https://github.com/eclipselabs/eclipseiot-testbed-productionperformancemanagement/tree/master/grinding-machine">subproject for the grinding machine scenario</a>. There you can<br>\nfind a thorough description and code to simulate the device and the gateway,<br>\nand route messages to a given backend. The only requirements are git and conda<br>\n(the easiest way to get conda is to <a href="https://conda.io/miniconda.html">install miniconda</a>).</p>\n<p>So, let\'s get started! First of all, open your terminal and clone the<br>\nrepository:</p>\n<pre class="language-bash"><code class="language-bash">$ <span class="token function">git</span> clone https://github.com/eclipselabs/eclipseiot-testbed-productionperformancemanagement eclipse-testbed-ppm\n$ <span class="token function">cd</span> eclipse-testbed-ppm/grinding-machine\n</code></pre>\n<p>Then move to the grinding machine subproject directory:</p>\n<pre class="language-bash"><code class="language-bash">$ <span class="token function">cd</span> eclipse-testbed-ppm/grinding-machine\n</code></pre>\n<p>In that folder you will see two subfolders. The first one<br>\n<code>unide-grinding-machine</code> contains a Python program that simulates grinding<br>\nmachine and the second one <code>unide-grinding-machine-gateway</code> simulates the<br>\ngateway.</p>\n<h3>Grinding Machine simulator</h3>\n<p>Let\'s start with the first component. First <code>cd</code> to <code>unide-grinding-machine</code><br>\nand then create the conda environment:</p>\n<pre class="language-bash"><code class="language-bash">$ conda <span class="token function">env</span> create --prefix<span class="token operator">=</span>env\n</code></pre>\n<p>And then in order to use this environment, we need to activate it.</p>\n<pre class="language-bash"><code class="language-bash">$ <span class="token function">source</span> activate <span class="token function">env</span>    <span class="token comment"># or in windows: activate env </span>\n</code></pre>\n<p>Run <code>unide-grinding-machine -h</code> to get familiar with the CLI. With this<br>\nexecutable we can generate some machine grinding data, and (for the moment)<br>\nprint messages to the console. To do so, run <code>unide-grinding-machine send random</code> and you should get a large message on the console. This is the PPMP<br>\nmessage ought to be sent to the gateway.</p>\n<p>We don\'t have a gateway so far, but don\'t worry, we will get to that in a<br>\nminute. Don\'t close this console!</p>\n<h3>Gateway simulator</h3>\n<p>Open a new console, and similarly to the previous point, first <code>cd</code> to<br>\n<code>unide-grinding-machine-gateway</code>, create the environment (<code>conda env create --prefix=env</code>) and activate it (<code>source activate env</code>).</p>\n<p>The run the command <code>unide-grinding-machine-gateway -h</code> to test that everything<br>\nis in place. You should get the CLI documentation.</p>\n<p>Now, let\'s fire up the gateway by calling <code>unide-grinding-machine-gateway start_server</code>, and a message like this should show up:</p>\n<pre class="language-bash"><code class="language-bash">Running <span class="token operator">&lt;</span>unide_grinding_machine_gateway.server.App object at 0x<span class="token punctuation">..</span><span class="token punctuation">..</span>.<span class="token operator">></span>\nListening on http://127.0.0.1:5000\nPress Ctrl-C to stop<span class="token punctuation">..</span>.\n</code></pre>\n<p>We are getting closer. Leave the gateway running.</p>\n<h3>Communication Device-Gateway</h3>\n<p>Let\'s go back to the previous console where we had the <code>unide-grinding-machine</code><br>\nenvironment and  call again the <code>unide-grinding-machine</code> program, but this time<br>\npassing the as an argument where the gateway is listening to messages.</p>\n<pre class="language-bash"><code class="language-bash">$ unide-grinding-machine send random --endpoint<span class="token operator">=</span>http://127.0.0.1:5000\n</code></pre>\n<p>If you take peek at the gateway output, you should see new information printed<br>\nout, which is a PPMP message containing the result of the classification<br>\nalgorithms applied to the device data we just sent to it.</p>\n<p>We are getting somewhere! But still, it is not extremely useful to print some<br>\ncharacters into a console, is it?</p>\n<h3>Communication Device-Gateway-Backend</h3>\n<p>There is only a small but relevant point missing: the routing from the gateway<br>\nto the backend. We need a backend and the Unide project provides a service that<br>\ncan be used as a playground for these purposes. So let\'s restart the gateway,<br>\nthis time passing the Unide endpoint:</p>\n<pre class="language-bash"><code class="language-bash">$ unide-grinding-machine-gateway start_server --endpoint<span class="token operator">=</span>https://unide.eclipse.org/rest/v2\n</code></pre>\n<p>Now we can use the <code>unide-grinding-machine</code> to send raw data to the gateway<br>\nwhich in turn sends its results to the backend.  In order to be able to<br>\nidentify this data later, we are going to define a proper device ID (argument<br>\n<code>--device-id</code>), and also tell it to send data once each 10 seconds (argument<br>\n<code>--period</code>):</p>\n<pre class="language-bash"><code class="language-bash">$ unide-grinding-machine send random --endpoint<span class="token operator">=</span>http://127.0.0.1:5000 --device-id<span class="token operator">=</span>IoT-000028--3 --period<span class="token operator">=</span>10\n</code></pre>\n<p>Once started, a continuous flow of data is pumped through each component until<br>\nit reaches the backend, allowing us to use the applications that consume this<br>\ndata. For instance, the basic backend provided by Unide offers a <a href="https://grafana.com/">Grafana</a> based<br>\ndashboard that offers live monitoring of the statistical values calculated in the<br>\ngateway:</p>\n<p><img src="/unide/images/blog/grinding-machine-grafana-dashboard.png" alt="Grafana based dashboard monitoring grinding machine"></p>\n<p>If instead of that we use the the <a href="https://www.contact-software.com/en/products/elements-for-iot/">CONTACT Elements for IoT</a> based backend,<br>\nwe can see a different and richer dashboard: charts, 3D models, list of<br>\nmaintenance events, device master data and the Activity Stream, a place where<br>\ndifferent parties can exchange information related to the grinding machine:</p>\n<p><img src="/unide/images/blog/grinding-machine-ce4iot-dashboard.png" alt="CONTACT Elements for IoT Dashboard"></p>\n',url:"/blog/2018/2/13/grinding-machine-scenario",title:"PPMP Use Cases: Unide and the Eclipse Production Performance Management Testbed",date:"2018-02-13T00:00:00.000Z",tags:["use cases"],prev:{url:"/blog/2018/2/11/Transform-PPMP-with-camel",title:"PPMP Use Cases: Simple Transformation with Apache Camel"},next:{url:"/blog/2018/3/26/Release-0.2.0",title:"Unide 0.2.0 released"}}}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_article.dfd7fcb83848670d21b1.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2018/2/13/index.html b/blog/2018/2/13/index.html
index cf7fbe0..6c52002 100644
--- a/blog/2018/2/13/index.html
+++ b/blog/2018/2/13/index.html
@@ -66,6 +66,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2018/2/13/grinding-machine-scenario",title:"PPMP Use Cases: Unide and the Eclipse Production Performance Management Testbed",date:"2018-02-13T00:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2018/2/13/grinding-machine-scenario",title:"PPMP Use Cases: Unide and the Eclipse Production Performance Management Testbed",date:"2018-02-13T00:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2018/2/index.html b/blog/2018/2/index.html
index d4143ec..a3aabbc 100644
--- a/blog/2018/2/index.html
+++ b/blog/2018/2/index.html
@@ -70,6 +70,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2018/2/13/grinding-machine-scenario",title:"PPMP Use Cases: Unide and the Eclipse Production Performance Management Testbed",date:"2018-02-13T00:00:00.000Z"},{url:"/blog/2018/2/11/Transform-PPMP-with-camel",title:"PPMP Use Cases: Simple Transformation with Apache Camel",date:"2018-02-11T00:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2018/2/13/grinding-machine-scenario",title:"PPMP Use Cases: Unide and the Eclipse Production Performance Management Testbed",date:"2018-02-13T00:00:00.000Z"},{url:"/blog/2018/2/11/Transform-PPMP-with-camel",title:"PPMP Use Cases: Simple Transformation with Apache Camel",date:"2018-02-11T00:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2018/3/26/Release-0.2.0/index.html b/blog/2018/3/26/Release-0.2.0/index.html
index b7dc474..acd749f 100644
--- a/blog/2018/3/26/Release-0.2.0/index.html
+++ b/blog/2018/3/26/Release-0.2.0/index.html
@@ -194,6 +194,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{post:{name:"Release-0.2.0",content:'<p>Finally, the second version (0.2.0) of the Eclipse unide project is released! The <a href="http://unide.eclipse.org">REST Server on the Testserver</a> has been updated as well.</p>\n<h1>Quick start</h1>\n<h2>Binsa chrome app</h2>\n<p>Download the binsa chrome app from <a href="http://download.eclipse.org/unide/binsa.crx">download page</a>. Open your chrome browser at <a href="chrome://extensions">chrome://extensions</a> and drag the binsa.crx file onto the page. You should be able to see your new chrome app in <a href="chrome://apps">chrome://apps</a></p>\n<h2>REST Server</h2>\n<p>Download the REST server file from <a href="https://repo.eclipse.org/content/repositories/unide-releases/org/eclipse/iot/unide/ppmp/ppmp-server/0.2.0/ppmp-server-0.2.0.jar">repo.eclipse.org</a>, create a simple configuration file (e.g. application_conf.json):</p>\n<pre class="language-json"><code class="language-json"><span class="token punctuation">{</span>\n  <span class="token property">"http.port"</span><span class="token operator">:</span> <span class="token number">8090</span><span class="token punctuation">,</span>\n  <span class="token property">"persistence.enable"</span><span class="token operator">:</span> <span class="token boolean">false</span>\n<span class="token punctuation">}</span>\n\n</code></pre>\n<p>and start the server</p>\n<pre class="language-bash"><code class="language-bash">java -jar ppmp-server-0.2.0.jar -conf application_conf.json\n</code></pre>\n<p>Point your browser to <a href="http://localhost:8090">http://localhost:8090</a> and see the servers documentation running on your local server! At this point, PPMP validation (via HTTP POST to <code>/rest/v2/validate</code>) is enabled, but no persistence.</p>\n<p>If you want to send data to the server, a quick way is via <a href="https://www.getpostman.com/">Postman App</a>, which is available as native app or <a href="https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=en">Chrome app</a>. Once installed and started, you can easily use the &quot;Import &gt; Import From Link&quot; feature to get the prepared <a href="https://raw.githubusercontent.com/eclipse/unide/f4d349bc4a0096d3f99e14cf5f8b9f53a5145fdd/servers/rest/assets/postman/unide.postman_collection.json">unide.postman_collection.json</a> and the corresponding <a href="https://raw.githubusercontent.com/eclipse/unide/f4d349bc4a0096d3f99e14cf5f8b9f53a5145fdd/servers/rest/assets/postman/unide.postman_environment.json">unide.postman_environment</a>. You should now have Machine/Measurement/Process messages and requests prepared in the Collections tab. In order to send, you could extend the URL with &quot;/validate&quot; and hit &quot;Send&quot; button. If you get the response</p>\n<blockquote>\n<p>Ppmp Message of type \'xy\' is valid</p>\n</blockquote>\n<p>the unide REST server works as expected!</p>\n<h1>Persistence</h1>\n<h2>Influx DB</h2>\n<p><a href="https://portal.influxdata.com/downloads">Download</a> the InfluxDB Time-Series Data Storage and unzip or install it on your system. By default, it opens an http port at 8086. In order to make use of it, the configuration file should be modified, e.g. to:</p>\n<pre class="language-json"><code class="language-json"><span class="token punctuation">{</span>\n  <span class="token property">"http.port"</span><span class="token operator">:</span> <span class="token number">8090</span><span class="token punctuation">,</span>\n  <span class="token property">"persistence.enable"</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>\n  <span class="token property">"persistence.system"</span><span class="token operator">:</span> <span class="token string">"influxDb"</span><span class="token punctuation">,</span>\n  <span class="token property">"influxDb.url"</span><span class="token operator">:</span> <span class="token string">"http://localhost:8086"</span><span class="token punctuation">,</span>\n  <span class="token property">"influxDb.user"</span><span class="token operator">:</span> <span class="token string">"root"</span><span class="token punctuation">,</span>\n  <span class="token property">"influxDb.password"</span><span class="token operator">:</span> <span class="token string">"root"</span>\n<span class="token punctuation">}</span>\n</code></pre>\n<p>After starting the database and the unide REST server, it should be possible to send POST requests to <code>http://localhost:8090/rest/v2</code>. This path receives all message types. To query the database after, use:<br>\n<a href="http://localhost:8086/query?pretty=true&amp;u=root&amp;p=root&amp;db=Measurements&amp;q=SELECT%20*%20FROM%20%22ppmp_measurements%22">http://localhost:8086/query?pretty=true&amp;u=root&amp;p=root&amp;db=Measurements&amp;q=SELECT * FROM &quot;ppmp_measurements&quot;</a> or the other databases that are documented on the <a href="http://localhost:8090/#influxdb_schema_design">running server instance</a>, respectively.</p>\n<h2>SQL (timescale, h2)</h2>\n<p>Download the appropriate jdbc driver, e.g. <a href="http://repo1.maven.org/maven2/com/h2database/h2/1.4.197/h2-1.4.197.jar">h2-*.jar</a>, modify the configuration file, e.g. for h2:</p>\n<pre class="language-json"><code class="language-json"><span class="token punctuation">{</span>\n  <span class="token property">"http.port"</span><span class="token operator">:</span> <span class="token number">8090</span><span class="token punctuation">,</span>\n  <span class="token property">"persistence.enable"</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>\n  <span class="token property">"persistence.system"</span><span class="token operator">:</span> <span class="token string">"sql"</span><span class="token punctuation">,</span>\n  <span class="token property">"sqlDb.driver"</span><span class="token operator">:</span> <span class="token string">"org.h2.Driver"</span><span class="token punctuation">,</span>\n  <span class="token property">"sqlDb.url"</span><span class="token operator">:</span> <span class="token string">"jdbc:h2:./test"</span><span class="token punctuation">,</span>\n  <span class="token property">"sqlDb.user"</span><span class="token operator">:</span> <span class="token string">"sa"</span><span class="token punctuation">,</span>\n  <span class="token property">"sqlDb.password"</span><span class="token operator">:</span> <span class="token string">""</span>\n<span class="token punctuation">}</span>\n</code></pre>\n<p>Start the PPMP Server with the jdbc dependency on the classpath, e.g.:</p>\n<pre class="language-bash"><code class="language-bash">java -cp <span class="token string">"h2-1.4.197.jar;ppmp-server-0.2.0.jar"</span> io.vertx.core.Launcher org.eclipse.iot.unide.server.MainVerticle -conf application.conf\n</code></pre>\n<p>Now, all the data send to the REST server is persisted in the file <code>test.mv.db</code>.<br>\nFor concurrent db actions (reading while writing), use the h2 tcp server instead. h2 is not recommended for production use!</p>\n<h1>Background</h1>\n<h2>Download</h2>\n<p>Available artifacts for download:</p>\n<ul>\n<li><a href="https://repo.eclipse.org/content/repositories/unide-releases/org/eclipse/iot/unide/ppmp/ppmp-schema/2.0.0/">PPMP Schema v2</a></li>\n<li><a href="https://repo.eclipse.org/content/repositories/unide-releases/org/eclipse/iot/unide/ppmp/ppmp-java-binding/0.2.0/">PPMP java Binding</a></li>\n<li><a href="https://pypi.python.org/packages/d5/af/c90911d1da56a1ed0238338ba01068d43b8cd0137e9ca52b0f52a279f73e/unide_python-0.2.0-py2.py3-none-any.whl#md5=ca67bcd536b3a4015f72f5fa53d36543">PPMP Python Binding</a></li>\n<li><a href="https://repo.eclipse.org/content/repositories/unide-releases/org/eclipse/iot/unide/ppmp/ppmp-server/0.2.0/">PPMP Server</a></li>\n<li><a href="http://download.eclipse.org/unide/binsa.crx">binsa client chrome app</a></li>\n</ul>\n<p>Source code:</p>\n<ul>\n<li><a href="https://github.com/eclipse/unide/releases/tag/v0.2.0">unide</a></li>\n<li><a href="https://github.com/eclipse/unide.java/releases/tag/v0.2.0">java binding</a></li>\n<li><a href="https://github.com/eclipse/unide.python/releases/tag/v0.2.0">python binding</a></li>\n</ul>\n<h2>Release notes</h2>\n<h3>REST Server improvements (refactoring &amp; persistence)</h3>\n<ul>\n<li>Added persistence to timeseries/postgres db</li>\n<li>Outfactored schema files</li>\n<li>Adjusted maven file</li>\n<li>Added unit tests</li>\n<li>Added documentation &amp; java docs</li>\n<li>Adjusted error handling</li>\n<li>Removed unused code</li>\n<li>Added postman collections</li>\n<li>Added grafana configuration file</li>\n</ul>\n<h3>New HTML5 simulation client</h3>\n<ul>\n<li>Progressive Webapp runs as website (see <a href="https://unide.eclipse.org/binsa">https://unide.eclipse.org/binsa</a>), browser app, native client (via <a href="https://nwjs.io/">nw.js</a>) or app (via <a href="https://cordova.apache.org/">Apache cordova</a>)</li>\n</ul>\n<h3>PPMP JSON Schema files</h3>\n<ul>\n<li>Introduced separate bundle for schemas</li>\n<li>general fixes\n<ul>\n<li>make schema draft-06 compliant</li>\n<li>added \'id\' and \'descriptions\' where applicable</li>\n<li>added \'type\' and \'default\' for enums</li>\n<li>added \'required\' fields where necessary</li>\n<li>made \'additionalProperties\': true explicit for \'metaData\'</li>\n<li>sorted the properties for improved readability</li>\n</ul>\n</li>\n<li>message_schema fixes\n<ul>\n<li>added minItems: 1 to messages</li>\n</ul>\n</li>\n<li>measurement_schema fixes\n<ul>\n<li>completed \'limits\' specification</li>\n<li>added \'patternProperties\' and minProperties detail to \'series\'</li>\n<li>added minItems: 1 to measurements</li>\n</ul>\n</li>\n<li>process_schema fixes\n<ul>\n<li>made \'id\' and \'name\' of a \'program\' mandatory</li>\n<li>fixed \'shutoffValues\', having properties not items</li>\n<li>fixed \'limits\', having properties not items and number values rather than object values as limits</li>\n<li>fixed \'specialValues\' to be an array of specialValue items with \'name\' for indicating the nature, rather than one single object with its keys indicating the nature. Offering optional \'$_time\' tag to be consistent with measurements.</li>\n<li>completed \'series\' definition</li>\n</ul>\n</li>\n</ul>\n<h3>Website</h3>\n<ul>\n<li>Autogenerating PPMP specification from JSON schemas to avoid discrepancies</li>\n<li>Generating UML schemas with plantuml</li>\n<li>Using similar HTML5 stack as simulation client for SPA website</li>\n</ul>\n<h3>Other</h3>\n<ul>\n<li>java and new python bindings in separate github repositories</li>\n</ul>\n',url:"/blog/2018/3/26/Release-0.2.0",title:"Unide 0.2.0 released",date:"2018-03-26T10:39:00.000Z",tags:["releases"],prev:{url:"/blog/2018/2/13/grinding-machine-scenario",title:"PPMP Use Cases: Unide and the Eclipse Production Performance Management Testbed"},next:{url:"/blog/2018/9/4/Template-for-PPMP-transformation",title:"PPMP Use Cases: Template for PPMP transformation"}}}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_article.dfd7fcb83848670d21b1.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{post:{name:"Release-0.2.0",content:'<p>Finally, the second version (0.2.0) of the Eclipse unide project is released! The <a href="http://unide.eclipse.org">REST Server on the Testserver</a> has been updated as well.</p>\n<h1>Quick start</h1>\n<h2>Binsa chrome app</h2>\n<p>Download the binsa chrome app from <a href="http://download.eclipse.org/unide/binsa.crx">download page</a>. Open your chrome browser at <a href="chrome://extensions">chrome://extensions</a> and drag the binsa.crx file onto the page. You should be able to see your new chrome app in <a href="chrome://apps">chrome://apps</a></p>\n<h2>REST Server</h2>\n<p>Download the REST server file from <a href="https://repo.eclipse.org/content/repositories/unide-releases/org/eclipse/iot/unide/ppmp/ppmp-server/0.2.0/ppmp-server-0.2.0.jar">repo.eclipse.org</a>, create a simple configuration file (e.g. application_conf.json):</p>\n<pre class="language-json"><code class="language-json"><span class="token punctuation">{</span>\n  <span class="token property">"http.port"</span><span class="token operator">:</span> <span class="token number">8090</span><span class="token punctuation">,</span>\n  <span class="token property">"persistence.enable"</span><span class="token operator">:</span> <span class="token boolean">false</span>\n<span class="token punctuation">}</span>\n\n</code></pre>\n<p>and start the server</p>\n<pre class="language-bash"><code class="language-bash">java -jar ppmp-server-0.2.0.jar -conf application_conf.json\n</code></pre>\n<p>Point your browser to <a href="http://localhost:8090">http://localhost:8090</a> and see the servers documentation running on your local server! At this point, PPMP validation (via HTTP POST to <code>/rest/v2/validate</code>) is enabled, but no persistence.</p>\n<p>If you want to send data to the server, a quick way is via <a href="https://www.getpostman.com/">Postman App</a>, which is available as native app or <a href="https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=en">Chrome app</a>. Once installed and started, you can easily use the &quot;Import &gt; Import From Link&quot; feature to get the prepared <a href="https://raw.githubusercontent.com/eclipse/unide/f4d349bc4a0096d3f99e14cf5f8b9f53a5145fdd/servers/rest/assets/postman/unide.postman_collection.json">unide.postman_collection.json</a> and the corresponding <a href="https://raw.githubusercontent.com/eclipse/unide/f4d349bc4a0096d3f99e14cf5f8b9f53a5145fdd/servers/rest/assets/postman/unide.postman_environment.json">unide.postman_environment</a>. You should now have Machine/Measurement/Process messages and requests prepared in the Collections tab. In order to send, you could extend the URL with &quot;/validate&quot; and hit &quot;Send&quot; button. If you get the response</p>\n<blockquote>\n<p>Ppmp Message of type \'xy\' is valid</p>\n</blockquote>\n<p>the unide REST server works as expected!</p>\n<h1>Persistence</h1>\n<h2>Influx DB</h2>\n<p><a href="https://portal.influxdata.com/downloads">Download</a> the InfluxDB Time-Series Data Storage and unzip or install it on your system. By default, it opens an http port at 8086. In order to make use of it, the configuration file should be modified, e.g. to:</p>\n<pre class="language-json"><code class="language-json"><span class="token punctuation">{</span>\n  <span class="token property">"http.port"</span><span class="token operator">:</span> <span class="token number">8090</span><span class="token punctuation">,</span>\n  <span class="token property">"persistence.enable"</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>\n  <span class="token property">"persistence.system"</span><span class="token operator">:</span> <span class="token string">"influxDb"</span><span class="token punctuation">,</span>\n  <span class="token property">"influxDb.url"</span><span class="token operator">:</span> <span class="token string">"http://localhost:8086"</span><span class="token punctuation">,</span>\n  <span class="token property">"influxDb.user"</span><span class="token operator">:</span> <span class="token string">"root"</span><span class="token punctuation">,</span>\n  <span class="token property">"influxDb.password"</span><span class="token operator">:</span> <span class="token string">"root"</span>\n<span class="token punctuation">}</span>\n</code></pre>\n<p>After starting the database and the unide REST server, it should be possible to send POST requests to <code>http://localhost:8090/rest/v2</code>. This path receives all message types. To query the database after, use:<br>\n<a href="http://localhost:8086/query?pretty=true&amp;u=root&amp;p=root&amp;db=Measurements&amp;q=SELECT%20*%20FROM%20%22ppmp_measurements%22">http://localhost:8086/query?pretty=true&amp;u=root&amp;p=root&amp;db=Measurements&amp;q=SELECT * FROM &quot;ppmp_measurements&quot;</a> or the other databases that are documented on the <a href="http://localhost:8090/#influxdb_schema_design">running server instance</a>, respectively.</p>\n<h2>SQL (timescale, h2)</h2>\n<p>Download the appropriate jdbc driver, e.g. <a href="http://repo1.maven.org/maven2/com/h2database/h2/1.4.197/h2-1.4.197.jar">h2-*.jar</a>, modify the configuration file, e.g. for h2:</p>\n<pre class="language-json"><code class="language-json"><span class="token punctuation">{</span>\n  <span class="token property">"http.port"</span><span class="token operator">:</span> <span class="token number">8090</span><span class="token punctuation">,</span>\n  <span class="token property">"persistence.enable"</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>\n  <span class="token property">"persistence.system"</span><span class="token operator">:</span> <span class="token string">"sql"</span><span class="token punctuation">,</span>\n  <span class="token property">"sqlDb.driver"</span><span class="token operator">:</span> <span class="token string">"org.h2.Driver"</span><span class="token punctuation">,</span>\n  <span class="token property">"sqlDb.url"</span><span class="token operator">:</span> <span class="token string">"jdbc:h2:./test"</span><span class="token punctuation">,</span>\n  <span class="token property">"sqlDb.user"</span><span class="token operator">:</span> <span class="token string">"sa"</span><span class="token punctuation">,</span>\n  <span class="token property">"sqlDb.password"</span><span class="token operator">:</span> <span class="token string">""</span>\n<span class="token punctuation">}</span>\n</code></pre>\n<p>Start the PPMP Server with the jdbc dependency on the classpath, e.g.:</p>\n<pre class="language-bash"><code class="language-bash">java -cp <span class="token string">"h2-1.4.197.jar;ppmp-server-0.2.0.jar"</span> io.vertx.core.Launcher org.eclipse.iot.unide.server.MainVerticle -conf application.conf\n</code></pre>\n<p>Now, all the data send to the REST server is persisted in the file <code>test.mv.db</code>.<br>\nFor concurrent db actions (reading while writing), use the h2 tcp server instead. h2 is not recommended for production use!</p>\n<h1>Background</h1>\n<h2>Download</h2>\n<p>Available artifacts for download:</p>\n<ul>\n<li><a href="https://repo.eclipse.org/content/repositories/unide-releases/org/eclipse/iot/unide/ppmp/ppmp-schema/2.0.0/">PPMP Schema v2</a></li>\n<li><a href="https://repo.eclipse.org/content/repositories/unide-releases/org/eclipse/iot/unide/ppmp/ppmp-java-binding/0.2.0/">PPMP java Binding</a></li>\n<li><a href="https://pypi.python.org/packages/d5/af/c90911d1da56a1ed0238338ba01068d43b8cd0137e9ca52b0f52a279f73e/unide_python-0.2.0-py2.py3-none-any.whl#md5=ca67bcd536b3a4015f72f5fa53d36543">PPMP Python Binding</a></li>\n<li><a href="https://repo.eclipse.org/content/repositories/unide-releases/org/eclipse/iot/unide/ppmp/ppmp-server/0.2.0/">PPMP Server</a></li>\n<li><a href="http://download.eclipse.org/unide/binsa.crx">binsa client chrome app</a></li>\n</ul>\n<p>Source code:</p>\n<ul>\n<li><a href="https://github.com/eclipse/unide/releases/tag/v0.2.0">unide</a></li>\n<li><a href="https://github.com/eclipse/unide.java/releases/tag/v0.2.0">java binding</a></li>\n<li><a href="https://github.com/eclipse/unide.python/releases/tag/v0.2.0">python binding</a></li>\n</ul>\n<h2>Release notes</h2>\n<h3>REST Server improvements (refactoring &amp; persistence)</h3>\n<ul>\n<li>Added persistence to timeseries/postgres db</li>\n<li>Outfactored schema files</li>\n<li>Adjusted maven file</li>\n<li>Added unit tests</li>\n<li>Added documentation &amp; java docs</li>\n<li>Adjusted error handling</li>\n<li>Removed unused code</li>\n<li>Added postman collections</li>\n<li>Added grafana configuration file</li>\n</ul>\n<h3>New HTML5 simulation client</h3>\n<ul>\n<li>Progressive Webapp runs as website (see <a href="https://unide.eclipse.org/binsa">https://unide.eclipse.org/binsa</a>), browser app, native client (via <a href="https://nwjs.io/">nw.js</a>) or app (via <a href="https://cordova.apache.org/">Apache cordova</a>)</li>\n</ul>\n<h3>PPMP JSON Schema files</h3>\n<ul>\n<li>Introduced separate bundle for schemas</li>\n<li>general fixes\n<ul>\n<li>make schema draft-06 compliant</li>\n<li>added \'id\' and \'descriptions\' where applicable</li>\n<li>added \'type\' and \'default\' for enums</li>\n<li>added \'required\' fields where necessary</li>\n<li>made \'additionalProperties\': true explicit for \'metaData\'</li>\n<li>sorted the properties for improved readability</li>\n</ul>\n</li>\n<li>message_schema fixes\n<ul>\n<li>added minItems: 1 to messages</li>\n</ul>\n</li>\n<li>measurement_schema fixes\n<ul>\n<li>completed \'limits\' specification</li>\n<li>added \'patternProperties\' and minProperties detail to \'series\'</li>\n<li>added minItems: 1 to measurements</li>\n</ul>\n</li>\n<li>process_schema fixes\n<ul>\n<li>made \'id\' and \'name\' of a \'program\' mandatory</li>\n<li>fixed \'shutoffValues\', having properties not items</li>\n<li>fixed \'limits\', having properties not items and number values rather than object values as limits</li>\n<li>fixed \'specialValues\' to be an array of specialValue items with \'name\' for indicating the nature, rather than one single object with its keys indicating the nature. Offering optional \'$_time\' tag to be consistent with measurements.</li>\n<li>completed \'series\' definition</li>\n</ul>\n</li>\n</ul>\n<h3>Website</h3>\n<ul>\n<li>Autogenerating PPMP specification from JSON schemas to avoid discrepancies</li>\n<li>Generating UML schemas with plantuml</li>\n<li>Using similar HTML5 stack as simulation client for SPA website</li>\n</ul>\n<h3>Other</h3>\n<ul>\n<li>java and new python bindings in separate github repositories</li>\n</ul>\n',url:"/blog/2018/3/26/Release-0.2.0",title:"Unide 0.2.0 released",date:"2018-03-26T10:39:00.000Z",tags:["releases"],prev:{url:"/blog/2018/2/13/grinding-machine-scenario",title:"PPMP Use Cases: Unide and the Eclipse Production Performance Management Testbed"},next:{url:"/blog/2018/9/4/Template-for-PPMP-transformation",title:"PPMP Use Cases: Template for PPMP transformation"}}}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_article.dfd7fcb83848670d21b1.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2018/3/26/index.html b/blog/2018/3/26/index.html
index be479e2..7e7a4d2 100644
--- a/blog/2018/3/26/index.html
+++ b/blog/2018/3/26/index.html
@@ -66,6 +66,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2018/3/26/Release-0.2.0",title:"Unide 0.2.0 released",date:"2018-03-26T10:39:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2018/3/26/Release-0.2.0",title:"Unide 0.2.0 released",date:"2018-03-26T10:39:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2018/3/index.html b/blog/2018/3/index.html
index 6119ff1..5087172 100644
--- a/blog/2018/3/index.html
+++ b/blog/2018/3/index.html
@@ -66,6 +66,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2018/3/26/Release-0.2.0",title:"Unide 0.2.0 released",date:"2018-03-26T10:39:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2018/3/26/Release-0.2.0",title:"Unide 0.2.0 released",date:"2018-03-26T10:39:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2018/9/4/Template-for-PPMP-transformation/index.html b/blog/2018/9/4/Template-for-PPMP-transformation/index.html
index 5e3cd3e..e1dabb9 100644
--- a/blog/2018/9/4/Template-for-PPMP-transformation/index.html
+++ b/blog/2018/9/4/Template-for-PPMP-transformation/index.html
@@ -229,6 +229,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{post:{name:"Template-for-PPMP-transformation",content:'<h1>Quick start</h1>\n<p>In <a href="https://www.eclipse.org/unide/blog/2018/2/11/Transform-PPMP-with-camel/">a previous blog post</a>, I have already introduced Apache Camel as a tool to transform to PPMP. In this post, I want to dive a little deeper to get you started with your own transformation.<br>\nYou can find corresponding source code with some transformation examples <a href="https://github.com/eclipselabs/eclipseiot-testbed-productionperformancemanagement/tree/master/camel-integrator">in the repository of the Eclipse PPM Testbed</a>. After download or checkout of the project, you can easily package everything necessary for an installation via <a href="https://maven.apache.org/">Apache Maven</a> and java 8+:</p>\n<pre class="language-bash"><code class="language-bash"><span class="token function">git</span> clone https://github.com/eclipselabs/eclipseiot-testbed-productionperformancemanagement.git\n<span class="token function">cd</span> eclipseiot-testbed-productionperformancemanagement\n<span class="token function">cd</span> camel-integrator\nmvn package\n</code></pre>\n<p>After successful build, you should get a zip file at <code>target/camel-integrator-*-assembly.zip</code> with the following content</p>\n<ul>\n<li><code>bin</code><br>\nThe IntegratorStarter* files for Windows and Linux can be used to start the integrator manually. WinServiceInstaller.bat und WinServiceUninstaller.bat can be executed with Admin permissions in Windows to register/unregister this java application as Windows Service called &quot;Integrator Service&quot;.</li>\n<li><code>conf</code><br>\nThis is where the main configuration file <code>application-context.xml</code>, further included spring xml configurations, as well as the configuration for logging <code>log4j.properties</code> and a key-value-file for quick configuration <code>application.properties</code> can be found. After modification of any of them, the integrator should be restarted.</li>\n<li><code>lib</code><br>\nContains all java dependencies and their dependencies as individual jar files</li>\n<li><code>log</code><br>\nAfter the first start, you will find an additional directory that contains the logs of every execution, as defined in the <code>conf/log4j.properties</code> file.</li>\n</ul>\n<p>So this <code>camel-integrator-*-assembly.zip</code> is all you need, ready to being shipped and installed in your target system.</p>\n<h1>How can I modify this?</h1>\n<p>In the <code>conf</code> folder of the output or <code>src/main/resources</code> src folder, you\'ll find multiple examples on how to use Apache Camel with Production Performance Management Protocol. Most of the examples are based on <a href="https://github.com/apache/camel/blob/master/components/camel-spring/src/main/docs/spring.adoc">spring xml</a>.<br>\nThe most important terms to understand them are:</p>\n<table>\n<thead>\n<tr>\n<th>xml tag</th>\n<th>meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>bean</td>\n<td>additional functionality, coded as java class / function</td>\n</tr>\n<tr>\n<td>camelContext</td>\n<td>the main, camel specific configurations</td>\n</tr>\n<tr>\n<td>route</td>\n<td>describes the data flow as process</td>\n</tr>\n<tr>\n<td>from / to</td>\n<td>entry / exit points for the data flow. This is also, were external systems are accessed via <a href="https://github.com/apache/camel/tree/camel-2.21.0/components">components</a></td>\n</tr>\n<tr>\n<td>onException</td>\n<td>error handling for the data flow</td>\n</tr>\n<tr>\n<td>pipeline, multicast, ...</td>\n<td>routing of data via <a href="http://camel.apache.org/enterprise-integration-patterns.html">Enterprise Integration pattern</a></td>\n</tr>\n</tbody>\n</table>\n<p>Among others, you\'ll find:</p>\n<div class="card figure is-pulled-right">\n\t<div class="card-image">\n\t\t<figure class="image">\n\t\t\t<img alt="html log file" title="html log file" src="/unide/images/blog/Transform-PPMP-with-camel-2-logfile.png"></img>\n\t\t</figure>\n\t</div>\n\t<div class="card-content">\n\t\thtml logfile before transformation to PPMP\n\t</div>\n</div>\n<ul>\n<li><code>application-context.xml</code><br>\nMain entry file to start camel routes. It contains a general PPMP validation REST endpoint that reuses the route from <code>ppmp-validate-context.xml</code></li>\n<li><code>mqtt-context.xml</code><br>\nA simple example of converting transport protocol (mqtt to REST), without looking at the payload</li>\n<li><code>ppmp-splitAndRewrite-context.xml</code><br>\nShows how to receive (PPMP-) payload via different REST paths (/rest or /ppm), and each forwarding to two seperate endpoints (/rest and /ppm)\n<ul>\n<li><code>ppmpRewrite.xml</code> and <code>ppmRewrite.xml</code><br>\nmapping examples to rewrite the urls</li>\n</ul>\n</li>\n<li><code>ppmp-validate-context.xml</code><br>\nA simple validation route for PPMP messages that can be reused in many other routes.</li>\n<li><code>psi6000-transform-context.xml</code><br>\nA more advanced example of converting a psi6000 JSON format, converting it to plain old java object (POJO), transforming that to PPMP POJOs (using <a href="https://github.com/eclipse/unide.java">unide.java</a>) and forwarding these to actual REST endpoints</li>\n<li><code>kistler.xml</code><br>\nThis example takes html files with a structure similar to the test file in <a href="https://github.com/eclipselabs/eclipseiot-testbed-productionperformancemanagement/blob/master/camel-integrator/src/test/data/00000855.html"><code>src/test/data/00000855.html</code></a>, cleans the html structure, retrieves the relevant parts via <a href="https://en.wikipedia.org/wiki/XPath">XPath</a> and creates a PPMP process message out of that</li>\n<li><code>application.properties</code><br>\nContains key/value pairs that can be used in the camel context configurations.</li>\n<li><code>log4j.properties</code><br>\nThe configuration for logging. For testing purposes, the log4j.properties in /src/test/resources is used.</li>\n</ul>\n<p>In order to get familiar with these transformations, I suggest you:</p>\n<ul>\n<li>open the <code>application-context.xml</code> in your favorite editor</li>\n<li>remove the <code>&lt;import .../&gt;</code> statements</li>\n<li>add your own <code>&lt;route&gt;...&lt;/route&gt;</code>, maybe as simple as<pre class="language-xml"><code class="language-xml">  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>route</span><span class="token punctuation">></span></span>\n  \t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>from</span> <span class="token attr-name">uri</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>jetty:http://0.0.0.0:9090/<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n  \t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>setBody</span><span class="token punctuation">></span></span>\n  \t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>simple</span><span class="token punctuation">></span></span>hello world!<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>simple</span><span class="token punctuation">></span></span>\n  \t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>setBody</span><span class="token punctuation">></span></span>\n  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>route</span><span class="token punctuation">></span></span>\n</code></pre>\n</li>\n<li>start a run directly (with bundling to a zip file) with:<pre class="language-bash"><code class="language-bash">  mvn exec:java\n</code></pre>\n</li>\n<li>and review the result. With the example above, just open the url <a href="http://localhost:9090">http://localhost:9090</a> and see the <code>hello world!</code> in your browser</li>\n</ul>\n<p>If you prefer a visual model of these camel xml definitions, you could also make use of <a href="https://tools.jboss.org/features/fusetools.html">JBoss Fuse Tooling</a> which is available for <a href="https://projects.eclipse.org/releases/oxygen">Eclipse Workbench 4.3+</a> through <a href="https://marketplace.eclipse.org/content/jboss-tools">the Marketplace</a>. Be aware that this might cause additional overhead.</p>\n<div class="card figure">\n\t<div class="card-image">\n\t\t<figure class="image">\n\t\t\t<img alt="JBoss Tools" title="JBoss Tools for Eclipse Workbench" src="/unide/images/blog/Transform-PPMP-with-camel-2-eclipse.png"></img>\n\t\t</figure>\n\t</div>\n\t<div class="card-content">\n\t\tJBoss Tools for Eclipse Workbench\n\t</div>\n</div>\n<p>If you want to make use of any other of the (as of camel 2.21.0) <a href="https://github.com/apache/camel/tree/camel-2.21.0/components">281+ components</a>, you should add the respective maven dependency to the <code>pom.xml</code>. For example:</p>\n<pre class="language-xml"><code class="language-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>project</span> <span class="token attr-name">xmlns</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://maven.apache.org/POM/4.0.0<span class="token punctuation">"</span></span> <span class="token attr-name"><span class="token namespace">xmlns:</span>xsi</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.w3.org/2001/XMLSchema-instance<span class="token punctuation">"</span></span>\n\t<span class="token attr-name"><span class="token namespace">xsi:</span>schemaLocation</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>\n\t...\n\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependencies</span><span class="token punctuation">></span></span>\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">></span></span>org.apache.camel<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">></span></span>camel-amqp<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">></span></span>${camel.version}<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">></span></span>\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">></span></span>\n\t...\n\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependencies</span><span class="token punctuation">></span></span>\n\t...\n<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>project</span><span class="token punctuation">></span></span>\n</code></pre>\n<h1>Testing</h1>\n<p>Testing is an important part of the development cycle, especially for the core components that have to work reliably in a production environment.<br>\nThe project includes example tests in the <code>src/test</code> folder:</p>\n<ul>\n<li><code>java</code><br>\ncontains the actual java unit tests that make use of <a href="https://github.com/apache/camel/blob/61a58836da57bab38ce719cbd1effd36253687a4/docs/user-manual/en/spring-testing.adoc"><code>CamelSpringTestSupport</code></a> to wire xml CamelContext configuration, test data and expected results together</li>\n<li><code>resources</code><br>\ncontains the spring xml configuration that is used by the java test classes and resamble the actual configurations from <code>src/main/resources</code></li>\n<li><code>data</code><br>\ncontains testdata for the data flows and the transformation</li>\n</ul>\n<p>Tests can easily be run from within an IDE (eclipse, visual code studio etc.) or via commandline</p>\n<pre class="language-bash"><code class="language-bash">mvn <span class="token function">test</span>\n</code></pre>\n<p>You will see the output of the test runs. If it looks like this, it works as expected:</p>\n<pre class="language-bash"><code class="language-bash">Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.846 sec\n\nResults <span class="token keyword">:</span>\n\nTests run: 3, Failures: 0, Errors: 0, Skipped: 0\n\n<span class="token punctuation">[</span>INFO<span class="token punctuation">]</span> ------------------------------------------------------------------------\n<span class="token punctuation">[</span>INFO<span class="token punctuation">]</span> BUILD SUCCESS\n<span class="token punctuation">[</span>INFO<span class="token punctuation">]</span> ------------------------------------------------------------------------\n<span class="token punctuation">[</span>INFO<span class="token punctuation">]</span> Total time: 32.267 s\n<span class="token punctuation">[</span>INFO<span class="token punctuation">]</span> Finished at: 2018-04-09T15:25:25+02:00\n<span class="token punctuation">[</span>INFO<span class="token punctuation">]</span> Final Memory: 25M/85M\n<span class="token punctuation">[</span>INFO<span class="token punctuation">]</span> ------------------------------------------------------------------------\n</code></pre>\n<h1>Summary</h1>\n<p>The provided camel project template facilitates the creation of simple connectors. You can download it, modify or extend it, package the integrator to a zip file and deploy it on a target server. The included scripts help registering the integrator as an operating system service to run 24/7.</p>\n',url:"/blog/2018/9/4/Template-for-PPMP-transformation",title:"PPMP Use Cases: Template for PPMP transformation",date:"2018-09-04T00:00:00.000Z",tags:["use cases"],prev:{url:"/blog/2018/3/26/Release-0.2.0",title:"Unide 0.2.0 released"}}}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_article.dfd7fcb83848670d21b1.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{post:{name:"Template-for-PPMP-transformation",content:'<h1>Quick start</h1>\n<p>In <a href="https://www.eclipse.org/unide/blog/2018/2/11/Transform-PPMP-with-camel/">a previous blog post</a>, I have already introduced Apache Camel as a tool to transform to PPMP. In this post, I want to dive a little deeper to get you started with your own transformation.<br>\nYou can find corresponding source code with some transformation examples <a href="https://github.com/eclipselabs/eclipseiot-testbed-productionperformancemanagement/tree/master/camel-integrator">in the repository of the Eclipse PPM Testbed</a>. After download or checkout of the project, you can easily package everything necessary for an installation via <a href="https://maven.apache.org/">Apache Maven</a> and java 8+:</p>\n<pre class="language-bash"><code class="language-bash"><span class="token function">git</span> clone https://github.com/eclipselabs/eclipseiot-testbed-productionperformancemanagement.git\n<span class="token function">cd</span> eclipseiot-testbed-productionperformancemanagement\n<span class="token function">cd</span> camel-integrator\nmvn package\n</code></pre>\n<p>After successful build, you should get a zip file at <code>target/camel-integrator-*-assembly.zip</code> with the following content</p>\n<ul>\n<li><code>bin</code><br>\nThe IntegratorStarter* files for Windows and Linux can be used to start the integrator manually. WinServiceInstaller.bat und WinServiceUninstaller.bat can be executed with Admin permissions in Windows to register/unregister this java application as Windows Service called &quot;Integrator Service&quot;.</li>\n<li><code>conf</code><br>\nThis is where the main configuration file <code>application-context.xml</code>, further included spring xml configurations, as well as the configuration for logging <code>log4j.properties</code> and a key-value-file for quick configuration <code>application.properties</code> can be found. After modification of any of them, the integrator should be restarted.</li>\n<li><code>lib</code><br>\nContains all java dependencies and their dependencies as individual jar files</li>\n<li><code>log</code><br>\nAfter the first start, you will find an additional directory that contains the logs of every execution, as defined in the <code>conf/log4j.properties</code> file.</li>\n</ul>\n<p>So this <code>camel-integrator-*-assembly.zip</code> is all you need, ready to being shipped and installed in your target system.</p>\n<h1>How can I modify this?</h1>\n<p>In the <code>conf</code> folder of the output or <code>src/main/resources</code> src folder, you\'ll find multiple examples on how to use Apache Camel with Production Performance Management Protocol. Most of the examples are based on <a href="https://github.com/apache/camel/blob/master/components/camel-spring/src/main/docs/spring.adoc">spring xml</a>.<br>\nThe most important terms to understand them are:</p>\n<table>\n<thead>\n<tr>\n<th>xml tag</th>\n<th>meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>bean</td>\n<td>additional functionality, coded as java class / function</td>\n</tr>\n<tr>\n<td>camelContext</td>\n<td>the main, camel specific configurations</td>\n</tr>\n<tr>\n<td>route</td>\n<td>describes the data flow as process</td>\n</tr>\n<tr>\n<td>from / to</td>\n<td>entry / exit points for the data flow. This is also, were external systems are accessed via <a href="https://github.com/apache/camel/tree/camel-2.21.0/components">components</a></td>\n</tr>\n<tr>\n<td>onException</td>\n<td>error handling for the data flow</td>\n</tr>\n<tr>\n<td>pipeline, multicast, ...</td>\n<td>routing of data via <a href="http://camel.apache.org/enterprise-integration-patterns.html">Enterprise Integration pattern</a></td>\n</tr>\n</tbody>\n</table>\n<p>Among others, you\'ll find:</p>\n<div class="card figure is-pulled-right">\n\t<div class="card-image">\n\t\t<figure class="image">\n\t\t\t<img alt="html log file" title="html log file" src="/unide/images/blog/Transform-PPMP-with-camel-2-logfile.png"></img>\n\t\t</figure>\n\t</div>\n\t<div class="card-content">\n\t\thtml logfile before transformation to PPMP\n\t</div>\n</div>\n<ul>\n<li><code>application-context.xml</code><br>\nMain entry file to start camel routes. It contains a general PPMP validation REST endpoint that reuses the route from <code>ppmp-validate-context.xml</code></li>\n<li><code>mqtt-context.xml</code><br>\nA simple example of converting transport protocol (mqtt to REST), without looking at the payload</li>\n<li><code>ppmp-splitAndRewrite-context.xml</code><br>\nShows how to receive (PPMP-) payload via different REST paths (/rest or /ppm), and each forwarding to two seperate endpoints (/rest and /ppm)\n<ul>\n<li><code>ppmpRewrite.xml</code> and <code>ppmRewrite.xml</code><br>\nmapping examples to rewrite the urls</li>\n</ul>\n</li>\n<li><code>ppmp-validate-context.xml</code><br>\nA simple validation route for PPMP messages that can be reused in many other routes.</li>\n<li><code>psi6000-transform-context.xml</code><br>\nA more advanced example of converting a psi6000 JSON format, converting it to plain old java object (POJO), transforming that to PPMP POJOs (using <a href="https://github.com/eclipse/unide.java">unide.java</a>) and forwarding these to actual REST endpoints</li>\n<li><code>kistler.xml</code><br>\nThis example takes html files with a structure similar to the test file in <a href="https://github.com/eclipselabs/eclipseiot-testbed-productionperformancemanagement/blob/master/camel-integrator/src/test/data/00000855.html"><code>src/test/data/00000855.html</code></a>, cleans the html structure, retrieves the relevant parts via <a href="https://en.wikipedia.org/wiki/XPath">XPath</a> and creates a PPMP process message out of that</li>\n<li><code>application.properties</code><br>\nContains key/value pairs that can be used in the camel context configurations.</li>\n<li><code>log4j.properties</code><br>\nThe configuration for logging. For testing purposes, the log4j.properties in /src/test/resources is used.</li>\n</ul>\n<p>In order to get familiar with these transformations, I suggest you:</p>\n<ul>\n<li>open the <code>application-context.xml</code> in your favorite editor</li>\n<li>remove the <code>&lt;import .../&gt;</code> statements</li>\n<li>add your own <code>&lt;route&gt;...&lt;/route&gt;</code>, maybe as simple as<pre class="language-xml"><code class="language-xml">  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>route</span><span class="token punctuation">></span></span>\n  \t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>from</span> <span class="token attr-name">uri</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>jetty:http://0.0.0.0:9090/<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>\n  \t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>setBody</span><span class="token punctuation">></span></span>\n  \t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>simple</span><span class="token punctuation">></span></span>hello world!<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>simple</span><span class="token punctuation">></span></span>\n  \t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>setBody</span><span class="token punctuation">></span></span>\n  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>route</span><span class="token punctuation">></span></span>\n</code></pre>\n</li>\n<li>start a run directly (with bundling to a zip file) with:<pre class="language-bash"><code class="language-bash">  mvn exec:java\n</code></pre>\n</li>\n<li>and review the result. With the example above, just open the url <a href="http://localhost:9090">http://localhost:9090</a> and see the <code>hello world!</code> in your browser</li>\n</ul>\n<p>If you prefer a visual model of these camel xml definitions, you could also make use of <a href="https://tools.jboss.org/features/fusetools.html">JBoss Fuse Tooling</a> which is available for <a href="https://projects.eclipse.org/releases/oxygen">Eclipse Workbench 4.3+</a> through <a href="https://marketplace.eclipse.org/content/jboss-tools">the Marketplace</a>. Be aware that this might cause additional overhead.</p>\n<div class="card figure">\n\t<div class="card-image">\n\t\t<figure class="image">\n\t\t\t<img alt="JBoss Tools" title="JBoss Tools for Eclipse Workbench" src="/unide/images/blog/Transform-PPMP-with-camel-2-eclipse.png"></img>\n\t\t</figure>\n\t</div>\n\t<div class="card-content">\n\t\tJBoss Tools for Eclipse Workbench\n\t</div>\n</div>\n<p>If you want to make use of any other of the (as of camel 2.21.0) <a href="https://github.com/apache/camel/tree/camel-2.21.0/components">281+ components</a>, you should add the respective maven dependency to the <code>pom.xml</code>. For example:</p>\n<pre class="language-xml"><code class="language-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>project</span> <span class="token attr-name">xmlns</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://maven.apache.org/POM/4.0.0<span class="token punctuation">"</span></span> <span class="token attr-name"><span class="token namespace">xmlns:</span>xsi</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.w3.org/2001/XMLSchema-instance<span class="token punctuation">"</span></span>\n\t<span class="token attr-name"><span class="token namespace">xsi:</span>schemaLocation</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>\n\t...\n\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependencies</span><span class="token punctuation">></span></span>\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">></span></span>org.apache.camel<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">></span></span>camel-amqp<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">></span></span>\n\t\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">></span></span>${camel.version}<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">></span></span>\n\t\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">></span></span>\n\t...\n\t<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependencies</span><span class="token punctuation">></span></span>\n\t...\n<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>project</span><span class="token punctuation">></span></span>\n</code></pre>\n<h1>Testing</h1>\n<p>Testing is an important part of the development cycle, especially for the core components that have to work reliably in a production environment.<br>\nThe project includes example tests in the <code>src/test</code> folder:</p>\n<ul>\n<li><code>java</code><br>\ncontains the actual java unit tests that make use of <a href="https://github.com/apache/camel/blob/61a58836da57bab38ce719cbd1effd36253687a4/docs/user-manual/en/spring-testing.adoc"><code>CamelSpringTestSupport</code></a> to wire xml CamelContext configuration, test data and expected results together</li>\n<li><code>resources</code><br>\ncontains the spring xml configuration that is used by the java test classes and resamble the actual configurations from <code>src/main/resources</code></li>\n<li><code>data</code><br>\ncontains testdata for the data flows and the transformation</li>\n</ul>\n<p>Tests can easily be run from within an IDE (eclipse, visual code studio etc.) or via commandline</p>\n<pre class="language-bash"><code class="language-bash">mvn <span class="token function">test</span>\n</code></pre>\n<p>You will see the output of the test runs. If it looks like this, it works as expected:</p>\n<pre class="language-bash"><code class="language-bash">Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.846 sec\n\nResults <span class="token keyword">:</span>\n\nTests run: 3, Failures: 0, Errors: 0, Skipped: 0\n\n<span class="token punctuation">[</span>INFO<span class="token punctuation">]</span> ------------------------------------------------------------------------\n<span class="token punctuation">[</span>INFO<span class="token punctuation">]</span> BUILD SUCCESS\n<span class="token punctuation">[</span>INFO<span class="token punctuation">]</span> ------------------------------------------------------------------------\n<span class="token punctuation">[</span>INFO<span class="token punctuation">]</span> Total time: 32.267 s\n<span class="token punctuation">[</span>INFO<span class="token punctuation">]</span> Finished at: 2018-04-09T15:25:25+02:00\n<span class="token punctuation">[</span>INFO<span class="token punctuation">]</span> Final Memory: 25M/85M\n<span class="token punctuation">[</span>INFO<span class="token punctuation">]</span> ------------------------------------------------------------------------\n</code></pre>\n<h1>Summary</h1>\n<p>The provided camel project template facilitates the creation of simple connectors. You can download it, modify or extend it, package the integrator to a zip file and deploy it on a target server. The included scripts help registering the integrator as an operating system service to run 24/7.</p>\n',url:"/blog/2018/9/4/Template-for-PPMP-transformation",title:"PPMP Use Cases: Template for PPMP transformation",date:"2018-09-04T00:00:00.000Z",tags:["use cases"],prev:{url:"/blog/2018/3/26/Release-0.2.0",title:"Unide 0.2.0 released"}}}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_article.dfd7fcb83848670d21b1.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2018/9/4/index.html b/blog/2018/9/4/index.html
index 720c3ca..d8a39a3 100644
--- a/blog/2018/9/4/index.html
+++ b/blog/2018/9/4/index.html
@@ -66,6 +66,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2018/9/4/Template-for-PPMP-transformation",title:"PPMP Use Cases: Template for PPMP transformation",date:"2018-09-04T00:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2018/9/4/Template-for-PPMP-transformation",title:"PPMP Use Cases: Template for PPMP transformation",date:"2018-09-04T00:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2018/9/index.html b/blog/2018/9/index.html
index 19b33ea..1561811 100644
--- a/blog/2018/9/index.html
+++ b/blog/2018/9/index.html
@@ -66,6 +66,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2018/9/4/Template-for-PPMP-transformation",title:"PPMP Use Cases: Template for PPMP transformation",date:"2018-09-04T00:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2018/9/4/Template-for-PPMP-transformation",title:"PPMP Use Cases: Template for PPMP transformation",date:"2018-09-04T00:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/2018/index.html b/blog/2018/index.html
index 8197f15..0fffdb7 100644
--- a/blog/2018/index.html
+++ b/blog/2018/index.html
@@ -82,6 +82,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2018/9/4/Template-for-PPMP-transformation",title:"PPMP Use Cases: Template for PPMP transformation",date:"2018-09-04T00:00:00.000Z"},{url:"/blog/2018/3/26/Release-0.2.0",title:"Unide 0.2.0 released",date:"2018-03-26T10:39:00.000Z"},{url:"/blog/2018/2/13/grinding-machine-scenario",title:"PPMP Use Cases: Unide and the Eclipse Production Performance Management Testbed",date:"2018-02-13T00:00:00.000Z"},{url:"/blog/2018/2/11/Transform-PPMP-with-camel",title:"PPMP Use Cases: Simple Transformation with Apache Camel",date:"2018-02-11T00:00:00.000Z"},{url:"/blog/2018/1/26/New-website",title:"Updated Website",date:"2018-01-26T00:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2018/9/4/Template-for-PPMP-transformation",title:"PPMP Use Cases: Template for PPMP transformation",date:"2018-09-04T00:00:00.000Z"},{url:"/blog/2018/3/26/Release-0.2.0",title:"Unide 0.2.0 released",date:"2018-03-26T10:39:00.000Z"},{url:"/blog/2018/2/13/grinding-machine-scenario",title:"PPMP Use Cases: Unide and the Eclipse Production Performance Management Testbed",date:"2018-02-13T00:00:00.000Z"},{url:"/blog/2018/2/11/Transform-PPMP-with-camel",title:"PPMP Use Cases: Simple Transformation with Apache Camel",date:"2018-02-11T00:00:00.000Z"},{url:"/blog/2018/1/26/New-website",title:"Updated Website",date:"2018-01-26T00:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/blog/index.html b/blog/index.html
index bfbd8f7..782e676 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -82,6 +82,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2018/9/4/Template-for-PPMP-transformation",title:"PPMP Use Cases: Template for PPMP transformation",date:"2018-09-04T00:00:00.000Z"},{url:"/blog/2018/3/26/Release-0.2.0",title:"Unide 0.2.0 released",date:"2018-03-26T10:39:00.000Z"},{url:"/blog/2018/2/13/grinding-machine-scenario",title:"PPMP Use Cases: Unide and the Eclipse Production Performance Management Testbed",date:"2018-02-13T00:00:00.000Z"},{url:"/blog/2018/2/11/Transform-PPMP-with-camel",title:"PPMP Use Cases: Simple Transformation with Apache Camel",date:"2018-02-11T00:00:00.000Z"},{url:"/blog/2018/1/26/New-website",title:"Updated Website",date:"2018-01-26T00:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{list:[{url:"/blog/2018/9/4/Template-for-PPMP-transformation",title:"PPMP Use Cases: Template for PPMP transformation",date:"2018-09-04T00:00:00.000Z"},{url:"/blog/2018/3/26/Release-0.2.0",title:"Unide 0.2.0 released",date:"2018-03-26T10:39:00.000Z"},{url:"/blog/2018/2/13/grinding-machine-scenario",title:"PPMP Use Cases: Unide and the Eclipse Production Performance Management Testbed",date:"2018-02-13T00:00:00.000Z"},{url:"/blog/2018/2/11/Transform-PPMP-with-camel",title:"PPMP Use Cases: Simple Transformation with Apache Camel",date:"2018-02-11T00:00:00.000Z"},{url:"/blog/2018/1/26/New-website",title:"Updated Website",date:"2018-01-26T00:00:00.000Z"}]}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_blog.e921111d8f479ba5a1cd.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/faq/index.html b/faq/index.html
index f3ea9b3..6815782 100644
--- a/faq/index.html
+++ b/faq/index.html
@@ -78,6 +78,6 @@
         October 2016
       </a>
       (4)
-    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.3261408475a969e5c5e9.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_faq.8150044514eb62ddb4c7.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
+    </ul></div></div></div></div><footer class="footer"><div class="container"><div class="columns is-mobile is-multiline is-centered"><div class="column is-narrow"><a href="http://www.eclipse.org">Eclipse Foundation</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></div><div class="column is-narrow"><a href="https://eclipse.org/security/">Security reports</a></div><div class="column is-narrow"><a href="http://www.eclipse.org/legal/">Legal</a></div></div></div></footer></div></div></div><script type="text/javascript">window.__NUXT__={layout:"sidebar",data:[{}],error:null,state:{},serverRendered:!0}</script><script defer src="/unide/files/manifest.743e36ec1ba98716cc6a.js"></script><script defer src="/unide/files/layouts_sidebar.d45435715b520199379d.js"></script><script defer src="/unide/files/pages_faq.8150044514eb62ddb4c7.js"></script><script defer src="/unide/files/vendor.3960437a749191406982.js"></script><script defer src="/unide/files/app.45b9891348f7e815e8b8.js"></script>
   
 
diff --git a/files/18.267388ad15cb1c8fe837.js b/files/18.267388ad15cb1c8fe837.js
deleted file mode 100644
index 14aaa5c..0000000
--- a/files/18.267388ad15cb1c8fe837.js
+++ /dev/null
@@ -1 +0,0 @@
-webpackJsonp([18],{uwRd:function(e,t){e.exports={type:"object",properties:{"content-spec":{type:"string",default:"urn:spec://eclipse.org/unide/process-message#v3",description:"Defines what the format version is"},device:{type:"object",description:"Contains information about the device",properties:{id:{type:"string",description:"The unique identification of the device. As this is used to identify a device independently from time or location the id itself must be stable and unique. Recommended is to use a universally unique identifier (UUID).",maxLength:36},mode:{type:"string",description:"The operational mode indicates the functional state of the device. This is not restricted to enum, since it is dependent on the machine, process or use case. Examples are 'auto', 'manual', 'test', 'wait', 'maintenance', 'run', 'stop', 'other' or 'unknown'"},state:{type:"string",enum:["OK","INFO","WARN","ERROR","UNKNOWN"],default:"UNKNOWN",description:"The state describes the technical condition of a device."}},required:["id"]},part:{type:"object",properties:{code:{type:"string",description:"The code is an addendum to the result, which allows to pass information in the case the result was NOK. The value often stems from the integrated system e.g. a PLC code",maxLength:128},id:{type:"string",description:"Identifies a part. This id comes from a third party system and thus we have no guarantees if this is unique or not.",maxLength:256},type:{type:"string",enum:["SINGLE","BATCH"],description:"Describes the type of the part. Type SINGLE means a single item is processed. Type BATCH means multiple items of the same type are processed.",default:"SINGLE"},typeId:{type:"string",description:"Identifies a part type",maxLength:256},result:{type:"string",enum:["OK","NOK","UNKNOWN"],description:"Information if the result was ok or not. This is only required if part information should be saved.",default:"UNKNOWN"}},required:["id"]},process:{type:"object",description:"Contains information about the process. If the process JSON object is set, then all information in measurements are process phases",properties:{externalId:{type:"string",description:"The process id identifies the process as part of long living process. The process id can be used to connect multiple processes in a manufacturing chain. The id has to be set and tracked by the different devices in the chain.",maxLength:36},program:{type:"object",description:"Contains information about the program that was used in the process.",properties:{id:{type:"string",description:"The program identifier",maxLength:36},lastChangedDate:{type:"string",format:"date-time",description:"The date when the program was last changed"},name:{type:"string",description:"The name of the program",maxLength:256}},required:["id"]},result:{type:"string",enum:["OK","NOK","UNKNOWN"],description:"Information if the result was ok or not. This is only required if part information should be saved.",default:"UNKNOWN"},shutoffPhase:{type:"string",description:"The id of the phase that led to stop the process. The shutOffPhase is the phase of the process in which either pre-defined parameters are met to successfully finish the process or an error that stopped the process. That is not necessarily the last phase. The shutOffPhase should be sent when the last process phase is sent."},ts:{type:"string",format:"date-time",description:"Start time of the process"}},required:["ts"]},measurements:{allOf:[{type:"array",minItems:1,items:{type:"object",properties:{code:{type:"string",description:"The code is an addendum to the result, which allows to pass information in the case the result was NOK. The value often stems from the integrated system e.g. a PLC code",maxLength:128},context:{type:"object",description:"Provides additional information about the data provided in the series element. An entry in the context applies to the element in the series with the same key.",patternProperties:{"^[^$]+":{type:"object",description:"The key shall be the name of a measurement point (element of series element). The value is a structure of additional context information like accuracy, offset etc. This information can be further described in the URI given in the namespace field",properties:{limits:{description:"Provides information about the limit for data provided in the series element. The limit corresponds to the measurement point (see also series element) with the same key. The value is a structure of upper/lower limits and applies to numeric values only.",type:"object",oneOf:[{type:"object",description:"A constant limit for all corresponding measurements",properties:{lowerError:{description:"Indicates an error if this limit is underrun",type:"number"},lowerWarn:{description:"Indicates a warning if this limit is underrun",type:"number"},target:{description:"Indicates the intended target value of the measurement",type:"number"},upperError:{description:"Indicates an error if this limit is exceeded",type:"number"},upperWarn:{description:"Indicates a warning if this limit is exceeded",type:"number"}}},{type:"object",description:"An array of limit values. The items of the array correspond to the respective measurements at the same position.",properties:{lowerError:{description:"Indicates an error if these limits is underrun. The values correspond to the respective measurements in the given order.",type:"array",items:{type:"number"}},lowerWarn:{description:"Indicates a warning if these limits is underrun. The values correspond to the respective measurements in the given order.",type:"array",items:{type:"number"}},target:{description:"Indicates the intended target values. The values correspond to the respective measurements in the given order.",type:"array",items:{type:"number"}},upperError:{description:"Indicates an error if these limits is exceeded. The values correspond to the respective measurements in the given order.",type:"array",items:{type:"number"}},upperWarn:{description:"Indicates a warning if these limits is exceeded. The values correspond to the respective measurements in the given order.",type:"array",items:{type:"number"}}}}]},namespace:{type:"string",description:"If an URI is specified, it gives further detail about the parameter in this context object"},type:{type:"string",description:"The data type of the corresponding measurement value. They correspond to the primitive JSON types boolean, number, integer and string. BASE64 is a string with base64 encoded binary data. Array and Object should not be used in order to limit complexity.",enum:["BASE64","BOOLEAN","INTEGER","NUMBER","STRING"],default:"NUMBER"},unit:{type:"string",description:"Describes the unit of the corresponding measurement. It is recommended to use SI (International System of Units) symbols or describe the string further in a given namespace"}},minProperties:1}},required:[]},result:{type:"string",enum:["OK","NOK","UNKNOWN"],description:"Information if the result was ok or not. This is only required if part information should be saved.",default:"UNKNOWN"},series:{type:"object",description:"The series data collected for the measurements. Every entry matches a Measurement Point of the Device Type. In the case of a time series, one column contains the time offsets.",properties:{time:{type:"array",description:"The time offset in milliseconds (positive values in ascending order starting with 0) to the 'ts' field of the measurement",items:{type:"integer"}}},patternProperties:{"^[^$]+":{type:"array",items:{type:["boolean","number","string"],description:"The type of this measurement series is dependent on the context.type. It defaults to number"}}},required:["time"],minProperties:2},ts:{format:"date-time",type:"string",description:"Start time of the the data measurment in  ISO 8601 format"}},required:["ts","series"]}},{type:"array",items:{type:"object",properties:{name:{type:"string",description:"The name of the process phase",maxLength:256},phase:{type:"string",description:"The id of the process phase",maxLength:256},specialValues:{type:"array",items:{type:"object",description:"Provides information about special or interesting values during the process phase.",properties:{time:{type:"integer",description:"The time offset in milliseconds to the 'ts' field of the measurement"},name:{type:"string",description:"Indicates the type of the specialValue (e.g. 'shutoff', endanzug', 'turningPoint' etc.)"},value:{type:"object",description:"Contains the actual (multidimensional) value of interest. Similarly to series, every entry matches a Measurement Point of the device",patternProperties:{"^[^$]+":{type:"number"}},minProperties:1}},required:["value"]}}}}}]}},required:["content-spec","device","process","measurements"]}}});
\ No newline at end of file
diff --git a/files/18.84de25a06aba2d62011f.js b/files/18.84de25a06aba2d62011f.js
new file mode 100644
index 0000000..7c86044
--- /dev/null
+++ b/files/18.84de25a06aba2d62011f.js
@@ -0,0 +1 @@
+webpackJsonp([18],{uwRd:function(e,t){e.exports={type:"object",properties:{"content-spec":{type:"string",default:"urn:spec://eclipse.org/unide/process-message#v3",description:"Defines what the format version is"},device:{type:"object",description:"Contains information about the device",properties:{id:{type:"string",description:"The unique identification of the device. As this is used to identify a device independently from time or location the id itself must be stable and unique. Recommended is to use a universally unique identifier (UUID).",maxLength:36},mode:{type:"string",description:"The operational mode indicates the functional state of the device. This is not restrictected to enum, since it is dependent on the machine, process or use case. Examples are 'auto', 'manual', 'test', 'wait', 'maintenance', 'run', 'stop', 'other' or 'unknown'"},state:{type:"string",enum:["OK","INFO","WARN","ERROR","UNKNOWN"],default:"UNKNOWN",description:"The state describes the technical condition of a device."}},required:["id"]},part:{type:"object",properties:{code:{type:"string",description:"The code is an addendum to the result which allows to pass information in the case the result was NOK. The value often stems from the integrated system e.g. a PLC code",maxLength:128},id:{type:"string",description:"Identifies a part. This id comes from a 3rd party system and thus we have no guarantees if this is unique or not.",maxLength:256},type:{type:"string",enum:["SINGLE","BATCH"],description:"Describes the type of the part. Type SINGLE means a single item is processed. Type BATCH means multiple items of the same type are processed.",default:"SINGLE"},typeId:{type:"string",description:"Identifies a part type",maxLength:256},result:{type:"string",enum:["OK","NOK","UNKNOWN"],description:"Information if the result was ok or not. This is only required if part information should be saved.",default:"UNKNOWN"}},required:["id"]},process:{type:"object",description:"Contains information about the process. If the process JSON object is set, then all information in measurements are process phases",properties:{externalId:{type:"string",description:"The process id identifies the process as part of long living process. The process id can be used to connect multiple processes in a manufacturing chain. The id has to be set and tracked by the different devices in the chain.",maxLength:36},program:{type:"object",description:"Contains information about the program that was used in the process.",properties:{id:{type:"string",description:"The program identifier",maxLength:36},lastChangedDate:{type:"string",format:"date-time",description:"The date when the program was last changed"},name:{type:"string",description:"The name of the program",maxLength:256}},required:["id"]},result:{type:"string",enum:["OK","NOK","UNKNOWN"],description:"Information if the result was ok or not. This is only required if part information should be saved.",default:"UNKNOWN"},shutoffPhase:{type:"string",description:"The id of the phase that led to stop the process. The shutOffPhase is the phase of the process in which either pre-defined parameters are met to successfully finish the process or an error that stopped the process. That is not necessarily the last phase. The shutOffPhase should be sent when the last process phase is sent."},ts:{type:"string",format:"date-time",description:"Start time of the process"}},required:["ts"]},measurements:{allOf:[{type:"array",minItems:1,items:{type:"object",properties:{code:{type:"string",description:"The code is an addendum to the result which allows to pass information in the case the result was NOK. The value often stems from the integrated system e.g. a PLC code",maxLength:128},context:{type:"object",description:"Provides additional information about the data provided in the series element. An entry in the context applies to the element in the series with the same key.",patternProperties:{"^[^$]+":{type:"object",description:"The key shall be the name of a measurement point (element of series element). The value is a structure of additional context information.",properties:{accuracy:{oneOf:[{type:"number",description:"A constant that describes the accuracy of the corresponding measurement as absolute value"},{type:"array",description:"An array of accuracy values. The items of the array correspond to the respective measurements at the same position.",items:{type:"number"}}]},limits:{description:"Provides information about the limit for data provided in the series element. The limit corresponds to the measurement point (see also series element) with the same key. The value is a structure of upper/lower limits and applies to numeric values only.",type:"object",oneOf:[{type:"object",description:"A constant limit for all corresponding measurements",properties:{lowerError:{description:"Indicates an error if this limit is underrun",type:"number"},lowerWarn:{description:"Indicates a warning if this limit is underrun",type:"number"},target:{description:"Indicates the intented target value of the measurement",type:"number"},upperError:{description:"Indicates an error if this limit is exceeded",type:"number"},upperWarn:{description:"Indicates a warning if this limit is exceeded",type:"number"}}},{type:"object",description:"An array of limit values. The items of the array correspond to the respective measurements at the same position.",properties:{lowerError:{description:"Indicates an error if these limits is underrun. The values correspond to the respective measurements in the given order.",type:"array",items:{type:"number"}},lowerWarn:{description:"Indicates a warning if these limits is underrun. The values correspond to the respective measurements in the given order.",type:"array",items:{type:"number"}},target:{description:"Indicates the intented target values. The values correspond to the respective measurements in the given order.",type:"array",items:{type:"number"}},upperError:{description:"Indicates an error if these limits is exceeded. The values correspond to the respective measurements in the given order.",type:"array",items:{type:"number"}},upperWarn:{description:"Indicates a warning if these limits is exceeded. The values correspond to the respective measurements in the given order.",type:"array",items:{type:"number"}}}}]},offset:{description:"The offset applies to numeric data type only.",oneOf:[{type:"number",description:"Describes the offset of the corresponding measurement as absolute value"},{type:"array",description:"An array of offset values. The items of the array correspond to the respective measurements at the same position.",items:{type:"number"}}]},type:{type:"string",description:"The data type of the corresponding measurement value.",enum:["BASE64","BOOLEAN","NUMBER","OTHER","REF","STRING"],default:"NUMBER"},unit:{type:"string",description:"Describes the unit of the corresponding measurement. It is recommended to use symbols as defined in https://tools.ietf.org/html/draft-ietf-core-senml-14#section-12.1"}},minProperties:1}},required:[]},result:{type:"string",enum:["OK","NOK","UNKNOWN"],description:"Information if the result was ok or not. This is only required if part information should be saved.",default:"UNKNOWN"},series:{type:"object",description:"The series data collected for the measurements. In the case of a time series, the measurement point 'time' should contain the time offsets.",properties:{time:{type:"array",description:"The time offset in milliseconds to the 'ts' field of the measurement.",items:{type:"number"}}},patternProperties:{"^[^$]+":{type:"array",items:{type:["boolean","number","string"],description:"The type of this measurement series is dependendant on the context.type. It defaults to number"}}},required:[],minProperties:1},ts:{format:"date-time",type:"string",description:"Start time of the the data measurment in  ISO 8601 format"}},required:["ts","series"]}},{type:"array",items:{type:"object",properties:{name:{type:"string",description:"The name of the process phase",maxLength:256},phase:{type:"string",description:"The id of the process phase",maxLength:256},specialValues:{type:"array",items:{type:"object",description:"Provides information about special or interesting values during the process phase.",properties:{time:{type:"number",description:"The time offset in milliseconds to the 'ts' field of the measurement"},name:{type:"string",description:"Indicates the type of the specialValue (e.g. 'shutoff', endanzug', 'turningPoint' etc.)"},value:{type:"object",description:"Contains the actual (multidimensional) value of interest. Similarly to series, every entry matches a Measurement Point of the device",patternProperties:{"^[^$]+":{type:["boolean","number","string"],description:"The type of this measurement series is dependendant on the context.type. It defaults to number"}},minProperties:1}},required:["value"]}}}}}]}},required:["content-spec","device","process","measurements"]}}});
\ No newline at end of file
diff --git a/files/19.19d62025503672303cb1.js b/files/19.19d62025503672303cb1.js
new file mode 100644
index 0000000..79555cc
--- /dev/null
+++ b/files/19.19d62025503672303cb1.js
@@ -0,0 +1 @@
+webpackJsonp([19],{"1SJ2":function(e,t){e.exports={type:"object",properties:{"content-spec":{type:"string",default:"urn:spec://eclipse.org/unide/machine-message#v3",description:"Defines what the format version is"},device:{type:"object",description:"Contains information about the device",properties:{id:{type:"string",description:"The unique identification of the device. As this is used to identify a device independently from time or location the id itself must be stable and unique. Recommended is to use a universally unique identifier (UUID).",maxLength:36},mode:{type:"string",description:"The operational mode indicates the functional state of the device. This is not restrictected to enum, since it is dependent on the machine, process or use case. Examples are 'auto', 'manual', 'test', 'wait', 'maintenance', 'run', 'stop', 'other' or 'unknown'"},state:{type:"string",enum:["OK","INFO","WARN","ERROR","UNKNOWN"],default:"UNKNOWN",description:"The state describes the technical condition of a device."}},required:["id"]},messages:{minItems:1,type:"array",items:{type:"object",description:"Collection of messages",properties:{code:{type:"string",description:"The code is an addendum to the result which allows to pass information in the case the result was NOK. The value often stems from the integrated system e.g. a PLC code",maxLength:128},description:{type:"string",description:"The description is used to describe the purpose of the message, e.g. the problem",maxLength:2e3},hint:{type:"string",description:"In case a problem is reported, the hint can be used to point out a possible solution",maxLength:2e3},origin:{type:"string",description:"The origin of the message if not the device identified by deviceID in the header element. Could be used to identify a subsystem or a particular sensor/part of the device where the message actually relates to."},severity:{type:"string",description:"Severity of the message",enum:["HIGH","MEDIUM","LOW","UNKNOWN"],default:"UNKNOWN"},title:{type:"string",description:"Title of the message. If title not set the code will be stored as fallback",maxLength:1e3},ts:{format:"date-time",type:"string",description:"Start time of the the data measurment in  ISO 8601 format"},type:{type:"string",description:"The type of message. Default is DEVICE but can be set to TECHNICAL_INFO indicating a problem with the integration of the actual device. Allowed values: DEVICE, TECHNICAL_INFO",enum:["DEVICE","TECHNICAL_INFO"],default:"DEVICE"}},required:["ts","code"]}}},required:["content-spec","device","messages"]}}});
\ No newline at end of file
diff --git a/files/19.348581f6cfe5796d9050.js b/files/19.348581f6cfe5796d9050.js
deleted file mode 100644
index fd12524..0000000
--- a/files/19.348581f6cfe5796d9050.js
+++ /dev/null
@@ -1 +0,0 @@
-webpackJsonp([19],{"1SJ2":function(e,t){e.exports={type:"object",properties:{"content-spec":{type:"string",default:"urn:spec://eclipse.org/unide/machine-message#v3",description:"Defines what the format version is"},device:{type:"object",description:"Contains information about the device",properties:{id:{type:"string",description:"The unique identification of the device. As this is used to identify a device independently from time or location the id itself must be stable and unique. Recommended is to use a universally unique identifier (UUID).",maxLength:36},mode:{type:"string",description:"The operational mode indicates the functional state of the device. This is not restricted to enum, since it is dependent on the machine, process or use case. Examples are 'auto', 'manual', 'test', 'wait', 'maintenance', 'run', 'stop', 'other' or 'unknown'"},state:{type:"string",enum:["OK","INFO","WARN","ERROR","UNKNOWN"],default:"UNKNOWN",description:"The state describes the technical condition of a device."}},required:["id"]},messages:{minItems:1,type:"array",items:{type:"object",description:"Collection of messages",properties:{code:{type:"string",description:"The code is an addendum to the result, which allows to pass information in the case the result was NOK. The value often stems from the integrated system e.g. a PLC code",maxLength:128},description:{type:"string",description:"The description is used to describe the purpose of the message, e.g. the problem",maxLength:2e3},hint:{type:"string",description:"In case a problem is reported, the hint can be used to point out a possible solution",maxLength:2e3},origin:{type:"string",description:"The origin of the message if not the device identified by deviceID in the header element. Could be used to identify a subsystem or a particular sensor/part of the device where the message actually relates to."},severity:{type:"string",description:"Severity of the message",enum:["HIGH","MEDIUM","LOW","UNKNOWN"],default:"UNKNOWN"},title:{type:"string",description:"Title of the message. If title not set the code will be stored as fallback",maxLength:1e3},ts:{format:"date-time",type:"string",description:"Start time of the the data measurment in  ISO 8601 format"},type:{type:"string",description:"The type of message. Default is DEVICE but can be set to TECHNICAL_INFO indicating a problem with the integration of the actual device. Allowed values: DEVICE, TECHNICAL_INFO",enum:["DEVICE","TECHNICAL_INFO"],default:"DEVICE"}},required:["ts","code"]}}},required:["content-spec","device","messages"]}}});
\ No newline at end of file
diff --git a/files/20.3e0ba9289b2d0f8c9a98.js b/files/20.3e0ba9289b2d0f8c9a98.js
deleted file mode 100644
index 4fda07f..0000000
--- a/files/20.3e0ba9289b2d0f8c9a98.js
+++ /dev/null
@@ -1 +0,0 @@
-webpackJsonp([20],{PpY5:function(e,t){e.exports={type:"object",properties:{"content-spec":{type:"string",default:"urn:spec://eclipse.org/unide/machine-message#v3",description:"Defines what the format version is"},device:{type:"object",description:"Contains information about the device",properties:{id:{type:"string",description:"The unique identification of the device. As this is used to identify a device independently from time or location the id itself must be stable and unique. Recommended is to use a universally unique identifier (UUID).",maxLength:36},mode:{type:"string",description:"The operational mode indicates the functional state of the device. This is not restricted to enum, since it is dependent on the machine, process or use case. Examples are 'auto', 'manual', 'test', 'wait', 'maintenance', 'run', 'stop', 'other' or 'unknown'"},state:{type:"string",enum:["OK","INFO","WARN","ERROR","UNKNOWN"],default:"UNKNOWN",description:"The state describes the technical condition of a device."}},required:["id"]},part:{type:"object",properties:{code:{type:"string",description:"The code is an addendum to the result, which allows to pass information in the case the result was NOK. The value often stems from the integrated system e.g. a PLC code",maxLength:128},id:{type:"string",description:"Identifies a part. This id comes from a third party system and thus we have no guarantees if this is unique or not.",maxLength:256},type:{type:"string",enum:["SINGLE","BATCH"],description:"Describes the type of the part. Type SINGLE means a single item is processed. Type BATCH means multiple items of the same type are processed.",default:"SINGLE"},typeId:{type:"string",description:"Identifies a part type",maxLength:256},result:{type:"string",enum:["OK","NOK","UNKNOWN"],description:"Information if the result was ok or not. This is only required if part information should be saved.",default:"UNKNOWN"}},required:["id"]},measurements:{type:"array",minItems:1,items:{type:"object",properties:{code:{type:"string",description:"The code is an addendum to the result, which allows to pass information in the case the result was NOK. The value often stems from the integrated system e.g. a PLC code",maxLength:128},context:{type:"object",description:"Provides additional information about the data provided in the series element. An entry in the context applies to the element in the series with the same key.",patternProperties:{"^[^$]+":{type:"object",description:"The key shall be the name of a measurement point (element of series element). The value is a structure of additional context information like accuracy, offset etc. This information can be further described in the URI given in the namespace field",properties:{limits:{description:"Provides information about the limit for data provided in the series element. The limit corresponds to the measurement point (see also series element) with the same key. The value is a structure of upper/lower limits and applies to numeric values only.",type:"object",oneOf:[{type:"object",description:"A constant limit for all corresponding measurements",properties:{lowerError:{description:"Indicates an error if this limit is underrun",type:"number"},lowerWarn:{description:"Indicates a warning if this limit is underrun",type:"number"},target:{description:"Indicates the intended target value of the measurement",type:"number"},upperError:{description:"Indicates an error if this limit is exceeded",type:"number"},upperWarn:{description:"Indicates a warning if this limit is exceeded",type:"number"}}},{type:"object",description:"An array of limit values. The items of the array correspond to the respective measurements at the same position.",properties:{lowerError:{description:"Indicates an error if these limits is underrun. The values correspond to the respective measurements in the given order.",type:"array",items:{type:"number"}},lowerWarn:{description:"Indicates a warning if these limits is underrun. The values correspond to the respective measurements in the given order.",type:"array",items:{type:"number"}},target:{description:"Indicates the intended target values. The values correspond to the respective measurements in the given order.",type:"array",items:{type:"number"}},upperError:{description:"Indicates an error if these limits is exceeded. The values correspond to the respective measurements in the given order.",type:"array",items:{type:"number"}},upperWarn:{description:"Indicates a warning if these limits is exceeded. The values correspond to the respective measurements in the given order.",type:"array",items:{type:"number"}}}}]},namespace:{type:"string",description:"If an URI is specified, it gives further detail about the parameter in this context object"},type:{type:"string",description:"The data type of the corresponding measurement value. They correspond to the primitive JSON types boolean, number, integer and string. BASE64 is a string with base64 encoded binary data. Array and Object should not be used in order to limit complexity.",enum:["BASE64","BOOLEAN","INTEGER","NUMBER","STRING"],default:"NUMBER"},unit:{type:"string",description:"Describes the unit of the corresponding measurement. It is recommended to use SI (International System of Units) symbols or describe the string further in a given namespace"}},minProperties:1}},required:[]},result:{type:"string",enum:["OK","NOK","UNKNOWN"],description:"Information if the result was ok or not. This is only required if part information should be saved.",default:"UNKNOWN"},series:{type:"object",description:"The series data collected for the measurements. Every entry matches a Measurement Point of the Device Type. In the case of a time series, one column contains the time offsets.",properties:{time:{type:"array",description:"The time offset in milliseconds (positive values in ascending order starting with 0) to the 'ts' field of the measurement",items:{type:"integer"}}},patternProperties:{"^[^$]+":{type:"array",items:{type:["boolean","number","string"],description:"The type of this measurement series is dependent on the context.type. It defaults to number"}}},required:["time"],minProperties:2},ts:{format:"date-time",type:"string",description:"Start time of the the data measurment in  ISO 8601 format"}},required:["ts","series"]}}},required:["content-spec","device","measurements"]}}});
\ No newline at end of file
diff --git a/files/20.bfd746009c61229a100b.js b/files/20.bfd746009c61229a100b.js
new file mode 100644
index 0000000..7677c30
--- /dev/null
+++ b/files/20.bfd746009c61229a100b.js
@@ -0,0 +1 @@
+webpackJsonp([20],{PpY5:function(e,t){e.exports={type:"object",properties:{"content-spec":{type:"string",default:"urn:spec://eclipse.org/unide/machine-message#v3",description:"Defines what the format version is"},device:{type:"object",description:"Contains information about the device",properties:{id:{type:"string",description:"The unique identification of the device. As this is used to identify a device independently from time or location the id itself must be stable and unique. Recommended is to use a universally unique identifier (UUID).",maxLength:36},mode:{type:"string",description:"The operational mode indicates the functional state of the device. This is not restrictected to enum, since it is dependent on the machine, process or use case. Examples are 'auto', 'manual', 'test', 'wait', 'maintenance', 'run', 'stop', 'other' or 'unknown'"},state:{type:"string",enum:["OK","INFO","WARN","ERROR","UNKNOWN"],default:"UNKNOWN",description:"The state describes the technical condition of a device."}},required:["id"]},part:{type:"object",properties:{code:{type:"string",description:"The code is an addendum to the result which allows to pass information in the case the result was NOK. The value often stems from the integrated system e.g. a PLC code",maxLength:128},id:{type:"string",description:"Identifies a part. This id comes from a 3rd party system and thus we have no guarantees if this is unique or not.",maxLength:256},type:{type:"string",enum:["SINGLE","BATCH"],description:"Describes the type of the part. Type SINGLE means a single item is processed. Type BATCH means multiple items of the same type are processed.",default:"SINGLE"},typeId:{type:"string",description:"Identifies a part type",maxLength:256},result:{type:"string",enum:["OK","NOK","UNKNOWN"],description:"Information if the result was ok or not. This is only required if part information should be saved.",default:"UNKNOWN"}},required:["id"]},measurements:{allOf:[{type:"array",minItems:1,items:{type:"object",properties:{code:{type:"string",description:"The code is an addendum to the result which allows to pass information in the case the result was NOK. The value often stems from the integrated system e.g. a PLC code",maxLength:128},context:{type:"object",description:"Provides additional information about the data provided in the series element. An entry in the context applies to the element in the series with the same key.",patternProperties:{"^[^$]+":{type:"object",description:"The key shall be the name of a measurement point (element of series element). The value is a structure of additional context information.",properties:{accuracy:{oneOf:[{type:"number",description:"A constant that describes the accuracy of the corresponding measurement as absolute value"},{type:"array",description:"An array of accuracy values. The items of the array correspond to the respective measurements at the same position.",items:{type:"number"}}]},limits:{description:"Provides information about the limit for data provided in the series element. The limit corresponds to the measurement point (see also series element) with the same key. The value is a structure of upper/lower limits and applies to numeric values only.",type:"object",oneOf:[{type:"object",description:"A constant limit for all corresponding measurements",properties:{lowerError:{description:"Indicates an error if this limit is underrun",type:"number"},lowerWarn:{description:"Indicates a warning if this limit is underrun",type:"number"},target:{description:"Indicates the intented target value of the measurement",type:"number"},upperError:{description:"Indicates an error if this limit is exceeded",type:"number"},upperWarn:{description:"Indicates a warning if this limit is exceeded",type:"number"}}},{type:"object",description:"An array of limit values. The items of the array correspond to the respective measurements at the same position.",properties:{lowerError:{description:"Indicates an error if these limits is underrun. The values correspond to the respective measurements in the given order.",type:"array",items:{type:"number"}},lowerWarn:{description:"Indicates a warning if these limits is underrun. The values correspond to the respective measurements in the given order.",type:"array",items:{type:"number"}},target:{description:"Indicates the intented target values. The values correspond to the respective measurements in the given order.",type:"array",items:{type:"number"}},upperError:{description:"Indicates an error if these limits is exceeded. The values correspond to the respective measurements in the given order.",type:"array",items:{type:"number"}},upperWarn:{description:"Indicates a warning if these limits is exceeded. The values correspond to the respective measurements in the given order.",type:"array",items:{type:"number"}}}}]},offset:{description:"The offset applies to numeric data type only.",oneOf:[{type:"number",description:"Describes the offset of the corresponding measurement as absolute value"},{type:"array",description:"An array of offset values. The items of the array correspond to the respective measurements at the same position.",items:{type:"number"}}]},type:{type:"string",description:"The data type of the corresponding measurement value.",enum:["BASE64","BOOLEAN","NUMBER","OTHER","REF","STRING"],default:"NUMBER"},unit:{type:"string",description:"Describes the unit of the corresponding measurement. It is recommended to use symbols as defined in https://tools.ietf.org/html/draft-ietf-core-senml-14#section-12.1"}},minProperties:1}},required:[]},result:{type:"string",enum:["OK","NOK","UNKNOWN"],description:"Information if the result was ok or not. This is only required if part information should be saved.",default:"UNKNOWN"},series:{type:"object",description:"The series data collected for the measurements. In the case of a time series, the measurement point 'time' should contain the time offsets.",properties:{time:{type:"array",description:"The time offset in milliseconds to the 'ts' field of the measurement.",items:{type:"number"}}},patternProperties:{"^[^$]+":{type:"array",items:{type:["boolean","number","string"],description:"The type of this measurement series is dependendant on the context.type. It defaults to number"}}},required:[],minProperties:1},ts:{format:"date-time",type:"string",description:"Start time of the the data measurment in  ISO 8601 format"}},required:["ts","series"]}},{items:{properties:{series:{required:["time"]}}}}]}},required:["content-spec","device","measurements"]}}});
\ No newline at end of file
diff --git a/files/manifest.3261408475a969e5c5e9.js b/files/manifest.743e36ec1ba98716cc6a.js
similarity index 81%
rename from files/manifest.3261408475a969e5c5e9.js
rename to files/manifest.743e36ec1ba98716cc6a.js
index 841aa7a..0f36769 100644
--- a/files/manifest.3261408475a969e5c5e9.js
+++ b/files/manifest.743e36ec1ba98716cc6a.js
@@ -1 +1 @@
-!function(e){var a=window.webpackJsonp;window.webpackJsonp=function(n,r,o){for(var s,f,i,d=0,p=[];d<n.length;d++)f=n[d],c[f]&&p.push(c[f][0]),c[f]=0;for(s in r)Object.prototype.hasOwnProperty.call(r,s)&&(e[s]=r[s]);for(a&&a(n,r,o);p.length;)p.shift()();if(o)for(d=0;d<o.length;d++)i=t(t.s=o[d]);return i};var n={},c={24:0};function t(a){if(n[a])return n[a].exports;var c=n[a]={i:a,l:!1,exports:{}};return e[a].call(c.exports,c,c.exports,t),c.l=!0,c.exports}t.e=function(e){var a=c[e];if(0===a)return new Promise(function(e){e()});if(a)return a[2];var n=new Promise(function(n,t){a=c[e]=[n,t]});a[2]=n;var r=document.getElementsByTagName("head")[0],o=document.createElement("script");o.type="text/javascript",o.charset="utf-8",o.async=!0,o.timeout=12e4,t.nc&&o.setAttribute("nonce",t.nc),o.src=t.p+""+({0:"pages_specification_v3_process-message",1:"pages_specification_v3_measurement-message",2:"pages_specification_v3_machine-message",3:"pages_specification_v2_process-message",4:"pages_specification_v2_measurement-message",5:"pages_specification_v2_machine-message",6:"pages_blog",7:"pages_article",8:"layouts_sidebar",9:"layouts_default",10:"pages_faq",11:"pages_specification",12:"pages_index",13:"pages_proposal",14:"pages_specification_index",15:"vendor",16:"app"}[e]||e)+"."+{0:"9a79c59e8bcf5e01ba14",1:"4434bf8df3d72126d3b3",2:"b862ba0cbff6db318d5c",3:"a9d81425fd5d650e08b2",4:"98c76d689faf4e24e515",5:"216cf2e8b13133ec1b51",6:"e921111d8f479ba5a1cd",7:"dfd7fcb83848670d21b1",8:"d45435715b520199379d",9:"abbae1ad205e6f253d03",10:"8150044514eb62ddb4c7",11:"f1734fa9096da7169e8b",12:"922f1427ed81a1db7207",13:"60a77f13238c99a592be",14:"815252d9cf4fccce90f1",15:"3960437a749191406982",16:"45b9891348f7e815e8b8",17:"68457182c4872d1a7c24",18:"267388ad15cb1c8fe837",19:"348581f6cfe5796d9050",20:"3e0ba9289b2d0f8c9a98",21:"5ad91d8ce1e7f50b5a3e",22:"c7846a3fc32fa8186fb2",23:"81931b2fd6422070ec04"}[e]+".js";var s=setTimeout(f,12e4);function f(){o.onerror=o.onload=null,clearTimeout(s);var a=c[e];0!==a&&(a&&a[1](new Error("Loading chunk "+e+" failed.")),c[e]=void 0)}return o.onerror=o.onload=f,r.appendChild(o),n},t.m=e,t.c=n,t.d=function(e,a,n){t.o(e,a)||Object.defineProperty(e,a,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var a=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(a,"a",a),a},t.o=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)},t.p="/unide/files/",t.oe=function(e){throw console.error(e),e}}([]);
\ No newline at end of file
+!function(e){var a=window.webpackJsonp;window.webpackJsonp=function(n,r,o){for(var s,i,f,d=0,p=[];d<n.length;d++)i=n[d],c[i]&&p.push(c[i][0]),c[i]=0;for(s in r)Object.prototype.hasOwnProperty.call(r,s)&&(e[s]=r[s]);for(a&&a(n,r,o);p.length;)p.shift()();if(o)for(d=0;d<o.length;d++)f=t(t.s=o[d]);return f};var n={},c={24:0};function t(a){if(n[a])return n[a].exports;var c=n[a]={i:a,l:!1,exports:{}};return e[a].call(c.exports,c,c.exports,t),c.l=!0,c.exports}t.e=function(e){var a=c[e];if(0===a)return new Promise(function(e){e()});if(a)return a[2];var n=new Promise(function(n,t){a=c[e]=[n,t]});a[2]=n;var r=document.getElementsByTagName("head")[0],o=document.createElement("script");o.type="text/javascript",o.charset="utf-8",o.async=!0,o.timeout=12e4,t.nc&&o.setAttribute("nonce",t.nc),o.src=t.p+""+({0:"pages_specification_v3_process-message",1:"pages_specification_v3_measurement-message",2:"pages_specification_v3_machine-message",3:"pages_specification_v2_process-message",4:"pages_specification_v2_measurement-message",5:"pages_specification_v2_machine-message",6:"pages_blog",7:"pages_article",8:"layouts_sidebar",9:"layouts_default",10:"pages_faq",11:"pages_specification",12:"pages_index",13:"pages_proposal",14:"pages_specification_index",15:"vendor",16:"app"}[e]||e)+"."+{0:"9a79c59e8bcf5e01ba14",1:"4434bf8df3d72126d3b3",2:"b862ba0cbff6db318d5c",3:"a9d81425fd5d650e08b2",4:"98c76d689faf4e24e515",5:"216cf2e8b13133ec1b51",6:"e921111d8f479ba5a1cd",7:"dfd7fcb83848670d21b1",8:"d45435715b520199379d",9:"abbae1ad205e6f253d03",10:"8150044514eb62ddb4c7",11:"f1734fa9096da7169e8b",12:"922f1427ed81a1db7207",13:"60a77f13238c99a592be",14:"815252d9cf4fccce90f1",15:"3960437a749191406982",16:"45b9891348f7e815e8b8",17:"68457182c4872d1a7c24",18:"84de25a06aba2d62011f",19:"19d62025503672303cb1",20:"bfd746009c61229a100b",21:"5ad91d8ce1e7f50b5a3e",22:"c7846a3fc32fa8186fb2",23:"81931b2fd6422070ec04"}[e]+".js";var s=setTimeout(i,12e4);function i(){o.onerror=o.onload=null,clearTimeout(s);var a=c[e];0!==a&&(a&&a[1](new Error("Loading chunk "+e+" failed.")),c[e]=void 0)}return o.onerror=o.onload=i,r.appendChild(o),n},t.m=e,t.c=n,t.d=function(e,a,n){t.o(e,a)||Object.defineProperty(e,a,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var a=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(a,"a",a),a},t.o=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)},t.p="/unide/files/",t.oe=function(e){throw console.error(e),e}}([]);
\ No newline at end of file
diff --git a/images/specification/v3/definitions.iuml b/images/specification/v3/definitions.iuml
index b3c8357..f286443 100644
--- a/images/specification/v3/definitions.iuml
+++ b/images/specification/v3/definitions.iuml
@@ -48,7 +48,7 @@
 }
 
 class Series {
-	time: [Integer]
+	time[0..1]: [Number]
 	<values>[1..*]: [(Boolean | Number | String)]
 }
 
diff --git a/images/specification/v3/measurementPayload.svg b/images/specification/v3/measurementPayload.svg
index 9a70956..b1b2664 100644
--- a/images/specification/v3/measurementPayload.svg
+++ b/images/specification/v3/measurementPayload.svg
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="640px" preserveAspectRatio="none" style="width:962px;height:640px;" version="1.1" viewBox="0 0 962 640" width="962px" zoomAndPan="magnify"><defs><filter height="300%" id="fra3en5eoyhdu" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><!--class Device--><rect fill="#F5F5F5" filter="url(#fra3en5eoyhdu)" height="82.6016" id="Device" style="stroke: #000000; stroke-width: 1.5;" width="124" x="6" y="216.5"/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="37" x="49.5" y="233.957">Device</text><line style="stroke: #000000; stroke-width: 1.5;" x1="7" x2="129" y1="241.5938" y2="241.5938"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="42" x="12" y="257.0127">id: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="84" x="12" y="270.8486">mode[0..1]: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="112" x="12" y="284.6846">state[0..1]: DeviceState</text><line style="stroke: #000000; stroke-width: 1.5;" x1="7" x2="129" y1="291.1016" y2="291.1016"/><!--class Measurement--><rect fill="#F5F5F5" filter="url(#fra3en5eoyhdu)" height="110.2734" id="Measurement" style="stroke: #000000; stroke-width: 1.5;" width="132" x="363" y="11.5"/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="76" x="391" y="28.957">Measurement</text><line style="stroke: #000000; stroke-width: 1.5;" x1="364" x2="494" y1="36.5938" y2="36.5938"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="82" x="369" y="52.0127">code[0..1]: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="120" x="369" y="65.8486">context[0..1]: ContextList</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="87" x="369" y="79.6846">result[0..1]: Result</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="67" x="369" y="93.5205">series: Series</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="37" x="369" y="107.3564">ts: Date</text><line style="stroke: #000000; stroke-width: 1.5;" x1="364" x2="494" y1="113.7734" y2="113.7734"/><!--class Context--><rect fill="#F5F5F5" filter="url(#fra3en5eoyhdu)" height="96.4375" id="Context" style="stroke: #000000; stroke-width: 1.5;" width="126" x="336" y="210"/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="41" x="378.5" y="227.457">Context</text><line style="stroke: #000000; stroke-width: 1.5;" x1="337" x2="461" y1="235.0938" y2="235.0938"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="80" x="342" y="250.5127">limits[0..1]: Limits</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="114" x="342" y="264.3486">namespace[0..1]: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="79" x="342" y="278.1846">type[0..1]: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="75" x="342" y="292.0205">unit[0..1]: String</text><line style="stroke: #000000; stroke-width: 1.5;" x1="337" x2="461" y1="298.4375" y2="298.4375"/><!--class Limits--><rect fill="#F5F5F5" filter="url(#fra3en5eoyhdu)" height="110.2734" id="Limits" style="stroke: #000000; stroke-width: 1.5;" width="156" x="321" y="374"/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="34" x="382" y="391.457">Limits</text><line style="stroke: #000000; stroke-width: 1.5;" x1="322" x2="476" y1="399.0938" y2="399.0938"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="142" x="327" y="414.5127">lowerError[0..1]: Float | [Float]</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="144" x="327" y="428.3486">lowerWarn[0..1]: Float | [Float]</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="121" x="327" y="442.1846">target[0..1]:  Float | [Float]</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="142" x="327" y="456.0205">upperError[0..1]: Float | [Float]</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="144" x="327" y="469.8564">upperWarn[0..1]: Float | [Float]</text><line style="stroke: #000000; stroke-width: 1.5;" x1="322" x2="476" y1="476.2734" y2="476.2734"/><!--class Series--><rect fill="#F5F5F5" filter="url(#fra3en5eoyhdu)" height="68.7656" id="Series" style="stroke: #000000; stroke-width: 1.5;" width="218" x="497" y="223.5"/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="36" x="588" y="240.957">Series</text><line style="stroke: #000000; stroke-width: 1.5;" x1="498" x2="714" y1="248.5938" y2="248.5938"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="64" x="503" y="264.0127">time: [Integer]</text><line style="stroke: #000000; stroke-width: 1.5;" x1="498" x2="714" y1="270.4297" y2="270.4297"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="206" x="503" y="285.8486">&lt;values&gt;[1..*]: [(Boolean | Number | String)]</text><!--class Part--><rect fill="#F5F5F5" filter="url(#fra3en5eoyhdu)" height="110.2734" id="Part" style="stroke: #000000; stroke-width: 1.5;" width="106" x="165" y="203"/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="22" x="207" y="220.457">Part</text><line style="stroke: #000000; stroke-width: 1.5;" x1="166" x2="270" y1="228.0938" y2="228.0938"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="82" x="171" y="243.5127">code[0..1]: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="66" x="171" y="257.3486">id[0..1]: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="94" x="171" y="271.1846">type[0..1]: PartType</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="87" x="171" y="285.0205">typeId[0..1]: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="87" x="171" y="298.8564">result[0..1]: Result</text><line style="stroke: #000000; stroke-width: 1.5;" x1="166" x2="270" y1="305.2734" y2="305.2734"/><!--class DeviceState--><rect fill="#F5F5F5" filter="url(#fra3en5eoyhdu)" height="117.1797" id="DeviceState" style="stroke: #000000; stroke-width: 1.5;" width="97" x="741.5" y="8"/><ellipse cx="756.5" cy="24" fill="#FFFFFF" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><path d="M755.3594,24.7969 L755.3594,27.2969 L759.6875,27.2969 L759.6875,26.375 Q759.6875,25.7656 759.9297,25.5 Q760.1719,25.2344 760.5469,25.2344 Q760.9219,25.2344 761.1563,25.5 Q761.3906,25.7656 761.3906,26.375 L761.3906,29 L753.3906,29 Q752.7656,29 752.5078,28.7656 Q752.25,28.5313 752.25,28.1406 Q752.25,27.7656 752.5156,27.5313 Q752.7813,27.2969 753.3906,27.2969 L753.6563,27.2969 L753.6563,20.6406 L753.3906,20.6406 Q752.7656,20.6406 752.5078,20.4063 Q752.25,20.1719 752.25,19.7813 Q752.25,19.4063 752.5078,19.1719 Q752.7656,18.9375 753.3906,18.9375 L761.0156,18.9375 L761.0156,21.5313 Q761.0156,22.1406 760.7891,22.3984 Q760.5625,22.6563 760.1719,22.6563 Q759.7969,22.6563 759.5625,22.3984 Q759.3281,22.1406 759.3281,21.5313 L759.3281,20.6406 L755.3594,20.6406 L755.3594,23.0938 L756.8438,23.0938 Q756.8438,22.4375 756.9688,22.25 Q757.2344,21.8438 757.7031,21.8438 Q758.0781,21.8438 758.3125,22.1016 Q758.5469,22.3594 758.5469,22.9688 L758.5469,24.9375 Q758.5469,25.4844 758.4219,25.6719 Q758.1563,26.0625 757.7031,26.0625 Q757.2344,26.0625 756.9688,25.6563 Q756.8438,25.4688 756.8438,24.7969 L755.3594,24.7969 Z "/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="65" x="770.5" y="28.9102">DeviceState</text><line style="stroke: #000000; stroke-width: 1.5;" x1="742.5" x2="837.5" y1="40" y2="40"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="15" x="747.5" y="55.4189">OK</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="23" x="747.5" y="69.2549">INFO</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="32" x="747.5" y="83.0908">WARN</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="35" x="747.5" y="96.9268">ERROR</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="53" x="747.5" y="110.7627">UNKNOWN</text><line style="stroke: #000000; stroke-width: 1.5;" x1="742.5" x2="837.5" y1="117.1797" y2="117.1797"/><!--class Result--><rect fill="#F5F5F5" filter="url(#fra3en5eoyhdu)" height="89.5078" id="Result" style="stroke: #000000; stroke-width: 1.5;" width="68" x="874" y="21.5"/><ellipse cx="889" cy="37.5" fill="#FFFFFF" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><path d="M887.8594,38.2969 L887.8594,40.7969 L892.1875,40.7969 L892.1875,39.875 Q892.1875,39.2656 892.4297,39 Q892.6719,38.7344 893.0469,38.7344 Q893.4219,38.7344 893.6563,39 Q893.8906,39.2656 893.8906,39.875 L893.8906,42.5 L885.8906,42.5 Q885.2656,42.5 885.0078,42.2656 Q884.75,42.0313 884.75,41.6406 Q884.75,41.2656 885.0156,41.0313 Q885.2813,40.7969 885.8906,40.7969 L886.1563,40.7969 L886.1563,34.1406 L885.8906,34.1406 Q885.2656,34.1406 885.0078,33.9063 Q884.75,33.6719 884.75,33.2813 Q884.75,32.9063 885.0078,32.6719 Q885.2656,32.4375 885.8906,32.4375 L893.5156,32.4375 L893.5156,35.0313 Q893.5156,35.6406 893.2891,35.8984 Q893.0625,36.1563 892.6719,36.1563 Q892.2969,36.1563 892.0625,35.8984 Q891.8281,35.6406 891.8281,35.0313 L891.8281,34.1406 L887.8594,34.1406 L887.8594,36.5938 L889.3438,36.5938 Q889.3438,35.9375 889.4688,35.75 Q889.7344,35.3438 890.2031,35.3438 Q890.5781,35.3438 890.8125,35.6016 Q891.0469,35.8594 891.0469,36.4688 L891.0469,38.4375 Q891.0469,38.9844 890.9219,39.1719 Q890.6563,39.5625 890.2031,39.5625 Q889.7344,39.5625 889.4688,39.1563 Q889.3438,38.9688 889.3438,38.2969 L887.8594,38.2969 Z "/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="36" x="903" y="42.4102">Result</text><line style="stroke: #000000; stroke-width: 1.5;" x1="875" x2="941" y1="53.5" y2="53.5"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="15" x="880" y="68.9189">OK</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="22" x="880" y="82.7549">NOK</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="53" x="880" y="96.5908">UNKNOWN</text><line style="stroke: #000000; stroke-width: 1.5;" x1="875" x2="941" y1="103.0078" y2="103.0078"/><!--class PartType--><rect fill="#F5F5F5" filter="url(#fra3en5eoyhdu)" height="75.6719" id="PartType" style="stroke: #000000; stroke-width: 1.5;" width="80" x="750" y="220"/><ellipse cx="765" cy="236" fill="#FFFFFF" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><path d="M763.8594,236.7969 L763.8594,239.2969 L768.1875,239.2969 L768.1875,238.375 Q768.1875,237.7656 768.4297,237.5 Q768.6719,237.2344 769.0469,237.2344 Q769.4219,237.2344 769.6563,237.5 Q769.8906,237.7656 769.8906,238.375 L769.8906,241 L761.8906,241 Q761.2656,241 761.0078,240.7656 Q760.75,240.5313 760.75,240.1406 Q760.75,239.7656 761.0156,239.5313 Q761.2813,239.2969 761.8906,239.2969 L762.1563,239.2969 L762.1563,232.6406 L761.8906,232.6406 Q761.2656,232.6406 761.0078,232.4063 Q760.75,232.1719 760.75,231.7813 Q760.75,231.4063 761.0078,231.1719 Q761.2656,230.9375 761.8906,230.9375 L769.5156,230.9375 L769.5156,233.5313 Q769.5156,234.1406 769.2891,234.3984 Q769.0625,234.6563 768.6719,234.6563 Q768.2969,234.6563 768.0625,234.3984 Q767.8281,234.1406 767.8281,233.5313 L767.8281,232.6406 L763.8594,232.6406 L763.8594,235.0938 L765.3438,235.0938 Q765.3438,234.4375 765.4688,234.25 Q765.7344,233.8438 766.2031,233.8438 Q766.5781,233.8438 766.8125,234.1016 Q767.0469,234.3594 767.0469,234.9688 L767.0469,236.9375 Q767.0469,237.4844 766.9219,237.6719 Q766.6563,238.0625 766.2031,238.0625 Q765.7344,238.0625 765.4688,237.6563 Q765.3438,237.4688 765.3438,236.7969 L763.8594,236.7969 Z "/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="48" x="779" y="240.9102">PartType</text><line style="stroke: #000000; stroke-width: 1.5;" x1="751" x2="829" y1="252" y2="252"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="36" x="756" y="267.4189">SINGLE</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="35" x="756" y="281.2549">BATCH</text><line style="stroke: #000000; stroke-width: 1.5;" x1="751" x2="829" y1="287.6719" y2="287.6719"/><!--class MeasurementPayload--><rect fill="#F5F5F5" filter="url(#fra3en5eoyhdu)" height="96.4375" id="MeasurementPayload" style="stroke: #000000; stroke-width: 1.5;" width="163" x="77.5" y="18.5"/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="120" x="99" y="35.957">MeasurementPayload</text><line style="stroke: #000000; stroke-width: 1.5;" x1="78.5" x2="239.5" y1="43.5938" y2="43.5938"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="101" x="83.5" y="59.0127">content-spec : String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="74" x="83.5" y="72.8486">device : Device</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="151" x="83.5" y="86.6846">measurements : Measurements</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="71" x="83.5" y="100.5205">part[0..1] : Part</text><line style="stroke: #000000; stroke-width: 1.5;" x1="78.5" x2="239.5" y1="106.9375" y2="106.9375"/><!--link Measurement to Context--><path d="M418.368,134.659 C414.427,159.556 410.044,187.238 406.446,209.964 " fill="none" id="Measurement-Context" style="stroke: #000000; stroke-width: 1.0;"/><polygon fill="#000000" points="420.443,121.549,415.554,126.8497,418.5665,133.4014,423.4555,128.1007,420.443,121.549" style="stroke: #000000; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="66" x="416" y="169.4951">ContextList</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="7" x="411.8982" y="143.1273">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="22" x="383.924" y="199.2225">0..1</text><!--link Context to Limits--><path d="M399,306.076 C399,327.074 399,351.937 399,373.715 " fill="none" id="Context-Limits" style="stroke: #000000; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="7" x="391.4859" y="327.801">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="20" x="377.7188" y="363.1067">0..*</text><!--link MeasurementPayload to Device--><path d="M136.272,114.83 C121.268,146.073 101.8139,186.585 87.5126,216.367 " fill="none" id="MeasurementPayload-Device" style="stroke: #000000; stroke-width: 1.0;"/><!--link MeasurementPayload to Part--><path d="M173.736,114.83 C182.064,141.579 192.507,175.121 201.158,202.907 " fill="none" id="MeasurementPayload-Part" style="stroke: #000000; stroke-width: 1.0;"/><!--link MeasurementPayload to Measurement--><path d="M253.809,66.5 C289.853,66.5 330.102,66.5 362.924,66.5 " fill="none" id="MeasurementPayload-Measurement" style="stroke: #000000; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="240.742,66.5,246.742,70.5,252.742,66.5,246.742,62.5,240.742,66.5" style="stroke: #000000; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="86" x="258.75" y="59.9951">Measurements</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="7" x="248.6002" y="63.2537">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="20" x="335.0787" y="80.8241">1..*</text><!--link Measurement to Series--><path d="M479.484,121.549 C510.138,154.368 548.305,195.231 574.657,223.443 " fill="none" id="Measurement-Series" style="stroke: #000000; stroke-width: 1.0;"/><!--link DeviceState to Result--><!--link DeviceState to PartType--><rect fill="#FFFFFF" height="127" rx="5" ry="5" style="stroke: #FFFFFF; stroke-width: 1.0;" width="301" x="650" y="502"/><svg x="656" y="507">	<rect x=".5" y=".5" width="288" height="116.58" rx="5" ry="5" fill="#f5f5f5" stroke="#50237f"/>	<text transform="translate(-504.5 -714.76)" x="514" y="731.38092" fill="#000000" font-family="sans-serif" font-size="10px" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="36">Symbol</text>	<text transform="translate(-504.5 -714.76)" x="556" y="731.38092" fill="#000000" font-family="sans-serif" font-size="10px" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="28">Name</text>	<text transform="translate(-504.5 -714.76)" x="637" y="731.38092" fill="#000000" font-family="sans-serif" font-size="10px" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="56">Description</text>	<text transform="translate(-504.5,-713.5)" x="523" y="749.38092" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="0"/>	<text transform="translate(-504.5 -712.11)" x="556" y="743.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="24">Class</text>	<text transform="translate(-504.5 -712.11)" x="637" y="743.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="86">A complex Object</text>	<text transform="translate(-504.5,-713.5)" x="523" y="767.38092" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="0"/>	<text transform="translate(-504.5 -712.25)" x="556" y="761.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="58">Aggregation</text>	<text transform="translate(-504.5 -712.09)" x="637" y="761.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="107">List of Objects as Array</text>	<text transform="translate(-504.5,-713.5)" x="523" y="785.38092" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="0"/>	<text transform="translate(-504.5 -712.19)" x="556" y="779.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="59">Composition</text>	<text transform="translate(-504.5 -712.09)" x="637" y="779.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="104">List of Objects as Map</text>	<text transform="translate(-504.5,-713.5)" x="523" y="803.38092" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="0"/>	<text transform="translate(-504.5 -712.39)" x="556" y="797.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="54">Association</text>	<text transform="translate(-504.5 -712.11)" x="637" y="797.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="126">A complex Object as child</text>	<text transform="translate(-504.5,-713.5)" x="523" y="821.38092" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="0"/>	<text transform="translate(-504.5 -712.14)" x="556" y="815.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="69">Specialization</text>	<text transform="translate(-504.5 -712.09)" x="637" y="815.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="147">An extension of another Object</text>	<line x1="6.5" x2="282.5" y1="20.078" y2="20.078" stroke="#000"/>	<line x1="6.5" x2="282.5" y1="38.078" y2="38.078" stroke="#000"/>	<line x1="6.5" x2="282.5" y1="56.078" y2="56.078" stroke="#000"/>	<line x1="6.5" x2="282.5" y1="74.078" y2="74.078" stroke="#000"/>	<line x1="6.5" x2="282.5" y1="92.078" y2="92.078" stroke="#000"/>	<line x1="48.5" x2="48.5" y1="7.5" y2="110.08" stroke="#000"/>	<line x1="129.5" x2="129.5" y1="7.5" y2="110.08" stroke="#000"/>	<path d="m20.871 26.751h12m-11.5-3.1729h11v11h-11z" fill="none" stroke="#000" stroke-width="1px"/>	<g transform="translate(0 1.5453)" fill="none" stroke="#000">		<path d="m24.935 47.446 5.6592-5.6592" stroke-linecap="square" stroke-width="1px"/>		<rect x="20.869" y="47.512" width="4" height="3.9606" ry="0"/>		<rect x="30.774" y="39.593" width="2" height="2" ry="0"/>	</g>	<path d="m21.038 88.97 11.784-11.784" fill="none" stroke="#000" stroke-linecap="square" stroke-width="1px"/>	<g transform="translate(0 .78224)" fill="none" stroke="#000">		<path d="m25.986 93.638h6.7885v6.7885z"/>		<path d="m19.701 106.75 9.6682-9.6682" stroke-linecap="square" stroke-width="1px"/>	</g>	<g transform="translate(0 1.3665)" fill="none" stroke="#000">		<path d="m24.935 65.602 5.6592-5.6592" stroke-linecap="square" stroke-width="1px"/>		<rect x="20.869" y="65.668" width="4" height="3.9606" ry="0"/>		<rect x="30.774" y="57.795" width="2" height="2" ry="0"/>	</g></svg><!--
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="640px" preserveAspectRatio="none" style="width:964px;height:640px;" version="1.1" viewBox="0 0 964 640" width="964px" zoomAndPan="magnify"><defs><filter height="300%" id="fzec1a12ocsfh" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><!--class Device--><rect fill="#F5F5F5" filter="url(#fzec1a12ocsfh)" height="82.6016" id="Device" style="stroke: #000000; stroke-width: 1.5;" width="124" x="6" y="216.5"/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="37" x="49.5" y="233.957">Device</text><line style="stroke: #000000; stroke-width: 1.5;" x1="7" x2="129" y1="241.5938" y2="241.5938"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="42" x="12" y="257.0127">id: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="84" x="12" y="270.8486">mode[0..1]: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="112" x="12" y="284.6846">state[0..1]: DeviceState</text><line style="stroke: #000000; stroke-width: 1.5;" x1="7" x2="129" y1="291.1016" y2="291.1016"/><!--class Context--><rect fill="#F5F5F5" filter="url(#fzec1a12ocsfh)" height="96.4375" id="Context" style="stroke: #000000; stroke-width: 1.5;" width="126" x="338" y="210"/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="41" x="380.5" y="227.457">Context</text><line style="stroke: #000000; stroke-width: 1.5;" x1="339" x2="463" y1="235.0938" y2="235.0938"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="80" x="344" y="250.5127">limits[0..1]: Limits</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="114" x="344" y="264.3486">namespace[0..1]: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="79" x="344" y="278.1846">type[0..1]: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="75" x="344" y="292.0205">unit[0..1]: String</text><line style="stroke: #000000; stroke-width: 1.5;" x1="339" x2="463" y1="298.4375" y2="298.4375"/><!--class Limits--><rect fill="#F5F5F5" filter="url(#fzec1a12ocsfh)" height="110.2734" id="Limits" style="stroke: #000000; stroke-width: 1.5;" width="156" x="323" y="374"/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="34" x="384" y="391.457">Limits</text><line style="stroke: #000000; stroke-width: 1.5;" x1="324" x2="478" y1="399.0938" y2="399.0938"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="142" x="329" y="414.5127">lowerError[0..1]: Float | [Float]</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="144" x="329" y="428.3486">lowerWarn[0..1]: Float | [Float]</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="121" x="329" y="442.1846">target[0..1]:  Float | [Float]</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="142" x="329" y="456.0205">upperError[0..1]: Float | [Float]</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="144" x="329" y="469.8564">upperWarn[0..1]: Float | [Float]</text><line style="stroke: #000000; stroke-width: 1.5;" x1="324" x2="478" y1="476.2734" y2="476.2734"/><!--class Part--><rect fill="#F5F5F5" filter="url(#fzec1a12ocsfh)" height="110.2734" id="Part" style="stroke: #000000; stroke-width: 1.5;" width="106" x="165" y="203"/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="22" x="207" y="220.457">Part</text><line style="stroke: #000000; stroke-width: 1.5;" x1="166" x2="270" y1="228.0938" y2="228.0938"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="82" x="171" y="243.5127">code[0..1]: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="66" x="171" y="257.3486">id[0..1]: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="94" x="171" y="271.1846">type[0..1]: PartType</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="87" x="171" y="285.0205">typeId[0..1]: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="87" x="171" y="298.8564">result[0..1]: Result</text><line style="stroke: #000000; stroke-width: 1.5;" x1="166" x2="270" y1="305.2734" y2="305.2734"/><!--class DeviceState--><rect fill="#F5F5F5" filter="url(#fzec1a12ocsfh)" height="117.1797" id="DeviceState" style="stroke: #000000; stroke-width: 1.5;" width="97" x="743.5" y="8"/><ellipse cx="758.5" cy="24" fill="#FFFFFF" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><path d="M757.3594,24.7969 L757.3594,27.2969 L761.6875,27.2969 L761.6875,26.375 Q761.6875,25.7656 761.9297,25.5 Q762.1719,25.2344 762.5469,25.2344 Q762.9219,25.2344 763.1563,25.5 Q763.3906,25.7656 763.3906,26.375 L763.3906,29 L755.3906,29 Q754.7656,29 754.5078,28.7656 Q754.25,28.5313 754.25,28.1406 Q754.25,27.7656 754.5156,27.5313 Q754.7813,27.2969 755.3906,27.2969 L755.6563,27.2969 L755.6563,20.6406 L755.3906,20.6406 Q754.7656,20.6406 754.5078,20.4063 Q754.25,20.1719 754.25,19.7813 Q754.25,19.4063 754.5078,19.1719 Q754.7656,18.9375 755.3906,18.9375 L763.0156,18.9375 L763.0156,21.5313 Q763.0156,22.1406 762.7891,22.3984 Q762.5625,22.6563 762.1719,22.6563 Q761.7969,22.6563 761.5625,22.3984 Q761.3281,22.1406 761.3281,21.5313 L761.3281,20.6406 L757.3594,20.6406 L757.3594,23.0938 L758.8438,23.0938 Q758.8438,22.4375 758.9688,22.25 Q759.2344,21.8438 759.7031,21.8438 Q760.0781,21.8438 760.3125,22.1016 Q760.5469,22.3594 760.5469,22.9688 L760.5469,24.9375 Q760.5469,25.4844 760.4219,25.6719 Q760.1563,26.0625 759.7031,26.0625 Q759.2344,26.0625 758.9688,25.6563 Q758.8438,25.4688 758.8438,24.7969 L757.3594,24.7969 Z "/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="65" x="772.5" y="28.9102">DeviceState</text><line style="stroke: #000000; stroke-width: 1.5;" x1="744.5" x2="839.5" y1="40" y2="40"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="15" x="749.5" y="55.4189">OK</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="23" x="749.5" y="69.2549">INFO</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="32" x="749.5" y="83.0908">WARN</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="35" x="749.5" y="96.9268">ERROR</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="53" x="749.5" y="110.7627">UNKNOWN</text><line style="stroke: #000000; stroke-width: 1.5;" x1="744.5" x2="839.5" y1="117.1797" y2="117.1797"/><!--class Result--><rect fill="#F5F5F5" filter="url(#fzec1a12ocsfh)" height="89.5078" id="Result" style="stroke: #000000; stroke-width: 1.5;" width="68" x="876" y="21.5"/><ellipse cx="891" cy="37.5" fill="#FFFFFF" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><path d="M889.8594,38.2969 L889.8594,40.7969 L894.1875,40.7969 L894.1875,39.875 Q894.1875,39.2656 894.4297,39 Q894.6719,38.7344 895.0469,38.7344 Q895.4219,38.7344 895.6563,39 Q895.8906,39.2656 895.8906,39.875 L895.8906,42.5 L887.8906,42.5 Q887.2656,42.5 887.0078,42.2656 Q886.75,42.0313 886.75,41.6406 Q886.75,41.2656 887.0156,41.0313 Q887.2813,40.7969 887.8906,40.7969 L888.1563,40.7969 L888.1563,34.1406 L887.8906,34.1406 Q887.2656,34.1406 887.0078,33.9063 Q886.75,33.6719 886.75,33.2813 Q886.75,32.9063 887.0078,32.6719 Q887.2656,32.4375 887.8906,32.4375 L895.5156,32.4375 L895.5156,35.0313 Q895.5156,35.6406 895.2891,35.8984 Q895.0625,36.1563 894.6719,36.1563 Q894.2969,36.1563 894.0625,35.8984 Q893.8281,35.6406 893.8281,35.0313 L893.8281,34.1406 L889.8594,34.1406 L889.8594,36.5938 L891.3438,36.5938 Q891.3438,35.9375 891.4688,35.75 Q891.7344,35.3438 892.2031,35.3438 Q892.5781,35.3438 892.8125,35.6016 Q893.0469,35.8594 893.0469,36.4688 L893.0469,38.4375 Q893.0469,38.9844 892.9219,39.1719 Q892.6563,39.5625 892.2031,39.5625 Q891.7344,39.5625 891.4688,39.1563 Q891.3438,38.9688 891.3438,38.2969 L889.8594,38.2969 Z "/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="36" x="905" y="42.4102">Result</text><line style="stroke: #000000; stroke-width: 1.5;" x1="877" x2="943" y1="53.5" y2="53.5"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="15" x="882" y="68.9189">OK</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="22" x="882" y="82.7549">NOK</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="53" x="882" y="96.5908">UNKNOWN</text><line style="stroke: #000000; stroke-width: 1.5;" x1="877" x2="943" y1="103.0078" y2="103.0078"/><!--class PartType--><rect fill="#F5F5F5" filter="url(#fzec1a12ocsfh)" height="75.6719" id="PartType" style="stroke: #000000; stroke-width: 1.5;" width="80" x="752" y="220"/><ellipse cx="767" cy="236" fill="#FFFFFF" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><path d="M765.8594,236.7969 L765.8594,239.2969 L770.1875,239.2969 L770.1875,238.375 Q770.1875,237.7656 770.4297,237.5 Q770.6719,237.2344 771.0469,237.2344 Q771.4219,237.2344 771.6563,237.5 Q771.8906,237.7656 771.8906,238.375 L771.8906,241 L763.8906,241 Q763.2656,241 763.0078,240.7656 Q762.75,240.5313 762.75,240.1406 Q762.75,239.7656 763.0156,239.5313 Q763.2813,239.2969 763.8906,239.2969 L764.1563,239.2969 L764.1563,232.6406 L763.8906,232.6406 Q763.2656,232.6406 763.0078,232.4063 Q762.75,232.1719 762.75,231.7813 Q762.75,231.4063 763.0078,231.1719 Q763.2656,230.9375 763.8906,230.9375 L771.5156,230.9375 L771.5156,233.5313 Q771.5156,234.1406 771.2891,234.3984 Q771.0625,234.6563 770.6719,234.6563 Q770.2969,234.6563 770.0625,234.3984 Q769.8281,234.1406 769.8281,233.5313 L769.8281,232.6406 L765.8594,232.6406 L765.8594,235.0938 L767.3438,235.0938 Q767.3438,234.4375 767.4688,234.25 Q767.7344,233.8438 768.2031,233.8438 Q768.5781,233.8438 768.8125,234.1016 Q769.0469,234.3594 769.0469,234.9688 L769.0469,236.9375 Q769.0469,237.4844 768.9219,237.6719 Q768.6563,238.0625 768.2031,238.0625 Q767.7344,238.0625 767.4688,237.6563 Q767.3438,237.4688 767.3438,236.7969 L765.8594,236.7969 Z "/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="48" x="781" y="240.9102">PartType</text><line style="stroke: #000000; stroke-width: 1.5;" x1="753" x2="831" y1="252" y2="252"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="36" x="758" y="267.4189">SINGLE</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="35" x="758" y="281.2549">BATCH</text><line style="stroke: #000000; stroke-width: 1.5;" x1="753" x2="831" y1="287.6719" y2="287.6719"/><!--class MeasurementPayload--><rect fill="#F5F5F5" filter="url(#fzec1a12ocsfh)" height="96.4375" id="MeasurementPayload" style="stroke: #000000; stroke-width: 1.5;" width="179" x="65.5" y="18.5"/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="120" x="95" y="35.957">MeasurementPayload</text><line style="stroke: #000000; stroke-width: 1.5;" x1="66.5" x2="243.5" y1="43.5938" y2="43.5938"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="101" x="71.5" y="59.0127">content-spec : String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="74" x="71.5" y="72.8486">device : Device</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="167" x="71.5" y="86.6846">measurements : TimeMeasurement</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="71" x="71.5" y="100.5205">part[0..1] : Part</text><line style="stroke: #000000; stroke-width: 1.5;" x1="66.5" x2="243.5" y1="106.9375" y2="106.9375"/><!--class TimeMeasurement--><rect fill="#F5F5F5" filter="url(#fzec1a12ocsfh)" height="110.2734" id="TimeMeasurement" style="stroke: #000000; stroke-width: 1.5;" width="132" x="367" y="11.5"/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="104" x="381" y="28.957">TimeMeasurement</text><line style="stroke: #000000; stroke-width: 1.5;" x1="368" x2="498" y1="36.5938" y2="36.5938"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="82" x="373" y="52.0127">code[0..1]: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="120" x="373" y="65.8486">context[0..1]: ContextList</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="87" x="373" y="79.6846">result[0..1]: Result</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="89" x="373" y="93.5205">series: TimeSeries</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="37" x="373" y="107.3564">ts: Date</text><line style="stroke: #000000; stroke-width: 1.5;" x1="368" x2="498" y1="113.7734" y2="113.7734"/><!--class TimeSeries--><rect fill="#F5F5F5" filter="url(#fzec1a12ocsfh)" height="68.7656" id="TimeSeries" style="stroke: #000000; stroke-width: 1.5;" width="218" x="499" y="223.5"/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="64" x="576" y="240.957">TimeSeries</text><line style="stroke: #000000; stroke-width: 1.5;" x1="500" x2="716" y1="248.5938" y2="248.5938"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="68" x="505" y="264.0127">time: [Number]</text><line style="stroke: #000000; stroke-width: 1.5;" x1="500" x2="716" y1="270.4297" y2="270.4297"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="206" x="505" y="285.8486">&lt;values&gt;[1..*]: [(Boolean | Number | String)]</text><!--link Context to Limits--><path d="M401,306.076 C401,327.074 401,351.937 401,373.715 " fill="none" id="Context-Limits" style="stroke: #000000; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="7" x="393.4859" y="327.801">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="20" x="379.7188" y="363.1067">0..*</text><!--link TimeMeasurement to Context--><path d="M421.659,134.659 C417.455,159.556 412.78,187.238 408.943,209.964 " fill="none" id="TimeMeasurement-Context" style="stroke: #000000; stroke-width: 1.0;"/><polygon fill="#000000" points="423.873,121.549,418.9294,126.7988,421.8739,133.3813,426.8176,128.1315,423.873,121.549" style="stroke: #000000; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="66" x="419" y="169.4951">ContextList</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="7" x="415.2552" y="143.1273">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="22" x="386.494" y="199.2225">0..1</text><!--link MeasurementPayload to Device--><path d="M133.271,114.83 C118.927,146.073 100.3276,186.585 86.6549,216.367 " fill="none" id="MeasurementPayload-Device" style="stroke: #000000; stroke-width: 1.0;"/><!--link MeasurementPayload to Part--><path d="M170.735,114.83 C179.628,141.579 190.779,175.121 200.017,202.907 " fill="none" id="MeasurementPayload-Part" style="stroke: #000000; stroke-width: 1.0;"/><!--link MeasurementPayload to TimeMeasurement--><path d="M258.087,66.5 C294.437,66.5 334.305,66.5 366.786,66.5 " fill="none" id="MeasurementPayload-TimeMeasurement" style="stroke: #000000; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="244.875,66.5,250.875,70.5,256.875,66.5,250.875,62.5,244.875,66.5" style="stroke: #000000; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="86" x="262.75" y="59.9951">Measurements</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="7" x="252.6076" y="63.3291">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="20" x="338.9264" y="80.8241">1..*</text><!--link TimeMeasurement to TimeSeries--><path d="M482.914,121.549 C513.222,154.368 550.957,195.231 577.011,223.443 " fill="none" id="TimeMeasurement-TimeSeries" style="stroke: #000000; stroke-width: 1.0;"/><!--link DeviceState to Result--><!--link DeviceState to PartType--><rect fill="#FFFFFF" height="127" rx="5" ry="5" style="stroke: #FFFFFF; stroke-width: 1.0;" width="301" x="652" y="502"/><svg x="658" y="507">	<rect x=".5" y=".5" width="288" height="116.58" rx="5" ry="5" fill="#f5f5f5" stroke="#50237f"/>	<text transform="translate(-504.5 -714.76)" x="514" y="731.38092" fill="#000000" font-family="sans-serif" font-size="10px" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="36">Symbol</text>	<text transform="translate(-504.5 -714.76)" x="556" y="731.38092" fill="#000000" font-family="sans-serif" font-size="10px" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="28">Name</text>	<text transform="translate(-504.5 -714.76)" x="637" y="731.38092" fill="#000000" font-family="sans-serif" font-size="10px" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="56">Description</text>	<text transform="translate(-504.5,-713.5)" x="523" y="749.38092" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="0"/>	<text transform="translate(-504.5 -712.11)" x="556" y="743.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="24">Class</text>	<text transform="translate(-504.5 -712.11)" x="637" y="743.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="86">A complex Object</text>	<text transform="translate(-504.5,-713.5)" x="523" y="767.38092" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="0"/>	<text transform="translate(-504.5 -712.25)" x="556" y="761.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="58">Aggregation</text>	<text transform="translate(-504.5 -712.09)" x="637" y="761.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="107">List of Objects as Array</text>	<text transform="translate(-504.5,-713.5)" x="523" y="785.38092" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="0"/>	<text transform="translate(-504.5 -712.19)" x="556" y="779.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="59">Composition</text>	<text transform="translate(-504.5 -712.09)" x="637" y="779.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="104">List of Objects as Map</text>	<text transform="translate(-504.5,-713.5)" x="523" y="803.38092" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="0"/>	<text transform="translate(-504.5 -712.39)" x="556" y="797.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="54">Association</text>	<text transform="translate(-504.5 -712.11)" x="637" y="797.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="126">A complex Object as child</text>	<text transform="translate(-504.5,-713.5)" x="523" y="821.38092" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="0"/>	<text transform="translate(-504.5 -712.14)" x="556" y="815.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="69">Specialization</text>	<text transform="translate(-504.5 -712.09)" x="637" y="815.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="147">An extension of another Object</text>	<line x1="6.5" x2="282.5" y1="20.078" y2="20.078" stroke="#000"/>	<line x1="6.5" x2="282.5" y1="38.078" y2="38.078" stroke="#000"/>	<line x1="6.5" x2="282.5" y1="56.078" y2="56.078" stroke="#000"/>	<line x1="6.5" x2="282.5" y1="74.078" y2="74.078" stroke="#000"/>	<line x1="6.5" x2="282.5" y1="92.078" y2="92.078" stroke="#000"/>	<line x1="48.5" x2="48.5" y1="7.5" y2="110.08" stroke="#000"/>	<line x1="129.5" x2="129.5" y1="7.5" y2="110.08" stroke="#000"/>	<path d="m20.871 26.751h12m-11.5-3.1729h11v11h-11z" fill="none" stroke="#000" stroke-width="1px"/>	<g transform="translate(0 1.5453)" fill="none" stroke="#000">		<path d="m24.935 47.446 5.6592-5.6592" stroke-linecap="square" stroke-width="1px"/>		<rect x="20.869" y="47.512" width="4" height="3.9606" ry="0"/>		<rect x="30.774" y="39.593" width="2" height="2" ry="0"/>	</g>	<path d="m21.038 88.97 11.784-11.784" fill="none" stroke="#000" stroke-linecap="square" stroke-width="1px"/>	<g transform="translate(0 .78224)" fill="none" stroke="#000">		<path d="m25.986 93.638h6.7885v6.7885z"/>		<path d="m19.701 106.75 9.6682-9.6682" stroke-linecap="square" stroke-width="1px"/>	</g>	<g transform="translate(0 1.3665)" fill="none" stroke="#000">		<path d="m24.935 65.602 5.6592-5.6592" stroke-linecap="square" stroke-width="1px"/>		<rect x="20.869" y="65.668" width="4" height="3.9606" ry="0"/>		<rect x="30.774" y="57.795" width="2" height="2" ry="0"/>	</g></svg><!--
 @startuml
 
 skinparam class {
@@ -49,7 +49,7 @@
 }
 
 class Series {
-	time: [Integer]
+	time[0..1]: [Number]
 	<values>[1..*]: [(Boolean | Number | String)]
 }
 
@@ -98,15 +98,35 @@
 class MeasurementPayload {
 	content-spec : String
 	device : Device
-	measurements : Measurements
+	measurements : TimeMeasurement
 	part[0..1] : Part
 }
 
+class TimeMeasurement {
+	code[0..1]: String
+	context[0..1]: ContextList
+	result[0..1]: Result
+	series: TimeSeries
+	ts: Date
+}
+
+class TimeSeries {
+	time: [Number]
+	<values>[1..*]: [(Boolean | Number | String)]
+}
+
+hide Measurement
+hide Series
+
+TimeMeasurement "1" *- - "0..1" Context : ContextList
+
 MeasurementPayload - - Device
 MeasurementPayload - - Part
-MeasurementPayload "1" o-right- "1..*" Measurement : Measurements
+MeasurementPayload "1" o-right- "1..*" TimeMeasurement : Measurements
 
-Measurement - - Series
+Series <|- - TimeSeries
+
+TimeMeasurement - - TimeSeries
 
 @enduml
 
diff --git a/images/specification/v3/measurementPayload.uml b/images/specification/v3/measurementPayload.uml
index a872b13..b3b0c89 100644
--- a/images/specification/v3/measurementPayload.uml
+++ b/images/specification/v3/measurementPayload.uml
@@ -4,14 +4,34 @@
 class MeasurementPayload {
 	content-spec : String
 	device : Device
-	measurements : Measurements
+	measurements : TimeMeasurement
 	part[0..1] : Part
 }
 
+class TimeMeasurement {
+	code[0..1]: String
+	context[0..1]: ContextList
+	result[0..1]: Result
+	series: TimeSeries
+	ts: Date
+}
+
+class TimeSeries {
+	time: [Number]
+	<values>[1..*]: [(Boolean | Number | String)]
+}
+
+hide Measurement
+hide Series
+
+TimeMeasurement "1" *-- "0..1" Context : ContextList
+
 MeasurementPayload -- Device
 MeasurementPayload -- Part
-MeasurementPayload "1" o-right- "1..*" Measurement : Measurements
+MeasurementPayload "1" o-right- "1..*" TimeMeasurement : Measurements
 
-Measurement -- Series
+Series <|-- TimeSeries
+
+TimeMeasurement -- TimeSeries
 
 @enduml
\ No newline at end of file
diff --git a/images/specification/v3/messagePayload.svg b/images/specification/v3/messagePayload.svg
index 9eea1f0..718762c 100644
--- a/images/specification/v3/messagePayload.svg
+++ b/images/specification/v3/messagePayload.svg
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="511px" preserveAspectRatio="none" style="width:602px;height:511px;" version="1.1" viewBox="0 0 602 511" width="602px" zoomAndPan="magnify"><defs><filter height="300%" id="f1fxdhu60byhff" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><!--class Device--><rect fill="#F5F5F5" filter="url(#f1fxdhu60byhff)" height="82.6016" id="Device" style="stroke: #000000; stroke-width: 1.5;" width="124" x="6" y="237.5"/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="37" x="49.5" y="254.957">Device</text><line style="stroke: #000000; stroke-width: 1.5;" x1="7" x2="129" y1="262.5938" y2="262.5938"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="42" x="12" y="278.0127">id: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="84" x="12" y="291.8486">mode[0..1]: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="112" x="12" y="305.6846">state[0..1]: DeviceState</text><line style="stroke: #000000; stroke-width: 1.5;" x1="7" x2="129" y1="312.1016" y2="312.1016"/><!--class DeviceState--><rect fill="#F5F5F5" filter="url(#f1fxdhu60byhff)" height="117.1797" id="DeviceState" style="stroke: #000000; stroke-width: 1.5;" width="97" x="243.5" y="8"/><ellipse cx="258.5" cy="24" fill="#FFFFFF" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><path d="M257.3594,24.7969 L257.3594,27.2969 L261.6875,27.2969 L261.6875,26.375 Q261.6875,25.7656 261.9297,25.5 Q262.1719,25.2344 262.5469,25.2344 Q262.9219,25.2344 263.1563,25.5 Q263.3906,25.7656 263.3906,26.375 L263.3906,29 L255.3906,29 Q254.7656,29 254.5078,28.7656 Q254.25,28.5313 254.25,28.1406 Q254.25,27.7656 254.5156,27.5313 Q254.7813,27.2969 255.3906,27.2969 L255.6563,27.2969 L255.6563,20.6406 L255.3906,20.6406 Q254.7656,20.6406 254.5078,20.4063 Q254.25,20.1719 254.25,19.7813 Q254.25,19.4063 254.5078,19.1719 Q254.7656,18.9375 255.3906,18.9375 L263.0156,18.9375 L263.0156,21.5313 Q263.0156,22.1406 262.7891,22.3984 Q262.5625,22.6563 262.1719,22.6563 Q261.7969,22.6563 261.5625,22.3984 Q261.3281,22.1406 261.3281,21.5313 L261.3281,20.6406 L257.3594,20.6406 L257.3594,23.0938 L258.8438,23.0938 Q258.8438,22.4375 258.9688,22.25 Q259.2344,21.8438 259.7031,21.8438 Q260.0781,21.8438 260.3125,22.1016 Q260.5469,22.3594 260.5469,22.9688 L260.5469,24.9375 Q260.5469,25.4844 260.4219,25.6719 Q260.1563,26.0625 259.7031,26.0625 Q259.2344,26.0625 258.9688,25.6563 Q258.8438,25.4688 258.8438,24.7969 L257.3594,24.7969 Z "/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="65" x="272.5" y="28.9102">DeviceState</text><line style="stroke: #000000; stroke-width: 1.5;" x1="244.5" x2="339.5" y1="40" y2="40"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="15" x="249.5" y="55.4189">OK</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="23" x="249.5" y="69.2549">INFO</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="32" x="249.5" y="83.0908">WARN</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="35" x="249.5" y="96.9268">ERROR</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="53" x="249.5" y="110.7627">UNKNOWN</text><line style="stroke: #000000; stroke-width: 1.5;" x1="244.5" x2="339.5" y1="117.1797" y2="117.1797"/><!--class MessagePayload--><rect fill="#F5F5F5" filter="url(#f1fxdhu60byhff)" height="82.6016" id="MessagePayload" style="stroke: #000000; stroke-width: 1.5;" width="121" x="87.5" y="25"/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="95" x="100.5" y="42.457">MessagePayload</text><line style="stroke: #000000; stroke-width: 1.5;" x1="88.5" x2="207.5" y1="50.0938" y2="50.0938"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="101" x="93.5" y="65.5127">content-spec : String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="74" x="93.5" y="79.3486">device : Device</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="109" x="93.5" y="93.1846">messages : Messages</text><line style="stroke: #000000; stroke-width: 1.5;" x1="88.5" x2="207.5" y1="99.6016" y2="99.6016"/><!--class Message--><rect fill="#F5F5F5" filter="url(#f1fxdhu60byhff)" height="151.7813" id="Message" style="stroke: #000000; stroke-width: 1.5;" width="126" x="165" y="203"/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="51" x="202.5" y="220.457">Message</text><line style="stroke: #000000; stroke-width: 1.5;" x1="166" x2="290" y1="228.0938" y2="228.0938"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="61" x="171" y="243.5127">code : String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="114" x="171" y="257.3486">description[0..1] : String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="78" x="171" y="271.1846">hint[0..1] : String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="87" x="171" y="285.0205">origin[0..1] : String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="112" x="171" y="298.8564">severity[0..1] : Severity</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="77" x="171" y="312.6924">title[0..1] : String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="40" x="171" y="326.5283">ts : Date</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="78" x="171" y="340.3643">type[0..1] : Type</text><line style="stroke: #000000; stroke-width: 1.5;" x1="166" x2="290" y1="346.7813" y2="346.7813"/><!--class Type--><rect fill="#F5F5F5" filter="url(#f1fxdhu60byhff)" height="75.6719" id="Type" style="stroke: #000000; stroke-width: 1.5;" width="97" x="375.5" y="28.5"/><ellipse cx="408.05" cy="44.5" fill="#FFFFFF" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><path d="M406.9094,45.2969 L406.9094,47.7969 L411.2375,47.7969 L411.2375,46.875 Q411.2375,46.2656 411.4797,46 Q411.7219,45.7344 412.0969,45.7344 Q412.4719,45.7344 412.7063,46 Q412.9406,46.2656 412.9406,46.875 L412.9406,49.5 L404.9406,49.5 Q404.3156,49.5 404.0578,49.2656 Q403.8,49.0313 403.8,48.6406 Q403.8,48.2656 404.0656,48.0313 Q404.3313,47.7969 404.9406,47.7969 L405.2063,47.7969 L405.2063,41.1406 L404.9406,41.1406 Q404.3156,41.1406 404.0578,40.9063 Q403.8,40.6719 403.8,40.2813 Q403.8,39.9063 404.0578,39.6719 Q404.3156,39.4375 404.9406,39.4375 L412.5656,39.4375 L412.5656,42.0313 Q412.5656,42.6406 412.3391,42.8984 Q412.1125,43.1563 411.7219,43.1563 Q411.3469,43.1563 411.1125,42.8984 Q410.8781,42.6406 410.8781,42.0313 L410.8781,41.1406 L406.9094,41.1406 L406.9094,43.5938 L408.3938,43.5938 Q408.3938,42.9375 408.5188,42.75 Q408.7844,42.3438 409.2531,42.3438 Q409.6281,42.3438 409.8625,42.6016 Q410.0969,42.8594 410.0969,43.4688 L410.0969,45.4375 Q410.0969,45.9844 409.9719,46.1719 Q409.7063,46.5625 409.2531,46.5625 Q408.7844,46.5625 408.5188,46.1563 Q408.3938,45.9688 408.3938,45.2969 L406.9094,45.2969 Z "/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="26" x="425.95" y="49.4102">Type</text><line style="stroke: #000000; stroke-width: 1.5;" x1="376.5" x2="471.5" y1="60.5" y2="60.5"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="36" x="381.5" y="75.9189">DEVICE</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="85" x="381.5" y="89.7549">TECHNICAL_INFO</text><line style="stroke: #000000; stroke-width: 1.5;" x1="376.5" x2="471.5" y1="96.1719" y2="96.1719"/><!--class Severity--><rect fill="#F5F5F5" filter="url(#f1fxdhu60byhff)" height="103.3438" id="Severity" style="stroke: #000000; stroke-width: 1.5;" width="74" x="508" y="15"/><ellipse cx="523" cy="31" fill="#FFFFFF" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><path d="M521.8594,31.7969 L521.8594,34.2969 L526.1875,34.2969 L526.1875,33.375 Q526.1875,32.7656 526.4297,32.5 Q526.6719,32.2344 527.0469,32.2344 Q527.4219,32.2344 527.6563,32.5 Q527.8906,32.7656 527.8906,33.375 L527.8906,36 L519.8906,36 Q519.2656,36 519.0078,35.7656 Q518.75,35.5313 518.75,35.1406 Q518.75,34.7656 519.0156,34.5313 Q519.2813,34.2969 519.8906,34.2969 L520.1563,34.2969 L520.1563,27.6406 L519.8906,27.6406 Q519.2656,27.6406 519.0078,27.4063 Q518.75,27.1719 518.75,26.7813 Q518.75,26.4063 519.0078,26.1719 Q519.2656,25.9375 519.8906,25.9375 L527.5156,25.9375 L527.5156,28.5313 Q527.5156,29.1406 527.2891,29.3984 Q527.0625,29.6563 526.6719,29.6563 Q526.2969,29.6563 526.0625,29.3984 Q525.8281,29.1406 525.8281,28.5313 L525.8281,27.6406 L521.8594,27.6406 L521.8594,30.0938 L523.3438,30.0938 Q523.3438,29.4375 523.4688,29.25 Q523.7344,28.8438 524.2031,28.8438 Q524.5781,28.8438 524.8125,29.1016 Q525.0469,29.3594 525.0469,29.9688 L525.0469,31.9375 Q525.0469,32.4844 524.9219,32.6719 Q524.6563,33.0625 524.2031,33.0625 Q523.7344,33.0625 523.4688,32.6563 Q523.3438,32.4688 523.3438,31.7969 L521.8594,31.7969 Z "/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="42" x="537" y="35.9102">Severity</text><line style="stroke: #000000; stroke-width: 1.5;" x1="509" x2="581" y1="47" y2="47"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="24" x="514" y="62.4189">HIGH</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="38" x="514" y="76.2549">MEDIUM</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="24" x="514" y="90.0908">LOW</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="53" x="514" y="103.9268">UNKNOWN</text><line style="stroke: #000000; stroke-width: 1.5;" x1="509" x2="581" y1="110.3438" y2="110.3438"/><!--link MessagePayload to Device--><path d="M132.575,108.087 C118.454,145.242 97.6624,199.951 83.5137,237.18 " fill="none" id="MessagePayload-Device" style="stroke: #000000; stroke-width: 1.0;"/><!--link MessagePayload to Message--><path d="M168.166,120.563 C177.609,145.408 189.025,175.448 199.344,202.599 " fill="none" id="MessagePayload-Message" style="stroke: #000000; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="163.425,108.087,161.8177,115.1167,167.6884,119.3041,169.2958,112.2744,163.425,108.087" style="stroke: #000000; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="60" x="189" y="169.4951">Messages</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="7" x="158.251" y="129.2325">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="20" x="175.6596" y="192.0768">1..*</text><rect fill="#FFFFFF" height="127" rx="5" ry="5" style="stroke: #FFFFFF; stroke-width: 1.0;" width="301" x="290" y="373"/><svg x="296" y="378">	<rect x=".5" y=".5" width="288" height="116.58" rx="5" ry="5" fill="#f5f5f5" stroke="#50237f"/>	<text transform="translate(-504.5 -714.76)" x="514" y="731.38092" fill="#000000" font-family="sans-serif" font-size="10px" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="36">Symbol</text>	<text transform="translate(-504.5 -714.76)" x="556" y="731.38092" fill="#000000" font-family="sans-serif" font-size="10px" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="28">Name</text>	<text transform="translate(-504.5 -714.76)" x="637" y="731.38092" fill="#000000" font-family="sans-serif" font-size="10px" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="56">Description</text>	<text transform="translate(-504.5,-713.5)" x="523" y="749.38092" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="0"/>	<text transform="translate(-504.5 -712.11)" x="556" y="743.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="24">Class</text>	<text transform="translate(-504.5 -712.11)" x="637" y="743.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="86">A complex Object</text>	<text transform="translate(-504.5,-713.5)" x="523" y="767.38092" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="0"/>	<text transform="translate(-504.5 -712.25)" x="556" y="761.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="58">Aggregation</text>	<text transform="translate(-504.5 -712.09)" x="637" y="761.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="107">List of Objects as Array</text>	<text transform="translate(-504.5,-713.5)" x="523" y="785.38092" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="0"/>	<text transform="translate(-504.5 -712.19)" x="556" y="779.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="59">Composition</text>	<text transform="translate(-504.5 -712.09)" x="637" y="779.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="104">List of Objects as Map</text>	<text transform="translate(-504.5,-713.5)" x="523" y="803.38092" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="0"/>	<text transform="translate(-504.5 -712.39)" x="556" y="797.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="54">Association</text>	<text transform="translate(-504.5 -712.11)" x="637" y="797.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="126">A complex Object as child</text>	<text transform="translate(-504.5,-713.5)" x="523" y="821.38092" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="0"/>	<text transform="translate(-504.5 -712.14)" x="556" y="815.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="69">Specialization</text>	<text transform="translate(-504.5 -712.09)" x="637" y="815.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="147">An extension of another Object</text>	<line x1="6.5" x2="282.5" y1="20.078" y2="20.078" stroke="#000"/>	<line x1="6.5" x2="282.5" y1="38.078" y2="38.078" stroke="#000"/>	<line x1="6.5" x2="282.5" y1="56.078" y2="56.078" stroke="#000"/>	<line x1="6.5" x2="282.5" y1="74.078" y2="74.078" stroke="#000"/>	<line x1="6.5" x2="282.5" y1="92.078" y2="92.078" stroke="#000"/>	<line x1="48.5" x2="48.5" y1="7.5" y2="110.08" stroke="#000"/>	<line x1="129.5" x2="129.5" y1="7.5" y2="110.08" stroke="#000"/>	<path d="m20.871 26.751h12m-11.5-3.1729h11v11h-11z" fill="none" stroke="#000" stroke-width="1px"/>	<g transform="translate(0 1.5453)" fill="none" stroke="#000">		<path d="m24.935 47.446 5.6592-5.6592" stroke-linecap="square" stroke-width="1px"/>		<rect x="20.869" y="47.512" width="4" height="3.9606" ry="0"/>		<rect x="30.774" y="39.593" width="2" height="2" ry="0"/>	</g>	<path d="m21.038 88.97 11.784-11.784" fill="none" stroke="#000" stroke-linecap="square" stroke-width="1px"/>	<g transform="translate(0 .78224)" fill="none" stroke="#000">		<path d="m25.986 93.638h6.7885v6.7885z"/>		<path d="m19.701 106.75 9.6682-9.6682" stroke-linecap="square" stroke-width="1px"/>	</g>	<g transform="translate(0 1.3665)" fill="none" stroke="#000">		<path d="m24.935 65.602 5.6592-5.6592" stroke-linecap="square" stroke-width="1px"/>		<rect x="20.869" y="65.668" width="4" height="3.9606" ry="0"/>		<rect x="30.774" y="57.795" width="2" height="2" ry="0"/>	</g></svg><!--
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="511px" preserveAspectRatio="none" style="width:602px;height:511px;" version="1.1" viewBox="0 0 602 511" width="602px" zoomAndPan="magnify"><defs><filter height="300%" id="fnk02psazc0hx" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><!--class Device--><rect fill="#F5F5F5" filter="url(#fnk02psazc0hx)" height="82.6016" id="Device" style="stroke: #000000; stroke-width: 1.5;" width="124" x="6" y="237.5"/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="37" x="49.5" y="254.957">Device</text><line style="stroke: #000000; stroke-width: 1.5;" x1="7" x2="129" y1="262.5938" y2="262.5938"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="42" x="12" y="278.0127">id: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="84" x="12" y="291.8486">mode[0..1]: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="112" x="12" y="305.6846">state[0..1]: DeviceState</text><line style="stroke: #000000; stroke-width: 1.5;" x1="7" x2="129" y1="312.1016" y2="312.1016"/><!--class DeviceState--><rect fill="#F5F5F5" filter="url(#fnk02psazc0hx)" height="117.1797" id="DeviceState" style="stroke: #000000; stroke-width: 1.5;" width="97" x="243.5" y="8"/><ellipse cx="258.5" cy="24" fill="#FFFFFF" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><path d="M257.3594,24.7969 L257.3594,27.2969 L261.6875,27.2969 L261.6875,26.375 Q261.6875,25.7656 261.9297,25.5 Q262.1719,25.2344 262.5469,25.2344 Q262.9219,25.2344 263.1563,25.5 Q263.3906,25.7656 263.3906,26.375 L263.3906,29 L255.3906,29 Q254.7656,29 254.5078,28.7656 Q254.25,28.5313 254.25,28.1406 Q254.25,27.7656 254.5156,27.5313 Q254.7813,27.2969 255.3906,27.2969 L255.6563,27.2969 L255.6563,20.6406 L255.3906,20.6406 Q254.7656,20.6406 254.5078,20.4063 Q254.25,20.1719 254.25,19.7813 Q254.25,19.4063 254.5078,19.1719 Q254.7656,18.9375 255.3906,18.9375 L263.0156,18.9375 L263.0156,21.5313 Q263.0156,22.1406 262.7891,22.3984 Q262.5625,22.6563 262.1719,22.6563 Q261.7969,22.6563 261.5625,22.3984 Q261.3281,22.1406 261.3281,21.5313 L261.3281,20.6406 L257.3594,20.6406 L257.3594,23.0938 L258.8438,23.0938 Q258.8438,22.4375 258.9688,22.25 Q259.2344,21.8438 259.7031,21.8438 Q260.0781,21.8438 260.3125,22.1016 Q260.5469,22.3594 260.5469,22.9688 L260.5469,24.9375 Q260.5469,25.4844 260.4219,25.6719 Q260.1563,26.0625 259.7031,26.0625 Q259.2344,26.0625 258.9688,25.6563 Q258.8438,25.4688 258.8438,24.7969 L257.3594,24.7969 Z "/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="65" x="272.5" y="28.9102">DeviceState</text><line style="stroke: #000000; stroke-width: 1.5;" x1="244.5" x2="339.5" y1="40" y2="40"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="15" x="249.5" y="55.4189">OK</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="23" x="249.5" y="69.2549">INFO</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="32" x="249.5" y="83.0908">WARN</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="35" x="249.5" y="96.9268">ERROR</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="53" x="249.5" y="110.7627">UNKNOWN</text><line style="stroke: #000000; stroke-width: 1.5;" x1="244.5" x2="339.5" y1="117.1797" y2="117.1797"/><!--class MessagePayload--><rect fill="#F5F5F5" filter="url(#fnk02psazc0hx)" height="82.6016" id="MessagePayload" style="stroke: #000000; stroke-width: 1.5;" width="121" x="87.5" y="25"/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="95" x="100.5" y="42.457">MessagePayload</text><line style="stroke: #000000; stroke-width: 1.5;" x1="88.5" x2="207.5" y1="50.0938" y2="50.0938"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="101" x="93.5" y="65.5127">content-spec : String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="74" x="93.5" y="79.3486">device : Device</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="109" x="93.5" y="93.1846">messages : Messages</text><line style="stroke: #000000; stroke-width: 1.5;" x1="88.5" x2="207.5" y1="99.6016" y2="99.6016"/><!--class Message--><rect fill="#F5F5F5" filter="url(#fnk02psazc0hx)" height="151.7813" id="Message" style="stroke: #000000; stroke-width: 1.5;" width="126" x="165" y="203"/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="51" x="202.5" y="220.457">Message</text><line style="stroke: #000000; stroke-width: 1.5;" x1="166" x2="290" y1="228.0938" y2="228.0938"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="61" x="171" y="243.5127">code : String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="114" x="171" y="257.3486">description[0..1] : String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="78" x="171" y="271.1846">hint[0..1] : String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="87" x="171" y="285.0205">origin[0..1] : String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="112" x="171" y="298.8564">severity[0..1] : Severity</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="77" x="171" y="312.6924">title[0..1] : String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="40" x="171" y="326.5283">ts : Date</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="78" x="171" y="340.3643">type[0..1] : Type</text><line style="stroke: #000000; stroke-width: 1.5;" x1="166" x2="290" y1="346.7813" y2="346.7813"/><!--class Type--><rect fill="#F5F5F5" filter="url(#fnk02psazc0hx)" height="75.6719" id="Type" style="stroke: #000000; stroke-width: 1.5;" width="97" x="375.5" y="28.5"/><ellipse cx="408.05" cy="44.5" fill="#FFFFFF" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><path d="M406.9094,45.2969 L406.9094,47.7969 L411.2375,47.7969 L411.2375,46.875 Q411.2375,46.2656 411.4797,46 Q411.7219,45.7344 412.0969,45.7344 Q412.4719,45.7344 412.7063,46 Q412.9406,46.2656 412.9406,46.875 L412.9406,49.5 L404.9406,49.5 Q404.3156,49.5 404.0578,49.2656 Q403.8,49.0313 403.8,48.6406 Q403.8,48.2656 404.0656,48.0313 Q404.3313,47.7969 404.9406,47.7969 L405.2063,47.7969 L405.2063,41.1406 L404.9406,41.1406 Q404.3156,41.1406 404.0578,40.9063 Q403.8,40.6719 403.8,40.2813 Q403.8,39.9063 404.0578,39.6719 Q404.3156,39.4375 404.9406,39.4375 L412.5656,39.4375 L412.5656,42.0313 Q412.5656,42.6406 412.3391,42.8984 Q412.1125,43.1563 411.7219,43.1563 Q411.3469,43.1563 411.1125,42.8984 Q410.8781,42.6406 410.8781,42.0313 L410.8781,41.1406 L406.9094,41.1406 L406.9094,43.5938 L408.3938,43.5938 Q408.3938,42.9375 408.5188,42.75 Q408.7844,42.3438 409.2531,42.3438 Q409.6281,42.3438 409.8625,42.6016 Q410.0969,42.8594 410.0969,43.4688 L410.0969,45.4375 Q410.0969,45.9844 409.9719,46.1719 Q409.7063,46.5625 409.2531,46.5625 Q408.7844,46.5625 408.5188,46.1563 Q408.3938,45.9688 408.3938,45.2969 L406.9094,45.2969 Z "/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="26" x="425.95" y="49.4102">Type</text><line style="stroke: #000000; stroke-width: 1.5;" x1="376.5" x2="471.5" y1="60.5" y2="60.5"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="36" x="381.5" y="75.9189">DEVICE</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="85" x="381.5" y="89.7549">TECHNICAL_INFO</text><line style="stroke: #000000; stroke-width: 1.5;" x1="376.5" x2="471.5" y1="96.1719" y2="96.1719"/><!--class Severity--><rect fill="#F5F5F5" filter="url(#fnk02psazc0hx)" height="103.3438" id="Severity" style="stroke: #000000; stroke-width: 1.5;" width="74" x="508" y="15"/><ellipse cx="523" cy="31" fill="#FFFFFF" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><path d="M521.8594,31.7969 L521.8594,34.2969 L526.1875,34.2969 L526.1875,33.375 Q526.1875,32.7656 526.4297,32.5 Q526.6719,32.2344 527.0469,32.2344 Q527.4219,32.2344 527.6563,32.5 Q527.8906,32.7656 527.8906,33.375 L527.8906,36 L519.8906,36 Q519.2656,36 519.0078,35.7656 Q518.75,35.5313 518.75,35.1406 Q518.75,34.7656 519.0156,34.5313 Q519.2813,34.2969 519.8906,34.2969 L520.1563,34.2969 L520.1563,27.6406 L519.8906,27.6406 Q519.2656,27.6406 519.0078,27.4063 Q518.75,27.1719 518.75,26.7813 Q518.75,26.4063 519.0078,26.1719 Q519.2656,25.9375 519.8906,25.9375 L527.5156,25.9375 L527.5156,28.5313 Q527.5156,29.1406 527.2891,29.3984 Q527.0625,29.6563 526.6719,29.6563 Q526.2969,29.6563 526.0625,29.3984 Q525.8281,29.1406 525.8281,28.5313 L525.8281,27.6406 L521.8594,27.6406 L521.8594,30.0938 L523.3438,30.0938 Q523.3438,29.4375 523.4688,29.25 Q523.7344,28.8438 524.2031,28.8438 Q524.5781,28.8438 524.8125,29.1016 Q525.0469,29.3594 525.0469,29.9688 L525.0469,31.9375 Q525.0469,32.4844 524.9219,32.6719 Q524.6563,33.0625 524.2031,33.0625 Q523.7344,33.0625 523.4688,32.6563 Q523.3438,32.4688 523.3438,31.7969 L521.8594,31.7969 Z "/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="42" x="537" y="35.9102">Severity</text><line style="stroke: #000000; stroke-width: 1.5;" x1="509" x2="581" y1="47" y2="47"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="24" x="514" y="62.4189">HIGH</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="38" x="514" y="76.2549">MEDIUM</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="24" x="514" y="90.0908">LOW</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="53" x="514" y="103.9268">UNKNOWN</text><line style="stroke: #000000; stroke-width: 1.5;" x1="509" x2="581" y1="110.3438" y2="110.3438"/><!--link MessagePayload to Device--><path d="M132.575,108.087 C118.454,145.242 97.6624,199.951 83.5137,237.18 " fill="none" id="MessagePayload-Device" style="stroke: #000000; stroke-width: 1.0;"/><!--link MessagePayload to Message--><path d="M168.166,120.563 C177.609,145.408 189.025,175.448 199.344,202.599 " fill="none" id="MessagePayload-Message" style="stroke: #000000; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="163.425,108.087,161.8177,115.1167,167.6884,119.3041,169.2958,112.2744,163.425,108.087" style="stroke: #000000; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="60" x="189" y="169.4951">Messages</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="7" x="158.251" y="129.2325">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="20" x="175.6596" y="192.0768">1..*</text><rect fill="#FFFFFF" height="127" rx="5" ry="5" style="stroke: #FFFFFF; stroke-width: 1.0;" width="301" x="290" y="373"/><svg x="296" y="378">	<rect x=".5" y=".5" width="288" height="116.58" rx="5" ry="5" fill="#f5f5f5" stroke="#50237f"/>	<text transform="translate(-504.5 -714.76)" x="514" y="731.38092" fill="#000000" font-family="sans-serif" font-size="10px" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="36">Symbol</text>	<text transform="translate(-504.5 -714.76)" x="556" y="731.38092" fill="#000000" font-family="sans-serif" font-size="10px" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="28">Name</text>	<text transform="translate(-504.5 -714.76)" x="637" y="731.38092" fill="#000000" font-family="sans-serif" font-size="10px" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="56">Description</text>	<text transform="translate(-504.5,-713.5)" x="523" y="749.38092" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="0"/>	<text transform="translate(-504.5 -712.11)" x="556" y="743.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="24">Class</text>	<text transform="translate(-504.5 -712.11)" x="637" y="743.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="86">A complex Object</text>	<text transform="translate(-504.5,-713.5)" x="523" y="767.38092" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="0"/>	<text transform="translate(-504.5 -712.25)" x="556" y="761.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="58">Aggregation</text>	<text transform="translate(-504.5 -712.09)" x="637" y="761.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="107">List of Objects as Array</text>	<text transform="translate(-504.5,-713.5)" x="523" y="785.38092" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="0"/>	<text transform="translate(-504.5 -712.19)" x="556" y="779.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="59">Composition</text>	<text transform="translate(-504.5 -712.09)" x="637" y="779.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="104">List of Objects as Map</text>	<text transform="translate(-504.5,-713.5)" x="523" y="803.38092" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="0"/>	<text transform="translate(-504.5 -712.39)" x="556" y="797.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="54">Association</text>	<text transform="translate(-504.5 -712.11)" x="637" y="797.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="126">A complex Object as child</text>	<text transform="translate(-504.5,-713.5)" x="523" y="821.38092" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="0"/>	<text transform="translate(-504.5 -712.14)" x="556" y="815.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="69">Specialization</text>	<text transform="translate(-504.5 -712.09)" x="637" y="815.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="147">An extension of another Object</text>	<line x1="6.5" x2="282.5" y1="20.078" y2="20.078" stroke="#000"/>	<line x1="6.5" x2="282.5" y1="38.078" y2="38.078" stroke="#000"/>	<line x1="6.5" x2="282.5" y1="56.078" y2="56.078" stroke="#000"/>	<line x1="6.5" x2="282.5" y1="74.078" y2="74.078" stroke="#000"/>	<line x1="6.5" x2="282.5" y1="92.078" y2="92.078" stroke="#000"/>	<line x1="48.5" x2="48.5" y1="7.5" y2="110.08" stroke="#000"/>	<line x1="129.5" x2="129.5" y1="7.5" y2="110.08" stroke="#000"/>	<path d="m20.871 26.751h12m-11.5-3.1729h11v11h-11z" fill="none" stroke="#000" stroke-width="1px"/>	<g transform="translate(0 1.5453)" fill="none" stroke="#000">		<path d="m24.935 47.446 5.6592-5.6592" stroke-linecap="square" stroke-width="1px"/>		<rect x="20.869" y="47.512" width="4" height="3.9606" ry="0"/>		<rect x="30.774" y="39.593" width="2" height="2" ry="0"/>	</g>	<path d="m21.038 88.97 11.784-11.784" fill="none" stroke="#000" stroke-linecap="square" stroke-width="1px"/>	<g transform="translate(0 .78224)" fill="none" stroke="#000">		<path d="m25.986 93.638h6.7885v6.7885z"/>		<path d="m19.701 106.75 9.6682-9.6682" stroke-linecap="square" stroke-width="1px"/>	</g>	<g transform="translate(0 1.3665)" fill="none" stroke="#000">		<path d="m24.935 65.602 5.6592-5.6592" stroke-linecap="square" stroke-width="1px"/>		<rect x="20.869" y="65.668" width="4" height="3.9606" ry="0"/>		<rect x="30.774" y="57.795" width="2" height="2" ry="0"/>	</g></svg><!--
 @startuml
 
 skinparam class {
@@ -49,7 +49,7 @@
 }
 
 class Series {
-	time: [Integer]
+	time[0..1]: [Number]
 	<values>[1..*]: [(Boolean | Number | String)]
 }
 
diff --git a/images/specification/v3/processPayload.svg b/images/specification/v3/processPayload.svg
index cd7719c..695ddaf 100644
--- a/images/specification/v3/processPayload.svg
+++ b/images/specification/v3/processPayload.svg
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="831px" preserveAspectRatio="none" style="width:844px;height:831px;" version="1.1" viewBox="0 0 844 831" width="844px" zoomAndPan="magnify"><defs><filter height="300%" id="f17zuif7bhi0gd" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><!--class Device--><rect fill="#F5F5F5" filter="url(#f17zuif7bhi0gd)" height="82.6016" id="Device" style="stroke: #000000; stroke-width: 1.5;" width="124" x="129.5" y="216.5"/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="37" x="173" y="233.957">Device</text><line style="stroke: #000000; stroke-width: 1.5;" x1="130.5" x2="252.5" y1="241.5938" y2="241.5938"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="42" x="135.5" y="257.0127">id: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="84" x="135.5" y="270.8486">mode[0..1]: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="112" x="135.5" y="284.6846">state[0..1]: DeviceState</text><line style="stroke: #000000; stroke-width: 1.5;" x1="130.5" x2="252.5" y1="291.1016" y2="291.1016"/><!--class Measurement--><rect fill="#F5F5F5" filter="url(#f17zuif7bhi0gd)" height="110.2734" id="Measurement" style="stroke: #000000; stroke-width: 1.5;" width="132" x="288.5" y="203"/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="76" x="316.5" y="220.457">Measurement</text><line style="stroke: #000000; stroke-width: 1.5;" x1="289.5" x2="419.5" y1="228.0938" y2="228.0938"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="82" x="294.5" y="243.5127">code[0..1]: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="120" x="294.5" y="257.3486">context[0..1]: ContextList</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="87" x="294.5" y="271.1846">result[0..1]: Result</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="67" x="294.5" y="285.0205">series: Series</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="37" x="294.5" y="298.8564">ts: Date</text><line style="stroke: #000000; stroke-width: 1.5;" x1="289.5" x2="419.5" y1="305.2734" y2="305.2734"/><!--class Context--><rect fill="#F5F5F5" filter="url(#f17zuif7bhi0gd)" height="96.4375" id="Context" style="stroke: #000000; stroke-width: 1.5;" width="126" x="54.5" y="391"/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="41" x="97" y="408.457">Context</text><line style="stroke: #000000; stroke-width: 1.5;" x1="55.5" x2="179.5" y1="416.0938" y2="416.0938"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="80" x="60.5" y="431.5127">limits[0..1]: Limits</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="114" x="60.5" y="445.3486">namespace[0..1]: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="79" x="60.5" y="459.1846">type[0..1]: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="75" x="60.5" y="473.0205">unit[0..1]: String</text><line style="stroke: #000000; stroke-width: 1.5;" x1="55.5" x2="179.5" y1="479.4375" y2="479.4375"/><!--class Limits--><rect fill="#F5F5F5" filter="url(#f17zuif7bhi0gd)" height="110.2734" id="Limits" style="stroke: #000000; stroke-width: 1.5;" width="156" x="39.5" y="565"/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="34" x="100.5" y="582.457">Limits</text><line style="stroke: #000000; stroke-width: 1.5;" x1="40.5" x2="194.5" y1="590.0938" y2="590.0938"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="142" x="45.5" y="605.5127">lowerError[0..1]: Float | [Float]</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="144" x="45.5" y="619.3486">lowerWarn[0..1]: Float | [Float]</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="121" x="45.5" y="633.1846">target[0..1]:  Float | [Float]</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="142" x="45.5" y="647.0205">upperError[0..1]: Float | [Float]</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="144" x="45.5" y="660.8564">upperWarn[0..1]: Float | [Float]</text><line style="stroke: #000000; stroke-width: 1.5;" x1="40.5" x2="194.5" y1="667.2734" y2="667.2734"/><!--class Series--><rect fill="#F5F5F5" filter="url(#f17zuif7bhi0gd)" height="68.7656" id="Series" style="stroke: #000000; stroke-width: 1.5;" width="218" x="215.5" y="404.5"/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="36" x="306.5" y="421.957">Series</text><line style="stroke: #000000; stroke-width: 1.5;" x1="216.5" x2="432.5" y1="429.5938" y2="429.5938"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="64" x="221.5" y="445.0127">time: [Integer]</text><line style="stroke: #000000; stroke-width: 1.5;" x1="216.5" x2="432.5" y1="451.4297" y2="451.4297"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="206" x="221.5" y="466.8486">&lt;values&gt;[1..*]: [(Boolean | Number | String)]</text><!--class Part--><rect fill="#F5F5F5" filter="url(#f17zuif7bhi0gd)" height="110.2734" id="Part" style="stroke: #000000; stroke-width: 1.5;" width="106" x="455.5" y="203"/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="22" x="497.5" y="220.457">Part</text><line style="stroke: #000000; stroke-width: 1.5;" x1="456.5" x2="560.5" y1="228.0938" y2="228.0938"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="82" x="461.5" y="243.5127">code[0..1]: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="66" x="461.5" y="257.3486">id[0..1]: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="94" x="461.5" y="271.1846">type[0..1]: PartType</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="87" x="461.5" y="285.0205">typeId[0..1]: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="87" x="461.5" y="298.8564">result[0..1]: Result</text><line style="stroke: #000000; stroke-width: 1.5;" x1="456.5" x2="560.5" y1="305.2734" y2="305.2734"/><!--class DeviceState--><rect fill="#F5F5F5" filter="url(#f17zuif7bhi0gd)" height="117.1797" id="DeviceState" style="stroke: #000000; stroke-width: 1.5;" width="97" x="6" y="8"/><ellipse cx="21" cy="24" fill="#FFFFFF" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><path d="M19.8594,24.7969 L19.8594,27.2969 L24.1875,27.2969 L24.1875,26.375 Q24.1875,25.7656 24.4297,25.5 Q24.6719,25.2344 25.0469,25.2344 Q25.4219,25.2344 25.6563,25.5 Q25.8906,25.7656 25.8906,26.375 L25.8906,29 L17.8906,29 Q17.2656,29 17.0078,28.7656 Q16.75,28.5313 16.75,28.1406 Q16.75,27.7656 17.0156,27.5313 Q17.2813,27.2969 17.8906,27.2969 L18.1563,27.2969 L18.1563,20.6406 L17.8906,20.6406 Q17.2656,20.6406 17.0078,20.4063 Q16.75,20.1719 16.75,19.7813 Q16.75,19.4063 17.0078,19.1719 Q17.2656,18.9375 17.8906,18.9375 L25.5156,18.9375 L25.5156,21.5313 Q25.5156,22.1406 25.2891,22.3984 Q25.0625,22.6563 24.6719,22.6563 Q24.2969,22.6563 24.0625,22.3984 Q23.8281,22.1406 23.8281,21.5313 L23.8281,20.6406 L19.8594,20.6406 L19.8594,23.0938 L21.3438,23.0938 Q21.3438,22.4375 21.4688,22.25 Q21.7344,21.8438 22.2031,21.8438 Q22.5781,21.8438 22.8125,22.1016 Q23.0469,22.3594 23.0469,22.9688 L23.0469,24.9375 Q23.0469,25.4844 22.9219,25.6719 Q22.6563,26.0625 22.2031,26.0625 Q21.7344,26.0625 21.4688,25.6563 Q21.3438,25.4688 21.3438,24.7969 L19.8594,24.7969 Z "/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="65" x="35" y="28.9102">DeviceState</text><line style="stroke: #000000; stroke-width: 1.5;" x1="7" x2="102" y1="40" y2="40"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="15" x="12" y="55.4189">OK</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="23" x="12" y="69.2549">INFO</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="32" x="12" y="83.0908">WARN</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="35" x="12" y="96.9268">ERROR</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="53" x="12" y="110.7627">UNKNOWN</text><line style="stroke: #000000; stroke-width: 1.5;" x1="7" x2="102" y1="117.1797" y2="117.1797"/><!--class Result--><rect fill="#F5F5F5" filter="url(#f17zuif7bhi0gd)" height="89.5078" id="Result" style="stroke: #000000; stroke-width: 1.5;" width="68" x="138.5" y="21.5"/><ellipse cx="153.5" cy="37.5" fill="#FFFFFF" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><path d="M152.3594,38.2969 L152.3594,40.7969 L156.6875,40.7969 L156.6875,39.875 Q156.6875,39.2656 156.9297,39 Q157.1719,38.7344 157.5469,38.7344 Q157.9219,38.7344 158.1563,39 Q158.3906,39.2656 158.3906,39.875 L158.3906,42.5 L150.3906,42.5 Q149.7656,42.5 149.5078,42.2656 Q149.25,42.0313 149.25,41.6406 Q149.25,41.2656 149.5156,41.0313 Q149.7813,40.7969 150.3906,40.7969 L150.6563,40.7969 L150.6563,34.1406 L150.3906,34.1406 Q149.7656,34.1406 149.5078,33.9063 Q149.25,33.6719 149.25,33.2813 Q149.25,32.9063 149.5078,32.6719 Q149.7656,32.4375 150.3906,32.4375 L158.0156,32.4375 L158.0156,35.0313 Q158.0156,35.6406 157.7891,35.8984 Q157.5625,36.1563 157.1719,36.1563 Q156.7969,36.1563 156.5625,35.8984 Q156.3281,35.6406 156.3281,35.0313 L156.3281,34.1406 L152.3594,34.1406 L152.3594,36.5938 L153.8438,36.5938 Q153.8438,35.9375 153.9688,35.75 Q154.2344,35.3438 154.7031,35.3438 Q155.0781,35.3438 155.3125,35.6016 Q155.5469,35.8594 155.5469,36.4688 L155.5469,38.4375 Q155.5469,38.9844 155.4219,39.1719 Q155.1563,39.5625 154.7031,39.5625 Q154.2344,39.5625 153.9688,39.1563 Q153.8438,38.9688 153.8438,38.2969 L152.3594,38.2969 Z "/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="36" x="167.5" y="42.4102">Result</text><line style="stroke: #000000; stroke-width: 1.5;" x1="139.5" x2="205.5" y1="53.5" y2="53.5"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="15" x="144.5" y="68.9189">OK</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="22" x="144.5" y="82.7549">NOK</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="53" x="144.5" y="96.5908">UNKNOWN</text><line style="stroke: #000000; stroke-width: 1.5;" x1="139.5" x2="205.5" y1="103.0078" y2="103.0078"/><!--class PartType--><rect fill="#F5F5F5" filter="url(#f17zuif7bhi0gd)" height="75.6719" id="PartType" style="stroke: #000000; stroke-width: 1.5;" width="80" x="14.5" y="220"/><ellipse cx="29.5" cy="236" fill="#FFFFFF" rx="11" ry="11" style="stroke: #000000; stroke-width: 1.0;"/><path d="M28.3594,236.7969 L28.3594,239.2969 L32.6875,239.2969 L32.6875,238.375 Q32.6875,237.7656 32.9297,237.5 Q33.1719,237.2344 33.5469,237.2344 Q33.9219,237.2344 34.1563,237.5 Q34.3906,237.7656 34.3906,238.375 L34.3906,241 L26.3906,241 Q25.7656,241 25.5078,240.7656 Q25.25,240.5313 25.25,240.1406 Q25.25,239.7656 25.5156,239.5313 Q25.7813,239.2969 26.3906,239.2969 L26.6563,239.2969 L26.6563,232.6406 L26.3906,232.6406 Q25.7656,232.6406 25.5078,232.4063 Q25.25,232.1719 25.25,231.7813 Q25.25,231.4063 25.5078,231.1719 Q25.7656,230.9375 26.3906,230.9375 L34.0156,230.9375 L34.0156,233.5313 Q34.0156,234.1406 33.7891,234.3984 Q33.5625,234.6563 33.1719,234.6563 Q32.7969,234.6563 32.5625,234.3984 Q32.3281,234.1406 32.3281,233.5313 L32.3281,232.6406 L28.3594,232.6406 L28.3594,235.0938 L29.8438,235.0938 Q29.8438,234.4375 29.9688,234.25 Q30.2344,233.8438 30.7031,233.8438 Q31.0781,233.8438 31.3125,234.1016 Q31.5469,234.3594 31.5469,234.9688 L31.5469,236.9375 Q31.5469,237.4844 31.4219,237.6719 Q31.1563,238.0625 30.7031,238.0625 Q30.2344,238.0625 29.9688,237.6563 Q29.8438,237.4688 29.8438,236.7969 L28.3594,236.7969 Z "/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="48" x="43.5" y="240.9102">PartType</text><line style="stroke: #000000; stroke-width: 1.5;" x1="15.5" x2="93.5" y1="252" y2="252"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="36" x="20.5" y="267.4189">SINGLE</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="35" x="20.5" y="281.2549">BATCH</text><line style="stroke: #000000; stroke-width: 1.5;" x1="15.5" x2="93.5" y1="287.6719" y2="287.6719"/><!--class ProcessPayload--><rect fill="#F5F5F5" filter="url(#f17zuif7bhi0gd)" height="110.2734" id="ProcessPayload" style="stroke: #000000; stroke-width: 1.5;" width="160" x="372.5" y="11.5"/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="90" x="407.5" y="28.957">ProcessPayload</text><line style="stroke: #000000; stroke-width: 1.5;" x1="373.5" x2="531.5" y1="36.5938" y2="36.5938"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="98" x="378.5" y="52.0127">content-spec: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="71" x="378.5" y="65.8486">device: Device</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="148" x="378.5" y="79.6846">measurements: Measurements</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="68" x="378.5" y="93.5205">part[0..1]: Part</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="86" x="378.5" y="107.3564">process: Process</text><line style="stroke: #000000; stroke-width: 1.5;" x1="373.5" x2="531.5" y1="113.7734" y2="113.7734"/><!--class Process--><rect fill="#F5F5F5" filter="url(#f17zuif7bhi0gd)" height="110.2734" id="Process" style="stroke: #000000; stroke-width: 1.5;" width="135" x="656" y="203"/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="46" x="700.5" y="220.457">Process</text><line style="stroke: #000000; stroke-width: 1.5;" x1="657" x2="790" y1="228.0938" y2="228.0938"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="105" x="662" y="243.5127">externalId[0..1]: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="110" x="662" y="257.3486">program[0..1]: Program</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="87" x="662" y="271.1846">result[0..1]: Result</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="123" x="662" y="285.0205">shutoffPhase[0..1]: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="37" x="662" y="298.8564">ts: Date</text><line style="stroke: #000000; stroke-width: 1.5;" x1="657" x2="790" y1="305.2734" y2="305.2734"/><!--class ProcessMeasurement--><rect fill="#F5F5F5" filter="url(#f17zuif7bhi0gd)" height="82.6016" id="ProcessMeasurement" style="stroke: #000000; stroke-width: 1.5;" width="179" x="469" y="397.5"/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="122" x="497.5" y="414.957">ProcessMeasurement</text><line style="stroke: #000000; stroke-width: 1.5;" x1="470" x2="647" y1="422.5938" y2="422.5938"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="84" x="475" y="438.0127">name[0..1]: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="91" x="475" y="451.8486">phase[0..1] ; String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="167" x="475" y="465.6846">specialValues[0..1]: SpecialValues</text><line style="stroke: #000000; stroke-width: 1.5;" x1="470" x2="647" y1="472.1016" y2="472.1016"/><!--class Program--><rect fill="#F5F5F5" filter="url(#f17zuif7bhi0gd)" height="82.6016" id="Program" style="stroke: #000000; stroke-width: 1.5;" width="140" x="683.5" y="397.5"/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="48" x="729.5" y="414.957">Program</text><line style="stroke: #000000; stroke-width: 1.5;" x1="684.5" x2="822.5" y1="422.5938" y2="422.5938"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="42" x="689.5" y="438.0127">id: String</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="128" x="689.5" y="451.8486">lastChangeDate[0..1]: Date</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="84" x="689.5" y="465.6846">name[0..1]: String</text><line style="stroke: #000000; stroke-width: 1.5;" x1="684.5" x2="822.5" y1="472.1016" y2="472.1016"/><!--class SpecialValue--><rect fill="#F5F5F5" filter="url(#f17zuif7bhi0gd)" height="82.6016" id="SpecialValue" style="stroke: #000000; stroke-width: 1.5;" width="218" x="449.5" y="578.5"/><text fill="#50237F" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="72" x="522.5" y="595.957">SpecialValue</text><line style="stroke: #000000; stroke-width: 1.5;" x1="450.5" x2="666.5" y1="603.5938" y2="603.5938"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="82" x="455.5" y="619.0127">time[0..1]: Integer</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="84" x="455.5" y="632.8486">name[0..1]: String</text><line style="stroke: #000000; stroke-width: 1.5;" x1="450.5" x2="666.5" y1="639.2656" y2="639.2656"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="206" x="455.5" y="654.6846">value: &lt;String, (Boolean | Number | String)&gt;</text><!--link Measurement to Context--><path d="M277.925,316.835 C246.231,340.773 209.942,368.181 179.905,390.867 " fill="none" id="Measurement-Context" style="stroke: #000000; stroke-width: 1.0;"/><polygon fill="#000000" points="288.482,308.861,281.2834,309.2858,278.9069,316.0941,286.1055,315.6692,288.482,308.861" style="stroke: #000000; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="66" x="244.5" y="357.4951">ContextList</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="7" x="273.444" y="311.3164">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="22" x="165.4551" y="380.1113">0..1</text><!--link Context to Limits--><path d="M117.5,487.03 C117.5,510.854 117.5,539.905 117.5,564.679 " fill="none" id="Context-Limits" style="stroke: #000000; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="7" x="109.9641" y="509.0981">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="20" x="96.2188" y="554.0661">0..*</text><!--link ProcessPayload to Device--><path d="M378.057,121.549 C336.471,151.743 285.509,188.744 247.363,216.44 " fill="none" id="ProcessPayload-Device" style="stroke: #000000; stroke-width: 1.0;"/><!--link ProcessPayload to Part--><path d="M468.472,121.549 C476.005,147.039 484.971,177.38 492.506,202.879 " fill="none" id="ProcessPayload-Part" style="stroke: #000000; stroke-width: 1.0;"/><!--link ProcessPayload to Process--><path d="M529.795,121.549 C569.532,149.336 617.515,182.889 655.783,209.648 " fill="none" id="ProcessPayload-Process" style="stroke: #000000; stroke-width: 1.0;"/><!--link ProcessPayload to Measurement--><path d="M396.825,132.625 C391.917,139.92 387.358,147.45 383.5,155 C375.919,169.837 370.074,186.931 365.685,202.832 " fill="none" id="ProcessPayload-Measurement" style="stroke: #000000; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="404.494,121.762,397.7655,124.3558,397.5719,131.5643,404.3004,128.9705,404.494,121.762" style="stroke: #000000; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="86" x="384.5" y="169.4951">Measurements</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="7" x="390.8948" y="143.3676">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="20" x="345.8368" y="192.2387">0..*</text><!--link Process to Program--><path d="M732.582,313.192 C737.118,340.254 742.513,372.446 746.688,397.357 " fill="none" id="Process-Program" style="stroke: #000000; stroke-width: 1.0;"/><!--link Measurement to Series--><path d="M345.418,313.192 C340.451,342.827 334.453,378.612 330.156,404.253 " fill="none" id="Measurement-Series" style="stroke: #000000; stroke-width: 1.0;"/><!--link Measurement to ProcessMeasurement--><path d="M431.471,326.538 C458.641,350.379 488.337,376.436 512.18,397.357 " fill="none" id="Measurement-ProcessMeasurement" style="stroke: #000000; stroke-width: 1.0;"/><polygon fill="none" points="426.677,331.644,416.26,313.192,435.91,321.121,426.677,331.644" style="stroke: #000000; stroke-width: 1.0;"/><!--link ProcessMeasurement to SpecialValue--><path d="M558.5,493.842 C558.5,520.932 558.5,553.232 558.5,578.2334 " fill="none" id="ProcessMeasurement-SpecialValue" style="stroke: #000000; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="558.5,480.618,554.5,486.618,558.5,492.618,562.5,486.618,558.5,480.618" style="stroke: #000000; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="83" x="559.5" y="531.4951">SpecialValues</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="7" x="550.9859" y="501.4558">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="20" x="536.8438" y="567.5476">0..*</text><!--link DeviceState to Result--><!--link DeviceState to PartType--><rect fill="#FFFFFF" height="127" rx="5" ry="5" style="stroke: #FFFFFF; stroke-width: 1.0;" width="301" x="532" y="693"/><svg x="538" y="698">	<rect x=".5" y=".5" width="288" height="116.58" rx="5" ry="5" fill="#f5f5f5" stroke="#50237f"/>	<text transform="translate(-504.5 -714.76)" x="514" y="731.38092" fill="#000000" font-family="sans-serif" font-size="10px" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="36">Symbol</text>	<text transform="translate(-504.5 -714.76)" x="556" y="731.38092" fill="#000000" font-family="sans-serif" font-size="10px" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="28">Name</text>	<text transform="translate(-504.5 -714.76)" x="637" y="731.38092" fill="#000000" font-family="sans-serif" font-size="10px" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="56">Description</text>	<text transform="translate(-504.5,-713.5)" x="523" y="749.38092" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="0"/>	<text transform="translate(-504.5 -712.11)" x="556" y="743.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="24">Class</text>	<text transform="translate(-504.5 -712.11)" x="637" y="743.95898" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="spacingAndGlyphs" textLength="86">A complex Object</text>	<text transform="translate(-504.5,-713.5)" x="523" y="767.38092" fill="#000000" font-family="sans-serif" font-size="10px" lengthAdjust="