Aracılığıyla paylaş


Cihaz Güncelleştirmesi ile bileşenleri kaydetme

Bu makalede, IoT Hub bileşen numaralandırıcısı için örnek bir Cihaz Güncelleştirmesi uygulaması gösterilmektedir. IoT cihazlarınız için özel bir bileşen numaralandırıcısı uygulamak için bu örne başvurabilirsiniz. Bileşen, konak cihazla oluşturma ilişkisi olan cihaz düzeyinin altındaki bir kimliktir.

Bu makalede, Contoso Virtual Vacuum adlı bir sanal IoT cihazı kullanan bir bileşen numaralandırıcısı gösterilmektedir. Bileşen numaralandırıcıları ara sunucu güncelleştirme özelliğini uygulamak için kullanılır.

Proxy güncelleştirmesi, aynı IoT cihazında birden çok bileşenin veya IoT cihazına bağlı birden çok algılayıcının tek bir havadan dağıtımla güncelleştirilmesini sağlar. Ara sunucu güncelleştirmesi, bileşenleri güncelleştirmek için yükleme sırasını destekler. Ayrıca yükleme öncesi, yükleme ve yükleme sonrası özellikleriyle birden çok adımlı güncelleştirmeyi destekler.

Ara sunucu güncelleştirmelerinin geçerli olduğu kullanım örnekleri şunlardır:

  • Belirli güncelleştirme dosyalarını cihazdaki bölümlere hedefleme.
  • Belirli güncelleştirme dosyalarını cihazdaki uygulamalara veya bileşenlere hedefleme.
  • Belirli güncelleştirme dosyalarını bir ağ protokolü (örneğin, USB veya CAN veri yolu) üzerinden IoT cihazlarına bağlı algılayıcılara hedefleme.

Daha fazla bilgi için bkz . Ara sunucu güncelleştirmeleri ve çok bileşenli güncelleştirme.

Cihaz Güncelleştirme aracısı konak cihazda çalışır. Her güncelleştirmeyi belirli bir bileşene veya aynı donanım sınıfındaki bir bileşen grubuna (aynı yazılım veya üretici yazılımı güncelleştirmesi gerektiren) gönderebilir.

Bileşen numaralandırıcısı nedir?

Bileşen numaralandırıcısı, bir ana cihazın Azure IoT Hub bağlantısı aracılığıyla havadan güncelleştirme için ihtiyacınız olan her bileşen hakkında bilgi sağlayan Cihaz Güncelleştirmesi aracısının uzantısıdır.

Cihaz Güncelleştirme aracısı cihaz ve bileşenden bağımsızdır. Aracı, güncelleştirme sırasında bir konak cihazındaki (veya bu cihaza bağlı olan) bileşenler hakkında tek başına hiçbir şey bilmez.

Ara sunucu güncelleştirmelerini etkinleştirmek için, cihaz oluşturucularının cihazdaki güncelleştirilebilecek tüm bileşenleri tanımlaması ve her bileşene benzersiz bir ad ataması gerekir. Ayrıca, aynı donanım sınıfının bileşenlerine bir grup adı atanabilir, böylece aynı güncelleştirme aynı gruptaki tüm bileşenlere yüklenebilir. Ardından, güncelleştirme içerik işleyicisi güncelleştirmeyi yükleyebilir ve doğru bileşenlere uygulayabilir.

Ara sunucu güncelleştirme akışını gösteren diyagram.

