MQTT auf Siemens S7-319F-3 PN/DP: geht das direkt?

Nein, direkt geht es nicht: Die S7-319F-3 PN/DP ist eine SIMATIC S7-300 F-CPU und hat keinen eingebauten MQTT-Client. Du brauchst ein Edge-Gerät, das die SPS-Daten per S7-Kommunikation ausliest und als MQTT weiterschickt.
Die S7-300-Reihe (315F/317F/319F) kann kein MQTT aus der CPU heraus. Es gibt keinen Firmware-Baustein dafür — anders als bei S7-1200/1500, die MQTT über die Bibliothek LMQTT_Client können. Deine 319F-3 PN/DP bleibt also bei PROFINET und PROFIBUS DP. MQTT entsteht erst durch ein zwischengeschaltetes Gateway.

Praktikabel ist ein kleines Edge-Gerät (z. B. Raspberry Pi, Industrie-PC oder Siemens IOT2040/IOT2050) im selben Netz wie die SPS. Das Gerät liest die Datenbausteine über S7-Kommunikation (ISO-on-TCP / RFC1006, Port 102) aus und veröffentlicht die Werte an deinen MQTT-Broker. Auf der SPS-Seite musst du dafür nichts programmieren, nur den Zugriff freigeben.

Damit ein externes Gerät ohne eigenen SPS-Baustein lesen darf, aktivierst du in den CPU-Schutzeinstellungen (STEP 7 / TIA-Hardwarekonfig) den Punkt „Zugriff über PUT/GET-Kommunikation erlauben". Ohne diesen Haken weist die 319F Lesezugriffe ab. Notiere dir die DB-Nummern und Offsets der Werte, die du übertragen willst.

Auf Python-Seite liest du mit python-snap7 (Client.db_read) einzelne DB-Bereiche und pushst sie mit paho-mqtt an den Broker. Grafisch geht es mit Node-RED plus node-red-contrib-s7: S7-In-Node an die CPU koppeln, MQTT-Out-Node auf dein Topic legen. Beide Wege laufen stabil auf einem Raspberry Pi und lassen sich per systemd-Dienst dauerhaft starten.

Willst du keine eigene Skript-Pflege, gibt es fertige Siemens-Optionen: Das SIMATIC IOT2040/IOT2050-Gateway bringt eine Linux-Umgebung für Node-RED mit, und die SIMATIC-CloudConnect-7-Module (CC712/CC716) lesen S7-Daten und geben sie direkt als MQTT aus. Das kostet mehr, spart aber Eigenentwicklung und ist industriell abgesegnet.
Die 319F ist eine fehlersichere Steuerung. MQTT eignet sich zum Auslesen und Überwachen von Prozesswerten — sicherheitsgerichtete F-Daten oder Stellbefehle solltest du nicht über MQTT führen. Rückschreiben in die SPS ist technisch möglich, gehört aber in ein sauberes Konzept mit Rückquittierung und darf die Safety-Funktion nie umgehen.