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:

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.

Senden von SMS- und E-Mail-Nachrichten 1:

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.

Senden von SMS- und E-Mail-Nachrichten 2:

Reduzieren wir dies auf unseren Anwendungsfall (SMS- und E-Mail-Nachrichten), sind die betreffenden Dienste daher:

Die Hauptvorteile einer cloud-basierten Lösung gegenüber dem klassischen Setup sind folgende:

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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:

Die Einrichtung von AWS IoT Core umfasst die folgenden Topics:

  1. Anmelden an der AWS IoT-Konsole
  2. Erstellen eines Objekts
  3. Registrieren eines Geräts
  4. Konfigurieren Ihres Geräts
  5. Anzeigen der MQTT-Nachrichten des Geräts mit dem AWS IoT MQTT-Client
  6. 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.

Senden von SMS- und E-Mail-Nachrichten 3:

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

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.

Senden von SMS- und E-Mail-Nachrichten 4:
Senden von SMS- und E-Mail-Nachrichten 5:

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.

Senden von SMS- und E-Mail-Nachrichten 6:

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

Senden von SMS- und E-Mail-Nachrichten 7:

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.

Senden von SMS- und E-Mail-Nachrichten 8:

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.