split ConnectionG3(P) in server and client class

This commit is contained in:
Stefan Allius
2024-09-27 00:47:44 +02:00
parent 73526b7dc6
commit aa7c1832ef
10 changed files with 548 additions and 475 deletions

View File

@@ -4,504 +4,547 @@
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: G Pages: 1 -->
<svg width="755pt" height="1784pt"
viewBox="0.00 0.00 754.50 1784.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<svg width="924pt" height="1784pt"
viewBox="0.00 0.00 924.23 1784.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 1780)">
<title>G</title>
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-1780 750.5,-1780 750.5,4 -4,4"/>
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-1780 920.2315,-1780 920.2315,4 -4,4"/>
<!-- A0 -->
<g id="node1" class="node">
<title>A0</title>
<polygon fill="#fff8dc" stroke="#000000" points="352.6964,-1752 244.3036,-1752 244.3036,-1716 358.6964,-1716 358.6964,-1746 352.6964,-1752"/>
<polyline fill="none" stroke="#000000" points="352.6964,-1752 352.6964,-1746 "/>
<polyline fill="none" stroke="#000000" points="358.6964,-1746 352.6964,-1746 "/>
<text text-anchor="middle" x="301.5" y="-1737" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">You can stick notes</text>
<text text-anchor="middle" x="301.5" y="-1725" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">on diagrams too!</text>
<polygon fill="#fff8dc" stroke="#000000" points="389.6964,-1752 281.3036,-1752 281.3036,-1716 395.6964,-1716 395.6964,-1746 389.6964,-1752"/>
<polyline fill="none" stroke="#000000" points="389.6964,-1752 389.6964,-1746 "/>
<polyline fill="none" stroke="#000000" points="395.6964,-1746 389.6964,-1746 "/>
<text text-anchor="middle" x="338.5" y="-1737" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">You can stick notes</text>
<text text-anchor="middle" x="338.5" y="-1725" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">on diagrams too!</text>
</g>
<!-- A1 -->
<g id="node2" class="node">
<title>A1</title>
<polygon fill="none" stroke="#000000" points="118.5,-572 118.5,-616 240.5,-616 240.5,-572 118.5,-572"/>
<text text-anchor="start" x="169.777" y="-597" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">Mqtt</text>
<text text-anchor="start" x="146.9815" y="-585" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">&lt;&lt;Singleton&gt;&gt;</text>
<polygon fill="none" stroke="#000000" points="118.5,-516 118.5,-572 240.5,-572 240.5,-516 118.5,-516"/>
<text text-anchor="start" x="136.9875" y="-553" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">&lt;static&gt;ha_restarts</text>
<text text-anchor="start" x="144.7665" y="-541" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">&lt;static&gt;__client</text>
<text text-anchor="start" x="128.3735" y="-529" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">&lt;static&gt;__cb_MqttIsUp</text>
<polygon fill="none" stroke="#000000" points="118.5,-472 118.5,-516 240.5,-516 240.5,-472 118.5,-472"/>
<text text-anchor="start" x="141.436" y="-497" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">&lt;async&gt;publish()</text>
<text text-anchor="start" x="145.6045" y="-485" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">&lt;async&gt;close()</text>
<polygon fill="none" stroke="#000000" points="527.5,-572 527.5,-616 649.5,-616 649.5,-572 527.5,-572"/>
<text text-anchor="start" x="578.777" y="-597" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">Mqtt</text>
<text text-anchor="start" x="555.9815" y="-585" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">&lt;&lt;Singleton&gt;&gt;</text>
<polygon fill="none" stroke="#000000" points="527.5,-516 527.5,-572 649.5,-572 649.5,-516 527.5,-516"/>
<text text-anchor="start" x="545.9875" y="-553" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">&lt;static&gt;ha_restarts</text>
<text text-anchor="start" x="553.7665" y="-541" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">&lt;static&gt;__client</text>
<text text-anchor="start" x="537.3735" y="-529" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">&lt;static&gt;__cb_MqttIsUp</text>
<polygon fill="none" stroke="#000000" points="527.5,-472 527.5,-516 649.5,-516 649.5,-472 527.5,-472"/>
<text text-anchor="start" x="550.436" y="-497" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">&lt;async&gt;publish()</text>
<text text-anchor="start" x="554.6045" y="-485" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">&lt;async&gt;close()</text>
</g>
<!-- A2 -->
<g id="node3" class="node">
<title>A2</title>
<polygon fill="none" stroke="#000000" points="125.5,-342 125.5,-374 233.5,-374 233.5,-342 125.5,-342"/>
<text text-anchor="start" x="162.5535" y="-355" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">Inverter</text>
<polygon fill="none" stroke="#000000" points="125.5,-250 125.5,-342 233.5,-342 233.5,-250 125.5,-250"/>
<text text-anchor="start" x="155.604" y="-323" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">cls.db_stat</text>
<text text-anchor="start" x="148.9405" y="-311" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">cls.entity_prfx</text>
<text text-anchor="start" x="139.7755" y="-299" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">cls.discovery_prfx</text>
<text text-anchor="start" x="139.2115" y="-287" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">cls.proxy_node_id</text>
<text text-anchor="start" x="135.3225" y="-275" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">cls.proxy_unique_id</text>
<text text-anchor="start" x="151.1655" y="-263" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">cls.mqtt:Mqtt</text>
<polygon fill="none" stroke="#000000" points="125.5,-230 125.5,-250 233.5,-250 233.5,-230 125.5,-230"/>
<polygon fill="none" stroke="#000000" points="533.5,-342 533.5,-374 641.5,-374 641.5,-342 533.5,-342"/>
<text text-anchor="start" x="570.5535" y="-355" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">Inverter</text>
<polygon fill="none" stroke="#000000" points="533.5,-250 533.5,-342 641.5,-342 641.5,-250 533.5,-250"/>
<text text-anchor="start" x="563.604" y="-323" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">cls.db_stat</text>
<text text-anchor="start" x="556.9405" y="-311" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">cls.entity_prfx</text>
<text text-anchor="start" x="547.7755" y="-299" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">cls.discovery_prfx</text>
<text text-anchor="start" x="547.2115" y="-287" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">cls.proxy_node_id</text>
<text text-anchor="start" x="543.3225" y="-275" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">cls.proxy_unique_id</text>
<text text-anchor="start" x="559.1655" y="-263" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">cls.mqtt:Mqtt</text>
<polygon fill="none" stroke="#000000" points="533.5,-230 533.5,-250 641.5,-250 641.5,-230 533.5,-230"/>
</g>
<!-- A1&#45;&gt;A2 -->
<g id="edge3" class="edge">
<title>A1&#45;&gt;A2</title>
<path fill="none" stroke="#000000" d="M179.5,-461.4521C179.5,-437.2513 179.5,-410.7602 179.5,-386.443"/>
<polygon fill="#000000" stroke="#000000" points="179.5,-471.7198 175.0001,-461.7198 179.5,-466.7198 179.5001,-461.7198 179.5001,-461.7198 179.5001,-461.7198 179.5,-466.7198 184.0001,-461.7199 179.5,-471.7198 179.5,-471.7198"/>
<polygon fill="#000000" stroke="#000000" points="179.5001,-386.3256 175.5,-380.3256 179.5,-374.3256 183.5,-380.3256 179.5001,-386.3256"/>
<path fill="none" stroke="#000000" d="M588.1589,-461.4521C588.0589,-437.2513 587.9494,-410.7602 587.8489,-386.443"/>
<polygon fill="#000000" stroke="#000000" points="588.2013,-471.7198 583.6599,-461.7385 588.1806,-466.7199 588.1599,-461.7199 588.1599,-461.7199 588.1599,-461.7199 588.1806,-466.7199 592.6599,-461.7013 588.2013,-471.7198 588.2013,-471.7198"/>
<polygon fill="#000000" stroke="#000000" points="587.8486,-386.3255 583.8237,-380.3421 587.7989,-374.3256 591.8237,-380.309 587.8486,-386.3255"/>
</g>
<!-- A3 -->
<g id="node4" class="node">
<title>A3</title>
<polygon fill="none" stroke="#000000" points="267.5,-100 267.5,-132 389.5,-132 389.5,-100 267.5,-100"/>
<text text-anchor="start" x="304.8845" y="-113" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">InverterG3</text>
<polygon fill="none" stroke="#000000" points="267.5,-68 267.5,-100 389.5,-100 389.5,-68 267.5,-68"/>
<text text-anchor="start" x="297.9355" y="-81" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">__ha_restarts</text>
<polygon fill="none" stroke="#000000" points="267.5,0 267.5,-68 389.5,-68 389.5,0 267.5,0"/>
<text text-anchor="start" x="277.1035" y="-49" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">async_create_remote()</text>
<text text-anchor="start" x="287.382" y="-37" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">async_publ_mqtt()</text>
<text text-anchor="start" x="313.5025" y="-13" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
<polygon fill="none" stroke="#000000" points="659.5,-100 659.5,-132 781.5,-132 781.5,-100 659.5,-100"/>
<text text-anchor="start" x="696.8845" y="-113" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">InverterG3</text>
<polygon fill="none" stroke="#000000" points="659.5,-68 659.5,-100 781.5,-100 781.5,-68 659.5,-68"/>
<text text-anchor="start" x="689.9355" y="-81" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">__ha_restarts</text>
<polygon fill="none" stroke="#000000" points="659.5,0 659.5,-68 781.5,-68 781.5,0 659.5,0"/>
<text text-anchor="start" x="669.1035" y="-49" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">async_create_remote()</text>
<text text-anchor="start" x="679.382" y="-37" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">async_publ_mqtt()</text>
<text text-anchor="start" x="705.5025" y="-13" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
</g>
<!-- A2&#45;&gt;A3 -->
<g id="edge1" class="edge">
<title>A2&#45;&gt;A3</title>
<path fill="none" stroke="#000000" d="M219.9257,-220.8317C227.1087,-207.6556 234.7733,-194.3049 242.5,-182 252.8987,-165.4397 264.9445,-148.202 276.6683,-132.2371"/>
<polygon fill="none" stroke="#000000" points="216.6962,-219.4468 215.0349,-229.9106 222.8589,-222.7666 216.6962,-219.4468"/>
<path fill="none" stroke="#000000" d="M629.2288,-220.9183C636.2023,-207.8354 643.4603,-194.4914 650.5,-182 659.6809,-165.7093 669.9104,-148.3496 679.6517,-132.1561"/>
<polygon fill="none" stroke="#000000" points="626.0478,-219.4462 624.4527,-229.9202 632.2314,-222.727 626.0478,-219.4462"/>
</g>
<!-- A4 -->
<g id="node5" class="node">
<title>A4</title>
<polygon fill="none" stroke="#000000" points="120.5,-94 120.5,-126 239.5,-126 239.5,-94 120.5,-94"/>
<text text-anchor="start" x="153.05" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">InverterG3P</text>
<polygon fill="none" stroke="#000000" points="120.5,-62 120.5,-94 239.5,-94 239.5,-62 120.5,-62"/>
<text text-anchor="start" x="149.4355" y="-75" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">__ha_restarts</text>
<polygon fill="none" stroke="#000000" points="120.5,-6 120.5,-62 239.5,-62 239.5,-6 120.5,-6"/>
<text text-anchor="start" x="130.268" y="-43" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">async_create_remote(</text>
<text text-anchor="start" x="137.2175" y="-31" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">)async_publ_mqtt()</text>
<text text-anchor="start" x="165.0025" y="-19" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
<polygon fill="none" stroke="#000000" points="140.5,-94 140.5,-126 259.5,-126 259.5,-94 140.5,-94"/>
<text text-anchor="start" x="173.05" y="-107" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">InverterG3P</text>
<polygon fill="none" stroke="#000000" points="140.5,-62 140.5,-94 259.5,-94 259.5,-62 140.5,-62"/>
<text text-anchor="start" x="169.4355" y="-75" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">__ha_restarts</text>
<polygon fill="none" stroke="#000000" points="140.5,-6 140.5,-62 259.5,-62 259.5,-6 140.5,-6"/>
<text text-anchor="start" x="150.268" y="-43" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">async_create_remote(</text>
<text text-anchor="start" x="157.2175" y="-31" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">)async_publ_mqtt()</text>
<text text-anchor="start" x="185.0025" y="-19" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
</g>
<!-- A2&#45;&gt;A4 -->
<g id="edge2" class="edge">
<title>A2&#45;&gt;A4</title>
<path fill="none" stroke="#000000" d="M179.5,-219.6269C179.5,-188.8617 179.5,-154.5312 179.5,-126.1395"/>
<polygon fill="none" stroke="#000000" points="176.0001,-219.9098 179.5,-229.9099 183.0001,-219.9099 176.0001,-219.9098"/>
<path fill="none" stroke="#000000" d="M557.5402,-220.9191C548.8662,-206.1506 537.9862,-192.2111 524.5,-182 439.0207,-117.2791 386.2481,-176.0546 288.5,-132 278.5036,-127.4947 268.5465,-121.7236 259.1067,-115.4739"/>
<polygon fill="none" stroke="#000000" points="554.4897,-222.6352 562.3955,-229.6885 560.6137,-219.2445 554.4897,-222.6352"/>
</g>
<!-- A5 -->
<g id="node6" class="node">
<title>A5</title>
<polygon fill="none" stroke="#000000" points="377.5,-1744 377.5,-1776 448.5,-1776 448.5,-1744 377.5,-1744"/>
<text text-anchor="start" x="387.445" y="-1757" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">IterRegistry</text>
<polygon fill="none" stroke="#000000" points="377.5,-1724 377.5,-1744 448.5,-1744 448.5,-1724 377.5,-1724"/>
<polygon fill="none" stroke="#000000" points="377.5,-1692 377.5,-1724 448.5,-1724 448.5,-1692 377.5,-1692"/>
<text text-anchor="start" x="394.939" y="-1705" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">__iter__</text>
<polygon fill="none" stroke="#000000" points="414.5,-1744 414.5,-1776 485.5,-1776 485.5,-1744 414.5,-1744"/>
<text text-anchor="start" x="424.445" y="-1757" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">IterRegistry</text>
<polygon fill="none" stroke="#000000" points="414.5,-1724 414.5,-1744 485.5,-1744 485.5,-1724 414.5,-1724"/>
<polygon fill="none" stroke="#000000" points="414.5,-1692 414.5,-1724 485.5,-1724 485.5,-1692 414.5,-1692"/>
<text text-anchor="start" x="431.939" y="-1705" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">__iter__</text>
</g>
<!-- A6 -->
<g id="node7" class="node">
<title>A6</title>
<polygon fill="none" stroke="#000000" points="345.5,-1610 345.5,-1642 479.5,-1642 479.5,-1610 345.5,-1610"/>
<text text-anchor="start" x="392.2175" y="-1623" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">Message</text>
<polygon fill="none" stroke="#000000" points="345.5,-1434 345.5,-1610 479.5,-1610 479.5,-1434 345.5,-1434"/>
<text text-anchor="start" x="375.8265" y="-1591" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">server_side:bool</text>
<text text-anchor="start" x="373.043" y="-1579" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">header_valid:bool</text>
<text text-anchor="start" x="365.814" y="-1567" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">header_len:unsigned</text>
<text text-anchor="start" x="371.648" y="-1555" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">data_len:unsigned</text>
<text text-anchor="start" x="390.8245" y="-1543" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">unique_id</text>
<text text-anchor="start" x="394.7135" y="-1531" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">node_id</text>
<text text-anchor="start" x="391.6585" y="-1519" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">sug_area</text>
<text text-anchor="start" x="362.489" y="-1507" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">_recv_buffer:bytearray</text>
<text text-anchor="start" x="361.0945" y="-1495" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">_send_buffer:bytearray</text>
<text text-anchor="start" x="355.2665" y="-1483" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">_forward_buffer:bytearray</text>
<text text-anchor="start" x="394.7135" y="-1471" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">db:Infos</text>
<text text-anchor="start" x="383.326" y="-1459" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">new_data:list</text>
<text text-anchor="start" x="401.662" y="-1447" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">state</text>
<polygon fill="none" stroke="#000000" points="345.5,-1366 345.5,-1434 479.5,-1434 479.5,-1366 345.5,-1366"/>
<text text-anchor="start" x="362.2095" y="-1415" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">_read():void&lt;abstract&gt;</text>
<text text-anchor="start" x="386.9445" y="-1403" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close():void</text>
<text text-anchor="start" x="372.7725" y="-1391" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">inc_counter():void</text>
<text text-anchor="start" x="371.1025" y="-1379" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">dec_counter():void</text>
<polygon fill="none" stroke="#000000" points="382.5,-1610 382.5,-1642 516.5,-1642 516.5,-1610 382.5,-1610"/>
<text text-anchor="start" x="429.2175" y="-1623" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">Message</text>
<polygon fill="none" stroke="#000000" points="382.5,-1434 382.5,-1610 516.5,-1610 516.5,-1434 382.5,-1434"/>
<text text-anchor="start" x="412.8265" y="-1591" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">server_side:bool</text>
<text text-anchor="start" x="410.043" y="-1579" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">header_valid:bool</text>
<text text-anchor="start" x="402.814" y="-1567" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">header_len:unsigned</text>
<text text-anchor="start" x="408.648" y="-1555" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">data_len:unsigned</text>
<text text-anchor="start" x="427.8245" y="-1543" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">unique_id</text>
<text text-anchor="start" x="431.7135" y="-1531" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">node_id</text>
<text text-anchor="start" x="428.6585" y="-1519" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">sug_area</text>
<text text-anchor="start" x="399.489" y="-1507" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">_recv_buffer:bytearray</text>
<text text-anchor="start" x="398.0945" y="-1495" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">_send_buffer:bytearray</text>
<text text-anchor="start" x="392.2665" y="-1483" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">_forward_buffer:bytearray</text>
<text text-anchor="start" x="431.7135" y="-1471" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">db:Infos</text>
<text text-anchor="start" x="420.326" y="-1459" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">new_data:list</text>
<text text-anchor="start" x="438.662" y="-1447" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">state</text>
<polygon fill="none" stroke="#000000" points="382.5,-1366 382.5,-1434 516.5,-1434 516.5,-1366 382.5,-1366"/>
<text text-anchor="start" x="399.2095" y="-1415" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">_read():void&lt;abstract&gt;</text>
<text text-anchor="start" x="423.9445" y="-1403" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close():void</text>
<text text-anchor="start" x="409.7725" y="-1391" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">inc_counter():void</text>
<text text-anchor="start" x="408.1025" y="-1379" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">dec_counter():void</text>
</g>
<!-- A5&#45;&gt;A6 -->
<g id="edge4" class="edge">
<title>A5&#45;&gt;A6</title>
<path fill="none" stroke="#000000" d="M412.5,-1681.5582C412.5,-1669.4749 412.5,-1656.067 412.5,-1642.189"/>
<polygon fill="none" stroke="#000000" points="409.0001,-1681.8144 412.5,-1691.8145 416.0001,-1681.8145 409.0001,-1681.8144"/>
<path fill="none" stroke="#000000" d="M449.5,-1681.5582C449.5,-1669.4749 449.5,-1656.067 449.5,-1642.189"/>
<polygon fill="none" stroke="#000000" points="446.0001,-1681.8144 449.5,-1691.8145 453.0001,-1681.8145 446.0001,-1681.8144"/>
</g>
<!-- A17 -->
<g id="node18" class="node">
<title>A17</title>
<polygon fill="none" stroke="#000000" points="477.5,-1284 477.5,-1316 591.5,-1316 591.5,-1284 477.5,-1284"/>
<text text-anchor="start" x="520.608" y="-1297" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">Talent</text>
<polygon fill="none" stroke="#000000" points="477.5,-1180 477.5,-1284 591.5,-1284 591.5,-1180 477.5,-1180"/>
<text text-anchor="start" x="487.263" y="-1265" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">await_conn_resp_cnt</text>
<text text-anchor="start" x="522.2775" y="-1253" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">id_str</text>
<text text-anchor="start" x="503.1" y="-1241" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">contact_name</text>
<text text-anchor="start" x="506.44" y="-1229" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">contact_mail</text>
<text text-anchor="start" x="510.0445" y="-1217" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">db:InfosG3</text>
<text text-anchor="start" x="508.384" y="-1205" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">mb:Modbus</text>
<text text-anchor="start" x="520.612" y="-1193" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">switch</text>
<polygon fill="none" stroke="#000000" points="477.5,-1064 477.5,-1180 591.5,-1180 591.5,-1064 477.5,-1064"/>
<text text-anchor="start" x="491.9925" y="-1161" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">msg_contact_info()</text>
<text text-anchor="start" x="493.9325" y="-1149" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">msg_ota_update()</text>
<text text-anchor="start" x="499.7765" y="-1137" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">msg_get_time()</text>
<text text-anchor="start" x="487.8285" y="-1125" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">msg_collector_data()</text>
<text text-anchor="start" x="489.7735" y="-1113" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">msg_inverter_data()</text>
<text text-anchor="start" x="498.9405" y="-1101" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">msg_unknown()</text>
<text text-anchor="start" x="519.5025" y="-1077" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
<!-- A21 -->
<g id="node22" class="node">
<title>A21</title>
<polygon fill="none" stroke="#000000" points="514.5,-1284 514.5,-1316 628.5,-1316 628.5,-1284 514.5,-1284"/>
<text text-anchor="start" x="557.608" y="-1297" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">Talent</text>
<polygon fill="none" stroke="#000000" points="514.5,-1180 514.5,-1284 628.5,-1284 628.5,-1180 514.5,-1180"/>
<text text-anchor="start" x="524.263" y="-1265" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">await_conn_resp_cnt</text>
<text text-anchor="start" x="559.2775" y="-1253" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">id_str</text>
<text text-anchor="start" x="540.1" y="-1241" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">contact_name</text>
<text text-anchor="start" x="543.44" y="-1229" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">contact_mail</text>
<text text-anchor="start" x="547.0445" y="-1217" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">db:InfosG3</text>
<text text-anchor="start" x="545.384" y="-1205" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">mb:Modbus</text>
<text text-anchor="start" x="557.612" y="-1193" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">switch</text>
<polygon fill="none" stroke="#000000" points="514.5,-1064 514.5,-1180 628.5,-1180 628.5,-1064 514.5,-1064"/>
<text text-anchor="start" x="528.9925" y="-1161" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">msg_contact_info()</text>
<text text-anchor="start" x="530.9325" y="-1149" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">msg_ota_update()</text>
<text text-anchor="start" x="536.7765" y="-1137" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">msg_get_time()</text>
<text text-anchor="start" x="524.8285" y="-1125" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">msg_collector_data()</text>
<text text-anchor="start" x="526.7735" y="-1113" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">msg_inverter_data()</text>
<text text-anchor="start" x="535.9405" y="-1101" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">msg_unknown()</text>
<text text-anchor="start" x="556.5025" y="-1077" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
</g>
<!-- A6&#45;&gt;A17 -->
<g id="edge25" class="edge">
<title>A6&#45;&gt;A17</title>
<path fill="none" stroke="#000000" d="M469.9446,-1356.1508C475.1142,-1342.8455 480.3179,-1329.4522 485.4067,-1316.355"/>
<polygon fill="none" stroke="#000000" points="466.5478,-1355.2293 466.1885,-1365.8181 473.0726,-1357.7645 466.5478,-1355.2293"/>
<!-- A6&#45;&gt;A21 -->
<g id="edge29" class="edge">
<title>A6&#45;&gt;A21</title>
<path fill="none" stroke="#000000" d="M506.9446,-1356.1508C512.1142,-1342.8455 517.3179,-1329.4522 522.4067,-1316.355"/>
<polygon fill="none" stroke="#000000" points="503.5478,-1355.2293 503.1885,-1365.8181 510.0726,-1357.7645 503.5478,-1355.2293"/>
</g>
<!-- A18 -->
<g id="node19" class="node">
<title>A18</title>
<polygon fill="none" stroke="#000000" points="368.5,-1248 368.5,-1280 459.5,-1280 459.5,-1248 368.5,-1248"/>
<text text-anchor="start" x="386.495" y="-1261" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">SolarmanV5</text>
<polygon fill="none" stroke="#000000" points="368.5,-1156 368.5,-1248 459.5,-1248 459.5,-1156 368.5,-1156"/>
<text text-anchor="start" x="398.998" y="-1229" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">control</text>
<text text-anchor="start" x="402.0575" y="-1217" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">serial</text>
<text text-anchor="start" x="407.056" y="-1205" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">snr</text>
<text text-anchor="start" x="386.21" y="-1193" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">db:InfosG3P</text>
<text text-anchor="start" x="387.884" y="-1181" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">mb:Modbus</text>
<text text-anchor="start" x="400.112" y="-1169" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">switch</text>
<polygon fill="none" stroke="#000000" points="368.5,-1100 368.5,-1156 459.5,-1156 459.5,-1100 368.5,-1100"/>
<text text-anchor="start" x="378.4405" y="-1137" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">msg_unknown()</text>
<text text-anchor="start" x="399.0025" y="-1113" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
<!-- A22 -->
<g id="node23" class="node">
<title>A22</title>
<polygon fill="none" stroke="#000000" points="405.5,-1248 405.5,-1280 496.5,-1280 496.5,-1248 405.5,-1248"/>
<text text-anchor="start" x="423.495" y="-1261" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">SolarmanV5</text>
<polygon fill="none" stroke="#000000" points="405.5,-1156 405.5,-1248 496.5,-1248 496.5,-1156 405.5,-1156"/>
<text text-anchor="start" x="435.998" y="-1229" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">control</text>
<text text-anchor="start" x="439.0575" y="-1217" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">serial</text>
<text text-anchor="start" x="444.056" y="-1205" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">snr</text>
<text text-anchor="start" x="423.21" y="-1193" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">db:InfosG3P</text>
<text text-anchor="start" x="424.884" y="-1181" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">mb:Modbus</text>
<text text-anchor="start" x="437.112" y="-1169" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">switch</text>
<polygon fill="none" stroke="#000000" points="405.5,-1100 405.5,-1156 496.5,-1156 496.5,-1100 405.5,-1100"/>
<text text-anchor="start" x="415.4405" y="-1137" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">msg_unknown()</text>
<text text-anchor="start" x="436.0025" y="-1113" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
</g>
<!-- A6&#45;&gt;A18 -->
<g id="edge26" class="edge">
<title>A6&#45;&gt;A18</title>
<path fill="none" stroke="#000000" d="M412.9726,-1355.6082C413.0544,-1329.9128 413.1372,-1303.9091 413.2122,-1280.3611"/>
<polygon fill="none" stroke="#000000" points="409.472,-1355.807 412.9401,-1365.8181 416.472,-1355.8293 409.472,-1355.807"/>
<!-- A6&#45;&gt;A22 -->
<g id="edge30" class="edge">
<title>A6&#45;&gt;A22</title>
<path fill="none" stroke="#000000" d="M449.9726,-1355.6082C450.0544,-1329.9128 450.1372,-1303.9091 450.2122,-1280.3611"/>
<polygon fill="none" stroke="#000000" points="446.472,-1355.807 449.9401,-1365.8181 453.472,-1355.8293 446.472,-1355.807"/>
</g>
<!-- A7 -->
<g id="node8" class="node">
<title>A7</title>
<polygon fill="none" stroke="#000000" points="359.5,-982 359.5,-1014 476.5,-1014 476.5,-982 359.5,-982"/>
<text text-anchor="start" x="387.429" y="-995" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">&lt;&lt;AsyncIfc&gt;&gt;</text>
<polygon fill="none" stroke="#000000" points="359.5,-962 359.5,-982 476.5,-982 476.5,-962 359.5,-962"/>
<polygon fill="none" stroke="#000000" points="359.5,-666 359.5,-962 476.5,-962 476.5,-666 359.5,-666"/>
<text text-anchor="start" x="387.436" y="-943" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">set_node_id()</text>
<text text-anchor="start" x="385.766" y="-931" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">get_conn_no()</text>
<text text-anchor="start" x="399.6635" y="-907" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_add()</text>
<text text-anchor="start" x="397.444" y="-895" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_flush()</text>
<text text-anchor="start" x="401.0535" y="-883" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_get()</text>
<text text-anchor="start" x="397.1635" y="-871" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_peek()</text>
<text text-anchor="start" x="401.3335" y="-859" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_log()</text>
<text text-anchor="start" x="397.169" y="-847" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_clear()</text>
<text text-anchor="start" x="401.3335" y="-835" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_len()</text>
<text text-anchor="start" x="395.7745" y="-811" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">fwd_add()</text>
<text text-anchor="start" x="393.555" y="-799" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">fwd_flush()</text>
<text text-anchor="start" x="397.4445" y="-787" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">fwd_log()</text>
<text text-anchor="start" x="393.28" y="-775" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">fwd_clear()</text>
<text text-anchor="start" x="400.7785" y="-763" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rx_get()</text>
<text text-anchor="start" x="396.8885" y="-751" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rx_peek()</text>
<text text-anchor="start" x="401.0585" y="-739" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rx_log()</text>
<text text-anchor="start" x="396.894" y="-727" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rx_clear()</text>
<text text-anchor="start" x="401.0585" y="-715" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rx_len()</text>
<text text-anchor="start" x="392.999" y="-703" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rx_set_cb()</text>
<text text-anchor="start" x="369.3795" y="-679" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">prot_set_timeout_cb()</text>
<polygon fill="none" stroke="#000000" points="404.5,-982 404.5,-1014 521.5,-1014 521.5,-982 404.5,-982"/>
<text text-anchor="start" x="432.429" y="-995" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">&lt;&lt;AsyncIfc&gt;&gt;</text>
<polygon fill="none" stroke="#000000" points="404.5,-962 404.5,-982 521.5,-982 521.5,-962 404.5,-962"/>
<polygon fill="none" stroke="#000000" points="404.5,-666 404.5,-962 521.5,-962 521.5,-666 404.5,-666"/>
<text text-anchor="start" x="432.436" y="-943" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">set_node_id()</text>
<text text-anchor="start" x="430.766" y="-931" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">get_conn_no()</text>
<text text-anchor="start" x="444.6635" y="-907" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_add()</text>
<text text-anchor="start" x="442.444" y="-895" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_flush()</text>
<text text-anchor="start" x="446.0535" y="-883" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_get()</text>
<text text-anchor="start" x="442.1635" y="-871" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_peek()</text>
<text text-anchor="start" x="446.3335" y="-859" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_log()</text>
<text text-anchor="start" x="442.169" y="-847" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_clear()</text>
<text text-anchor="start" x="446.3335" y="-835" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_len()</text>
<text text-anchor="start" x="440.7745" y="-811" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">fwd_add()</text>
<text text-anchor="start" x="438.555" y="-799" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">fwd_flush()</text>
<text text-anchor="start" x="442.4445" y="-787" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">fwd_log()</text>
<text text-anchor="start" x="438.28" y="-775" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">fwd_clear()</text>
<text text-anchor="start" x="445.7785" y="-763" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rx_get()</text>
<text text-anchor="start" x="441.8885" y="-751" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rx_peek()</text>
<text text-anchor="start" x="446.0585" y="-739" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rx_log()</text>
<text text-anchor="start" x="441.894" y="-727" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rx_clear()</text>
<text text-anchor="start" x="446.0585" y="-715" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rx_len()</text>
<text text-anchor="start" x="437.999" y="-703" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rx_set_cb()</text>
<text text-anchor="start" x="414.3795" y="-679" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">prot_set_timeout_cb()</text>
</g>
<!-- A8 -->
<g id="node9" class="node">
<title>A8</title>
<polygon fill="none" stroke="#000000" points="419.5,-574 419.5,-606 512.5,-606 512.5,-574 419.5,-574"/>
<text text-anchor="start" x="437.664" y="-587" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">AsyncIfcImpl</text>
<polygon fill="none" stroke="#000000" points="419.5,-482 419.5,-574 512.5,-574 512.5,-482 419.5,-482"/>
<text text-anchor="start" x="429.048" y="-555" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">fwd_fifo:ByteFifo</text>
<text text-anchor="start" x="432.937" y="-543" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_fifo:ByteFifo</text>
<text text-anchor="start" x="432.662" y="-531" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rx_fifo:ByteFifo</text>
<text text-anchor="start" x="432.096" y="-519" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">conn_no:Count</text>
<text text-anchor="start" x="448.2135" y="-507" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">node_id</text>
<text text-anchor="start" x="441.5495" y="-495" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">timeout_cb</text>
<polygon fill="none" stroke="#000000" points="416.5,-574 416.5,-606 509.5,-606 509.5,-574 416.5,-574"/>
<text text-anchor="start" x="434.664" y="-587" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">AsyncIfcImpl</text>
<polygon fill="none" stroke="#000000" points="416.5,-482 416.5,-574 509.5,-574 509.5,-482 416.5,-482"/>
<text text-anchor="start" x="426.048" y="-555" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">fwd_fifo:ByteFifo</text>
<text text-anchor="start" x="429.937" y="-543" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_fifo:ByteFifo</text>
<text text-anchor="start" x="429.662" y="-531" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rx_fifo:ByteFifo</text>
<text text-anchor="start" x="429.096" y="-519" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">conn_no:Count</text>
<text text-anchor="start" x="445.2135" y="-507" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">node_id</text>
<text text-anchor="start" x="438.5495" y="-495" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">timeout_cb</text>
</g>
<!-- A7&#45;&gt;A8 -->
<g id="edge5" class="edge">
<title>A7&#45;&gt;A8</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M447.3711,-655.7951C450.2352,-638.133 452.9805,-621.2037 455.4297,-606.0999"/>
<polygon fill="none" stroke="#000000" points="443.9147,-655.2446 445.7688,-665.6759 450.8244,-656.3651 443.9147,-655.2446"/>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M462.5,-655.3047C462.5,-637.8196 462.5,-621.0638 462.5,-606.0999"/>
<polygon fill="none" stroke="#000000" points="459.0001,-655.6759 462.5,-665.6759 466.0001,-655.676 459.0001,-655.6759"/>
</g>
<!-- A9 -->
<g id="node10" class="node">
<title>A9</title>
<polygon fill="none" stroke="#000000" points="632.5,-390 632.5,-422 734.5,-422 734.5,-390 632.5,-390"/>
<text text-anchor="start" x="653.774" y="-403" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">AsyncStream</text>
<polygon fill="none" stroke="#000000" points="632.5,-310 632.5,-390 734.5,-390 734.5,-310 632.5,-310"/>
<text text-anchor="start" x="669.053" y="-371" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">reader</text>
<text text-anchor="start" x="671.283" y="-359" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">writer</text>
<text text-anchor="start" x="673.497" y="-347" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">addr</text>
<text text-anchor="start" x="669.053" y="-335" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">r_addr</text>
<text text-anchor="start" x="669.608" y="-323" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">l_addr</text>
<polygon fill="none" stroke="#000000" points="632.5,-182 632.5,-310 734.5,-310 734.5,-182 632.5,-182"/>
<text text-anchor="start" x="655.154" y="-279" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">&lt;async&gt;loop</text>
<text text-anchor="start" x="671.282" y="-267" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">disc()</text>
<text text-anchor="start" x="668.5025" y="-255" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
<text text-anchor="start" x="664.054" y="-243" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">healthy()</text>
<text text-anchor="start" x="648.7705" y="-219" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">__async_read()</text>
<text text-anchor="start" x="648.221" y="-207" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">__async_write()</text>
<text text-anchor="start" x="642.107" y="-195" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">__async_forward()</text>
<polygon fill="none" stroke="#000000" points="413.5,-390 413.5,-422 515.5,-422 515.5,-390 413.5,-390"/>
<text text-anchor="start" x="434.774" y="-403" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">AsyncStream</text>
<polygon fill="none" stroke="#000000" points="413.5,-310 413.5,-390 515.5,-390 515.5,-310 413.5,-310"/>
<text text-anchor="start" x="450.053" y="-371" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">reader</text>
<text text-anchor="start" x="452.283" y="-359" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">writer</text>
<text text-anchor="start" x="454.497" y="-347" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">addr</text>
<text text-anchor="start" x="450.053" y="-335" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">r_addr</text>
<text text-anchor="start" x="450.608" y="-323" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">l_addr</text>
<polygon fill="none" stroke="#000000" points="413.5,-182 413.5,-310 515.5,-310 515.5,-182 413.5,-182"/>
<text text-anchor="start" x="436.154" y="-279" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">&lt;async&gt;loop</text>
<text text-anchor="start" x="452.282" y="-267" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">disc()</text>
<text text-anchor="start" x="449.5025" y="-255" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
<text text-anchor="start" x="445.054" y="-243" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">healthy()</text>
<text text-anchor="start" x="429.7705" y="-219" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">__async_read()</text>
<text text-anchor="start" x="429.221" y="-207" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">__async_write()</text>
<text text-anchor="start" x="423.107" y="-195" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">__async_forward()</text>
</g>
<!-- A8&#45;&gt;A9 -->
<g id="edge6" class="edge">
<title>A8&#45;&gt;A9</title>
<path fill="none" stroke="#000000" d="M520.8892,-510.356C553.7908,-488.3116 594.5961,-457.1309 623.5,-422 626.5337,-418.3127 629.4664,-414.4464 632.2946,-410.4535"/>
<polygon fill="#000000" stroke="#000000" points="512.2723,-516.0433 518.1395,-506.779 516.4453,-513.289 520.6184,-510.5348 520.6184,-510.5348 520.6184,-510.5348 516.4453,-513.289 523.0972,-514.2905 512.2723,-516.0433 512.2723,-516.0433"/>
<path fill="none" stroke="#000000" d="M463.096,-471.886C463.2257,-456.1951 463.3662,-439.1858 463.5066,-422.1976"/>
<polygon fill="#000000" stroke="#000000" points="463.0125,-481.9932 458.5953,-471.9563 463.0538,-476.9934 463.0952,-471.9936 463.0952,-471.9936 463.0952,-471.9936 463.0538,-476.9934 467.595,-472.0308 463.0125,-481.9932 463.0125,-481.9932"/>
</g>
<!-- A10 -->
<g id="node11" class="node">
<title>A10</title>
<polygon fill="none" stroke="#000000" points="412.5,-100 412.5,-132 590.5,-132 590.5,-100 412.5,-100"/>
<text text-anchor="start" x="457.0515" y="-113" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">AsyncStreamServer</text>
<polygon fill="none" stroke="#000000" points="412.5,-68 412.5,-100 590.5,-100 590.5,-68 412.5,-68"/>
<text text-anchor="start" x="453.4325" y="-81" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">async_create_remote</text>
<polygon fill="none" stroke="#000000" points="412.5,0 412.5,-68 590.5,-68 590.5,0 412.5,0"/>
<text text-anchor="start" x="453.1575" y="-49" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">&lt;async&gt;server_loop()</text>
<text text-anchor="start" x="443.9885" y="-37" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">&lt;async&gt;_async_forward()</text>
<text text-anchor="start" x="422.309" y="-25" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">&lt;async&gt;publish_outstanding_mqtt()</text>
<text text-anchor="start" x="486.5025" y="-13" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
<polygon fill="none" stroke="#000000" points="297.5,-100 297.5,-132 475.5,-132 475.5,-100 297.5,-100"/>
<text text-anchor="start" x="342.0515" y="-113" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">AsyncStreamServer</text>
<polygon fill="none" stroke="#000000" points="297.5,-68 297.5,-100 475.5,-100 475.5,-68 297.5,-68"/>
<text text-anchor="start" x="338.4325" y="-81" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">async_create_remote</text>
<polygon fill="none" stroke="#000000" points="297.5,0 297.5,-68 475.5,-68 475.5,0 297.5,0"/>
<text text-anchor="start" x="338.1575" y="-49" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">&lt;async&gt;server_loop()</text>
<text text-anchor="start" x="328.9885" y="-37" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">&lt;async&gt;_async_forward()</text>
<text text-anchor="start" x="307.309" y="-25" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">&lt;async&gt;publish_outstanding_mqtt()</text>
<text text-anchor="start" x="371.5025" y="-13" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
</g>
<!-- A9&#45;&gt;A10 -->
<g id="edge7" class="edge">
<title>A9&#45;&gt;A10</title>
<path fill="none" stroke="#000000" d="M626.6147,-186.3084C625.5862,-184.8529 624.5479,-183.4159 623.5,-182 610.634,-164.6155 595.0122,-147.5888 579.3028,-132.1656"/>
<polygon fill="#000000" stroke="#000000" points="632.3941,-194.8307 623.057,-189.08 629.5877,-190.6925 626.7814,-186.5543 626.7814,-186.5543 626.7814,-186.5543 629.5877,-190.6925 630.5058,-184.0286 632.3941,-194.8307 632.3941,-194.8307"/>
<path fill="none" stroke="#000000" d="M421.6442,-172.3338C417.0769,-158.5147 412.5808,-144.911 408.4098,-132.2911"/>
<polygon fill="#000000" stroke="#000000" points="424.8145,-181.9259 417.4036,-173.8432 423.2454,-177.1784 421.6763,-172.431 421.6763,-172.431 421.6763,-172.431 423.2454,-177.1784 425.949,-171.0188 424.8145,-181.9259 424.8145,-181.9259"/>
</g>
<!-- A11 -->
<g id="node12" class="node">
<title>A11</title>
<polygon fill="none" stroke="#000000" points="608.5,-82 608.5,-114 746.5,-114 746.5,-82 608.5,-82"/>
<text text-anchor="start" x="634.997" y="-95" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">AsyncStreamClient</text>
<polygon fill="none" stroke="#000000" points="608.5,-62 608.5,-82 746.5,-82 746.5,-62 608.5,-62"/>
<polygon fill="none" stroke="#000000" points="608.5,-18 608.5,-62 746.5,-62 746.5,-18 608.5,-18"/>
<text text-anchor="start" x="631.378" y="-43" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">&lt;async&gt;client_loop()</text>
<text text-anchor="start" x="618.324" y="-31" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">&lt;async&gt;_async_forward())</text>
<polygon fill="none" stroke="#000000" points="493.5,-82 493.5,-114 631.5,-114 631.5,-82 493.5,-82"/>
<text text-anchor="start" x="519.997" y="-95" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">AsyncStreamClient</text>
<polygon fill="none" stroke="#000000" points="493.5,-62 493.5,-82 631.5,-82 631.5,-62 493.5,-62"/>
<polygon fill="none" stroke="#000000" points="493.5,-18 493.5,-62 631.5,-62 631.5,-18 493.5,-18"/>
<text text-anchor="start" x="516.378" y="-43" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">&lt;async&gt;client_loop()</text>
<text text-anchor="start" x="503.324" y="-31" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">&lt;async&gt;_async_forward())</text>
</g>
<!-- A9&#45;&gt;A11 -->
<g id="edge8" class="edge">
<title>A9&#45;&gt;A11</title>
<path fill="none" stroke="#000000" d="M680.19,-171.8077C679.6675,-151.2556 679.1577,-131.2022 678.7248,-114.1772"/>
<polygon fill="#000000" stroke="#000000" points="680.4473,-181.9259 675.6945,-172.0435 680.3201,-176.9275 680.193,-171.9291 680.193,-171.9291 680.193,-171.9291 680.3201,-176.9275 684.6916,-171.8147 680.4473,-181.9259 680.4473,-181.9259"/>
<path fill="none" stroke="#000000" d="M518.2137,-172.6487C526.8699,-151.8031 535.3281,-131.4344 542.4942,-114.1772"/>
<polygon fill="#000000" stroke="#000000" points="514.3613,-181.9259 514.0405,-170.9647 516.2788,-177.3082 518.1964,-172.6905 518.1964,-172.6905 518.1964,-172.6905 516.2788,-177.3082 522.3523,-174.4163 514.3613,-181.9259 514.3613,-181.9259"/>
</g>
<!-- A12 -->
<g id="node13" class="node">
<title>A12</title>
<polygon fill="none" stroke="#000000" points="445.5,-324 445.5,-356 596.5,-356 596.5,-324 445.5,-324"/>
<text text-anchor="start" x="489.0455" y="-337" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ConnectionG3</text>
<polygon fill="none" stroke="#000000" points="445.5,-292 445.5,-324 596.5,-324 596.5,-292 445.5,-292"/>
<text text-anchor="start" x="455.432" y="-305" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">remote.stream:ConnectionG3</text>
<polygon fill="none" stroke="#000000" points="445.5,-248 445.5,-292 596.5,-292 596.5,-248 445.5,-248"/>
<text text-anchor="start" x="501.554" y="-273" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">healthy()</text>
<text text-anchor="start" x="506.0025" y="-261" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
</g>
<!-- A12&#45;&gt;A3 -->
<g id="edge9" class="edge">
<title>A12&#45;&gt;A3</title>
<path fill="none" stroke="#000000" d="M478.5092,-239.4979C465.2404,-220.6454 450.1954,-200.1473 435.5,-182 421.2752,-164.4338 405.1062,-146.1424 389.7235,-129.4175"/>
<polygon fill="none" stroke="#000000" points="475.6778,-241.5563 484.2763,-247.7463 481.4146,-237.5453 475.6778,-241.5563"/>
</g>
<!-- A12&#45;&gt;A10 -->
<g id="edge12" class="edge">
<title>A12&#45;&gt;A10</title>
<path fill="none" stroke="#000000" d="M515.169,-235.7838C512.8253,-206.6727 510.0594,-172.3163 507.6308,-142.1514"/>
<polygon fill="#000000" stroke="#000000" points="515.1779,-235.8955 519.6466,-241.5552 516.141,-247.8568 511.6724,-242.1972 515.1779,-235.8955"/>
<polygon fill="#000000" stroke="#000000" points="506.8213,-132.0959 512.1093,-141.7025 507.2226,-137.0798 507.6239,-142.0637 507.6239,-142.0637 507.6239,-142.0637 507.2226,-137.0798 503.1384,-142.4248 506.8213,-132.0959 506.8213,-132.0959"/>
<text text-anchor="middle" x="516.701" y="-146.4853" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">0..1</text>
</g>
<!-- A12&#45;&gt;A11 -->
<g id="edge11" class="edge">
<title>A12&#45;&gt;A11</title>
<path fill="none" stroke="#000000" d="M563.2934,-237.6736C587.1695,-201.7835 616.6458,-157.4751 639.6718,-122.8628"/>
<polygon fill="#000000" stroke="#000000" points="563.1656,-237.8657 563.1727,-245.0768 556.519,-247.8568 556.5119,-240.6457 563.1656,-237.8657"/>
<polygon fill="#000000" stroke="#000000" points="645.3795,-114.283 643.5873,-125.1015 642.6101,-118.446 639.8406,-122.609 639.8406,-122.609 639.8406,-122.609 642.6101,-118.446 636.0939,-120.1165 645.3795,-114.283 645.3795,-114.283"/>
<text text-anchor="middle" x="642.3771" y="-131.0564" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">0..1</text>
</g>
<!-- A12&#45;&gt;A12 -->
<g id="edge10" class="edge">
<title>A12&#45;&gt;A12</title>
<path fill="none" stroke="#000000" d="M596.0725,-341.7099C606.8009,-335.2874 614,-322.0508 614,-302 614,-287.2752 610.1175,-276.2253 603.8059,-268.8503"/>
<polygon fill="#000000" stroke="#000000" points="596.0725,-262.2901 606.6094,-265.3275 599.8854,-265.5246 603.6983,-268.7591 603.6983,-268.7591 603.6983,-268.7591 599.8854,-265.5246 600.7872,-272.1907 596.0725,-262.2901 596.0725,-262.2901"/>
<text text-anchor="middle" x="615.3629" y="-264.5703" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">0..1</text>
<text text-anchor="middle" x="606.2442" y="-321.4897" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">has</text>
<polygon fill="none" stroke="#000000" points="668.5,-560 668.5,-592 819.5,-592 819.5,-560 668.5,-560"/>
<text text-anchor="start" x="712.0455" y="-573" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ConnectionG3</text>
<polygon fill="none" stroke="#000000" points="668.5,-528 668.5,-560 819.5,-560 819.5,-528 668.5,-528"/>
<text text-anchor="start" x="678.432" y="-541" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">remote.stream:ConnectionG3</text>
<polygon fill="none" stroke="#000000" points="668.5,-496 668.5,-528 819.5,-528 819.5,-496 668.5,-496"/>
<text text-anchor="start" x="724.554" y="-509" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">healthy()</text>
</g>
<!-- A13 -->
<g id="node14" class="node">
<title>A13</title>
<polygon fill="none" stroke="#000000" points="252.5,-324 252.5,-356 409.5,-356 409.5,-324 252.5,-324"/>
<text text-anchor="start" x="295.711" y="-337" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ConnectionG3P</text>
<polygon fill="none" stroke="#000000" points="252.5,-292 252.5,-324 409.5,-324 409.5,-292 252.5,-292"/>
<text text-anchor="start" x="262.0975" y="-305" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">remote.stream:ConnectionG3P</text>
<polygon fill="none" stroke="#000000" points="252.5,-248 252.5,-292 409.5,-292 409.5,-248 252.5,-248"/>
<text text-anchor="start" x="311.554" y="-273" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">healthy()</text>
<text text-anchor="start" x="316.0025" y="-261" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
<polygon fill="none" stroke="#000000" points="916.4639,-320 798.5361,-320 798.5361,-284 916.4639,-284 916.4639,-320"/>
<text text-anchor="middle" x="857.5" y="-299" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ConnectionG3Client</text>
</g>
<!-- A13&#45;&gt;A4 -->
<g id="edge13" class="edge">
<title>A13&#45;&gt;A4</title>
<path fill="none" stroke="#000000" d="M290.2801,-239.1397C267.862,-204.1022 240.0902,-160.6973 217.9615,-126.112"/>
<polygon fill="none" stroke="#000000" points="287.5198,-241.3198 295.8575,-247.8568 293.4162,-237.5471 287.5198,-241.3198"/>
</g>
<!-- A13&#45;&gt;A10 -->
<g id="edge16" class="edge">
<title>A13&#45;&gt;A10</title>
<path fill="none" stroke="#000000" d="M376.9343,-237.9153C398.7618,-207.7907 424.9166,-171.6941 447.6125,-140.3711"/>
<polygon fill="#000000" stroke="#000000" points="376.7718,-238.1395 376.4904,-245.3452 369.7309,-247.8568 370.0122,-240.6512 376.7718,-238.1395"/>
<polygon fill="#000000" stroke="#000000" points="453.6085,-132.0959 451.385,-142.834 450.6747,-136.1448 447.741,-140.1937 447.741,-140.1937 447.741,-140.1937 450.6747,-136.1448 444.097,-137.5533 453.6085,-132.0959 453.6085,-132.0959"/>
<text text-anchor="middle" x="449.8176" y="-148.7334" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">0..1</text>
</g>
<!-- A13&#45;&gt;A11 -->
<g id="edge15" class="edge">
<title>A13&#45;&gt;A11</title>
<path fill="none" stroke="#000000" d="M375.0938,-238.1141C391.9986,-217.7599 412.7221,-196.7271 435.5,-182 499.4911,-140.6266 532.594,-168.472 599.5,-132 605.8177,-128.5561 612.0915,-124.5466 618.1768,-120.2372"/>
<polygon fill="#000000" stroke="#000000" points="374.8907,-238.3658 374.2369,-245.5473 367.3564,-247.7058 368.0102,-240.5244 374.8907,-238.3658"/>
<polygon fill="#000000" stroke="#000000" points="626.3446,-114.1997 620.9779,-123.7627 622.3238,-117.1718 618.303,-120.1439 618.303,-120.1439 618.303,-120.1439 622.3238,-117.1718 615.6281,-116.5252 626.3446,-114.1997 626.3446,-114.1997"/>
<text text-anchor="middle" x="616.7925" y="-128.7713" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">0..1</text>
</g>
<!-- A13&#45;&gt;A13 -->
<g id="edge14" class="edge">
<title>A13&#45;&gt;A13</title>
<path fill="none" stroke="#000000" d="M409.2551,-341.2562C419.9076,-334.6752 427,-321.5898 427,-302 427,-287.6137 423.175,-276.7353 416.924,-269.3648"/>
<polygon fill="#000000" stroke="#000000" points="409.2551,-262.7438 419.7652,-265.8726 413.0398,-266.0113 416.8244,-269.2788 416.8244,-269.2788 416.8244,-269.2788 413.0398,-266.0113 413.8837,-272.685 409.2551,-262.7438 409.2551,-262.7438"/>
<text text-anchor="middle" x="428.4989" y="-265.1913" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">0..1</text>
<text text-anchor="middle" x="419.2213" y="-320.9162" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">has</text>
<!-- A12&#45;&gt;A13 -->
<g id="edge9" class="edge">
<title>A12&#45;&gt;A13</title>
<path fill="none" stroke="#000000" d="M770.4597,-486.7699C795.9223,-432.7176 832.5824,-354.8953 848.9941,-320.0564"/>
<polygon fill="none" stroke="#000000" points="767.2544,-485.3612 766.159,-495.8992 773.5869,-488.3443 767.2544,-485.3612"/>
</g>
<!-- A14 -->
<g id="node15" class="node">
<title>A14</title>
<polygon fill="none" stroke="#000000" points="610.5,-1278 610.5,-1310 713.5,-1310 713.5,-1278 610.5,-1278"/>
<text text-anchor="start" x="651.162" y="-1291" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">Infos</text>
<polygon fill="none" stroke="#000000" points="610.5,-1222 610.5,-1278 713.5,-1278 713.5,-1222 610.5,-1222"/>
<text text-anchor="start" x="653.9415" y="-1259" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">stat</text>
<text text-anchor="start" x="629.486" y="-1247" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">new_stat_data</text>
<text text-anchor="start" x="643.1035" y="-1235" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">info_dev</text>
<polygon fill="none" stroke="#000000" points="610.5,-1070 610.5,-1222 713.5,-1222 713.5,-1070 610.5,-1070"/>
<text text-anchor="start" x="637.8355" y="-1203" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">static_init()</text>
<text text-anchor="start" x="635.8845" y="-1191" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">dev_value()</text>
<text text-anchor="start" x="632.8305" y="-1179" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">inc_counter()</text>
<text text-anchor="start" x="631.1605" y="-1167" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">dec_counter()</text>
<text text-anchor="start" x="629.21" y="-1155" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ha_proxy_conf</text>
<text text-anchor="start" x="644.213" y="-1143" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ha_conf</text>
<text text-anchor="start" x="636.994" y="-1131" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ha_remove</text>
<text text-anchor="start" x="638.3745" y="-1119" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">update_db</text>
<text text-anchor="start" x="622.537" y="-1107" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">set_db_def_value</text>
<text text-anchor="start" x="631.9855" y="-1095" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">get_db_value</text>
<text text-anchor="start" x="620.3225" y="-1083" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ignore_this_device</text>
<polygon fill="none" stroke="#000000" points="781.3545,-320 659.6455,-320 659.6455,-284 781.3545,-284 781.3545,-320"/>
<text text-anchor="middle" x="720.5" y="-299" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ConnectionG3Server</text>
</g>
<!-- A12&#45;&gt;A14 -->
<g id="edge10" class="edge">
<title>A12&#45;&gt;A14</title>
<path fill="none" stroke="#000000" d="M737.965,-485.762C732.832,-431.7545 725.5067,-354.6794 722.2161,-320.0564"/>
<polygon fill="none" stroke="#000000" points="734.4979,-486.2753 738.9284,-495.8992 741.4665,-485.6129 734.4979,-486.2753"/>
</g>
<!-- A13&#45;&gt;A3 -->
<g id="edge11" class="edge">
<title>A13&#45;&gt;A3</title>
<path fill="none" stroke="#000000" d="M842.5204,-274.5554C829.1107,-250.1362 808.7992,-213.5139 790.5,-182 781.0509,-165.7272 770.6715,-148.2968 760.8661,-132.0214"/>
<polygon fill="none" stroke="#000000" points="839.5991,-276.5075 847.4749,-283.5943 845.7375,-273.1429 839.5991,-276.5075"/>
</g>
<!-- A13&#45;&gt;A11 -->
<g id="edge12" class="edge">
<title>A13&#45;&gt;A11</title>
<path fill="none" stroke="#000000" d="M847.8423,-272.4291C837.6006,-245.3929 818.9312,-206.0593 790.5,-182 740.0639,-139.3195 708.6952,-163.2849 650.5,-132 643.7586,-128.3759 636.9711,-124.2689 630.3173,-119.9191"/>
<polygon fill="#000000" stroke="#000000" points="847.9014,-272.5938 853.6949,-276.8875 851.9597,-283.8867 846.1662,-279.593 847.9014,-272.5938"/>
<polygon fill="#000000" stroke="#000000" points="621.9741,-114.2975 632.7818,-116.1535 626.1206,-117.0914 630.2672,-119.8854 630.2672,-119.8854 630.2672,-119.8854 626.1206,-117.0914 627.7526,-123.6173 621.9741,-114.2975 621.9741,-114.2975"/>
<text text-anchor="middle" x="641.7294" y="-114.4165" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">1</text>
</g>
<!-- A14&#45;&gt;A3 -->
<g id="edge13" class="edge">
<title>A14&#45;&gt;A3</title>
<path fill="none" stroke="#000000" d="M720.5,-273.4974C720.5,-238.6588 720.5,-178.5989 720.5,-132.0321"/>
<polygon fill="none" stroke="#000000" points="717.0001,-273.8733 720.5,-283.8733 724.0001,-273.8734 717.0001,-273.8733"/>
</g>
<!-- A14&#45;&gt;A10 -->
<g id="edge14" class="edge">
<title>A14&#45;&gt;A10</title>
<path fill="none" stroke="#000000" d="M710.3459,-272.0863C699.6004,-244.8074 680.0644,-205.3092 650.5,-182 592.4742,-136.2511 557.1098,-162.6155 485.0338,-131.8265"/>
<polygon fill="#000000" stroke="#000000" points="710.4693,-272.4169 716.3162,-276.6376 714.6689,-283.658 708.8221,-279.4373 710.4693,-272.4169"/>
<polygon fill="#000000" stroke="#000000" points="475.5796,-127.5522 486.5455,-127.5715 480.1357,-129.6121 484.6917,-131.6719 484.6917,-131.6719 484.6917,-131.6719 480.1357,-129.6121 482.8378,-135.7723 475.5796,-127.5522 475.5796,-127.5522"/>
<text text-anchor="middle" x="495.5783" y="-124.3177" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">1</text>
</g>
<!-- A15 -->
<g id="node16" class="node">
<title>A15</title>
<polygon fill="none" stroke="#000000" points="625.5,-856 625.5,-888 692.5,-888 692.5,-856 625.5,-856"/>
<text text-anchor="start" x="641.493" y="-869" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">InfosG3</text>
<polygon fill="none" stroke="#000000" points="625.5,-836 625.5,-856 692.5,-856 692.5,-836 625.5,-836"/>
<polygon fill="none" stroke="#000000" points="625.5,-792 625.5,-836 692.5,-836 692.5,-792 625.5,-792"/>
<text text-anchor="start" x="635.384" y="-817" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ha_confs()</text>
<text text-anchor="start" x="643.168" y="-805" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">parse()</text>
</g>
<!-- A14&#45;&gt;A15 -->
<g id="edge17" class="edge">
<title>A14&#45;&gt;A15</title>
<path fill="none" stroke="#000000" d="M660.3792,-1059.2448C659.8663,-999.4063 659.2901,-932.1816 658.9126,-888.1352"/>
<polygon fill="none" stroke="#000000" points="656.8819,-1059.5803 660.4676,-1069.5499 663.8816,-1059.5202 656.8819,-1059.5803"/>
<polygon fill="none" stroke="#000000" points="241.5,-566 241.5,-598 398.5,-598 398.5,-566 241.5,-566"/>
<text text-anchor="start" x="284.711" y="-579" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ConnectionG3P</text>
<polygon fill="none" stroke="#000000" points="241.5,-534 241.5,-566 398.5,-566 398.5,-534 241.5,-534"/>
<text text-anchor="start" x="251.0975" y="-547" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">remote.stream:ConnectionG3P</text>
<polygon fill="none" stroke="#000000" points="241.5,-490 241.5,-534 398.5,-534 398.5,-490 241.5,-490"/>
<text text-anchor="start" x="300.554" y="-515" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">healthy()</text>
<text text-anchor="start" x="305.0025" y="-503" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
</g>
<!-- A16 -->
<g id="node17" class="node">
<title>A16</title>
<polygon fill="none" stroke="#000000" points="494.5,-856 494.5,-888 561.5,-888 561.5,-856 494.5,-856"/>
<text text-anchor="start" x="507.1585" y="-869" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">InfosG3P</text>
<polygon fill="none" stroke="#000000" points="494.5,-836 494.5,-856 561.5,-856 561.5,-836 494.5,-836"/>
<polygon fill="none" stroke="#000000" points="494.5,-792 494.5,-836 561.5,-836 561.5,-792 494.5,-792"/>
<text text-anchor="start" x="504.384" y="-817" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ha_confs()</text>
<text text-anchor="start" x="512.168" y="-805" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">parse()</text>
<polygon fill="none" stroke="#000000" points="395.6321,-320 271.3679,-320 271.3679,-284 395.6321,-284 395.6321,-320"/>
<text text-anchor="middle" x="333.5" y="-299" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ConnectionG3PClient</text>
</g>
<!-- A14&#45;&gt;A16 -->
<!-- A15&#45;&gt;A16 -->
<g id="edge15" class="edge">
<title>A15&#45;&gt;A16</title>
<path fill="none" stroke="#000000" d="M323.2081,-479.9034C326.3029,-426.4068 330.5094,-353.6948 332.4455,-320.2281"/>
<polygon fill="none" stroke="#000000" points="319.7079,-479.8062 322.6244,-489.9917 326.6962,-480.2106 319.7079,-479.8062"/>
</g>
<!-- A17 -->
<g id="node18" class="node">
<title>A17</title>
<polygon fill="none" stroke="#000000" points="253.523,-320 125.477,-320 125.477,-284 253.523,-284 253.523,-320"/>
<text text-anchor="middle" x="189.5" y="-299" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ConnectionG3PServer</text>
</g>
<!-- A15&#45;&gt;A17 -->
<g id="edge16" class="edge">
<title>A15&#45;&gt;A17</title>
<path fill="none" stroke="#000000" d="M285.6044,-480.9021C256.8182,-427.3154 217.3821,-353.9035 199.2919,-320.2281"/>
<polygon fill="none" stroke="#000000" points="282.6716,-482.8386 290.4873,-489.9917 288.8382,-479.526 282.6716,-482.8386"/>
</g>
<!-- A16&#45;&gt;A4 -->
<g id="edge17" class="edge">
<title>A16&#45;&gt;A4</title>
<path fill="none" stroke="#000000" d="M318.1268,-274.9248C297.6458,-238.8538 260.8353,-174.0234 233.6331,-126.115"/>
<polygon fill="none" stroke="#000000" points="315.2265,-276.9055 323.2077,-283.8733 321.3137,-273.4492 315.2265,-276.9055"/>
</g>
<!-- A16&#45;&gt;A11 -->
<g id="edge18" class="edge">
<title>A14&#45;&gt;A16</title>
<path fill="none" stroke="#000000" d="M611.7233,-1059.9862C588.7427,-999.9623 562.8621,-932.3636 545.9289,-888.1352"/>
<polygon fill="none" stroke="#000000" points="608.5406,-1061.4623 615.3848,-1069.5499 615.0779,-1058.9595 608.5406,-1061.4623"/>
<title>A16&#45;&gt;A11</title>
<path fill="none" stroke="#000000" d="M345.8472,-272.9179C357.9631,-246.8622 378.402,-208.7408 404.5,-182 433.7853,-151.9934 450.631,-156.7166 484.5,-132 489.4838,-128.3629 494.5532,-124.4959 499.5929,-120.5284"/>
<polygon fill="#000000" stroke="#000000" points="345.8036,-273.0146 346.9868,-280.128 340.8756,-283.9561 339.6925,-276.8427 345.8036,-273.0146"/>
<polygon fill="#000000" stroke="#000000" points="507.4715,-114.2299 502.4707,-123.9892 503.5661,-117.3521 499.6607,-120.4743 499.6607,-120.4743 499.6607,-120.4743 503.5661,-117.3521 496.8507,-116.9594 507.4715,-114.2299 507.4715,-114.2299"/>
<text text-anchor="middle" x="498.5915" y="-129.1505" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">1</text>
</g>
<!-- A17&#45;&gt;A7 -->
<g id="edge20" class="edge">
<title>A17&#45;&gt;A7</title>
<path fill="none" stroke="#000000" d="M492.2603,-1063.642C487.9413,-1050.7218 483.4938,-1037.4173 479.0227,-1024.0422"/>
<polygon fill="#000000" stroke="#000000" points="475.7643,-1014.295 483.2027,-1022.3525 477.3496,-1019.0371 478.9348,-1023.7792 478.9348,-1023.7792 478.9348,-1023.7792 477.3496,-1019.0371 474.667,-1025.2059 475.7643,-1014.295 475.7643,-1014.295"/>
<text text-anchor="middle" x="478.4973" y="-1046.1306" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">use</text>
</g>
<!-- A17&#45;&gt;A12 -->
<!-- A17&#45;&gt;A4 -->
<g id="edge19" class="edge">
<title>A17&#45;&gt;A12</title>
<path fill="none" stroke="#000000" d="M565.2328,-1053.4379C567.3751,-1040.1646 569.1985,-1026.8579 570.5,-1014 586.0765,-860.1197 581.0485,-820.3065 570.5,-666 562.9303,-555.2676 542.5519,-426.9031 530.2736,-356.0308"/>
<polygon fill="none" stroke="#000000" points="561.7353,-1053.1328 563.5359,-1063.5735 568.6392,-1054.2888 561.7353,-1053.1328"/>
<title>A17&#45;&gt;A4</title>
<path fill="none" stroke="#000000" d="M190.7064,-273.5294C192.2457,-237.2013 194.9487,-173.4118 196.9528,-126.115"/>
<polygon fill="none" stroke="#000000" points="187.1947,-273.7341 190.2681,-283.8733 194.1884,-274.0305 187.1947,-273.7341"/>
</g>
<!-- A17&#45;&gt;A15 -->
<g id="edge21" class="edge">
<title>A17&#45;&gt;A15</title>
<path fill="none" stroke="#000000" d="M585.0948,-1063.9652C591.4654,-1047.2285 597.7556,-1030.2447 603.5,-1014 617.0546,-975.6684 630.8409,-932.0419 641.2203,-898.0618"/>
<polygon fill="#000000" stroke="#000000" points="644.1909,-888.2953 645.5861,-899.1721 642.7359,-893.079 641.2808,-897.8626 641.2808,-897.8626 641.2808,-897.8626 642.7359,-893.079 636.9756,-896.553 644.1909,-888.2953 644.1909,-888.2953"/>
<!-- A17&#45;&gt;A10 -->
<g id="edge20" class="edge">
<title>A17&#45;&gt;A10</title>
<path fill="none" stroke="#000000" d="M204.1117,-273.2277C217.591,-247.976 239.0216,-210.8784 262.5,-182 274.3769,-167.3913 288.0456,-152.8519 301.8728,-139.2564"/>
<polygon fill="#000000" stroke="#000000" points="204.0749,-273.2981 204.8291,-280.4697 198.4993,-283.9242 197.745,-276.7526 204.0749,-273.2981"/>
<polygon fill="#000000" stroke="#000000" points="309.1093,-132.2375 305.0641,-142.4301 305.5202,-135.7187 301.9311,-139.1999 301.9311,-139.1999 301.9311,-139.1999 305.5202,-135.7187 298.798,-135.9697 309.1093,-132.2375 309.1093,-132.2375"/>
<text text-anchor="middle" x="301.9828" y="-147.9248" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">1</text>
</g>
<!-- A18&#45;&gt;A7 -->
<g id="edge23" class="edge">
<title>A18&#45;&gt;A7</title>
<path fill="none" stroke="#000000" d="M414.5301,-1099.8663C414.7969,-1076.5184 415.0942,-1050.5112 415.3946,-1024.2257"/>
<polygon fill="#000000" stroke="#000000" points="415.5098,-1014.1428 419.8951,-1024.1937 415.4526,-1019.1425 415.3954,-1024.1422 415.3954,-1024.1422 415.3954,-1024.1422 415.4526,-1019.1425 410.8957,-1024.0907 415.5098,-1014.1428 415.5098,-1014.1428"/>
<text text-anchor="middle" x="406.2854" y="-1078.6447" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">use</text>
</g>
<!-- A18&#45;&gt;A13 -->
<g id="edge22" class="edge">
<title>A18&#45;&gt;A13</title>
<path fill="none" stroke="#000000" d="M370.901,-1090.1369C362.2256,-1065.6623 354.2942,-1039.2378 349.5,-1014 303.5767,-772.2495 317.5688,-476.11 326.0763,-356.2204"/>
<polygon fill="none" stroke="#000000" points="367.6944,-1091.5616 374.3895,-1099.773 374.2763,-1089.1787 367.6944,-1091.5616"/>
</g>
<!-- A18&#45;&gt;A16 -->
<g id="edge24" class="edge">
<title>A18&#45;&gt;A16</title>
<path fill="none" stroke="#000000" d="M452.8317,-1099.5532C463.8885,-1072.3429 475.3733,-1042.2139 484.5,-1014 496.8342,-975.8705 507.6409,-932.0683 515.3355,-897.951"/>
<polygon fill="#000000" stroke="#000000" points="517.5217,-888.1455 519.7377,-898.8851 516.4336,-893.0257 515.3455,-897.9059 515.3455,-897.9059 515.3455,-897.9059 516.4336,-893.0257 510.9533,-896.9266 517.5217,-888.1455 517.5217,-888.1455"/>
<!-- A18 -->
<g id="node19" class="node">
<title>A18</title>
<polygon fill="none" stroke="#000000" points="657.5,-1278 657.5,-1310 760.5,-1310 760.5,-1278 657.5,-1278"/>
<text text-anchor="start" x="698.162" y="-1291" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">Infos</text>
<polygon fill="none" stroke="#000000" points="657.5,-1222 657.5,-1278 760.5,-1278 760.5,-1222 657.5,-1222"/>
<text text-anchor="start" x="700.9415" y="-1259" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">stat</text>
<text text-anchor="start" x="676.486" y="-1247" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">new_stat_data</text>
<text text-anchor="start" x="690.1035" y="-1235" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">info_dev</text>
<polygon fill="none" stroke="#000000" points="657.5,-1070 657.5,-1222 760.5,-1222 760.5,-1070 657.5,-1070"/>
<text text-anchor="start" x="684.8355" y="-1203" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">static_init()</text>
<text text-anchor="start" x="682.8845" y="-1191" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">dev_value()</text>
<text text-anchor="start" x="679.8305" y="-1179" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">inc_counter()</text>
<text text-anchor="start" x="678.1605" y="-1167" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">dec_counter()</text>
<text text-anchor="start" x="676.21" y="-1155" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ha_proxy_conf</text>
<text text-anchor="start" x="691.213" y="-1143" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ha_conf</text>
<text text-anchor="start" x="683.994" y="-1131" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ha_remove</text>
<text text-anchor="start" x="685.3745" y="-1119" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">update_db</text>
<text text-anchor="start" x="669.537" y="-1107" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">set_db_def_value</text>
<text text-anchor="start" x="678.9855" y="-1095" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">get_db_value</text>
<text text-anchor="start" x="667.3225" y="-1083" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ignore_this_device</text>
</g>
<!-- A19 -->
<g id="node20" class="node">
<title>A19</title>
<polygon fill="none" stroke="#000000" points="498.5,-1598 498.5,-1630 573.5,-1630 573.5,-1598 498.5,-1598"/>
<text text-anchor="start" x="518.2175" y="-1611" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">Modbus</text>
<polygon fill="none" stroke="#000000" points="498.5,-1446 498.5,-1598 573.5,-1598 573.5,-1446 498.5,-1446"/>
<text text-anchor="start" x="527.6615" y="-1579" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">que</text>
<text text-anchor="start" x="508.49" y="-1555" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">snd_handler</text>
<text text-anchor="start" x="509.605" y="-1543" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rsp_handler</text>
<text text-anchor="start" x="519.6085" y="-1531" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">timeout</text>
<text text-anchor="start" x="509.8895" y="-1519" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">max_retires</text>
<text text-anchor="start" x="517.942" y="-1507" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">last_xxx</text>
<text text-anchor="start" x="529.8915" y="-1495" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">err</text>
<text text-anchor="start" x="516.5535" y="-1483" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">retry_cnt</text>
<text text-anchor="start" x="514.879" y="-1471" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">req_pend</text>
<text text-anchor="start" x="529.3365" y="-1459" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tim</text>
<polygon fill="none" stroke="#000000" points="498.5,-1378 498.5,-1446 573.5,-1446 573.5,-1378 498.5,-1378"/>
<text text-anchor="start" x="509.89" y="-1427" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">build_msg()</text>
<text text-anchor="start" x="513.224" y="-1415" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">recv_req()</text>
<text text-anchor="start" x="510.724" y="-1403" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">recv_resp()</text>
<text text-anchor="start" x="521.0025" y="-1391" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
<polygon fill="none" stroke="#000000" points="680.5,-856 680.5,-888 747.5,-888 747.5,-856 680.5,-856"/>
<text text-anchor="start" x="696.493" y="-869" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">InfosG3</text>
<polygon fill="none" stroke="#000000" points="680.5,-836 680.5,-856 747.5,-856 747.5,-836 680.5,-836"/>
<polygon fill="none" stroke="#000000" points="680.5,-792 680.5,-836 747.5,-836 747.5,-792 680.5,-792"/>
<text text-anchor="start" x="690.384" y="-817" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ha_confs()</text>
<text text-anchor="start" x="698.168" y="-805" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">parse()</text>
</g>
<!-- A19&#45;&gt;A17 -->
<g id="edge28" class="edge">
<title>A19&#45;&gt;A17</title>
<path fill="none" stroke="#000000" d="M535.0656,-1367.6092C535.0111,-1350.4944 534.9556,-1333.047 534.9016,-1316.0999"/>
<polygon fill="#000000" stroke="#000000" points="535.0976,-1377.6415 530.5657,-1367.6559 535.0816,-1372.6415 535.0656,-1367.6415 535.0656,-1367.6415 535.0656,-1367.6415 535.0816,-1372.6415 539.5656,-1367.6272 535.0976,-1377.6415 535.0976,-1377.6415"/>
<text text-anchor="middle" x="543.4116" y="-1331.199" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">has</text>
<text text-anchor="middle" x="526.5875" y="-1356.5423" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">1</text>
</g>
<!-- A19&#45;&gt;A18 -->
<g id="edge27" class="edge">
<title>A19&#45;&gt;A18</title>
<path fill="none" stroke="#000000" d="M494.4368,-1381.825C492.4631,-1376.4654 490.4791,-1371.1707 488.5,-1366 481.9997,-1349.0167 467.3384,-1314.3617 452.687,-1280.2598"/>
<polygon fill="#000000" stroke="#000000" points="497.9749,-1391.5299 490.3219,-1383.6762 496.2623,-1386.8324 494.5497,-1382.1348 494.5497,-1382.1348 494.5497,-1382.1348 496.2623,-1386.8324 498.7775,-1380.5934 497.9749,-1391.5299 497.9749,-1391.5299"/>
<text text-anchor="middle" x="467.6003" y="-1290.5862" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">has</text>
<text text-anchor="middle" x="483.8253" y="-1374.3953" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">1</text>
<!-- A18&#45;&gt;A19 -->
<g id="edge21" class="edge">
<title>A18&#45;&gt;A19</title>
<path fill="none" stroke="#000000" d="M710.3679,-1059.2448C711.2228,-999.4063 712.1831,-932.1816 712.8124,-888.1352"/>
<polygon fill="none" stroke="#000000" points="706.864,-1059.5008 710.2207,-1069.5499 713.8633,-1059.6009 706.864,-1059.5008"/>
</g>
<!-- A20 -->
<g id="node21" class="node">
<title>A20</title>
<polygon fill="none" stroke="#000000" points="595.5,-856 595.5,-888 662.5,-888 662.5,-856 595.5,-856"/>
<text text-anchor="start" x="608.1585" y="-869" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">InfosG3P</text>
<polygon fill="none" stroke="#000000" points="595.5,-836 595.5,-856 662.5,-856 662.5,-836 595.5,-836"/>
<polygon fill="none" stroke="#000000" points="595.5,-792 595.5,-836 662.5,-836 662.5,-792 595.5,-792"/>
<text text-anchor="start" x="605.384" y="-817" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ha_confs()</text>
<text text-anchor="start" x="613.168" y="-805" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">parse()</text>
</g>
<!-- A18&#45;&gt;A20 -->
<g id="edge22" class="edge">
<title>A18&#45;&gt;A20</title>
<path fill="none" stroke="#000000" d="M678.6978,-1059.6156C664.9993,-999.6842 649.5909,-932.2726 639.5023,-888.1352"/>
<polygon fill="none" stroke="#000000" points="675.3282,-1060.5812 680.9685,-1069.5499 682.1522,-1059.0214 675.3282,-1060.5812"/>
</g>
<!-- A21&#45;&gt;A7 -->
<g id="edge24" class="edge">
<title>A21&#45;&gt;A7</title>
<path fill="none" stroke="#000000" d="M532.1485,-1063.642C528.1248,-1050.7218 523.9814,-1037.4173 519.816,-1024.0422"/>
<polygon fill="#000000" stroke="#000000" points="516.7805,-1014.295 524.0504,-1022.5047 518.2672,-1019.0689 519.754,-1023.8428 519.754,-1023.8428 519.754,-1023.8428 518.2672,-1019.0689 515.4575,-1025.1808 516.7805,-1014.295 516.7805,-1014.295"/>
<text text-anchor="middle" x="518.6887" y="-1045.8489" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">use</text>
</g>
<!-- A21&#45;&gt;A12 -->
<g id="edge23" class="edge">
<title>A21&#45;&gt;A12</title>
<path fill="none" stroke="#000000" d="M543.2582,-1053.8586C527.4321,-942.6871 522.0429,-785.0573 586.5,-666 605.0485,-631.7395 627.6007,-639.7289 658.5,-616 668.3167,-608.4614 678.5375,-600.1921 688.3468,-592.0286"/>
<polygon fill="none" stroke="#000000" points="539.8016,-1054.4102 544.7181,-1063.7952 546.7273,-1053.3926 539.8016,-1054.4102"/>
</g>
<!-- A21&#45;&gt;A19 -->
<g id="edge25" class="edge">
<title>A21&#45;&gt;A19</title>
<path fill="none" stroke="#000000" d="M628.5567,-1095.0461C647.1824,-1062.9161 664.8088,-1030.911 671.5,-1014 686.2769,-976.654 696.8382,-932.668 703.6743,-898.2651"/>
<polygon fill="#000000" stroke="#000000" points="705.5902,-888.3728 708.1066,-899.0461 704.6395,-893.2816 703.6887,-898.1904 703.6887,-898.1904 703.6887,-898.1904 704.6395,-893.2816 699.2708,-897.3347 705.5902,-888.3728 705.5902,-888.3728"/>
</g>
<!-- A22&#45;&gt;A7 -->
<g id="edge27" class="edge">
<title>A22&#45;&gt;A7</title>
<path fill="none" stroke="#000000" d="M453.5903,-1099.8663C454.3908,-1076.5184 455.2825,-1050.5112 456.1837,-1024.2257"/>
<polygon fill="#000000" stroke="#000000" points="456.5294,-1014.1428 460.684,-1024.2912 456.358,-1019.1399 456.1866,-1024.137 456.1866,-1024.137 456.1866,-1024.137 456.358,-1019.1399 451.6893,-1023.9827 456.5294,-1014.1428 456.5294,-1014.1428"/>
<text text-anchor="middle" x="445.764" y="-1078.4612" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">use</text>
</g>
<!-- A22&#45;&gt;A15 -->
<g id="edge26" class="edge">
<title>A22&#45;&gt;A15</title>
<path fill="none" stroke="#000000" d="M415.8613,-1090.1122C408.0976,-1065.4347 400.4188,-1038.9251 394.5,-1014 359.1821,-865.2711 335.7422,-686.0529 325.457,-598.0829"/>
<polygon fill="none" stroke="#000000" points="412.5872,-1091.3659 418.9536,-1099.8347 419.258,-1089.2442 412.5872,-1091.3659"/>
</g>
<!-- A22&#45;&gt;A20 -->
<g id="edge28" class="edge">
<title>A22&#45;&gt;A20</title>
<path fill="none" stroke="#000000" d="M488.7237,-1099.7203C494.1861,-1087.6328 499.8669,-1075.4598 505.5,-1064 533.94,-1006.1426 569.724,-941.7952 595.3513,-896.9672"/>
<polygon fill="#000000" stroke="#000000" points="600.3362,-888.2696 599.2679,-899.1833 597.8499,-892.6076 595.3637,-896.9457 595.3637,-896.9457 595.3637,-896.9457 597.8499,-892.6076 591.4594,-894.708 600.3362,-888.2696 600.3362,-888.2696"/>
</g>
<!-- A23 -->
<g id="node24" class="node">
<title>A23</title>
<polygon fill="none" stroke="#000000" points="535.5,-1598 535.5,-1630 610.5,-1630 610.5,-1598 535.5,-1598"/>
<text text-anchor="start" x="555.2175" y="-1611" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">Modbus</text>
<polygon fill="none" stroke="#000000" points="535.5,-1446 535.5,-1598 610.5,-1598 610.5,-1446 535.5,-1446"/>
<text text-anchor="start" x="564.6615" y="-1579" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">que</text>
<text text-anchor="start" x="545.49" y="-1555" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">snd_handler</text>
<text text-anchor="start" x="546.605" y="-1543" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rsp_handler</text>
<text text-anchor="start" x="556.6085" y="-1531" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">timeout</text>
<text text-anchor="start" x="546.8895" y="-1519" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">max_retires</text>
<text text-anchor="start" x="554.942" y="-1507" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">last_xxx</text>
<text text-anchor="start" x="566.8915" y="-1495" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">err</text>
<text text-anchor="start" x="553.5535" y="-1483" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">retry_cnt</text>
<text text-anchor="start" x="551.879" y="-1471" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">req_pend</text>
<text text-anchor="start" x="566.3365" y="-1459" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tim</text>
<polygon fill="none" stroke="#000000" points="535.5,-1378 535.5,-1446 610.5,-1446 610.5,-1378 535.5,-1378"/>
<text text-anchor="start" x="546.89" y="-1427" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">build_msg()</text>
<text text-anchor="start" x="550.224" y="-1415" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">recv_req()</text>
<text text-anchor="start" x="547.724" y="-1403" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">recv_resp()</text>
<text text-anchor="start" x="558.0025" y="-1391" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
</g>
<!-- A23&#45;&gt;A21 -->
<g id="edge32" class="edge">
<title>A23&#45;&gt;A21</title>
<path fill="none" stroke="#000000" d="M572.0656,-1367.6092C572.0111,-1350.4944 571.9556,-1333.047 571.9016,-1316.0999"/>
<polygon fill="#000000" stroke="#000000" points="572.0976,-1377.6415 567.5657,-1367.6559 572.0816,-1372.6415 572.0656,-1367.6415 572.0656,-1367.6415 572.0656,-1367.6415 572.0816,-1372.6415 576.5656,-1367.6272 572.0976,-1377.6415 572.0976,-1377.6415"/>
<text text-anchor="middle" x="580.4116" y="-1331.199" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">has</text>
<text text-anchor="middle" x="563.5875" y="-1356.5423" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">1</text>
</g>
<!-- A23&#45;&gt;A22 -->
<g id="edge31" class="edge">
<title>A23&#45;&gt;A22</title>
<path fill="none" stroke="#000000" d="M531.4368,-1381.825C529.4631,-1376.4654 527.4791,-1371.1707 525.5,-1366 518.9997,-1349.0167 504.3384,-1314.3617 489.687,-1280.2598"/>
<polygon fill="#000000" stroke="#000000" points="534.9749,-1391.5299 527.3219,-1383.6762 533.2623,-1386.8324 531.5497,-1382.1348 531.5497,-1382.1348 531.5497,-1382.1348 533.2623,-1386.8324 535.7775,-1380.5934 534.9749,-1391.5299 534.9749,-1391.5299"/>
<text text-anchor="middle" x="504.6003" y="-1290.5862" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">has</text>
<text text-anchor="middle" x="520.8253" y="-1374.3953" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">1</text>
</g>
<!-- A24 -->
<g id="node25" class="node">
<title>A24</title>
<polygon fill="none" stroke="#000000" points=".5,-330 .5,-362 107.5,-362 107.5,-330 .5,-330"/>
<text text-anchor="start" x="24.2695" y="-343" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ModbusConn</text>
<polygon fill="none" stroke="#000000" points=".5,-262 .5,-330 107.5,-330 107.5,-262 .5,-262"/>
@@ -511,13 +554,13 @@
<text text-anchor="start" x="10.383" y="-275" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">stream:InverterG3P</text>
<polygon fill="none" stroke="#000000" points=".5,-242 .5,-262 107.5,-262 107.5,-242 .5,-242"/>
</g>
<!-- A20&#45;&gt;A4 -->
<g id="edge29" class="edge">
<title>A20&#45;&gt;A4</title>
<path fill="none" stroke="#000000" d="M84.8997,-241.788C94.9393,-222.6449 106.1365,-201.4067 116.5,-182 124.6218,-166.7911 133.4111,-150.5028 141.774,-135.0831"/>
<polygon fill="#000000" stroke="#000000" points="146.6405,-126.1193 145.824,-137.0548 144.2548,-130.5135 141.8692,-134.9077 141.8692,-134.9077 141.8692,-134.9077 144.2548,-130.5135 137.9144,-132.7607 146.6405,-126.1193 146.6405,-126.1193"/>
<text text-anchor="middle" x="145.4203" y="-143.0821" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">1</text>
<text text-anchor="middle" x="85.8379" y="-218.81" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">has</text>
<!-- A24&#45;&gt;A4 -->
<g id="edge33" class="edge">
<title>A24&#45;&gt;A4</title>
<path fill="none" stroke="#000000" d="M82.9971,-241.8919C93.0741,-222.462 104.7732,-201.0304 116.5,-182 126.2006,-166.2577 137.3039,-149.8296 148.1662,-134.4552"/>
<polygon fill="#000000" stroke="#000000" points="154.1656,-126.0333 152.0287,-136.789 151.2646,-130.1057 148.3636,-134.1781 148.3636,-134.1781 148.3636,-134.1781 151.2646,-130.1057 144.6984,-131.5672 154.1656,-126.0333 154.1656,-126.0333"/>
<text text-anchor="middle" x="150.5331" y="-142.7007" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">1</text>
<text text-anchor="middle" x="83.8877" y="-218.9117" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">has</text>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 47 KiB

