
MESHLE Bluetooth Mesh Geräte über BACnet™ von einer WAGO SPS steuern (CODESYS-Anleitung)
MESHLE Geräte sind drahtlos über MESHLE Bluetooth Mesh verbunden — ein proprietäres, offline-fähiges Mesh, das Ihre Beleuchtung, Sensoren und Aktoren ohne Cloud betreibt. Das MESHLE Gateway bindet dieses drahtlose Netzwerk an die übrige Gebäudeinfrastruktur an und stellt das Mesh über offene Schnittstellen bereit — REST, MQTT, Modbus TCP/IP und BACnet™ — sodass jedes bestehende kabelgebundene Steuerungssystem es lesen und steuern kann.
Diese Anleitung führt die BACnet™-Brücke vollständig durch. Sie konfigurieren eine WAGO CC100 SPS als BACnet™-Client, der drahtlos verbundene MESHLE Geräte über die BACnet™-Objekte des Gateways liest und beschreibt, und stellen diese Werte anschließend als IEC-Variablen in einem CODESYS 3.5 Projekt bereit. Das ist ein konkreter, reproduzierbarer Nachweis, dass ein MESHLE Bluetooth Mesh Netzwerk wie jedes andere Feldgerät BACnet™/IP zu jedem kabelgebundenen Steuerungssystem spricht.
Sie richtet sich an Gebäudeautomations- und GLT-Integratoren sowie an OEM-Ingenieure, die drahtlose MESHLE Beleuchtung unter SPS-Steuerung benötigen. Das durchgearbeitete Beispiel verwendet einen Mehrkanal-Dimmer und deckt damit sowohl analoge als auch binäre BACnet™-Objekttypen in einem Setup ab — dasselbe Muster bindet jedoch jeden MESHLE Gerätetyp im Mesh in Ihr kabelgebundenes Steuerungssystem ein.
Überblick
Diese Anleitung dokumentiert den vollständigen Prozess, ein drahtlos verbundenes MESHLE Bluetooth Mesh Netzwerk an ein kabelgebundenes Steuerungssystem anzubinden: Sie richten eine WAGO Steuerung als BACnet™-Client ein, der über BACnet™ vom MESHLE Gateway liest und auf es schreibt, und stellen diese Werte als IEC-Variablen in einem CODESYS 3.5 Projekt bereit.
Das durchgehend verwendete Beispielgerät ist die WAGO CC100 (751-9301). Jede andere WAGO Steuerung, die CODESYS 3.5 und die WagoSysBACnet-Bibliothek unterstützt, folgt demselben Prozess — lediglich der Schritt zur Geräteauswahl beim Anlegen des CODESYS Projekts unterscheidet sich.
Das durchgearbeitete Beispiel verwendet einen Mehrkanal-Dimmer (Out32), der über 4 Analog Output Objekte (eines pro Kanal) und 1 Binary Output Objekt (Power-Status) verfügt. Damit sind sowohl analoge als auch binäre Objekttypen in einem einzigen Setup abgedeckt. Derselbe Prozess gilt für alle anderen MESHLE Gerätetypen.
Unterstützte Gerätetypen
| Gerät | BACnet™-Objekte | Datentypen | Hinweise |
|---|---|---|---|
| Mehrkanal-Dimmer (Out32) | Analog Output (×4), Binary Output (×1) | REAL, BOOL | Beispiel in dieser Anleitung |
| Einkanal-Dimmer | Analog Output (×1), Binary Output (×1) | REAL, BOOL | Teilmenge des Mehrkanal-Dimmers |
| HCL (Human Centric Lighting) | Analog Output (×2+) | REAL | Farbtemperatur + Intensität |
| HSV | Analog Output (×3) | REAL | Hue-, Saturation-, Value-Kanäle |
| Präsenzmelder | Binary Input (×1) | BOOL | Nur lesend |
| Helligkeitssensor | Analog Input (×1) | REAL | Nur lesend, Lux-Wert |
Für Sensorgeräte (Präsenz, Helligkeit) werden nur Read Maps benötigt. Für Aktorgeräte (Dimmer, HCL, HSV) sind sowohl Read Maps als auch Write Maps erforderlich.
Voraussetzungen
Stellen Sie die folgende Hardware und Software bereit, bevor Sie beginnen.
Hardware
- WAGO CC100 (751-9301) mit Firmware 6.4.6.x oder neuer (das hier verwendete Beispielgerät — jede kompatible WAGO Steuerung, die CODESYS 3.5 und WagoSysBACnet unterstützt, funktioniert)
- MESHLE Gateway und Geräte im selben Netzwerk
- PC im selben Netzwerk wie die WAGO Steuerung und die MESHLE Geräte
Software
- CODESYS 3.5 SP22 oder neuer
- WAGO Devices and Libraries Paket 2.0.9.2 oder neuer (installiert über den CODESYS Installer)
- WAGO BACnet™ Configurator 3.4.0.0 oder neuer
- WAGOupload 1.19.1.0 oder neuer (für Firmware-Updates, falls erforderlich)
Teil 1: CODESYS Projekt einrichten
Das CODESYS Projekt muss existieren und korrekt konfiguriert sein, bevor Sie den WAGO BACnet™ Configurator starten. Der Configurator wird aus CODESYS heraus geöffnet und benötigt das Gerät, den BACnet™ Manager und die Bibliothek bereits vorhanden, um darauf zu verweisen.
1.1 Neues Projekt anlegen
- Öffnen Sie CODESYS und gehen Sie zu File > New Project
- Wählen Sie Standard Project und klicken Sie OK
- Suchen Sie bei der Geräteauswahl nach CC100 und wählen Sie WAGO CC100 (751-9301)
- Stellen Sie die Programmiersprache auf Structured Text (ST) und klicken Sie OK
- Speichern Sie das Projekt mit Ctrl+S und wählen Sie einen Speicherort auf der Festplatte

