move more code into InverterBase class
This commit is contained in:
574
app/proxy.svg
574
app/proxy.svg
@@ -4,519 +4,193 @@
|
||||
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
|
||||
-->
|
||||
<!-- Title: G Pages: 1 -->
|
||||
<svg width="835pt" height="1800pt"
|
||||
viewBox="0.00 0.00 835.00 1800.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 1796)">
|
||||
<svg width="463pt" height="882pt"
|
||||
viewBox="0.00 0.00 463.35 882.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 878)">
|
||||
<title>G</title>
|
||||
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-1796 831,-1796 831,4 -4,4"/>
|
||||
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-878 459.348,-878 459.348,4 -4,4"/>
|
||||
<!-- A0 -->
|
||||
<g id="node1" class="node">
|
||||
<title>A0</title>
|
||||
<polygon fill="#fff8dc" stroke="#000000" points="388.6964,-1768 280.3036,-1768 280.3036,-1732 394.6964,-1732 394.6964,-1762 388.6964,-1768"/>
|
||||
<polyline fill="none" stroke="#000000" points="388.6964,-1768 388.6964,-1762 "/>
|
||||
<polyline fill="none" stroke="#000000" points="394.6964,-1762 388.6964,-1762 "/>
|
||||
<text text-anchor="middle" x="337.5" y="-1753" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">You can stick notes</text>
|
||||
<text text-anchor="middle" x="337.5" y="-1741" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">on diagrams too!</text>
|
||||
<polygon fill="#fff8dc" stroke="#000000" points="108.5444,-850 .1516,-850 .1516,-814 114.5444,-814 114.5444,-844 108.5444,-850"/>
|
||||
<polyline fill="none" stroke="#000000" points="108.5444,-850 108.5444,-844 "/>
|
||||
<polyline fill="none" stroke="#000000" points="114.5444,-844 108.5444,-844 "/>
|
||||
<text text-anchor="middle" x="57.348" y="-835" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">You can stick notes</text>
|
||||
<text text-anchor="middle" x="57.348" y="-823" 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="413.5,-1760 413.5,-1792 484.5,-1792 484.5,-1760 413.5,-1760"/>
|
||||
<text text-anchor="start" x="423.445" y="-1773" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">IterRegistry</text>
|
||||
<polygon fill="none" stroke="#000000" points="413.5,-1740 413.5,-1760 484.5,-1760 484.5,-1740 413.5,-1740"/>
|
||||
<polygon fill="none" stroke="#000000" points="413.5,-1708 413.5,-1740 484.5,-1740 484.5,-1708 413.5,-1708"/>
|
||||
<text text-anchor="start" x="430.939" y="-1721" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">__iter__</text>
|
||||
<polygon fill="none" stroke="#000000" points="133.348,-842 133.348,-874 204.348,-874 204.348,-842 133.348,-842"/>
|
||||
<text text-anchor="start" x="143.293" y="-855" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">IterRegistry</text>
|
||||
<polygon fill="none" stroke="#000000" points="133.348,-822 133.348,-842 204.348,-842 204.348,-822 133.348,-822"/>
|
||||
<polygon fill="none" stroke="#000000" points="133.348,-790 133.348,-822 204.348,-822 204.348,-790 133.348,-790"/>
|
||||
<text text-anchor="start" x="150.787" y="-803" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">__iter__</text>
|
||||
</g>
|
||||
<!-- A3 -->
|
||||
<g id="node4" class="node">
|
||||
<title>A3</title>
|
||||
<polygon fill="none" stroke="#000000" points="150.5,-1590 150.5,-1622 446.5,-1622 446.5,-1590 150.5,-1590"/>
|
||||
<text text-anchor="start" x="281.5535" y="-1603" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">Inverter</text>
|
||||
<polygon fill="none" stroke="#000000" points="150.5,-1474 150.5,-1590 446.5,-1590 446.5,-1474 150.5,-1474"/>
|
||||
<text text-anchor="start" x="274.604" y="-1571" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">cls.db_stat</text>
|
||||
<text text-anchor="start" x="267.9405" y="-1559" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">cls.entity_prfx</text>
|
||||
<text text-anchor="start" x="258.7755" y="-1547" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">cls.discovery_prfx</text>
|
||||
<text text-anchor="start" x="258.2115" y="-1535" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">cls.proxy_node_id</text>
|
||||
<text text-anchor="start" x="254.3225" y="-1523" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">cls.proxy_unique_id</text>
|
||||
<text text-anchor="start" x="270.1655" y="-1511" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">cls.mqtt:Mqtt</text>
|
||||
<text text-anchor="start" x="267.9355" y="-1487" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">__ha_restarts</text>
|
||||
<polygon fill="none" stroke="#000000" points="150.5,-1442 150.5,-1474 446.5,-1474 446.5,-1442 150.5,-1442"/>
|
||||
<text text-anchor="start" x="160.418" y="-1455" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">async_create_remote(inv_prot, conn_class)async_publ_mqtt()</text>
|
||||
<polygon fill="none" stroke="#000000" points="20.348,-708 20.348,-740 316.348,-740 316.348,-708 20.348,-708"/>
|
||||
<text text-anchor="start" x="151.4015" y="-721" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">Inverter</text>
|
||||
<polygon fill="none" stroke="#000000" points="20.348,-592 20.348,-708 316.348,-708 316.348,-592 20.348,-592"/>
|
||||
<text text-anchor="start" x="144.452" y="-689" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">cls.db_stat</text>
|
||||
<text text-anchor="start" x="137.7885" y="-677" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">cls.entity_prfx</text>
|
||||
<text text-anchor="start" x="128.6235" y="-665" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">cls.discovery_prfx</text>
|
||||
<text text-anchor="start" x="128.0595" y="-653" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">cls.proxy_node_id</text>
|
||||
<text text-anchor="start" x="124.1705" y="-641" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">cls.proxy_unique_id</text>
|
||||
<text text-anchor="start" x="140.0135" y="-629" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">cls.mqtt:Mqtt</text>
|
||||
<text text-anchor="start" x="137.7835" y="-605" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">__ha_restarts</text>
|
||||
<polygon fill="none" stroke="#000000" points="20.348,-560 20.348,-592 316.348,-592 316.348,-560 20.348,-560"/>
|
||||
<text text-anchor="start" x="30.266" y="-573" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">async_create_remote(inv_prot, conn_class)async_publ_mqtt()</text>
|
||||
</g>
|
||||
<!-- A1->A3 -->
|
||||
<g id="edge5" class="edge">
|
||||
<title>A1->A3</title>
|
||||
<path fill="none" stroke="#000000" d="M413.9036,-1699.7199C398.0565,-1676.6887 378.7787,-1648.6717 360.5529,-1622.1835"/>
|
||||
<polygon fill="none" stroke="#000000" points="411.0266,-1701.7132 419.5785,-1707.9674 416.7933,-1697.7452 411.0266,-1701.7132"/>
|
||||
</g>
|
||||
<!-- A18 -->
|
||||
<g id="node19" class="node">
|
||||
<title>A18</title>
|
||||
<polygon fill="none" stroke="#000000" points="558.5,-1554 558.5,-1586 639.5,-1586 639.5,-1554 558.5,-1554"/>
|
||||
<text text-anchor="start" x="578.7175" y="-1567" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">Message</text>
|
||||
<polygon fill="none" stroke="#000000" points="558.5,-1522 558.5,-1554 639.5,-1554 639.5,-1522 558.5,-1522"/>
|
||||
<text text-anchor="start" x="581.2135" y="-1535" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">node_id</text>
|
||||
<polygon fill="none" stroke="#000000" points="558.5,-1478 558.5,-1522 639.5,-1522 639.5,-1478 558.5,-1478"/>
|
||||
<text text-anchor="start" x="569.8305" y="-1503" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">inc_counter()</text>
|
||||
<text text-anchor="start" x="568.1605" y="-1491" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">dec_counter()</text>
|
||||
</g>
|
||||
<!-- A1->A18 -->
|
||||
<g id="edge25" class="edge">
|
||||
<title>A1->A18</title>
|
||||
<path fill="none" stroke="#000000" d="M492.1048,-1717.9107C511.7288,-1701.7077 533.9297,-1680.6887 549.5,-1658 564.3743,-1636.3255 575.6125,-1609.499 583.5491,-1586.1771"/>
|
||||
<polygon fill="none" stroke="#000000" points="489.7437,-1715.3186 484.1644,-1724.3254 494.1426,-1720.7638 489.7437,-1715.3186"/>
|
||||
<path fill="none" stroke="#000000" d="M168.348,-779.6728C168.348,-767.2695 168.348,-753.6887 168.348,-740.1336"/>
|
||||
<polygon fill="none" stroke="#000000" points="164.8481,-779.7881 168.348,-789.7881 171.8481,-779.7881 164.8481,-779.7881"/>
|
||||
</g>
|
||||
<!-- A2 -->
|
||||
<g id="node3" class="node">
|
||||
<title>A2</title>
|
||||
<polygon fill="none" stroke="#000000" points="304.5,-1228 304.5,-1272 426.5,-1272 426.5,-1228 304.5,-1228"/>
|
||||
<text text-anchor="start" x="355.777" y="-1253" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">Mqtt</text>
|
||||
<text text-anchor="start" x="332.9815" y="-1241" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><<Singleton>></text>
|
||||
<polygon fill="none" stroke="#000000" points="304.5,-1172 304.5,-1228 426.5,-1228 426.5,-1172 304.5,-1172"/>
|
||||
<text text-anchor="start" x="322.9875" y="-1209" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><static>ha_restarts</text>
|
||||
<text text-anchor="start" x="330.7665" y="-1197" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><static>__client</text>
|
||||
<text text-anchor="start" x="314.3735" y="-1185" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><static>__cb_MqttIsUp</text>
|
||||
<polygon fill="none" stroke="#000000" points="304.5,-1128 304.5,-1172 426.5,-1172 426.5,-1128 304.5,-1128"/>
|
||||
<text text-anchor="start" x="327.436" y="-1153" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><async>publish()</text>
|
||||
<text text-anchor="start" x="331.6045" y="-1141" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><async>close()</text>
|
||||
<polygon fill="none" stroke="#000000" points="27.348,-466 27.348,-510 149.348,-510 149.348,-466 27.348,-466"/>
|
||||
<text text-anchor="start" x="78.625" y="-491" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">Mqtt</text>
|
||||
<text text-anchor="start" x="55.8295" y="-479" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><<Singleton>></text>
|
||||
<polygon fill="none" stroke="#000000" points="27.348,-410 27.348,-466 149.348,-466 149.348,-410 27.348,-410"/>
|
||||
<text text-anchor="start" x="45.8355" y="-447" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><static>ha_restarts</text>
|
||||
<text text-anchor="start" x="53.6145" y="-435" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><static>__client</text>
|
||||
<text text-anchor="start" x="37.2215" y="-423" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><static>__cb_MqttIsUp</text>
|
||||
<polygon fill="none" stroke="#000000" points="27.348,-366 27.348,-410 149.348,-410 149.348,-366 27.348,-366"/>
|
||||
<text text-anchor="start" x="50.284" y="-391" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><async>publish()</text>
|
||||
<text text-anchor="start" x="54.4525" y="-379" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><async>close()</text>
|
||||
</g>
|
||||
<!-- A3->A2 -->
|
||||
<g id="edge4" class="edge">
|
||||
<title>A3->A2</title>
|
||||
<path fill="none" stroke="#000000" d="M319.1555,-1429.6474C328.7234,-1382.2362 339.9387,-1326.6622 348.9397,-1282.0602"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="319.0935,-1429.9552 321.8275,-1436.6279 316.7195,-1441.7181 313.9855,-1435.0453 319.0935,-1429.9552"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="350.9422,-1272.137 353.375,-1282.8296 349.9531,-1277.0382 348.964,-1281.9393 348.964,-1281.9393 348.964,-1281.9393 349.9531,-1277.0382 344.5529,-1281.0491 350.9422,-1272.137 350.9422,-1272.137"/>
|
||||
<path fill="none" stroke="#000000" d="M130.0325,-548.4638C126.3726,-538.7653 122.694,-529.0169 119.1193,-519.544"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="130.068,-548.5583 135.9288,-552.7596 134.3048,-559.7855 128.444,-555.5841 130.068,-548.5583"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="115.5839,-510.1751 123.3248,-517.9424 117.3492,-514.8532 119.1145,-519.5312 119.1145,-519.5312 119.1145,-519.5312 117.3492,-514.8532 114.9043,-521.12 115.5839,-510.1751 115.5839,-510.1751"/>
|
||||
</g>
|
||||
<!-- A4 -->
|
||||
<g id="node5" class="node">
|
||||
<title>A4</title>
|
||||
<polygon fill="none" stroke="#000000" points="125.5,-1222 125.5,-1254 286.5,-1254 286.5,-1222 125.5,-1222"/>
|
||||
<text text-anchor="start" x="177.66" y="-1235" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">InverterBase</text>
|
||||
<polygon fill="none" stroke="#000000" points="125.5,-1202 125.5,-1222 286.5,-1222 286.5,-1202 125.5,-1202"/>
|
||||
<polygon fill="none" stroke="#000000" points="125.5,-1146 125.5,-1202 286.5,-1202 286.5,-1146 125.5,-1146"/>
|
||||
<text text-anchor="start" x="135.426" y="-1183" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><async>disc(shutdown_started)</text>
|
||||
<text text-anchor="start" x="135.7055" y="-1171" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><async>async_create_remote()</text>
|
||||
<text text-anchor="start" x="186.554" y="-1159" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">healthy()</text>
|
||||
<polygon fill="none" stroke="#000000" points="168.348,-460 168.348,-492 329.348,-492 329.348,-460 168.348,-460"/>
|
||||
<text text-anchor="start" x="220.508" y="-473" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">InverterBase</text>
|
||||
<polygon fill="none" stroke="#000000" points="168.348,-440 168.348,-460 329.348,-460 329.348,-440 168.348,-440"/>
|
||||
<polygon fill="none" stroke="#000000" points="168.348,-384 168.348,-440 329.348,-440 329.348,-384 168.348,-384"/>
|
||||
<text text-anchor="start" x="178.274" y="-421" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><async>disc(shutdown_started)</text>
|
||||
<text text-anchor="start" x="178.5535" y="-409" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><async>async_create_remote()</text>
|
||||
<text text-anchor="start" x="229.402" y="-397" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">healthy()</text>
|
||||
</g>
|
||||
<!-- A3->A4 -->
|
||||
<g id="edge1" class="edge">
|
||||
<title>A3->A4</title>
|
||||
<path fill="none" stroke="#000000" d="M270.4168,-1431.746C254.1017,-1373.5028 234.1788,-1302.3802 220.7415,-1254.4107"/>
|
||||
<polygon fill="none" stroke="#000000" points="267.1425,-1433.0328 273.2102,-1441.7181 273.883,-1431.1446 267.1425,-1433.0328"/>
|
||||
<path fill="none" stroke="#000000" d="M205.9667,-550.3105C213.5193,-530.2961 221.1855,-509.9807 227.8831,-492.2319"/>
|
||||
<polygon fill="none" stroke="#000000" points="202.6472,-549.1938 202.3912,-559.7855 209.1964,-551.6652 202.6472,-549.1938"/>
|
||||
</g>
|
||||
<!-- A5 -->
|
||||
<g id="node6" class="node">
|
||||
<title>A5</title>
|
||||
<polygon fill="none" stroke="#000000" points="290.5,-860 290.5,-892 412.5,-892 412.5,-860 290.5,-860"/>
|
||||
<text text-anchor="start" x="327.8845" y="-873" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">InverterG3</text>
|
||||
<polygon fill="none" stroke="#000000" points="290.5,-804 290.5,-860 412.5,-860 412.5,-804 290.5,-804"/>
|
||||
<text text-anchor="start" x="341.497" y="-841" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">addr</text>
|
||||
<text text-anchor="start" x="312.053" y="-829" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">remote:StreamPtr</text>
|
||||
<text text-anchor="start" x="317.332" y="-817" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">local:StreamPtr</text>
|
||||
<polygon fill="none" stroke="#000000" points="290.5,-748 290.5,-804 412.5,-804 412.5,-748 290.5,-748"/>
|
||||
<text text-anchor="start" x="300.1035" y="-785" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">async_create_remote()</text>
|
||||
<text text-anchor="start" x="336.5025" y="-761" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
|
||||
<polygon fill="none" stroke="#000000" points="187.348,-284 187.348,-316 309.348,-316 309.348,-284 187.348,-284"/>
|
||||
<text text-anchor="start" x="224.7325" y="-297" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">InverterG3</text>
|
||||
<polygon fill="none" stroke="#000000" points="187.348,-228 187.348,-284 309.348,-284 309.348,-228 187.348,-228"/>
|
||||
<text text-anchor="start" x="238.345" y="-265" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">addr</text>
|
||||
<text text-anchor="start" x="208.901" y="-253" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">remote:StreamPtr</text>
|
||||
<text text-anchor="start" x="214.18" y="-241" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">local:StreamPtr</text>
|
||||
<polygon fill="none" stroke="#000000" points="187.348,-172 187.348,-228 309.348,-228 309.348,-172 187.348,-172"/>
|
||||
<text text-anchor="start" x="196.9515" y="-209" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">async_create_remote()</text>
|
||||
<text text-anchor="start" x="233.3505" y="-185" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
|
||||
</g>
|
||||
<!-- A4->A5 -->
|
||||
<g id="edge2" class="edge">
|
||||
<title>A4->A5</title>
|
||||
<path fill="none" stroke="#000000" d="M229.9763,-1136.2945C255.9003,-1068.8213 296.7461,-962.5101 323.8242,-892.0328"/>
|
||||
<polygon fill="none" stroke="#000000" points="226.5826,-1135.3688 226.2632,-1145.9588 233.1169,-1137.8794 226.5826,-1135.3688"/>
|
||||
<path fill="none" stroke="#000000" d="M248.348,-373.9068C248.348,-355.4405 248.348,-335.1691 248.348,-316.2449"/>
|
||||
<polygon fill="none" stroke="#000000" points="244.8481,-373.9601 248.348,-383.9602 251.8481,-373.9602 244.8481,-373.9601"/>
|
||||
</g>
|
||||
<!-- A6 -->
|
||||
<g id="node7" class="node">
|
||||
<title>A6</title>
|
||||
<polygon fill="none" stroke="#000000" points="150.5,-860 150.5,-892 272.5,-892 272.5,-860 150.5,-860"/>
|
||||
<text text-anchor="start" x="184.55" y="-873" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">InverterG3P</text>
|
||||
<polygon fill="none" stroke="#000000" points="150.5,-804 150.5,-860 272.5,-860 272.5,-804 150.5,-804"/>
|
||||
<text text-anchor="start" x="201.497" y="-841" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">addr</text>
|
||||
<text text-anchor="start" x="172.053" y="-829" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">remote:StreamPtr</text>
|
||||
<text text-anchor="start" x="177.332" y="-817" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">local:StreamPtr</text>
|
||||
<polygon fill="none" stroke="#000000" points="150.5,-748 150.5,-804 272.5,-804 272.5,-748 150.5,-748"/>
|
||||
<text text-anchor="start" x="160.1035" y="-785" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">async_create_remote()</text>
|
||||
<text text-anchor="start" x="196.5025" y="-761" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
|
||||
<polygon fill="none" stroke="#000000" points="333.348,-284 333.348,-316 455.348,-316 455.348,-284 333.348,-284"/>
|
||||
<text text-anchor="start" x="367.398" y="-297" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">InverterG3P</text>
|
||||
<polygon fill="none" stroke="#000000" points="333.348,-228 333.348,-284 455.348,-284 455.348,-228 333.348,-228"/>
|
||||
<text text-anchor="start" x="384.345" y="-265" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">addr</text>
|
||||
<text text-anchor="start" x="354.901" y="-253" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">remote:StreamPtr</text>
|
||||
<text text-anchor="start" x="360.18" y="-241" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">local:StreamPtr</text>
|
||||
<polygon fill="none" stroke="#000000" points="333.348,-172 333.348,-228 455.348,-228 455.348,-172 333.348,-172"/>
|
||||
<text text-anchor="start" x="342.9515" y="-209" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">async_create_remote()</text>
|
||||
<text text-anchor="start" x="379.3505" y="-185" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
|
||||
</g>
|
||||
<!-- A4->A6 -->
|
||||
<g id="edge3" class="edge">
|
||||
<title>A4->A6</title>
|
||||
<path fill="none" stroke="#000000" d="M206.5124,-1135.8792C207.5781,-1068.3857 209.2521,-962.3657 210.3626,-892.0328"/>
|
||||
<polygon fill="none" stroke="#000000" points="203.0117,-1135.9048 206.3533,-1145.9588 210.0108,-1136.0154 203.0117,-1135.9048"/>
|
||||
</g>
|
||||
<!-- A10 -->
|
||||
<g id="node11" class="node">
|
||||
<title>A10</title>
|
||||
<polygon fill="none" stroke="#000000" points="310.5,-100 310.5,-132 488.5,-132 488.5,-100 310.5,-100"/>
|
||||
<text text-anchor="start" x="355.0515" y="-113" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">AsyncStreamServer</text>
|
||||
<polygon fill="none" stroke="#000000" points="310.5,-68 310.5,-100 488.5,-100 488.5,-68 310.5,-68"/>
|
||||
<text text-anchor="start" x="351.4325" y="-81" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">async_create_remote</text>
|
||||
<polygon fill="none" stroke="#000000" points="310.5,0 310.5,-68 488.5,-68 488.5,0 310.5,0"/>
|
||||
<text text-anchor="start" x="351.1575" y="-49" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><async>server_loop()</text>
|
||||
<text text-anchor="start" x="341.9885" y="-37" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><async>_async_forward()</text>
|
||||
<text text-anchor="start" x="320.309" y="-25" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><async>publish_outstanding_mqtt()</text>
|
||||
<text text-anchor="start" x="384.5025" y="-13" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
|
||||
</g>
|
||||
<!-- A5->A10 -->
|
||||
<g id="edge13" class="edge">
|
||||
<title>A5->A10</title>
|
||||
<path fill="none" stroke="#000000" d="M348.2697,-735.5916C344.8762,-613.0113 343.2848,-378.8606 370.5,-182 372.3009,-168.9729 374.9865,-155.2896 378.0085,-142.0725"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="348.2763,-735.8253 352.4488,-741.7067 348.6246,-747.8203 344.4521,-741.9389 348.2763,-735.8253"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="380.376,-132.0749 382.4505,-142.8427 379.2238,-136.9403 378.0716,-141.8057 378.0716,-141.8057 378.0716,-141.8057 379.2238,-136.9403 373.6927,-140.7688 380.376,-132.0749 380.376,-132.0749"/>
|
||||
<text text-anchor="middle" x="339.6499" y="-726.947" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">local</text>
|
||||
</g>
|
||||
<!-- A11 -->
|
||||
<g id="node12" class="node">
|
||||
<title>A11</title>
|
||||
<polygon fill="none" stroke="#000000" points="154.5,-82 154.5,-114 292.5,-114 292.5,-82 154.5,-82"/>
|
||||
<text text-anchor="start" x="180.997" y="-95" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">AsyncStreamClient</text>
|
||||
<polygon fill="none" stroke="#000000" points="154.5,-62 154.5,-82 292.5,-82 292.5,-62 154.5,-62"/>
|
||||
<polygon fill="none" stroke="#000000" points="154.5,-18 154.5,-62 292.5,-62 292.5,-18 154.5,-18"/>
|
||||
<text text-anchor="start" x="177.378" y="-43" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><async>client_loop()</text>
|
||||
<text text-anchor="start" x="164.324" y="-31" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><async>_async_forward())</text>
|
||||
</g>
|
||||
<!-- A5->A11 -->
|
||||
<g id="edge11" class="edge">
|
||||
<title>A5->A11</title>
|
||||
<path fill="none" stroke="#000000" d="M339.2268,-747.7033C313.9489,-598.8003 256.5152,-260.4801 233.4051,-124.3474"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="231.67,-114.1263 237.7803,-123.2321 232.5069,-119.0558 233.3437,-123.9853 233.3437,-123.9853 233.3437,-123.9853 232.5069,-119.0558 228.9072,-124.7385 231.67,-114.1263 231.67,-114.1263"/>
|
||||
<text text-anchor="middle" x="243.0368" y="-127.5822" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">remote</text>
|
||||
</g>
|
||||
<!-- A6->A10 -->
|
||||
<g id="edge17" class="edge">
|
||||
<title>A6->A10</title>
|
||||
<path fill="none" stroke="#000000" d="M223.2527,-735.8807C241.8596,-612.3455 282.6734,-375.5434 346.5,-182 350.8803,-168.7174 356.3259,-154.927 362.0443,-141.6882"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="223.2394,-735.9707 226.3097,-742.4955 221.4678,-747.8392 218.3974,-741.3144 223.2394,-735.9707"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="366.2451,-132.1609 366.3281,-143.1265 364.2279,-136.7359 362.2106,-141.3109 362.2106,-141.3109 362.2106,-141.3109 364.2279,-136.7359 358.0931,-139.4954 366.2451,-132.1609 366.2451,-132.1609"/>
|
||||
<text text-anchor="middle" x="215.7839" y="-725.6638" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">local</text>
|
||||
</g>
|
||||
<!-- A6->A11 -->
|
||||
<g id="edge15" class="edge">
|
||||
<title>A6->A11</title>
|
||||
<path fill="none" stroke="#000000" d="M212.6506,-747.7033C215.0204,-598.8003 220.4048,-260.4801 222.5714,-124.3474"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="222.7341,-114.1263 227.0743,-124.1967 222.6544,-119.1257 222.5748,-124.1251 222.5748,-124.1251 222.5748,-124.1251 222.6544,-119.1257 218.0754,-124.0534 222.7341,-114.1263 222.7341,-114.1263"/>
|
||||
<text text-anchor="middle" x="230.8969" y="-129.3847" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">remote</text>
|
||||
<path fill="none" stroke="#000000" d="M295.0446,-375.9511C309.349,-356.9439 325.2087,-335.87 339.9781,-316.2449"/>
|
||||
<polygon fill="none" stroke="#000000" points="292.2338,-373.8654 289.0171,-383.9602 297.8269,-378.0747 292.2338,-373.8654"/>
|
||||
</g>
|
||||
<!-- A7 -->
|
||||
<g id="node8" class="node">
|
||||
<title>A7</title>
|
||||
<polygon fill="none" stroke="#000000" points="431.5,-962 431.5,-994 548.5,-994 548.5,-962 431.5,-962"/>
|
||||
<text text-anchor="start" x="459.429" y="-975" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><<AsyncIfc>></text>
|
||||
<polygon fill="none" stroke="#000000" points="431.5,-942 431.5,-962 548.5,-962 548.5,-942 431.5,-942"/>
|
||||
<polygon fill="none" stroke="#000000" points="431.5,-646 431.5,-942 548.5,-942 548.5,-646 431.5,-646"/>
|
||||
<text text-anchor="start" x="459.436" y="-923" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">set_node_id()</text>
|
||||
<text text-anchor="start" x="457.766" y="-911" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">get_conn_no()</text>
|
||||
<text text-anchor="start" x="471.6635" y="-887" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_add()</text>
|
||||
<text text-anchor="start" x="469.444" y="-875" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_flush()</text>
|
||||
<text text-anchor="start" x="473.0535" y="-863" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_get()</text>
|
||||
<text text-anchor="start" x="469.1635" y="-851" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_peek()</text>
|
||||
<text text-anchor="start" x="473.3335" y="-839" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_log()</text>
|
||||
<text text-anchor="start" x="469.169" y="-827" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_clear()</text>
|
||||
<text text-anchor="start" x="473.3335" y="-815" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_len()</text>
|
||||
<text text-anchor="start" x="467.7745" y="-791" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">fwd_add()</text>
|
||||
<text text-anchor="start" x="465.555" y="-779" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">fwd_flush()</text>
|
||||
<text text-anchor="start" x="469.4445" y="-767" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">fwd_log()</text>
|
||||
<text text-anchor="start" x="465.28" y="-755" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">fwd_clear()</text>
|
||||
<text text-anchor="start" x="472.7785" y="-743" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rx_get()</text>
|
||||
<text text-anchor="start" x="468.8885" y="-731" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rx_peek()</text>
|
||||
<text text-anchor="start" x="473.0585" y="-719" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rx_log()</text>
|
||||
<text text-anchor="start" x="468.894" y="-707" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rx_clear()</text>
|
||||
<text text-anchor="start" x="473.0585" y="-695" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rx_len()</text>
|
||||
<text text-anchor="start" x="464.999" y="-683" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rx_set_cb()</text>
|
||||
<text text-anchor="start" x="441.3795" y="-659" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">prot_set_timeout_cb()</text>
|
||||
<polygon fill="none" stroke="#000000" points="362.9901,-36 273.7059,-36 273.7059,0 362.9901,0 362.9901,-36"/>
|
||||
<text text-anchor="middle" x="318.348" y="-15" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><<AsyncIfc>></text>
|
||||
</g>
|
||||
<!-- A5->A7 -->
|
||||
<g id="edge7" class="edge">
|
||||
<title>A5->A7</title>
|
||||
<path fill="none" stroke="#000000" d="M240.5289,-171.6857C240.2064,-143.9437 243.216,-112.5864 254.348,-86 261.2443,-69.5295 274.0532,-54.6444 286.4105,-43.0292"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="293.9894,-36.2348 289.5473,-46.2607 290.2664,-39.5724 286.5434,-42.91 286.5434,-42.91 286.5434,-42.91 290.2664,-39.5724 283.5396,-39.5594 293.9894,-36.2348 293.9894,-36.2348"/>
|
||||
<text text-anchor="middle" x="286.135" y="-51.6279" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">1..2</text>
|
||||
</g>
|
||||
<!-- A8 -->
|
||||
<g id="node9" class="node">
|
||||
<title>A8</title>
|
||||
<polygon fill="none" stroke="#000000" points="413.5,-564 413.5,-596 506.5,-596 506.5,-564 413.5,-564"/>
|
||||
<text text-anchor="start" x="431.664" y="-577" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">AsyncIfcImpl</text>
|
||||
<polygon fill="none" stroke="#000000" points="413.5,-472 413.5,-564 506.5,-564 506.5,-472 413.5,-472"/>
|
||||
<text text-anchor="start" x="423.048" y="-545" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">fwd_fifo:ByteFifo</text>
|
||||
<text text-anchor="start" x="426.937" y="-533" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_fifo:ByteFifo</text>
|
||||
<text text-anchor="start" x="426.662" y="-521" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rx_fifo:ByteFifo</text>
|
||||
<text text-anchor="start" x="426.096" y="-509" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">conn_no:Count</text>
|
||||
<text text-anchor="start" x="442.2135" y="-497" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">node_id</text>
|
||||
<text text-anchor="start" x="435.5495" y="-485" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">timeout_cb</text>
|
||||
<polygon fill="none" stroke="#000000" points="373.6053,-122 263.0907,-122 263.0907,-86 373.6053,-86 373.6053,-122"/>
|
||||
<text text-anchor="middle" x="318.348" y="-101" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><<MessageProt>></text>
|
||||
</g>
|
||||
<!-- A7->A8 -->
|
||||
<!-- A5->A8 -->
|
||||
<g id="edge6" class="edge">
|
||||
<title>A7->A8</title>
|
||||
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M470.1541,-635.5689C468.6931,-621.6405 467.2922,-608.286 466.014,-596.0997"/>
|
||||
<polygon fill="none" stroke="#000000" points="466.7035,-636.2236 471.2277,-645.8038 473.6653,-635.4932 466.7035,-636.2236"/>
|
||||
<title>A5->A8</title>
|
||||
<path fill="none" stroke="#000000" d="M284.3733,-171.9495C291.5966,-157.5029 298.7616,-143.1729 304.6363,-131.4235"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="309.2405,-122.215 308.7932,-133.1718 307.0044,-126.6872 304.7683,-131.1593 304.7683,-131.1593 304.7683,-131.1593 307.0044,-126.6872 300.7434,-129.1468 309.2405,-122.215 309.2405,-122.215"/>
|
||||
<text text-anchor="middle" x="308.6942" y="-139.2076" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">1..2</text>
|
||||
</g>
|
||||
<!-- A6->A7 -->
|
||||
<g id="edge9" class="edge">
|
||||
<title>A6->A7</title>
|
||||
<path fill="none" stroke="#000000" d="M398.9275,-171.9166C398.1587,-144.0552 394.0617,-112.5537 382.348,-86 375.087,-69.5402 362.0955,-54.573 349.7057,-42.8973"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="342.1257,-36.0689 352.5675,-39.4186 345.8407,-39.4154 349.5556,-42.762 349.5556,-42.762 349.5556,-42.762 345.8407,-39.4154 346.5437,-46.1054 342.1257,-36.0689 342.1257,-36.0689"/>
|
||||
<text text-anchor="middle" x="361.2504" y="-38.921" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">1..2</text>
|
||||
</g>
|
||||
<!-- A6->A8 -->
|
||||
<g id="edge8" class="edge">
|
||||
<title>A6->A8</title>
|
||||
<path fill="none" stroke="#000000" d="M355.2349,-171.9495C347.314,-157.3584 339.4577,-142.8863 333.0441,-131.0718"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="328.2362,-122.215 336.962,-128.8567 330.6217,-126.6093 333.0071,-131.0036 333.0071,-131.0036 333.0071,-131.0036 330.6217,-126.6093 329.0523,-133.1505 328.2362,-122.215 328.2362,-122.215"/>
|
||||
<text text-anchor="middle" x="344.3124" y="-131.1127" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">1..2</text>
|
||||
</g>
|
||||
<!-- A8->A7 -->
|
||||
<g id="edge10" class="edge">
|
||||
<title>A8->A7</title>
|
||||
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M318.348,-85.7616C318.348,-74.3597 318.348,-59.4342 318.348,-46.494"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="318.348,-36.2121 322.8481,-46.2121 318.348,-41.2121 318.3481,-46.2121 318.3481,-46.2121 318.3481,-46.2121 318.348,-41.2121 313.8481,-46.2121 318.348,-36.2121 318.348,-36.2121"/>
|
||||
<text text-anchor="middle" x="309.8956" y="-64.6355" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">use</text>
|
||||
</g>
|
||||
<!-- A9 -->
|
||||
<g id="node10" class="node">
|
||||
<title>A9</title>
|
||||
<polygon fill="none" stroke="#000000" points="379.5,-390 379.5,-422 481.5,-422 481.5,-390 379.5,-390"/>
|
||||
<text text-anchor="start" x="400.774" y="-403" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">AsyncStream</text>
|
||||
<polygon fill="none" stroke="#000000" points="379.5,-310 379.5,-390 481.5,-390 481.5,-310 379.5,-310"/>
|
||||
<text text-anchor="start" x="416.053" y="-371" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">reader</text>
|
||||
<text text-anchor="start" x="418.283" y="-359" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">writer</text>
|
||||
<text text-anchor="start" x="420.497" y="-347" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">addr</text>
|
||||
<text text-anchor="start" x="416.053" y="-335" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">r_addr</text>
|
||||
<text text-anchor="start" x="416.608" y="-323" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">l_addr</text>
|
||||
<polygon fill="none" stroke="#000000" points="379.5,-182 379.5,-310 481.5,-310 481.5,-182 379.5,-182"/>
|
||||
<text text-anchor="start" x="402.154" y="-279" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><async>loop</text>
|
||||
<text text-anchor="start" x="418.282" y="-267" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">disc()</text>
|
||||
<text text-anchor="start" x="415.5025" y="-255" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
|
||||
<text text-anchor="start" x="411.054" y="-243" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">healthy()</text>
|
||||
<text text-anchor="start" x="395.7705" y="-219" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">__async_read()</text>
|
||||
<text text-anchor="start" x="395.221" y="-207" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">__async_write()</text>
|
||||
<text text-anchor="start" x="389.107" y="-195" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">__async_forward()</text>
|
||||
<polygon fill="none" stroke="#000000" points="347.348,-466 347.348,-498 454.348,-498 454.348,-466 347.348,-466"/>
|
||||
<text text-anchor="start" x="371.1175" y="-479" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ModbusConn</text>
|
||||
<polygon fill="none" stroke="#000000" points="347.348,-398 347.348,-466 454.348,-466 454.348,-398 347.348,-398"/>
|
||||
<text text-anchor="start" x="391.3995" y="-447" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">host</text>
|
||||
<text text-anchor="start" x="392.235" y="-435" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">port</text>
|
||||
<text text-anchor="start" x="390.845" y="-423" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">addr</text>
|
||||
<text text-anchor="start" x="357.231" y="-411" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">stream:InverterG3P</text>
|
||||
<polygon fill="none" stroke="#000000" points="347.348,-378 347.348,-398 454.348,-398 454.348,-378 347.348,-378"/>
|
||||
</g>
|
||||
<!-- A8->A9 -->
|
||||
<g id="edge7" class="edge">
|
||||
<title>A8->A9</title>
|
||||
<path fill="none" stroke="#000000" d="M450.4821,-461.8566C448.8983,-449.1863 447.2122,-435.6974 445.5166,-422.1331"/>
|
||||
<polygon fill="none" stroke="#000000" points="447.0151,-462.3396 451.7285,-471.8283 453.9611,-461.4713 447.0151,-462.3396"/>
|
||||
</g>
|
||||
<!-- A9->A10 -->
|
||||
<g id="edge8" class="edge">
|
||||
<title>A9->A10</title>
|
||||
<path fill="none" stroke="#000000" d="M413.4152,-171.9352C411.618,-158.2531 409.8495,-144.7897 408.2077,-132.2911"/>
|
||||
<polygon fill="none" stroke="#000000" points="409.9549,-172.4669 414.7276,-181.9259 416.8953,-171.5552 409.9549,-172.4669"/>
|
||||
</g>
|
||||
<!-- A9->A11 -->
|
||||
<g id="edge9" class="edge">
|
||||
<title>A9->A11</title>
|
||||
<path fill="none" stroke="#000000" d="M372.6557,-236.0519C338.7013,-197.3406 296.5482,-149.282 265.7249,-114.1405"/>
|
||||
<polygon fill="none" stroke="#000000" points="370.1061,-238.4529 379.3314,-243.6629 375.3686,-233.8371 370.1061,-238.4529"/>
|
||||
</g>
|
||||
<!-- A12 -->
|
||||
<g id="node13" class="node">
|
||||
<title>A12</title>
|
||||
<polygon fill="none" stroke="#000000" points="554.5,-1324 554.5,-1356 668.5,-1356 668.5,-1324 554.5,-1324"/>
|
||||
<text text-anchor="start" x="597.608" y="-1337" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">Talent</text>
|
||||
<polygon fill="none" stroke="#000000" points="554.5,-1172 554.5,-1324 668.5,-1324 668.5,-1172 554.5,-1172"/>
|
||||
<text text-anchor="start" x="586.2185" y="-1305" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ifc:AsyncIfc</text>
|
||||
<text text-anchor="start" x="592.323" y="-1293" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">conn_no</text>
|
||||
<text text-anchor="start" x="601.497" y="-1281" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">addr</text>
|
||||
<text text-anchor="start" x="564.263" y="-1257" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">await_conn_resp_cnt</text>
|
||||
<text text-anchor="start" x="599.2775" y="-1245" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">id_str</text>
|
||||
<text text-anchor="start" x="580.1" y="-1233" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">contact_name</text>
|
||||
<text text-anchor="start" x="583.44" y="-1221" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">contact_mail</text>
|
||||
<text text-anchor="start" x="587.0445" y="-1209" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">db:InfosG3</text>
|
||||
<text text-anchor="start" x="585.384" y="-1197" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">mb:Modbus</text>
|
||||
<text text-anchor="start" x="597.612" y="-1185" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">switch</text>
|
||||
<polygon fill="none" stroke="#000000" points="554.5,-1044 554.5,-1172 668.5,-1172 668.5,-1044 554.5,-1044"/>
|
||||
<text text-anchor="start" x="568.9925" y="-1153" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">msg_contact_info()</text>
|
||||
<text text-anchor="start" x="570.9325" y="-1141" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">msg_ota_update()</text>
|
||||
<text text-anchor="start" x="576.7765" y="-1129" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">msg_get_time()</text>
|
||||
<text text-anchor="start" x="564.8285" y="-1117" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">msg_collector_data()</text>
|
||||
<text text-anchor="start" x="566.7735" y="-1105" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">msg_inverter_data()</text>
|
||||
<text text-anchor="start" x="575.9405" y="-1093" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">msg_unknown()</text>
|
||||
<text text-anchor="start" x="592.054" y="-1069" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">healthy()</text>
|
||||
<text text-anchor="start" x="596.5025" y="-1057" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
|
||||
</g>
|
||||
<!-- A12->A5 -->
|
||||
<g id="edge10" class="edge">
|
||||
<title>A12->A5</title>
|
||||
<path fill="none" stroke="#000000" d="M548.4275,-1057.3616C544.6954,-1052.6454 540.7258,-1048.1664 536.5,-1044 494.4791,-1002.5691 455.2545,-1035.6993 413.5,-994 385.9127,-966.4492 368.6099,-926.7051 358.9167,-892.1547"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="554.4873,-1065.5095 544.9087,-1060.1709 551.5034,-1061.4974 548.5196,-1057.4854 548.5196,-1057.4854 548.5196,-1057.4854 551.5034,-1061.4974 552.1304,-1054.7999 554.4873,-1065.5095 554.4873,-1065.5095"/>
|
||||
<text text-anchor="middle" x="536.8879" y="-1053.009" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">remote</text>
|
||||
</g>
|
||||
<!-- A12->A5 -->
|
||||
<g id="edge12" class="edge">
|
||||
<title>A12->A5</title>
|
||||
<path fill="none" stroke="#000000" d="M546.1946,-1036.7124C507.2777,-1006.6255 470.4919,-1032.9404 431.5,-994 406.9301,-969.4625 390.5179,-935.2533 379.0804,-903.6552"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="554.0077,-1043.5179 543.5114,-1040.343 550.2374,-1040.2338 546.4671,-1036.9498 546.4671,-1036.9498 546.4671,-1036.9498 550.2374,-1040.2338 549.4228,-1033.5565 554.0077,-1043.5179 554.0077,-1043.5179"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="379.0233,-903.4904 373.276,-899.135 375.0858,-892.1547 380.8331,-896.5101 379.0233,-903.4904"/>
|
||||
<text text-anchor="middle" x="389.0177" y="-903.504" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">local</text>
|
||||
</g>
|
||||
<!-- A12->A7 -->
|
||||
<g id="edge21" class="edge">
|
||||
<title>A12->A7</title>
|
||||
<path fill="none" stroke="#000000" d="M561.3498,-1043.7944C557.119,-1030.6165 552.8162,-1017.2145 548.5265,-1003.853"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="545.4064,-994.1348 552.7479,-1002.2805 546.9349,-998.8955 548.4633,-1003.6561 548.4633,-1003.6561 548.4633,-1003.6561 546.9349,-998.8955 544.1787,-1005.0317 545.4064,-994.1348 545.4064,-994.1348"/>
|
||||
<text text-anchor="middle" x="547.7611" y="-1026.1197" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">use</text>
|
||||
</g>
|
||||
<!-- A15 -->
|
||||
<g id="node16" class="node">
|
||||
<title>A15</title>
|
||||
<polygon fill="none" stroke="#000000" points="760.5,-836 760.5,-868 827.5,-868 827.5,-836 760.5,-836"/>
|
||||
<text text-anchor="start" x="776.493" y="-849" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">InfosG3</text>
|
||||
<polygon fill="none" stroke="#000000" points="760.5,-816 760.5,-836 827.5,-836 827.5,-816 760.5,-816"/>
|
||||
<polygon fill="none" stroke="#000000" points="760.5,-772 760.5,-816 827.5,-816 827.5,-772 760.5,-772"/>
|
||||
<text text-anchor="start" x="770.384" y="-797" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ha_confs()</text>
|
||||
<text text-anchor="start" x="778.168" y="-785" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">parse()</text>
|
||||
</g>
|
||||
<!-- A12->A15 -->
|
||||
<g id="edge22" class="edge">
|
||||
<title>A12->A15</title>
|
||||
<path fill="none" stroke="#000000" d="M668.6022,-1099.9846C680.5115,-1080.974 693.4351,-1061.5511 706.5,-1044 724.352,-1020.0181 737.5662,-1020.4514 751.5,-994 770.4821,-957.965 781.0364,-913.2207 786.817,-878.1298"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="788.3928,-868.0379 791.2961,-878.6125 787.6214,-872.9781 786.8499,-877.9182 786.8499,-877.9182 786.8499,-877.9182 787.6214,-872.9781 782.4038,-877.2239 788.3928,-868.0379 788.3928,-868.0379"/>
|
||||
</g>
|
||||
<!-- A17 -->
|
||||
<g id="node18" class="node">
|
||||
<title>A17</title>
|
||||
<polygon fill="none" stroke="#000000" points="657.409,-838 565.591,-838 565.591,-802 657.409,-802 657.409,-838"/>
|
||||
<text text-anchor="middle" x="611.5" y="-817" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ConnectionG3</text>
|
||||
</g>
|
||||
<!-- A12->A17 -->
|
||||
<g id="edge20" class="edge">
|
||||
<title>A12->A17</title>
|
||||
<path fill="none" stroke="#000000" d="M611.5,-1033.4357C611.5,-956.2599 611.5,-873.846 611.5,-838.1787"/>
|
||||
<polygon fill="none" stroke="#000000" points="608.0001,-1033.7944 611.5,-1043.7944 615.0001,-1033.7945 608.0001,-1033.7944"/>
|
||||
</g>
|
||||
<!-- A13 -->
|
||||
<g id="node14" class="node">
|
||||
<title>A13</title>
|
||||
<polygon fill="none" stroke="#000000" points="445.5,-1288 445.5,-1320 536.5,-1320 536.5,-1288 445.5,-1288"/>
|
||||
<text text-anchor="start" x="463.495" y="-1301" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">SolarmanV5</text>
|
||||
<polygon fill="none" stroke="#000000" points="445.5,-1148 445.5,-1288 536.5,-1288 536.5,-1148 445.5,-1148"/>
|
||||
<text text-anchor="start" x="465.7185" y="-1269" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ifc:AsyncIfc</text>
|
||||
<text text-anchor="start" x="471.823" y="-1257" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">conn_no</text>
|
||||
<text text-anchor="start" x="480.997" y="-1245" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">addr</text>
|
||||
<text text-anchor="start" x="475.998" y="-1221" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">control</text>
|
||||
<text text-anchor="start" x="479.0575" y="-1209" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">serial</text>
|
||||
<text text-anchor="start" x="484.056" y="-1197" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">snr</text>
|
||||
<text text-anchor="start" x="463.21" y="-1185" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">db:InfosG3P</text>
|
||||
<text text-anchor="start" x="464.884" y="-1173" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">mb:Modbus</text>
|
||||
<text text-anchor="start" x="477.112" y="-1161" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">switch</text>
|
||||
<polygon fill="none" stroke="#000000" points="445.5,-1080 445.5,-1148 536.5,-1148 536.5,-1080 445.5,-1080"/>
|
||||
<text text-anchor="start" x="455.4405" y="-1129" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">msg_unknown()</text>
|
||||
<text text-anchor="start" x="471.554" y="-1105" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">healthy()</text>
|
||||
<text text-anchor="start" x="476.0025" y="-1093" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
|
||||
</g>
|
||||
<!-- A13->A6 -->
|
||||
<g id="edge14" class="edge">
|
||||
<title>A13->A6</title>
|
||||
<path fill="none" stroke="#000000" d="M447.4566,-1070.9482C441.5256,-1061.0844 434.6094,-1051.909 426.5,-1044 374.9829,-993.756 325.0983,-1043.111 272.5,-994 243.8213,-967.2228 226.6316,-927.1021 217.4078,-892.1324"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="452.4203,-1079.7791 443.5976,-1073.2668 449.9703,-1075.4204 447.5204,-1071.0618 447.5204,-1071.0618 447.5204,-1071.0618 449.9703,-1075.4204 451.4431,-1068.8568 452.4203,-1079.7791 452.4203,-1079.7791"/>
|
||||
<text text-anchor="middle" x="436.1705" y="-1065.1196" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">remote</text>
|
||||
</g>
|
||||
<!-- A13->A6 -->
|
||||
<g id="edge16" class="edge">
|
||||
<title>A13->A6</title>
|
||||
<path fill="none" stroke="#000000" d="M465.3907,-1070.9482C459.5256,-1061.0844 452.6094,-1051.909 444.5,-1044 392.9829,-993.756 343.0983,-1043.111 290.5,-994 264.9581,-970.1515 248.5293,-935.7189 237.3987,-903.7675"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="470.278,-1079.7791 461.4985,-1073.2086 467.8569,-1075.4043 465.4357,-1071.0296 465.4357,-1071.0296 465.4357,-1071.0296 467.8569,-1075.4043 469.373,-1068.8506 470.278,-1079.7791 470.278,-1079.7791"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="237.3164,-903.5196 231.6278,-899.0879 233.5306,-892.1324 239.2192,-896.5641 237.3164,-903.5196"/>
|
||||
<text text-anchor="middle" x="247.2697" y="-903.6664" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">local</text>
|
||||
</g>
|
||||
<!-- A13->A7 -->
|
||||
<g id="edge23" class="edge">
|
||||
<title>A13->A7</title>
|
||||
<path fill="none" stroke="#000000" d="M490.1836,-1079.7656C490.1205,-1055.771 490.0528,-1030.0526 489.9854,-1004.468"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="489.9587,-994.2909 494.4851,-1004.2789 489.9719,-999.2908 489.9851,-1004.2908 489.9851,-1004.2908 489.9851,-1004.2908 489.9719,-999.2908 485.4851,-1004.3027 489.9587,-994.2909 489.9587,-994.2909"/>
|
||||
<text text-anchor="middle" x="481.6836" y="-1058.6618" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">use</text>
|
||||
</g>
|
||||
<!-- A16 -->
|
||||
<g id="node17" class="node">
|
||||
<title>A16</title>
|
||||
<polygon fill="none" stroke="#000000" points="675.5,-836 675.5,-868 742.5,-868 742.5,-836 675.5,-836"/>
|
||||
<text text-anchor="start" x="688.1585" y="-849" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">InfosG3P</text>
|
||||
<polygon fill="none" stroke="#000000" points="675.5,-816 675.5,-836 742.5,-836 742.5,-816 675.5,-816"/>
|
||||
<polygon fill="none" stroke="#000000" points="675.5,-772 675.5,-816 742.5,-816 742.5,-772 675.5,-772"/>
|
||||
<text text-anchor="start" x="685.384" y="-797" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ha_confs()</text>
|
||||
<text text-anchor="start" x="693.168" y="-785" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">parse()</text>
|
||||
</g>
|
||||
<!-- A13->A16 -->
|
||||
<g id="edge24" class="edge">
|
||||
<title>A13->A16</title>
|
||||
<path fill="none" stroke="#000000" d="M520.8307,-1079.7659C527.4996,-1066.7175 535.619,-1054.418 545.5,-1044 585.5429,-1001.781 628.6638,-1038.2075 666.5,-994 693.8359,-962.061 704.0094,-915.2881 707.5257,-878.278"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="708.3496,-868.1186 712.0265,-878.4497 707.9454,-873.1023 707.5412,-878.0859 707.5412,-878.0859 707.5412,-878.0859 707.9454,-873.1023 703.0559,-877.7221 708.3496,-868.1186 708.3496,-868.1186"/>
|
||||
</g>
|
||||
<!-- A14 -->
|
||||
<g id="node15" class="node">
|
||||
<title>A14</title>
|
||||
<polygon fill="none" stroke="#000000" points="715.5,-1288 715.5,-1320 818.5,-1320 818.5,-1288 715.5,-1288"/>
|
||||
<text text-anchor="start" x="756.162" y="-1301" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">Infos</text>
|
||||
<polygon fill="none" stroke="#000000" points="715.5,-1232 715.5,-1288 818.5,-1288 818.5,-1232 715.5,-1232"/>
|
||||
<text text-anchor="start" x="758.9415" y="-1269" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">stat</text>
|
||||
<text text-anchor="start" x="734.486" y="-1257" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">new_stat_data</text>
|
||||
<text text-anchor="start" x="748.1035" y="-1245" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">info_dev</text>
|
||||
<polygon fill="none" stroke="#000000" points="715.5,-1080 715.5,-1232 818.5,-1232 818.5,-1080 715.5,-1080"/>
|
||||
<text text-anchor="start" x="742.8355" y="-1213" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">static_init()</text>
|
||||
<text text-anchor="start" x="740.8845" y="-1201" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">dev_value()</text>
|
||||
<text text-anchor="start" x="737.8305" y="-1189" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">inc_counter()</text>
|
||||
<text text-anchor="start" x="736.1605" y="-1177" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">dec_counter()</text>
|
||||
<text text-anchor="start" x="734.21" y="-1165" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ha_proxy_conf</text>
|
||||
<text text-anchor="start" x="749.213" y="-1153" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ha_conf</text>
|
||||
<text text-anchor="start" x="741.994" y="-1141" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ha_remove</text>
|
||||
<text text-anchor="start" x="743.3745" y="-1129" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">update_db</text>
|
||||
<text text-anchor="start" x="727.537" y="-1117" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">set_db_def_value</text>
|
||||
<text text-anchor="start" x="736.9855" y="-1105" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">get_db_value</text>
|
||||
<text text-anchor="start" x="725.3225" y="-1093" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ignore_this_device</text>
|
||||
</g>
|
||||
<!-- A14->A15 -->
|
||||
<g id="edge18" class="edge">
|
||||
<title>A14->A15</title>
|
||||
<path fill="none" stroke="#000000" d="M775.7646,-1069.6098C780.6992,-1000.16 786.4738,-918.8867 790.0599,-868.4166"/>
|
||||
<polygon fill="none" stroke="#000000" points="772.2606,-1069.5427 775.043,-1079.7656 779.243,-1070.0389 772.2606,-1069.5427"/>
|
||||
</g>
|
||||
<!-- A14->A16 -->
|
||||
<g id="edge19" class="edge">
|
||||
<title>A14->A16</title>
|
||||
<path fill="none" stroke="#000000" d="M746.5983,-1069.6098C735.9981,-1000.16 723.5932,-918.8867 715.8899,-868.4166"/>
|
||||
<polygon fill="none" stroke="#000000" points="743.1796,-1070.4082 748.1484,-1079.7656 750.0994,-1069.352 743.1796,-1070.4082"/>
|
||||
</g>
|
||||
<!-- A18->A12 -->
|
||||
<g id="edge26" class="edge">
|
||||
<title>A18->A12</title>
|
||||
<path fill="none" stroke="#000000" d="M601.0124,-1467.8379C602.2644,-1435.8622 603.8382,-1395.6708 605.383,-1356.2186"/>
|
||||
<polygon fill="none" stroke="#000000" points="597.5116,-1467.7902 600.6176,-1477.9196 604.5063,-1468.0642 597.5116,-1467.7902"/>
|
||||
</g>
|
||||
<!-- A18->A13 -->
|
||||
<g id="edge27" class="edge">
|
||||
<title>A18->A13</title>
|
||||
<path fill="none" stroke="#000000" d="M577.8104,-1468.3987C564.1817,-1426.503 545.9076,-1370.327 529.6002,-1320.197"/>
|
||||
<polygon fill="none" stroke="#000000" points="574.4857,-1469.4928 580.9076,-1477.9196 581.1424,-1467.3273 574.4857,-1469.4928"/>
|
||||
</g>
|
||||
<!-- A19 -->
|
||||
<g id="node20" class="node">
|
||||
<title>A19</title>
|
||||
<polygon fill="none" stroke="#000000" points="465.5,-1626 465.5,-1658 540.5,-1658 540.5,-1626 465.5,-1626"/>
|
||||
<text text-anchor="start" x="485.2175" y="-1639" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">Modbus</text>
|
||||
<polygon fill="none" stroke="#000000" points="465.5,-1474 465.5,-1626 540.5,-1626 540.5,-1474 465.5,-1474"/>
|
||||
<text text-anchor="start" x="494.6615" y="-1607" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">que</text>
|
||||
<text text-anchor="start" x="475.49" y="-1583" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">snd_handler</text>
|
||||
<text text-anchor="start" x="476.605" y="-1571" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rsp_handler</text>
|
||||
<text text-anchor="start" x="486.6085" y="-1559" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">timeout</text>
|
||||
<text text-anchor="start" x="476.8895" y="-1547" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">max_retires</text>
|
||||
<text text-anchor="start" x="484.942" y="-1535" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">last_xxx</text>
|
||||
<text text-anchor="start" x="496.8915" y="-1523" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">err</text>
|
||||
<text text-anchor="start" x="483.5535" y="-1511" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">retry_cnt</text>
|
||||
<text text-anchor="start" x="481.879" y="-1499" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">req_pend</text>
|
||||
<text text-anchor="start" x="496.3365" y="-1487" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tim</text>
|
||||
<polygon fill="none" stroke="#000000" points="465.5,-1406 465.5,-1474 540.5,-1474 540.5,-1406 465.5,-1406"/>
|
||||
<text text-anchor="start" x="476.89" y="-1455" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">build_msg()</text>
|
||||
<text text-anchor="start" x="480.224" y="-1443" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">recv_req()</text>
|
||||
<text text-anchor="start" x="477.724" y="-1431" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">recv_resp()</text>
|
||||
<text text-anchor="start" x="488.0025" y="-1419" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
|
||||
</g>
|
||||
<!-- A19->A12 -->
|
||||
<g id="edge29" class="edge">
|
||||
<title>A19->A12</title>
|
||||
<path fill="none" stroke="#000000" d="M543.2517,-1407.8755C548.7979,-1390.9826 554.5472,-1373.4708 560.249,-1356.1039"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="540.0116,-1417.7444 538.8555,-1406.8397 541.5713,-1412.9939 543.131,-1408.2434 543.131,-1408.2434 543.131,-1408.2434 541.5713,-1412.9939 547.4065,-1409.6471 540.0116,-1417.7444 540.0116,-1417.7444"/>
|
||||
<text text-anchor="middle" x="562.6255" y="-1372.9622" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">has</text>
|
||||
<text text-anchor="middle" x="537.6351" y="-1394.8861" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">1</text>
|
||||
</g>
|
||||
<!-- A19->A13 -->
|
||||
<g id="edge28" class="edge">
|
||||
<title>A19->A13</title>
|
||||
<path fill="none" stroke="#000000" d="M497.5586,-1395.2885C496.6573,-1370.3511 495.723,-1344.5031 494.8407,-1320.0924"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="497.9291,-1405.5379 493.0707,-1395.7071 497.7484,-1400.5412 497.5678,-1395.5445 497.5678,-1395.5445 497.5678,-1395.5445 497.7484,-1400.5412 502.0648,-1395.3819 497.9291,-1405.5379 497.9291,-1405.5379"/>
|
||||
<text text-anchor="middle" x="503.9423" y="-1334.9015" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">has</text>
|
||||
<text text-anchor="middle" x="488.8275" y="-1384.7289" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">1</text>
|
||||
</g>
|
||||
<!-- A20 -->
|
||||
<g id="node21" class="node">
|
||||
<title>A20</title>
|
||||
<polygon fill="none" stroke="#000000" points=".5,-1228 .5,-1260 107.5,-1260 107.5,-1228 .5,-1228"/>
|
||||
<text text-anchor="start" x="24.2695" y="-1241" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ModbusConn</text>
|
||||
<polygon fill="none" stroke="#000000" points=".5,-1160 .5,-1228 107.5,-1228 107.5,-1160 .5,-1160"/>
|
||||
<text text-anchor="start" x="44.5515" y="-1209" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">host</text>
|
||||
<text text-anchor="start" x="45.387" y="-1197" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">port</text>
|
||||
<text text-anchor="start" x="43.997" y="-1185" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">addr</text>
|
||||
<text text-anchor="start" x="10.383" y="-1173" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">stream:InverterG3P</text>
|
||||
<polygon fill="none" stroke="#000000" points=".5,-1140 .5,-1160 107.5,-1160 107.5,-1140 .5,-1140"/>
|
||||
</g>
|
||||
<!-- A20->A6 -->
|
||||
<g id="edge30" class="edge">
|
||||
<title>A20->A6</title>
|
||||
<path fill="none" stroke="#000000" d="M76.9761,-1139.8453C88.4172,-1110.8106 102.486,-1075.5172 115.5,-1044 135.0539,-996.6445 157.5886,-943.9703 175.9091,-901.6045"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="179.9904,-892.1757 180.1477,-903.1405 178.0042,-896.7643 176.0179,-901.3529 176.0179,-901.3529 176.0179,-901.3529 178.0042,-896.7643 171.8882,-899.5652 179.9904,-892.1757 179.9904,-892.1757"/>
|
||||
<text text-anchor="middle" x="180.5468" y="-909.168" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">1</text>
|
||||
<text text-anchor="middle" x="75.7674" y="-1116.8819" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">has</text>
|
||||
<!-- A9->A6 -->
|
||||
<g id="edge11" class="edge">
|
||||
<title>A9->A6</title>
|
||||
<path fill="none" stroke="#000000" d="M398.4907,-377.9458C397.9843,-361.5736 397.4269,-343.5504 396.8896,-326.177"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="396.576,-316.0403 401.3831,-325.8963 396.7307,-321.0379 396.8853,-326.0355 396.8853,-326.0355 396.8853,-326.0355 396.7307,-321.0379 392.3874,-326.1746 396.576,-316.0403 396.576,-316.0403"/>
|
||||
<text text-anchor="middle" x="405.5847" y="-330.8965" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">1</text>
|
||||
<text text-anchor="middle" x="389.482" y="-357.0896" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">has</text>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 15 KiB |
@@ -15,46 +15,17 @@
|
||||
|
||||
[IterRegistry]^[Inverter|server_side:bool;header_valid:bool;header_len:unsigned;data_len:unsigned;unique_id;node_id;sug_area;_recv_buffer:bytearray;_send_buffer:bytearray;_forward_buffer:bytearray;db:Infos;new_data:list;state|_read():void<abstract>;close():void;inc_counter():void;dec_counter():void]
|
||||
|
||||
[<<AsyncIfc>>||set_node_id();get_conn_no();;tx_add();tx_flush();tx_get();tx_peek();tx_log();tx_clear();tx_len();;fwd_add();fwd_flush();fwd_log();fwd_clear();rx_get();rx_peek();rx_log();rx_clear();rx_len();rx_set_cb();;prot_set_timeout_cb()]
|
||||
[AsyncIfcImpl|fwd_fifo:ByteFifo;tx_fifo:ByteFifo;rx_fifo:ByteFifo;conn_no:Count;node_id;timeout_cb]
|
||||
[AsyncStream|reader;writer;addr;r_addr;l_addr|;<async>loop;disc();close();healthy();;__async_read();__async_write();__async_forward()]
|
||||
[AsyncStreamServer|async_create_remote|<async>server_loop();<async>_async_forward();<async>publish_outstanding_mqtt();close()]
|
||||
[AsyncStreamClient||<async>client_loop();<async>_async_forward())]
|
||||
[<<AsyncIfc>>]^-.-[AsyncIfcImpl]
|
||||
[AsyncIfcImpl]^[AsyncStream]
|
||||
[AsyncStream]^[AsyncStreamServer]
|
||||
[AsyncStream]^[AsyncStreamClient]
|
||||
[<<AsyncIfc>>]
|
||||
|
||||
|
||||
[Talent|ifc:AsyncIfc;conn_no;addr;;await_conn_resp_cnt;id_str;contact_name;contact_mail;db:InfosG3;mb:Modbus;switch|msg_contact_info();msg_ota_update();msg_get_time();msg_collector_data();msg_inverter_data();msg_unknown();;healthy();close()]
|
||||
[Talent]<remote-[InverterG3]
|
||||
[InverterG3]-remote>[AsyncStreamClient]
|
||||
[Talent]<-local++[InverterG3]
|
||||
[InverterG3]++local->[AsyncStreamServer]
|
||||
[InverterG3]-1..2>[<<MessageProt>>]
|
||||
[InverterG3]-1..2>[<<AsyncIfc>>]
|
||||
|
||||
[SolarmanV5|ifc:AsyncIfc;conn_no;addr;;control;serial;snr;db:InfosG3P;mb:Modbus;switch|msg_unknown();;healthy();close()]
|
||||
[SolarmanV5]<remote-[InverterG3P]
|
||||
[InverterG3P]-remote>[AsyncStreamClient]
|
||||
[SolarmanV5]<-local++[InverterG3P]
|
||||
[InverterG3P]++local->[AsyncStreamServer]
|
||||
[InverterG3P]-1..2>[<<MessageProt>>]
|
||||
[InverterG3P]-1..2>[<<AsyncIfc>>]
|
||||
|
||||
[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()]
|
||||
[Infos]^[InfosG3P||ha_confs();parse()]
|
||||
[<<MessageProt>>]use-.->[<<AsyncIfc>>]
|
||||
|
||||
[Talent]^[ConnectionG3]
|
||||
[Talent]use->[<<AsyncIfc>>]
|
||||
[Talent]->[InfosG3]
|
||||
[SolarmanV5]use->[<<AsyncIfc>>]
|
||||
[SolarmanV5]->[InfosG3P]
|
||||
|
||||
[IterRegistry]^[Message|node_id|inc_counter();dec_counter()]
|
||||
[Message]^[Talent]
|
||||
[Message]^[SolarmanV5]
|
||||
|
||||
[Modbus|que;;snd_handler;rsp_handler;timeout;max_retires;last_xxx;err;retry_cnt;req_pend;tim|build_msg();recv_req();recv_resp();close()]
|
||||
[Modbus]<1-has[SolarmanV5]
|
||||
[Modbus]<1-has[Talent]
|
||||
|
||||
[ModbusConn|host;port;addr;stream:InverterG3P;|]has-1>[InverterG3P]
|
||||
|
||||
|
||||
418
app/proxy_2.svg
Normal file
418
app/proxy_2.svg
Normal file
@@ -0,0 +1,418 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
|
||||
-->
|
||||
<!-- Title: G Pages: 1 -->
|
||||
<svg width="438pt" height="1820pt"
|
||||
viewBox="0.00 0.00 438.35 1820.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 1816)">
|
||||
<title>G</title>
|
||||
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-1816 434.348,-1816 434.348,4 -4,4"/>
|
||||
<!-- A0 -->
|
||||
<g id="node1" class="node">
|
||||
<title>A0</title>
|
||||
<polygon fill="#fff8dc" stroke="#000000" points="108.5444,-1788 .1516,-1788 .1516,-1752 114.5444,-1752 114.5444,-1782 108.5444,-1788"/>
|
||||
<polyline fill="none" stroke="#000000" points="108.5444,-1788 108.5444,-1782 "/>
|
||||
<polyline fill="none" stroke="#000000" points="114.5444,-1782 108.5444,-1782 "/>
|
||||
<text text-anchor="middle" x="57.348" y="-1773" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">You can stick notes</text>
|
||||
<text text-anchor="middle" x="57.348" y="-1761" 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="133.348,-1780 133.348,-1812 204.348,-1812 204.348,-1780 133.348,-1780"/>
|
||||
<text text-anchor="start" x="143.293" y="-1793" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">IterRegistry</text>
|
||||
<polygon fill="none" stroke="#000000" points="133.348,-1760 133.348,-1780 204.348,-1780 204.348,-1760 133.348,-1760"/>
|
||||
<polygon fill="none" stroke="#000000" points="133.348,-1728 133.348,-1760 204.348,-1760 204.348,-1728 133.348,-1728"/>
|
||||
<text text-anchor="start" x="150.787" y="-1741" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">__iter__</text>
|
||||
</g>
|
||||
<!-- A14 -->
|
||||
<g id="node15" class="node">
|
||||
<title>A14</title>
|
||||
<polygon fill="none" stroke="#000000" points="128.348,-1574 128.348,-1606 209.348,-1606 209.348,-1574 128.348,-1574"/>
|
||||
<text text-anchor="start" x="148.5655" y="-1587" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">Message</text>
|
||||
<polygon fill="none" stroke="#000000" points="128.348,-1542 128.348,-1574 209.348,-1574 209.348,-1542 128.348,-1542"/>
|
||||
<text text-anchor="start" x="151.0615" y="-1555" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">node_id</text>
|
||||
<polygon fill="none" stroke="#000000" points="128.348,-1498 128.348,-1542 209.348,-1542 209.348,-1498 128.348,-1498"/>
|
||||
<text text-anchor="start" x="139.6785" y="-1523" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">inc_counter()</text>
|
||||
<text text-anchor="start" x="138.0085" y="-1511" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">dec_counter()</text>
|
||||
</g>
|
||||
<!-- A1->A14 -->
|
||||
<g id="edge19" class="edge">
|
||||
<title>A1->A14</title>
|
||||
<path fill="none" stroke="#000000" d="M168.348,-1717.8572C168.348,-1684.1684 168.348,-1640.4162 168.348,-1606.3079"/>
|
||||
<polygon fill="none" stroke="#000000" points="164.8481,-1717.9674 168.348,-1727.9674 171.8481,-1717.9674 164.8481,-1717.9674"/>
|
||||
</g>
|
||||
<!-- A2 -->
|
||||
<g id="node3" class="node">
|
||||
<title>A2</title>
|
||||
<polygon fill="none" stroke="#000000" points="308.348,-584 308.348,-616 430.348,-616 430.348,-584 308.348,-584"/>
|
||||
<text text-anchor="start" x="345.7325" y="-597" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">InverterG3</text>
|
||||
<polygon fill="none" stroke="#000000" points="308.348,-528 308.348,-584 430.348,-584 430.348,-528 308.348,-528"/>
|
||||
<text text-anchor="start" x="359.345" y="-565" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">addr</text>
|
||||
<text text-anchor="start" x="329.901" y="-553" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">remote:StreamPtr</text>
|
||||
<text text-anchor="start" x="335.18" y="-541" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">local:StreamPtr</text>
|
||||
<polygon fill="none" stroke="#000000" points="308.348,-472 308.348,-528 430.348,-528 430.348,-472 308.348,-472"/>
|
||||
<text text-anchor="start" x="317.9515" y="-509" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">async_create_remote()</text>
|
||||
<text text-anchor="start" x="354.3505" y="-485" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
|
||||
</g>
|
||||
<!-- A7 -->
|
||||
<g id="node8" class="node">
|
||||
<title>A7</title>
|
||||
<polygon fill="none" stroke="#000000" points="12.348,-100 12.348,-132 190.348,-132 190.348,-100 12.348,-100"/>
|
||||
<text text-anchor="start" x="56.8995" y="-113" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">AsyncStreamServer</text>
|
||||
<polygon fill="none" stroke="#000000" points="12.348,-68 12.348,-100 190.348,-100 190.348,-68 12.348,-68"/>
|
||||
<text text-anchor="start" x="53.2805" y="-81" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">async_create_remote</text>
|
||||
<polygon fill="none" stroke="#000000" points="12.348,0 12.348,-68 190.348,-68 190.348,0 12.348,0"/>
|
||||
<text text-anchor="start" x="53.0055" y="-49" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><async>server_loop()</text>
|
||||
<text text-anchor="start" x="43.8365" y="-37" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><async>_async_forward()</text>
|
||||
<text text-anchor="start" x="22.157" y="-25" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><async>publish_outstanding_mqtt()</text>
|
||||
<text text-anchor="start" x="86.3505" y="-13" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
|
||||
</g>
|
||||
<!-- A2->A7 -->
|
||||
<g id="edge8" class="edge">
|
||||
<title>A2->A7</title>
|
||||
<path fill="none" stroke="#000000" d="M337.3924,-460.3836C333.0399,-447.6226 328.8668,-434.5306 325.348,-422 295.9146,-317.1872 337.6516,-271.9662 276.348,-182 253.3709,-148.28 233.3826,-154.5085 199.348,-132 199.2571,-131.9399 199.1662,-131.8797 199.0752,-131.8196"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="337.4849,-460.65 343.2337,-465.0033 341.4263,-471.9842 335.6775,-467.6309 337.4849,-460.65"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="190.5035,-126.1357 201.3247,-127.9118 194.6706,-128.899 198.8378,-131.6622 198.8378,-131.6622 198.8378,-131.6622 194.6706,-128.899 196.3509,-135.4126 190.5035,-126.1357 190.5035,-126.1357"/>
|
||||
<text text-anchor="middle" x="327.4894" y="-454.6398" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">local</text>
|
||||
</g>
|
||||
<!-- A8 -->
|
||||
<g id="node9" class="node">
|
||||
<title>A8</title>
|
||||
<polygon fill="none" stroke="#000000" points="208.348,-82 208.348,-114 346.348,-114 346.348,-82 208.348,-82"/>
|
||||
<text text-anchor="start" x="234.845" y="-95" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">AsyncStreamClient</text>
|
||||
<polygon fill="none" stroke="#000000" points="208.348,-62 208.348,-82 346.348,-82 346.348,-62 208.348,-62"/>
|
||||
<polygon fill="none" stroke="#000000" points="208.348,-18 208.348,-62 346.348,-62 346.348,-18 208.348,-18"/>
|
||||
<text text-anchor="start" x="231.226" y="-43" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><async>client_loop()</text>
|
||||
<text text-anchor="start" x="218.172" y="-31" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><async>_async_forward())</text>
|
||||
</g>
|
||||
<!-- A2->A8 -->
|
||||
<g id="edge6" class="edge">
|
||||
<title>A2->A8</title>
|
||||
<path fill="none" stroke="#000000" d="M366.3359,-471.8318C361.9206,-397.9861 351.1813,-280.4371 325.348,-182 320.2128,-162.4325 312.4912,-141.8047 304.7338,-123.458"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="300.6874,-114.0894 308.7837,-121.4854 302.67,-118.6796 304.6526,-123.2698 304.6526,-123.2698 304.6526,-123.2698 302.67,-118.6796 300.5214,-125.0541 300.6874,-114.0894 300.6874,-114.0894"/>
|
||||
<text text-anchor="middle" x="315.6341" y="-124.3784" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">remote</text>
|
||||
</g>
|
||||
<!-- A3 -->
|
||||
<g id="node4" class="node">
|
||||
<title>A3</title>
|
||||
<polygon fill="none" stroke="#000000" points=".348,-342 .348,-374 122.348,-374 122.348,-342 .348,-342"/>
|
||||
<text text-anchor="start" x="34.398" y="-355" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">InverterG3P</text>
|
||||
<polygon fill="none" stroke="#000000" points=".348,-286 .348,-342 122.348,-342 122.348,-286 .348,-286"/>
|
||||
<text text-anchor="start" x="51.345" y="-323" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">addr</text>
|
||||
<text text-anchor="start" x="21.901" y="-311" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">remote:StreamPtr</text>
|
||||
<text text-anchor="start" x="27.18" y="-299" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">local:StreamPtr</text>
|
||||
<polygon fill="none" stroke="#000000" points=".348,-230 .348,-286 122.348,-286 122.348,-230 .348,-230"/>
|
||||
<text text-anchor="start" x="9.9515" y="-267" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">async_create_remote()</text>
|
||||
<text text-anchor="start" x="46.3505" y="-243" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
|
||||
</g>
|
||||
<!-- A3->A7 -->
|
||||
<g id="edge12" class="edge">
|
||||
<title>A3->A7</title>
|
||||
<path fill="none" stroke="#000000" d="M75.5849,-218.0021C79.7918,-193.1818 84.3705,-166.167 88.4854,-141.8895"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="75.572,-218.0786 78.5131,-224.6627 73.5667,-229.9099 70.6256,-223.3258 75.572,-218.0786"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="90.1576,-132.0235 92.9231,-142.6349 89.322,-136.9532 88.4864,-141.8829 88.4864,-141.8829 88.4864,-141.8829 89.322,-136.9532 84.0497,-141.1309 90.1576,-132.0235 90.1576,-132.0235"/>
|
||||
<text text-anchor="middle" x="68.2622" y="-207.6261" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">local</text>
|
||||
</g>
|
||||
<!-- A3->A8 -->
|
||||
<g id="edge10" class="edge">
|
||||
<title>A3->A8</title>
|
||||
<path fill="none" stroke="#000000" d="M115.795,-229.9222C128.6843,-213.8036 142.6706,-197.0375 156.348,-182 175.0997,-161.3835 196.7546,-139.9587 216.5165,-121.2154"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="223.9878,-114.1704 219.7994,-124.3049 220.35,-117.6006 216.7122,-121.0309 216.7122,-121.0309 216.7122,-121.0309 220.35,-117.6006 213.625,-117.7568 223.9878,-114.1704 223.9878,-114.1704"/>
|
||||
<text text-anchor="middle" x="216.5987" y="-129.7553" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">remote</text>
|
||||
</g>
|
||||
<!-- A4 -->
|
||||
<g id="node5" class="node">
|
||||
<title>A4</title>
|
||||
<polygon fill="none" stroke="#000000" points="158.348,-982 158.348,-1014 275.348,-1014 275.348,-982 158.348,-982"/>
|
||||
<text text-anchor="start" x="186.277" y="-995" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><<AsyncIfc>></text>
|
||||
<polygon fill="none" stroke="#000000" points="158.348,-962 158.348,-982 275.348,-982 275.348,-962 158.348,-962"/>
|
||||
<polygon fill="none" stroke="#000000" points="158.348,-666 158.348,-962 275.348,-962 275.348,-666 158.348,-666"/>
|
||||
<text text-anchor="start" x="186.284" y="-943" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">set_node_id()</text>
|
||||
<text text-anchor="start" x="184.614" y="-931" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">get_conn_no()</text>
|
||||
<text text-anchor="start" x="198.5115" y="-907" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_add()</text>
|
||||
<text text-anchor="start" x="196.292" y="-895" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_flush()</text>
|
||||
<text text-anchor="start" x="199.9015" y="-883" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_get()</text>
|
||||
<text text-anchor="start" x="196.0115" y="-871" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_peek()</text>
|
||||
<text text-anchor="start" x="200.1815" y="-859" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_log()</text>
|
||||
<text text-anchor="start" x="196.017" y="-847" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_clear()</text>
|
||||
<text text-anchor="start" x="200.1815" y="-835" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_len()</text>
|
||||
<text text-anchor="start" x="194.6225" y="-811" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">fwd_add()</text>
|
||||
<text text-anchor="start" x="192.403" y="-799" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">fwd_flush()</text>
|
||||
<text text-anchor="start" x="196.2925" y="-787" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">fwd_log()</text>
|
||||
<text text-anchor="start" x="192.128" y="-775" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">fwd_clear()</text>
|
||||
<text text-anchor="start" x="199.6265" y="-763" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rx_get()</text>
|
||||
<text text-anchor="start" x="195.7365" y="-751" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rx_peek()</text>
|
||||
<text text-anchor="start" x="199.9065" y="-739" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rx_log()</text>
|
||||
<text text-anchor="start" x="195.742" y="-727" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rx_clear()</text>
|
||||
<text text-anchor="start" x="199.9065" y="-715" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rx_len()</text>
|
||||
<text text-anchor="start" x="191.847" y="-703" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rx_set_cb()</text>
|
||||
<text text-anchor="start" x="168.2275" y="-679" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">prot_set_timeout_cb()</text>
|
||||
</g>
|
||||
<!-- A5 -->
|
||||
<g id="node6" class="node">
|
||||
<title>A5</title>
|
||||
<polygon fill="none" stroke="#000000" points="170.348,-574 170.348,-606 263.348,-606 263.348,-574 170.348,-574"/>
|
||||
<text text-anchor="start" x="188.512" y="-587" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">AsyncIfcImpl</text>
|
||||
<polygon fill="none" stroke="#000000" points="170.348,-482 170.348,-574 263.348,-574 263.348,-482 170.348,-482"/>
|
||||
<text text-anchor="start" x="179.896" y="-555" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">fwd_fifo:ByteFifo</text>
|
||||
<text text-anchor="start" x="183.785" y="-543" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tx_fifo:ByteFifo</text>
|
||||
<text text-anchor="start" x="183.51" y="-531" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rx_fifo:ByteFifo</text>
|
||||
<text text-anchor="start" x="182.944" y="-519" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">conn_no:Count</text>
|
||||
<text text-anchor="start" x="199.0615" y="-507" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">node_id</text>
|
||||
<text text-anchor="start" x="192.3975" y="-495" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">timeout_cb</text>
|
||||
</g>
|
||||
<!-- A4->A5 -->
|
||||
<g id="edge1" class="edge">
|
||||
<title>A4->A5</title>
|
||||
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M216.348,-655.3047C216.348,-637.8196 216.348,-621.0638 216.348,-606.0999"/>
|
||||
<polygon fill="none" stroke="#000000" points="212.8481,-655.6759 216.348,-665.6759 219.8481,-655.676 212.8481,-655.6759"/>
|
||||
</g>
|
||||
<!-- A6 -->
|
||||
<g id="node7" class="node">
|
||||
<title>A6</title>
|
||||
<polygon fill="none" stroke="#000000" points="165.348,-390 165.348,-422 267.348,-422 267.348,-390 165.348,-390"/>
|
||||
<text text-anchor="start" x="186.622" y="-403" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">AsyncStream</text>
|
||||
<polygon fill="none" stroke="#000000" points="165.348,-310 165.348,-390 267.348,-390 267.348,-310 165.348,-310"/>
|
||||
<text text-anchor="start" x="201.901" y="-371" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">reader</text>
|
||||
<text text-anchor="start" x="204.131" y="-359" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">writer</text>
|
||||
<text text-anchor="start" x="206.345" y="-347" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">addr</text>
|
||||
<text text-anchor="start" x="201.901" y="-335" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">r_addr</text>
|
||||
<text text-anchor="start" x="202.456" y="-323" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">l_addr</text>
|
||||
<polygon fill="none" stroke="#000000" points="165.348,-182 165.348,-310 267.348,-310 267.348,-182 165.348,-182"/>
|
||||
<text text-anchor="start" x="188.002" y="-279" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000"><async>loop</text>
|
||||
<text text-anchor="start" x="204.13" y="-267" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">disc()</text>
|
||||
<text text-anchor="start" x="201.3505" y="-255" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
|
||||
<text text-anchor="start" x="196.902" y="-243" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">healthy()</text>
|
||||
<text text-anchor="start" x="181.6185" y="-219" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">__async_read()</text>
|
||||
<text text-anchor="start" x="181.069" y="-207" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">__async_write()</text>
|
||||
<text text-anchor="start" x="174.955" y="-195" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">__async_forward()</text>
|
||||
</g>
|
||||
<!-- A5->A6 -->
|
||||
<g id="edge2" class="edge">
|
||||
<title>A5->A6</title>
|
||||
<path fill="none" stroke="#000000" d="M216.348,-471.886C216.348,-456.1951 216.348,-439.1858 216.348,-422.1976"/>
|
||||
<polygon fill="none" stroke="#000000" points="212.8481,-471.9932 216.348,-481.9932 219.8481,-471.9933 212.8481,-471.9932"/>
|
||||
</g>
|
||||
<!-- A6->A7 -->
|
||||
<g id="edge3" class="edge">
|
||||
<title>A6->A7</title>
|
||||
<path fill="none" stroke="#000000" d="M160.8205,-188.0478C151.5043,-168.9294 142.1189,-149.6691 133.6443,-132.2776"/>
|
||||
<polygon fill="none" stroke="#000000" points="157.7107,-189.6563 165.2376,-197.1126 164.0034,-186.5899 157.7107,-189.6563"/>
|
||||
</g>
|
||||
<!-- A6->A8 -->
|
||||
<g id="edge4" class="edge">
|
||||
<title>A6->A8</title>
|
||||
<path fill="none" stroke="#000000" d="M249.927,-172.088C255.2644,-151.438 260.4749,-131.2796 264.8954,-114.1772"/>
|
||||
<polygon fill="none" stroke="#000000" points="246.498,-171.3682 247.3841,-181.9259 253.2753,-173.12 246.498,-171.3682"/>
|
||||
</g>
|
||||
<!-- A9 -->
|
||||
<g id="node10" class="node">
|
||||
<title>A9</title>
|
||||
<polygon fill="none" stroke="#000000" points="280.348,-1344 280.348,-1376 394.348,-1376 394.348,-1344 280.348,-1344"/>
|
||||
<text text-anchor="start" x="323.456" y="-1357" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">Talent</text>
|
||||
<polygon fill="none" stroke="#000000" points="280.348,-1192 280.348,-1344 394.348,-1344 394.348,-1192 280.348,-1192"/>
|
||||
<text text-anchor="start" x="312.0665" y="-1325" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ifc:AsyncIfc</text>
|
||||
<text text-anchor="start" x="318.171" y="-1313" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">conn_no</text>
|
||||
<text text-anchor="start" x="327.345" y="-1301" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">addr</text>
|
||||
<text text-anchor="start" x="290.111" y="-1277" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">await_conn_resp_cnt</text>
|
||||
<text text-anchor="start" x="325.1255" y="-1265" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">id_str</text>
|
||||
<text text-anchor="start" x="305.948" y="-1253" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">contact_name</text>
|
||||
<text text-anchor="start" x="309.288" y="-1241" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">contact_mail</text>
|
||||
<text text-anchor="start" x="312.8925" y="-1229" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">db:InfosG3</text>
|
||||
<text text-anchor="start" x="311.232" y="-1217" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">mb:Modbus</text>
|
||||
<text text-anchor="start" x="323.46" y="-1205" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">switch</text>
|
||||
<polygon fill="none" stroke="#000000" points="280.348,-1064 280.348,-1192 394.348,-1192 394.348,-1064 280.348,-1064"/>
|
||||
<text text-anchor="start" x="294.8405" y="-1173" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">msg_contact_info()</text>
|
||||
<text text-anchor="start" x="296.7805" y="-1161" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">msg_ota_update()</text>
|
||||
<text text-anchor="start" x="302.6245" y="-1149" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">msg_get_time()</text>
|
||||
<text text-anchor="start" x="290.6765" y="-1137" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">msg_collector_data()</text>
|
||||
<text text-anchor="start" x="292.6215" y="-1125" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">msg_inverter_data()</text>
|
||||
<text text-anchor="start" x="301.7885" y="-1113" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">msg_unknown()</text>
|
||||
<text text-anchor="start" x="317.902" y="-1089" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">healthy()</text>
|
||||
<text text-anchor="start" x="322.3505" y="-1077" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
|
||||
</g>
|
||||
<!-- A9->A2 -->
|
||||
<g id="edge5" class="edge">
|
||||
<title>A9->A2</title>
|
||||
<path fill="none" stroke="#000000" d="M356.4487,-1053.6998C358.0019,-1040.2968 359.3489,-1026.94 360.348,-1014 371.1987,-873.4591 367.4052,-708.5736 366.556,-616.1962"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="355.2231,-1063.9519 351.942,-1053.4885 355.8166,-1058.9873 356.4102,-1054.0226 356.4102,-1054.0226 356.4102,-1054.0226 355.8166,-1058.9873 360.8784,-1054.5568 355.2231,-1063.9519 355.2231,-1063.9519"/>
|
||||
<text text-anchor="middle" x="348.982" y="-1041.9506" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">remote</text>
|
||||
</g>
|
||||
<!-- A9->A2 -->
|
||||
<g id="edge7" class="edge">
|
||||
<title>A9->A2</title>
|
||||
<path fill="none" stroke="#000000" d="M374.3992,-1053.6998C376.0019,-1040.2968 377.3489,-1026.94 378.348,-1014 388.7431,-879.3607 385.698,-722.3785 379.8141,-628.21"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="373.1253,-1063.9519 369.8928,-1053.4733 373.7419,-1058.9901 374.3585,-1054.0283 374.3585,-1054.0283 374.3585,-1054.0283 373.7419,-1058.9901 378.8241,-1054.5832 373.1253,-1063.9519 373.1253,-1063.9519"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="379.8116,-628.1704 375.4269,-622.4455 379.0249,-616.1962 383.4097,-621.9211 379.8116,-628.1704"/>
|
||||
<text text-anchor="middle" x="388.6473" y="-630.7293" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">local</text>
|
||||
</g>
|
||||
<!-- A9->A4 -->
|
||||
<g id="edge15" class="edge">
|
||||
<title>A9->A4</title>
|
||||
<path fill="none" stroke="#000000" d="M287.6089,-1063.7944C283.4127,-1050.6165 279.1452,-1037.2145 274.8907,-1023.853"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="271.7962,-1014.1348 279.1182,-1022.298 273.3133,-1018.8991 274.8304,-1023.6634 274.8304,-1023.6634 274.8304,-1023.6634 273.3133,-1018.8991 270.5425,-1025.0288 271.7962,-1014.1348 271.7962,-1014.1348"/>
|
||||
<text text-anchor="middle" x="274.0553" y="-1046.0873" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">use</text>
|
||||
</g>
|
||||
<!-- A12 -->
|
||||
<g id="node13" class="node">
|
||||
<title>A12</title>
|
||||
<polygon fill="none" stroke="#000000" points="293.348,-856 293.348,-888 360.348,-888 360.348,-856 293.348,-856"/>
|
||||
<text text-anchor="start" x="309.341" y="-869" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">InfosG3</text>
|
||||
<polygon fill="none" stroke="#000000" points="293.348,-836 293.348,-856 360.348,-856 360.348,-836 293.348,-836"/>
|
||||
<polygon fill="none" stroke="#000000" points="293.348,-792 293.348,-836 360.348,-836 360.348,-792 293.348,-792"/>
|
||||
<text text-anchor="start" x="303.232" y="-817" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ha_confs()</text>
|
||||
<text text-anchor="start" x="311.016" y="-805" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">parse()</text>
|
||||
</g>
|
||||
<!-- A9->A12 -->
|
||||
<g id="edge16" class="edge">
|
||||
<title>A9->A12</title>
|
||||
<path fill="none" stroke="#000000" d="M332.8263,-1063.7944C331.1366,-1005.4246 329.3197,-942.658 328.0413,-898.4955"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="327.7446,-888.2447 332.5321,-898.1103 327.8893,-893.2426 328.034,-898.2406 328.034,-898.2406 328.034,-898.2406 327.8893,-893.2426 323.5359,-898.3708 327.7446,-888.2447 327.7446,-888.2447"/>
|
||||
</g>
|
||||
<!-- A10 -->
|
||||
<g id="node11" class="node">
|
||||
<title>A10</title>
|
||||
<polygon fill="none" stroke="#000000" points="50.348,-1308 50.348,-1340 141.348,-1340 141.348,-1308 50.348,-1308"/>
|
||||
<text text-anchor="start" x="68.343" y="-1321" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">SolarmanV5</text>
|
||||
<polygon fill="none" stroke="#000000" points="50.348,-1168 50.348,-1308 141.348,-1308 141.348,-1168 50.348,-1168"/>
|
||||
<text text-anchor="start" x="70.5665" y="-1289" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ifc:AsyncIfc</text>
|
||||
<text text-anchor="start" x="76.671" y="-1277" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">conn_no</text>
|
||||
<text text-anchor="start" x="85.845" y="-1265" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">addr</text>
|
||||
<text text-anchor="start" x="80.846" y="-1241" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">control</text>
|
||||
<text text-anchor="start" x="83.9055" y="-1229" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">serial</text>
|
||||
<text text-anchor="start" x="88.904" y="-1217" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">snr</text>
|
||||
<text text-anchor="start" x="68.058" y="-1205" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">db:InfosG3P</text>
|
||||
<text text-anchor="start" x="69.732" y="-1193" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">mb:Modbus</text>
|
||||
<text text-anchor="start" x="81.96" y="-1181" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">switch</text>
|
||||
<polygon fill="none" stroke="#000000" points="50.348,-1100 50.348,-1168 141.348,-1168 141.348,-1100 50.348,-1100"/>
|
||||
<text text-anchor="start" x="60.2885" y="-1149" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">msg_unknown()</text>
|
||||
<text text-anchor="start" x="76.402" y="-1125" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">healthy()</text>
|
||||
<text text-anchor="start" x="80.8505" y="-1113" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
|
||||
</g>
|
||||
<!-- A10->A3 -->
|
||||
<g id="edge9" class="edge">
|
||||
<title>A10->A3</title>
|
||||
<path fill="none" stroke="#000000" d="M63.2812,-1090.0398C59.4779,-1064.8912 56.2888,-1038.6862 54.348,-1014 36.0005,-780.6307 43.7035,-502.9057 52.599,-374.1544"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="64.8268,-1099.9929 58.8455,-1090.8019 64.0595,-1095.0521 63.2922,-1090.1113 63.2922,-1090.1113 63.2922,-1090.1113 64.0595,-1095.0521 67.7389,-1089.4208 64.8268,-1099.9929 64.8268,-1099.9929"/>
|
||||
<text text-anchor="middle" x="53.6931" y="-1080.3784" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">remote</text>
|
||||
</g>
|
||||
<!-- A10->A3 -->
|
||||
<g id="edge11" class="edge">
|
||||
<title>A10->A3</title>
|
||||
<path fill="none" stroke="#000000" d="M80.9376,-1090.0398C77.4779,-1064.8912 74.2888,-1038.6862 72.348,-1014 54.556,-787.6956 61.261,-519.6805 63.1505,-386.2518"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="82.3274,-1099.9929 76.4876,-1090.7113 81.6359,-1095.0409 80.9444,-1090.089 80.9444,-1090.089 80.9444,-1090.089 81.6359,-1095.0409 85.4011,-1089.4666 82.3274,-1099.9929 82.3274,-1099.9929"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="63.1517,-386.1533 59.2325,-380.1002 63.3125,-374.1544 67.2317,-380.2074 63.1517,-386.1533"/>
|
||||
<text text-anchor="middle" x="71.5214" y="-389.3921" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">local</text>
|
||||
</g>
|
||||
<!-- A10->A4 -->
|
||||
<g id="edge17" class="edge">
|
||||
<title>A10->A4</title>
|
||||
<path fill="none" stroke="#000000" d="M133.6332,-1099.7656C141.3073,-1075.6649 149.5353,-1049.8249 157.7176,-1024.1284"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="160.8501,-1014.2909 162.1038,-1025.1848 159.333,-1019.0552 157.8159,-1023.8195 157.8159,-1023.8195 157.8159,-1023.8195 159.333,-1019.0552 153.5281,-1022.4541 160.8501,-1014.2909 160.8501,-1014.2909"/>
|
||||
<text text-anchor="middle" x="131.0789" y="-1076.9294" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">use</text>
|
||||
</g>
|
||||
<!-- A13 -->
|
||||
<g id="node14" class="node">
|
||||
<title>A13</title>
|
||||
<polygon fill="none" stroke="#000000" points="73.348,-856 73.348,-888 140.348,-888 140.348,-856 73.348,-856"/>
|
||||
<text text-anchor="start" x="86.0065" y="-869" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">InfosG3P</text>
|
||||
<polygon fill="none" stroke="#000000" points="73.348,-836 73.348,-856 140.348,-856 140.348,-836 73.348,-836"/>
|
||||
<polygon fill="none" stroke="#000000" points="73.348,-792 73.348,-836 140.348,-836 140.348,-792 73.348,-792"/>
|
||||
<text text-anchor="start" x="83.232" y="-817" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ha_confs()</text>
|
||||
<text text-anchor="start" x="91.016" y="-805" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">parse()</text>
|
||||
</g>
|
||||
<!-- A10->A13 -->
|
||||
<g id="edge18" class="edge">
|
||||
<title>A10->A13</title>
|
||||
<path fill="none" stroke="#000000" d="M98.8285,-1099.7656C100.7699,-1032.6997 103.1011,-952.1665 104.6479,-898.7305"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="104.9465,-888.4166 109.1551,-898.5427 104.8017,-893.4145 104.657,-898.4124 104.657,-898.4124 104.657,-898.4124 104.8017,-893.4145 100.1589,-898.2822 104.9465,-888.4166 104.9465,-888.4166"/>
|
||||
</g>
|
||||
<!-- A11 -->
|
||||
<g id="node12" class="node">
|
||||
<title>A11</title>
|
||||
<polygon fill="none" stroke="#000000" points="159.348,-1308 159.348,-1340 262.348,-1340 262.348,-1308 159.348,-1308"/>
|
||||
<text text-anchor="start" x="200.01" y="-1321" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">Infos</text>
|
||||
<polygon fill="none" stroke="#000000" points="159.348,-1252 159.348,-1308 262.348,-1308 262.348,-1252 159.348,-1252"/>
|
||||
<text text-anchor="start" x="202.7895" y="-1289" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">stat</text>
|
||||
<text text-anchor="start" x="178.334" y="-1277" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">new_stat_data</text>
|
||||
<text text-anchor="start" x="191.9515" y="-1265" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">info_dev</text>
|
||||
<polygon fill="none" stroke="#000000" points="159.348,-1100 159.348,-1252 262.348,-1252 262.348,-1100 159.348,-1100"/>
|
||||
<text text-anchor="start" x="186.6835" y="-1233" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">static_init()</text>
|
||||
<text text-anchor="start" x="184.7325" y="-1221" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">dev_value()</text>
|
||||
<text text-anchor="start" x="181.6785" y="-1209" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">inc_counter()</text>
|
||||
<text text-anchor="start" x="180.0085" y="-1197" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">dec_counter()</text>
|
||||
<text text-anchor="start" x="178.058" y="-1185" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ha_proxy_conf</text>
|
||||
<text text-anchor="start" x="193.061" y="-1173" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ha_conf</text>
|
||||
<text text-anchor="start" x="185.842" y="-1161" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ha_remove</text>
|
||||
<text text-anchor="start" x="187.2225" y="-1149" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">update_db</text>
|
||||
<text text-anchor="start" x="171.385" y="-1137" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">set_db_def_value</text>
|
||||
<text text-anchor="start" x="180.8335" y="-1125" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">get_db_value</text>
|
||||
<text text-anchor="start" x="169.1705" y="-1113" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ignore_this_device</text>
|
||||
</g>
|
||||
<!-- A11->A12 -->
|
||||
<g id="edge13" class="edge">
|
||||
<title>A11->A12</title>
|
||||
<path fill="none" stroke="#000000" d="M259.3612,-1090.2414C268.1716,-1065.1077 276.9072,-1038.8566 284.348,-1014 296.9582,-971.8745 308.4598,-923.1578 316.2258,-888.0062"/>
|
||||
<polygon fill="none" stroke="#000000" points="256.0104,-1089.2193 255.9834,-1099.8141 262.6115,-1091.5486 256.0104,-1089.2193"/>
|
||||
</g>
|
||||
<!-- A11->A13 -->
|
||||
<g id="edge14" class="edge">
|
||||
<title>A11->A13</title>
|
||||
<path fill="none" stroke="#000000" d="M170.1294,-1090.3375C162.6366,-1065.0902 155.0603,-1038.773 148.348,-1014 136.8889,-971.7079 125.3116,-923.2186 117.2225,-888.1884"/>
|
||||
<polygon fill="none" stroke="#000000" points="166.7853,-1091.3716 172.995,-1099.9559 173.4939,-1089.3728 166.7853,-1091.3716"/>
|
||||
</g>
|
||||
<!-- A14->A9 -->
|
||||
<g id="edge20" class="edge">
|
||||
<title>A14->A9</title>
|
||||
<path fill="none" stroke="#000000" d="M207.7336,-1489.2507C227.8317,-1456.1375 252.0435,-1414.492 271.348,-1376 274.3143,-1370.0855 277.269,-1364.0055 280.1912,-1357.8349"/>
|
||||
<polygon fill="none" stroke="#000000" points="204.6683,-1487.555 202.4506,-1497.9151 210.6449,-1491.1992 204.6683,-1487.555"/>
|
||||
</g>
|
||||
<!-- A14->A10 -->
|
||||
<g id="edge21" class="edge">
|
||||
<title>A14->A10</title>
|
||||
<path fill="none" stroke="#000000" d="M154.3052,-1488.1339C145.0994,-1446.2665 132.7762,-1390.2214 121.7769,-1340.197"/>
|
||||
<polygon fill="none" stroke="#000000" points="150.8909,-1488.9045 156.4568,-1497.9196 157.7276,-1487.4012 150.8909,-1488.9045"/>
|
||||
</g>
|
||||
<!-- A15 -->
|
||||
<g id="node16" class="node">
|
||||
<title>A15</title>
|
||||
<polygon fill="none" stroke="#000000" points="263.348,-1646 263.348,-1678 338.348,-1678 338.348,-1646 263.348,-1646"/>
|
||||
<text text-anchor="start" x="283.0655" y="-1659" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">Modbus</text>
|
||||
<polygon fill="none" stroke="#000000" points="263.348,-1494 263.348,-1646 338.348,-1646 338.348,-1494 263.348,-1494"/>
|
||||
<text text-anchor="start" x="292.5095" y="-1627" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">que</text>
|
||||
<text text-anchor="start" x="273.338" y="-1603" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">snd_handler</text>
|
||||
<text text-anchor="start" x="274.453" y="-1591" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">rsp_handler</text>
|
||||
<text text-anchor="start" x="284.4565" y="-1579" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">timeout</text>
|
||||
<text text-anchor="start" x="274.7375" y="-1567" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">max_retires</text>
|
||||
<text text-anchor="start" x="282.79" y="-1555" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">last_xxx</text>
|
||||
<text text-anchor="start" x="294.7395" y="-1543" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">err</text>
|
||||
<text text-anchor="start" x="281.4015" y="-1531" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">retry_cnt</text>
|
||||
<text text-anchor="start" x="279.727" y="-1519" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">req_pend</text>
|
||||
<text text-anchor="start" x="294.1845" y="-1507" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">tim</text>
|
||||
<polygon fill="none" stroke="#000000" points="263.348,-1426 263.348,-1494 338.348,-1494 338.348,-1426 263.348,-1426"/>
|
||||
<text text-anchor="start" x="274.738" y="-1475" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">build_msg()</text>
|
||||
<text text-anchor="start" x="278.072" y="-1463" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">recv_req()</text>
|
||||
<text text-anchor="start" x="275.572" y="-1451" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">recv_resp()</text>
|
||||
<text text-anchor="start" x="285.8505" y="-1439" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">close()</text>
|
||||
</g>
|
||||
<!-- A15->A9 -->
|
||||
<g id="edge23" class="edge">
|
||||
<title>A15->A9</title>
|
||||
<path fill="none" stroke="#000000" d="M315.5861,-1415.2689C317.0212,-1402.3918 318.4833,-1389.272 319.9365,-1376.2329"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="314.4417,-1425.5379 311.077,-1415.101 314.9955,-1420.5687 315.5493,-1415.5995 315.5493,-1415.5995 315.5493,-1415.5995 314.9955,-1420.5687 320.0217,-1416.0979 314.4417,-1425.5379 314.4417,-1425.5379"/>
|
||||
<text text-anchor="middle" x="326.3292" y="-1392.1837" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">has</text>
|
||||
<text text-anchor="middle" x="308.049" y="-1403.5871" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">1</text>
|
||||
</g>
|
||||
<!-- A15->A10 -->
|
||||
<g id="edge22" class="edge">
|
||||
<title>A15->A10</title>
|
||||
<path fill="none" stroke="#000000" d="M257.1725,-1475.7757C245.6828,-1458.4941 232.4915,-1440.871 218.348,-1426 192.2483,-1398.5578 171.9188,-1406.411 149.348,-1376 141.2346,-1365.0684 134.273,-1352.8227 128.315,-1340.1269"/>
|
||||
<polygon fill="#000000" stroke="#000000" points="262.6729,-1484.2184 253.4437,-1478.2962 259.9435,-1480.0291 257.2141,-1475.8397 257.2141,-1475.8397 257.2141,-1475.8397 259.9435,-1480.0291 260.9845,-1473.3833 262.6729,-1484.2184 262.6729,-1484.2184"/>
|
||||
<text text-anchor="middle" x="143.7688" y="-1349.8225" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">has</text>
|
||||
<text text-anchor="middle" x="245.6964" y="-1470.645" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">1</text>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 37 KiB |
49
app/proxy_2.yuml
Normal file
49
app/proxy_2.yuml
Normal file
@@ -0,0 +1,49 @@
|
||||
// {type:class}
|
||||
// {direction:topDown}
|
||||
// {generate:true}
|
||||
|
||||
[note: You can stick notes on diagrams too!{bg:cornsilk}]
|
||||
[IterRegistry||__iter__]
|
||||
|
||||
[InverterG3|addr;remote:StreamPtr;local:StreamPtr|async_create_remote();;close()]
|
||||
[InverterG3P|addr;remote:StreamPtr;local:StreamPtr|async_create_remote();;close()]
|
||||
|
||||
[<<AsyncIfc>>||set_node_id();get_conn_no();;tx_add();tx_flush();tx_get();tx_peek();tx_log();tx_clear();tx_len();;fwd_add();fwd_flush();fwd_log();fwd_clear();rx_get();rx_peek();rx_log();rx_clear();rx_len();rx_set_cb();;prot_set_timeout_cb()]
|
||||
[AsyncIfcImpl|fwd_fifo:ByteFifo;tx_fifo:ByteFifo;rx_fifo:ByteFifo;conn_no:Count;node_id;timeout_cb]
|
||||
[AsyncStream|reader;writer;addr;r_addr;l_addr|;<async>loop;disc();close();healthy();;__async_read();__async_write();__async_forward()]
|
||||
[AsyncStreamServer|async_create_remote|<async>server_loop();<async>_async_forward();<async>publish_outstanding_mqtt();close()]
|
||||
[AsyncStreamClient||<async>client_loop();<async>_async_forward())]
|
||||
[<<AsyncIfc>>]^-.-[AsyncIfcImpl]
|
||||
[AsyncIfcImpl]^[AsyncStream]
|
||||
[AsyncStream]^[AsyncStreamServer]
|
||||
[AsyncStream]^[AsyncStreamClient]
|
||||
|
||||
|
||||
[Talent|ifc:AsyncIfc;conn_no;addr;;await_conn_resp_cnt;id_str;contact_name;contact_mail;db:InfosG3;mb:Modbus;switch|msg_contact_info();msg_ota_update();msg_get_time();msg_collector_data();msg_inverter_data();msg_unknown();;healthy();close()]
|
||||
[Talent]<remote-[InverterG3]
|
||||
[InverterG3]-remote>[AsyncStreamClient]
|
||||
[Talent]<-local++[InverterG3]
|
||||
[InverterG3]++local->[AsyncStreamServer]
|
||||
|
||||
[SolarmanV5|ifc:AsyncIfc;conn_no;addr;;control;serial;snr;db:InfosG3P;mb:Modbus;switch|msg_unknown();;healthy();close()]
|
||||
[SolarmanV5]<remote-[InverterG3P]
|
||||
[InverterG3P]-remote>[AsyncStreamClient]
|
||||
[SolarmanV5]<-local++[InverterG3P]
|
||||
[InverterG3P]++local->[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()]
|
||||
[Infos]^[InfosG3P||ha_confs();parse()]
|
||||
|
||||
[Talent]use->[<<AsyncIfc>>]
|
||||
[Talent]->[InfosG3]
|
||||
[SolarmanV5]use->[<<AsyncIfc>>]
|
||||
[SolarmanV5]->[InfosG3P]
|
||||
|
||||
[IterRegistry]^[Message|node_id|inc_counter();dec_counter()]
|
||||
[Message]^[Talent]
|
||||
[Message]^[SolarmanV5]
|
||||
|
||||
[Modbus|que;;snd_handler;rsp_handler;timeout;max_retires;last_xxx;err;retry_cnt;req_pend;tim|build_msg();recv_req();recv_resp();close()]
|
||||
[Modbus]<1-has[SolarmanV5]
|
||||
[Modbus]<1-has[Talent]
|
||||
@@ -1,35 +1,13 @@
|
||||
import logging
|
||||
from asyncio import StreamReader, StreamWriter
|
||||
|
||||
if __name__ == "app.src.gen3.inverter_g3":
|
||||
from app.src.inverter_base import InverterBase
|
||||
from app.src.async_stream import StreamPtr
|
||||
from app.src.async_stream import AsyncStreamServer
|
||||
from app.src.gen3.talent import Talent
|
||||
else: # pragma: no cover
|
||||
from inverter_base import InverterBase
|
||||
from async_stream import StreamPtr
|
||||
from async_stream import AsyncStreamServer
|
||||
from gen3.talent import Talent
|
||||
|
||||
|
||||
logger_mqtt = logging.getLogger('mqtt')
|
||||
|
||||
|
||||
class InverterG3(InverterBase):
|
||||
def __init__(self, reader: StreamReader, writer: StreamWriter, addr):
|
||||
super().__init__()
|
||||
self.addr = addr
|
||||
self.remote = StreamPtr(None)
|
||||
ifc = AsyncStreamServer(reader, writer,
|
||||
self.async_publ_mqtt,
|
||||
self.async_create_remote,
|
||||
self.remote)
|
||||
|
||||
self.local = StreamPtr(
|
||||
Talent(addr, ifc, True, False), ifc
|
||||
)
|
||||
|
||||
async def async_create_remote(self) -> None:
|
||||
await InverterBase.async_create_remote(
|
||||
self, 'tsun', Talent)
|
||||
def __init__(self, reader: StreamReader, writer: StreamWriter):
|
||||
super().__init__(reader, writer, 'tsun', Talent)
|
||||
|
||||
@@ -1,36 +1,15 @@
|
||||
import logging
|
||||
from asyncio import StreamReader, StreamWriter
|
||||
|
||||
if __name__ == "app.src.gen3plus.inverter_g3p":
|
||||
from app.src.inverter_base import InverterBase
|
||||
from app.src.async_stream import StreamPtr
|
||||
from app.src.async_stream import AsyncStreamServer
|
||||
from app.src.gen3plus.solarman_v5 import SolarmanV5
|
||||
else: # pragma: no cover
|
||||
from inverter_base import InverterBase
|
||||
from async_stream import StreamPtr
|
||||
from async_stream import AsyncStreamServer
|
||||
from gen3plus.solarman_v5 import SolarmanV5
|
||||
|
||||
|
||||
logger_mqtt = logging.getLogger('mqtt')
|
||||
|
||||
|
||||
class InverterG3P(InverterBase):
|
||||
def __init__(self, reader: StreamReader, writer: StreamWriter, addr,
|
||||
def __init__(self, reader: StreamReader, writer: StreamWriter,
|
||||
client_mode: bool = False):
|
||||
super().__init__()
|
||||
self.addr = addr
|
||||
self.remote = StreamPtr(None)
|
||||
ifc = AsyncStreamServer(reader, writer,
|
||||
self.async_publ_mqtt,
|
||||
self.async_create_remote,
|
||||
self.remote)
|
||||
|
||||
self.local = StreamPtr(
|
||||
SolarmanV5(addr, ifc, True, client_mode), ifc
|
||||
)
|
||||
|
||||
async def async_create_remote(self) -> None:
|
||||
await InverterBase.async_create_remote(
|
||||
self, 'solarman', SolarmanV5)
|
||||
super().__init__(reader, writer, 'solarman',
|
||||
SolarmanV5, client_mode)
|
||||
|
||||
@@ -3,15 +3,20 @@ import logging
|
||||
import traceback
|
||||
import json
|
||||
from aiomqtt import MqttCodeError
|
||||
from asyncio import StreamReader, StreamWriter
|
||||
|
||||
if __name__ == "app.src.inverter_base":
|
||||
from app.src.inverter import Inverter
|
||||
from app.src.async_stream import StreamPtr
|
||||
from app.src.async_stream import AsyncStreamClient
|
||||
from app.src.async_stream import AsyncStreamServer
|
||||
from app.src.config import Config
|
||||
from app.src.infos import Infos
|
||||
else: # pragma: no cover
|
||||
from inverter import Inverter
|
||||
from async_stream import StreamPtr
|
||||
from async_stream import AsyncStreamClient
|
||||
from async_stream import AsyncStreamServer
|
||||
from config import Config
|
||||
from infos import Infos
|
||||
|
||||
@@ -19,9 +24,23 @@ logger_mqtt = logging.getLogger('mqtt')
|
||||
|
||||
|
||||
class InverterBase(Inverter):
|
||||
def __init__(self):
|
||||
def __init__(self, reader: StreamReader, writer: StreamWriter,
|
||||
config_id: str, prot_class,
|
||||
client_mode: bool = False):
|
||||
super().__init__()
|
||||
self.addr = writer.get_extra_info('peername')
|
||||
self.config_id = config_id
|
||||
self.prot_class = prot_class
|
||||
self.__ha_restarts = -1
|
||||
self.remote = StreamPtr(None)
|
||||
ifc = AsyncStreamServer(reader, writer,
|
||||
self.async_publ_mqtt,
|
||||
self.async_create_remote,
|
||||
self.remote)
|
||||
|
||||
self.local = StreamPtr(
|
||||
self.prot_class(self.addr, ifc, True, client_mode), ifc
|
||||
)
|
||||
|
||||
def __enter__(self):
|
||||
return self
|
||||
@@ -66,9 +85,10 @@ class InverterBase(Inverter):
|
||||
return False
|
||||
return True
|
||||
|
||||
async def async_create_remote(self, inv_prot: str, conn_class) -> None:
|
||||
async def async_create_remote(self) -> None:
|
||||
'''Establish a client connection to the TSUN cloud'''
|
||||
tsun = Config.get(inv_prot)
|
||||
|
||||
tsun = Config.get(self.config_id)
|
||||
host = tsun['host']
|
||||
port = tsun['port']
|
||||
addr = (host, port)
|
||||
@@ -83,11 +103,11 @@ class InverterBase(Inverter):
|
||||
|
||||
self.remote.ifc = ifc
|
||||
if hasattr(stream, 'id_str'):
|
||||
self.remote.stream = conn_class(
|
||||
self.remote.stream = self.prot_class(
|
||||
addr, ifc, server_side=False,
|
||||
client_mode=False, id_str=stream.id_str)
|
||||
else:
|
||||
self.remote.stream = conn_class(
|
||||
self.remote.stream = self.prot_class(
|
||||
addr, ifc, server_side=False,
|
||||
client_mode=False)
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ class ModbusConn():
|
||||
'''Establish a client connection to the TSUN cloud'''
|
||||
connection = asyncio.open_connection(self.host, self.port)
|
||||
reader, writer = await connection
|
||||
self.inverter = InverterG3P(reader, writer, self.addr,
|
||||
self.inverter = InverterG3P(reader, writer,
|
||||
client_mode=True)
|
||||
self.inverter.__enter__()
|
||||
stream = self.inverter.local.stream
|
||||
|
||||
@@ -72,8 +72,7 @@ async def webserver(addr, port):
|
||||
async def handle_client(reader: StreamReader, writer: StreamWriter, inv_class):
|
||||
'''Handles a new incoming connection and starts an async loop'''
|
||||
|
||||
addr = writer.get_extra_info('peername')
|
||||
with inv_class(reader, writer, addr) as inv:
|
||||
with inv_class(reader, writer) as inv:
|
||||
await inv.local.ifc.server_loop()
|
||||
|
||||
|
||||
|
||||
241
app/tests/test_inverter_base.py
Normal file
241
app/tests/test_inverter_base.py
Normal file
@@ -0,0 +1,241 @@
|
||||
# test_with_pytest.py
|
||||
import pytest
|
||||
import asyncio
|
||||
import sys,gc
|
||||
import weakref
|
||||
|
||||
from mock import patch
|
||||
from enum import Enum
|
||||
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.protocol_ifc import ProtocolIfc
|
||||
from app.src.inverter_base import InverterBase
|
||||
from app.src.messages import Message
|
||||
from app.src.async_stream import AsyncStream
|
||||
|
||||
from app.tests.test_modbus_tcp import patch_mqtt_err, patch_mqtt_except, test_port, test_hostname
|
||||
|
||||
pytest_plugins = ('pytest_asyncio',)
|
||||
|
||||
# initialize the proxy statistics
|
||||
Infos.static_init()
|
||||
|
||||
@pytest.fixture
|
||||
def config_conn():
|
||||
Config.act_config = {
|
||||
'mqtt':{
|
||||
'host': test_hostname,
|
||||
'port': test_port,
|
||||
'user': '',
|
||||
'passwd': ''
|
||||
},
|
||||
'ha':{
|
||||
'auto_conf_prefix': 'homeassistant',
|
||||
'discovery_prefix': 'homeassistant',
|
||||
'entity_prefix': 'tsun',
|
||||
'proxy_node_id': 'test_1',
|
||||
'proxy_unique_id': ''
|
||||
},
|
||||
'tsun':{'enabled': True, 'host': 'test_cloud.local', 'port': 1234}, 'inverters':{'allow_all':True}
|
||||
}
|
||||
|
||||
@pytest.fixture(scope="module", autouse=True)
|
||||
def module_init():
|
||||
Singleton._instances.clear()
|
||||
yield
|
||||
|
||||
class FakeProtocol(ProtocolIfc):
|
||||
def __init__(self, addr, ifc, server_side: bool,
|
||||
client_mode: bool = False, id_str=b''):
|
||||
# self._registry.append(weakref.ref(self))
|
||||
pass # empty mockup
|
||||
|
||||
def close(self):
|
||||
pass # empty mockup
|
||||
|
||||
class FakeReader():
|
||||
def __init__(self):
|
||||
self.on_recv = asyncio.Event()
|
||||
async def read(self, max_len: int):
|
||||
await self.on_recv.wait()
|
||||
return b''
|
||||
def feed_eof(self):
|
||||
return
|
||||
|
||||
|
||||
class FakeWriter():
|
||||
def write(self, buf: bytes):
|
||||
return
|
||||
def get_extra_info(self, sel: str):
|
||||
if sel == 'peername':
|
||||
return 'remote.intern'
|
||||
elif sel == 'sockname':
|
||||
return 'sock:1234'
|
||||
assert False
|
||||
def is_closing(self):
|
||||
return False
|
||||
def close(self):
|
||||
return
|
||||
async def wait_closed(self):
|
||||
return
|
||||
|
||||
class TestType(Enum):
|
||||
RD_TEST_0_BYTES = 1
|
||||
RD_TEST_TIMEOUT = 2
|
||||
RD_TEST_EXCEPT = 3
|
||||
|
||||
|
||||
test = TestType.RD_TEST_0_BYTES
|
||||
|
||||
@pytest.fixture
|
||||
def patch_open_connection():
|
||||
async def new_conn(conn):
|
||||
await asyncio.sleep(0)
|
||||
return FakeReader(), FakeWriter()
|
||||
|
||||
def new_open(host: str, port: int):
|
||||
global test
|
||||
if test == TestType.RD_TEST_TIMEOUT:
|
||||
raise ConnectionRefusedError
|
||||
elif test == TestType.RD_TEST_EXCEPT:
|
||||
raise ValueError("Value cannot be negative") # Compliant
|
||||
return new_conn(None)
|
||||
|
||||
with patch.object(asyncio, 'open_connection', new_open) as conn:
|
||||
yield conn
|
||||
|
||||
@pytest.fixture
|
||||
def get_test_inverter():
|
||||
reader = FakeReader()
|
||||
writer = FakeWriter()
|
||||
with InverterBase(reader, writer, 'tsun', FakeProtocol) as inverter:
|
||||
yield inverter
|
||||
|
||||
@pytest.fixture
|
||||
def patch_healthy():
|
||||
with patch.object(AsyncStream, 'healthy') as conn:
|
||||
yield conn
|
||||
|
||||
def test_method_calls(get_test_inverter, patch_healthy):
|
||||
spy = patch_healthy
|
||||
with get_test_inverter as inverter:
|
||||
assert inverter.local.stream
|
||||
assert inverter.local.ifc
|
||||
for inv in Inverter:
|
||||
inv.healthy()
|
||||
del inv
|
||||
spy.assert_called_once()
|
||||
del inverter
|
||||
cnt = 0
|
||||
for inv in Inverter:
|
||||
print(f'inv:{gc.get_referrers()}')
|
||||
cnt += 1
|
||||
assert cnt == 0
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_remote_conn(config_conn, patch_open_connection):
|
||||
_ = config_conn
|
||||
_ = patch_open_connection
|
||||
assert asyncio.get_running_loop()
|
||||
|
||||
with InverterBase(FakeReader(), FakeWriter()) as inverter:
|
||||
await inverter.async_create_remote()
|
||||
await asyncio.sleep(0)
|
||||
assert inverter.remote.stream
|
||||
del inverter
|
||||
|
||||
cnt = 0
|
||||
for inv in Inverter:
|
||||
print(f'Inverter refs:{gc.get_referrers(inv)}')
|
||||
cnt += 1
|
||||
assert cnt == 0
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_remote_except(config_conn, patch_open_connection):
|
||||
_ = config_conn
|
||||
_ = patch_open_connection
|
||||
assert asyncio.get_running_loop()
|
||||
|
||||
global test
|
||||
test = TestType.RD_TEST_TIMEOUT
|
||||
|
||||
with InverterBase(FakeReader(), FakeWriter()) as inverter:
|
||||
await inverter.async_create_remote()
|
||||
await asyncio.sleep(0)
|
||||
assert inverter.remote.stream==None
|
||||
|
||||
test = TestType.RD_TEST_EXCEPT
|
||||
await inverter.async_create_remote()
|
||||
await asyncio.sleep(0)
|
||||
assert inverter.remote.stream==None
|
||||
del inverter
|
||||
|
||||
cnt = 0
|
||||
for inv in Inverter:
|
||||
print(f'Inverter refs:{gc.get_referrers(inv)}')
|
||||
cnt += 1
|
||||
assert cnt == 0
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_mqtt_publish(config_conn, patch_open_connection):
|
||||
_ = config_conn
|
||||
_ = patch_open_connection
|
||||
assert asyncio.get_running_loop()
|
||||
|
||||
Inverter.class_init()
|
||||
|
||||
with InverterBase(FakeReader(), FakeWriter()) as inverter:
|
||||
stream = inverter.local.stream
|
||||
await inverter.async_publ_mqtt() # check call with invalid unique_id
|
||||
stream._Talent__set_serial_no(serial_no= "123344")
|
||||
|
||||
stream.new_data['inverter'] = True
|
||||
stream.db.db['inverter'] = {}
|
||||
await inverter.async_publ_mqtt()
|
||||
assert stream.new_data['inverter'] == False
|
||||
|
||||
stream.new_data['env'] = True
|
||||
stream.db.db['env'] = {}
|
||||
await inverter.async_publ_mqtt()
|
||||
assert stream.new_data['env'] == False
|
||||
|
||||
Infos.new_stat_data['proxy'] = True
|
||||
await inverter.async_publ_mqtt()
|
||||
assert Infos.new_stat_data['proxy'] == False
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_mqtt_err(config_conn, patch_open_connection, patch_mqtt_err):
|
||||
_ = config_conn
|
||||
_ = patch_open_connection
|
||||
_ = patch_mqtt_err
|
||||
assert asyncio.get_running_loop()
|
||||
|
||||
Inverter.class_init()
|
||||
|
||||
with InverterBase(FakeReader(), FakeWriter()) as inverter:
|
||||
stream = inverter.local.stream
|
||||
stream._Talent__set_serial_no(serial_no= "123344")
|
||||
stream.new_data['inverter'] = True
|
||||
stream.db.db['inverter'] = {}
|
||||
await inverter.async_publ_mqtt()
|
||||
assert stream.new_data['inverter'] == True
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_mqtt_except(config_conn, patch_open_connection, patch_mqtt_except):
|
||||
_ = config_conn
|
||||
_ = patch_open_connection
|
||||
_ = patch_mqtt_except
|
||||
assert asyncio.get_running_loop()
|
||||
|
||||
Inverter.class_init()
|
||||
|
||||
with InverterBase(FakeReader(), FakeWriter()) as inverter:
|
||||
stream = inverter.local.stream
|
||||
stream._Talent__set_serial_no(serial_no= "123344")
|
||||
|
||||
stream.new_data['inverter'] = True
|
||||
stream.db.db['inverter'] = {}
|
||||
await inverter.async_publ_mqtt()
|
||||
assert stream.new_data['inverter'] == True
|
||||
@@ -103,8 +103,9 @@ def test_method_calls(patch_healthy):
|
||||
spy = patch_healthy
|
||||
reader = FakeReader()
|
||||
writer = FakeWriter()
|
||||
addr = ('proxy.local', 10000)
|
||||
with InverterG3(reader, writer, addr) as inverter:
|
||||
Inverter._registry.clear()
|
||||
|
||||
with InverterG3(reader, writer) as inverter:
|
||||
assert inverter.local.stream
|
||||
assert inverter.local.ifc
|
||||
for inv in Inverter:
|
||||
@@ -123,7 +124,7 @@ async def test_remote_conn(config_conn, patch_open_connection):
|
||||
_ = patch_open_connection
|
||||
assert asyncio.get_running_loop()
|
||||
|
||||
with InverterG3(FakeReader(), FakeWriter(), ('proxy.local', 10000)) as inverter:
|
||||
with InverterG3(FakeReader(), FakeWriter()) as inverter:
|
||||
await inverter.async_create_remote()
|
||||
await asyncio.sleep(0)
|
||||
assert inverter.remote.stream
|
||||
@@ -144,7 +145,7 @@ async def test_remote_except(config_conn, patch_open_connection):
|
||||
global test
|
||||
test = TestType.RD_TEST_TIMEOUT
|
||||
|
||||
with InverterG3(FakeReader(), FakeWriter(), ('proxy.local', 10000)) as inverter:
|
||||
with InverterG3(FakeReader(), FakeWriter()) as inverter:
|
||||
await inverter.async_create_remote()
|
||||
await asyncio.sleep(0)
|
||||
assert inverter.remote.stream==None
|
||||
@@ -169,7 +170,7 @@ async def test_mqtt_publish(config_conn, patch_open_connection):
|
||||
|
||||
Inverter.class_init()
|
||||
|
||||
with InverterG3(FakeReader(), FakeWriter(), ('proxy.local', 10000)) as inverter:
|
||||
with InverterG3(FakeReader(), FakeWriter()) as inverter:
|
||||
stream = inverter.local.stream
|
||||
await inverter.async_publ_mqtt() # check call with invalid unique_id
|
||||
stream._Talent__set_serial_no(serial_no= "123344")
|
||||
@@ -197,7 +198,7 @@ async def test_mqtt_err(config_conn, patch_open_connection, patch_mqtt_err):
|
||||
|
||||
Inverter.class_init()
|
||||
|
||||
with InverterG3(FakeReader(), FakeWriter(), ('proxy.local', 10000)) as inverter:
|
||||
with InverterG3(FakeReader(), FakeWriter()) as inverter:
|
||||
stream = inverter.local.stream
|
||||
stream._Talent__set_serial_no(serial_no= "123344")
|
||||
stream.new_data['inverter'] = True
|
||||
@@ -214,7 +215,7 @@ async def test_mqtt_except(config_conn, patch_open_connection, patch_mqtt_except
|
||||
|
||||
Inverter.class_init()
|
||||
|
||||
with InverterG3(FakeReader(), FakeWriter(), ('proxy.local', 10000)) as inverter:
|
||||
with InverterG3(FakeReader(), FakeWriter()) as inverter:
|
||||
stream = inverter.local.stream
|
||||
stream._Talent__set_serial_no(serial_no= "123344")
|
||||
|
||||
|
||||
@@ -96,8 +96,9 @@ def patch_open_connection():
|
||||
def test_method_calls():
|
||||
reader = FakeReader()
|
||||
writer = FakeWriter()
|
||||
addr = ('proxy.local', 10000)
|
||||
with InverterG3P(reader, writer, addr, client_mode=False) as inverter:
|
||||
Inverter._registry.clear()
|
||||
|
||||
with InverterG3P(reader, writer, client_mode=False) as inverter:
|
||||
assert inverter.local.stream
|
||||
assert inverter.local.ifc
|
||||
|
||||
@@ -107,7 +108,7 @@ async def test_remote_conn(config_conn, patch_open_connection):
|
||||
_ = patch_open_connection
|
||||
assert asyncio.get_running_loop()
|
||||
|
||||
with InverterG3P(FakeReader(), FakeWriter(), ('proxy.local', 10000), client_mode=False) as inverter:
|
||||
with InverterG3P(FakeReader(), FakeWriter(), client_mode=False) as inverter:
|
||||
await inverter.async_create_remote()
|
||||
await asyncio.sleep(0)
|
||||
assert inverter.remote.stream
|
||||
@@ -121,7 +122,7 @@ async def test_remote_except(config_conn, patch_open_connection):
|
||||
global test
|
||||
test = TestType.RD_TEST_TIMEOUT
|
||||
|
||||
with InverterG3P(FakeReader(), FakeWriter(), ('proxy.local', 10000), client_mode=False) as inverter:
|
||||
with InverterG3P(FakeReader(), FakeWriter(), client_mode=False) as inverter:
|
||||
await inverter.async_create_remote()
|
||||
await asyncio.sleep(0)
|
||||
assert inverter.remote.stream==None
|
||||
@@ -139,7 +140,7 @@ async def test_mqtt_publish(config_conn, patch_open_connection):
|
||||
|
||||
Inverter.class_init()
|
||||
|
||||
with InverterG3P(FakeReader(), FakeWriter(), ('proxy.local', 10000), client_mode=False) as inverter:
|
||||
with InverterG3P(FakeReader(), FakeWriter(), client_mode=False) as inverter:
|
||||
stream = inverter.local.stream
|
||||
await inverter.async_publ_mqtt() # check call with invalid unique_id
|
||||
stream._SolarmanV5__set_serial_no(snr= 123344)
|
||||
@@ -167,7 +168,7 @@ async def test_mqtt_err(config_conn, patch_open_connection, patch_mqtt_err):
|
||||
|
||||
Inverter.class_init()
|
||||
|
||||
with InverterG3P(FakeReader(), FakeWriter(), ('proxy.local', 10000), client_mode=False) as inverter:
|
||||
with InverterG3P(FakeReader(), FakeWriter(), client_mode=False) as inverter:
|
||||
stream = inverter.local.stream
|
||||
stream._SolarmanV5__set_serial_no(snr= 123344)
|
||||
stream.new_data['inverter'] = True
|
||||
@@ -184,7 +185,7 @@ async def test_mqtt_except(config_conn, patch_open_connection, patch_mqtt_except
|
||||
|
||||
Inverter.class_init()
|
||||
|
||||
with InverterG3P(FakeReader(), FakeWriter(), ('proxy.local', 10000), client_mode=False) as inverter:
|
||||
with InverterG3P(FakeReader(), FakeWriter(), client_mode=False) as inverter:
|
||||
stream = inverter.local.stream
|
||||
stream._SolarmanV5__set_serial_no(snr= 123344)
|
||||
|
||||
|
||||
@@ -93,11 +93,13 @@ class FakeReader():
|
||||
|
||||
|
||||
class FakeWriter():
|
||||
def __init__(self, conn='remote.intern'):
|
||||
self.conn = conn
|
||||
def write(self, buf: bytes):
|
||||
return
|
||||
def get_extra_info(self, sel: str):
|
||||
if sel == 'peername':
|
||||
return 'remote.intern'
|
||||
return self.conn
|
||||
elif sel == 'sockname':
|
||||
return 'sock:1234'
|
||||
assert False
|
||||
@@ -113,13 +115,13 @@ class FakeWriter():
|
||||
def patch_open():
|
||||
async def new_conn(conn):
|
||||
await asyncio.sleep(0)
|
||||
return FakeReader(), FakeWriter()
|
||||
return FakeReader(), FakeWriter(conn)
|
||||
|
||||
def new_open(host: str, port: int):
|
||||
global test
|
||||
if test == TestType.RD_TEST_TIMEOUT:
|
||||
raise TimeoutError
|
||||
return new_conn(None)
|
||||
return new_conn(f'{host}:{port}')
|
||||
|
||||
with patch.object(asyncio, 'open_connection', new_open) as conn:
|
||||
yield conn
|
||||
@@ -153,7 +155,7 @@ async def test_modbus_conn(patch_open):
|
||||
async with ModbusConn('test.local', 1234) as inverter:
|
||||
stream = inverter.local.stream
|
||||
assert stream.node_id == 'G3P'
|
||||
assert stream.addr == ('test.local', 1234)
|
||||
assert stream.addr == ('test.local:1234')
|
||||
assert type(stream.ifc._reader) is FakeReader
|
||||
assert type(stream.ifc._writer) is FakeWriter
|
||||
assert Infos.stat['proxy']['Inverter_Cnt'] == 1
|
||||
|
||||
Reference in New Issue
Block a user