Hier sind die Teile 6 und 7 deines aktualisierten Kompendiums im sauberen Markdown-Format.
Diese Abschnitte enthalten die komplette Empfänger-Infrastruktur (Raspberry Pi LAN-Gateway, fhem.cfg und die .gplot-Diagramme für das FHEM-Webinterface) sowie den vollständigen Laboraufbau inklusive der beiden MicroPython-Testskripte (lab_diagnostic.py und echo_plotter.py) zur Live-Visualisierung der Ultraschall- und Regenechomuster im Thonny-Plotter.

## Teil 6: MySensors RPi-LAN-Gateway & FHEM-Zentral-Infrastruktur (fhem.cfg & GPLOT)

Dieses Dokument beschreibt die softwareseitige Infrastruktur auf der
Empfängerseite. Es zeigt, wie ein Raspberry Pi mit LAN-Schnittstelle
als dediziertes MySensors-Funk-Gateway konfiguriert wird und wie die
eintreffenden 3D-Daten, Positionsdaten sowie die Bootskinematik in
FHEM integriert und visualisiert werden.

### 6.1 Der MySensors Raspberry Pi LAN-Gateway (Hardware- & Software-Setup)

Um die Funkdaten des Anemometers per Ethernet (LAN) in Ihr Netzwerk
einzuspeisen, wird ein kompakter Raspberry Pi (z. B. ein RPi 3B+, 4
oder Zero 2W mit LAN-HAT) als MySensors Ethernet-Gateway
aufgesetzt. Der Pi kompiliert den MySensors-Treiber nativ im
Hintergrund und öffnet einen TCP-Port für FHEM.

#### A. Physisches Pin-Mapping am Raspberry Pi (nRF24L01+ Steckplatz)

Verbinden Sie das nRF24L01+ Funkmodul über Jumper-Kabel direkt mit der
40-Pin-GPIO-Leiste des Raspberry Pi:

```
| nRF24L01+ Pin | Signalname | Raspberry Pi GPIO Pin | Physische Pin-Nummer am Pi |
|---|---|---|---|
| Pin 1 | GND | GND | Pin 6 (oder Pin 25) |
| Pin 2 | VCC (3.3V) | 3V3 Power | Pin 1 (oder Pin 17) |
| Pin 3 | CE | GPIO 22 | Pin 15 |
| Pin 4 | CSN | GPIO 8 (SPI0 CS0) | Pin 24 |
| Pin 5 | SCK | GPIO 11 (SPI0 SCLK) | Pin 23 |
| Pin 6 | MOSI | GPIO 10 (SPI0 MOSI) | Pin 19 |
| Pin 7 | MISO | GPIO 9 (SPI0 MISO) | Pin 21 |
| Pin 8 | IRQ | Nicht verbunden | - |

#### B. Linux-Terminal Befehle zur Installation des Gateways

Loggen Sie sich per SSH auf dem Raspberry Pi ein und führen Sie die
folgenden Befehle aus, um den MySensors-Hintergrunddienst im
Ethernet-Modus zu kompilieren und als System-Dienst einzurichten:

```sh
# 1. Altes Verzeichnis löschen (falls vorhanden) und das korrekte Repository klonen
cd ~ && rm -rf MySensors
git clone https://github.com MySensors
cd MySensors
# 2. Konfiguration für den Ethernet-Modus (LAN) über TCP-Port 5003 vorbereiten
./configure --my-gateway=ethernet --my-port=5003 --my-transport=nrf24 \
            --my-rf24-ce-pin=22 --my-rf24-cs-pin=8
# 3. Quellcode nativ auf dem Pi kompilieren und als Dienst installieren
make
sudo make install
# 4. Gateway-Dienst aktivieren und starten
sudo systemctl enable mysgw
sudo systemctl start mysgw
```


#### 6.2 Konsolidierte Zentral-Konfiguration für FHEM (fhem.cfg)

Tragen Sie diese Zeilen in Ihre fhem.cfg ein. Ersetzen Sie die
IP-Adresse 192.168.178.50 durch die echte IP Ihres Gateway-Pis. Dieses
Skript steuert das Mapping der 3D-Vektoren, zerlegt die GPS-Daten und
wickelt den asynchronen Höhenabgleich ab.

```
# --- 1. DEFINITION DES NETZWERK-GATEWAYS ---
define MYSENSORS_LAN_GW MYSENSORS 192.168.178.50:5003
attr MYSENSORS_LAN_GW autocreate 1
attr MYSENSORS_LAN_GW stateFormat connection

