Senden von SMS- und E-Mail-Nachrichten
Viele Maschinenapplikationen verwenden SMS- und E-Mail-Benachrichtungen, um Statusinformationen und Alarme zu versenden. Diese Dokumentation beschreibt einen cloud-basierten Ansatz für das Versenden von SMS- und E-Mail-Nachrichten. Bei diesem Ansatz ist der Kommunikationskanal vom eigentlichen Nachrichtentyp (SMS, E-Mail) abstrahiert und die Entscheidung, ob eine eingehende Nachricht der Maschine als SMS oder E-Mail (oder beides) zu behandeln ist, wird in der Cloud getroffen.
Historie
Klassischerweise wurde für den Versand von SMS- oder E-Mail-Nachrichten entweder eine Telefoneinwahl (über ein angeschlossenes USB- oder serielles Modem) oder eine SMTP-Verbindung mit einem Mailserver direkt von der Maschinensteuerung verwendet. Auch wenn dies sehr gut funktioniert haben mag, sind die Nachteile dieses Ansatzes schnell klar:
- Es wird spezielle Modem-Hardware und ein Vertrag mit einem Mobilfunkanbieter benötigt, wodurch zusätzliche Kosten entstehen.
- Es wird ein weiterer Kommunikationskanal zu einem Mailserver benötigt.
TwinCAT-seitig unterstützt die TwinCAT3 Function TF6350 TC3 SMS/SMTP den SPS-Programmierer beim Versand von SMS- und E-Mail-Nachrichten. Um SMS-Nachrichten zu senden, kommuniziert das Supplementprodukt mit einem GSM-Modem, das über einen seriellen RS232-Anschluss mit der Steuerung verbunden ist. Für E-Mail-Nachrichten stellt das Supplementprodukt eine SMTP-Verbindung mit einem Mailserver im Netzwerk her. Danach ist der Mailserver für die Nachrichtenzustellung verantwortlich.
Voraussetzungen
Als Voraussetzung muss folgendes vorhanden sein, bevor Sie mit dieser Dokumentation fortfahren.
- Stellen Sie sicher, dass Sie ein AWS-Konto erstellt haben und dass Sie mit den Anmeldedaten dieses Kontos auf die AWS Management-Konsole zugreifen können.
- Installieren Sie TwinCAT 3.1 Build 4022.0 oder höher, damit Ihnen das Produkt TF6701 IoT Communication zur Verfügung steht. Wir empfehlen, falls möglich, auf die neueste TwinCAT-Version zu wechseln.
- Um zu verstehen, wie TwinCAT mit AWS IoT Core verbunden wird, verweisen wir auf die TF6701-Dokumentation.
![]() | Andere TwinCAT IoT-Produkte und -Protokolle In diesem Tutorial werden wir TF6701 IoT Communication für die Verbindung mit AWS IoT Core über MQTT verwenden. Beachten Sie, dass andere Produkte aus der TwinCAT IoT-Produktreihe ebenfalls eine Verbindung mit AWS IoT Core herstellen können und dass auch für diese Produkte dieselben Grundsätze gelten. Beachten Sie außerdem, dass MQTT nur ein Transportkanal ist, der für die Verbindung mit AWS IoT Core verwendet werden kann. Eine weitere Transportoption ist HTTPS, das mit dem TwinCAT IoT-Produkt TF6760 IoT HTTPS/REST implementiert werden kann. |
Wir empfehlen, beim Lesen dieser Dokumentation die folgenden Artikel über erste Schritte mit AWS zu lesen. Wir werden darauf hinweisen, wenn es wichtig ist, einen dieser Artikel zu lesen, bevor Sie mit dem nächsten Schritt fortfahren.
AWS IoT Core: https://docs.aws.amazon.com/iot/latest/developerguide/iot-gs.html
Amazon SNS: https://docs.aws.amazon.com/sns/latest/dg/sns-getting-started.html
Verwendung von Amazon SNS in einer AWS IoT Core-Regel: https://docs.aws.amazon.com/iot/latest/developerguide/config-and-test-rules.html
Architektur
Cloud-Systeme bieten die technische Infrastruktur, die das Internet of Things (IoT) ermöglicht, und sorgen für die erforderliche Skalierbarkeit, um Millionen verbundener Geräte zu unterstützen. Cloud-Serviceanbieter wie Microsoft Azure und Amazon Web Services (AWS) bieten Hunderte von Diensten an, um verschiedene Anwendungsfälle zu unterstützen: virtuelle Maschinen, Message-Broker, Datenbanken, serverlose Funktionen usw. Ihr Produktportfolio umfasst auch verschiedene Funktionen für die Verarbeitung von Nachrichten von verbundenen Geräten. Ein zentraler Message-Broker (manchmal auch als „IoT Hub“ bezeichnet) bietet einen einzigen, sicheren Endpunkt für die Kommunikation der Geräte mit anderen Diensten im Ecosystem. Mithilfe sogenannter „Regeln“ kann der Benutzer dann Nachrichten filtern und einfach an andere Dienste weiterleiten. Da der Message-Broker als einziger Endpunkt für alle Datenkonnektivitätsszenarios behandelt wird, wird die Firewall-Angriffsfläche minimiert.
Die folgende Grafik veranschaulicht dieses Konzept und basiert auf Diensten, die von AWS angeboten werden. Ähnliche Dienste finden sich auch auf anderen Cloud-Plattformen wie Microsoft Azure, AWS dient lediglich als Beispiel.