1.2 Gerät umbenennen
Die WagoSysBACnet-Bibliothek setzt voraus, dass die Steuerung im Gerätebaum CC100 heißt. Ein neues Projekt benennt sie standardmäßig möglicherweise "Device".
- Klicken Sie im Gerätebaum links mit der rechten Maustaste auf den obersten Geräteknoten
- Wählen Sie Properties
- Ändern Sie den Namen in CC100 und klicken Sie OK

1.3 BACnet™ Manager hinzufügen
- Klicken Sie mit der rechten Maustaste auf Application im Gerätebaum
- Wählen Sie Add Object > WAGO BACnet™ Manager
- Prüfen Sie, dass BACnet™ Manager unter Application im Gerätebaum erscheint

1.4 WagoSysBACnet-Bibliothek hinzufügen
- Doppelklicken Sie auf Library Manager im Gerätebaum
- Klicken Sie auf Add Library, dann Application
- Suchen Sie nach wagosysbac
- Wählen Sie WagoSysBACnet und klicken Sie OK
- Prüfen Sie, dass die Bibliothek in der Liste des Library Manager erscheint
1.5 Projekt speichern
Speichern Sie das Projekt mit Ctrl+S, bevor Sie den BACnet™ Configurator starten. Der Configurator liest die Projektdatei beim Start — nicht gespeicherte Änderungen sind für ihn nicht sichtbar.
Teil 2: WAGO BACnet™ Configurator einrichten
2.1 BACnet™ Configurator aus CODESYS starten
Starten Sie den BACnet™ Configurator immer aus CODESYS heraus, nicht als eigenständige Anwendung. So entsteht die korrekte Verknüpfung zwischen der .wbc-Konfigurationsdatei und Ihrem CODESYS Projekt.
- Gehen Sie in CODESYS oben zum Menü WAGO
- Wählen Sie Solution Builder > Open in WAGO BACnet™ Configurator
- Prüfen Sie, dass die Titelleiste CODESYS Mode anzeigt (nicht e!COCKPIT Mode)

