diff --git a/README.md b/README.md index 3007d8ba1fbc7e54bd1f23d158372ab2122c58a6..962a53fcc208f92efdc45c7a2220d60757fd4168 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ Type-Name | Kind | Label | Description | Category `flick-type` | Text | Last Flick | Last Flick detected (and its direction) | Motion `brightness-type` | Number | Brightness | Brightness (Lux) | Light `acceleration-type` | Number | Acceleration | Acceleration in one direction in meters per second. | Motion -`rotation-type` | Number | Rotation | Rotation around one axis (unitless). | <category>Motion</category> +`rotation-type` | Number | Rotation | Rotation around one axis (unitless). | Motion `activity-type` | String | Activity | Current recognized activity, one of Runnning, Walking, Resting, Unknown. | - `heart-rate-type` | Number | Heart Rate | Heart rate in beats per minute. | - `steps-type` | Number | Steps | Steps run today. | - @@ -67,4 +67,6 @@ Polar M600, Moto 360 | `steps-type` | `steps` | - ## Data flow +[AndroidSensorSharing repository](https://git-st.inf.tu-dresden.de/OpenLicht/AndroidSensorSharing) + diff --git a/material/dataflow.svg b/material/dataflow.svg new file mode 100644 index 0000000000000000000000000000000000000000..7a53c87bc4a7089dfae7adf46518dcd2f9b64beb --- /dev/null +++ b/material/dataflow.svg @@ -0,0 +1,246 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.0//EN' + 'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'> +<svg fill-opacity="1" xmlns:xlink="http://www.w3.org/1999/xlink" color-rendering="auto" color-interpolation="auto" text-rendering="auto" stroke="black" stroke-linecap="square" width="910" stroke-miterlimit="10" shape-rendering="auto" stroke-opacity="1" fill="black" stroke-dasharray="none" font-weight="normal" stroke-width="1" viewBox="120 80 910 510" height="510" xmlns="http://www.w3.org/2000/svg" font-family="'Dialog'" font-style="normal" stroke-linejoin="miter" font-size="12px" stroke-dashoffset="0" image-rendering="auto" +><!--Generated by the Batik Graphics2D SVG Generator--><defs id="genericDefs" + /><g + ><defs id="defs1" + ><clipPath clipPathUnits="userSpaceOnUse" id="clipPath1" + ><path d="M0 0 L2147483647 0 L2147483647 2147483647 L0 2147483647 L0 0 Z" + /></clipPath + ><clipPath clipPathUnits="userSpaceOnUse" id="clipPath2" + ><path d="M0 0 L0 50 L140 50 L140 0 Z" + /></clipPath + ><clipPath clipPathUnits="userSpaceOnUse" id="clipPath3" + ><path d="M0 0 L0 140 L250 140 L250 0 Z" + /></clipPath + ><clipPath clipPathUnits="userSpaceOnUse" id="clipPath4" + ><path d="M0 0 L0 40 L270 40 L270 0 Z" + /></clipPath + ><clipPath clipPathUnits="userSpaceOnUse" id="clipPath5" + ><path d="M0 0 L0 40 L260 40 L260 0 Z" + /></clipPath + ><clipPath clipPathUnits="userSpaceOnUse" id="clipPath6" + ><path d="M0 0 L0 400 L840 400 L840 0 Z" + /></clipPath + ><clipPath clipPathUnits="userSpaceOnUse" id="clipPath7" + ><path d="M0 0 L0 160 L370 160 L370 0 Z" + /></clipPath + ><clipPath clipPathUnits="userSpaceOnUse" id="clipPath8" + ><path d="M0 0 L0 240 L240 240 L240 0 Z" + /></clipPath + ><clipPath clipPathUnits="userSpaceOnUse" id="clipPath9" + ><path d="M0 0 L0 120 L290 120 L290 0 Z" + /></clipPath + ><clipPath clipPathUnits="userSpaceOnUse" id="clipPath10" + ><path d="M0 0 L0 170 L200 170 L200 0 Z" + /></clipPath + ><clipPath clipPathUnits="userSpaceOnUse" id="clipPath11" + ><path d="M0 0 L0 100 L90 100 L90 0 Z" + /></clipPath + ><clipPath clipPathUnits="userSpaceOnUse" id="clipPath12" + ><path d="M0 0 L0 80 L290 80 L290 0 Z" + /></clipPath + ><clipPath clipPathUnits="userSpaceOnUse" id="clipPath13" + ><path d="M0 0 L0 60 L250 60 L250 0 Z" + /></clipPath + ><clipPath clipPathUnits="userSpaceOnUse" id="clipPath14" + ><path d="M0 0 L0 110 L250 110 L250 0 Z" + /></clipPath + ><clipPath clipPathUnits="userSpaceOnUse" id="clipPath15" + ><path d="M0 0 L0 50 L100 50 L100 0 Z" + /></clipPath + ><clipPath clipPathUnits="userSpaceOnUse" id="clipPath16" + ><path d="M0 0 L0 40 L130 40 L130 0 Z" + /></clipPath + ></defs + ><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(140,450)" stroke-opacity="0" stroke="rgb(255,255,255)" + ><rect x="0.5" width="138.5" height="48.5" y="0.5" clip-path="url(#clipPath2)" stroke="none" + /></g + ><g transform="translate(140,450)" + ><rect fill="none" x="0.5" width="138.5" height="48.5" y="0.5" clip-path="url(#clipPath2)" + /><text x="11" font-size="14px" y="18.1094" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve" + >Knowledge-Base</text + ><text x="46" font-size="14px" y="34.2188" clip-path="url(#clipPath2)" font-family="sans-serif" font-style="italic" stroke="none" xml:space="preserve" + >eraser</text + ></g + ><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(780,160)" stroke-opacity="0" stroke="rgb(255,255,255)" + ><rect x="0.5" width="138.5" height="48.5" y="0.5" clip-path="url(#clipPath2)" stroke="none" + /></g + ><g transform="translate(780,160)" + ><rect fill="none" x="0.5" width="138.5" height="48.5" y="0.5" clip-path="url(#clipPath2)" + /><text x="20" font-size="14px" y="18.1094" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve" + >OpenHAB-App</text + ><text x="32" font-size="14px" y="34.2188" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve" + >or WebGUI</text + ></g + ><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(720,280)" stroke-opacity="0" stroke="rgb(255,255,255)" + ><rect x="0.5" width="248.5" height="138.5" y="0.5" clip-path="url(#clipPath3)" stroke="none" + /></g + ><g transform="translate(720,280)" + ><rect fill="none" x="0.5" width="248.5" height="138.5" y="0.5" clip-path="url(#clipPath3)" + /></g + ><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(720,280)" stroke-opacity="0" stroke="rgb(255,255,255)" + ><rect x="5.5" width="240" height="20.1094" y="21.6094" clip-path="url(#clipPath3)" stroke="none" + /></g + ><g transform="translate(720,280)" + ><rect fill="none" x="5.5" width="240" height="20.1094" y="21.6094" clip-path="url(#clipPath3)" + /></g + ><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(720,280)" stroke-opacity="0" stroke="rgb(255,255,255)" + ><rect x="5.5" width="240" height="20.1094" y="77.9375" clip-path="url(#clipPath3)" stroke="none" + /></g + ><g transform="translate(720,280)" + ><rect fill="none" x="5.5" width="240" height="20.1094" y="77.9375" clip-path="url(#clipPath3)" + /><text x="91" font-size="14px" y="18.1094" clip-path="url(#clipPath3)" font-family="sans-serif" stroke="none" xml:space="preserve" + >OpenHAB</text + ><text x="60" font-size="14px" y="38.2188" clip-path="url(#clipPath3)" font-family="sans-serif" stroke="none" xml:space="preserve" + >PolarM600Handler</text + ><text x="56" font-size="14px" y="94.5469" clip-path="url(#clipPath3)" font-family="sans-serif" stroke="none" xml:space="preserve" + >SamsungS6Handler</text + ></g + ><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(380,290)" stroke-opacity="0" stroke="rgb(255,255,255)" + ><rect x="0.5" width="138.5" height="48.5" y="0.5" clip-path="url(#clipPath2)" stroke="none" + /></g + ><g transform="translate(380,290)" + ><rect fill="none" x="0.5" width="138.5" height="48.5" y="0.5" clip-path="url(#clipPath2)" + /><text x="47" font-size="14px" y="18.1094" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve" + >MQTT-</text + ><text x="46" font-size="14px" y="34.2188" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve" + >Broker</text + ></g + ><g fill="rgb(255,165,0)" fill-opacity="0.4902" transform="translate(460,100)" stroke-opacity="0.4902" stroke="rgb(255,165,0)" + ><path d="M0.5 0.5 L258.5 0.5 L269 12.5 L269 39 L0.5 39 Z" stroke="none" clip-path="url(#clipPath4)" + /></g + ><g transform="translate(460,100)" + ><path fill="none" d="M0.5 0.5 L258.5 0.5 L269 12.5 L269 39 L0.5 39 Z" clip-path="url(#clipPath4)" + /><path fill="none" d="M258.5 0.5 L258.5 12.5 L269 12.5" clip-path="url(#clipPath4)" + /><text x="5" font-size="14px" y="18.1094" clip-path="url(#clipPath4)" font-family="sans-serif" stroke="none" xml:space="preserve" + >Runs AndroidSensorSharing/mobile</text + ></g + ><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(380,160)" stroke-opacity="0" stroke="rgb(255,255,255)" + ><rect x="0.5" width="138.5" height="48.5" y="0.5" clip-path="url(#clipPath2)" stroke="none" + /></g + ><g transform="translate(380,160)" + ><rect fill="none" x="0.5" width="138.5" height="48.5" y="0.5" clip-path="url(#clipPath2)" + /><text x="26" font-size="14px" y="18.1094" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve" + >Smartphone</text + ><path fill="none" d="M1 24.1094 L139 24.1094" clip-path="url(#clipPath2)" + /><text x="5" font-size="14px" y="39.2188" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve" + >e.g. an S6</text + ></g + ><g fill="rgb(255,165,0)" fill-opacity="0.4902" transform="translate(180,100)" stroke-opacity="0.4902" stroke="rgb(255,165,0)" + ><path d="M0.5 0.5 L248.5 0.5 L259 12.5 L259 39 L0.5 39 Z" stroke="none" clip-path="url(#clipPath5)" + /></g + ><g transform="translate(180,100)" + ><path fill="none" d="M0.5 0.5 L248.5 0.5 L259 12.5 L259 39 L0.5 39 Z" clip-path="url(#clipPath5)" + /><path fill="none" d="M248.5 0.5 L248.5 12.5 L259 12.5" clip-path="url(#clipPath5)" + /><text x="5" font-size="14px" y="18.1094" clip-path="url(#clipPath5)" font-family="sans-serif" stroke="none" xml:space="preserve" + >Runs AndroidSensorSharing/wear</text + ></g + ><g fill="rgb(255,255,255)" fill-opacity="0" transform="translate(140,160)" stroke-opacity="0" stroke="rgb(255,255,255)" + ><rect x="0.5" width="138.5" height="48.5" y="0.5" clip-path="url(#clipPath2)" stroke="none" + /></g + ><g transform="translate(140,160)" + ><rect fill="none" x="0.5" width="138.5" height="48.5" y="0.5" clip-path="url(#clipPath2)" + /><text x="30" font-size="14px" y="18.1094" clip-path="url(#clipPath2)" font-family="sans-serif" stroke="none" xml:space="preserve" + >Polar M600</text + ></g + ><g fill="blue" transform="translate(170,170)" stroke="blue" + ><path fill="none" d="M751.5 10.5 L820.5 10.5" clip-path="url(#clipPath6)" + /><path fill="none" d="M820.5 10.5 L820.5 380.5" clip-path="url(#clipPath6)" + /><path fill="none" d="M820.5 380.5 L10.5 380.5" clip-path="url(#clipPath6)" + /><path fill="none" d="M10.5 380.5 L10.5 331.5" clip-path="url(#clipPath6)" + /><path fill="none" d="M762.2583 17 L751 10.5 L762.2583 4" clip-path="url(#clipPath6)" + /><path fill="none" d="M17 342.2583 L10.5 331 L4 342.2583" clip-path="url(#clipPath6)" + /><text x="214" font-size="14px" y="375.2188" clip-path="url(#clipPath6)" font-family="sans-serif" stroke="none" xml:space="preserve" + > REST-API for Machine Learning</text + ></g + ><g fill="blue" transform="translate(430,330)" stroke="blue" + ><path fill="none" d="M350.5 91.5 L350.5 120.5" clip-path="url(#clipPath7)" + /><path fill="none" d="M350.5 120.5 L10.5 120.5" clip-path="url(#clipPath7)" + /><path fill="none" d="M10.5 120.5 L10.5 10.5" clip-path="url(#clipPath7)" + /><path fill="none" d="M344 102.2583 L350.5 91 L357 102.2583" clip-path="url(#clipPath7)" + /><text x="113.2197" font-size="14px" y="116" clip-path="url(#clipPath7)" font-family="sans-serif" stroke="none" xml:space="preserve" + >subscribed to topic</text + ><text x="115.3696" font-size="14px" y="132.1094" clip-path="url(#clipPath7)" font-family="sans-serif" stroke="none" xml:space="preserve" + >oh2/in/$item/state</text + ><text x="129.5645" font-size="14px" y="148.2188" clip-path="url(#clipPath7)" font-family="sans-serif" stroke="none" xml:space="preserve" + >for commands</text + ></g + ><g fill="blue" transform="translate(200,330)" stroke="blue" + ><path fill="none" d="M10.5 170.5 L10.5 200.5" clip-path="url(#clipPath8)" + /><path fill="none" d="M10.5 200.5 L220.5 200.5" clip-path="url(#clipPath8)" + /><path fill="none" d="M220.5 200.5 L220.5 11.5" clip-path="url(#clipPath8)" + /><path fill="none" d="M227 22.2583 L220.5 11 L214 22.2583" clip-path="url(#clipPath8)" + /><text x="21.375" font-size="14px" y="196" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" xml:space="preserve" + >publishes changes to topic</text + ><text x="62.2368" font-size="14px" y="212.1094" clip-path="url(#clipPath8)" font-family="sans-serif" stroke="none" xml:space="preserve" + >oh2/in/$item/#</text + ></g + ><g fill="blue" transform="translate(450,330)" stroke="blue" + ><path fill="none" d="M270.5 80.5 L10.5 80.5" clip-path="url(#clipPath9)" + /><path fill="none" d="M10.5 80.5 L10.5 11.5" clip-path="url(#clipPath9)" + /><path fill="none" d="M17 22.2583 L10.5 11 L4 22.2583" clip-path="url(#clipPath9)" + /><text x="46.375" font-size="14px" y="76" clip-path="url(#clipPath9)" font-family="sans-serif" stroke="none" xml:space="preserve" + >publishes changes to topic</text + ><text x="70.2871" font-size="14px" y="92.1094" clip-path="url(#clipPath9)" font-family="sans-serif" stroke="none" xml:space="preserve" + >oh2/out/$item/state</text + ></g + ><g fill="blue" transform="translate(200,300)" stroke="blue" + ><path fill="none" d="M10.5 149.5 L10.5 10.5" clip-path="url(#clipPath10)" + /><path fill="none" d="M10.5 10.5 L180.5 10.5" clip-path="url(#clipPath10)" + /><path fill="none" d="M17 138.7417 L10.5 150 L4 138.7417" clip-path="url(#clipPath10)" + /><text x="14" font-size="14px" y="71.9453" clip-path="url(#clipPath10)" font-family="sans-serif" stroke="none" xml:space="preserve" + >subscribed to topic</text + ><text x="14" font-size="14px" y="88.0547" clip-path="url(#clipPath10)" font-family="sans-serif" stroke="none" xml:space="preserve" + >oh2/out/$item/#</text + ></g + ><g transform="translate(830,200)" + ><path fill="none" d="M10.5 11.5 L10.5 80.5" clip-path="url(#clipPath11)" + /><path fill="none" d="M4 22.2583 L10.5 11 L17 22.2583" clip-path="url(#clipPath11)" + /><path fill="none" d="M4 68.7417 L10.5 80 L17 68.7417" clip-path="url(#clipPath11)" + /><text x="14" font-size="14px" y="53.0547" clip-path="url(#clipPath11)" font-family="sans-serif" stroke="none" xml:space="preserve" + >REST-API</text + ></g + ><g transform="translate(470,330)" + ><path fill="none" d="M269.5 40.5 L10.5 40.5" clip-path="url(#clipPath12)" + /><path fill="none" d="M10.5 40.5 L10.5 10.5" clip-path="url(#clipPath12)" + /><path fill="none" d="M258.7417 34 L270 40.5 L258.7417 47" clip-path="url(#clipPath12)" + /><text x="73.2197" font-size="14px" y="36" clip-path="url(#clipPath12)" font-family="sans-serif" stroke="none" xml:space="preserve" + >subscribed to topic</text + ><text x="70.8545" font-size="14px" y="52.1094" clip-path="url(#clipPath12)" font-family="sans-serif" stroke="none" xml:space="preserve" + >sensors/samsung/#</text + ></g + ><g transform="translate(510,290)" + ><path fill="none" d="M229.5 20.5 L10.5 20.5" clip-path="url(#clipPath13)" + /><path fill="none" d="M218.7417 14 L230 20.5 L218.7417 27" clip-path="url(#clipPath13)" + /><text x="53.2197" font-size="14px" y="16" clip-path="url(#clipPath13)" font-family="sans-serif" stroke="none" xml:space="preserve" + >subscribed to topic</text + ><text x="64.7349" font-size="14px" y="32.1094" clip-path="url(#clipPath13)" font-family="sans-serif" stroke="none" xml:space="preserve" + >sensors/polar/#</text + ></g + ><g transform="translate(440,200)" + ><path fill="none" d="M10.5 89.5 L10.5 10.5" clip-path="url(#clipPath14)" + /><path fill="none" d="M17 78.7417 L10.5 90 L4 78.7417" clip-path="url(#clipPath14)" + /><text x="14" font-size="14px" y="41.9453" clip-path="url(#clipPath14)" font-family="sans-serif" stroke="none" xml:space="preserve" + >publishes changes to</text + ><text x="14" font-size="14px" y="58.0547" clip-path="url(#clipPath14)" font-family="sans-serif" stroke="none" xml:space="preserve" + >topic1 = sensors/polar/{...}</text + ><text x="14" font-size="14px" y="74.1641" clip-path="url(#clipPath14)" font-family="sans-serif" stroke="none" xml:space="preserve" + >topic2 = sensors/samsung/{...}</text + ></g + ><g stroke-dasharray="8,5" stroke-miterlimit="5" transform="translate(440,130)" stroke-linecap="butt" + ><path fill="none" d="M10.5 30.5 L80.5 10.5" clip-path="url(#clipPath15)" + /></g + ><g transform="translate(270,160)" + ><path fill="none" d="M109.5 20.5 L10.5 20.5" clip-path="url(#clipPath16)" + /><path fill="none" d="M98.7417 14 L110 20.5 L98.7417 27" clip-path="url(#clipPath16)" + /><text x="26.0186" font-size="14px" y="16" clip-path="url(#clipPath16)" font-family="sans-serif" stroke="none" xml:space="preserve" + >Bluetooth</text + ></g + ><g stroke-dasharray="8,5" stroke-miterlimit="5" transform="translate(180,130)" stroke-linecap="butt" + ><path fill="none" d="M10.5 30.5 L80.5 10.5" clip-path="url(#clipPath15)" + /></g + ></g +></svg +> diff --git a/material/dataflow.uxf b/material/dataflow.uxf new file mode 100644 index 0000000000000000000000000000000000000000..32102cab3acb522d86d1c6ab331529fb4e098374 --- /dev/null +++ b/material/dataflow.uxf @@ -0,0 +1,271 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<diagram program="umlet" version="14.3.0"> + <zoom_level>10</zoom_level> + <element> + <id>UMLClass</id> + <coordinates> + <x>140</x> + <y>160</y> + <w>140</w> + <h>50</h> + </coordinates> + <panel_attributes>Polar M600 +</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>UMLNote</id> + <coordinates> + <x>180</x> + <y>100</y> + <w>260</w> + <h>40</h> + </coordinates> + <panel_attributes>Runs AndroidSensorSharing/wear +bg=orange</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>180</x> + <y>130</y> + <w>100</w> + <h>50</h> + </coordinates> + <panel_attributes>lt=.</panel_attributes> + <additional_attributes>10.0;30.0;80.0;10.0</additional_attributes> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>380</x> + <y>160</y> + <w>140</w> + <h>50</h> + </coordinates> + <panel_attributes>Smartphone +- +e.g. an S6</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>270</x> + <y>160</y> + <w>130</w> + <h>40</h> + </coordinates> + <panel_attributes>lt=<- +Bluetooth</panel_attributes> + <additional_attributes>110.0;20.0;10.0;20.0</additional_attributes> + </element> + <element> + <id>UMLNote</id> + <coordinates> + <x>460</x> + <y>100</y> + <w>270</w> + <h>40</h> + </coordinates> + <panel_attributes>Runs AndroidSensorSharing/mobile +bg=orange</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>440</x> + <y>130</y> + <w>100</w> + <h>50</h> + </coordinates> + <panel_attributes>lt=.</panel_attributes> + <additional_attributes>10.0;30.0;80.0;10.0</additional_attributes> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>380</x> + <y>290</y> + <w>140</w> + <h>50</h> + </coordinates> + <panel_attributes>MQTT- +Broker</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>440</x> + <y>200</y> + <w>250</w> + <h>110</h> + </coordinates> + <panel_attributes>lt=<- +publishes changes to +topic1 = sensors/polar/{...} +topic2 = sensors/samsung/{...}</panel_attributes> + <additional_attributes>10.0;90.0;10.0;10.0</additional_attributes> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>720</x> + <y>280</y> + <w>250</w> + <h>140</h> + </coordinates> + <panel_attributes>OpenHAB +{innerclass +PolarM600Handler +innerclass} + + +{innerclass +SamsungS6Handler +innerclass}</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>510</x> + <y>290</y> + <w>250</w> + <h>60</h> + </coordinates> + <panel_attributes>lt=<- +subscribed to topic +sensors/polar/# +</panel_attributes> + <additional_attributes>230.0;20.0;10.0;20.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>470</x> + <y>330</y> + <w>290</w> + <h>80</h> + </coordinates> + <panel_attributes>lt=<- +subscribed to topic +sensors/samsung/# +</panel_attributes> + <additional_attributes>270.0;40.0;10.0;40.0;10.0;10.0</additional_attributes> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>780</x> + <y>160</y> + <w>140</w> + <h>50</h> + </coordinates> + <panel_attributes>OpenHAB-App +or WebGUI</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>830</x> + <y>200</y> + <w>90</w> + <h>100</h> + </coordinates> + <panel_attributes>lt=<-> +REST-API</panel_attributes> + <additional_attributes>10.0;10.0;10.0;80.0</additional_attributes> + </element> + <element> + <id>UMLClass</id> + <coordinates> + <x>140</x> + <y>450</y> + <w>140</w> + <h>50</h> + </coordinates> + <panel_attributes>Knowledge-Base +/eraser/ +</panel_attributes> + <additional_attributes/> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>200</x> + <y>300</y> + <w>200</w> + <h>170</h> + </coordinates> + <panel_attributes>lt=<- +fg=blue +subscribed to topic +oh2/out/$item/# +</panel_attributes> + <additional_attributes>10.0;150.0;10.0;10.0;180.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>450</x> + <y>330</y> + <w>290</w> + <h>120</h> + </coordinates> + <panel_attributes>lt=-> +fg=blue +publishes changes to topic +oh2/out/$item/state +</panel_attributes> + <additional_attributes>270.0;80.0;10.0;80.0;10.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>200</x> + <y>330</y> + <w>240</w> + <h>240</h> + </coordinates> + <panel_attributes>lt=-> +fg=blue +publishes changes to topic +oh2/in/$item/# +</panel_attributes> + <additional_attributes>10.0;170.0;10.0;200.0;220.0;200.0;220.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>430</x> + <y>330</y> + <w>370</w> + <h>160</h> + </coordinates> + <panel_attributes>lt=<- +fg=blue +subscribed to topic +oh2/in/$item/state +for commands</panel_attributes> + <additional_attributes>350.0;90.0;350.0;120.0;10.0;120.0;10.0;10.0</additional_attributes> + </element> + <element> + <id>Relation</id> + <coordinates> + <x>170</x> + <y>170</y> + <w>840</w> + <h>400</h> + </coordinates> + <panel_attributes>lt=<-> +fg=blue +r2pos=200,00 +r2= REST-API for Machine Learning</panel_attributes> + <additional_attributes>750.0;10.0;820.0;10.0;820.0;380.0;10.0;380.0;10.0;330.0</additional_attributes> + </element> +</diagram>