feat: Add Schrankbelegungsplan diagram and gRPC client for BOS-Miner

- Created a new Draw.io diagram for the cabinet layout (03_Schrankbelegung.drawio) detailing the components and their arrangement.
- Implemented a gRPC client in client.js to interact with the BOS-Miner, including a function to retrieve the tuner state with authorization.
This commit is contained in:
Adrian Bretschneider 2026-05-08 12:54:14 +02:00
parent 30bf40e0f1
commit df53a2c6a2
4 changed files with 1179 additions and 0 deletions

View file

@ -0,0 +1,395 @@
<mxfile host="app.diagrams.net" agent="ThermIQ/PAI" version="21.0.0">
<diagram name="Verbindungsplan" id="vbp001">
<mxGraphModel dx="1400" dy="900" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="2200" pageHeight="1600" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<!-- ===== TITLE ===== -->
<mxCell id="t1" value="ThermIQ — Verbindungsplan ASP1 (Walda)" style="text;html=1;strokeColor=none;fillColor=none;fontSize=22;fontStyle=1;align=left;" vertex="1" parent="1">
<mxGeometry x="30" y="18" width="1000" height="35" as="geometry"/>
</mxCell>
<mxCell id="t2" value="Stand: 2026-03 | Bearbeiter: Adrian | Zeichnungs-Nr.: TIQ-ASP1-VBP-001" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;align=left;fontColor=#666666;" vertex="1" parent="1">
<mxGeometry x="30" y="50" width="800" height="18" as="geometry"/>
</mxCell>
<!-- ===== ZONE: ENERGIEQUELLEN ===== -->
<mxCell id="z1" value="ENERGIEQUELLEN" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=1;fontColor=#996600;" vertex="1" parent="1">
<mxGeometry x="30" y="72" width="230" height="18" as="geometry"/>
</mxCell>
<mxCell id="e_solar" value="Solar PV&#xa;Aufdachanlage" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="30" y="93" width="155" height="62" as="geometry"/>
</mxCell>
<mxCell id="e_batt" value="Batterie&#xa;Speicher" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="205" y="93" width="155" height="62" as="geometry"/>
</mxCell>
<mxCell id="e_deye" value="Deye Hybrid-WR&#xa;RS485 Modbus&#xa;(kein LAN-Modbus!)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="30" y="193" width="200" height="85" as="geometry"/>
</mxCell>
<mxCell id="e_grid" value="Netz 230V/400V&#xa;Hausanschluss" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="260" y="193" width="160" height="62" as="geometry"/>
</mxCell>
<mxCell id="e_meter" value="Smartmeter&#xa;(Hauptzähler)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="260" y="283" width="160" height="55" as="geometry"/>
</mxCell>
<!-- ===== ZONE: HAUPTVERTEILUNG ===== -->
<mxCell id="z2" value="HAUPTVERTEILUNG" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=1;fontColor=#990000;" vertex="1" parent="1">
<mxGeometry x="455" y="72" width="230" height="18" as="geometry"/>
</mxCell>
<mxCell id="d_q0" value="Q0&#xa;FI/LS 40A&#xa;Hauptschutz" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="455" y="220" width="165" height="80" as="geometry"/>
</mxCell>
<mxCell id="d_bus230" value="230V AC Sammelschiene (L1 / N / PE)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FF0000;strokeColor=#990000;fontColor=#FFFFFF;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="430" y="380" width="1580" height="22" as="geometry"/>
</mxCell>
<mxCell id="d_psu" value="Netzteil&#xa;24V DC / 10A" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="1790" y="430" width="165" height="70" as="geometry"/>
</mxCell>
<mxCell id="d_bus24" value="24V DC Steuerschiene (L+ / L-)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FF8000;strokeColor=#CC5500;fontColor=#FFFFFF;fontStyle=1;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="430" y="595" width="1580" height="18" as="geometry"/>
</mxCell>
<!-- ===== ZONE: SCHALTGERAETE ===== -->
<mxCell id="z3" value="SCHALTGERAETE / SICHERUNGEN" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=1;fontColor=#003399;" vertex="1" parent="1">
<mxGeometry x="430" y="420" width="350" height="18" as="geometry"/>
</mxCell>
<mxCell id="s_k10" value="F10 LS-B16A&#xa;K10 Schütz&#xa;Miner 1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="440" y="443" width="165" height="85" as="geometry"/>
</mxCell>
<mxCell id="s_k11" value="F11 LS-B16A&#xa;K11 Schütz&#xa;Miner 2" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="625" y="443" width="165" height="85" as="geometry"/>
</mxCell>
<mxCell id="s_f12" value="F12 LS-B6A&#xa;Pumpen P3/P4/P5" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="810" y="443" width="165" height="85" as="geometry"/>
</mxCell>
<mxCell id="s_k36" value="F13 LS-B6A&#xa;K3 K4 K5 K6&#xa;Ventile RV1/RV2" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="990" y="443" width="165" height="85" as="geometry"/>
</mxCell>
<mxCell id="s_k2" value="F14 LS-B6A&#xa;K2 Relais&#xa;Rückkühler" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="1170" y="443" width="165" height="85" as="geometry"/>
</mxCell>
<mxCell id="s_k7" value="K7 Relais&#xa;potenzialfrei&#xa;WP EVU I1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="1350" y="443" width="165" height="85" as="geometry"/>
</mxCell>
<!-- Safety relay in switching zone -->
<mxCell id="s_sfty" value="Sicherheitsrelais&#xa;2-kanalig&#xa;mit Rückführkreis" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="640" y="790" width="215" height="90" as="geometry"/>
</mxCell>
<!-- ===== ZONE: VERBRAUCHER ===== -->
<mxCell id="z4" value="VERBRAUCHER / AKTOREN" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=1;fontColor=#006600;" vertex="1" parent="1">
<mxGeometry x="430" y="625" width="300" height="18" as="geometry"/>
</mxCell>
<mxCell id="l_m1" value="Antminer S19J #1&#xa;~3200W / 14A&#xa;Braiins OS gRPC" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="440" y="643" width="165" height="80" as="geometry"/>
</mxCell>
<mxCell id="l_m2" value="Antminer S19J #2&#xa;~3200W / 14A&#xa;Braiins OS gRPC" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="625" y="643" width="165" height="80" as="geometry"/>
</mxCell>
<mxCell id="l_pumps" value="P3 + P4 + P5&#xa;Wilo Stratos PICO+&#xa;010V Regelung" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="810" y="643" width="165" height="80" as="geometry"/>
</mxCell>
<mxCell id="l_valves" value="RV1 + RV2&#xa;Belimo C320Q-J&#xa;CQ230A 230V" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="990" y="643" width="165" height="80" as="geometry"/>
</mxCell>
<mxCell id="l_rk" value="Rückkühler&#xa;Ventilator 230V" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="1170" y="643" width="165" height="80" as="geometry"/>
</mxCell>
<mxCell id="l_wp" value="Buderus WLW186i&#xa;EVU Eingang I1&#xa;KEIN Spannungseingang!" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="1350" y="643" width="165" height="80" as="geometry"/>
</mxCell>
<!-- Thermal -->
<mxCell id="l_puffer" value="Pufferspeicher&#xa;Heizung" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#36869e;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="810" y="780" width="155" height="65" as="geometry"/>
</mxCell>
<mxCell id="l_ww" value="Warmwasser-&#xa;speicher" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#36869e;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="990" y="780" width="155" height="65" as="geometry"/>
</mxCell>
<!-- ===== ZONE: SICHERHEITSKREIS ===== -->
<mxCell id="z5" value="SICHERHEITSKREIS (Hardware — unabhaengig von Software!)" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=1;fontColor=#996600;" vertex="1" parent="1">
<mxGeometry x="430" y="760" width="600" height="18" as="geometry"/>
</mxCell>
<mxCell id="sf_es1" value="Not-Aus 1&#xa;[NC]" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FF0000;strokeColor=#AE4132;fontColor=#FFFFFF;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="440" y="800" width="115" height="58" as="geometry"/>
</mxCell>
<mxCell id="sf_es2" value="Not-Aus 2&#xa;[NC]" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FF0000;strokeColor=#AE4132;fontColor=#FFFFFF;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="570" y="800" width="115" height="58" as="geometry"/>
</mxCell>
<mxCell id="sf_flow" value="FLOW OK&#xa;[NC]" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="870" y="800" width="115" height="58" as="geometry"/>
</mxCell>
<mxCell id="sf_temp" value="TEMP MAX&#xa;[NC]" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="1000" y="800" width="115" height="58" as="geometry"/>
</mxCell>
<mxCell id="sf_rst" value="Reset&#xa;[NO]" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="1130" y="800" width="115" height="58" as="geometry"/>
</mxCell>
<!-- ===== ZONE: AUTOMATION ===== -->
<mxCell id="z6" value="AUTOMATION &amp; KOMMUNIKATION" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=1;fontColor=#660066;" vertex="1" parent="1">
<mxGeometry x="430" y="960" width="400" height="18" as="geometry"/>
</mxCell>
<mxCell id="c_revpi" value="RevolutionPi&#xa;Core + DIO + AIO&#xa;MQTT Client / PLC" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="430" y="985" width="200" height="88" as="geometry"/>
</mxCell>
<mxCell id="c_sw" value="Industrial Switch&#xa;Feste IPs&#xa;NTP Sync" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="660" y="998" width="175" height="65" as="geometry"/>
</mxCell>
<mxCell id="c_rpi" value="Raspberry Pi&#xa;Node-RED | Home Asst.&#xa;Mosquitto MQTT" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="870" y="985" width="205" height="88" as="geometry"/>
</mxCell>
<mxCell id="c_rs485" value="USB RS485&#xa;Gateway&#xa;(Modbus RTU)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="1110" y="998" width="170" height="65" as="geometry"/>
</mxCell>
<!-- ===== LEGEND ===== -->
<mxCell id="leg_box" value="Legende" style="swimlane;fillColor=#f5f5f5;strokeColor=#666666;fontStyle=1;startSize=25;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="1600" y="700" width="290" height="295" as="geometry"/>
</mxCell>
<mxCell id="leg_l1b" value="" style="rounded=0;fillColor=#FF0000;strokeColor=none;" vertex="1" parent="leg_box">
<mxGeometry x="10" y="35" width="55" height="14" as="geometry"/>
</mxCell>
<mxCell id="leg_l1t" value="230V AC Leistung" style="text;strokeColor=none;fillColor=none;align=left;fontSize=11;" vertex="1" parent="leg_box">
<mxGeometry x="75" y="33" width="200" height="18" as="geometry"/>
</mxCell>
<mxCell id="leg_l2b" value="" style="rounded=0;fillColor=#FF8000;strokeColor=none;" vertex="1" parent="leg_box">
<mxGeometry x="10" y="60" width="55" height="14" as="geometry"/>
</mxCell>
<mxCell id="leg_l2t" value="24V DC Steuer" style="text;strokeColor=none;fillColor=none;align=left;fontSize=11;" vertex="1" parent="leg_box">
<mxGeometry x="75" y="58" width="200" height="18" as="geometry"/>
</mxCell>
<mxCell id="leg_l3b" value="" style="rounded=0;fillColor=#FFCC00;strokeColor=none;" vertex="1" parent="leg_box">
<mxGeometry x="10" y="85" width="55" height="14" as="geometry"/>
</mxCell>
<mxCell id="leg_l3t" value="Sicherheitskreis" style="text;strokeColor=none;fillColor=none;align=left;fontSize=11;" vertex="1" parent="leg_box">
<mxGeometry x="75" y="83" width="200" height="18" as="geometry"/>
</mxCell>
<mxCell id="leg_l4b" value="" style="rounded=0;fillColor=#008000;strokeColor=none;" vertex="1" parent="leg_box">
<mxGeometry x="10" y="110" width="55" height="14" as="geometry"/>
</mxCell>
<mxCell id="leg_l4t" value="RS485 Modbus RTU" style="text;strokeColor=none;fillColor=none;align=left;fontSize=11;" vertex="1" parent="leg_box">
<mxGeometry x="75" y="108" width="200" height="18" as="geometry"/>
</mxCell>
<mxCell id="leg_l5b" value="" style="rounded=0;fillColor=#0000CC;strokeColor=none;" vertex="1" parent="leg_box">
<mxGeometry x="10" y="135" width="55" height="14" as="geometry"/>
</mxCell>
<mxCell id="leg_l5t" value="LAN / Ethernet (MQTT)" style="text;strokeColor=none;fillColor=none;align=left;fontSize=11;" vertex="1" parent="leg_box">
<mxGeometry x="75" y="133" width="200" height="18" as="geometry"/>
</mxCell>
<mxCell id="leg_l6b" value="" style="rounded=0;fillColor=#9900CC;strokeColor=none;" vertex="1" parent="leg_box">
<mxGeometry x="10" y="160" width="55" height="14" as="geometry"/>
</mxCell>
<mxCell id="leg_l6t" value="gRPC (Braiins OS API)" style="text;strokeColor=none;fillColor=none;align=left;fontSize=11;" vertex="1" parent="leg_box">
<mxGeometry x="75" y="158" width="200" height="18" as="geometry"/>
</mxCell>
<mxCell id="leg_l7b" value="" style="rounded=0;fillColor=#CC00CC;strokeColor=none;" vertex="1" parent="leg_box">
<mxGeometry x="10" y="185" width="55" height="14" as="geometry"/>
</mxCell>
<mxCell id="leg_l7t" value="010V Analogsignal" style="text;strokeColor=none;fillColor=none;align=left;fontSize=11;" vertex="1" parent="leg_box">
<mxGeometry x="75" y="183" width="200" height="18" as="geometry"/>
</mxCell>
<mxCell id="leg_l8b" value="" style="rounded=0;fillColor=#00AAAA;strokeColor=none;" vertex="1" parent="leg_box">
<mxGeometry x="10" y="210" width="55" height="14" as="geometry"/>
</mxCell>
<mxCell id="leg_l8t" value="Hydraulik / Wärme" style="text;strokeColor=none;fillColor=none;align=left;fontSize=11;" vertex="1" parent="leg_box">
<mxGeometry x="75" y="208" width="200" height="18" as="geometry"/>
</mxCell>
<mxCell id="leg_l9t" value="-- -- Steuersignal (DO/DI)" style="text;strokeColor=none;fillColor=none;align=left;fontSize=11;fontColor=#666666;" vertex="1" parent="leg_box">
<mxGeometry x="10" y="238" width="265" height="18" as="geometry"/>
</mxCell>
<!-- ===== EDGES ===== -->
<!-- Energy to Deye -->
<mxCell id="e1" value="DC" style="endArrow=open;endFill=0;html=1;strokeWidth=2;strokeColor=#d6b656;" edge="1" source="e_solar" target="e_deye" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e2" value="DC" style="endArrow=open;endFill=0;html=1;strokeWidth=2;strokeColor=#d6b656;" edge="1" source="e_batt" target="e_deye" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- Grid to meter to Q0 -->
<mxCell id="e3" value="L1/N" style="endArrow=block;html=1;strokeWidth=3;strokeColor=#FF0000;" edge="1" source="e_grid" target="e_meter" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e4" value="230V AC" style="endArrow=block;html=1;strokeWidth=3;strokeColor=#FF0000;" edge="1" source="e_deye" target="d_q0" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e5" value="230V AC" style="endArrow=block;html=1;strokeWidth=3;strokeColor=#FF0000;" edge="1" source="e_meter" target="d_q0" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- Q0 to AC busbar -->
<mxCell id="e6" value="L1/N/PE" style="endArrow=block;html=1;strokeWidth=4;strokeColor=#FF0000;" edge="1" source="d_q0" target="d_bus230" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- AC busbar to switching devices -->
<mxCell id="e7" value="" style="endArrow=open;html=1;strokeWidth=2;strokeColor=#FF0000;" edge="1" source="d_bus230" target="s_k10" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e8" value="" style="endArrow=open;html=1;strokeWidth=2;strokeColor=#FF0000;" edge="1" source="d_bus230" target="s_k11" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e9" value="" style="endArrow=open;html=1;strokeWidth=2;strokeColor=#FF0000;" edge="1" source="d_bus230" target="s_f12" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e10" value="" style="endArrow=open;html=1;strokeWidth=2;strokeColor=#FF0000;" edge="1" source="d_bus230" target="s_k36" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e11" value="" style="endArrow=open;html=1;strokeWidth=2;strokeColor=#FF0000;" edge="1" source="d_bus230" target="s_k2" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e12" value="" style="endArrow=open;html=1;strokeWidth=2;strokeColor=#FF0000;" edge="1" source="d_bus230" target="s_k7" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e13" value="" style="endArrow=open;html=1;strokeWidth=2;strokeColor=#FF0000;" edge="1" source="d_bus230" target="d_psu" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- PSU to 24V busbar -->
<mxCell id="e14" value="24V DC" style="endArrow=block;html=1;strokeWidth=2;strokeColor=#FF8000;" edge="1" source="d_psu" target="d_bus24" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- Switching to loads -->
<mxCell id="e15" value="" style="endArrow=block;html=1;strokeWidth=2;strokeColor=#FF0000;" edge="1" source="s_k10" target="l_m1" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e16" value="" style="endArrow=block;html=1;strokeWidth=2;strokeColor=#FF0000;" edge="1" source="s_k11" target="l_m2" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e17" value="" style="endArrow=block;html=1;strokeWidth=2;strokeColor=#FF0000;" edge="1" source="s_f12" target="l_pumps" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e18" value="" style="endArrow=block;html=1;strokeWidth=2;strokeColor=#FF0000;" edge="1" source="s_k36" target="l_valves" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e19" value="" style="endArrow=block;html=1;strokeWidth=2;strokeColor=#FF0000;" edge="1" source="s_k2" target="l_rk" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e20" value="Trockenkontakt&#xa;(kein Spannungseingang!)" style="endArrow=block;html=1;strokeWidth=2;strokeColor=#9900CC;dashed=1;" edge="1" source="s_k7" target="l_wp" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- Safety inputs to relay -->
<mxCell id="e21" value="NC" style="endArrow=open;html=1;strokeWidth=2;strokeColor=#CC8800;" edge="1" source="sf_es1" target="s_sfty" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e22" value="NC" style="endArrow=open;html=1;strokeWidth=2;strokeColor=#CC8800;" edge="1" source="sf_es2" target="s_sfty" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e23" value="NC" style="endArrow=open;html=1;strokeWidth=2;strokeColor=#CC8800;" edge="1" source="sf_flow" target="s_sfty" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e24" value="NC" style="endArrow=open;html=1;strokeWidth=2;strokeColor=#CC8800;" edge="1" source="sf_temp" target="s_sfty" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e25" value="NO" style="endArrow=open;html=1;strokeWidth=2;strokeColor=#CC8800;" edge="1" source="sf_rst" target="s_sfty" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- Safety relay to contactor coils -->
<mxCell id="e26" value="Spulenfreigabe K10" style="endArrow=block;html=1;strokeWidth=2;strokeColor=#CC8800;dashed=1;" edge="1" source="s_sfty" target="s_k10" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e27" value="Spulenfreigabe K11" style="endArrow=block;html=1;strokeWidth=2;strokeColor=#CC8800;dashed=1;" edge="1" source="s_sfty" target="s_k11" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e28" value="Safety OK → DI" style="endArrow=open;html=1;strokeWidth=1;strokeColor=#CC8800;dashed=1;" edge="1" source="s_sfty" target="c_revpi" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- 24V to controls -->
<mxCell id="e29" value="" style="endArrow=open;html=1;strokeWidth=2;strokeColor=#FF8000;" edge="1" source="d_bus24" target="s_sfty" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e30" value="" style="endArrow=open;html=1;strokeWidth=2;strokeColor=#FF8000;" edge="1" source="d_bus24" target="c_revpi" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- Control connections -->
<mxCell id="e31" value="LAN" style="endArrow=open;endFill=0;html=1;strokeWidth=2;strokeColor=#0000CC;" edge="1" source="c_revpi" target="c_sw" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e32" value="LAN" style="endArrow=open;endFill=0;html=1;strokeWidth=2;strokeColor=#0000CC;" edge="1" source="c_sw" target="c_rpi" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e33" value="USB" style="endArrow=open;endFill=0;html=1;strokeWidth=1;strokeColor=#008000;" edge="1" source="c_rpi" target="c_rs485" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e34" value="RS485&#xa;Modbus RTU" style="endArrow=open;endFill=0;html=1;strokeWidth=2;strokeColor=#008000;" edge="1" source="c_rs485" target="e_deye" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- RevPi DO to relay coils -->
<mxCell id="e35" value="DO → K2-K7 Spulen&#xa;(24V)" style="endArrow=open;html=1;strokeWidth=1;strokeColor=#CC00CC;dashed=1;" edge="1" source="c_revpi" target="s_k2" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- RevPi AO to pumps -->
<mxCell id="e36" value="AO1-AO3&#xa;010V" style="endArrow=open;html=1;strokeWidth=1;strokeColor=#CC00CC;dashed=1;" edge="1" source="c_revpi" target="l_pumps" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- gRPC from RPi to miners -->
<mxCell id="e37" value="gRPC LAN&#xa;(Braiins API)" style="endArrow=open;endFill=0;html=1;strokeWidth=1;strokeColor=#9900CC;dashed=1;" edge="1" source="c_sw" target="l_m1" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- Thermal flow -->
<mxCell id="e38" value="Abwärme" style="endArrow=open;endFill=0;html=1;strokeWidth=2;strokeColor=#FF6600;dashed=1;" edge="1" source="l_m1" target="l_puffer" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e39" value="Abwärme" style="endArrow=open;endFill=0;html=1;strokeWidth=2;strokeColor=#FF6600;dashed=1;" edge="1" source="l_m2" target="l_puffer" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e40" value="Heizkreis" style="endArrow=open;endFill=0;html=1;strokeWidth=2;strokeColor=#00AAAA;" edge="1" source="l_pumps" target="l_puffer" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e41" value="Hydraulik" style="endArrow=open;endFill=0;html=1;strokeWidth=2;strokeColor=#00AAAA;" edge="1" source="l_puffer" target="l_wp" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e42" value="WW" style="endArrow=open;endFill=0;html=1;strokeWidth=2;strokeColor=#00AAAA;" edge="1" source="l_puffer" target="l_ww" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View file

