IoT Hub, IoT uygulamanız ile yönettiği cihazlar arasında çift yönlü iletişim için merkezi bir mesaj merkezi görevi gören, bulutta barındırılan yönetilen bir hizmettir. Azure IoT Hub'ı, milyonlarca IoT cihazı ile bulutta barındırılan bir çözüm arka ucu arasında güvenilir ve güvenli iletişimlerle IoT çözümleri oluşturmak için kullanabilirsiniz. Hemen hemen her cihazı IoT Hub'a bağlayabilirsiniz.
IoT Hub, hem cihazdan buluta hem de buluttan cihaza iletişimleri destekler. IoT Hub, cihazdan buluta telemetri, cihazlardan dosya yükleme ve buluttan cihazlarınızı kontrol etmek için istek-yanıt yöntemleri gibi birden çok mesajlaşma desenini destekler. IoT Hub izleme, cihaz oluşturma, cihaz arızaları ve cihaz bağlantıları gibi olayları izleyerek çözümünüzün sağlığını korumanıza yardımcı olur.
IoT Hub'ın yetenekleri, imalatta kullanılan endüstriyel ekipmanları yönetmek, sağlık hizmetlerinde değerli varlıkları izlemek ve ofis binası kullanımını izlemek gibi ölçeklenebilir, tam özellikli IoT çözümleri oluşturmanıza yardımcı olur.
IoT Hub, cihazlarınızın veri göndermesi için güvenli bir iletişim kanalı sağlar. IoT Hub ve cihaz SDK'leri, cihazları bağlamak için aşağıdaki protokolleri destekler:
MQTT
WebSockets üzerinden MQTT
Birden çok kimlik doğrulama türü, çeşitli cihaz yeteneklerini destekler:
IoT çözümünüze hızlıca başlamak için SAS token tabanlı kimlik doğrulaması.
Güvenli, standartlara dayalı kimlik doğrulama için bireysel X.509 sertifikası kimlik doğrulaması.
TsgcIoTAzure_MQTT_Client, Azure IoT'ye bağlanmak için kullanılan bileşendir. Bir istemci yalnızca bir cihaza bağlanabilir. İstemci, düz MQTT protokolünü kullanarak bağlanır ve SAS / X.509 Client Certificate kullanarak kimlik doğrular.
Azure IoT Hub'a bağlanmak için, istemcinin aşağıdaki özelliklere ihtiyacı vardır:
Azure.IoTHub: MQTT istemcisinin bağlanacağı sunucu adı.
Azure.DeviceId: azure IoT Hub'daki cihazın adı.
Azure birden çok kimlik doğrulama türüne izin verir, varsayılan olarak SAS token'larını kullanır.
SAS Kimlik Doğrulaması
SAS.Enabled: kimlik doğrulama SAS kullanıyorsa etkinleştirin.
SAS.SecretKey: Azure IoT Hesabınızdan SAS Token.
SAS.KeyName: Paylaşılan Erişim Anahtarı Adı.
SAS.Expiry: SAS Token süresinin dolmasından önceki dakika sayısını ayarlayın. Varsayılan değer 1440'tır (24 saat).
Bir bağlantı dizeniz varsa, ReadConnectionString yöntemini kullanarak bağlantı dizesi değerlerini otomatik olarak okuyabilirsiniz. Örnek:
ReadConnectionString('HostName=yourhub.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=Yj7RRPnkSDTv+UCFLgwIP/FrbDymZv4qVAIoTLHUFR8=');
X509 Certificates
OpenSSL'yi IOHandler olarak Kullanma
Certificate.Enabled: kimlik doğrulama sertifikalar kullanıyorsa etkinleştirin.
Certificate.CertFile: X.509 istemci sertifikasının yolu.
Certificate.KeyFile: X.509 istemci anahtar dosyasının yolu.
Certificate.Password: sertifikanın bir parolası varsa buraya ayarlayın.
Version: TLS sürümü, varsayılan olarak TLS 1.0 kullanır
IOHandler olarak SChannel kullanımı
Certificate.Enabled: kimlik doğrulama sertifikalar kullanıyorsa etkinleştirin.
Certificate.CertFile: PFX sertifikasının yolu (önce sertifikanın PFX'e dönüştürülmesi gerekir). Daha Fazla Bilgi.
Certificate.Password: sertifikanın bir parolası varsa buraya ayarlayın.
Version: TLS sürümü, varsayılan olarak TLS 1.0 kullanır
Diğer özellikler:
MQTTHeartBeat: etkinleştirilirse, her x saniyede bir ping göndererek MQTT bağlantısını canlı tutmaya çalışır.
Interval: her ping arasındaki saniye sayısı.
WatchDog: etkinleştirilirse, beklenmeyen bir bağlantı kesilmesi algılandığında, sunucuya otomatik olarak yeniden bağlanmaya çalışır.
Interval: yeniden bağlanma denemelerinden önceki saniyeler.
Attempts: maksimum yeniden bağlanma deneme sayısı; sıfır sınırsız anlamına gelir.
LogFile: etkinleştirilirse, soket mesajlarını bir günlük dosyasına kaydeder (hata ayıklama için yararlıdır). Günlük dosyasına erişim, birkaç thread'den erişilirse thread güvenli değildir.
Enabled: etkinleştirilirse, soket aracılığıyla her mesaj alındığında ve gönderildiğinde bir dosyaya kaydedilir.
FileName: dosya adının tam yolu.
Azure MQTT uygulaması MQTT sürüm 3.1.1'e dayanır ancak spesifikasyondan şu şekilde sapar:
IoT Hub, QoS 2 mesajlarını desteklemez. Bir cihaz uygulaması QoS 2 ile bir mesaj yayınlarsa, IoT Hub ağ bağlantısını kapatır.
IoT Hub, Retain mesajlarını kalıcı hale getirmez. Bir cihaz RETAIN bayrağı 1 olarak ayarlanmış bir mesaj gönderirse, IoT Hub mesaja x-opt-retain uygulama özelliğini ekler. Bu durumda, IoT Hub retain mesajını kalıcı hale getirmek yerine onu arka uç uygulamasına geçirir.
IoT Hub, cihaz başına yalnızca bir aktif MQTT bağlantısını destekler. Aynı cihaz kimliği adına yapılan herhangi bir yeni MQTT bağlantısı, IoT Hub'ın mevcut bağlantıyı bırakmasına neden olur.
Önce Azure hesabınızda oturum açmalı, yeni bir cihaz kaydetmeli ve bu cihaz için bir kimlik doğrulama yöntemi oluşturmalısınız. Bu yapıldıktan sonra, yeni bir TsgcIoTAzure_MQTT_Client oluşturabilir ve Azure IoT Hub'a bağlanabilirsiniz.
Örneğin:
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;
Cihaz uygulamasından çözüm arka ucuna bilgi gönderirken, IoT Hub aşağıdaki seçenekleri sunar:
1. Zaman serisi telemetrisi ve uyarılar için Aygıttan buluta mesajlar.
oClient.Send_DeviceToCloud('{"temp": 10}', azuIoTQoS1);
Bir TStringList kullanarak anahtar-değer özellikleri gönderebilirsiniz, TStringList'i istediğiniz mesaj özellikleriyle doldurun ve bunları argüman olarak geçirin.
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;
Mesajın ContentType ve ContentEncoding değerini ayarlamanız gerekirse, bu değerleri Properties Listesine eklemelisiniz. Bu özelliklerin adları Azure tarafından tanımlanır.
| 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. Kullanılabilir yetenekler, koşullar veya uzun süre çalışan iş akışlarının durumu gibi cihaz durumu bilgilerini raporlamak için Device twin'in raporlanan özellikleri. Örneğin, yapılandırma ve yazılım güncellemeleri.
oClient.Set_DeviceTwinsProperties('1', '{"sgc":1}');
IoT Hub, cihaz uygulamalarının işlevselliği bir back-end uygulamasına sunması için üç seçenek sağlar:
1. Sonucun anında onaylanmasını gerektiren iletişimler için Direct methods. Direct methods, genellikle bir fanı açmak gibi cihazların etkileşimli kontrolü için kullanılır.
oClient.Subscribe_DirectMethod;
Aşağıdaki yöntemi kullanarak genel yöntemlere yanıt verebilirsiniz.
oClient.RespondPublicMethod(RequestId, Status, 'Your Response', azuIoTQoS1);
2. Cihazı belirli bir istenen duruma getirmeyi amaçlayan uzun süreli komutlar için Twin'in istenen özellikleri. Örneğin, telemetri gönderme aralığını 30 dakikaya ayarlayın. Aşağıdaki yöntemi kullanarak özellikleri alabilirsiniz.
oClient.Get_DeviceTwinsProperties('1');
3. Cihaz uygulamasına tek yönlü bildirimler için Cloud-to-device mesajları. Mesaj almak için önce abone olmanız gerekir.
oClient.Subscribe_CloudToDevice;
Mesajlar OnMQTTPublish olayında (metin yükü) veya OnMQTTPublishEx olayında (Value, Bytes ve Stream özelliklerine sahip TsgcWSMQTTPublishData olarak yük) alınır.
procedure TFRMSGCClientIoT.AzureIoTMQTTPublish(Connection: TsgcWSConnection; aTopic, aText: string);
begin
DoLog('Received Message: ' + aTopic + ' ' + aText);
end;
IoT hub, bağlı cihazlara paylaşılan erişim imzası (SAS) URI'leri veya X509 sertifikaları sağlayarak onlardan dosya yüklemelerini kolaylaştırır.
SAS seçerseniz, aşağıdaki özellikleri ayarlamanız gerekir:
X509 sertifikalarını seçerseniz, aşağıdaki özellikleri ayarlamanız gerekir:
Azure Sunucularına bir dosya yüklemek için UploadFile yöntemini kullanın. Overwrite parametresi true olarak ayarlanmışsa, mevcut dosyanın üzerine yazar. Overwrite parametresi false olarak ayarlanmışsa, yalnızca dosya yoksa yükler ve varsa bir hata oluşturur (bu varsayılan seçenektir).
procedure UploadFileToAzure;
begin
oDialog := TOpenDialog.Create(nil);
Try
if oDialog.Execute then
AzureIoT.UploadFile(oDialog.FileName);
Finally
oDialog.Free;
End;
end;
Azure IoT, cihazları DPS kullanarak koddan kaydetmenize olanak tanır. Şu anda, kütüphane Scope Id ve Registration Id'yi parametre olarak geçirerek bir cihaz kaydetmeyi destekler.
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;
IoT Hub'ınıza bağlı cihazlarla etkileşim kurmak için Azure IoT Explorer uygulamasını kullanabilirsiniz. Alınan telemetri mesajlarını, kayıtlı cihazları ve daha fazlasını görebilirsiniz. Uygulama ücretsizdir ve şu adresten indirilebilir:
https://github.com/Azure/azure-iot-explorer/releases