Ara sunucu güncelleştirme akışının her bir bölümünün sorumlulukları şunlardır:

  • Cihaz oluşturucu

    • Cihazı tasarlayıp oluşturun.

    • Cihaz Güncelleştirme aracısını ve bağımlılıklarını tümleştirin.

    • Cihaza özgü bir bileşen numaralandırıcı uzantısı uygulayın ve Cihaz Güncelleştirmesi aracısıyla kaydolun.

      Bileşen numaralandırıcısı, statik bileşen verilerini (Cihaz Güncelleştirmesi gerekiyor) dinamik verilerle (örneğin, üretici yazılımı sürümü, bağlantı durumu ve donanım kimliği) artırmak için bileşen envanterinden veya yapılandırma dosyasından alınan bilgileri kullanır.

    • Cihazda bir veya daha fazla bileşeni hedefleyen (veya bağlanan) bir veya daha fazla alt güncelleştirme içeren bir proxy güncelleştirmesi oluşturun.

    • Güncelleştirmeyi çözüm operatörüne gönderin.

  • Çözüm işleci

    • Güncelleştirmeyi ve bildirimi Cihaz Güncelleştirmesi hizmetine aktarın.

    • Güncelleştirmeyi bir cihaz grubuna dağıtın.

  • Cihaz Güncelleştirme aracısı

    • Cihaz ikizi veya modül ikizi aracılığıyla IoT Hub güncelleştirme bilgilerini alın.

    • Cihazdaki bir veya daha fazla bileşene yönelik proxy güncelleştirmesini işlemek için bir adım işleyicisi çağırın.

      Bu makaledeki örnekte iki güncelleştirme vardır: host-fw-1.1 ve motors-fw-1.1. Her alt güncelleştirme için üst adım işleyicisi, alt güncelleştirmenin bildirim dosyasında belirtilen özelliklerle eşleşen Compatibilities tüm bileşenleri listelemek için bir alt adım işleyicisi çağırır. Ardından işleyici alt güncelleştirmeyi indirir, yükler ve hedeflenen tüm bileşenlere uygular.

      Eşleşen bileşenleri almak için alt güncelleştirme, bileşen numaralandırıcısı tarafından sağlanan bir SelectComponents API'yi çağırır. Eşleşen bileşen yoksa alt güncelleştirme atlanır.

    • Üst ve alt güncelleştirmelerden tüm güncelleştirme sonuçlarını toplayın ve bu sonuçları IoT Hub bildirin.

  • Alt adım işleyicisi

    • Alt güncelleştirme içeriğiyle uyumlu bileşen örneklerinin listesini yineleyin. Daha fazla bilgi için bkz . Adım işleyicisi.

Üretimde, cihaz oluşturucuları mevcut işleyicileri kullanabilir veya havadan güncelleştirme için gereken yükleyicileri çağıran özel bir işleyici uygulayabilir. Daha fazla bilgi için bkz. Özel güncelleştirme içerik işleyicisi uygulama.

Sanal Vakum bileşenleri

Bu makalede, temel kavramları ve özellikleri göstermek için bir sanal IoT cihazı kullanırız. Contoso Sanal Vakum cihazı beş mantıksal bileşenden oluşur:

  • Ana bilgisayar üretici yazılımı
  • Konak önyükleme dosyası sistemi
  • Konak kök dosya sistemi
  • Üç motor (sol tekerlek, sağ tekerlek ve vakum)
  • İki kamera (ön ve arka)

Contoso Sanal Vakum bileşenlerini gösteren diyagram.

Aşağıdaki dizin yapısı bileşenlerin benzetimini yapar:

/usr/local/contoso-devices/vacuum-1/hostfw
/usr/local/contoso-devices/vacuum-1/bootfs
/usr/local/contoso-devices/vacuum-1/rootfs
/usr/local/contoso-devices/vacuum-1/motors/0   /* left motor */
/usr/local/contoso-devices/vacuum-1/motors/1   /* right motor */
/usr/local/contoso-devices/vacuum-1/motors/2   /* vacuum motor */
/usr/local/contoso-devices/vacuum-1/cameras/0  /* front camera */
/usr/local/contoso-devices/vacuum-1/cameras/1  /* rear camera */

Her bileşenin dizini, her bileşenin sahte yazılım sürüm numarasını depolayan bir JSON dosyası içerir. Örnek JSON dosyaları firmware.json ve diskimage.json dosyalarıdır.

Bu tanıtımda bileşenlerin üretici yazılımını güncelleştirmek için firmware.json veya diskimage.json dosyasını (güncelleştirme yükü) hedeflenen bileşenlerin dizinine kopyalayacağız.

İşte örnek bir firmware.json dosyası:

{
    "version": "0.5",
    "description": "This component is generated for testing purposes."
}

Not

Contoso Virtual Vacuum, ara sunucu güncelleştirmesini göstermek amacıyla yazılım veya üretici yazılımı sürümleri içerir. Başka bir işlev sağlamaz.

Bileşen numaralandırıcısı uygulama (C dili)

Gereksinimler

component_enumerator_extension.hpp'de bildirilen tüm API'leri uygulayın:

