IoT Azure MQTT-client

Wat is Azure IoT Hub?

IoT Hub is een beheerde service, gehost in de cloud, die fungeert als een centraal berichtencentrum voor bidirectionele communicatie tussen uw IoT-applicatie en de apparaten die het beheert. U kunt Azure IoT Hub gebruiken om IoT-oplossingen te bouwen met betrouwbare en veilige communicatie tussen miljoenen IoT-apparaten en een cloud-gehoste oplossingsback-end. U kunt vrijwel elk apparaat verbinden met IoT Hub.

 

IoT Hub ondersteunt zowel communicatie van het apparaat naar de cloud als van de cloud naar het apparaat. IoT Hub ondersteunt meerdere berichtenpatronen, zoals apparaat-naar-cloud-telemetrie, bestandsupload van apparaten en verzoek-antwoordmethoden om uw apparaten vanuit de cloud te besturen. IoT Hub-bewaking helpt u de gezondheid van uw oplossing te behouden door gebeurtenissen bij te houden, zoals het aanmaken van apparaten, apparaatfouten en apparaatverbindingen.

 

De mogelijkheden van IoT Hub helpen u schaalbare, complete IoT-oplossingen te bouwen, zoals het beheren van industriële apparatuur in de productie, het volgen van waardevolle middelen in de gezondheidszorg en het monitoren van het gebruik van kantoorgebouwen.

 

Berichtbroker

IoT Hub biedt u een beveiligd communicatiekanaal waarmee uw apparaten gegevens kunnen verzenden. IoT Hub en de apparaat-SDK's ondersteunen de volgende protocollen voor het verbinden van apparaten:

 

 

Meerdere verificatietypen ondersteunen een verscheidenheid aan apparaatmogelijkheden:

 

 

 

MQTT-client

TsgcIoTAzure_MQTT_Client is de component die wordt gebruikt om verbinding te maken met Azure IoT. Eén client kan slechts verbinding maken met één apparaat. De client maakt verbinding via het gewone MQTT-protocol en authenticeert via SAS / X.509 clientcertificaat.

 

Om verbinding te maken met Azure IoT Hub heeft de client de volgende eigenschappen nodig:

 

Azure.IoTHub: servernaam waarmee de MQTT-client verbinding maakt.

Azure.DeviceId: naam van het apparaat in Azure IoT Hub.

 

Azure ondersteunt meerdere authenticatietypes; standaard worden SAS-tokens gebruikt.

 

SAS-authenticatie

 

SAS.Enabled: inschakelen als verificatie SAS gebruikt.

SAS.SecretKey: het SAS-token van uw Azure IoT-account.

SAS.KeyName: de naam van de gedeelde toegangssleutel.

SAS.Expiry: stel het aantal minuten in voordat het SAS-token verloopt. De standaardwaarde is 1440 (24 uur).

 

Als u een verbindingsstring hebt, kunt u de waarden van de verbindingsstring automatisch lezen met de methode ReadConnectionString. Voorbeeld:

 

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

 

X509-certificaten

 

Gebruik van OpenSSL als IOHandler

 

Certificate.Enabled: schakel in als authenticatie certificaten gebruikt.

Certificate.CertFile: pad naar het X.509-clientcertificaat.

Certificate.KeyFile: path to X.509 client key file.

Certificate.Password: als het certificaat een wachtwoord heeft, stel dit hier in.

Version: TLS version, by default uses TLS 1.0

 

SChannel gebruiken als IOHandler

 

Certificate.Enabled: schakel in als authenticatie certificaten gebruikt.

Certificate.CertFile: pad naar het PFX-certificaat (het certificaat moet eerst worden geconverteerd naar PFX). Meer lezen.

Certificate.Password: als het certificaat een wachtwoord heeft, stel dit hier in.

Version: TLS version, by default uses TLS 1.0

 

Overige eigenschappen:

 

MQTTHeartBeat: indien ingeschakeld, probeert de MQTT-verbinding actief te houden door elke x seconden een ping te sturen.

 

Interval: aantal seconden tussen elke ping.

 

WatchDog: indien ingeschakeld, probeert het bij een onverwachte verbreking automatisch opnieuw verbinding te maken met de server.

 

Interval: seconden voor herverbindingspogingen.

 

Attempts: maximum aantal herverbindingspogingen; nul betekent onbeperkt.

 