View File

@@ -23,16 +23,26 @@
[AsyncStream]<-[AsyncStreamClient]
[ConnectionG3|remote.stream:ConnectionG3|healthy();close()]
[ConnectionG3]^[InverterG3]
[ConnectionG3]has-0..1>[ConnectionG3]
[ConnectionG3]++-0..1>[AsyncStreamClient]
[ConnectionG3]++-0..1>[AsyncStreamServer]
[ConnectionG3|remote.stream:ConnectionG3|healthy()]
[ConnectionG3]^[ConnectionG3Client]
[ConnectionG3]^[ConnectionG3Server]
[ConnectionG3Client|remote.stream:ConnectionG3|close()]
[ConnectionG3Client]^[InverterG3]
[ConnectionG3Client]++-1>[AsyncStreamClient]
[ConnectionG3Server|remote.stream:ConnectionG3|;close()]
[ConnectionG3Server]^[InverterG3]
[ConnectionG3Server]++-1>[AsyncStreamServer]
[ConnectionG3P|remote.stream:ConnectionG3P|healthy();close()]
[ConnectionG3P]^[InverterG3P]
[ConnectionG3P]has-0..1>[ConnectionG3P]
[ConnectionG3P]++-0..1>[AsyncStreamClient]
[ConnectionG3P]++-0..1>[AsyncStreamServer]
[ConnectionG3P]^[ConnectionG3PClient]
[ConnectionG3P]^[ConnectionG3PServer]
[ConnectionG3PClient|remote.stream:ConnectionG3P|close()]
[ConnectionG3PClient]^[InverterG3P]
[ConnectionG3PClient]++-1>[AsyncStreamClient]
[ConnectionG3PServer|remote.stream:ConnectionG3P|;close()]
[ConnectionG3PServer]^[InverterG3P]
[ConnectionG3PServer]++-1>[AsyncStreamServer]
[Infos|stat;new_stat_data;info_dev|static_init();dev_value();inc_counter();dec_counter();ha_proxy_conf;ha_conf;ha_remove;update_db;set_db_def_value;get_db_value;ignore_this_device]
[Infos]^[InfosG3||ha_confs();parse()]

