# MQTT auf Wago750-881 bzw. Wago 750-841 implementieren



## Andy082 (22 Dezember 2018)

Abend zusammen,


da Weihnachten nicht mehr fern ist und ich wieder mehr Zeit habe, meinem "Hobby" nachzugehen, versuche ich gerade einem meiner beiden Wago-Controller die Implementierung von MQTT "einzuimpfen".

Warum MQTT werden nun ggf. einige fragen: weil damit der Weg zur Amazon Cloud und damit zur freundlichen Alexa nicht mehr weit ist und ich mir den Umweg über irgendwelche IO-broker etc. sparen würde. Auch wenn's hier bereits was mit einer RaspberryPi-Implementierung gibt, will ich's noch immer nicht glauben, dass das mit einer Ethernet-fähigen SPS nicht auch möglich ist.
Immerhin kann ich damit auch Mails empfangen, senden und online meine Wetterdaten abgreifen und in der Visu am Handy darstellen, bzw. die Beschattung dementsprechend vorbereiten.

Der Kontakt mit meiner Wago-Vertretung wurde bereits hergestellt. Hier hatte man mit kurz und knapp erklärt, dass die 750-880 und ähnliche Typen MQTT nicht unterstützen und dies nie tun werden.
Dem entgegen steht, dass ich auf GitHub über einen Beitrag zum Thema MQTT und der Implementierung auf einer 750-881 und einer 750-841 gestolpert bin. 
https://github.com/SebastianRau/Codesys2-Mqtt-lib  Den Kontakt zum Ersteller konnte ich bisher nicht herstellen.

Auch eine weitere MQTT-Implementierung hatte ich auf einem anderen Portal entdeckt. Diese ist wohl angelehnt an jene auf github, hat aber dafür das Problem des "Subcribes" gelöst.

Ich habe nun versucht auf meiner etwas betagten 750-841 das Ganze test-weise zu implementieren. Leider ohne Erfolg; bisher schaffe ich es noch nicht einmal eine Verbindung auf den mqtt-server meiner Wahl herzustellen. Firewall wurde bereits deaktiviert und sogar die Firmware des Controller auf die Version 21 upgedated. Vielleicht hat jemand ebenfalls Interesse daran das Ganze zu testen und kann mich möglicherweise auf meinen Fehler aufmerksam machen.

Im Anhang sind daher meine Projekt-Files und die einzelnen ergänzenden Libs.

Wenn's funktioniert:
Die msg, also der Payload würde dann per mqtt.fx unter "Codesys" abonniert und angezeigt werden. Der Server und der Port sind im Programm ident zu jenem in den Projektfiles anzugeben.
Hierzu gibt es auf youtube ein entsprechendes Video, wobei hier mit Codesys3 und einem RaspberryPi gearbeitet wird.  https://www.youtube.com/watch?v=ifGC51w5KBI


lg,
Andreas


----------



## GLT (22 Dezember 2018)

Die Aussage von Wago bezieht sich auf die offizielle Unterstützung für die 8xx-Baureihe.
Es gibt auch Lösungen HTML5 auf diese Controller zu implementieren - wird aber ebenfalls nicht offiziell supported.

Der Vergleich mit V3 auf RPi dürfte wohl etwas hinken - hier ist auch ein entsprechendes OS mit am Start (wie auch bei den Wago PFCs)


----------



## Blockmove (22 Dezember 2018)

Unterstützt die Lib Verschlüsselung?
Soweit ich weiß, benötigtst du zu Amazon Verschlüsselung und Zertifikate.


----------



## Andy082 (22 Dezember 2018)

@GLT
Das Youtube-Video für den RaspberryPi war nur auf die Verwendung von mqtt.fx bezogen. Dass man's nicht als Vergleich heranziehen kann, dachte mich mir bereits.
Mit der PFC200 wär's vergleichbar da ja beide auf Linux arbeiten und damit die Implementierung von MQTT bereits mitbringen.


@Blockmove
Das mit der Verschlüsselung hatte ich so noch gar nicht bedacht. Für mich wäre der erste Schritt mal in Richtung mqtt-dashboard gegangen. Was danach kommt, oder woran man dann ggf. scheitert wird sich zeigen.  
Ich hatte mir hier einige Implementierungen von mqtt und der Verbindung zur Amazon Alexa anhand eines Arduino µC durchgesehen. Teilweise werden Keys benötigt, teils nicht bzw. arbeiten diese nur mit einer IoT_Client_Id.