Reduzieren wir dies auf unseren Anwendungsfall (SMS- und E-Mail-Nachrichten), sind die betreffenden Dienste daher:
- AWS IoT Core (Message-Broker), um einen einzigen, sicheren Endpunkt in der Cloud zu haben
- Amazon SNS, um SMS- und E-Mail-Nachrichten zu senden
Die Hauptvorteile einer cloud-basierten Lösung gegenüber dem klassischen Setup sind folgende:
- Der Nachrichtentyp (E-Mail, SMS, ...) ist transparent für das Gerät, das die Nachricht ausgibt. Das Gerät sendet einfach seine Nachricht und die Entscheidung, ob die Nachricht eine E-Mail oder eine SMS sein wird, wird in der Cloud getroffen.
- Adressänderungen müssen nicht an das Gerät weitergeleitet werden, das eine Nachricht ausgibt. Alle Adressen (E-Mail-Adressen, Telefonnummern, ...) werden in der Cloud verwaltet.
- Sicherer Transport zwischen dem Gerät, das eine Nachricht ausgibt, und der Cloud. Jede Nachricht des Geräts wird über einen sicheren Kommunikationskanal an AWS IoT Core gesendet – entweder über MQTT oder HTTPS.
- Die erforderliche Konnektivität mit dem Internet basiert auf TCP/IP und es wird keine zusätzliche Modem-Hardware zum Senden von SMS benötigt.
- Ein Vertrag mit einem Mobilfunkanbieter ist nicht erforderlich. AWS verwaltet den Transport einer SMS und berechnet Ihnen dies nutzungsabhängig (Pay-per-Use).
TwinCAT IoT unterstützt MQTT- und HTTPS-Konnektivität mit AWS IoT Core. Auf den folgenden Seiten der Dokumentation wird ausführlicher beschrieben, wie die an diesem Anwendungsfall beteiligten Komponenten konfiguriert werden.
Einrichtung von AWS IoT Core
AWS IoT Core ist ein skalierbarer und verwalteter Message-Broker-Dienst im AWS-Ecosystem. Er ermöglicht es, Geräte sicher zu verbinden und ihren Data Ingest zu verwalten. Um AWS IoT Core zu verwenden, ist Folgendes erforderlich:
- Ein AWS-Konto, um sich bei der webbasierten AWS Management-Konsole anzumelden. Alle benötigten AWS IoT Core-Funktionen werden automatisch implementiert, wenn das Konto erstellt wird, so dass eine Servicebereitstellung nicht notwendig ist.
- Geräteanmeldedaten (Zertifikate) und Sicherheitsrichtlinien für jedes verbundene Gerät. Die Zertifikate müssen auf das Gerät übertragen und während der Verbindungsherstellung mit dem AWS IoT Core-Dienst von ihm verwendet werden. Anders ausgedrückt: die Zertifikate werden von TwinCAT IoT immer dann verwendet, wenn die Verbindung aufgebaut wird. Dies wird in einem späteren Kapitel beschrieben.
Die Einrichtung von AWS IoT Core umfasst die folgenden Topics:
- Anmelden an der AWS IoT-Konsole
- Erstellen eines Objekts
- Registrieren eines Geräts
- Konfigurieren Ihres Geräts
- Anzeigen der MQTT-Nachrichten des Geräts mit dem AWS IoT MQTT-Client
- Konfigurieren und Testen von Regeln (nächstes Kapitel)
Diese Schritte werden im Tutorial Erste Schritte mit AWS IoT Core ausführlich beschrieben. Dieses Tutorial ist eine gute Dokumentationsquelle und enthält ausführliche Informationen über die oben genannten Schritte. Wir empfehlen, dieses Tutorial zu lesen und die schrittweise Anleitung durchzuarbeiten, bevor Sie mit dem nächsten Kapitel in dieser Dokumentation fortfahren.
Schritt 6 des Tutorials beschreibt genau den Anwendungsfall, den wir zu lösen versuchen: Konfigurieren einer AWS IoT Core-Regel, die Amazon SNS verwendet, um eine E-Mail- oder SMS-Nachricht zu senden.
Einrichtung von Amazon SNS
Amazon SNS ermöglicht es Ihnen, Push-Benachrichtigungen an mobile Apps, Textnachrichten an Mobilfunknummern und reine Text-E-Mails an E-Mail-Adressen zu senden. In Schritt 6 („Konfigurieren und Testen von Regeln“) der offiziellen Anleitung „Erste Schritte mit AWS IoT Core“ wird ausführlich beschrieben, wie Amazon SNS vorbereitet werden muss, damit eine AWS IoT-Regel eine Gerätenachricht an ein sogenanntes SNS Topic weiterleiten kann. Wenn Sie Ihr Wissen über Amazon SNS vertiefen möchten, empfehlen wir das Tutorial Erste Schritte mit Amazon SNS.