# --- 2. DEFINITION DES ANEMOMETER-DEVICES (NODE-ID 24) ---
define US_Anemometer MYSENSORS_DEVICE 24
attr US_Anemometer IODev MYSENSORS_LAN_GW
attr US_Anemometer room Wetterstation

# --- 3. RESTRUCTURE-ROUTINE VIA USERREADINGS (MATHEMATISCHES MAPPING) ---
# Extrahiert 3D-Vektoren aus Child 5, Bootsdynamik aus Child 4, Regen aus Child 6 und zerlegt das GPS-Telegramm aus Child 3
attr US_Anemometer userReadings \
  wind_vx { ReadingsVal($NAME,"V_VAR15",0) }, \
  wind_vy { ReadingsVal($NAME,"V_VAR25",0) }, \
  wind_vz { ReadingsVal($NAME,"V_VAR35",0) }, \
  regen_mm { ReadingsVal($NAME,"V_RAIN6",0) }, \
  boot_speed { ReadingsVal($NAME,"V_VAR14",0) }, \
  boot_course { ReadingsVal($NAME,"V_VAR24",0) }, \
  gps_latitude { my @p = split(',', ReadingsVal($NAME,"V_POSITION3","0,0,0"));; return $p[0] }, \
  gps_longitude { my @p = split(',', ReadingsVal($NAME,"V_POSITION3","0,0,0"));; return $p[1] }, \
  gps_altitude { my @p = split(',', ReadingsVal($NAME,"V_POSITION3","0,0,0"));; return $p[2] }

# Einheitliche Formatierung im FHEM-Webinterface
attr US_Anemometer stateFormat {\
  "Wind: ".ReadingsVal($NAME,"V_WIND0",0)." m/s (".ReadingsVal($NAME,"V_DIRECTION0",0)."°) ".\
  "| Niederschlag: ".ReadingsVal($NAME,"regen_mm",0)." mm ".\
  "| 3D-Gitter [X: ".ReadingsVal($NAME,"wind_vx",0)." \| Y: ".ReadingsVal($NAME,"wind_vy",0)." \| Z: ".ReadingsVal($NAME,"wind_vz",0)."] ".\
  "| Boot: ".ReadingsVal($NAME,"boot_speed",0)." m/s (".ReadingsVal($NAME,"boot_course",0)."° COG) ".\
  "| Höhe: ".ReadingsVal($NAME,"gps_altitude",0)." m ü. NN"\
}

# --- 4. DATENBANK-LOGGING FÜR RELEVANTE KANÄLE ---
define FileLog_US_Anemometer FileLog ./log/US_Anemometer-%Y.log US_Anemometer:.*(V_WIND0|V_DIRECTION0|wind_vx|wind_vy|wind_vz|regen_mm|V_PRESSURE1|V_LIGHT_LEVEL2).*
attr FileLog_US_Anemometer room Wetterstation

define FileLog_US_Dynamics FileLog ./log/US_Dynamics-%Y.log US_Anemometer:(boot_speed|boot_course|gps_altitude|gps_latitude|gps_longitude).*
attr FileLog_US_Dynamics room Wetterstation

