Voraussetzungen
Hardware
- Wago SPS: z. B. Wago 750-880 (Ethernet-Koppler mit Modbus TCP)
- Netzwerk: SPS und Home Assistant im selben LAN
- Home Assistant: aktuell installiert (Raspberry Pi, Proxmox oder NAS)
Kenntnisse
- Grundlegende Modbus-Kenntnisse (Register, Coils)
- YAML-Konfiguration in Home Assistant
- Zugang zur Wago-Programmierung (CODESYS / Wago e!COCKPIT)
Modbus TCP – kurz erklärt
Modbus TCP ist ein industrielles Kommunikationsprotokoll über Ethernet. Es kennt vier Objekttypen. Die Wago 750-880 arbeitet als Modbus TCP Slave, Home Assistant als Master.
| Typ | Beschreibung | Zugriff |
|---|---|---|
| Coils | 1-Bit Ausgänge (TRUE/FALSE) | Lesen + Schreiben |
| Discrete Inputs | 1-Bit Eingänge | Nur Lesen |
| Holding Registers | 16-Bit Wertregister | Lesen + Schreiben |
| Input Registers | 16-Bit Messwerte | Nur Lesen |
Wago SPS vorbereiten
Modbus TCP aktivieren
In Wago e!COCKPIT bzw. im Koppler-Webinterface muss Modbus TCP aktiviert sein. Die Standardeinstellungen:
Speicheradressen festlegen
In der Wago-SPS werden Variablen über Speicheradressen angesprochen:
-
%MX0.xBit-Merker (werden als Coils über Modbus lesbar/schreibbar) -
%MD1, %MD2 ...Double-Word Merker (32-Bit, als Holding Registers verfügbar)
Wichtig: Float32 und Word-Swap
Wago-Floatwerte (REAL) werden als Float32 über zwei aufeinanderfolgende
Holding Register übertragen – in Wago-eigener Bytereihenfolge: Word-Swap (höheres Word zuerst).
Adressberechnung
%MDn entspricht der Modbus-Registeradresse 12288 + n×2.
Beispiel für 15 Raffstore-Positionen:
%MD1 → Adresse 12290 (Position Raffstore 1, REAL 0.0–100.0 %) %MD2 → Adresse 12292 (Position Raffstore 2) %MD3 → Adresse 12294 (Position Raffstore 3) ... %MD15 → Adresse 12318 (Position Raffstore 15)
Für die genaue Coil-Adressberechnung steht unser kostenloser Online-Rechner bereit.
Home Assistant konfigurieren
Modbus-Verbindung in configuration.yaml
In configuration.yaml (oder einer eingebundenen Paketdatei) wird die Verbindung definiert:
# configuration.yaml
modbus:
- name: wago_sps
type: tcp
host: 192.168.0.111
port: 502
timeout: 5
delay: 0 Positions-Sensoren (Float32, Holding Registers)
Rückmeldung der Raffstore-Position aus der SPS – der Parameter
swap: word ist bei Wago-Steuerungen zwingend erforderlich:
sensors:
- name: "Position OG Zimmer Süd"
address: 12290
slave: 1
input_type: holding
data_type: float32
swap: word # Pflicht bei Wago!
scan_interval: 5
unit_of_measurement: "%"
- name: "Position OG Bad"
address: 12298
slave: 1
input_type: holding
data_type: float32
swap: word
scan_interval: 5
unit_of_measurement: "%" Hinweis zu device_class
Bei Prozentwerten kein device_class: distance verwenden – das erzeugt Warnmeldungen in den HA-Logs. Einfach weglassen.
Steuer-Switches (Coils, Hoch/Runter)
Fahrbefehle an die SPS werden als Modbus-Coils definiert:
switches:
- name: "Raffstore OG Süd Hoch"
address: 12289
slave: 1
write_type: coil
- name: "Raffstore OG Süd Runter"
address: 12290
slave: 1
write_type: coil Besonderheit: überlappende Adressen
Coils und Holding Registers können bei Wago dieselben Zahlenadressen tragen – das ist kein Fehler. Beide liegen in eigenen Adressräumen und überlappen sich nicht.
Scripts für die Motorsteuerung
Ein einfacher switch.turn_on / turn_off reicht nicht aus –
die Motoren müssen nach der Fahrzeit wieder abgeschaltet werden.
Das erledigen Scripts mit delay:
Komplett Runter + Lamellen verstellen
script:
raffstore_og_sued_zu:
alias: "OG Süd – Komplett Runter"
sequence:
- service: switch.turn_on
target:
entity_id: switch.raffstore_og_sued_runter
- delay:
milliseconds: 1200 # Anlauf-Impuls
- delay:
seconds: 30 # Volle Fahrzeit
- service: switch.turn_off
target:
entity_id: switch.raffstore_og_sued_runter
raffstore_og_sued_lamellen:
alias: "OG Süd – Lamellen verstellen"
sequence:
- service: switch.turn_on
target:
entity_id: switch.raffstore_og_sued_runter
- delay:
milliseconds: 150 # Kurzer Impuls für Lamellen
- service: switch.turn_off
target:
entity_id: switch.raffstore_og_sued_runter Stop-Funktion mit input_boolean
Um einen intelligenten Stopp-Taster zu realisieren, wird der Fahrstatus mit einem input_boolean verfolgt.
Das Script prüft dann: Fährt der Raffstore gerade → kurzer Stopp-Impuls (0,1 s).
Steht er → normale Fahrt starten.
input_boolean:
raffstore_og_sued_faehrt:
name: "OG Süd – fährt gerade"
initial: false Packages für Übersichtlichkeit
Bei 15 oder mehr Raffstores wird die Konfiguration schnell unübersichtlich. Home Assistant unterstützt Packages – damit kann jeder Raffstore in eine eigene YAML-Datei ausgelagert werden.
Verzeichnisstruktur
packages/ ├── raffstore_gesamt.yaml # Modbus-Verbindung + alle Sensoren ├── raffstore_og_sued.yaml # OG Zimmer Süd: input_boolean + scripts ├── raffstore_og_bad.yaml # OG Bad ├── raffstore_ug_wohnzimmer.yaml # UG Wohnzimmer └── ...
Packages in configuration.yaml einbinden
homeassistant:
packages: !include_dir_named packages/ Datenfluss im Überblick
Steuerung (Befehl)
Rückmeldung (Position)
Häufige Probleme und Lösungen
Falscher Positionswert (z. B. −0.0 oder riesige Zahl)
Ursache: swap: word fehlt oder ist falsch gesetzt
Lösung: In der Sensor-Definition swap: word ergänzen
Sensor zeigt immer 0
Ursache: Falsche Slave-ID oder Register-Adresse
Lösung: Mit modpoll oder einem Online-Tester Adresse / Slave-ID direkt an der SPS verifizieren
Warnmeldungen im HA-Log (distance + %)
Ursache: device_class: distance ist mit % inkompatibel
Lösung: device_class weglassen oder explizit auf None setzen
Coil bleibt dauerhaft aktiv – Motor läuft endlos
Ursache: switch.turn_off im Script wird nicht ausgeführt (Fehler oder HA-Neustart)
Lösung: Watchdog in der SPS: Ausgang nach max. 60 s automatisch abschalten
Erweiterungen: Automationen
Sobald die Grundintegration funktioniert, lassen sich komfortabel Automationen ergänzen:
Sonnenschutz
Raffstore automatisch schließen, wenn Sonne über X° und Außentemperatur > 25 °C.
Windschutz
Alle Raffstores öffnen bei Windgeschwindigkeit > 50 km/h – Sensor z. B. via Wetterstation.
Zeitprogramm
Morgens automatisch öffnen, abends schließen – angepasst an Sonnenauf- und -untergang.
Präsenzsteuerung
Beschattung nur aktivieren, wenn niemand auf dem Balkon oder der Terrasse ist.
Fazit
Die Kombination Wago SPS + Home Assistant via Modbus TCP ist eine leistungsstarke und zuverlässige Lösung für die Gebäudeautomation. Die Wago-Anlage läuft als industrielle Steuerung weiterhin unabhängig, Home Assistant ergänzt eine moderne Benutzeroberfläche, Sprachsteuerung und Automationslogik.
Die wichtigsten Punkte zum Merken:
- swap: word bei allen Float32-Werten von Wago-Steuerungen
- Coils und Holding Registers haben eigene Adressräume – keine Verwechslung
- Scripts mit delay für die Motorsteuerung statt einfacher Schalter
- Packages für übersichtliche Konfiguration bei vielen Aktoren
- Watchdog in der SPS als Sicherheitsnetz gegen hängende Ausgänge
Dieser Beitrag entstand auf Basis einer realen Raffstore-Installation mit Wago 750-880 und Home Assistant.