In dieser offiziellen Grafik fungiert der AWS IoT Core als Zwischenstation zwischen dem Publisher einer Nachricht (dem „Gerät“) und Amazon SNS.
Folgen Sie einfach den in der offiziellen Anleitung „Erste Schritte“ beschriebenen Schritten, um
- ein Amazon SNS Topic und ein Abonnement zu erstellen (E-Mail als „Protokoll“ verwenden)
- eine AWS IoT Core-Regel zu erstellen
- die Regel zu testen
Beachten Sie folgendes: Bei Verwendung von „E-Mail“ als Protokoll erhält die eingegebene E-Mail-Adresse eine erste, einmalige E-Mail zur Abonnementbestätigung. Diese E-Mail muss bestätigt werden, bevor Nachrichten an diese E-Mail-Adresse gesendet werden können. Dies ist mit Newslettern vergleichbar.

![]() | Servicelimits Beachten Sie, dass es bei regulären AWS-Konten eine Grenze für SMS-Nachrichten geben kann. Diese Grenze kann erhöht werden, indem Sie den AWS-Support aufrufen. Weitere Informationen finden Sie auf der Webseite Amazon SNS Servicelimit. |
Nachdem sowohl das Amazon SNS Topic/Subscription als auch die AWS IoT-Regel erstellt wurden, kann das Setup mit Hilfe des MQTT-Clients, der in die AWS Management-Konsole integriert ist, getestet werden. Senden Sie dazu lediglich eine Testnachricht an das Topic „my/topic“, das in der AWS IoT-Regel als Filter festgelegt worden ist, und verwenden Sie den folgenden JSON-Inhalt:
{
"default": "Hello, from AWS IoT console",
"email": "Hello, from AWS IoT console"
}
Alle verfügbaren Eigenschaften sind im Rahmen der Amazon SNS-Dokumentation dokumentiert.

Nach einigen Sekunden sollte die Benachrichtigungs-E-Mail bei der E-Mail-Adresse eingehen, die für die Amazon SNS-Subscription verwendet worden ist.