Hinweis: Der BACnet™ Configurator läuft in zwei Modi: CODESYS Mode und e!COCKPIT Mode. Verwenden Sie immer CODESYS Mode, wenn Sie mit einem eigenständigen CODESYS 3.5 Projekt arbeiten.
2.2 Entfernte Geräte erkennen
- Wechseln Sie zum Tab Browsing & Monitoring
- Klicken Sie in der Symbolleiste auf Device Auto Discovery
- Warten Sie, bis alle BACnet™-Geräte links im Scan pool erscheinen
- Klicken Sie mit der rechten Maustaste auf den CC100 Eintrag im Scan pool und wählen Sie Add to Database
- Klicken Sie für jedes gewünschte MESHLE Gerät mit der rechten Maustaste darauf und wählen Sie Add to Database
- Prüfen Sie, dass die CC100 und alle benötigten MESHLE Geräte im Database pool erscheinen

Hinweis: Die CC100 muss im Database pool sein, bevor Sie in Schritt 2.3 lokale Objekte auf ihr konfigurieren können. Auch die MESHLE Geräte müssen im Database pool sein, bevor Sie sie in Schritt 2.4 im Client Mapping Editor referenzieren können.
2.3 Lokale BACnet™-Objekte auf der CC100 anlegen
Die CC100 benötigt lokale BACnet™-Objekte, die jeden entfernten MESHLE Kanal abbilden. Auf diese liest und schreibt CODESYS. Die Client Mappings (Schritt 2.4) halten diese lokalen Objekte dann mit den tatsächlichen MESHLE Geräten synchron.
- Klicken Sie mit der rechten Maustaste auf CC100 [1000] im Database pool und wählen Sie Configure
- Klicken Sie im Tab Configure mit der rechten Maustaste auf Values im linken Baum und wählen Sie Add Object(s)
- Legen Sie Analog Value Objekte für jeden Kanal an (eines pro MESHLE Kanal): Base name Dev2005_Ch beginnend bei Instanz 0; Type Analog Value; e!Runtime Export Small
- Legen Sie Binary Value Objekte für den Power-Status an: Base name Dev2005_Power beginnend bei Instanz 0; Type Binary Value; e!Runtime Export Small
- Wiederholen Sie dies für jedes MESHLE Gerät im Netzwerk, abhängig von den Gerätetypen und verfügbaren BACnet™-Objekten

Hinweis: Die hier vergebenen Instanznummern werden im CODESYS Programm verwendet, um zu identifizieren, auf welches Objekt jeder Funktionsbaustein abgebildet wird. Behalten Sie sie im Blick, während Sie Objekte über mehrere Geräte hinweg anlegen.
2.4 Client Mappings konfigurieren
Client Mappings sind der Kern der Integration. Sie verknüpfen jedes lokale CC100 BACnet™-Objekt mit dem entsprechenden Objekt auf dem entfernten MESHLE Gerät, in beide Richtungen. Das ermöglicht den Fluss von Lese- und Schreibvorgängen zwischen CODESYS und den physischen Geräten.
Wichtig: Der Client Mapping Editor wird von der Seite des lokalen CC100 Objekts aus geöffnet, nicht von der Seite des entfernten Geräts. Wenn Sie vom entfernten MESHLE Gerät im Database pool aus navigieren, bleiben die Schaltflächen Add Read Map und Add Write Map ausgegraut.
Client Mapping Editor öffnen
- Klicken Sie im Tab Configure auf das lokale Objekt (z. B. AV0: Dev2005_Ch1) im linken Baum
- Klicken Sie mit der rechten Maustaste auf Present_Value in der Eigenschaftsliste rechts und wählen Sie Client Mappings...
- Der Client Mapping Editor öffnet sich

Read und Write Maps hinzufügen
- Erweitern Sie im Client Mapping Editor das entfernte MESHLE Gerät im linken Baum
- Erweitern Sie Outputs
- Wählen Sie das entsprechende entfernte Objekt für Ch1 vom Gerät Meshle-2005
- Wählen Sie Present_Value unter diesem Objekt
- Klicken Sie auf Add Read Map
- Klicken Sie auf Add Write Map (für die Steuerung erforderlich, nicht nur für die Überwachung)
- Setzen Sie Use Subscription auf If available
- Setzen Sie Poll Cycle auf 3 seconds
- Schließen Sie den Editor und wiederholen Sie dies für alle Kanal- und Power-Objekte über alle MESHLE Geräte hinweg

