INTO-CPS-Association/DTaaS

View on GitHub
docs/user/examples/incubator/figures/dt-structure.svg

Summary

Maintainability
Test Coverage
<?xml version="1.0" encoding="UTF-8"?>
<!-- Do not edit this file with editors other than draw.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="881px" height="297px" viewBox="-0.5 -0.5 881 297" content="&lt;mxfile host=&quot;Electron&quot; modified=&quot;2024-03-15T12:17:05.311Z&quot; agent=&quot;Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.0.4 Chrome/120.0.6099.109 Electron/28.1.0 Safari/537.36&quot; version=&quot;24.0.4&quot; etag=&quot;TgSg9LhX26nwZsurK-2O&quot; type=&quot;device&quot; scale=&quot;1&quot; border=&quot;0&quot;&gt;&#10;  &lt;diagram name=&quot;Page-1&quot; id=&quot;A0zoeHJWJ5ttViKvrhVf&quot;&gt;&#10;    &lt;mxGraphModel dx=&quot;1834&quot; dy=&quot;1174&quot; grid=&quot;1&quot; gridSize=&quot;10&quot; guides=&quot;1&quot; tooltips=&quot;1&quot; connect=&quot;1&quot; arrows=&quot;1&quot; fold=&quot;1&quot; page=&quot;0&quot; pageScale=&quot;1&quot; pageWidth=&quot;850&quot; pageHeight=&quot;1100&quot; math=&quot;1&quot; shadow=&quot;0&quot;&gt;&#10;      &lt;root&gt;&#10;        &lt;mxCell id=&quot;0&quot; /&gt;&#10;        &lt;mxCell id=&quot;1&quot; parent=&quot;0&quot; /&gt;&#10;        &lt;mxCell id=&quot;2&quot; value=&quot;&quot; style=&quot;rounded=1;whiteSpace=wrap;html=1;fontSize=8;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry x=&quot;-400&quot; y=&quot;80&quot; width=&quot;320&quot; height=&quot;80&quot; as=&quot;geometry&quot; /&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;3&quot; value=&quot;&amp;amp;nbsp;(Mock) PhysicalTwin&quot; style=&quot;shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;verticalAlign=top;align=left;fillColor=#f8cecc;strokeColor=#b85450;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry x=&quot;-400&quot; y=&quot;-90&quot; width=&quot;410&quot; height=&quot;160&quot; as=&quot;geometry&quot; /&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;4&quot; value=&quot;DigitalTwin&quot; style=&quot;shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;verticalAlign=top;align=left;fillColor=#d5e8d4;strokeColor=#82b366;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry x=&quot;20&quot; y=&quot;-90&quot; width=&quot;460&quot; height=&quot;180&quot; as=&quot;geometry&quot; /&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;5&quot; value=&quot;&quot; style=&quot;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;&quot; edge=&quot;1&quot; source=&quot;26&quot; target=&quot;7&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint x=&quot;90&quot; y=&quot;85&quot; as=&quot;sourcePoint&quot; /&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;6&quot; value=&quot;&quot; style=&quot;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;entryX=0.5;entryY=0.5;endSize=6;strokeWidth=1;sketch=0;&quot; edge=&quot;1&quot; source=&quot;24&quot; target=&quot;7&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint x=&quot;-160&quot; y=&quot;10&quot; as=&quot;sourcePoint&quot; /&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;7&quot; value=&quot;&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;resizable=0;points=[];outlineConnect=0;sketch=0;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry x=&quot;-200&quot; width=&quot;10&quot; height=&quot;10&quot; as=&quot;geometry&quot; /&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;8&quot; value=&quot;low_level_driver_server&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry x=&quot;-221&quot; y=&quot;42.5&quot; width=&quot;135&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;9&quot; value=&quot;&amp;amp;lt;&amp;amp;lt;MessageExchange&amp;amp;gt;&amp;amp;gt;&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;RabbitMQ&amp;lt;/b&amp;gt;&quot; style=&quot;html=1;dropTarget=0;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry x=&quot;200&quot; y=&quot;115&quot; width=&quot;190&quot; height=&quot;35&quot; as=&quot;geometry&quot; /&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;10&quot; value=&quot;&quot; style=&quot;shape=module;jettyWidth=8;jettyHeight=4;&quot; vertex=&quot;1&quot; parent=&quot;9&quot;&gt;&#10;          &lt;mxGeometry x=&quot;1&quot; width=&quot;20&quot; height=&quot;20&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint x=&quot;-27&quot; y=&quot;7&quot; as=&quot;offset&quot; /&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;11&quot; value=&quot;«TimeSeriesDB»&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;InfluxDB&amp;lt;/b&amp;gt;&quot; style=&quot;html=1;dropTarget=0;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry x=&quot;220&quot; y=&quot;-136&quot; width=&quot;162.5&quot; height=&quot;36&quot; as=&quot;geometry&quot; /&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;12&quot; value=&quot;&quot; style=&quot;shape=module;jettyWidth=8;jettyHeight=4;&quot; vertex=&quot;1&quot; parent=&quot;11&quot;&gt;&#10;          &lt;mxGeometry x=&quot;1&quot; width=&quot;20&quot; height=&quot;20&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint x=&quot;-27&quot; y=&quot;7&quot; as=&quot;offset&quot; /&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;13&quot; value=&quot;&quot; style=&quot;shape=providedRequiredInterface;html=1;verticalLabelPosition=bottom;sketch=0;rotation=-92.4;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry x=&quot;285&quot; y=&quot;63&quot; width=&quot;20&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;14&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;&quot; edge=&quot;1&quot; target=&quot;13&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint x=&quot;295&quot; y=&quot;114&quot; as=&quot;sourcePoint&quot; /&gt;&#10;            &lt;mxPoint x=&quot;70&quot; y=&quot;-37&quot; as=&quot;targetPoint&quot; /&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;15&quot; value=&quot;&quot; style=&quot;shape=providedRequiredInterface;html=1;verticalLabelPosition=bottom;sketch=0;rotation=90;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry x=&quot;291.25&quot; y=&quot;-57&quot; width=&quot;20&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;16&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;&quot; edge=&quot;1&quot; source=&quot;11&quot; target=&quot;15&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint x=&quot;20&quot; y=&quot;80&quot; as=&quot;sourcePoint&quot; /&gt;&#10;            &lt;mxPoint x=&quot;70&quot; y=&quot;30&quot; as=&quot;targetPoint&quot; /&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;17&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;&quot; edge=&quot;1&quot; source=&quot;15&quot; target=&quot;28&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint x=&quot;191.25&quot; y=&quot;-77&quot; as=&quot;sourcePoint&quot; /&gt;&#10;            &lt;mxPoint x=&quot;191.25&quot; y=&quot;-57&quot; as=&quot;targetPoint&quot; /&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;18&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryPerimeter=0;&quot; edge=&quot;1&quot; source=&quot;28&quot; target=&quot;13&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint x=&quot;191.25&quot; y=&quot;-37&quot; as=&quot;sourcePoint&quot; /&gt;&#10;            &lt;mxPoint x=&quot;155&quot; y=&quot;-7&quot; as=&quot;targetPoint&quot; /&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;19&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;&quot; edge=&quot;1&quot; source=&quot;30&quot; target=&quot;13&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint x=&quot;262.4974567230281&quot; y=&quot;38&quot; as=&quot;sourcePoint&quot; /&gt;&#10;            &lt;mxPoint x=&quot;105&quot; y=&quot;-12&quot; as=&quot;targetPoint&quot; /&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;20&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;&quot; edge=&quot;1&quot; source=&quot;30&quot; target=&quot;15&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint x=&quot;262.7631578947369&quot; y=&quot;-22&quot; as=&quot;sourcePoint&quot; /&gt;&#10;            &lt;mxPoint x=&quot;190.83124346270802&quot; y=&quot;103.0087716990115&quot; as=&quot;targetPoint&quot; /&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;21&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;&quot; edge=&quot;1&quot; source=&quot;32&quot; target=&quot;13&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint x=&quot;352.5&quot; y=&quot;38&quot; as=&quot;sourcePoint&quot; /&gt;&#10;            &lt;mxPoint x=&quot;190.83124346270802&quot; y=&quot;103.0087716990115&quot; as=&quot;targetPoint&quot; /&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;22&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;&quot; edge=&quot;1&quot; source=&quot;15&quot; target=&quot;32&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint x=&quot;330&quot; y=&quot;45.063740085160816&quot; as=&quot;sourcePoint&quot; /&gt;&#10;            &lt;mxPoint x=&quot;352.5&quot; y=&quot;-22&quot; as=&quot;targetPoint&quot; /&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;23&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryPerimeter=0;&quot; edge=&quot;1&quot; source=&quot;24&quot; target=&quot;13&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint x=&quot;-75&quot; y=&quot;70&quot; as=&quot;sourcePoint&quot; /&gt;&#10;            &lt;mxPoint x=&quot;195&quot; y=&quot;40&quot; as=&quot;targetPoint&quot; /&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;24&quot; value=&quot;&amp;lt;p style=&amp;quot;margin: 6px 0px 0px ; text-align: center ; font-size: 11px&amp;quot;&amp;gt;&amp;lt;font style=&amp;quot;font-size: 11px&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Controller&amp;lt;br&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;hr style=&amp;quot;font-size: 11px&amp;quot;&amp;gt;&amp;lt;p style=&amp;quot;margin: 0px 0px 0px 8px ; font-size: 11px&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;&quot; style=&quot;align=left;overflow=fill;html=1;dropTarget=0;fontSize=8;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry x=&quot;-160&quot; y=&quot;-26.25&quot; width=&quot;160&quot; height=&quot;62.5&quot; as=&quot;geometry&quot; /&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;25&quot; value=&quot;&quot; style=&quot;shape=component;jettyWidth=8;jettyHeight=4;fontSize=8;&quot; vertex=&quot;1&quot; parent=&quot;24&quot;&gt;&#10;          &lt;mxGeometry x=&quot;1&quot; width=&quot;20&quot; height=&quot;20&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint x=&quot;-24&quot; y=&quot;4&quot; as=&quot;offset&quot; /&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;26&quot; value=&quot;&amp;lt;p style=&amp;quot;margin: 6px 0px 0px ; text-align: center ; font-size: 13px&amp;quot;&amp;gt;&amp;lt;font style=&amp;quot;font-size: 13px&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Plant&amp;lt;br&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;hr style=&amp;quot;font-size: 13px&amp;quot;&amp;gt;&amp;lt;p style=&amp;quot;margin: 0px 0px 0px 8px ; font-size: 13px&amp;quot;&amp;gt;&amp;lt;font style=&amp;quot;font-size: 13px&amp;quot;&amp;gt;&amp;lt;font style=&amp;quot;font-size: 13px&amp;quot;&amp;gt;&amp;lt;b&amp;gt;+ T: Int&amp;lt;span style=&amp;quot;white-space: pre&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;# Air temperature&amp;lt;br&amp;gt;+ heater_on: Bool&amp;amp;nbsp;&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p style=&amp;quot;margin: 0px 0px 0px 8px ; font-size: 13px&amp;quot;&amp;gt;&amp;lt;font style=&amp;quot;font-size: 13px&amp;quot;&amp;gt;&amp;lt;b&amp;gt;# Status of heater&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&quot; style=&quot;align=left;overflow=fill;html=1;dropTarget=0;fontSize=8;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry x=&quot;-392.5&quot; y=&quot;-42.5&quot; width=&quot;170&quot; height=&quot;95&quot; as=&quot;geometry&quot; /&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;27&quot; value=&quot;&quot; style=&quot;shape=component;jettyWidth=8;jettyHeight=4;fontSize=8;&quot; vertex=&quot;1&quot; parent=&quot;26&quot;&gt;&#10;          &lt;mxGeometry x=&quot;1&quot; width=&quot;20&quot; height=&quot;20&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint x=&quot;-24&quot; y=&quot;4&quot; as=&quot;offset&quot; /&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;28&quot; value=&quot;&amp;lt;p style=&amp;quot;margin: 6px 0px 0px ; text-align: center ; font-size: 10px&amp;quot;&amp;gt;&amp;lt;font style=&amp;quot;font-size: 10px&amp;quot;&amp;gt;&amp;lt;b&amp;gt;KalmanFilter&amp;lt;br&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;hr style=&amp;quot;font-size: 10px&amp;quot;&amp;gt;&amp;lt;p style=&amp;quot;margin: 0px 0px 0px 8px ; font-size: 10px&amp;quot;&amp;gt;&amp;lt;font style=&amp;quot;font-size: 10px&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Estimates full Plant state&amp;amp;nbsp;&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p style=&amp;quot;margin: 0px 0px 0px 8px ; font-size: 10px&amp;quot;&amp;gt;&amp;lt;font style=&amp;quot;font-size: 10px&amp;quot;&amp;gt;&amp;lt;b&amp;gt;(T and T_heater)&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&quot; style=&quot;align=left;overflow=fill;html=1;dropTarget=0;fontSize=8;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry x=&quot;30&quot; y=&quot;-19.5&quot; width=&quot;140&quot; height=&quot;55&quot; as=&quot;geometry&quot; /&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;29&quot; value=&quot;&quot; style=&quot;shape=component;jettyWidth=8;jettyHeight=4;fontSize=8;&quot; vertex=&quot;1&quot; parent=&quot;28&quot;&gt;&#10;          &lt;mxGeometry x=&quot;1&quot; width=&quot;20&quot; height=&quot;20&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint x=&quot;-24&quot; y=&quot;4&quot; as=&quot;offset&quot; /&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;30&quot; value=&quot;&amp;lt;p style=&amp;quot;margin: 6px 0px 0px ; text-align: center&amp;quot;&amp;gt;&amp;lt;font style=&amp;quot;font-size: 8px&amp;quot;&amp;gt;&amp;lt;b&amp;gt;SelfAdaptationManager&amp;lt;br&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;hr&amp;gt;&amp;lt;p style=&amp;quot;text-align: center ; margin: 0px 0px 0px 8px ; font-size: 11px&amp;quot;&amp;gt;&amp;lt;font style=&amp;quot;font-size: 11px&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Implements the&amp;amp;nbsp;&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p style=&amp;quot;text-align: center ; margin: 0px 0px 0px 8px ; font-size: 11px&amp;quot;&amp;gt;&amp;lt;font style=&amp;quot;font-size: 11px&amp;quot;&amp;gt;&amp;lt;b&amp;gt;self adaptation loop&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&quot; style=&quot;align=left;overflow=fill;html=1;dropTarget=0;fontSize=8;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry x=&quot;180&quot; y=&quot;-19.5&quot; width=&quot;140&quot; height=&quot;55&quot; as=&quot;geometry&quot; /&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;31&quot; value=&quot;&quot; style=&quot;shape=component;jettyWidth=8;jettyHeight=4;fontSize=8;&quot; vertex=&quot;1&quot; parent=&quot;30&quot;&gt;&#10;          &lt;mxGeometry x=&quot;1&quot; width=&quot;20&quot; height=&quot;20&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint x=&quot;-24&quot; y=&quot;4&quot; as=&quot;offset&quot; /&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;32&quot; value=&quot;&amp;lt;p style=&amp;quot;margin: 6px 0px 0px ; text-align: center ; font-size: 9px&amp;quot;&amp;gt;&amp;lt;font style=&amp;quot;font-size: 9px&amp;quot;&amp;gt;&amp;lt;b&amp;gt;InfluxDataRecorder&amp;lt;br&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;hr style=&amp;quot;font-size: 9px&amp;quot;&amp;gt;&amp;lt;p style=&amp;quot;text-align: justify ; margin: 0px 0px 0px 8px ; font-size: 9px&amp;quot;&amp;gt;&amp;lt;font style=&amp;quot;font-size: 9px&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Convenience service to record&amp;amp;nbsp;&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p style=&amp;quot;text-align: justify ; margin: 0px 0px 0px 8px ; font-size: 9px&amp;quot;&amp;gt;&amp;lt;font style=&amp;quot;font-size: 9px&amp;quot;&amp;gt;&amp;lt;b&amp;gt;all state messages into DB&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&quot; style=&quot;align=left;overflow=fill;html=1;dropTarget=0;fontSize=8;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry x=&quot;330&quot; y=&quot;-19.5&quot; width=&quot;140&quot; height=&quot;55&quot; as=&quot;geometry&quot; /&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;33&quot; value=&quot;&quot; style=&quot;shape=component;jettyWidth=8;jettyHeight=4;fontSize=8;&quot; vertex=&quot;1&quot; parent=&quot;32&quot;&gt;&#10;          &lt;mxGeometry x=&quot;1&quot; width=&quot;20&quot; height=&quot;20&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint x=&quot;-24&quot; y=&quot;4&quot; as=&quot;offset&quot; /&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;34&quot; value=&quot;Legend:&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1;spacing=6;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry x=&quot;-400&quot; y=&quot;80&quot; width=&quot;80&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;35&quot; value=&quot;&amp;lt;p style=&amp;quot;margin: 6px 0px 0px ; text-align: center ; font-size: 9px&amp;quot;&amp;gt;&amp;lt;font style=&amp;quot;font-size: 9px&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Component&amp;lt;br&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;hr style=&amp;quot;font-size: 9px&amp;quot;&amp;gt;&amp;lt;p style=&amp;quot;margin: 0px 0px 0px 8px ; font-size: 9px&amp;quot;&amp;gt;&amp;lt;font style=&amp;quot;font-size: 9px&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Main variables, or responsibility.&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&quot; style=&quot;align=left;overflow=fill;html=1;dropTarget=0;fontSize=8;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry x=&quot;-377.5&quot; y=&quot;110&quot; width=&quot;140&quot; height=&quot;40&quot; as=&quot;geometry&quot; /&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;36&quot; value=&quot;&quot; style=&quot;shape=component;jettyWidth=8;jettyHeight=4;fontSize=8;&quot; vertex=&quot;1&quot; parent=&quot;35&quot;&gt;&#10;          &lt;mxGeometry x=&quot;1&quot; width=&quot;20&quot; height=&quot;20&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint x=&quot;-24&quot; y=&quot;4&quot; as=&quot;offset&quot; /&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;37&quot; value=&quot;&quot; style=&quot;shape=providedRequiredInterface;html=1;verticalLabelPosition=bottom;sketch=0;rotation=0;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry x=&quot;-163.5&quot; y=&quot;120&quot; width=&quot;20&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;38&quot; value=&quot;&amp;lt;font style=&amp;quot;font-size: 10px&amp;quot;&amp;gt;&amp;lt;b&amp;gt;interface provided&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=0;fontSize=8;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry x=&quot;-222.5&quot; y=&quot;115&quot; width=&quot;40&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;39&quot; value=&quot;&amp;lt;font style=&amp;quot;font-size: 10px&amp;quot;&amp;gt;&amp;lt;b&amp;gt;interface required&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=0;fontSize=8;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry x=&quot;-127.5&quot; y=&quot;115&quot; width=&quot;50&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;40&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;fontSize=8;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;&quot; edge=&quot;1&quot; source=&quot;37&quot; target=&quot;39&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint x=&quot;112.5&quot; y=&quot;120&quot; as=&quot;sourcePoint&quot; /&gt;&#10;            &lt;mxPoint x=&quot;162.5&quot; y=&quot;70&quot; as=&quot;targetPoint&quot; /&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;41&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;fontSize=8;&quot; edge=&quot;1&quot; source=&quot;37&quot; target=&quot;38&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint x=&quot;112.5&quot; y=&quot;120&quot; as=&quot;sourcePoint&quot; /&gt;&#10;            &lt;mxPoint x=&quot;162.5&quot; y=&quot;70&quot; as=&quot;targetPoint&quot; /&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;        &lt;mxCell id=&quot;42&quot; value=&quot;&quot; style=&quot;endArrow=none;dashed=1;html=1;rounded=0;&quot; edge=&quot;1&quot; source=&quot;8&quot; target=&quot;7&quot; parent=&quot;1&quot;&gt;&#10;          &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10;            &lt;mxPoint x=&quot;70&quot; y=&quot;100&quot; as=&quot;sourcePoint&quot; /&gt;&#10;            &lt;mxPoint x=&quot;120&quot; y=&quot;50&quot; as=&quot;targetPoint&quot; /&gt;&#10;          &lt;/mxGeometry&gt;&#10;        &lt;/mxCell&gt;&#10;      &lt;/root&gt;&#10;    &lt;/mxGraphModel&gt;&#10;  &lt;/diagram&gt;&#10;&lt;/mxfile&gt;&#10;" style="background-color: rgb(255, 255, 255);"><defs><style xmlns="http://www.w3.org/1999/xhtml" id="MJX-SVG-styles">&#xa;mjx-container[jax="SVG"] {&#xa;  direction: ltr;&#xa;}&#xa;&#xa;mjx-container[jax="SVG"] &gt; svg {&#xa;  overflow: visible;&#xa;  min-height: 1px;&#xa;  min-width: 1px;&#xa;}&#xa;&#xa;mjx-container[jax="SVG"] &gt; svg a {&#xa;  fill: blue;&#xa;  stroke: blue;&#xa;}&#xa;&#xa;mjx-container[jax="SVG"][display="true"] {&#xa;  display: block;&#xa;  text-align: center;&#xa;  margin: 1em 0;&#xa;}&#xa;&#xa;mjx-container[jax="SVG"][display="true"][width="full"] {&#xa;  display: flex;&#xa;}&#xa;&#xa;mjx-container[jax="SVG"][justify="left"] {&#xa;  text-align: left;&#xa;}&#xa;&#xa;mjx-container[jax="SVG"][justify="right"] {&#xa;  text-align: right;&#xa;}&#xa;&#xa;g[data-mml-node="merror"] &gt; g {&#xa;  fill: red;&#xa;  stroke: red;&#xa;}&#xa;&#xa;g[data-mml-node="merror"] &gt; rect[data-background] {&#xa;  fill: yellow;&#xa;  stroke: none;&#xa;}&#xa;&#xa;g[data-mml-node="mtable"] &gt; line[data-line], svg[data-table] &gt; g &gt; line[data-line] {&#xa;  stroke-width: 70px;&#xa;  fill: none;&#xa;}&#xa;&#xa;g[data-mml-node="mtable"] &gt; rect[data-frame], svg[data-table] &gt; g &gt; rect[data-frame] {&#xa;  stroke-width: 70px;&#xa;  fill: none;&#xa;}&#xa;&#xa;g[data-mml-node="mtable"] &gt; .mjx-dashed, svg[data-table] &gt; g &gt; .mjx-dashed {&#xa;  stroke-dasharray: 140;&#xa;}&#xa;&#xa;g[data-mml-node="mtable"] &gt; .mjx-dotted, svg[data-table] &gt; g &gt; .mjx-dotted {&#xa;  stroke-linecap: round;&#xa;  stroke-dasharray: 0,140;&#xa;}&#xa;&#xa;g[data-mml-node="mtable"] &gt; g &gt; svg {&#xa;  overflow: visible;&#xa;}&#xa;&#xa;[jax="SVG"] mjx-tool {&#xa;  display: inline-block;&#xa;  position: relative;&#xa;  width: 0;&#xa;  height: 0;&#xa;}&#xa;&#xa;[jax="SVG"] mjx-tool &gt; mjx-tip {&#xa;  position: absolute;&#xa;  top: 0;&#xa;  left: 0;&#xa;}&#xa;&#xa;mjx-tool &gt; mjx-tip {&#xa;  display: inline-block;&#xa;  padding: .2em;&#xa;  border: 1px solid #888;&#xa;  font-size: 70%;&#xa;  background-color: #F8F8F8;&#xa;  color: black;&#xa;  box-shadow: 2px 2px 5px #AAAAAA;&#xa;}&#xa;&#xa;g[data-mml-node="maction"][data-toggle] {&#xa;  cursor: pointer;&#xa;}&#xa;&#xa;mjx-status {&#xa;  display: block;&#xa;  position: fixed;&#xa;  left: 1em;&#xa;  bottom: 1em;&#xa;  min-width: 25%;&#xa;  padding: .2em .4em;&#xa;  border: 1px solid #888;&#xa;  font-size: 90%;&#xa;  background-color: #F8F8F8;&#xa;  color: black;&#xa;}&#xa;&#xa;foreignObject[data-mjx-xml] {&#xa;  font-family: initial;&#xa;  line-height: normal;&#xa;  overflow: visible;&#xa;}&#xa;&#xa;mjx-container[jax="SVG"] path[data-c], mjx-container[jax="SVG"] use[data-c] {&#xa;  stroke-width: 3;&#xa;}&#xa;</style></defs><rect fill="#ffffff" width="100%" height="100%" x="0" y="0"/><g><g><rect x="0" y="216" width="320" height="80" rx="12" ry="12" fill="#f5f5f5" stroke="#666666" pointer-events="all"/></g><g><path d="M 0 60 L 0 46 L 40 46 L 40 60 M 0 60 L 410 60 L 410 206 L 0 206 Z" fill="#f8cecc" stroke="#b85450" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 63px; margin-left: 2px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: nowrap;"> (Mock) PhysicalTwin</div></div></div></foreignObject><text x="2" y="75" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" font-weight="bold"> (Mock) PhysicalTwin</text></switch></g></g><g><path d="M 420 60 L 420 46 L 460 46 L 460 60 M 420 60 L 880 60 L 880 226 L 420 226 Z" fill="#d5e8d4" stroke="#82b366" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 63px; margin-left: 422px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: nowrap;">DigitalTwin</div></div></div></foreignObject><text x="422" y="75" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" font-weight="bold">DigitalTwin</text></switch></g></g><g><path d="M 177.5 141 L 200 141" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/></g><g><path d="M 240 141 L 213 141" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 205 133 Q 213 133 213 141 Q 213 149 205 149" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><ellipse cx="205" cy="141" rx="5" ry="5" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><rect x="179" y="178.5" width="135" height="20" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 133px; height: 1px; padding-top: 189px; margin-left: 180px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">low_level_driver_server</div></div></div></foreignObject><text x="247" y="192" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">low_level_driver_server</text></switch></g></g><g><rect x="600" y="251" width="190" height="35" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 269px; margin-left: 695px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;">&lt;&lt;MessageExchange&gt;&gt;<br /><b>RabbitMQ</b></div></div></div></foreignObject><text x="695" y="272" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">&lt;&lt;MessageExchange&gt;&gt;...</text></switch></g></g><g><path d="M 767 258 L 783 258 L 783 278 L 767 278 L 767 274 L 763 274 L 763 270 L 767 270 L 767 266 L 763 266 L 763 262 L 767 262 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 767 262 L 771 262 L 771 266 L 767 266 M 767 270 L 771 270 L 771 274 L 767 274" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><rect x="620" y="0" width="162.5" height="36" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 18px; margin-left: 701px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;">«TimeSeriesDB»<br /><b>InfluxDB</b></div></div></div></foreignObject><text x="701" y="22" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">«TimeSeriesDB»...</text></switch></g></g><g><path d="M 759.5 7 L 775.5 7 L 775.5 27 L 759.5 27 L 759.5 23 L 755.5 23 L 755.5 19 L 759.5 19 L 759.5 15 L 755.5 15 L 755.5 11 L 759.5 11 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 759.5 11 L 763.5 11 L 763.5 15 L 759.5 15 M 759.5 19 L 763.5 19 L 763.5 23 L 759.5 23" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><ellipse cx="692" cy="209" rx="7" ry="7" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" transform="rotate(-92.4,695,209)" pointer-events="all"/><path d="M 695 199 Q 705 199 705 209 Q 705 219 695 219" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(-92.4,695,209)" pointer-events="all"/></g><g><path d="M 695 250 L 695.42 218.99" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/></g><g><ellipse cx="698.25" cy="89" rx="7" ry="7" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" transform="rotate(90,701.25,89)" pointer-events="all"/><path d="M 701.25 79 Q 711.25 79 711.25 89 Q 711.25 99 701.25 99" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,701.25,89)" pointer-events="all"/></g><g><path d="M 701.25 36 L 701.25 79" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/></g><g><path d="M 701.25 99 L 500 116.5" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/></g><g><path d="M 500 171.5 L 694.58 199.01" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/></g><g><path d="M 650 171.5 L 694.58 199.01" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/></g><g><path d="M 650 116.5 L 701.25 99" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/></g><g><path d="M 800 171.5 L 694.58 199.01" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/></g><g><path d="M 701.25 99 L 800 116.5" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/></g><g><path d="M 320 172.25 L 694.58 199.01" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/></g><g><rect x="240" y="109.75" width="160" height="62.5" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 162px; height: 63px; padding-top: 110px; margin-left: 240px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 160px; height: 63px; overflow: hidden;"><div style="display: inline-block; font-size: 8px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: nowrap;"><p style="margin: 6px 0px 0px ; text-align: center ; font-size: 11px"><font style="font-size: 11px"><b>Controller<br /></b></font></p><hr style="font-size: 11px" /><p style="margin: 0px 0px 0px 8px ; font-size: 11px"><br /></p></div></div></div></foreignObject><text x="240" y="143" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="8px">Controller...</text></switch></g></g><g><path d="M 380 113.75 L 396 113.75 L 396 133.75 L 380 133.75 L 380 129.75 L 376 129.75 L 376 125.75 L 380 125.75 L 380 121.75 L 376 121.75 L 376 117.75 L 380 117.75 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 380 117.75 L 384 117.75 L 384 121.75 L 380 121.75 M 380 125.75 L 384 125.75 L 384 129.75 L 380 129.75" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><rect x="7.5" y="93.5" width="170" height="95" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 172px; height: 95px; padding-top: 94px; margin-left: 8px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 170px; height: 95px; overflow: hidden;"><div style="display: inline-block; font-size: 8px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: nowrap;"><p style="margin: 6px 0px 0px ; text-align: center ; font-size: 13px"><font style="font-size: 13px"><b>Plant<br /></b></font></p><hr style="font-size: 13px" /><p style="margin: 0px 0px 0px 8px ; font-size: 13px"><font style="font-size: 13px"><font style="font-size: 13px"><b>+ T: Int<span style="white-space: pre"> </span># Air temperature<br />+ heater_on: Bool </b></font></font></p><p style="margin: 0px 0px 0px 8px ; font-size: 13px"><font style="font-size: 13px"><b># Status of heater</b></font></p></div></div></div></foreignObject><text x="8" y="143" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="8px">Plant...</text></switch></g></g><g><path d="M 157.5 97.5 L 173.5 97.5 L 173.5 117.5 L 157.5 117.5 L 157.5 113.5 L 153.5 113.5 L 153.5 109.5 L 157.5 109.5 L 157.5 105.5 L 153.5 105.5 L 153.5 101.5 L 157.5 101.5 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 157.5 101.5 L 161.5 101.5 L 161.5 105.5 L 157.5 105.5 M 157.5 109.5 L 161.5 109.5 L 161.5 113.5 L 157.5 113.5" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><rect x="430" y="116.5" width="140" height="55" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 142px; height: 55px; padding-top: 117px; margin-left: 430px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 140px; height: 55px; overflow: hidden;"><div style="display: inline-block; font-size: 8px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: nowrap;"><p style="margin: 6px 0px 0px ; text-align: center ; font-size: 10px"><font style="font-size: 10px"><b>KalmanFilter<br /></b></font></p><hr style="font-size: 10px" /><p style="margin: 0px 0px 0px 8px ; font-size: 10px"><font style="font-size: 10px"><b>Estimates full Plant state </b></font></p><p style="margin: 0px 0px 0px 8px ; font-size: 10px"><font style="font-size: 10px"><b>(T and T_heater)</b></font></p></div></div></div></foreignObject><text x="430" y="146" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="8px">KalmanFilter...</text></switch></g></g><g><path d="M 550 120.5 L 566 120.5 L 566 140.5 L 550 140.5 L 550 136.5 L 546 136.5 L 546 132.5 L 550 132.5 L 550 128.5 L 546 128.5 L 546 124.5 L 550 124.5 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 550 124.5 L 554 124.5 L 554 128.5 L 550 128.5 M 550 132.5 L 554 132.5 L 554 136.5 L 550 136.5" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><rect x="580" y="116.5" width="140" height="55" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 142px; height: 55px; padding-top: 117px; margin-left: 580px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 140px; height: 55px; overflow: hidden;"><div style="display: inline-block; font-size: 8px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: nowrap;"><p style="margin: 6px 0px 0px ; text-align: center"><font style="font-size: 8px"><b>SelfAdaptationManager<br /></b></font></p><hr /><p style="text-align: center ; margin: 0px 0px 0px 8px ; font-size: 11px"><font style="font-size: 11px"><b>Implements the </b></font></p><p style="text-align: center ; margin: 0px 0px 0px 8px ; font-size: 11px"><font style="font-size: 11px"><b>self adaptation loop</b></font></p></div></div></div></foreignObject><text x="580" y="146" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="8px">SelfAdaptationManager...</text></switch></g></g><g><path d="M 700 120.5 L 716 120.5 L 716 140.5 L 700 140.5 L 700 136.5 L 696 136.5 L 696 132.5 L 700 132.5 L 700 128.5 L 696 128.5 L 696 124.5 L 700 124.5 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 700 124.5 L 704 124.5 L 704 128.5 L 700 128.5 M 700 132.5 L 704 132.5 L 704 136.5 L 700 136.5" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><rect x="730" y="116.5" width="140" height="55" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 142px; height: 55px; padding-top: 117px; margin-left: 730px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 140px; height: 55px; overflow: hidden;"><div style="display: inline-block; font-size: 8px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: nowrap;"><p style="margin: 6px 0px 0px ; text-align: center ; font-size: 9px"><font style="font-size: 9px"><b>InfluxDataRecorder<br /></b></font></p><hr style="font-size: 9px" /><p style="text-align: justify ; margin: 0px 0px 0px 8px ; font-size: 9px"><font style="font-size: 9px"><b>Convenience service to record </b></font></p><p style="text-align: justify ; margin: 0px 0px 0px 8px ; font-size: 9px"><font style="font-size: 9px"><b>all state messages into DB</b></font></p></div></div></div></foreignObject><text x="730" y="146" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="8px">InfluxDataRecorder...</text></switch></g></g><g><path d="M 850 120.5 L 866 120.5 L 866 140.5 L 850 140.5 L 850 136.5 L 846 136.5 L 846 132.5 L 850 132.5 L 850 128.5 L 846 128.5 L 846 124.5 L 850 124.5 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 850 124.5 L 854 124.5 L 854 128.5 L 850 128.5 M 850 132.5 L 854 132.5 L 854 136.5 L 850 136.5" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><rect x="0" y="216" width="80" height="30" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 70px; height: 1px; padding-top: 231px; margin-left: 6px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;">Legend:</div></div></div></foreignObject><text x="6" y="235" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" font-weight="bold">Legend:</text></switch></g></g><g><rect x="22.5" y="246" width="140" height="40" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 142px; height: 40px; padding-top: 246px; margin-left: 23px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 140px; height: 40px; overflow: hidden;"><div style="display: inline-block; font-size: 8px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: nowrap;"><p style="margin: 6px 0px 0px ; text-align: center ; font-size: 9px"><font style="font-size: 9px"><b>Component<br /></b></font></p><hr style="font-size: 9px" /><p style="margin: 0px 0px 0px 8px ; font-size: 9px"><font style="font-size: 9px"><b>Main variables, or responsibility.</b></font></p></div></div></div></foreignObject><text x="23" y="268" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="8px">Component...</text></switch></g></g><g><path d="M 142.5 250 L 158.5 250 L 158.5 270 L 142.5 270 L 142.5 266 L 138.5 266 L 138.5 262 L 142.5 262 L 142.5 258 L 138.5 258 L 138.5 254 L 142.5 254 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 142.5 254 L 146.5 254 L 146.5 258 L 142.5 258 M 142.5 262 L 146.5 262 L 146.5 266 L 142.5 266" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><ellipse cx="243.5" cy="266" rx="7" ry="7" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><path d="M 246.5 256 Q 256.5 256 256.5 266 Q 256.5 276 246.5 276" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><rect x="177.5" y="251" width="40" height="30" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 38px; height: 1px; padding-top: 266px; margin-left: 180px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 8px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font style="font-size: 10px"><b>interface provided</b></font></div></div></div></foreignObject><text x="180" y="268" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="8px">interface...</text></switch></g></g><g><rect x="272.5" y="251" width="50" height="30" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 48px; height: 1px; padding-top: 266px; margin-left: 275px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 8px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font style="font-size: 10px"><b>interface required</b></font></div></div></div></foreignObject><text x="275" y="268" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="8px">interface re...</text></switch></g></g><g><path d="M 256.5 266 L 272.5 266" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/></g><g><path d="M 236.5 266 L 217.5 266" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/></g><g><path d="M 237.76 178.5 L 208.29 144.77" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/></g></g></svg>