İşlev Bağımsız değişkenler Döndürülenler
char* GetAllComponents() Hiçbiri TümComponentInfo değerlerin dizisini içeren bir JSON dizesi. Daha fazla bilgi için bkz . Örnek dönüş değerleri.
char* SelectComponents(char* selector) Güncelleştirme hedef bileşenlerini seçmek için kullanılan bir veya daha fazla ad/değer çifti içeren bir JSON dizesi Değer dizisi ComponentInfo içeren bir JSON dizesi. Daha fazla bilgi için bkz . Örnek dönüş değerleri.
void FreeComponentsDataString(char* string) Daha önce veya SelectComponents işlevleri tarafından GetAllComponents döndürülen dize arabelleği işaretçisi Hiçbiri

ComponentInfo

ComponentInfo JSON dizesi aşağıdaki özellikleri içermelidir:

Ad Tür Description
id dize Bileşenin benzersiz kimliği (cihaz kapsamı). Örnek olarak donanım seri numarası, disk bölüm kimliği ve bileşenin benzersiz dosya yolu verilebilir.
name string Bileşenin mantıksal adı. Bu özellik, bir cihaz oluşturucusunun aynı device sınıfın her cihazında kullanılabilen bir bileşene atamış olduğu addır.

Örneğin, her Contoso Sanal Vakum cihazı sol tekerleği çalıştıran bir motor içerir. Contoso, genel olarak benzersiz olabilecek donanım kimliği yerine bu bileşene kolayca başvurmak için sol motoru bu motor için ortak (mantıksal) bir ad olarak atadı.
group string Bu bileşenin ait olduğu bir grup.

Örneğin, tüm motorlar bir motor grubuna ait olabilir.
manufacturer string Fiziksel donanım bileşeni için bu özellik bir üretici veya satıcı adıdır.

Disk bölümü veya dizin gibi mantıksal bir bileşen için, herhangi bir cihaz oluşturucus un tanımlı değeri olabilir.
model string Fiziksel donanım bileşeni için bu özellik bir model adıdır.

Disk bölümü veya dizin gibi mantıksal bir bileşen için bu özellik herhangi bir cihaz oluşturucus un tanımlı değeri olabilir.
properties object İsteğe bağlı cihaza özgü özellikleri içeren bir JSON nesnesi.

Contoso Sanal Vakum bileşenlerini temel alan bir kod örneği ComponentInfo aşağıda verilmiştir:

{
    "id": "contoso-motor-serial-00000",
    "name": "left-motor",
    "group": "motors",
    "manufacturer": "contoso",
    "model": "virtual-motor",
    "properties": {
        "path": "\/usr\/local\/contoso-devices\/vacuum-1\/motors\/0",
        "firmwareDataFile": "firmware.json",
        "status": "connected",
        "version" : "motor-fw-1.0"
    }
}

Örnek dönüş değerleri

aşağıda işlevinden döndürülen bir JSON belgesi yer alır GetAllComponents . Contoso Sanal Vakum bileşeni numaralandırıcısının örnek uygulamasını temel alır.