@ -0,0 +1,407 @@
<mxfile host="app.diagrams.net" agent="ThermIQ/PAI" version="21.0.0">
<!-- ===================================================== -->
<!-- PAGE 1: STROMLAUFPLAN — 230V AC HAUPTSTROMKREISE -->
<!-- ===================================================== -->
<diagram name="01 Hauptstromkreise 230V AC" id="slp_ac001">
<mxGraphModel dx="1400" dy="900" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="2600" pageHeight="1200" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<!-- TITLE -->
<mxCell id="tt" value="ThermIQ ASP1 — Stromlaufplan: Hauptstromkreise 230V AC" style="text;html=1;strokeColor=none;fillColor=none;fontSize=18;fontStyle=1;align=left;" vertex="1" parent="1">
<mxGeometry x="30" y="12" width="1200" height="30" as="geometry"/>
</mxCell>
<mxCell id="tt2" value="TIQ-ASP1-SLP-AC-001 | Alle NC-Kontakte der Sicherheitsabschaltung sind in Reihe geschaltet" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;align=left;fontColor=#666666;" vertex="1" parent="1">
<mxGeometry x="30" y="42" width="1400" height="16" as="geometry"/>
</mxCell>
<!-- ===== BUSBARS ===== -->
<!-- L1 busbar (left, vertical, red) -->
<mxCell id="bus_l1" value="L1&#xa;230V" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FF0000;strokeColor=#990000;fontColor=#FFFFFF;fontStyle=1;fontSize=12;rotation=-90;" vertex="1" parent="1">
<mxGeometry x="30" y="80" width="22" height="1070" as="geometry"/>
</mxCell>
<!-- N busbar (right, vertical, blue) -->
<mxCell id="bus_n" value="N&#xa;(Blau)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#0055AA;strokeColor=#003377;fontColor=#FFFFFF;fontStyle=1;fontSize=12;rotation=-90;" vertex="1" parent="1">
<mxGeometry x="2548" y="80" width="22" height="1070" as="geometry"/>
</mxCell>
<!-- PE busbar (bottom, horizontal, green) -->
<mxCell id="bus_pe" value="PE (Schutzleiter Grün/Gelb)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#007700;strokeColor=#005500;fontColor=#FFFFFF;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="30" y="1140" width="2540" height="20" as="geometry"/>
</mxCell>
<!-- Circuit labels (left margin) -->
<mxCell id="cl0" value="Zuleitung&#xa;Hauptschutz" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;align=right;fontColor=#444444;" vertex="1" parent="1">
<mxGeometry x="60" y="80" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="cl1" value="Stromkr. 1&#xa;Miner 1" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;align=right;fontColor=#444444;" vertex="1" parent="1">
<mxGeometry x="60" y="200" width="120" height="45" as="geometry"/>
</mxCell>
<mxCell id="cl2" value="Stromkr. 2&#xa;Miner 2" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;align=right;fontColor=#444444;" vertex="1" parent="1">
<mxGeometry x="60" y="290" width="120" height="45" as="geometry"/>
</mxCell>
<mxCell id="cl3" value="Stromkr. 3&#xa;Pumpe P3" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;align=right;fontColor=#444444;" vertex="1" parent="1">
<mxGeometry x="60" y="385" width="120" height="45" as="geometry"/>
</mxCell>
<mxCell id="cl4" value="Stromkr. 4&#xa;Pumpe P4" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;align=right;fontColor=#444444;" vertex="1" parent="1">
<mxGeometry x="60" y="475" width="120" height="45" as="geometry"/>
</mxCell>
<mxCell id="cl5" value="Stromkr. 5&#xa;Pumpe P5" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;align=right;fontColor=#444444;" vertex="1" parent="1">
<mxGeometry x="60" y="565" width="120" height="45" as="geometry"/>
</mxCell>
<mxCell id="cl6" value="Stromkr. 6&#xa;Ventil RV1 AUF" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;align=right;fontColor=#444444;" vertex="1" parent="1">
<mxGeometry x="60" y="655" width="120" height="45" as="geometry"/>
</mxCell>
<mxCell id="cl7" value="Stromkr. 7&#xa;Ventil RV1 ZU" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;align=right;fontColor=#444444;" vertex="1" parent="1">
<mxGeometry x="60" y="720" width="120" height="45" as="geometry"/>
</mxCell>
<mxCell id="cl8" value="Stromkr. 8&#xa;Ventil RV2 AUF" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;align=right;fontColor=#444444;" vertex="1" parent="1">
<mxGeometry x="60" y="785" width="120" height="45" as="geometry"/>
</mxCell>
<mxCell id="cl9" value="Stromkr. 9&#xa;Ventil RV2 ZU" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;align=right;fontColor=#444444;" vertex="1" parent="1">
<mxGeometry x="60" y="850" width="120" height="45" as="geometry"/>
</mxCell>
<mxCell id="cl10" value="Stromkr. 10&#xa;Rückkühler" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;align=right;fontColor=#444444;" vertex="1" parent="1">
<mxGeometry x="60" y="920" width="120" height="45" as="geometry"/>
</mxCell>
<mxCell id="cl11" value="Stromkr. 11&#xa;Netzteil 24V DC" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;align=right;fontColor=#444444;" vertex="1" parent="1">
<mxGeometry x="60" y="1010" width="120" height="45" as="geometry"/>
</mxCell>
<!-- ===== CIRCUIT 0: Q0 MAIN BREAKER (y=80-160) ===== -->
<!-- Horizontal line from L1 to Q0 -->
<mxCell id="c0_l1" value="" style="endArrow=none;html=1;strokeWidth=3;strokeColor=#FF0000;" edge="1" parent="1">
<mxGeometry x="52" y="100" width="200" height="40" as="geometry"><Array as="points"><mxPoint x="200" y="100"/></Array></mxGeometry>
</mxCell>
<mxCell id="c0_q0" value="Q0&#xa;FI/LS 40A&#xa;30mA" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="200" y="80" width="120" height="70" as="geometry"/>
</mxCell>
<!-- AC Sammelschiene nach Q0 -->
<mxCell id="c0_bus_out" value="L1 Sammelschiene (nach Q0)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FF0000;strokeColor=#990000;fontColor=#FFFFFF;fontStyle=1;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="340" y="88" width="2180" height="18" as="geometry"/>
</mxCell>
<mxCell id="c0_n1" value="N Sammelschiene" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#0055AA;strokeColor=#003377;fontColor=#FFFFFF;fontStyle=1;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="340" y="130" width="2180" height="18" as="geometry"/>
</mxCell>
<!-- ===== CIRCUIT 1: MINER 1 (y=200-280) ===== -->
<!-- L1 → F10 → K10 (main contacts) → Miner1 Schuko 1+2 → N -->
<mxCell id="c1_f10" value="F10&#xa;LS-B16A&#xa;16A" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="340" y="200" width="90" height="65" as="geometry"/>
</mxCell>
<mxCell id="c1_k10" value="K10 / 1-2&#xa;Schütz Miner 1&#xa;(Hauptkontakt)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="460" y="200" width="160" height="65" as="geometry"/>
</mxCell>
<mxCell id="c1_m1" value="Miner 1&#xa;Antminer S19J&#xa;Schuko-1 (~1600W)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="660" y="200" width="180" height="65" as="geometry"/>
</mxCell>
<mxCell id="c1_m1b" value="Miner 1&#xa;Antminer S19J&#xa;Schuko-2 (~1600W)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="660" y="280" width="180" height="65" as="geometry"/>
</mxCell>
<!-- Auxiliary contact K10 for feedback -->
<mxCell id="c1_k10hk" value="K10 / 13-14&#xa;Hilfskontakt&#xa;→ RevPi DI_K10_FB" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="870" y="200" width="180" height="65" as="geometry"/>
</mxCell>
<!-- Note about both Schukos on same contactor -->
<mxCell id="c1_note" value="HINWEIS: Beide Schuko-Stecker von Miner 1 durch K10 führen!" style="text;html=1;strokeColor=#CC0000;fillColor=#FFE0E0;fontSize=10;align=left;fontStyle=2;" vertex="1" parent="1">
<mxGeometry x="340" y="360" width="500" height="22" as="geometry"/>
</mxCell>
<!-- ===== CIRCUIT 2: MINER 2 (y=395-460) ===== -->
<mxCell id="c2_f11" value="F11&#xa;LS-B16A&#xa;16A" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="340" y="400" width="90" height="65" as="geometry"/>
</mxCell>
<mxCell id="c2_k11" value="K11 / 1-2&#xa;Schütz Miner 2&#xa;(Hauptkontakt)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="460" y="400" width="160" height="65" as="geometry"/>
</mxCell>
<mxCell id="c2_m2" value="Miner 2&#xa;Antminer S19J&#xa;Schuko-1 (~1600W)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="660" y="400" width="180" height="65" as="geometry"/>
</mxCell>
<mxCell id="c2_m2b" value="Miner 2&#xa;Antminer S19J&#xa;Schuko-2 (~1600W)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="660" y="480" width="180" height="65" as="geometry"/>
</mxCell>
<mxCell id="c2_k11hk" value="K11 / 13-14&#xa;Hilfskontakt&#xa;→ RevPi DI_K11_FB" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="870" y="400" width="180" height="65" as="geometry"/>
</mxCell>
<!-- ===== CIRCUIT 3-5: PUMPS (y=560-680) ===== -->
<mxCell id="c3_f12" value="F12&#xa;LS-B6A" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="340" y="570" width="90" height="55" as="geometry"/>
</mxCell>
<mxCell id="c3_p3" value="P3 Wilo Stratos PICO+&#xa;230V / max. 45W" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="460" y="555" width="210" height="55" as="geometry"/>
</mxCell>
<mxCell id="c3_p4" value="P4 Wilo Stratos PICO+&#xa;230V / max. 45W" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="460" y="625" width="210" height="55" as="geometry"/>
</mxCell>
<mxCell id="c3_p5" value="P5 Wilo Stratos PICO+ (Glykol)&#xa;230V / max. 45W" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="460" y="695" width="210" height="55" as="geometry"/>
</mxCell>
<mxCell id="c3_note" value="0-10V Steuerleitung (geschirmt) vom RevPi AIO getrennt verlegen!" style="text;html=1;strokeColor=#0000CC;fillColor=#E0E0FF;fontSize=10;fontStyle=2;" vertex="1" parent="1">
<mxGeometry x="680" y="635" width="440" height="22" as="geometry"/>
</mxCell>
<!-- ===== CIRCUIT 6-9: VALVES (y=760-920) ===== -->
<mxCell id="c6_f13" value="F13&#xa;LS-B6A" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="340" y="765" width="90" height="55" as="geometry"/>
</mxCell>
<mxCell id="c6_k3" value="K3 / 11-14&#xa;Relais RV1 AUF&#xa;230V Spule" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="460" y="760" width="165" height="55" as="geometry"/>
</mxCell>
<mxCell id="c6_k4" value="K4 / 11-14&#xa;Relais RV1 ZU&#xa;230V Spule" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="460" y="830" width="165" height="55" as="geometry"/>
</mxCell>
<mxCell id="c6_k5" value="K5 / 11-14&#xa;Relais RV2 AUF&#xa;230V Spule" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="460" y="900" width="165" height="55" as="geometry"/>
</mxCell>
<mxCell id="c6_k6" value="K6 / 11-14&#xa;Relais RV2 ZU&#xa;230V Spule" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="460" y="970" width="165" height="55" as="geometry"/>
</mxCell>
<mxCell id="c6_rv1" value="RV1 Belimo CQ230A&#xa;Antrieb 230V" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="660" y="780" width="185" height="55" as="geometry"/>
</mxCell>
<mxCell id="c6_rv2" value="RV2 Belimo CQ230A&#xa;Antrieb 230V" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="660" y="900" width="185" height="55" as="geometry"/>
</mxCell>
<!-- ===== CIRCUIT 10: COOLER (y=1040-1100) ===== -->
<mxCell id="c10_f14" value="F14&#xa;LS-B6A" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="340" y="1050" width="90" height="55" as="geometry"/>
</mxCell>
<mxCell id="c10_k2" value="K2 / 11-14&#xa;Relais Rückkühler&#xa;230V Spule" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="460" y="1050" width="165" height="55" as="geometry"/>
</mxCell>
<mxCell id="c10_rk" value="Rückkühler&#xa;Ventilator 230V" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="660" y="1050" width="175" height="55" as="geometry"/>
</mxCell>
<!-- ===== NOTE: PSU shown on DC page ===== -->
<mxCell id="c11_note" value="Netzteil 24V DC: Versorgung über gesonderte F-PSU LS-B6A (siehe Stromlaufplan DC/Steuerung)" style="text;html=1;strokeColor=#996600;fillColor=#FFF8CC;fontSize=10;fontStyle=2;" vertex="1" parent="1">
<mxGeometry x="340" y="1115" width="800" height="20" as="geometry"/>
</mxCell>
<!-- ===== WIRE LINES connecting from L1 busbar to components ===== -->
<!-- These are the horizontal "rungs" of the ladder diagram -->
<mxCell id="w1a" value="" style="endArrow=none;html=1;strokeWidth=2;strokeColor=#FF0000;" edge="1" parent="1">
<mxGeometry x="52" y="97" width="150" height="10" as="geometry"><Array as="points"><mxPoint x="340" y="97"/></Array></mxGeometry>
</mxCell>
<mxCell id="w1b" value="" style="endArrow=none;html=1;strokeWidth=2;strokeColor=#FF0000;" edge="1" parent="1">
<mxGeometry x="52" y="220" width="150" height="10" as="geometry"><Array as="points"><mxPoint x="340" y="220"/></Array></mxGeometry>
</mxCell>
<mxCell id="w2b" value="" style="endArrow=none;html=1;strokeWidth=2;strokeColor=#FF0000;" edge="1" parent="1">
<mxGeometry x="52" y="420" width="150" height="10" as="geometry"><Array as="points"><mxPoint x="340" y="420"/></Array></mxGeometry>
</mxCell>
<mxCell id="w3b" value="" style="endArrow=none;html=1;strokeWidth=2;strokeColor=#FF0000;" edge="1" parent="1">
<mxGeometry x="52" y="590" width="150" height="10" as="geometry"><Array as="points"><mxPoint x="340" y="590"/></Array></mxGeometry>
</mxCell>
<mxCell id="w6b" value="" style="endArrow=none;html=1;strokeWidth=2;strokeColor=#FF0000;" edge="1" parent="1">
<mxGeometry x="52" y="785" width="150" height="10" as="geometry"><Array as="points"><mxPoint x="340" y="785"/></Array></mxGeometry>
</mxCell>
<mxCell id="w10b" value="" style="endArrow=none;html=1;strokeWidth=2;strokeColor=#FF0000;" edge="1" parent="1">
<mxGeometry x="52" y="1070" width="150" height="10" as="geometry"><Array as="points"><mxPoint x="340" y="1070"/></Array></mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
<!-- ===================================================== -->
<!-- PAGE 2: STROMLAUFPLAN — 24V DC STEUER + SICHERHEITSKREIS -->
<!-- ===================================================== -->
<diagram name="02 Steuerkreise 24V DC + Safety" id="slp_dc001">
<mxGraphModel dx="1400" dy="900" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="2600" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<!-- TITLE -->
<mxCell id="tt" value="ThermIQ ASP1 — Stromlaufplan: 24V DC Steuerkreise &amp; Sicherheitsabschaltung" style="text;html=1;strokeColor=none;fillColor=none;fontSize=18;fontStyle=1;align=left;" vertex="1" parent="1">
<mxGeometry x="30" y="12" width="1600" height="30" as="geometry"/>
</mxCell>
<mxCell id="tt2" value="TIQ-ASP1-SLP-DC-001 | Alle Sicherheitseingaenge NC-verschaltet — Oeffner = Fehler = Miner AUS" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;align=left;fontColor=#666666;" vertex="1" parent="1">
<mxGeometry x="30" y="42" width="1600" height="16" as="geometry"/>
</mxCell>
<!-- ===== DC BUSBARS ===== -->
<!-- L+ busbar (orange, left) -->
<mxCell id="bus_lp" value="L+&#xa;24V" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FF8000;strokeColor=#CC5500;fontColor=#FFFFFF;fontStyle=1;fontSize=12;rotation=-90;" vertex="1" parent="1">
<mxGeometry x="30" y="80" width="22" height="970" as="geometry"/>
</mxCell>
<!-- L- busbar (dark, right) -->
<mxCell id="bus_lm" value="L-&#xa;0V" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#333333;strokeColor=#111111;fontColor=#FFFFFF;fontStyle=1;fontSize=12;rotation=-90;" vertex="1" parent="1">
<mxGeometry x="2548" y="80" width="22" height="970" as="geometry"/>
</mxCell>
<!-- ===== SAFETY RELAY CIRCUIT (y=80-310) ===== -->
<mxCell id="sl" value="SICHERHEITSKREIS" style="text;html=1;strokeColor=none;fillColor=none;fontSize=12;fontStyle=1;fontColor=#CC0000;" vertex="1" parent="1">
<mxGeometry x="190" y="62" width="300" height="22" as="geometry"/>
</mxCell>
<!-- Safety relay power supply -->
<mxCell id="sr_psu" value="Spannungsversorgung&#xa;Sicherheitsrelais&#xa;(24V DC)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="190" y="82" width="180" height="65" as="geometry"/>
</mxCell>
<!-- Safety inputs in series -->
<mxCell id="sr_es1" value="S1-ES1&#xa;Not-Aus 1&#xa;NC / Oeffner" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FF0000;strokeColor=#AE4132;fontColor=#FFFFFF;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="420" y="82" width="140" height="65" as="geometry"/>
</mxCell>
<mxCell id="sr_es2" value="S2-ES2&#xa;Not-Aus 2&#xa;NC / Oeffner" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FF0000;strokeColor=#AE4132;fontColor=#FFFFFF;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="580" y="82" width="140" height="65" as="geometry"/>
</mxCell>
<mxCell id="sr_flow" value="B1-FLOW&#xa;Durchfluss OK&#xa;NC / Oeffner" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="740" y="82" width="140" height="65" as="geometry"/>
</mxCell>
<mxCell id="sr_temp" value="B2-TEMP&#xa;Max-Thermostat&#xa;NC / Oeffner" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="900" y="82" width="140" height="65" as="geometry"/>
</mxCell>
<mxCell id="sr_relay" value="SR1&#xa;Sicherheitsrelais&#xa;2-kanalig&#xa;(z.B. Pilz PNOZ X3)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="1060" y="75" width="180" height="80" as="geometry"/>
</mxCell>
<mxCell id="sr_rst" value="S3-RESET&#xa;Reset-Taster&#xa;NO / Schließer" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="1060" y="178" width="140" height="65" as="geometry"/>
</mxCell>
<!-- Feedback from K10/K11 into safety relay (Rückführkreis) -->
<mxCell id="sr_rfk" value="Rückführkreis&#xa;K10/13-14 + K11/13-14&#xa;in Reihe → SR1-Y3/Y4" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="1260" y="82" width="200" height="65" as="geometry"/>
</mxCell>
<!-- Safety relay output contacts -->
<mxCell id="sr_out_header" value="SR1 Ausgangskreise (Safety OK → K10 + K11 Spulenfreigabe)" style="text;html=1;strokeColor=none;fillColor=none;fontSize=11;fontStyle=1;fontColor=#CC0000;" vertex="1" parent="1">
<mxGeometry x="190" y="268" width="600" height="20" as="geometry"/>
</mxCell>
<!-- SR1 → K10 coil -->
<mxCell id="sr_k10c" value="SR1 / 13-14&#xa;Sicherheitsausgang 1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="190" y="298" width="175" height="60" as="geometry"/>
</mxCell>
<mxCell id="k10_coil" value="K10 Spule&#xa;24V DC&#xa;Miner 1 Schütz" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="420" y="298" width="175" height="60" as="geometry"/>
</mxCell>
<!-- SR1 → K11 coil -->
<mxCell id="sr_k11c" value="SR1 / 23-24&#xa;Sicherheitsausgang 2" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="190" y="378" width="175" height="60" as="geometry"/>
</mxCell>
<mxCell id="k11_coil" value="K11 Spule&#xa;24V DC&#xa;Miner 2 Schütz" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="420" y="378" width="175" height="60" as="geometry"/>
</mxCell>
<!-- SR1 → RevPi DI Safety OK -->
<mxCell id="sr_revpi_di" value="SR1 / 33-34&#xa;Safety OK Signal" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="190" y="458" width="175" height="60" as="geometry"/>
</mxCell>
<mxCell id="revpi_di_sf" value="RevPi DI_SAFETY_OK&#xa;(nur Meldung,&#xa;nicht sicherheitsrelevant)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="420" y="458" width="200" height="60" as="geometry"/>
</mxCell>
<!-- ===== REVPI DO CIRCUITS (y=560 onwards) ===== -->
<mxCell id="do_header" value="REVPI DIGITALE AUSGAENGE (DO) — Relaistreiber 24V DC" style="text;html=1;strokeColor=none;fillColor=none;fontSize=12;fontStyle=1;fontColor=#000099;" vertex="1" parent="1">
<mxGeometry x="190" y="545" width="700" height="20" as="geometry"/>
</mxCell>
<!-- RevPi block -->
<mxCell id="revpi_do" value="RevolutionPi&#xa;DIO Modul&#xa;DO Ausgänge" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="190" y="575" width="175" height="385" as="geometry"/>
</mxCell>
<!-- DO_K2 → K2 coil → Rückkühler fan -->
<mxCell id="do_k2l" value="DO_K2" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="375" y="583" width="60" height="20" as="geometry"/>
</mxCell>
<mxCell id="k2_coil" value="K2 Spule&#xa;24V DC&#xa;Rückkühler" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="450" y="575" width="155" height="55" as="geometry"/>
</mxCell>
<!-- DO_K3 → K3 coil → RV1 AUF -->
<mxCell id="do_k3l" value="DO_K3" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="375" y="648" width="60" height="20" as="geometry"/>
</mxCell>
<mxCell id="k3_coil" value="K3 Spule&#xa;24V DC&#xa;RV1 AUF" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="450" y="643" width="155" height="55" as="geometry"/>
</mxCell>
<!-- DO_K4 → K4 coil → RV1 ZU -->
<mxCell id="do_k4l" value="DO_K4" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="375" y="718" width="60" height="20" as="geometry"/>
</mxCell>
<mxCell id="k4_coil" value="K4 Spule&#xa;24V DC&#xa;RV1 ZU" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="450" y="713" width="155" height="55" as="geometry"/>
</mxCell>
<!-- DO_K5 → K5 coil → RV2 AUF -->
<mxCell id="do_k5l" value="DO_K5" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="375" y="788" width="60" height="20" as="geometry"/>
</mxCell>
<mxCell id="k5_coil" value="K5 Spule&#xa;24V DC&#xa;RV2 AUF" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="450" y="783" width="155" height="55" as="geometry"/>
</mxCell>
<!-- DO_K6 → K6 coil → RV2 ZU -->
<mxCell id="do_k6l" value="DO_K6" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="375" y="858" width="60" height="20" as="geometry"/>
</mxCell>
<mxCell id="k6_coil" value="K6 Spule&#xa;24V DC&#xa;RV2 ZU" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="450" y="853" width="155" height="55" as="geometry"/>
</mxCell>
<!-- DO_K7 → K7 coil → Heat pump EVU -->
<mxCell id="do_k7l" value="DO_K7&#xa;(EVU Sperre)" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="375" y="928" width="70" height="30" as="geometry"/>
</mxCell>
<mxCell id="k7_coil" value="K7 Spule&#xa;24V DC&#xa;(pot.-frei)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="450" y="923" width="155" height="55" as="geometry"/>
</mxCell>
<mxCell id="k7_out" value="K7 / 11-14&#xa;Trockenkontakt&#xa;→ Buderus I1&#xa;KEIN Spannungseingang!" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="630" y="916" width="195" height="70" as="geometry"/>
</mxCell>
<!-- ANALOG OUTPUTS note -->
<mxCell id="ao_header" value="REVPI ANALOGE AUSGAENGE (AO) — 0-10V Pumpenregelung" style="text;html=1;strokeColor=none;fillColor=none;fontSize=12;fontStyle=1;fontColor=#660099;" vertex="1" parent="1">
<mxGeometry x="900" y="545" width="700" height="20" as="geometry"/>
</mxCell>
<mxCell id="revpi_ao" value="RevolutionPi&#xa;AIO Modul&#xa;AO Ausgänge" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontStyle=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="900" y="575" width="175" height="175" as="geometry"/>
</mxCell>
<mxCell id="ao1_p3" value="AO1 010V → P3 BMS-Modul&#xa;(Schirm → PE Schrank, nur eine Seite!)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="1100" y="578" width="340" height="48" as="geometry"/>
</mxCell>
<mxCell id="ao2_p4" value="AO2 010V → P4 BMS-Modul&#xa;(Schirm → PE Schrank)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="1100" y="640" width="340" height="48" as="geometry"/>
</mxCell>
<mxCell id="ao3_p5" value="AO3 010V → P5 BMS-Modul&#xa;(Schirm → PE Schrank)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="1100" y="702" width="340" height="48" as="geometry"/>
</mxCell>
<!-- DIGITAL INPUTS summary table -->
<mxCell id="di_header" value="REVPI DIGITALE EINGAENGE (DI) — Übersicht" style="text;html=1;strokeColor=none;fillColor=none;fontSize=12;fontStyle=1;fontColor=#006600;" vertex="1" parent="1">
<mxGeometry x="900" y="780" width="700" height="20" as="geometry"/>
</mxCell>
<mxCell id="di_table" value="DI_SAFETY_OK ← SR1 / 33-34 (Safety relay output — Meldekontakt)&#xa;DI_K10_FB ← K10 / 13-14 Hilfskontakt (Miner 1 Schütz Rückmeldung)&#xa;DI_K11_FB ← K11 / 13-14 Hilfskontakt (Miner 2 Schütz Rückmeldung)&#xa;DI_RK_FAULT ← Rückkühler Störmeldung (optional)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e8f5e9;strokeColor=#82b366;align=left;fontSize=11;fontFamily=Courier New;" vertex="1" parent="1">
<mxGeometry x="900" y="808" width="700" height="90" as="geometry"/>
</mxCell>
<!-- Wire connectors (L+ to first component in each row) -->
<mxCell id="w_sr" value="" style="endArrow=none;html=1;strokeWidth=2;strokeColor=#FF8000;" edge="1" parent="1">
<mxGeometry x="52" y="113" width="0" height="0" as="geometry"><Array as="points"><mxPoint x="190" y="113"/></Array></mxGeometry>
</mxCell>
<mxCell id="w_k10" value="" style="endArrow=none;html=1;strokeWidth=2;strokeColor=#FF8000;" edge="1" parent="1">
<mxGeometry x="52" y="325" width="0" height="0" as="geometry"><Array as="points"><mxPoint x="190" y="325"/></Array></mxGeometry>
</mxCell>
<mxCell id="w_k11" value="" style="endArrow=none;html=1;strokeWidth=2;strokeColor=#FF8000;" edge="1" parent="1">
<mxGeometry x="52" y="405" width="0" height="0" as="geometry"><Array as="points"><mxPoint x="190" y="405"/></Array></mxGeometry>
</mxCell>
<mxCell id="w_do" value="" style="endArrow=none;html=1;strokeWidth=2;strokeColor=#FF8000;" edge="1" parent="1">
<mxGeometry x="52" y="595" width="0" height="0" as="geometry"><Array as="points"><mxPoint x="190" y="595"/></Array></mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View file

