| <?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="729.6px" preserveAspectRatio="none" style="width:1423px;height:729px;" version="1.1" viewBox="0 0 1423 729" width="1423.2px" zoomAndPan="magnify"><defs><filter height="300%" id="f1bcnn0h64qkyn" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.4"/><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.8" dy="4.8" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><rect fill="#FFFFFF" filter="url(#f1bcnn0h64qkyn)" height="34.9594" style="stroke: #A80036; stroke-width: 1.2;" width="12" x="1044.6" y="210.8344"/><rect fill="#FFFFFF" filter="url(#f1bcnn0h64qkyn)" height="136.3969" style="stroke: #A80036; stroke-width: 1.2;" width="12" x="1205.4" y="432.5906"/><line style="stroke: #A80036; stroke-width: 1.2; stroke-dasharray: 5.0,5.0;" x1="84" x2="84" y1="103.5562" y2="625.5469"/><line style="stroke: #A80036; stroke-width: 1.2; stroke-dasharray: 5.0,5.0;" x1="285.6" x2="285.6" y1="103.5562" y2="625.5469"/><line style="stroke: #A80036; stroke-width: 1.2; stroke-dasharray: 5.0,5.0;" x1="675.6" x2="675.6" y1="103.5562" y2="625.5469"/><line style="stroke: #A80036; stroke-width: 1.2; stroke-dasharray: 5.0,5.0;" x1="1050.6" x2="1050.6" y1="103.5562" y2="625.5469"/><line style="stroke: #A80036; stroke-width: 1.2; stroke-dasharray: 5.0,5.0;" x1="1211.4" x2="1211.4" y1="103.5562" y2="625.5469"/><text fill="#000000" font-family="sans-serif" font-size="16.8" lengthAdjust="spacingAndGlyphs" textLength="142.8" x="9.6" y="99.5941">Bluetooth Device</text><ellipse cx="84.6" cy="15.6" fill="#FEFECE" filter="url(#f1bcnn0h64qkyn)" rx="9.6" ry="9.6" style="stroke: #A80036; stroke-width: 2.4;"/><path d="M84.6,25.2 L84.6,57.6 M69,34.8 L100.2,34.8 M84.6,57.6 L69,75.6 M84.6,57.6 L100.2,75.6 " fill="none" filter="url(#f1bcnn0h64qkyn)" style="stroke: #A80036; stroke-width: 2.4;"/><text fill="#000000" font-family="sans-serif" font-size="16.8" lengthAdjust="spacingAndGlyphs" textLength="142.8" x="9.6" y="639.941">Bluetooth Device</text><ellipse cx="84.6" cy="655.9031" fill="#FEFECE" filter="url(#f1bcnn0h64qkyn)" rx="9.6" ry="9.6" style="stroke: #A80036; stroke-width: 2.4;"/><path d="M84.6,665.5031 L84.6,697.9031 M69,675.1031 L100.2,675.1031 M84.6,697.9031 L69,715.9031 M84.6,697.9031 L100.2,715.9031 " fill="none" filter="url(#f1bcnn0h64qkyn)" style="stroke: #A80036; stroke-width: 2.4;"/><rect fill="#FEFECE" filter="url(#f1bcnn0h64qkyn)" height="36.3562" style="stroke: #A80036; stroke-width: 1.7999999999999998;" width="87.6" x="240" y="61.2"/><text fill="#000000" font-family="sans-serif" font-size="16.8" lengthAdjust="spacingAndGlyphs" textLength="70.8" x="248.4" y="85.1941">Gateway</text><rect fill="#FEFECE" filter="url(#f1bcnn0h64qkyn)" height="36.3562" style="stroke: #A80036; stroke-width: 1.7999999999999998;" width="87.6" x="240" y="624.3469"/><text fill="#000000" font-family="sans-serif" font-size="16.8" lengthAdjust="spacingAndGlyphs" textLength="70.8" x="248.4" y="648.341">Gateway</text><rect fill="#FFA500" filter="url(#f1bcnn0h64qkyn)" height="36.3562" style="stroke: #A80036; stroke-width: 1.7999999999999998;" width="135.6" x="606" y="61.2"/><text fill="#000000" font-family="sans-serif" font-size="16.8" lengthAdjust="spacingAndGlyphs" textLength="118.8" x="614.4" y="85.1941">MQTT Adapter</text><rect fill="#FFA500" filter="url(#f1bcnn0h64qkyn)" height="36.3562" style="stroke: #A80036; stroke-width: 1.7999999999999998;" width="135.6" x="606" y="624.3469"/><text fill="#000000" font-family="sans-serif" font-size="16.8" lengthAdjust="spacingAndGlyphs" textLength="118.8" x="614.4" y="648.341">MQTT Adapter</text><rect fill="#FFA500" filter="url(#f1bcnn0h64qkyn)" height="36.3562" style="stroke: #A80036; stroke-width: 1.7999999999999998;" width="110.4" x="993" y="61.2"/><text fill="#000000" font-family="sans-serif" font-size="16.8" lengthAdjust="spacingAndGlyphs" textLength="93.6" x="1001.4" y="85.1941">Credentials</text><rect fill="#FFA500" filter="url(#f1bcnn0h64qkyn)" height="36.3562" style="stroke: #A80036; stroke-width: 1.7999999999999998;" width="110.4" x="993" y="624.3469"/><text fill="#000000" font-family="sans-serif" font-size="16.8" lengthAdjust="spacingAndGlyphs" textLength="93.6" x="1001.4" y="648.341">Credentials</text><rect fill="#FFA500" filter="url(#f1bcnn0h64qkyn)" height="36.3562" style="stroke: #A80036; stroke-width: 1.7999999999999998;" width="177.6" x="1120.2" y="61.2"/><text fill="#000000" font-family="sans-serif" font-size="16.8" lengthAdjust="spacingAndGlyphs" textLength="160.8" x="1128.6" y="85.1941">Device Registration</text><rect fill="#FFA500" filter="url(#f1bcnn0h64qkyn)" height="36.3562" style="stroke: #A80036; stroke-width: 1.7999999999999998;" width="177.6" x="1120.2" y="624.3469"/><text fill="#000000" font-family="sans-serif" font-size="16.8" lengthAdjust="spacingAndGlyphs" textLength="160.8" x="1128.6" y="648.341">Device Registration</text><rect fill="#FFFFFF" filter="url(#f1bcnn0h64qkyn)" height="34.9594" style="stroke: #A80036; stroke-width: 1.2;" width="12" x="1044.6" y="210.8344"/><rect fill="#FFFFFF" filter="url(#f1bcnn0h64qkyn)" height="136.3969" style="stroke: #A80036; stroke-width: 1.2;" width="12" x="1205.4" y="432.5906"/><polygon fill="#A80036" points="271.8,136.1156,283.8,140.9156,271.8,145.7156,276.6,140.9156" style="stroke: #A80036; stroke-width: 1.2;"/><line style="stroke: #A80036; stroke-width: 1.2;" x1="84.6" x2="279" y1="140.9156" y2="140.9156"/><text fill="#000000" font-family="sans-serif" font-size="15.6" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="10.8" x="93" y="134.8365">1</text><text fill="#000000" font-family="sans-serif" font-size="15.6" lengthAdjust="spacingAndGlyphs" textLength="157.2" x="108.6" y="134.8365">establish connection</text><polygon fill="#A80036" points="661.8,171.075,673.8,175.875,661.8,180.675,666.6,175.875" style="stroke: #A80036; stroke-width: 1.2;"/><line style="stroke: #A80036; stroke-width: 1.2;" x1="286.2" x2="669" y1="175.875" y2="175.875"/><text fill="#000000" font-family="sans-serif" font-size="15.6" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="10.8" x="294.6" y="169.7959">2</text><text fill="#000000" font-family="sans-serif" font-size="15.6" lengthAdjust="spacingAndGlyphs" textLength="306" x="310.2" y="169.7959">CONNECT(tenant, gatewayId, password)</text><polygon fill="#A80036" points="1030.2,206.0344,1042.2,210.8344,1030.2,215.6344,1035,210.8344" style="stroke: #A80036; stroke-width: 1.2;"/><line style="stroke: #A80036; stroke-width: 1.2;" x1="676.2" x2="1037.4" y1="210.8344" y2="210.8344"/><text fill="#000000" font-family="sans-serif" font-size="15.6" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="10.8" x="684.6" y="204.7553">3</text><text fill="#000000" font-family="sans-serif" font-size="15.6" lengthAdjust="spacingAndGlyphs" textLength="330" x="700.2" y="204.7553">get(tenant, gatewayId, "hashed-password")</text><polygon fill="#A80036" points="689.4,240.9937,677.4,245.7938,689.4,250.5938,684.6,245.7938" style="stroke: #A80036; stroke-width: 1.2;"/><line style="stroke: #A80036; stroke-width: 1.2; stroke-dasharray: 2.0,2.0;" x1="682.2" x2="1049.4" y1="245.7938" y2="245.7938"/><text fill="#000000" font-family="sans-serif" font-size="15.6" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="10.8" x="696.6" y="239.7146">4</text><text fill="#000000" font-family="sans-serif" font-size="15.6" lengthAdjust="spacingAndGlyphs" textLength="114" x="712.2" y="239.7146">password hash</text><path d="M596.4,261.3938 L596.4,291.3938 L751.2,291.3938 L751.2,273.3938 L739.2,261.3938 L596.4,261.3938 " fill="#FBFB77" filter="url(#f1bcnn0h64qkyn)" style="stroke: #A80036; stroke-width: 1.2;"/><path d="M739.2,261.3938 L739.2,273.3938 L751.2,273.3938 L739.2,261.3938 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.2;"/><text fill="#000000" font-family="sans-serif" font-size="15.6" lengthAdjust="spacingAndGlyphs" textLength="129.6" x="603.6" y="281.874">verify credentials</text><polygon fill="#A80036" points="299.4,322.9125,287.4,327.7125,299.4,332.5125,294.6,327.7125" style="stroke: #A80036; stroke-width: 1.2;"/><line style="stroke: #A80036; stroke-width: 1.2;" x1="292.2" x2="675" y1="327.7125" y2="327.7125"/><text fill="#000000" font-family="sans-serif" font-size="15.6" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="10.8" x="306.6" y="321.6334">5</text><text fill="#000000" font-family="sans-serif" font-size="15.6" lengthAdjust="spacingAndGlyphs" textLength="66" x="322.2" y="321.6334">CONACK</text><polygon fill="#A80036" points="271.8,357.8719,283.8,362.6719,271.8,367.4719,276.6,362.6719" style="stroke: #A80036; stroke-width: 1.2;"/><line style="stroke: #A80036; stroke-width: 1.2;" x1="84.6" x2="279" y1="362.6719" y2="362.6719"/><text fill="#000000" font-family="sans-serif" font-size="15.6" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="10.8" x="93" y="356.5928">6</text><text fill="#000000" font-family="sans-serif" font-size="15.6" lengthAdjust="spacingAndGlyphs" textLength="97.2" x="108.6" y="356.5928">sensor value</text><polygon fill="#A80036" points="661.8,392.8313,673.8,397.6312,661.8,402.4313,666.6,397.6312" style="stroke: #A80036; stroke-width: 1.2;"/><line style="stroke: #A80036; stroke-width: 1.2;" x1="286.2" x2="669" y1="397.6312" y2="397.6312"/><text fill="#000000" font-family="sans-serif" font-size="15.6" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="10.8" x="294.6" y="391.5521">7</text><text fill="#000000" font-family="sans-serif" font-size="15.6" lengthAdjust="spacingAndGlyphs" textLength="345.6" x="310.2" y="391.5521">PUBLISH("t/$tenant/$deviceId", sensor value)</text><polygon fill="#A80036" points="1191,427.7906,1203,432.5906,1191,437.3906,1195.8,432.5906" style="stroke: #A80036; stroke-width: 1.2;"/><line style="stroke: #A80036; stroke-width: 1.2;" x1="676.2" x2="1198.2" y1="432.5906" y2="432.5906"/><text fill="#000000" font-family="sans-serif" font-size="15.6" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="10.8" x="684.6" y="426.5115">8</text><text fill="#000000" font-family="sans-serif" font-size="15.6" lengthAdjust="spacingAndGlyphs" textLength="282" x="700.2" y="426.5115">assert(tenantId, deviceId, gatewayId)</text><path d="M1008,448.1906 L1008,532.1906 L1408.8,532.1906 L1408.8,460.1906 L1396.8,448.1906 L1008,448.1906 " fill="#FBFB77" filter="url(#f1bcnn0h64qkyn)" style="stroke: #A80036; stroke-width: 1.2;"/><path d="M1396.8,448.1906 L1396.8,460.1906 L1408.8,460.1906 L1396.8,448.1906 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.2;"/><text fill="#000000" font-family="sans-serif" font-size="15.6" lengthAdjust="spacingAndGlyphs" textLength="76.8" x="1015.2" y="468.6709">verify that</text><text fill="#000000" font-family="sans-serif" font-size="15.6" lengthAdjust="spacingAndGlyphs" textLength="202.8" x="1015.2" y="486.8303">- device and gateway exist</text><text fill="#000000" font-family="sans-serif" font-size="15.6" lengthAdjust="spacingAndGlyphs" textLength="258" x="1015.2" y="504.9896">- device and gateway are enabled</text><text fill="#000000" font-family="sans-serif" font-size="15.6" lengthAdjust="spacingAndGlyphs" textLength="375.6" x="1015.2" y="523.149">- gateway is authorized to act on behalf of device</text><polygon fill="#A80036" points="689.4,564.1875,677.4,568.9875,689.4,573.7875,684.6,568.9875" style="stroke: #A80036; stroke-width: 1.2;"/><line style="stroke: #A80036; stroke-width: 1.2; stroke-dasharray: 2.0,2.0;" x1="682.2" x2="1210.2" y1="568.9875" y2="568.9875"/><text fill="#000000" font-family="sans-serif" font-size="15.6" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="10.8" x="696.6" y="562.9084">9</text><text fill="#000000" font-family="sans-serif" font-size="15.6" lengthAdjust="spacingAndGlyphs" textLength="18" x="712.2" y="562.9084">ok</text><polygon fill="#A80036" points="299.4,599.1469,287.4,603.9469,299.4,608.7469,294.6,603.9469" style="stroke: #A80036; stroke-width: 1.2;"/><line style="stroke: #A80036; stroke-width: 1.2;" x1="292.2" x2="675" y1="603.9469" y2="603.9469"/><text fill="#000000" font-family="sans-serif" font-size="15.6" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="21.6" x="306.6" y="597.8678">10</text><text fill="#000000" font-family="sans-serif" font-size="15.6" lengthAdjust="spacingAndGlyphs" textLength="63.6" x="333" y="597.8678">PUBACK</text><!--MD5=[718c1b61ecfde72d3a105c4a110973ff] |