Diese z.B. kommt lt. Code ohne Key aus.  https://github.com/KayLerch/alexa-xmas-tree


----------



## Blockmove (23 Dezember 2018)

@Andy
Tja es ist ein Irrglaube, dass man mit MQTT in 2 Minuten seine Daten in der Cloud hat.
Das Thema erfordert schon einiges an Wissen.
Deine Anforderungen sind mir auch nicht sonderlich klar.
Zuerst schreibst du von Amazon Cloud und Alexa, dann von von MQTT-Dashboard.
Das MQTT-Dashboard basiert meines Wissens auf HiveMQ.
Das sind schon mal 2 unterschiedliche MQTT-Broker. Welchen Broker willst du nun verwenden?

Wenn du auf einem externen MQTT-Broker Messages veröffentlichen (publish) willst, dann benötigst du Authentifizierung (mal von irgenwelchen Testservern abgesehen)
Im einfachsten Fall ist dies Plaintext User/Password, kann aber auch irgendeine Verschlüsselung eventuell sogar mit Zertifikaten sein.
Also zuerst mal schauen, welche Anmeldeinfos der Broker wirklich braucht. 
Dann musst du dich mit der Payload auseinander setzen. MQTT ist ungleich MQTT. Es gibt verschiedene Dialekte.
Bei reinen Zahlenwerten noch kein Problem, z.B. bei Zeit oder Datumsangaben kann es interessant werden.
Ich würde zuerst mit mqtt.fx ein subscribe und publish probieren. Danach kannst du mit der SPS "spielen".
Ein Broker (z.B. mosquitto) auf einem Rechner ist für Tests manchmal auch recht hilfreich.

Gruß
Blockmove


----------



## Andy082 (23 Dezember 2018)

Wunderschönen guten Morgen...


Nönö, dass ich in zwei Minuten in der Cloud bin glaube ich nicht. Der Weg vom gewählten MQTT-Broker zur AWS IoT und von da zu AWS Lambda in die Cloud wird noch lang und steinig. Ich habe Software-Engineering studiert; ich weiß, dass hier gar nix "einfach und schnell" geht.  
....andernfalls gäbe es hier ja bereits Beispiele und Implementierungen wie Sand am Meer und ihr müsstet mir gedanklich wenige Stunden vor Weihnachten nicht auf die Sprünge helfen.

Das Ziel ist also AWS; der erste Schritt sollte aber mal das mqtt-dashboard sein, damit ich überhaupt von der SPS raus ins Internet komme, denn daran scheitert es ja bereits.
Ich hab zwar die komplette MQTT-Implementierung in der SPS, tatsächlich kann ich aber eben keine tcp/ip-Verbindung zum Broker herstellen. Der von hiveMQ wärde ja lt. youtube Plaintext ohne Benutzerauthentifizierung verarbeiten. Sry, wenn ich das also in meinem ersten Post nicht genauer erklärt hatte, aber mqtt-dashboard soll nur die erste Etappe sein.
Welche Anforderungen ich dann wieder in Richtung AWS benötige kommt in einem der nächsten Steps. 

Um das aktuelle Problem mal genauer zu definieren:
Der Code läuft, nur der verwendete fb "TCP_Client" der WagoLibEthernet_01 lässt mich schon mal gar nicht raus. Ich habe bereits versucht den Baustein direkt zu verwenden, also ohne die gesamte mqtt-lib Implementierung, aber auch hier lÃ¤sst sich keine Verbindung herstellen. Mir kommt vor, der fb versucht gar nicht erst eine Verbindung herzustellen.
Egal welcher Server, egal welcher Port. Ich hatte mir auch bereits im Visual Studio einen kleinen "Test-Server" zusammengebaut und hier den Port 1234 geöffnet. (ich hatte diese Implementierung mal für einen rudimentären Chat im LAN verwendet). Aber auch hier verweigert die SPS den Verbindungsaufbau; selbst meine Firewall zeigt in den laufenden Verbindungen nichts an. Mein nächster Schritt wird wohl sein, die WagoLibMail02 zum Empfangen und Senden von Mails lt. Anwendungshinweis zu implementieren um zu testen, ob ich hier auch so kläglich am Verbindungsaufbau scheitere.