@ -0,0 +1,335 @@
<mxfile host="app.diagrams.net" agent="ThermIQ/PAI" version="21.0.0">
<diagram name="Schrankbelegung ASP1" id="skb001">
<mxGraphModel dx="1200" dy="900" grid="1" gridSize="5" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1400" pageHeight="1800" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<!-- TITLE -->
<mxCell id="tt" value="ThermIQ ASP1 — Schrankbelegungsplan" style="text;html=1;strokeColor=none;fillColor=none;fontSize=20;fontStyle=1;align=left;" vertex="1" parent="1">
<mxGeometry x="30" y="12" width="900" height="30" as="geometry"/>
</mxCell>
<mxCell id="tt2" value="TIQ-ASP1-SKB-001 | Schrank 800x1000mm (BxH) | DIN-Schiene 35mm | 1TE = 18mm" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;align=left;fontColor=#666666;" vertex="1" parent="1">
<mxGeometry x="30" y="44" width="900" height="16" as="geometry"/>
</mxCell>
<!-- ===== CABINET OUTLINE ===== -->
<mxCell id="cabinet" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#333333;strokeWidth=4;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="30" y="70" width="1000" height="1660" as="geometry"/>
</mxCell>
<!-- Cabinet label -->
<mxCell id="cab_lbl" value="Schaltschrank ASP1&#xa;800mm x 1000mm" style="text;html=1;strokeColor=none;fillColor=none;fontSize=11;align=center;fontStyle=1;fontColor=#333333;" vertex="1" parent="1">
<mxGeometry x="800" y="78" width="200" height="35" as="geometry"/>
</mxCell>
<!-- ===== CABLE ENTRIES (bottom) ===== -->
<mxCell id="ent" value="Kabeleinführungen (unten)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#cccccc;strokeColor=#666666;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="50" y="1690" width="960" height="30" as="geometry"/>
</mxCell>
<!-- ===== HORIZONTAL CABLE DUCTS ===== -->
<mxCell id="duct1" value="Kabelkanal 60x60mm" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#e0e0e0;strokeColor=#999999;fontSize=9;" vertex="1" parent="1">
<mxGeometry x="50" y="220" width="960" height="30" as="geometry"/>
</mxCell>
<mxCell id="duct2" value="Kabelkanal 60x60mm" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#e0e0e0;strokeColor=#999999;fontSize=9;" vertex="1" parent="1">
<mxGeometry x="50" y="450" width="960" height="30" as="geometry"/>
</mxCell>
<mxCell id="duct3" value="Kabelkanal 60x60mm" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#e0e0e0;strokeColor=#999999;fontSize=9;" vertex="1" parent="1">
<mxGeometry x="50" y="680" width="960" height="30" as="geometry"/>
</mxCell>
<mxCell id="duct4" value="Kabelkanal 40x60mm" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#e0e0e0;strokeColor=#999999;fontSize=9;" vertex="1" parent="1">
<mxGeometry x="50" y="920" width="960" height="25" as="geometry"/>
</mxCell>
<mxCell id="duct5" value="Kabelkanal 40x60mm" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#e0e0e0;strokeColor=#999999;fontSize=9;" vertex="1" parent="1">
<mxGeometry x="50" y="1140" width="960" height="25" as="geometry"/>
</mxCell>
<mxCell id="duct6" value="Kabelkanal 40x60mm" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#e0e0e0;strokeColor=#999999;fontSize=9;" vertex="1" parent="1">
<mxGeometry x="50" y="1380" width="960" height="25" as="geometry"/>
</mxCell>
<mxCell id="duct7" value="Kabelkanal 40x60mm" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#e0e0e0;strokeColor=#999999;fontSize=9;" vertex="1" parent="1">
<mxGeometry x="50" y="1580" width="960" height="25" as="geometry"/>
</mxCell>
<!-- ===== DIN RAIL LABELS ===== -->
<mxCell id="r1l" value="Reihe 1" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=1;fontColor=#333333;" vertex="1" parent="1">
<mxGeometry x="1000" y="145" width="25" height="75" as="geometry"/>
</mxCell>
<mxCell id="r2l" value="Reihe 2" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=1;fontColor=#333333;" vertex="1" parent="1">
<mxGeometry x="1000" y="367" width="25" height="75" as="geometry"/>
</mxCell>
<mxCell id="r3l" value="Reihe 3" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=1;fontColor=#333333;" vertex="1" parent="1">
<mxGeometry x="1000" y="596" width="25" height="75" as="geometry"/>
</mxCell>
<mxCell id="r4l" value="Reihe 4" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=1;fontColor=#333333;" vertex="1" parent="1">
<mxGeometry x="1000" y="835" width="25" height="75" as="geometry"/>
</mxCell>
<mxCell id="r5l" value="Reihe 5" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=1;fontColor=#333333;" vertex="1" parent="1">
<mxGeometry x="1000" y="1060" width="25" height="75" as="geometry"/>
</mxCell>
<mxCell id="r6l" value="Reihe 6" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=1;fontColor=#333333;" vertex="1" parent="1">
<mxGeometry x="1000" y="1290" width="25" height="75" as="geometry"/>
</mxCell>
<mxCell id="r7l" value="Reihe 7" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=1;fontColor=#333333;" vertex="1" parent="1">
<mxGeometry x="1000" y="1490" width="25" height="75" as="geometry"/>
</mxCell>
<!-- ===== DIN RAILS (gray horizontal bars) ===== -->
<mxCell id="r1" value="" style="rounded=0;fillColor=#aaaaaa;strokeColor=#666666;" vertex="1" parent="1">
<mxGeometry x="50" y="205" width="960" height="12" as="geometry"/>
</mxCell>
<mxCell id="r2" value="" style="rounded=0;fillColor=#aaaaaa;strokeColor=#666666;" vertex="1" parent="1">
<mxGeometry x="50" y="437" width="960" height="12" as="geometry"/>
</mxCell>
<mxCell id="r3" value="" style="rounded=0;fillColor=#aaaaaa;strokeColor=#666666;" vertex="1" parent="1">
<mxGeometry x="50" y="665" width="960" height="12" as="geometry"/>
</mxCell>
<mxCell id="r4" value="" style="rounded=0;fillColor=#aaaaaa;strokeColor=#666666;" vertex="1" parent="1">
<mxGeometry x="50" y="905" width="960" height="12" as="geometry"/>
</mxCell>
<mxCell id="r5" value="" style="rounded=0;fillColor=#aaaaaa;strokeColor=#666666;" vertex="1" parent="1">
<mxGeometry x="50" y="1125" width="960" height="12" as="geometry"/>
</mxCell>
<mxCell id="r6" value="" style="rounded=0;fillColor=#aaaaaa;strokeColor=#666666;" vertex="1" parent="1">
<mxGeometry x="50" y="1365" width="960" height="12" as="geometry"/>
</mxCell>
<mxCell id="r7" value="" style="rounded=0;fillColor=#aaaaaa;strokeColor=#666666;" vertex="1" parent="1">
<mxGeometry x="50" y="1565" width="960" height="12" as="geometry"/>
</mxCell>
<!-- ===== REIHE 1: HAUPTSCHUTZ + LEITUNGSSCHUTZSCHALTER ===== -->
<!-- Component height ≈ 80px, 1TE = 25px (visual scale) -->
<!-- Q0 FI/LS 40A (4TE = 100px) -->
<mxCell id="r1_q0" value="Q0&#xa;FI/LS&#xa;40A/30mA&#xa;4TE" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontStyle=1;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="60" y="128" width="100" height="75" as="geometry"/>
</mxCell>
<!-- Separator -->
<mxCell id="r1_sep1" value="" style="rounded=0;fillColor=#888888;strokeColor=#555555;" vertex="1" parent="1">
<mxGeometry x="165" y="128" width="8" height="75" as="geometry"/>
</mxCell>
<!-- F10 LS-B16A (1TE = 25px) -->
<mxCell id="r1_f10" value="F10&#xa;B16A&#xa;Miner 1&#xa;1TE" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontStyle=1;fontSize=9;" vertex="1" parent="1">
<mxGeometry x="178" y="128" width="50" height="75" as="geometry"/>
</mxCell>
<!-- F11 LS-B16A -->
<mxCell id="r1_f11" value="F11&#xa;B16A&#xa;Miner 2&#xa;1TE" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontStyle=1;fontSize=9;" vertex="1" parent="1">
<mxGeometry x="233" y="128" width="50" height="75" as="geometry"/>
</mxCell>
<!-- Separator -->
<mxCell id="r1_sep2" value="" style="rounded=0;fillColor=#888888;strokeColor=#555555;" vertex="1" parent="1">
<mxGeometry x="288" y="128" width="6" height="75" as="geometry"/>
</mxCell>
<!-- F12 LS-B6A Pumpen -->
<mxCell id="r1_f12" value="F12&#xa;B6A&#xa;Pumpen&#xa;1TE" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=9;" vertex="1" parent="1">
<mxGeometry x="299" y="128" width="50" height="75" as="geometry"/>
</mxCell>
<!-- F13 LS-B6A Ventile -->
<mxCell id="r1_f13" value="F13&#xa;B6A&#xa;Ventile&#xa;1TE" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=9;" vertex="1" parent="1">
<mxGeometry x="354" y="128" width="50" height="75" as="geometry"/>
</mxCell>
<!-- F14 LS-B6A RK -->
<mxCell id="r1_f14" value="F14&#xa;B6A&#xa;RK Fan&#xa;1TE" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=9;" vertex="1" parent="1">
<mxGeometry x="409" y="128" width="50" height="75" as="geometry"/>
</mxCell>
<!-- FPSU LS-B6A Netzteil -->
<mxCell id="r1_fpsu" value="F-PSU&#xa;B6A&#xa;Netzteil&#xa;1TE" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=9;" vertex="1" parent="1">
<mxGeometry x="464" y="128" width="50" height="75" as="geometry"/>
</mxCell>
<!-- Separator -->
<mxCell id="r1_sep3" value="" style="rounded=0;fillColor=#888888;strokeColor=#555555;" vertex="1" parent="1">
<mxGeometry x="519" y="128" width="6" height="75" as="geometry"/>
</mxCell>
<!-- Freiraum label -->
<mxCell id="r1_free" value="Reserve (Erweiterung)" style="text;html=1;strokeColor=#cccccc;fillColor=#f9f9f9;fontSize=9;align=center;fontColor=#999999;" vertex="1" parent="1">
<mxGeometry x="530" y="128" width="470" height="75" as="geometry"/>
</mxCell>
<!-- ===== REIHE 2: SCHUETZE K10/K11 + NETZTEIL 24V + REVPI ===== -->
<!-- K10 Schütz (3TE = 75px) -->
<mxCell id="r2_k10" value="K10&#xa;Schütz&#xa;Miner 1&#xa;~3TE" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontStyle=1;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="60" y="360" width="90" height="75" as="geometry"/>
</mxCell>
<!-- K11 Schütz (3TE = 75px) -->
<mxCell id="r2_k11" value="K11&#xa;Schütz&#xa;Miner 2&#xa;~3TE" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontStyle=1;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="155" y="360" width="90" height="75" as="geometry"/>
</mxCell>
<!-- Separator -->
<mxCell id="r2_sep1" value="" style="rounded=0;fillColor=#888888;strokeColor=#555555;" vertex="1" parent="1">
<mxGeometry x="250" y="360" width="8" height="75" as="geometry"/>
</mxCell>
<!-- PSU 24V DC 10A (5TE = 125px) -->
<mxCell id="r2_psu" value="VPSU&#xa;Netzteil&#xa;24V DC / 10A&#xa;~5TE" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontStyle=1;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="263" y="360" width="130" height="75" as="geometry"/>
</mxCell>
<!-- Separator -->
<mxCell id="r2_sep2" value="" style="rounded=0;fillColor=#888888;strokeColor=#555555;" vertex="1" parent="1">
<mxGeometry x="398" y="360" width="8" height="75" as="geometry"/>
</mxCell>
<!-- RevPi Core (2TE = 50px) -->
<mxCell id="r2_rpc" value="RevPi&#xa;Core&#xa;2TE" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontStyle=1;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="411" y="360" width="60" height="75" as="geometry"/>
</mxCell>
<!-- RevPi DIO (2TE) -->
<mxCell id="r2_rpd" value="RevPi&#xa;DIO&#xa;2TE" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontStyle=1;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="476" y="360" width="60" height="75" as="geometry"/>
</mxCell>
<!-- RevPi AIO (2TE) -->
<mxCell id="r2_rpa" value="RevPi&#xa;AIO&#xa;2TE" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontStyle=1;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="541" y="360" width="60" height="75" as="geometry"/>
</mxCell>
<!-- Separator -->
<mxCell id="r2_sep3" value="" style="rounded=0;fillColor=#888888;strokeColor=#555555;" vertex="1" parent="1">
<mxGeometry x="606" y="360" width="8" height="75" as="geometry"/>
</mxCell>
<!-- Reserve -->
<mxCell id="r2_free" value="Reserve" style="text;html=1;strokeColor=#cccccc;fillColor=#f9f9f9;fontSize=9;align=center;fontColor=#999999;" vertex="1" parent="1">
<mxGeometry x="619" y="360" width="380" height="75" as="geometry"/>
</mxCell>
<!-- ===== REIHE 3: SICHERHEITSRELAIS + RELAISBLOCK K2-K7 ===== -->
<!-- Safety relay (6TE = 150px) -->
<mxCell id="r3_sr" value="SR1&#xa;Sicherheits-&#xa;relais&#xa;2-kanalig&#xa;~6TE" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontStyle=1;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="60" y="588" width="155" height="75" as="geometry"/>
</mxCell>
<!-- Separator -->
<mxCell id="r3_sep1" value="" style="rounded=0;fillColor=#888888;strokeColor=#555555;" vertex="1" parent="1">
<mxGeometry x="220" y="588" width="8" height="75" as="geometry"/>
</mxCell>
<!-- Relay block K2 -->
<mxCell id="r3_k2" value="K2&#xa;RK Fan&#xa;24V&#xa;1.5TE" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=9;" vertex="1" parent="1">
<mxGeometry x="233" y="588" width="48" height="75" as="geometry"/>
</mxCell>
<!-- K3 -->
<mxCell id="r3_k3" value="K3&#xa;RV1 AUF&#xa;24V&#xa;1.5TE" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=9;" vertex="1" parent="1">
<mxGeometry x="286" y="588" width="48" height="75" as="geometry"/>
</mxCell>
<!-- K4 -->
<mxCell id="r3_k4" value="K4&#xa;RV1 ZU&#xa;24V&#xa;1.5TE" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=9;" vertex="1" parent="1">
<mxGeometry x="339" y="588" width="48" height="75" as="geometry"/>
</mxCell>
<!-- K5 -->
<mxCell id="r3_k5" value="K5&#xa;RV2 AUF&#xa;24V&#xa;1.5TE" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=9;" vertex="1" parent="1">
<mxGeometry x="392" y="588" width="48" height="75" as="geometry"/>
</mxCell>
<!-- K6 -->
<mxCell id="r3_k6" value="K6&#xa;RV2 ZU&#xa;24V&#xa;1.5TE" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=9;" vertex="1" parent="1">
<mxGeometry x="445" y="588" width="48" height="75" as="geometry"/>
</mxCell>
<!-- K7 -->
<mxCell id="r3_k7" value="K7&#xa;WP EVU&#xa;pot-frei&#xa;1.5TE" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontStyle=1;fontSize=9;" vertex="1" parent="1">
<mxGeometry x="498" y="588" width="48" height="75" as="geometry"/>
</mxCell>
<!-- Separator -->
<mxCell id="r3_sep2" value="" style="rounded=0;fillColor=#888888;strokeColor=#555555;" vertex="1" parent="1">
<mxGeometry x="551" y="588" width="8" height="75" as="geometry"/>
</mxCell>
<!-- Reserve -->
<mxCell id="r3_free" value="Reserve" style="text;html=1;strokeColor=#cccccc;fillColor=#f9f9f9;fontSize=9;align=center;fontColor=#999999;" vertex="1" parent="1">
<mxGeometry x="564" y="588" width="435" height="75" as="geometry"/>
</mxCell>
<!-- ===== REIHE 4: KLEMMEN X1 — PE + L ===== -->
<mxCell id="r4_hdr" value="Klemmenleiste X1 — PE-Klemmen (grün/gelb)" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=1;fontColor=#006600;" vertex="1" parent="1">
<mxGeometry x="55" y="828" width="500" height="18" as="geometry"/>
</mxCell>
<!-- PE terminals -->
<mxCell id="r4_pe_klemmen" value="X1.1 X1.2 X1.3 X1.4 X1.5 X1.6 X1.7 X1.8 X1.9 X1.10&#xa;PE-Klemmen (Schutzleiter) — alle Feldgeräte" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#007700;fontStyle=1;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="60" y="847" width="540" height="55" as="geometry"/>
</mxCell>
<mxCell id="r4_l_klemmen" value="X2.1 X2.2 X2.3 X2.4 X2.5 X2.6 X2.7 X2.8&#xa;230V L1-Klemmen — Pumpen, Ventile, RK, WP" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="615" y="847" width="375" height="55" as="geometry"/>
</mxCell>
<!-- ===== REIHE 5: KLEMMEN X3 — N + 24V+ ===== -->
<mxCell id="r5_hdr" value="Klemmenleiste X3 — N-Klemmen + 24V+ Klemmen" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=1;fontColor=#003399;" vertex="1" parent="1">
<mxGeometry x="55" y="1048" width="500" height="18" as="geometry"/>
</mxCell>
<mxCell id="r5_n_klemmen" value="X3.1 X3.2 X3.3 X3.4 X3.5 X3.6 X3.7 X3.8&#xa;N-Klemmen (blau) — Pumpen, Ventile, RK, WP" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#003377;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="60" y="1067" width="420" height="55" as="geometry"/>
</mxCell>
<mxCell id="r5_24v_klemmen" value="X4.1 X4.2 X4.3 X4.4 X4.5 X4.6&#xa;24V+ Steuerklemmen" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="495" y="1067" width="300" height="55" as="geometry"/>
</mxCell>
<mxCell id="r5_0v_klemmen" value="X5.1 X5.2 X5.3 X5.4&#xa;0V Klemmen" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="810" y="1067" width="180" height="55" as="geometry"/>
</mxCell>
<!-- ===== REIHE 6: SIGNALKLEMMEN X6 ===== -->
<mxCell id="r6_hdr" value="Klemmenleiste X6 — Signalklemmen (DO/DI/AO)" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=1;fontColor=#660099;" vertex="1" parent="1">
<mxGeometry x="55" y="1288" width="500" height="18" as="geometry"/>
</mxCell>
<mxCell id="r6_sig" value="X6.1 X6.2 X6.3 X6.4 X6.5 X6.6 X6.7 X6.8 X6.9 X6.10 X6.11 X6.12&#xa;Signalklemmen: DI/DO RevPi | 0-10V AO Pumpen (X6.1-3) | Safety DI (X6.4) | K-Hilfskontakte (X6.5-6)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="60" y="1307" width="920" height="55" as="geometry"/>
</mxCell>
<!-- ===== REIHE 7: NETZWERK + ZUSATZ ===== -->
<mxCell id="r7_hdr" value="Reihe 7 — Netzwerk + Sonstiges" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=1;fontColor=#333333;" vertex="1" parent="1">
<mxGeometry x="55" y="1488" width="400" height="18" as="geometry"/>
</mxCell>
<!-- Industrial Switch -->
<mxCell id="r7_sw" value="Industrial&#xa;Ethernet Switch&#xa;(Hutschiene)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontStyle=1;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="60" y="1507" width="150" height="65" as="geometry"/>
</mxCell>
<!-- USB RS485 Adapter -->
<mxCell id="r7_rs485" value="USB-RS485&#xa;Adapter&#xa;(an RPi)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="225" y="1507" width="120" height="65" as="geometry"/>
</mxCell>
<!-- Raspberry Pi (on DIN mount) -->
<mxCell id="r7_rpi" value="Raspberry Pi 4&#xa;Node-RED + HA&#xa;(Hutschienen-Halter)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;fontStyle=1;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="360" y="1507" width="175" height="65" as="geometry"/>
</mxCell>
<!-- Safety input terminals -->
<mxCell id="r7_sfklemm" value="X7.1-X7.5&#xa;Safety-Eingangsklemmen&#xa;E-Stop, FLOW, TEMP, Reset" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="550" y="1507" width="300" height="65" as="geometry"/>
</mxCell>
<!-- Reserve -->
<mxCell id="r7_free" value="Reserve" style="text;html=1;strokeColor=#cccccc;fillColor=#f9f9f9;fontSize=9;align=center;fontColor=#999999;" vertex="1" parent="1">
<mxGeometry x="865" y="1507" width="115" height="65" as="geometry"/>
</mxCell>
<!-- ===== IMPORTANT NOTES BOX ===== -->
<mxCell id="notes" value="WICHTIGE HINWEISE:&#xa;1. Kabelkanal 60x60mm zwischen Reihe 1/2 für 230V Leistungskabel (Miner je 3x2,5mm²)&#xa;2. 0-10V Analogleitungen (P3/P4/P5) geschirmt verlegen — Schirm einseitig PE Schrank&#xa;3. K7 (WP EVU): Ausgang POTENZIALFREI — keine Spannung in Buderus I1 einspeisen!&#xa;4. Sicherheitsrelaisfeedback K10/K11 Hilfskontakte vollständig verdrahten (Rückführkreis)&#xa;5. Feste IP-Adressen: RevPi = 192.168.x.10, RPi = 192.168.x.11, Miner1 = .101, Miner2 = .102" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;align=left;fontSize=10;fontFamily=Courier New;" vertex="1" parent="1">
<mxGeometry x="55" y="1615" width="960" height="95" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