Referenz für die Abbildung entfernter Objekte (Meshle-Dev-2002)
| Lokales Objekt | Lokale Instanz | Entferntes Objekt | Entfernte Instanz |
|---|---|---|---|
| Dev2005_Ch1 | AV 0 | Meshle-2002-Out32-Ch1 | AO 173110 |
| Dev2005_Ch2 | AV 1 | Meshle-2002-Out32-Ch2 | AO 173111 |
| Dev2005_Ch3 | AV 2 | Meshle-2002-Out32-Ch3 | AO 173112 |
| Dev2005_Ch4 | AV 3 | Meshle-2002-Out32-Ch4 | AO 173113 |
| Dev2005_Power | BV 0 | Meshle-2002-Power | BO 173105 |
Wiederholen Sie dasselbe Muster für Dev2003, Dev2004, Dev2005 mit den jeweiligen entfernten Instanznummern. Die Instanznummern der lokalen Objekte laufen über die Geräte hinweg fortlaufend weiter (Dev2003 Ch1 = AV4, Ch2 = AV5, usw.).
2.5 e!Runtime Export für alle Objekte setzen
Jedes lokale Objekt, das in CODESYS zugänglich sein soll, muss seinen Runtime Export auf Small gesetzt haben. Das macht das Objekt für die Funktionsbausteine der WagoSysBACnet-Bibliothek sichtbar.
- Klicken Sie im Tab Configure auf das Objekt
- Setzen Sie Runtime Export oben rechts im Eigenschaftenbereich auf Small
- Wiederholen Sie dies für alle Kanal- und Power-Objekte

2.6 Mit CODESYS synchronisieren und herunterladen
- Klicken Sie im Tab Configure oben auf den Tab IEC Variables
- Klicken Sie auf den Link Application neben "Application Name" und klicken Sie OK
- Klicken Sie auf Store and Download, um die BACnet™-Konfiguration auf die CC100 zu übertragen
- Falls ein Dialog zur Geräteversionsabweichung erscheint, klicken Sie Yes, um die Projektkonfiguration zu aktualisieren
- Speichern Sie das Projekt unmittelbar nach dem Klick auf Yes mit Ctrl+S
- Schließen Sie den BACnet™ Configurator und speichern Sie, wenn Sie dazu aufgefordert werden

Wichtig: Nachdem Sie im Dialog zur Versionsabweichung auf Yes geklickt haben, müssen Sie das Projekt sofort mit Ctrl+S speichern. Andernfalls erscheint der Dialog jedes Mal erneut, wenn Sie das Projekt öffnen oder Store and Download ausführen.
Teil 3: Zurück in CODESYS — verknüpfen, programmieren und bereitstellen
Nachdem die BACnet™-Konfiguration auf die CC100 heruntergeladen wurde, kehren Sie zu CODESYS zurück, um die .wbc-Datei zu verknüpfen, das SPS-Programm zu schreiben und online zu gehen.
3.1 Die .wbc-Datei verknüpfen
- Doppelklicken Sie auf BACnet™ Manager im Gerätebaum
- Klicken Sie auf die Schaltfläche [...] neben "WAGO BACnet™ Configurator project file"
- Navigieren Sie zu Ihrer .wbc-Datei und wählen Sie sie aus
- Prüfen Sie, dass der BACnet™ Manager alle Ihre Objekte unter "Project information for CC100" auflistet

