IoT Hub to zarządzana usługa hostowana w chmurze, pełniąca rolę centralnego koncentratora wiadomości do dwukierunkowej komunikacji między aplikacją IoT a zarządzanymi przez nią urządzeniami. Azure IoT Hub umożliwia budowanie rozwiązań IoT z niezawodną i bezpieczną komunikacją między milionami urządzeń IoT a zapleczem rozwiązania hostowanym w chmurze. Z IoT Hub można połączyć praktycznie dowolne urządzenie.
IoT Hub obsługuje komunikację zarówno z urządzenia do chmury, jak i z chmury do urządzenia. IoT Hub obsługuje wiele wzorców komunikatów, takich jak telemetria urządzenie–chmura, przesyłanie plików z urządzeń oraz metody żądanie–odpowiedź służące do sterowania urządzeniami z chmury. Monitorowanie IoT Hub pomaga utrzymać kondycję rozwiązania poprzez śledzenie zdarzeń, takich jak tworzenie urządzeń, awarie urządzeń i połączenia urządzeń.
Możliwości IoT Hub pomagają budować skalowalne, w pełni funkcjonalne rozwiązania IoT, takie jak zarządzanie sprzętem przemysłowym w produkcji, śledzenie cennych zasobów w służbie zdrowia czy monitorowanie użytkowania budynków biurowych.
IoT Hub zapewnia bezpieczny kanał komunikacyjny dla urządzeń do wysyłania danych. IoT Hub i zestawy SDK urządzeń obsługują następujące protokoły do łączenia urządzeń:
MQTT
MQTT przez WebSockets
Wiele typów uwierzytelniania obsługuje różnorodne możliwości urządzeń:
SAS uwierzytelnianie oparte na tokenach w celu szybkiego uruchomienia rozwiązania IoT.
Uwierzytelnianie przy użyciu indywidualnych certyfikatów X.509 — bezpieczna, oparta na standardach metoda uwierzytelniania.
TsgcIoTAzure_MQTT_Client to komponent służący do połączenia z Azure IoT. Jeden klient może połączyć się tylko z jednym urządzeniem. Klient łączy się przy użyciu protokołu MQTT i uwierzytelnia się za pomocą SAS / certyfikatu klienta X.509.
Aby połączyć się z Azure IoT Hub, klient musi mieć skonfigurowane następujące właściwości:
Azure.IoTHub: nazwa serwera, z którym połączy się klient MQTT.
Azure.DeviceId: nazwa urządzenia w Azure IoT Hub.
Azure obsługuje wiele typów uwierzytelniania; domyślnie stosowane są tokeny SAS.
Uwierzytelnianie SAS
SAS.Enabled: włącz jeśli uwierzytelnianie używa SAS.
SAS.SecretKey: token SAS z konta Azure IoT.
SAS.KeyName: nazwa klucza dostępu współdzielonego.
SAS.Expiry: ustawia liczbę minut przed wygaśnięciem tokenu SAS. Wartość domyślna to 1440 (24 godziny).
Jeśli posiadasz parametry połączenia, możesz odczytać ich wartości automatycznie za pomocą metody ReadConnectionString. Przykład:
ReadConnectionString('HostName=yourhub.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=Yj7RRPnkSDTv+UCFLgwIP/FrbDymZv4qVAIoTLHUFR8=');
Certyfikaty X509
Używanie OpenSSL jako IOHandler
Certificate.Enabled: włącz, jeśli uwierzytelnianie używa certyfikatów.
Certificate.CertFile: ścieżka do certyfikatu klienta X.509.
Certificate.KeyFile: ścieżka do pliku klucza klienta X.509.
Certificate.Password: hasło certyfikatu, jeśli zostało ustawione.
Version: Wersja TLS, domyślnie TLS 1.0
Użycie SChannel jako IOHandler
Certificate.Enabled: włącz, jeśli uwierzytelnianie używa certyfikatów.
Certificate.CertFile: ścieżka do certyfikatu PFX (certyfikat musi zostać wcześniej przekonwertowany do formatu PFX). Więcej informacji.
Certificate.Password: hasło certyfikatu, jeśli zostało ustawione.
Version: Wersja TLS, domyślnie TLS 1.0
Inne właściwości:
MQTTHeartBeat: jeśli włączone, próbuje utrzymać połączenie MQTT wysyłając ping co x sekund.
Interval: liczba sekund pomiędzy kolejnymi pingami.
WatchDog: jeżeli jest włączony, w przypadku wykrycia nieoczekiwanego rozłączenia podejmuje automatyczną próbę ponownego połączenia z serwerem.
Interval: liczba sekund przed kolejnymi próbami ponownego połączenia.
Attempts: maksymalna liczba prób ponownego połączenia; zero oznacza bez ograniczeń.
LogFile: jeśli włączone, zapisuje wiadomości gniazda do pliku dziennika (przydatne do debugowania). Dostęp do pliku dziennika nie jest bezpieczny wątkowo, gdy jest dostępny z wielu wątków.
Enabled: jeśli włączone, każda wiadomość odebrana i wysłana przez gniazdo będzie zapisywana do pliku.
FileName: pełna ścieżka do pliku.
Implementacja Azure MQTT opiera się na protokole MQTT w wersji 3.1.1, lecz odbiega od specyfikacji w następujący sposób:
IoT Hub nie obsługuje wiadomości z QoS 2. Jeśli aplikacja urządzenia opublikuje wiadomość z QoS 2, IoT Hub zamknie połączenie sieciowe.
IoT Hub nie przechowuje wiadomości Retain. Jeśli urządzenie wyśle wiadomość z flagą RETAIN ustawioną na 1, IoT Hub dodaje właściwość aplikacji x-opt-retain do wiadomości. W tym przypadku, zamiast przechowywać wiadomość retain, IoT Hub przekazuje ją do aplikacji zaplecza.
IoT Hub obsługuje tylko jedno aktywne połączenie MQTT na urządzenie. Każde nowe połączenie MQTT dla tego samego identyfikatora urządzenia powoduje, że IoT Hub zrywa istniejące połączenie.
Najpierw należy zalogować się na konto Azure, zarejestrować nowe urządzenie i utworzyć metodę uwierzytelniania dla tego urządzenia. Po wykonaniu tych kroków można utworzyć nowy TsgcIoTAzure_MQTT_Client i połączyć się z Azure IoT Hub.
Na przykład:
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;
Przy wysyłaniu informacji z aplikacji urządzenia do zaplecza rozwiązania, IoT Hub udostępnia następujące opcje:
1. Wiadomości z urządzenia do chmury dla szeregów czasowych telemetrii i alertów.
oClient.Send_DeviceToCloud('{"temp": 10}', azuIoTQoS1);
Właściwości klucz-wartość można przesyłać za pomocą obiektu TStringList. Wystarczy wypełnić obiekt TStringList żądanymi właściwościami wiadomości i przekazać go jako 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;
Jeśli konieczne jest ustawienie właściwości ContentType i ContentEncoding wiadomości, należy dodać te wartości do listy Properties. Nazwy tych właściwości są określone przez Azure.
| Nazwa | Wartość |
| $.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. Zgłaszane właściwości bliźniaka urządzenia służące do raportowania informacji o stanie urządzenia, takich jak dostępne możliwości, warunki lub stan długotrwałych przepływów pracy. Na przykład aktualizacje konfiguracji i oprogramowania.
oClient.Set_DeviceTwinsProperties('1', '{"sgc":1}');
IoT Hub oferuje trzy opcje dla aplikacji urządzeń, które chcą udostępnić funkcjonalność aplikacji zaplecza:
1. Metody bezpośrednie do komunikacji wymagającej natychmiastowego potwierdzenia wyniku. Metody bezpośrednie są często stosowane do interaktywnego sterowania urządzeniami, na przykład do włączania wentylatora.
oClient.Subscribe_DirectMethod;
Na metody publiczne można odpowiadać przy użyciu następującej metody.
oClient.RespondPublicMethod(RequestId, Status, 'Your Response', azuIoTQoS1);
2. Żądane właściwości bliźniaka dla długotrwałych poleceń mających na celu przełączenie urządzenia w określony pożądany stan. Na przykład ustaw interwał wysyłania telemetrii na 30 minut. Właściwości można odczytać za pomocą poniższej metody.
oClient.Get_DeviceTwinsProperties('1');
3. Wiadomości z chmury do urządzenia służące do jednokierunkowych powiadomień dla aplikacji na urządzeniu. Aby odbierać wiadomości, należy najpierw zasubskrybować odpowiedni temat.
oClient.Subscribe_CloudToDevice;
Wiadomości są odbierane w zdarzeniu OnMQTTPublish (ładunek tekstowy) lub OnMQTTPublishEx (ładunek jako TsgcWSMQTTPublishData z właściwościami Value, Bytes i Stream).
procedure TFRMSGCClientIoT.AzureIoTMQTTPublish(Connection: TsgcWSConnection; aTopic, aText: string);
begin
DoLog('Received Message: ' + aTopic + ' ' + aText);
end;
Centrum IoT ułatwia przesyłanie plików z podłączonych urządzeń, udostępniając im URI z podpisem dostępu współdzielonego (SAS) lub certyfikaty X509.
W przypadku wybrania opcji SAS należy ustawić następujące właściwości:
Jeśli wybrane zostaną certyfikaty X509, należy ustawić następujące właściwości:
Należy użyć metody UploadFile w celu przesłania pliku na serwery Azure. Jeśli parametr Overwrite ma wartość true, istniejący plik zostanie zastąpiony. Jeśli parametr Overwrite ma wartość false, plik zostanie przesłany tylko wtedy, gdy nie istnieje; jeśli już istnieje, zostanie zgłoszony błąd (jest to opcja domyślna).
procedure UploadFileToAzure;
begin
oDialog := TOpenDialog.Create(nil);
Try
if oDialog.Execute then
AzureIoT.UploadFile(oDialog.FileName);
Finally
oDialog.Free;
End;
end;
Azure IoT umożliwia rejestrowanie urządzeń z poziomu kodu przy użyciu DPS. Biblioteka obsługuje obecnie rejestrowanie urządzenia poprzez przekazanie Scope Id i Registration Id jako parametrów.
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;
Aplikacja Azure IoT Explorer umożliwia interakcję z urządzeniami podłączonymi do centrum IoT Hub. Można w niej przeglądać odebrane wiadomości telemetryczne, zarejestrowane urządzenia i inne informacje. Aplikacja jest bezpłatna i można ją pobrać pod adresem:
https://github.com/Azure/azure-iot-explorer/releases