LogFile: als ingeschakeld, slaat socketberichten op in een logbestand (nuttig voor foutopsporing). De toegang tot het logbestand is niet thread-safe als het wordt benaderd vanuit meerdere threads.

 

Enabled: als ingeschakeld, wordt elk bericht dat via de socket wordt ontvangen en verzonden, opgeslagen in een bestand.

 

FileName: volledig pad naar de bestandsnaam.

 

 

Azure MQTT-implementatie is gebaseerd op MQTT versie 3.1.1, maar wijkt als volgt af van de specificatie:

 

 

Verbinding maken met Azure IoT Hub

Eerst moet u inloggen op uw Azure-account, een nieuw apparaat registreren en een authenticatiemethode voor dit apparaat aanmaken. Zodra dat is gedaan, kunt u een nieuwe TsgcIoTAzure_MQTT_Client aanmaken en verbinding maken met de Azure IoT Hub.

 

Bijvoorbeeld:


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;

Apparaat naar cloud

Bij het verzenden van informatie van de apparaat-app naar de back-end van de oplossing stelt IoT Hub de volgende opties beschikbaar:

 

1. Apparaat-naar-cloud-berichten voor tijdreekstelemetrie en waarschuwingen.


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

U kunt sleutel-waardeeigenschappen verzenden met een TStringList; vul de TStringList met de gewenste berichteigenschappen en geef deze als argument mee.


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;

Als u het ContentType en de ContentEncoding van het bericht wilt instellen, moet u deze waarden toevoegen aan de eigenschappenlijst. De namen van deze eigenschappen worden gedefinieerd door Azure.

 

Naam Waarde
$.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. Gerapporteerde eigenschappen van het apparaatdubbel voor het rapporteren van informatie over de apparaatstatus, zoals beschikbare mogelijkheden, condities of de status van langlopende workflows. Bijvoorbeeld configuratie- en software-updates.


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

Cloud naar apparaat

IoT Hub biedt drie opties voor apparaat-apps om functionaliteit beschikbaar te stellen aan een back-end-app:

 

1. Directe methoden voor communicatie waarvoor onmiddellijke bevestiging van het resultaat vereist is. Directe methoden worden vaak gebruikt voor interactieve besturing van apparaten, zoals het inschakelen van een ventilator.


oClient.Subscribe_DirectMethod;

U kunt reageren op publieke methoden met de volgende methode.


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

2. Gewenste eigenschappen van de twin voor langlopende opdrachten die bedoeld zijn om het apparaat in een bepaalde gewenste toestand te brengen. Stel bijvoorbeeld het verzendinterval voor telemetrie in op 30 minuten. U kunt eigenschappen ophalen met de volgende methode.


oClient.Get_DeviceTwinsProperties('1');

3. Cloud-naar-apparaat-berichten voor eenrichtingsmeldingen naar de apparaatapp. Om berichten te ontvangen, moet u zich eerst abonneren.


oClient.Subscribe_CloudToDevice;

Berichten worden ontvangen in de OnMQTTPublish-gebeurtenis (tekstpayload) of de OnMQTTPublishEx-gebeurtenis (payload als TsgcWSMQTTPublishData met de eigenschappen Value, Bytes en Stream).


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

Bestanden uploaden

IoT Hub vergemakkelijkt het uploaden van bestanden van verbonden apparaten door hen shared access signature (SAS) URI's of X509-certificaten te verstrekken.

 

Als u SAS selecteert, moet u de volgende eigenschappen instellen:

 

 

Als u X509-certificaten selecteert, dient u de volgende eigenschappen in te stellen:

 

 

Gebruik de methode UploadFile om een bestand naar de Azure-servers te uploaden. Als de parameter Overwrite is ingesteld op true, wordt het bestaande bestand vervangen. Als de parameter Overwrite is ingesteld op false, wordt het bestand alleen geüpload als het niet bestaat en wordt er een fout gegenereerd als het al bestaat (dit is de standaardoptie).

 


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

Device Provisioning Service

Azure IoT stelt u in staat apparaten te registreren via code met behulp van DPS. Momenteel ondersteunt de bibliotheek het registreren van een apparaat door de Scope Id en Registration Id als parameters door te geven.

 


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

U kunt de Azure IoT Explorer-applicatie gebruiken om te communiceren met apparaten die zijn verbonden met uw IoT Hub. U kunt de ontvangen telemetrieberichten, de geregistreerde apparaten en meer bekijken. De applicatie is gratis en kan worden gedownload van:

 

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