{
    "components": [
        {
            "id": "hostfw",
            "name": "hostfw",
            "group": "firmware",
            "manufacturer": "contoso",
            "model": "virtual-firmware",
            "properties": {
                "path": "\/usr\/local\/contoso-devices\/vacuum-1\/hostfw",
                "firmwareDataFile": "firmware.json",
                "status": "ok",
                "version" : "host-fw-1.0"
            }
        },
        {
            "id": "bootfs",
            "name": "bootfs",
            "group": "boot-image",
            "manufacturer": "contoso",
            "model": "virtual-disk",
            "properties": {
                "path": "\/usr\/local\/contoso-devices\/vacuum-1\/bootfs",
                "firmwareDataFile": "diskimage.json",
                "status": "ok",
                "version" : "boot-fs-1.0"
            }
        },
        {
            "id": "rootfs",
            "name": "rootfs",
            "group": "os-image",
            "manufacturer": "contoso",
            "model": "virtual-os",
            "properties": {
                "path": "\/usr\/local\/contoso-devices\/vacuum-1\/rootfs",
                "firmwareDataFile": "diskimage.json",
                "status": "ok",
                "version" : "root-fs-1.0"
            }
        },
        {
            "id": "contoso-motor-serial-00000",
            "name": "left-motor",
            "group": "motors",
            "manufacturer": "contoso",
            "model": "virtual-motor",
            "properties": {
                "path": "\/usr\/local\/contoso-devices\/vacuum-1\/motors\/0",
                "firmwareDataFile": "firmware.json",
                "status": "ok",
                "version" : "motor-fw-1.0"
            }
        },
        {
            "id": "contoso-motor-serial-00001",
            "name": "right-motor",
            "group": "motors",
            "manufacturer": "contoso",
            "model": "virtual-motor",
            "properties": {
                "path": "\/usr\/local\/contoso-devices\/vacuum-1\/motors\/1",
                "firmwareDataFile": "firmware.json",
                "status": "ok",
                "version" : "motor-fw-1.0"
            }
        },
        {
            "id": "contoso-motor-serial-00002",
            "name": "vacuum-motor",
            "group": "motors",
            "manufacturer": "contoso",
            "model": "virtual-motor",
            "properties": {
                "path": "\/usr\/local\/contoso-devices\/vacuum-1\/motors\/2",
                "firmwareDataFile": "firmware.json",
                "status": "ok",
                "version" : "motor-fw-1.0"
            }
        },
        {
            "id": "contoso-camera-serial-00000",
            "name": "front-camera",
            "group": "cameras",
            "manufacturer": "contoso",
            "model": "virtual-camera",
            "properties": {
                "path": "\/usr\/local\/contoso-devices\/vacuum-1\/camera\/0",
                "firmwareDataFile": "firmware.json",
                "status": "ok",
                "version" : "camera-fw-1.0"
            }
        },
        {
            "id": "contoso-camera-serial-00001",
            "name": "rear-camera",
            "group": "cameras",
            "manufacturer": "contoso",
            "model": "virtual-camera",
            "properties": {
                "path": "\/usr\/local\/contoso-devices\/vacuum-1\/camera\/1",
                "firmwareDataFile": "firmware.json",
                "status": "ok",
                "version" : "camera-fw-1.0"
            }
        }
    ]
}

İşlevden SelectComponents aşağıdaki JSON belgesi döndürülür. Contoso bileşen numaralandırıcısının örnek uygulamasını temel alır.

Motor bileşen grubunu seçmek için giriş parametresi aşağıdadır:

{
    "group" : "motors"
}

Parametresinin çıktısı aşağıdadır. Tüm bileşenler motor grubuna aittir.

{
    "components": [
        {
            "id": "contoso-motor-serial-00000",
            "name": "left-motor",
            "group": "motors",
            "manufacturer": "contoso",
            "model": "virtual-motor",
            "properties": {
                "path": "\/usr\/local\/contoso-devices\/vacuum-1\/motors\/0",
                "firmwareDataFile": "firmware.json",
                "status": "ok",
                "version" : "motor-fw-1.0"
            }
        },
        {
            "id": "contoso-motor-serial-00001",
            "name": "right-motor",
            "group": "motors",
            "manufacturer": "contoso",
            "model": "virtual-motor",
            "properties": {
                "path": "\/usr\/local\/contoso-devices\/vacuum-1\/motors\/1",
                "firmwareDataFile": "firmware.json",
                "status": "ok",
                "version" : "motor-fw-1.0"
            }
        },
        {
            "id": "contoso-motor-serial-00002",
            "name": "vacuum-motor",
            "group": "motors",
            "manufacturer": "contoso",
            "model": "virtual-motor",
            "properties": {
                "path": "\/usr\/local\/contoso-devices\/vacuum-1\/motors\/2",
                "firmwareDataFile": "firmware.json",
                "status": "ok",
                "version" : "motor-fw-1.0"
            }
        }
    ]
}

hostfw adlı tek bir bileşeni seçmek için giriş parametresi aşağıda verilmiştır:

{
    "name" : "hostfw"
}

Hostfw bileşeni için parametresinin çıkışı aşağıdadır:

{
    "components": [
        {
            "id": "hostfw",
            "name": "hostfw",
            "group": "firmware",
            "manufacturer": "contoso",
            "model": "virtual-firmware",
            "properties": {
                "path": "\/usr\/local\/contoso-devices\/vacuum-1\/hostfw",
                "firmwareDataFile": "firmware.json",
                "status": "ok",
                "version" : "host-fw-1.0"
            }
        }
    ]
}

Not

Yukarıdaki örnekte, gerekirse özellik tarafından name seçilen bir bileşenin herhangi bir örneğine daha yeni bir güncelleştirme göndermenin mümkün olduğu gösterilmiştir. Örneğin, sol ve sağ motorda kullanmaya motor-fw-1.0 devam ederken güncelleştirmeyi vacuum-motor'a dağıtın.motor-fw-2.0

