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.
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:
MQTT
MQTT over WebSockets
Meerdere verificatietypen ondersteunen een verscheidenheid aan apparaatmogelijkheden:
SAS-tokengebaseerde authenticatie om snel aan de slag te gaan met uw IoT-oplossing.
Individuele authenticatie via X.509-certificaat voor veilige, op standaarden gebaseerde authenticatie.
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:
IoT Hub ondersteunt geen QoS 2-berichten. Als een apparaat-app een bericht publiceert met QoS 2, sluit IoT Hub de netwerkverbinding.
IoT Hub bewaart geen Retain-berichten. Als een apparaat een bericht verzendt met de RETAIN-vlag ingesteld op 1, voegt IoT Hub de toepassingseigenschap x-opt-retain toe aan het bericht. In dit geval geeft IoT Hub het retain-bericht door aan de backend-applicatie in plaats van het op te slaan.
IoT Hub ondersteunt slechts één actieve MQTT-verbinding per apparaat. Elke nieuwe MQTT-verbinding namens hetzelfde apparaat-ID zorgt ervoor dat IoT Hub de bestaande verbinding verbreekt.
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;
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}');
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;
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;
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;
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