# --- 5. ASYNCHRONER INTERNET-DEM-HÖHENABGLEICH (OPEN-ELEVATION API) ---
# Reagiert exakt, wenn der stationäre Pico im Kalibriermoment die Höhe anfordert (Child 3, V_VAR1)
define n_US_Anemometer_DEM notify US_Anemometer:req_V_VAR13.* {\
  Log 3, "[Anemometer-DEM]: Höhenanfrage vom Knoten erhalten!";;\
  my $pos = ReadingsVal("US_Anemometer", "V_POSITION3", "0,0");;\
  my ($lat, $lon) = split(',', $pos);;\
  if ($lat == 0 && $lon == 0) {\
    Log 3, "[Anemometer-DEM-Fehler]: Keine gültigen Koordinaten vorhanden!";;\
    fhem("set US_Anemometer V_VAR13 0");;\
    return;;\
  }\
  my $cmd = "curl -s 'https://open-elevation.com'";;\
  my $json = `$cmd`;;\
  if ($json =~ /"elevation"\s*:\s*([\d\.]+)/) {\
    my $elevation = $1;;\
    Log 3, "[Anemometer-DEM]: Internet-Abfrage erfolgreich. Höhe für [$lat,$lon] ist $elevation Meter.";;\
    fhem("set US_Anemometer V_VAR13 $elevation");;\
  } else {\
    Log 3, "[Anemometer-DEM-Fehler]: API-Server antwortete nicht!";;\
    fhem("set US_Anemometer V_VAR13 0");;\
  }\
}

------------------------------
## 6.3 FHEM-GPLOT-Spezifikationen zur graphischen Live-Visualisierung## A. 3D-Windkomponenten-Analyse (./www/gplot/Anemometer_3D.gplot)
Erzeugen Sie diese Datei im gplot-Verzeichnis von FHEM, um die drei Windgeschwindigkeits-Vektoren ($v_x, v_y, v_z$) gleichzeitig in einem Live-Liniendiagramm anzuzeigen:

set terminal png transparent size 1024,320 fixed font "Arial",10
set output '<OUT>'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set title "Kartesische 3D-Windvektoren (Wahrer Wind)"
set grid
set ylabel "Geschwindigkeit (m/s)"

#logline <SPEC> <COL> <NAME> <DEFAULT>
#FileLog 4:wind_vx:0:
#FileLog 4:wind_vy:0:
#FileLog 4:wind_vz:0:

plot "<IN>" using 1:4 title 'V_x (Ost-West)' with lines lw 1.5,\
     "<IN>" using 1:4 title 'V_y (Nord-Süd)' with lines lw 1.5,\
     "<IN>" using 1:4 title 'V_z (Vertikaler Auf-/Abwind)' with lines lw 2
```


#### B. Bootsdynamik- & Kompensations-Analyse (./www/gplot/Anemometer_Dynamics.gplot)

Erzeugen Sie diese Datei für die Visualisierung der
Eigendynamik-Kompensation im Mobilbetrieb:

```
set terminal png transparent size 1024,320 fixed font "Arial",10
set output '<OUT>'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set title "Bootsdynamik-Kompensation (Live-Satellitendaten)"
set grid
set ylabel "Geschwindigkeit über Grund (m/s)"
set y2label "Kurs über Grund (°)"
set y2tics

#logline <SPEC> <COL> <NAME> <DEFAULT>
#FileLog 4:boot_speed:0:
#FileLog 4:boot_course:0:

plot "<IN>" using 1:4 title 'Fahrt über Grund (SOG)' with lines lw 1.5,\
     "<IN>" using 1:4 axes x1y2 title 'Kurs über Grund (COG)' with points pt 5
```

#### C. Aktivierung der Plots im FHEM Web-Interface

Binden Sie beide Diagramme über die folgenden Anweisungen in Ihre
fhem.cfg ein, um sie im Raum "Wetterstation" sichtbar zu machen:

```
define SVG_Anemometer_3D SVG FileLog_US_Anemometer:Anemometer_3D:CURRENT
attr SVG_Anemometer_3D room Wetterstation
attr SVG_Anemometer_3D title "Echtzeit 3D-Windkomponenten-Analyse"

define SVG_Anemometer_Dynamics SVG FileLog_US_Dynamics:Anemometer_Dynamics:CURRENT
attr SVG_Anemometer_Dynamics room Wetterstation
attr SVG_Anemometer_Dynamics title "Echtzeit-Fahrgeschwindigkeits- & Kurs-Kompensation"
```