3.2 Das SPS-Programm schreiben
Öffnen Sie PLC_PRG. Der Editor hat zwei Bereiche: den Deklarationsbereich oben und den Rumpf unten.
PROGRAM PLC_PRG
VAR
fbCh1 : WagoSysBACnet.FbAnalogValue_small(0);
fbCh2 : WagoSysBACnet.FbAnalogValue_small(1);
fbCh3 : WagoSysBACnet.FbAnalogValue_small(2);
fbCh4 : WagoSysBACnet.FbAnalogValue_small(3);
fbPower : WagoSysBACnet.FbBinaryValue_small(0);
rCh1_Value : REAL;
rCh2_Value : REAL;
rCh3_Value : REAL;
rCh4_Value : REAL;
bPower : BOOL;
END_VARfbCh1();
rCh1_Value := fbCh1.rPresentValue;
fbCh2();
rCh2_Value := fbCh2.rPresentValue;
fbCh3();
rCh3_Value := fbCh3.rPresentValue;
fbCh4();
rCh4_Value := fbCh4.rPresentValue;
fbPower();
bPower := fbPower.xPresentValue;Der DINT-Parameter in jeder FB-Deklaration ist die in Schritt 2.3 vergebene BACnet™-Objektinstanznummer. FbAnalogValue_small wird für REAL-Kanäle verwendet; FbBinaryValue_small wird für den BOOL Power-Status verwendet.
Hinweis: Fügen Sie für Dev2003, Dev2004 zusätzliche FB-Instanzen hinzu, deren Instanznummern dort fortlaufen, wo Dev2005 endete. Dev2003 Ch1 = FbAnalogValue_small(4), Ch2 = FbAnalogValue_small(5), Ch3 = FbAnalogValue_small(6), Ch4 = FbAnalogValue_small(7), Power = FbBinaryValue_small(1), und so weiter.
3.3 Verbinden und herunterladen
- Prüfen Sie, dass der physische RUN/STOP Schalter der CC100 in der Position RUN steht
- Gehen Sie zu Online > Login
- Wenn der Dialog Select Device erscheint, klicken Sie auf Scan Network und wählen Sie die CC100
- Klicken Sie bei etwaigen Warnungen zur Geräteversion auf OK (klicken Sie Yes zum Aktualisieren)
- Wenn Sie aufgefordert werden, die Anwendung zu erstellen, aktivieren Sie Update boot application und klicken Sie Yes
- Die Anwendung wird heruntergeladen und gestartet
- Live-Werte von den MESHLE Geräten erscheinen im Variablen-Watch-Bereich

Teil 4: Werte lesen und schreiben
Werte lesen
Sobald Sie online sind, zeigt der Watch-Bereich unten in PLC_PRG die Live-Werte. Die Variablen rCh1_Value bis rCh4_Value werden über die Read Maps automatisch von den MESHLE Gerätekanälen aktualisiert. bPower spiegelt den aktuellen Power-Status wider.
Werte schreiben
Um einen Wert von CODESYS auf ein MESHLE Gerät zu schreiben, schreiben Sie direkt auf die Eigenschaft rPresentValue des Funktionsbausteins, nicht auf die zwischengeschaltete Lesevariable. Ein Schreiben auf rCh1_Value hat keine Auswirkung auf das Gerät, da diese Variable in jedem Scan-Zyklus durch das Lesen aus fbCh1.rPresentValue überschrieben wird.
So schreiben Sie im Debug-Fenster
- Erweitern Sie fbCh1 im Variablen-Watch-Bereich, indem Sie auf den Pfeil daneben klicken
- Suchen Sie rPresentValue (für Analogkanäle) oder xPresentValue (für den Power-Binärwert)
- Klicken Sie in die Spalte Prepared Value daneben und geben Sie den gewünschten Wert ein
- Klicken Sie in der Debug-Symbolleiste auf Write Values (oder drücken Sie Ctrl+F7)
- Der Wert wird über die Write Map an das physische MESHLE Gerät übertragen