View File

@@ -14,32 +14,6 @@ logger = logging.getLogger('conn')
class ConnectionG3(Talent):
def __init__(self, reader: StreamReader, writer: StreamWriter,
addr, rstream: 'ConnectionG3', server_side: bool,
id_str=b'') -> None:
self.remote = StreamPtr(rstream)
if server_side:
self._ifc = AsyncStreamServer(reader, writer, addr,
self.async_publ_mqtt,
self.async_create_remote,
self.remote)
else:
self._ifc = AsyncStreamClient(reader, writer, addr,
self.remote)
Talent.__init__(self, server_side, self._ifc, id_str)
self.conn_no = self._ifc.get_conn_no()
self.addr = addr
'''
Our puplic methods
'''
def close(self):
self._ifc.close()
Talent.close(self)
# logger.info(f'AsyncStream refs: {gc.get_referrers(self)}')
async def async_create_remote(self) -> None:
pass # virtual interface # pragma: no cover
@@ -49,3 +23,39 @@ class ConnectionG3(Talent):
def healthy(self) -> bool:
logger.debug('ConnectionG3 healthy()')
return self._ifc.healthy()
def close(self):
self._ifc.close()
Talent.close(self)
# logger.info(f'AsyncStream refs: {gc.get_referrers(self)}')
class ConnectionG3Server(ConnectionG3):
def __init__(self, reader: StreamReader, writer: StreamWriter,
addr, rstream: 'ConnectionG3Client',
id_str=b'') -> None:
server_side = True
self.remote = StreamPtr(rstream)
self._ifc = AsyncStreamServer(reader, writer, addr,
self.async_publ_mqtt,
self.async_create_remote,
self.remote)
self.conn_no = self._ifc.get_conn_no()
self.addr = addr
Talent.__init__(self, server_side, self._ifc, id_str)
class ConnectionG3Client(ConnectionG3):
def __init__(self, reader: StreamReader, writer: StreamWriter,
addr, rstream: 'ConnectionG3Server',
id_str=b'') -> None:
server_side = False
self.remote = StreamPtr(rstream)
self._ifc = AsyncStreamClient(reader, writer, addr,
self.remote)
self.conn_no = self._ifc.get_conn_no()
self.addr = addr
Talent.__init__(self, server_side, self._ifc, id_str)

