Im einfachsten Fall wird die ganze Wetterstation an einem Ort aufgebaut, und alle Sensoren hängen an einem Steuerungs-Modul. Wer sich an den Vorgaben des Deutschen Wetterdienstes orientiert, braucht aber unterschiedliche Standorte:
- Temperatur und Luftfeuchte in 2 m Höhe über dem Boden, möglichst schattig
- Regen in 1 m Höhe, frei über Rasen, ohne Aufbauten in der Nähe, von denen Wasser auf den Sensor spritzen kann, und windgeschützt
- Wind in 10 m Höhe, möglichst ohne Hindernisse in der Nähe
- Solarstrahlung mit freier Sicht auf den ganzen Lauf der Sonne, ohne Schatten
Auch ohne diese Ansprüche gibt es auf manchem Grundstück nicht den einen Standort, der für alle Sensoren passt.

Deshalb lassen sich die Sensoren auf mehrere Standorte verteilen. Jeder Standort bekommt ein eigenes Steuerungs-Modul. Eines davon ist der Master: Er sammelt die Messwerte der anderen Module (Slaves) ein, berechnet daraus die Wetterdaten und schickt sie an die weiteren Systeme, zum Beispiel an den Loxone Miniserver. Auch am Master können Sensoren angeschlossen sein. Es gibt genau einen Master. Die Module verständigen sich per UDP über das ESPEasy-eigene Protokoll ESPEasy P2P (Controller 2).

So funktioniert es
Alle Module laufen mit demselben WeatherLox-Image und haben deshalb dieselbe Task-Liste. Auf dem Slave wird bei den Sensor-Tasks, deren Werte der Master braucht, Send to Controller 2 angehakt. Der Slave schickt die Messwerte dieser Tasks dann bei jeder Messung an den Master.
Auf dem Master wird beim Task an derselben Position eingetragen, dass er seine Werte von diesem Slave bekommt (Remote Unit). Der Task liest dann keinen eigenen Sensor mehr, sondern übernimmt die Werte des Slaves. Für die Rules auf dem Master sieht das aus, als käme der Wert von einem eigenen Sensor, sie rechnen ganz normal damit weiter.
Nur der Master spricht mit weiteren Systemen. Auf den Slaves bleiben Controller 1 und 3 ausgeschaltet, aktiv ist dort nur Controller 2.
Beispiel: Wind in 10 m Höhe
Windgeschwindigkeits- und Windrichtungssensor sitzen auf einem Mast in 10 m Höhe an einem eigenen Steuerungs-Modul, dem Slave. Alle anderen Sensoren hängen in 2 m Höhe am Master.
Beide Windsensoren werden über den Analog-Digital-Wandler ADS1115 gelesen, Task 10 ads1115_1. Über denselben Task laufen auch Dämmerung und UV-Index des Solar Sensor Moduls. Kommt Task 10 vom Slave, kommen deshalb auch diese beiden Werte vom Slave. Das Solar Sensor Modul gehört in diesem Beispiel also mit auf den Mast, wo es ohnehin am wenigsten verschattet ist. Dann werden auch Helligkeit (Task 11 veml7700_1) und Solarstrahlung (Task 12 ina219_1) vom Slave übertragen.
Schritt 1: Unit-Nummern und Namen vergeben
Jedes Modul braucht eine eigene Unit-Nummer zwischen 1 und 254, einzustellen im Reiter Config unter Unit Number. Im Image ist 0 eingestellt, damit funktioniert die Übertragung nicht. Die Nummern dürfen auch nicht mit anderen ESPEasy-Geräten im Netz übereinstimmen. Im Beispiel bekommt der Master die 1 und der Slave die 2.
Der Slave bekommt außerdem unter Unit Name einen eigenen Namen, zum Beispiel weatherlox-wind. Sonst melden sich beide Module unter demselben Namen im Netz.

Beide Module müssen im selben Netz sein. Gast-WLANs, die die Geräte voneinander abschotten, eignen sich nicht. Der Port für ESPEasy P2P (Tools → Advanced → ESPEasy p2p UDP port) steht auf beiden Modulen auf 8266 und bleibt so. Nach dem Speichern beide Module neu starten. Im Reiter Main erscheinen danach unter Node List beide Module.

Schritt 2: Slave einrichten
Im Reiter Controllers Controller 2 (ESPEasy P2P Networking) einschalten. Controller 1 und 3 bleiben aus.

Im Reiter Devices bei Task 10, 11 und 12 jeweils auf Edit klicken, unter Data Acquisition beim Controller 2 den Haken Send to Controller setzen und auf Submit klicken. Das geschieht bei den Sensor-Tasks, nicht bei den Tasks data_…. Name und Intervall der Tasks bleiben unverändert, die Rules auf dem Master rechnen beim Wind mit 5 Sekunden.

Der Slave berechnet mit seinen Rules zwar ebenfalls Wetterdaten, verschickt sie aber nicht. In rules1 des Slaves können deshalb savesumvalues und getopenmeteo auf 0 gesetzt werden.
Schritt 3: Master einrichten
Im Reiter Controllers ebenfalls Controller 2 einschalten, dazu die Controller, über die die Wetterdaten weitergehen sollen, wie in 3. Controller einrichten beschrieben.
Sobald Controller 2 aktiv ist, zeigt jede Task-Seite den Bereich Data Source mit dem Feld Remote Unit. Bei Task 10, 11 und 12 dort die Unit-Nummer des Slaves eintragen (im Beispiel 2) und auf Submit klicken. 0 bedeutet: Der Task liest seinen eigenen Sensor.

In der Übersicht im Reiter Devices steht bei diesen Tasks danach statt des Anschlusses die Quelle, zum Beispiel „Unit 2 – weatherlox-wind“. Die Werte kommen im Takt des Slaves an. Kommen keine Werte an, den Task auf dem Slave noch einmal speichern und prüfen, ob beide Module unter Node List auftauchen.

Mehrere Slaves
Nach demselben Schema lassen sich weitere Slaves einbinden, zum Beispiel ein Modul für den Regensensor in 1 m Höhe. Jedes Modul bekommt eine eigene Unit-Nummer, und jeder Task auf dem Master bekommt seine Werte von genau einem Modul. Ändert sich die Unit-Nummer eines Slaves, muss sie auf dem Master bei den betroffenen Tasks angepasst werden.