Client MQTT IoT Azure

Qu'est-ce qu'Azure IoT Hub ?

IoT Hub est un service géré, hébergé dans le cloud, qui sert de concentrateur de messages central pour la communication bidirectionnelle entre votre application IoT et les appareils qu'elle gère. Vous pouvez utiliser Azure IoT Hub pour créer des solutions IoT avec des communications fiables et sécurisées entre des millions d'appareils IoT et un backend de solution hébergé dans le cloud. Vous pouvez connecter pratiquement n'importe quel appareil à IoT Hub.

 

IoT Hub prend en charge les communications aussi bien de l'appareil vers le cloud que du cloud vers l'appareil. IoT Hub prend en charge plusieurs modèles de messagerie tels que la télémétrie appareil-vers-cloud, le téléversement de fichiers depuis les appareils et les méthodes requête-réponse pour contrôler vos appareils depuis le cloud. La surveillance IoT Hub vous aide à maintenir l'état de votre solution en suivant des événements tels que la création d'appareils, les défaillances d'appareils et les connexions d'appareils.

 

Les capacités d'IoT Hub vous aident à créer des solutions IoT évolutives et complètes, telles que la gestion des équipements industriels utilisés en fabrication, le suivi des actifs précieux dans le secteur de la santé et la surveillance de l'utilisation des bâtiments de bureau.

 

Broker de messages

IoT Hub vous offre un canal de communication sécurisé pour que vos appareils puissent envoyer des données. IoT Hub et les SDK d'appareils prennent en charge les protocoles suivants pour connecter les appareils :

 

 

Plusieurs types d'authentification prennent en charge une variété de capacités d'appareil :

 

 

 

Client MQTT

TsgcIoTAzure_MQTT_Client est le composant utilisé pour se connecter à Azure IoT. Un client ne peut se connecter qu'à un seul appareil. Le client se connecte en utilisant le protocole MQTT simple et s'authentifie à l'aide de SAS / certificat client X.509.

 

Pour se connecter à Azure IoT Hub, le client a besoin des propriétés suivantes :

 

Azure.IoTHub: nom du serveur auquel le client MQTT se connectera.

Azure.DeviceId : nom du périphérique dans Azure IoT Hub.

 

Azure permet plusieurs types d'authentification, par défaut utilise les jetons SAS.

 

Authentification SAS

 

SAS.Enabled : activez si l'authentification utilise SAS.

SAS.SecretKey : le jeton SAS de votre compte Azure IoT.

SAS.KeyName : le nom de la clé d'accès partagé.

SAS.Expiry : définissez le nombre de minutes avant l'expiration du jeton SAS. La valeur par défaut est 1440 (24 heures).

 

Si vous disposez d'une chaîne de connexion, vous pouvez lire automatiquement les valeurs de la chaîne de connexion en utilisant la méthode ReadConnectionString. Exemple :

 

ReadConnectionString('HostName=yourhub.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=Yj7RRPnkSDTv+UCFLgwIP/FrbDymZv4qVAIoTLHUFR8=');

 

Certificats X509

 

Utilisation de OpenSSL comme IOHandler

 

Certificate.Enabled : activez si l'authentification utilise des certificats.

Certificate.CertFile : chemin vers le certificat client X.509.

Certificate.KeyFile : chemin vers le fichier de clé client X.509.

Certificate.Password : si le certificat a un mot de passe, définissez-le ici.

Version: Version TLS, utilise TLS 1.0 par défaut

 

Utiliser SChannel comme IOHandler

 

Certificate.Enabled : activez si l'authentification utilise des certificats.