42
src/miners/client.js Normal file
View file

@ -0,0 +1,42 @@
const grpc = require('@grpc/grpc-js');
const protoLoader = require('@grpc/proto-loader');
const path = require('path');
// === KONFIGURATION ===
const PROTO_PATH = path.join(__dirname, 'performance.proto');
const GRPC_SERVER = '192.168.0.102:50051'; // IP-Adresse des BOS-Miners
const AUTH_TOKEN = 'aWzKUJcmbyBMiTbo'; // Optionaler Token
// === Lade Proto-Datei ===
const packageDefinition = protoLoader.loadSync(PROTO_PATH, {
keepCase: true,
longs: String,
enums: String,
defaults: true,
oneofs: true
});
const protoDescriptor = grpc.loadPackageDefinition(packageDefinition);
const performance = protoDescriptor.braiins.bos.v1;
// === gRPC-Client erstellen ===
const client = new performance.PerformanceService(
GRPC_SERVER,
grpc.credentials.createInsecure() // ggf. durch TLS ersetzen
);
// === Beispiel-Funktion: GetTunerState aufrufen ===
function getTunerState() {
const metadata = new grpc.Metadata();
metadata.add('authorization', AUTH_TOKEN);
client.GetTunerState({}, metadata, (err, response) => {
if (err) {
console.error('Fehler beim gRPC-Aufruf:', err);
} else {
console.log('Antwort von GetTunerState:', response);
}
});
}
getTunerState();