IoT uygulamadan cihaza verilen komutlar

Azure IoT Hub

Uygulamalar IoT cihazlarına komut göndermek için buluttan cihaza mesajlaşma ve doğrudan yöntemler olmak üzere iki birincil mekanizma kullanır.

  • Uygulamalar, cihazların bağlandığında okuması için IoT platformundaki cihaza özgü ileti kuyruklarına buluttan cihaza iletiler gönderir. İletilerin ne zaman okunacaklarına cihazlar karar verir.

  • Uygulamalar, ayrılmış IoT cihaz uç noktaları üzerinden istek-yanıt deseni kullanarak doğrudan bağlı cihazlarda doğrudan yöntemleri çağırır.

Bu makalede buluttan cihaza mesajlaşmanın özellikleri ve doğrudan yöntemler ele alınmaktadır. Makalede ayrıca protokol ağ geçitleri ve bağlı bekleme cihazlarıyla doğrudan yöntemlerin nasıl kullanılacağı da açıklanır.

Buluttan cihaza mesajlaşma

Uygulamalar, belirli cihazlar için buluttan cihaza komut iletilerini Azure IoT Hub gönderir ve bu da iletileri cihaza özgü kuyruklarda depolar. IoT Hub, cihazların bağlı olup olmadığına bakılmaksızın iletileri cihaza özgü kuyruklara teslim eder.

IoT Hub her cihaz için bir iç ileti kuyruğunda iletileri nasıl depolayıp bu iletileri yoklayan cihazları gösteren diyagram.

Buluttan cihaza mesajlaşma kullanılırken aşağıdaki noktalar geçerlidir:

  • İleti kuyrukları cihazlar için posta kutuları görevi görür ve cihazlar bağlı olduklarında yeni iletiler için ileti kuyruklarını yoklamaktan sorumludur.
  • Cihazlar iletileri ilk gelen ilk çıkar şekilde alır ve bu da buluttan cihaza mesajlaşmayı iletileri sırayla okumak ve iletiler üzerinde hareket etmek için ideal hale getirir.
  • İletilerin yapılandırılabilir bir süre sonu vardır, bu nedenle okunmamış iletiler sonunda cihazın ileti kuyruğundan kaldırılabilir.
  • Durum bilgisi olan iletişim için, uygulamalar ileti teslim ve onay durumunu izlemek için geri bildirim alıcısını kullanabilir. Uygulama, tüm cihazlar için tüm ileti kuyruklarını izlemek için tek bir geri bildirim alıcısı kullanabilir.

Doğrudan yöntemler

Uygulamalar doğrudan bağlı IoT cihazlarında doğrudan yöntemleri çağırır ve cihazların yöntemleri yürütüp IoT Hub kaydetmesini bekler. IoT Hub doğrudan kanallar üzerinden bağlı cihazlarda doğrudan yöntemleri çağırır ve cihazlar işlevleri yürütmek ve anında sonuçlar döndürmekten sorumludur.

IoT Hub doğrudan yöntemleri kullanarak kodu doğrudan tek bir cihazda nasıl çağırılacağını gösteren diyagram.

Doğrudan yöntemler kullanılırken aşağıdaki noktalar geçerlidir:

  • Yöntem tamamlanmadan önce IoT Hub ile cihaz arasında bağlantı kesilirse doğrudan yöntemler başarısız olur. Uygulamalar komutları yeniden denemek için hataları yakalayabilir ve işleyebilir.
  • Kuyruk olmadığından, doğrudan yöntemlerin sıralanması gereken uygulamaların yöntem çağrılarının sıralamasını yönetmesi gerekir; böylece önceki yöntemin tamamlanması sonraki yöntemi çağırır.
  • Doğrudan yöntemleri çağırmak, bir uygulamanın iki zaman aşımı ayarlamasına olanak tanır. Bir zaman aşımı, IoT Hub bir cihazın vazgeçmeden önce bağlanması için ne kadar beklemesi gerektiğini, diğer zaman aşımı ise çağıranın vazgeçmeden önce yöntemin tamamlanmasını ve yanıtlanmasını ne kadar beklemesi gerektiğini belirtir.

Protokol ağ geçitleri ile doğrudan yöntemler

Protokol ağ geçitlerini kullanan IoT uygulamaları, doğrudan yöntemlerin bağlantı zorlama ve istek-yanıt modelinden yararlanabilir. Bulut veya protokol ağ geçitleri, özel protokol iletişimlerine aracılık etmek için cihazlar adına hareket ederek önceden var olan ve farklı cihazları IoT Hub bağlamaya olanak tanır. Protokol ağ geçitleri aynı şekilde, yöntemleri cihaz uyumlu protokol iletilerine seri hale getirerek doğrudan yöntem modelini soyutlayabilir.