Häufiger Fehler: Ein Schreiben auf rCh1_Value statt auf fbCh1.rPresentValue scheint kurzzeitig zu funktionieren, der Wert wird aber im nächsten Scan-Zyklus sofort zurückgesetzt. Erweitern Sie immer die FB-Instanz und schreiben Sie direkt auf rPresentValue.
Häufig gestellte Fragen
Warum meldet CODESYS beim Login eine Geräteversionsabweichung?
CODESYS meldet möglicherweise, dass das Gerät im Projekt nicht zu dem Gerät passt, mit dem Sie sich verbinden. Das passiert, wenn die CC100 Firmware-Version neuer ist als das WAGO Devices and Libraries Paket, das beim Anlegen des Projekts verwendet wurde. Klicken Sie bei der Aufforderung auf Yes, um die Gerätekonfiguration zu aktualisieren, und speichern Sie das Projekt anschließend sofort mit Ctrl+S. Wenn Sie nach dem Klick auf Yes nicht speichern, erscheint der Dialog in jeder Sitzung erneut.
Warum sind die Schaltflächen Add Read Map / Add Write Map ausgegraut?
Das passiert, wenn Sie den Client Mapping Editor öffnen, indem Sie von der Seite des entfernten MESHLE Geräts aus navigieren statt vom lokalen CC100 Objekt. Der korrekte Weg ist, im Tab Configure auf das lokale CC100 Objekt zu klicken, mit der rechten Maustaste auf Present_Value dieses Objekts zu klicken und Client Mappings zu wählen. Dann sind die Schaltflächen aktiv.
Warum werden in der Database-Ansicht des BACnet™ Configurator 0-Werte angezeigt?
Der Database pool in Browsing & Monitoring fragt lokale Objekte nicht immer in Echtzeit ab. Wenn der Scan pool korrekte Werte zeigt und CODESYS korrekte Werte empfängt, sind die 0-Werte in der Database-Ansicht ein Anzeigeproblem, kein Konfigurationsproblem. Prüfen Sie die Funktion, indem Sie aus CODESYS schreiben und die Änderung am physischen Gerät bestätigen.
Warum läuft die Anwendung nicht, obwohl CODESYS sie als verbunden anzeigt?
Die CC100 hat einen physischen RUN/STOP Schalter an der Vorderseite des Geräts. Die Anwendung wird nicht ausgeführt, solange dieser Schalter in der Position STOP steht — auch wenn CODESYS sie als verbunden und heruntergeladen anzeigt.
Was ist der Unterschied zwischen Store and Download und einem CODESYS-Download?
Das sind zwei getrennte Vorgänge. Store and Download im BACnet™ Configurator überträgt die BACnet™-Konfiguration (Objekte und Client Mappings) auf die CC100. Online > Login in CODESYS überträgt das SPS-Programm. Beide sind nach jeder Änderung erforderlich. Ein CODESYS-Download ersetzt nicht das Store and Download des BACnet™ Configurator.
Über BACnet™ hinaus — jedes Gerät, jedes Protokoll
Das Read Map / Write Map Muster, das Sie hier für einen Mehrkanal-Dimmer aufgebaut haben, gilt für jedes Gerät in Ihrem MESHLE Bluetooth Mesh Netzwerk. Sensoren stellen Binary Input oder Analog Input Objekte bereit, die Sie nur lesen; Aktoren wie Einkanal-Dimmer, HCL und HSV stellen Analog Output und Binary Output Objekte bereit, die Sie lesen und schreiben — derselbe Client-Mapping-Workflow, nur mit anderer Objektanzahl. Sobald das MESHLE Gateway im Netzwerk ist, ist Ihr gesamtes drahtlos verbundenes Mesh von jedem kabelgebundenen Steuerungssystem aus als standardmäßige BACnet™/IP-Feldgeräte adressierbar.
BACnet™ ist einer von vier offenen Wegen aus dem Gateway. Wenn Ihr System nicht auf BACnet™ basiert, sind dieselben MESHLE Geräte über REST API, MQTT und Modbus TCP/IP erreichbar. Sie planen eine GLT- oder SPS-Integration rund um MESHLE Beleuchtung? Sprechen Sie mit uns über Ihr Projekt — wir begleiten Integratoren und OEMs durch den gesamten Design-in.
Weiterlesen
- MESHLE Gateway: ein Mesh, offene APIs (REST, MQTT, Modbus, BACnet™)
- Wie MESHLE LED-Treiber in ein Smart-Lighting-Ökosystem passen
- Warum MESHLE Smart Lighting offline-first funktioniert
- Was ist Bluetooth Mesh? Eine verständliche Einführung
- MESHLE für eine GLT- oder SPS-Integration kontaktieren
BACnet™ ist eine Marke der ASHRAE.