View File

@@ -8,19 +8,21 @@ from aiomqtt import MqttCodeError
if __name__ == "app.src.gen3.inverter_g3":
from app.src.config import Config
from app.src.inverter import Inverter
from app.src.gen3.connection_g3 import ConnectionG3
from app.src.gen3.connection_g3 import ConnectionG3Server
from app.src.gen3.connection_g3 import ConnectionG3Client
from app.src.infos import Infos
else: # pragma: no cover
from config import Config
from inverter import Inverter
from gen3.connection_g3 import ConnectionG3
from gen3.connection_g3 import ConnectionG3Server
from gen3.connection_g3 import ConnectionG3Client
from infos import Infos
logger_mqtt = logging.getLogger('mqtt')
class InverterG3(Inverter, ConnectionG3):
class InverterG3(Inverter, ConnectionG3Server):
'''class Inverter is a derivation of an Async_Stream
The class has some class method for managing common resources like a
@@ -51,7 +53,7 @@ class InverterG3(Inverter, ConnectionG3):
'''
def __init__(self, reader: StreamReader, writer: StreamWriter, addr):
super().__init__(reader, writer, addr, None, True)
super().__init__(reader, writer, addr, None)
self.__ha_restarts = -1
self.addr = addr
@@ -66,8 +68,8 @@ class InverterG3(Inverter, ConnectionG3):
logging.info(f'[{self.node_id}] Connect to {addr}')
connect = asyncio.open_connection(host, port)
reader, writer = await connect
self.remote.stream = ConnectionG3(reader, writer, addr, self,
False, self.id_str)
self.remote.stream = ConnectionG3Client(reader, writer, addr, self,
self.id_str)
logging.info(f'[{self.remote.stream.node_id}:'
f'{self.remote.stream.conn_no}] '
f'Connected to {addr}')

