Anrufen Fernwartung WhatsApp
Smart Home · Wago SPS · Rollladen & Raffstore · Modbus TCP

Home Assistant + Wago SPS: Raffstoresteuerung via Modbus TCP

Wer sein Eigenheim mit einer professionellen Wago-SPS ausgestattet hat, steht oft vor einer Herausforderung: Die Anlage läuft zuverlässig, aber eine moderne Smart-Home-Oberfläche für Rollladen bzw. Raffstore fehlt. Home Assistant bietet über Modbus TCP eine elegante Lösung – ohne bestehende Elektroinstallationen anzutasten.

Mag.a Carmen Hedenig MAS
Mai 2026 · aktualisiert 08/2026
ca. 10 Min. Lesezeit
Praxis-Anleitung
Raffstore-Fassade mit motorisierten Lamellen – Steuerung über Home Assistant und WAGO SPS in Kärnten

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
01

Wago SPS vorbereiten

Modbus TCP aktivieren

In Wago e!COCKPIT bzw. im Koppler-Webinterface muss Modbus TCP aktiviert sein. Die Standardeinstellungen:

Port: 502 Unit-ID / Slave-ID: 1

Speicheradressen festlegen

In der Wago-SPS werden Variablen über Speicheradressen angesprochen:

  • %MX0.x Bit-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.

Wandtaster & Home Assistant konfliktfrei kombinieren

Sollen klassische Wandtaster und Home Assistant dieselbe Jalousie ansteuern können, ohne sich gegenseitig zu blockieren, liegt die Lösung nicht in Home Assistant, sondern im CFC-Programm der Wago (der grafischen Funktionsbausteinsprache). Die Eingänge werden dort über ein OR-Gatter zusammengeführt, bevor sie auf den Funktionsbaustein der Jalousie treffen:

// zusätzliche Merker für den Home-Assistant-Befehl
VAR_GLOBAL
    IN_BueroSued_auf_HA AT %MX0.0: BOOL;  // Coil – "AUF"-Befehl von HA
    IN_BueroSued_zu_HA  AT %MX0.1: BOOL;  // Coil – "ZU"-Befehl von HA
END_VAR

Der Eingang des Jalousie-Funktionsbausteins ist damit die Oder-Verknüpfung aus lokalem Taster, zentralem Sammeltaster und dem Home-Assistant-Coil. Jeder der drei Wege löst dieselbe Fahrt aus – Home Assistant überschreibt die SPS-Logik nicht, sondern reiht sich gleichberechtigt ein.

02

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.

03

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

Fast-Poll während der Fahrt

Der reguläre scan_interval: 5 genügt im Ruhezustand, wirkt während einer aktiven Fahrt aber träge. Eine kleine Automation setzt den Scan-Intervall der Positions-Sensoren beim Start eines Fahr-Scripts kurzzeitig auf 1 Sekunde herunter und danach wieder zurück – so bleibt die Positionsanzeige während der Bewegung nah an Echtzeit, ohne die SPS im Ruhezustand unnötig mit Anfragen zu belasten.

04

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/

Ausblick: Von Switches zu Cover-Entities

Die hier gezeigte Switch-Lösung ist der pragmatische Einstieg. Sobald Grundintegration und Fahrzeiten sauber laufen, lohnt sich mittelfristig die Umstellung auf echte cover-Entities in Home Assistant:

  • Positionssteuerung per Slider statt nur Auf/Zu
  • Lamellenwinkel direkt einstellbar, ohne separates Impuls-Script
  • Bessere Einbindung in Automatisierungen, etwa eine sonnenstandsabhängige Beschattung

Datenfluss im Überblick

Steuerung (Befehl)

Lovelace-Button
Script
switch.turn_on → Modbus Coil
Wago SPS empfängt Befehl
Motor fährt
delay (Fahrzeit)
switch.turn_off → Motor stoppt

Rückmeldung (Position)

Wago SPS berechnet Position
0–100 % als REAL (Float32)
Schreibt in Holding Register %MD1..15
HA liest alle 5 Sekunden
swap: word dekodiert Float32
Sensor-Entität mit Positionswert

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
  • OR-Verknüpfung im CFC hält Wandtaster und Home Assistant konfliktfrei nebeneinander
  • 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.

Kostenlose Erstberatung

Fragen zu Wago & Home Assistant?

Persönliche Beratung für Ihr Unternehmen in Kärnten – unverbindlich und kostenlos.

  • Antwort innerhalb 24 Stunden
  • Kein Callcenter – direkter Ansprechpartner
  • Erstberatung kostenlos & unverbindlich

Hilfe & Support

Nicht gefunden, wonach Sie suchen?

Falls die Angebote auf dieser Seite Ihre Frage nicht beantwortet haben, kontaktieren Sie uns direkt – wir helfen persönlich weiter.

Direkt erreichbar

Rückruf-Service

Wir rufen Sie zurück – teilen Sie uns Ihre Telefonnummer und die gewünschte Anrufzeit mit.

Rückruf anfordern

Erreichbar

Mo – Do:  08:00 – 18:00

Fr:         08:00 – 15:00