Im nächsten Schritt möchten wir es TwinCAT ermöglichen, Nachrichten an AWS IoT Core zu senden.
Einrichtung von TwinCAT
Die TwinCAT IoT Supplement-Produkte ermöglichen die Cloud-Konnektivität für verschiedene Anwendungsfälle. Einer ihrer Hauptvorteile liegt darin, dass sie Standardkommunikationsprotokolle verwenden, um die Konnektivität mit Cloud-Systemen verschiedener Anbieter, z. B. Microsoft Azure, Amazon Web Services, IBM, Google usw., zu ermöglichen.
In dieser Dokumentation möchten wir mit Hilfe von TF6701 IoT Communication eine Verbindung mit AWS IoT Core herstellen und eine Nachricht für das Topic „my/topic“ veröffentlichen, das in der AWS IoT-Regel als Filter festgelegt worden ist, um die Nachrichten weiterzuleiten, die für dieses bestimmte Topic bei Amazon SNS eingehen, um eine Benachrichtigungs-E-Mail zu senden.
Voraussetzungen
Dieses Kapitel basiert auf dem regulären TF6701-Beispiel IotMqttSampleAwsIoT, das zeigt, wie die Verbindung mit AWS IoT Core im Allgemeinen hergestellt wird. Laden Sie dieses Beispiel herunter, damit eine gemeinsame Ausgangsbasis vorhanden ist. Sehen Sie sich auch die entsprechende Infosys-Website für dieses bestimmte Beispiel an, um ausführlichere Informationen über die Funktionsweise des Beispielcodes zu finden.
![]() | Wichtig Bevor Sie fortfahren, müssen alle im Kapitel Einrichtung von AWS IoT Core dieser Dokumentation beschriebenen Schritte ausgeführt worden sein. |
Verbindungsherstellung
Alle Zertifikate, die mit der AWS Management-Konsole erstellt worden sind, müssen in der Datenstruktur FB_IotMqttClient.stTLS referenziert sein (sCA, sCert und sKeyFile). Verwenden Sie die URL der AWS IoT Core-Instanz als sHostName, wie auf der AWS Management-Konsole gezeigt wird. Da die Verbindung eine sichere MQTT-Verbindung ist, verwenden Sie 8883 als nHostPort. Die MQTT-Client-ID (sClientId) steht für den Objektnamen (ThingName), der bei der Erstellung des Objekts im Kapitel Einrichtung von AWS IoT Core verwendet wurde.
(* TLS settings for AWS IoT connection *)
fbMqttClient.stTLS.sCA := 'c:\certs\AmazonRootCA1.pem';
fbMqttClient.stTLS.sCert := 'c:\certs\6a1ba937cb-certificate.pem.crt';
fbMqttClient.stTLS.sKeyFile := 'c:\certs\6a1ba937cb-private.pem.key';
(* Broker settings für AWS IoT *)
fbMqttClient.sHostName:= 'aXX-ats.iot.eu-central-1.amazonaws.com';
fbMqttClient.nHostPort:= 8883;
fbMqttClient.sClientId:= 'ThingName';
Festlegen der richtigen Topics
Das Standardbeispiel veranschaulicht, wie die Verbindung mit AWS IoT Core hergestellt wird, um Daten mit diesem Message-Broker auszutauschen. Es veröffentlicht Nachrichten für ein Topic und abonniert ein Topic, um Nachrichten zu erhalten. In dem Beispiel sind beide Themen gleich, so dass TwinCAT dieselbe Nachricht erhält, die es an den Broker gesendet hat.
Zusätzlich zu diesem regulären Beispielverhalten werden wir nun neuen Code schreiben, damit das Beispiel eine Nachricht für das Topic „my/topic“ sendet, so dass eine E-Mail-Nachricht gesendet wird. Hierzu deklarieren wir zunächst einige neue Variablen:
sTopicEmail : STRING(255) := 'my/topic';
bSendEmail : BOOL;
sPayloadEmail : STRING(255) := '{"default": "Hello from TwinCAT","message": "Hello from TwinCAT"}';
Dann werden wir nach der IF-Abfrage für die Timer-Ausführung die folgenden Codezeilen hinzufügen:
IF fbTimer.Q THEN
...
END_IF
IF bSendEmail THEN
bSendEmail := FALSE;
fbMqttClient.Publish(sTopic:= sTopicEmail, pPayload:= ADR(sPayloadEmail), nPayloadSize:= LEN2(ADR(sPayloadEmail)), eQoS:= TcIotMqttQos.AtMostOnceDelivery, bRetain:= FALSE, bQueue:= FALSE);
END_IF
Nach der Aktivierung des Projekts validieren Sie zuerst, ob die Verbindung mit AWS IoT Core erfolgreich war, indem Sie den Parameter eConnectionState prüfen (muss stabil „MQTT_ERR_SUCCESS“ sein). Wenn der Verbindungsstatus zu „wechseln“ scheint oder einen TLS-Fehler anzeigt (z. B. „MQTT_ERR_TLS_VERIFICATIONFAILED“), überprüfen Sie die Schritte des Kapitels „Einrichtung von AWS IoT Core“ nochmals und kontrollieren Sie, ob das Gerätezertifikat aktiviert worden ist und die Sicherheitsrichtlinie dem Gerät erlaubt, Daten für die verwendeten Topics zu veröffentlichen.
Wenn die Verbindung erfolgreich ist, versuchen Sie, bSendEmail auf TRUE zu setzen. Nach einigen Sekunden sollte eine E-Mail im Posteingang der E-Mail-Adresse erscheinen, die für die Amazon SNS Subscription verwendet worden ist.