WAGO SPS Digitalausgänge über ModBusTCP ansteuern

Manchmal ist es nötig, die Signalausgänge einer SPS per ModBus zu steuern. Da Modbus ein recht altes und firmenübergreifendes Protokoll ist, bietet sich diese Verfahren an. Leider musste ich aber feststellen, dass die Dokumentation über dieses Thema im WWW nicht sonderlich gut ist.
Es gibt keine Scripte die man einfach nehmen und anpassen kann. Also war etwas Grundlagenforschung nötig. In meinem Fall wird ein WAGO Ethernet Controller 750-880
mit drei 16-Kanal-Digitalausgängen benutzt. Dem WAGO Ethernet Controller 750-880
wird eine IP-Adresse vergeben und das ModBusTCP aktiviert.

In FHEM gibt es zwar ein paar Module für Modbus, die verständliche Dokumentation in der deutschen Sprache sieht aber recht ernüchternd aus, wenn sie überhaupt vorhanden ist. Deshalb hier eine kurze Beschreibung, wie ich vorgegangen bin.

Auf dem FHEM-Rechner sind noch ein paar Python-Installationen nötig:

apt install python3-pip
pip install pymodbus
pip install pyModbusTCP

Ist die Installation erfolgreich durchgeführt, kann auch gleich das Script erstellt werden. Bei meinem Script soll ein Ausgang des SPS-Moduls für zwei Sekunden eingeschaltet werden.
Hier nun das Script:

#!/usr/bin/python3
# 04.01.2023
# Juergen Thoens
# WAGO-SPS Ausgaenge per Modbus-TCP setzen

import pymodbus<br /> from pyModbusTCP.client import ModbusClient
from time import sleep

SERVER_IP = \'adresse_der_SPS\'
SERVER_PORT = 502
DEVICE_ID = 1

# Bereich von 512 bis 559
ADDRESS_START&nbsp; = 512

client = ModbusClient(host=SERVER_IP, port=SERVER_PORT)
rq = client.write_single_coil(ADDRESS_START, 1)
sleep (2)
rq = client.write_single_coil(ADDRESS_START, 0)

print (rq)
client.close()

Jetzt muss nur noch mit chmod 755 das Recht zum Ausführen des Scripts gesetzt werden.
Für alle, die nicht gerne tippseln hänge ich hier mein Script an:

512_puls.py