View File

@@ -14,35 +14,6 @@ logger = logging.getLogger('conn')
class ConnectionG3P(SolarmanV5):
def __init__(self, reader: StreamReader, writer: StreamWriter,
addr, rstream: 'ConnectionG3P',
server_side: bool,
client_mode: bool) -> None:
self.remote = StreamPtr(rstream)
if server_side:
self._ifc = AsyncStreamServer(reader, writer, addr,
self.async_publ_mqtt,
self.async_create_remote,
self.remote)
else:
self._ifc = AsyncStreamClient(reader, writer, addr,
self.remote)
SolarmanV5.__init__(self, server_side, client_mode, self._ifc)
self.conn_no = self._ifc.get_conn_no()
self.addr = addr
'''
Our puplic methods
'''
def close(self):
self._ifc.close()
SolarmanV5.close(self)
# logger.info(f'AsyncStream refs: {gc.get_referrers(self)}')
async def async_create_remote(self) -> None:
pass # virtual interface # pragma: no cover
@@ -52,3 +23,39 @@ class ConnectionG3P(SolarmanV5):
def healthy(self) -> bool:
logger.debug('ConnectionG3P healthy()')
return self._ifc.healthy()
def close(self):
self._ifc.close()
SolarmanV5.close(self)
# logger.info(f'AsyncStream refs: {gc.get_referrers(self)}')
class ConnectionG3PServer(ConnectionG3P):
def __init__(self, reader: StreamReader, writer: StreamWriter,
addr, rstream: 'ConnectionG3PClient',
client_mode: bool) -> None:
server_side = True
self.remote = StreamPtr(rstream)
self._ifc = AsyncStreamServer(reader, writer, addr,
self.async_publ_mqtt,
self.async_create_remote,
self.remote)
self.conn_no = self._ifc.get_conn_no()
self.addr = addr
SolarmanV5.__init__(self, server_side, client_mode, self._ifc)
class ConnectionG3PClient(ConnectionG3P):
def __init__(self, reader: StreamReader, writer: StreamWriter,
addr, rstream: 'ConnectionG3PServer') -> None:
server_side = False
client_mode = False
self.remote = StreamPtr(rstream)
self._ifc = AsyncStreamClient(reader, writer, addr, self.remote)
self.conn_no = self._ifc.get_conn_no()
self.addr = addr
SolarmanV5.__init__(self, server_side, client_mode, self._ifc)