Certificate.CertFile : chemin vers le certificat PFX (le certificat doit d'abord être converti en PFX). En savoir plus.

Certificate.Password : si le certificat a un mot de passe, définissez-le ici.

Version: Version TLS, utilise TLS 1.0 par défaut

 

Autres propriétés :

 

MQTTHeartBeat : si activé, tente de maintenir la connexion MQTT active en envoyant un ping toutes les x secondes.

 

Interval : nombre de secondes entre chaque ping.

 

WatchDog : si activé, en cas de déconnexion inattendue, tente de se reconnecter automatiquement au serveur.

 

Interval : secondes avant les tentatives de reconnexion.

 

Attempts : nombre maximum de tentatives de reconnexion ; zéro signifie illimité.

 

LogFile : si activé, sauvegarde les messages socket dans un fichier journal (utile pour le débogage). L'accès au fichier journal n'est pas thread-safe s'il est accédé depuis plusieurs threads.

 

Enabled : si activé, chaque message reçu et envoyé par le socket sera enregistré dans un fichier.

 

FileName : chemin complet vers le nom de fichier.

 

 

L'implémentation Azure MQTT est basée sur la version MQTT 3.1.1 mais s'en écarte de la manière suivante :

 

 

Connexion à Azure IoT Hub

Vous devez d'abord vous connecter à votre compte Azure, enregistrer un nouvel appareil et créer une méthode d'authentification pour cet appareil. Une fois cela fait, vous pouvez créer un nouveau TsgcIoTAzure_MQTT_Client et vous connecter à Azure IoT Hub.

 

Par exemple :


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;

Appareil vers le cloud

Lors de l'envoi d'informations depuis l'application de l'appareil vers le backend de la solution, IoT Hub expose les options suivantes :

 

1. Messages appareil-vers-cloud pour la télémétrie de séries temporelles et les alertes.


oClient.Send_DeviceToCloud('{"temp": 10}', azuIoTQoS1);

Vous pouvez envoyer des propriétés clé-valeur à l'aide d'un TStringList ; remplissez simplement le TStringList avec les propriétés de message souhaitées et passez-le en 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;

Si vous devez définir le ContentType et le ContentEncoding du message, vous devez ajouter ces valeurs à la liste Properties. Les noms de ces propriétés sont définis par Azure.

 

Nom Valeur
$.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. Propriétés signalées du jumeau d'appareil pour signaler des informations d'état de l'appareil telles que les capacités disponibles, les conditions ou l'état des flux de travail de longue durée. Par exemple, la configuration et les mises à jour logicielles.


oClient.Set_DeviceTwinsProperties('1', '{"sgc":1}');

Cloud To Device

IoT Hub propose trois options pour que les applications d'appareils exposent des fonctionnalités à une application back-end :

 

1. Méthodes directes pour les communications nécessitant une confirmation immédiate du résultat. Les méthodes directes sont souvent utilisées pour le contrôle interactif d'appareils tels que l'activation d'un ventilateur.


oClient.Subscribe_DirectMethod;

Vous pouvez répondre aux méthodes publiques en utilisant la méthode suivante.


oClient.RespondPublicMethod(RequestId, Status, 'Your Response', azuIoTQoS1);

2. Propriétés souhaitées du jumeau pour les commandes longue durée destinées à mettre l'appareil dans un état souhaité. Par exemple, définir l'intervalle d'envoi de télémétrie à 30 minutes. Vous pouvez obtenir les propriétés en utilisant la méthode suivante.


oClient.Get_DeviceTwinsProperties('1');

3. Messages cloud vers l'appareil pour les notifications unidirectionnelles vers l'application de l'appareil. Pour recevoir des messages, vous devez d'abord vous abonner.


oClient.Subscribe_CloudToDevice;

Les messages sont reçus dans l'événement OnMQTTPublish (charge utile textuelle) ou OnMQTTPublishEx (charge utile en tant que TsgcWSMQTTPublishData avec les propriétés Value, Bytes et Stream).


procedure TFRMSGCClientIoT.AzureIoTMQTTPublish(Connection: TsgcWSConnection; aTopic, aText: string);
begin
  DoLog('Received Message: ' + aTopic + ' ' + aText);
end;

Téléverser des fichiers

Le hub IoT facilite les téléchargements de fichiers depuis des appareils connectés en leur fournissant des URI de signature d'accès partagé (SAS) ou des certificats X509.

 

Si vous sélectionnez SAS, vous devez définir les propriétés suivantes :

 

 

Si vous sélectionnez des certificats X509, vous devez définir les propriétés suivantes :

 

 

Utilisez la méthode UploadFile pour télécharger un fichier vers les serveurs Azure. Si le paramètre Overwrite est défini à true, il remplacera le fichier existant. Si le paramètre Overwrite est défini à false, il ne téléchargera que si le fichier n'existe pas et lèvera une erreur s'il existe (c'est l'option par défaut).

 


procedure UploadFileToAzure;
begin
  oDialog := TOpenDialog.Create(nil);
  Try
    if oDialog.Execute then
      AzureIoT.UploadFile(oDialog.FileName);
  Finally
    oDialog.Free;
  End;
end;

Service de provisionnement d'appareils

Azure IoT vous permet d'enregistrer des appareils depuis le code à l'aide de DPS. Actuellement, la bibliothèque prend en charge l'enregistrement d'un appareil en passant le Scope Id et le Registration Id en paramètres.

 


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;

 

Azure IoT Explorer

Vous pouvez utiliser l'application Azure IoT Explorer pour interagir avec les appareils connectés à votre IoT Hub. Vous pouvez voir les messages de télémétrie reçus, les appareils enregistrés, et plus encore. L'application est gratuite et peut être téléchargée depuis :

 

https://github.com/Azure/azure-iot-explorer/releases