Jedenfalls erstmals danke für die ergünzenden Hinweise.


lg,
Andreas


----------



## Blockmove (23 Dezember 2018)

Zur TCP/IP-Kommunikation findest du genügend.
Es ist klar, dass das als Basis funktionieren muß.

Installier doch einfach mal mosquitto und probiers damit.
In der Standard-Konfig braucht mosquitto keinerlei Anmeldung.

Auch wenn es unsere SPSen teilweise können, nehmen wir für mqtt eigentich immer Node-Red als Gateway.


----------



## Andy082 (23 Dezember 2018)

Man glaubt es kaum, aber wenn man's richtig macht, funktioniert's auf Anhieb...

...und leider waren es teils auch Anfängerfehler.

Ich hatte z.B. vergessen nach dem FW-Update, Gateway und DNS-Adresse einzutragen, damit wusste die SPS ja schon mal gar nicht wo's denn raus geht.
Aber hauptsache die SNTP war korrekt eingestellt....   :sb10:
Auch hatte ich in meinem Büro nur einen Netzwerkanschluss, daher meine SPS an meinen Laptop angeschlossen und dieser hatte als Bridge-Connection die Verbindung zum WLAN-Router hergestellt.
Ich komme auf diese Weise zwar auf meine SPS rauf, meine SPS findet auf diese Art aber ebenfalls keinen Weg nach draußen.

Und kaum, hatte ich die SPS wieder direkt am Router und bespielt wurde auch schon eine Verbindung hergestellt und ich kann über den mqtt-broker meine payload übermitteln und mit mqtt.fx empfangen.
Eben 1:1 was man im Video sieht...

Bei meinem Upload funktioniert aber nur das Projekt Alexa_V100. Die Version V200 schmiert sofort ab (4 der 6 LED an der SPS wechseln ständig von Orange nach Grün), also bitte nicht versuchen.
Ich halte euch dann mal auf dem Laufenden, wie's weiter geht...
Auch Wunsch kann ich später auch die komplette Implementierung hier posten.


----------



## fh_ (5 Januar 2019)

@Andy082
Ich beschäftige mich auch gerade mit der Thematik der Netzwerkkommunikation mit Wago und Codesys2.
In Deinem ersten Post hier schriebst Du:


> Auch eine weitere MQTT-Implementierung hatte ich auf einem anderen  Portal entdeckt. Diese ist wohl angelehnt an jene auf github, hat aber  dafür das Problem des "Subcribes" gelöst.


Hast Du dafür einen Link?
Vielen Dank - Frank


----------



## Andy082 (7 Mai 2019)

@fh_
Sry, Frank. Ich hatte leider jetzt gerade erst (also echt erst am 07.05.2019) eine Mail erhalten, dass es zu diesem Thema einen neuen Eintrag gibt. 

Wurdest du denn betreffend des MQTT-Links schon fündig?
Ich kann dir sonst gerne nochmals meine Implementierung zusenden.

mbG,
Andreas


----------



## Goofy_ (25 Oktober 2019)

Moin @Andy082,

ich versuche gerade eine MQTT-Verbindung mit dem 750-8207 und Codesys 2.3 hinzubekommen. Dabei habe ich jedoch so meine Probleme, da ich noch relativ neu in der SPS-Welt bin. Könntest du mir bitte deine Implementierung schicken, damit ich schon mal einen Anhaltspunkt habe?

VG Moritz


----------



## Goofy_ (11 Dezember 2019)

Goofy_ schrieb:


> Moin @Andy082,
> 
> ich versuche gerade eine MQTT-Verbindung mit dem 750-8207 und Codesys 2.3 hinzubekommen. Dabei habe ich jedoch so meine Probleme, da ich noch relativ neu in der SPS-Welt bin. Könntest du mir bitte deine Implementierung schicken, damit ich schon mal einen Anhaltspunkt habe?
> 
> VG Moritz



Update:
MQTT & CoDeSys 2.3 ist, soweit ich das richtig interpretiert habe, wohl mit dem Standartwerkzeug nicht möglich. Meeh. Belehrt mich gerne eines Besseren!


----------