Bir cihazdan IoT Hub özel protokol iletişimine aracılık etmek için protokol ağ geçidini kullanmaya yönelik doğrudan yöntem çağrılarının sırasını gösteren diyagram.

  1. Uygulama, protokol ağ geçidinde cihaz adına doğrudan yöntemi çağırır.
  2. Yöntem uygulaması için ağ geçidi, yöntemi cihaza özgü bir protokole çevirir ve iletiyi cihaza gönderir. Cihaz, bulut uygulamasında yapılan herhangi bir değişikliğin farkında değildir.
  3. Cihaz iletiyi tamamlayıp yanıtladığında ağ geçidi cihaza özgü durumu yöntem yanıtına çevirir.
  4. IoT Hub çağıran için bir yöntem sonucu doldurarak doğrudan yöntemi tamamlar.

Azure Protokol Ağ Geçidi açık kaynak projesi, doğrudan yöntemleri MQTT protokol iletilerine yerel olarak çevirir, kolayca genişletilebilir ve diğer protokol bağdaştırıcıları için bu programlama modelini gösterir.

Bağlı bekleme cihazları

IoT komut senaryoları, etkin olmadığında düşük güçte ve boşta durumda olan bağlı bekleme cihazlarını içerebilir. Mobil Kısa İleti Hizmeti (SMS) gibi mekanizmalar, bu cihazları tamamen çalışır duruma getirmek için uyandırma sinyalleri gönderebilir.

Azure IoT API'leri aracılığıyla gönderilen SMS iletilerinin veya komutların bir cihazı nasıl uyandırıp komut almak için IoT Hub'a bağlayabileceğini gösteren diyagram.

  1. Uygulama, ServiceClient API'sini kullanarak cihazlara komut gönderir. ServiceClient'ın bir örneği birden çok cihaz için ileti gönderebilir ve yöntemleri çağırabilir.
  2. Uygulama ayrıca mobil sağlayıcının SMS ağ geçidi üzerinden bekleme cihazlarına SMS uyandırma çağrıları gönderir.
  3. Uyandırmada, bekleme cihazları IoT Hub bağlanmak ve komutları almak için DeviceClient API'sini kullanır. DeviceClient'ın bir örneği, IoT Hub bağlı tek bir cihazı temsil eder.

Cihaz bağlantı durumunu belirlemek için doğrudan yöntemleri kullanma

SMS ağ geçitleri aracılığıyla gereksiz uyandırma iletileri göndermek maliyetlidir. Bir cihaza gerçek komutları göndermeden önce, bağlantı ve yöntem zaman aşımlarını kullanarak cihazın bağlı olup olmadığını belirleyin ve gerekirse bir uyandırma gönderin.

    TimeSpan connTimeOut = FromSeconds(0); // Period to wait for device to connect.
    TimeSpan funcTimeOut = FromSeconds(30); // Period to wait for method to execute.

    while (true) {
        // Send the command via direct method. Initially use a timeout of zero
        // for the connection, which determines whether the device is connected to
        // IoT Hub or needs an SMS wakeup sent to it.

        var method = new CloudToDeviceMethod("RemoteCommand", funcTimeOut, connTimeOut);
        methodInvocation1.SetPayloadJson(CommandPayload);

        var response = await serviceClient.InvokeDeviceMethodAsync(deviceId, method);

        // [DeviceNotConnected] represents a return value from the CloudToDeviceMethod
        // method. That method is not implemented in this sample.
        if (response == [DeviceNotConnected] && connTimeOut == 0) {
            // The device is not currently connected and needs an SMS wakeup. This
            // device should wake up within a period of < 30 seconds. Send the wakeup
            // and retry the method request with a 30 second timeout on waiting for
            // the device to connect.

            connTimeOut = FromSeconds(30); // Set a 30 second connection timeout.
            SendAsyncSMSWakeUpToDevice(); // Send SMS wakeup through mobile gateway.
            continue; // Retry with new connection timeout.
        } else {
            // The method either succeeded or failed.
            ActOnMethodResult(var);
            break;
        }
    }

Bağlantıyı denetlemek için, basit bir ping uygulamak için bağlantı zaman aşımı sıfır olan boş bir yöntem kullanın. Örneğin:

var method = new CloudToDeviceMethod("Ping", 0, 0);

Katkıda Bulunanlar

Bu makale Microsoft tarafından yönetilir. Başlangıçta aşağıdaki katkıda bulunanlar tarafından yazılmıştır.

Asıl yazar:

Sonraki adımlar