Stok dosyası

Contoso Sanal Vakum bileşeni numaralandırıcısı için daha önce gösterilen örnek uygulama, component-inventory.json dosyasından cihaza özgü bileşenlerin bilgilerini okur. Bu örnek uygulama yalnızca tanıtım amaçlıdır.

Bir üretim senaryosunda, bazı özellikler doğrudan gerçek bileşenlerden alınmalıdır. Bu özellikler arasında id, manufacturerve modelbulunur.

Cihaz oluşturucusu name ve group özelliklerini tanımlar. Bu değerler tanımlandıktan sonra hiçbir zaman değişmemelidir. Özelliğin name cihaz içinde benzersiz olması gerekir.

Örnek component-inventory.json dosyası

Not

Bu dosyadaki içerik işlevinden GetAllComponents döndürülen değerle neredeyse aynı görünür. Ancak, ComponentInfo bu dosyada ve status özellikleri yokturversion. Bileşen numaralandırıcısı bu özellikleri çalışma zamanında doldurur.

Örneğin hostfw için özelliğin properties.version değeri belirtilen (sahte) firmwareDataFile değerden (/usr/local/contoso-devices/vacuum-1/hostfw/firmware.json) doldurulur.

{
    "components": [
        {
            "id": "hostfw",
            "name": "hostfw",
            "group": "firmware",
            "manufacturer": "contoso",
            "model": "virtual-firmware",
            "properties": {
                "path": "\/usr\/local\/contoso-devices\/vacuum-1\/hostfw",
                "firmwareDataFile": "firmware.json",
            }
        },
        {
            "id": "bootfs",
            "name": "bootfs",
            "group": "boot-image",
            "manufacturer": "contoso",
            "model": "virtual-disk",
            "properties": {
                "path": "\/usr\/local\/contoso-devices\/vacuum-1\/bootfs",
                "firmwareDataFile": "diskimage.json",
            }
        },
        {
            "id": "rootfs",
            "name": "rootfs",
            "group": "os-image",
            "manufacturer": "contoso",
            "model": "virtual-os",
            "properties": {
                "path": "\/usr\/local\/contoso-devices\/vacuum-1\/rootfs",
                "firmwareDataFile": "diskimage.json",
            }
        },
        {
            "id": "contoso-motor-serial-00000",
            "name": "left-motor",
            "group": "motors",
            "manufacturer": "contoso",
            "model": "virtual-motor",
            "properties": {
                "path": "\/usr\/local\/contoso-devices\/vacuum-1\/motors\/0",
                "firmwareDataFile": "firmware.json",
            }
        },
        {
            "id": "contoso-motor-serial-00001",
            "name": "right-motor",
            "group": "motors",
            "manufacturer": "contoso",
            "model": "virtual-motor",
            "properties": {
                "path": "\/usr\/local\/contoso-devices\/vacuum-1\/motors\/1",
                "firmwareDataFile": "firmware.json",
            }
        },
        {
            "id": "contoso-motor-serial-00002",
            "name": "vacuum-motor",
            "group": "motors",
            "manufacturer": "contoso",
            "model": "virtual-motor",
            "properties": {
                "path": "\/usr\/local\/contoso-devices\/vacuum-1\/motors\/2",
                "firmwareDataFile": "firmware.json",
            }
        },
        {
            "id": "contoso-camera-serial-00000",
            "name": "front-camera",
            "group": "cameras",
            "manufacturer": "contoso",
            "model": "virtual-camera",
            "properties": {
                "path": "\/usr\/local\/contoso-devices\/vacuum-1\/camera\/0",
                "firmwareDataFile": "firmware.json",
            }
        },
        {
            "id": "contoso-camera-serial-00001",
            "name": "rear-camera",
            "group": "cameras",
            "manufacturer": "contoso",
            "model": "virtual-camera",
            "properties": {
                "path": "\/usr\/local\/contoso-devices\/vacuum-1\/camera\/1",
                "firmwareDataFile": "firmware.json",
            }
        }
    ]
}

Sonraki adımlar

Bu makaledeki örnekte C kullanılmıştır. C++ örnek kaynak kodlarını keşfetmek için bkz:

Contoso Sanal Vakum cihazına bağlı bileşenler için çeşitli örnek güncelleştirmeler için bkz . Ara sunucu güncelleştirme tanıtımı.