IoT Hub ist ein verwalteter Dienst, der in der Cloud gehostet wird und als zentraler Nachrichten-Hub für die bidirektionale Kommunikation zwischen Ihrer IoT-Anwendung und den von ihr verwalteten Geräten fungiert. Sie können Azure IoT Hub verwenden, um IoT-Lösungen mit zuverlässiger und sicherer Kommunikation zwischen Millionen von IoT-Geräten und einem cloud-gehosteten Lösungs-Backend zu erstellen. Sie können praktisch jedes Gerät mit IoT Hub verbinden.
IoT Hub unterstützt Kommunikationen sowohl vom Gerät zur Cloud als auch von der Cloud zum Gerät. IoT Hub unterstützt mehrere Messaging-Muster wie Device-to-Cloud-Telemetrie, Datei-Upload von Geräten und Request-Reply-Methoden, um Ihre Geräte aus der Cloud zu steuern. Die IoT-Hub-Überwachung hilft Ihnen, den Zustand Ihrer Lösung zu erhalten, indem sie Ereignisse wie Geräteerstellung, Gerätefehler und Geräteverbindungen verfolgt.
Die Funktionen von IoT Hub helfen Ihnen, skalierbare, voll funktionsfähige IoT-Lösungen zu erstellen, etwa zur Verwaltung von Industrieanlagen in der Fertigung, zur Verfolgung wertvoller Vermögenswerte im Gesundheitswesen und zur Überwachung der Nutzung von Bürogebäuden.
IoT Hub bietet Ihnen einen sicheren Kommunikationskanal für Ihre Geräte zum Senden von Daten. IoT Hub und die Geräte-SDKs unterstützen die folgenden Protokolle zum Verbinden von Geräten:
MQTT
MQTT über WebSockets
Mehrere Authentifizierungstypen unterstützen eine Vielzahl von Gerätefunktionen:
SAS-Token-basierte Authentifizierung, um schnell mit Ihrer IoT-Lösung zu beginnen.
Individuelle X.509-Zertifikat-Authentifizierung für sichere, standardbasierte Authentifizierung.
TsgcIoTAzure_MQTT_Client ist die Komponente, die zum Verbinden mit Azure IoT verwendet wird. Ein Client kann sich mit nur einem Gerät verbinden. Der Client verbindet sich über das reine MQTT-Protokoll und authentifiziert sich über SAS / X.509-Client-Zertifikat.
Um eine Verbindung zum Azure IoT Hub herzustellen, benötigt der Client die folgenden Eigenschaften:
Azure.IoTHub: Servername, mit dem sich der MQTT-Client verbinden wird.
Azure.DeviceId: Name des Geräts im Azure IoT Hub.
Azure erlaubt mehrere Authentifizierungstypen, standardmäßig werden SAS-Tokens verwendet.
SAS-Authentifizierung
SAS.Enabled: aktivieren, wenn die Authentifizierung SAS verwendet.
SAS.SecretKey: das SAS-Token aus Ihrem Azure-IoT-Konto.
SAS.KeyName: der Shared Access Key Name.
SAS.Expiry: legt die Anzahl der Minuten fest, bevor das SAS-Token abläuft. Der Standardwert ist 1440 (24 Stunden).
Wenn Sie eine Verbindungszeichenfolge haben, können Sie die Werte der Verbindungszeichenfolge automatisch mit der Methode ReadConnectionString auslesen. Beispiel:
ReadConnectionString('HostName=yourhub.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=Yj7RRPnkSDTv+UCFLgwIP/FrbDymZv4qVAIoTLHUFR8=');
X509-Zertifikate
Verwendung von OpenSSL als IOHandler
Certificate.Enabled: aktivieren, wenn die Authentifizierung Zertifikate verwendet.
Certificate.CertFile: Pfad zum X.509-Client-Zertifikat.
Certificate.KeyFile: Pfad zur X.509-Client-Schlüsseldatei.
Certificate.Password: wenn das Zertifikat ein Passwort hat, setzen Sie es hier.
Version: TLS-Version, verwendet standardmäßig TLS 1.0
Verwendung von SChannel als IOHandler
Certificate.Enabled: aktivieren, wenn die Authentifizierung Zertifikate verwendet.
Certificate.CertFile: Pfad zum PFX-Zertifikat (zunächst muss das Zertifikat in PFX konvertiert werden). Mehr erfahren.
Certificate.Password: wenn das Zertifikat ein Passwort hat, setzen Sie es hier.
Version: TLS-Version, verwendet standardmäßig TLS 1.0
Weitere Eigenschaften:
MQTTHeartBeat: wenn aktiviert, versucht die MQTT-Verbindung aufrechtzuerhalten, indem alle x Sekunden ein Ping gesendet wird.
Interval: Anzahl der Sekunden zwischen jedem Ping.
WatchDog: wenn aktiviert, wird bei Erkennung einer unerwarteten Trennung versucht, sich automatisch wieder mit dem Server zu verbinden.
Interval: Sekunden vor den Wiederverbindungsversuchen.
Attempts: maximale Anzahl der Wiederverbindungsversuche; null bedeutet unbegrenzt.
LogFile: wenn aktiviert, speichert Socket-Nachrichten in einer Protokolldatei (nützlich zum Debuggen). Der Zugriff auf die Protokolldatei ist nicht thread-sicher, wenn von mehreren Threads darauf zugegriffen wird.
Enabled: wenn aktiviert, wird jedes Mal, wenn eine Nachricht über den Socket empfangen und gesendet wird, ein Eintrag in einer Datei gespeichert.
FileName: vollständiger Pfad zum Dateinamen.
Die Azure-MQTT-Implementierung basiert auf MQTT-Version 3.1.1, weicht aber wie folgt von der Spezifikation ab:
IoT Hub unterstützt keine QoS-2-Nachrichten. Wenn eine Geräte-App eine Nachricht mit QoS 2 veröffentlicht, schließt IoT Hub die Netzwerkverbindung.
IoT Hub persistiert keine Retain-Nachrichten. Wenn ein Gerät eine Nachricht mit gesetztem RETAIN-Flag (1) sendet, fügt IoT Hub der Nachricht die Anwendungseigenschaft x-opt-retain hinzu. In diesem Fall persistiert IoT Hub die Retain-Nachricht nicht, sondern leitet sie an die Backend-App weiter.
IoT Hub unterstützt nur eine aktive MQTT-Verbindung pro Gerät. Jede neue MQTT-Verbindung im Namen derselben Geräte-ID führt dazu, dass IoT Hub die bestehende Verbindung trennt.
Zuerst müssen Sie sich bei Ihrem Azure-Konto anmelden, ein neues Gerät registrieren und eine Authentifizierungsmethode für dieses Gerät erstellen. Sobald dies erledigt ist, können Sie einen neuen TsgcIoTAzure_MQTT_Client erstellen und sich mit dem Azure IoT Hub verbinden.
Zum Beispiel:
oClient := TsgcIoTAzure_MQTT_Client.Create(nil);
oClient.Azure.IoTHub := 'youriothub.azure-devices.net';
oClient.Azure.DeviceId := 'YourDeviceId';
oClient.SAS.Enabled := True;
oClient.SAS.SecretKey := 'YourSecretKey';
oClient.OnMQTTConnect := OnMQTTConnectEvent;
oClient.Active := True;
procedure OnMQTTConnect(Connection: TsgcWSConnection; const Session: Boolean; const
ReturnCode: TmqttConnReturnCode);
begin
ShowMessage('Connected to Azure IoT Hub');
end;
Beim Senden von Informationen von der Geräte-App an das Solution-Backend stellt IoT Hub die folgenden Optionen bereit:
1. Device-to-Cloud-Nachrichten für Zeitreihen-Telemetrie und Warnungen.
oClient.Send_DeviceToCloud('{"temp": 10}', azuIoTQoS1);
Sie können Schlüssel-Wert-Eigenschaften über eine TStringList senden; füllen Sie einfach die TStringList mit den gewünschten Nachrichteneigenschaften und übergeben Sie diese als Argument.
oProperties := TStringList.Create;
Try
oProperties.AddPair('prop_name1', 'prop_value1');
oProperties.AddPair('prop_name2', 'prop_value2');
oClient.Send_DeviceToCloud('{"temp": 10}', oProperties, azuIoTQoS1);
Finally
oProperties.Free;
End;
Wenn Sie ContentType und ContentEncoding der Nachricht setzen müssen, müssen Sie diese Werte der Properties-Liste hinzufügen. Die Namen dieser Eigenschaften werden von Azure definiert.
| Name | Value |
| $.ct | application/json |
| $.ce | utf-8 |
oProperties := TStringList.Create;
Try
oProperties.AddPair('$.ct', 'application/json');
oProperties.AddPair('$.ce', 'utf-8');
oClient.Send_DeviceToCloud('{"temp": 10}', oProperties, azuIoTQoS1);
Finally
oProperties.Free;
End;
2. Gemeldete Eigenschaften des Device Twin zum Melden von Gerätezustandsinformationen wie verfügbare Fähigkeiten, Bedingungen oder dem Zustand langlaufender Workflows. Zum Beispiel Konfigurations- und Software-Updates.
oClient.Set_DeviceTwinsProperties('1', '{"sgc":1}');
IoT Hub bietet drei Optionen für Geräte-Apps, um einer Back-End-App Funktionalität verfügbar zu machen:
1. Direkte Methoden für Kommunikationen, die eine sofortige Bestätigung des Ergebnisses erfordern. Direkte Methoden werden oft für die interaktive Steuerung von Geräten verwendet, wie etwa das Einschalten eines Lüfters.
oClient.Subscribe_DirectMethod;
Sie können auf öffentliche Methoden mit der folgenden Methode antworten.
oClient.RespondPublicMethod(RequestId, Status, 'Your Response', azuIoTQoS1);
2. Gewünschte Eigenschaften des Twins für lang laufende Befehle, die das Gerät in einen bestimmten gewünschten Zustand versetzen sollen. Zum Beispiel das Setzen des Telemetrie-Sendeintervalls auf 30 Minuten. Sie können Eigenschaften mit der folgenden Methode abrufen.
oClient.Get_DeviceTwinsProperties('1');
3. Cloud-zu-Gerät-Nachrichten für einseitige Benachrichtigungen an die Geräte-App. Um Nachrichten zu erhalten, müssen Sie zuerst abonnieren.
oClient.Subscribe_CloudToDevice;
Nachrichten werden im Ereignis OnMQTTPublish (Text-Payload) oder im Ereignis OnMQTTPublishEx (Payload als TsgcWSMQTTPublishData mit den Eigenschaften Value, Bytes und Stream) empfangen.
procedure TFRMSGCClientIoT.AzureIoTMQTTPublish(Connection: TsgcWSConnection; aTopic, aText: string);
begin
DoLog('Received Message: ' + aTopic + ' ' + aText);
end;
IoT Hub erleichtert Datei-Uploads von verbundenen Geräten, indem es ihnen Shared-Access-Signature-(SAS-)URIs oder X509-Zertifikate bereitstellt.
Wenn Sie SAS auswählen, müssen Sie die folgenden Eigenschaften setzen:
Wenn Sie X509-Zertifikate auswählen, müssen Sie die folgenden Eigenschaften setzen:
Verwenden Sie die Methode UploadFile , um eine Datei auf die Azure-Server hochzuladen. Wenn der Parameter Overwrite auf true gesetzt ist, wird die vorhandene Datei ersetzt. Wenn der Parameter Overwrite auf false gesetzt ist, wird nur hochgeladen, wenn die Datei nicht existiert, und es wird ein Fehler ausgelöst, wenn sie existiert (dies ist die Standardoption).
procedure UploadFileToAzure;
begin
oDialog := TOpenDialog.Create(nil);
Try
if oDialog.Execute then
AzureIoT.UploadFile(oDialog.FileName);
Finally
oDialog.Free;
End;
end;
Azure IoT ermöglicht es Ihnen, Geräte aus dem Code mit DPS zu registrieren. Derzeit unterstützt die Bibliothek die Registrierung eines Geräts durch Übergabe der Scope Id und Registration Id als Parameter.
oClient := TsgcIoTAzure_MQTT_Client.Create(nil);
Try
oClient.Certificate.CertFile := 'cert.pem';
oClient.Certificate.KeyFile := 'key.pem';
oClient.Certificate.Enabled := True;
oResponse := TsgcIoT_Azure_OperationRegistrationState.Create;
Try
if oClient.ProvisioningDeviceClient_Register('scope_id', 'registration_id', oResponse) then
ShowMessage('#Provisioning Register OK: ' + oResponse.Status)
else
ShowMessage('#Provisioning Register Error: ' + oResponse.Status);
Finally
FreeAndNil(oResponse);
End;
Finally
FreeAndNil(oClient);
End;
Sie können die Anwendung Azure IoT Explorer verwenden, um mit Geräten zu interagieren, die mit Ihrem IoT Hub verbunden sind. Sie können die empfangenen Telemetrienachrichten, die registrierten Geräte und mehr sehen. Die Anwendung ist kostenlos und kann heruntergeladen werden von:
https://github.com/Azure/azure-iot-explorer/releases