IoT Azure MQTT Client

Azure IoT Hub Nedir?

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.

 

Mesaj broker'ı

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:

 

 

Birden çok kimlik doğrulama türü, çeşitli cihaz yeteneklerini destekler:

 

 

 

MQTT Client

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:

 

 

Azure IoT Hub'a Bağlanma

Ö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;

Device To Cloud

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}');

Cloud To Device

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;

Dosya Yükle

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;

Device Provisioning Service

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;

 

Azure IoT Explorer

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