View File

@@ -8,19 +8,21 @@ from aiomqtt import MqttCodeError
if __name__ == "app.src.gen3plus.inverter_g3p":
from app.src.config import Config
from app.src.inverter import Inverter
from app.src.gen3plus.connection_g3p import ConnectionG3P
from app.src.gen3plus.connection_g3p import ConnectionG3PServer
from app.src.gen3plus.connection_g3p import ConnectionG3PClient
from app.src.infos import Infos
else: # pragma: no cover
from config import Config
from inverter import Inverter
from gen3plus.connection_g3p import ConnectionG3P
from gen3plus.connection_g3p import ConnectionG3PServer
from gen3plus.connection_g3p import ConnectionG3PClient
from infos import Infos
logger_mqtt = logging.getLogger('mqtt')
class InverterG3P(Inverter, ConnectionG3P):
class InverterG3P(Inverter, ConnectionG3PServer):
'''class Inverter is a derivation of an Async_Stream
The class has some class method for managing common resources like a
@@ -53,7 +55,7 @@ class InverterG3P(Inverter, ConnectionG3P):
def __init__(self, reader: StreamReader, writer: StreamWriter, addr,
client_mode: bool = False):
super().__init__(reader, writer, addr, None,
server_side=True, client_mode=client_mode)
client_mode=client_mode)
self.__ha_restarts = -1
self.addr = addr
@@ -68,9 +70,8 @@ class InverterG3P(Inverter, ConnectionG3P):
logging.info(f'[{self.node_id}] Connect to {addr}')
connect = asyncio.open_connection(host, port)
reader, writer = await connect
self.remote.stream = ConnectionG3P(reader, writer, addr, self,
server_side=False,
client_mode=False)
self.remote.stream = ConnectionG3PClient(reader, writer,
addr, self)
logging.info(f'[{self.remote.stream.node_id}:'
f'{self.remote.stream.conn_no}] '
f'Connected to {addr}')

View File

@@ -5,7 +5,7 @@ import asyncio
from itertools import count
from mock import patch
from app.src.async_stream import AsyncStream, AsyncIfcImpl
from app.src.gen3.connection_g3 import ConnectionG3
from app.src.gen3.connection_g3 import ConnectionG3Server
from app.src.gen3.talent import Talent
@pytest.fixture
@@ -71,8 +71,8 @@ def test_method_calls(patch_talent_init, patch_healthy, patch_async_close, patch
writer = FakeWriter()
id_str = "id_string"
addr = ('proxy.local', 10000)
conn = ConnectionG3(reader, writer, addr,
rstream= None, server_side=True, id_str=id_str)
conn = ConnectionG3Server(reader, writer, addr,
rstream= None, id_str=id_str)
assert 5 == conn._ifc.get_conn_no()
spy2.assert_called_once_with(conn, True, conn._ifc, id_str)
conn.healthy()

View File

@@ -6,7 +6,7 @@ from itertools import count
from mock import patch
from app.src.singleton import Singleton
from app.src.async_stream import AsyncStream, AsyncIfcImpl
from app.src.gen3plus.connection_g3p import ConnectionG3P
from app.src.gen3plus.connection_g3p import ConnectionG3PServer
from app.src.gen3plus.solarman_v5 import SolarmanV5
@pytest.fixture
@@ -76,8 +76,8 @@ def test_method_calls(patch_solarman_init, patch_healthy, patch_async_close, pat
reader = FakeReader()
writer = FakeWriter()
addr = ('proxy.local', 10000)
conn = ConnectionG3P(reader, writer, addr,
rstream= None, server_side=True, client_mode=False)
conn = ConnectionG3PServer(reader, writer, addr,
rstream= None, client_mode=False)
assert 5 == conn._ifc.get_conn_no()
spy2.assert_called_once_with(conn, True, False, conn._ifc)
conn.healthy()

View File

@@ -8,7 +8,7 @@ from app.src.infos import Infos
from app.src.config import Config
from app.src.inverter import Inverter
from app.src.singleton import Singleton
from app.src.gen3.connection_g3 import ConnectionG3
from app.src.gen3.connection_g3 import ConnectionG3Server
from app.src.gen3.inverter_g3 import InverterG3
from app.tests.test_modbus_tcp import patch_mqtt_err, patch_mqtt_except, test_port, test_hostname
@@ -44,12 +44,12 @@ def module_init():
@pytest.fixture
def patch_conn_init():
with patch.object(ConnectionG3, '__init__', return_value= None) as conn:
with patch.object(ConnectionG3Server, '__init__', return_value= None) as conn:
yield conn
@pytest.fixture
def patch_conn_close():
with patch.object(ConnectionG3, 'close') as conn:
with patch.object(ConnectionG3Server, 'close') as conn:
yield conn
class FakeReader():
@@ -115,7 +115,7 @@ def test_method_calls(patch_conn_init, patch_conn_close):
inverter.r_addr = ''
spy1.assert_called_once()
spy1.assert_called_once_with(reader, writer, addr, None, True)
spy1.assert_called_once_with(reader, writer, addr, None)
inverter.close()
spy2.assert_called_once()

View File

@@ -8,7 +8,7 @@ from app.src.infos import Infos
from app.src.config import Config
from app.src.inverter import Inverter
from app.src.singleton import Singleton
from app.src.gen3plus.connection_g3p import ConnectionG3P
from app.src.gen3plus.connection_g3p import ConnectionG3PServer
from app.src.gen3plus.inverter_g3p import InverterG3P
from app.tests.test_modbus_tcp import patch_mqtt_err, patch_mqtt_except, test_port, test_hostname
@@ -45,12 +45,12 @@ def module_init():
@pytest.fixture
def patch_conn_init():
with patch.object(ConnectionG3P, '__init__', return_value= None) as conn:
with patch.object(ConnectionG3PServer, '__init__', return_value= None) as conn:
yield conn
@pytest.fixture
def patch_conn_close():
with patch.object(ConnectionG3P, 'close') as conn:
with patch.object(ConnectionG3PServer, 'close') as conn:
yield conn
class FakeReader():
@@ -116,7 +116,7 @@ def test_method_calls(patch_conn_init, patch_conn_close):
inverter.r_addr = ''
spy1.assert_called_once()
spy1.assert_called_once_with(reader, writer, addr, None, server_side=True, client_mode=False)
spy1.assert_called_once_with(reader, writer, addr, None, client_mode=False)
inverter.close()
spy2.assert_called_once()