Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede IoT Hub bileşen numaralandırıcısı için Cihaz Güncelleştirmesi'nin örnek 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ı 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ındaki 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. Proxy güncelleştirmesi, bileşenleri güncelleştirmek için bir 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ştirmesi 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 (yani, aynı yazılım veya üretici yazılımı güncelleştirmesini gerektiren) gönderebilir.
Bileşen numaralandırıcı nedir?
Bileşen numaralandırıcısı, bir konak cihazını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 bir 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ı) 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ı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 gerekli) dinamik verilerle (örneğin, üretici yazılımı sürümü, bağlantı durumu ve donanım kimliği) artırmak için bir bileşen envanterinden veya yapılandırma dosyasından alınan bilgileri kullanır.
Cihazda bir veya daha fazla bileşeni hedefleyen (veya cihaza bağlı) 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ştirme 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'dan 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.1vemotors-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şenCompatibilitiestü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
SelectComponentsAPI'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'a 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ı
- Ana bilgisayar önyükleme dosya sistemi
- Konak kök dosya sistemi
- Üç motor (sol tekerlek, sağ tekerlek ve vakum)
- İki kamera (ön ve arka)
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.
Bu tanıtımda bileşenlerin üretici yazılımını güncelleştirmek için firmware.json veya diskimage.json (yükü güncelleştir) hedeflenen bileşenlerin dizinine kopyalayacağız.
Aşağıda örnek bir firmware.json dosyası verilmişti:
{
"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üm ComponentInfo değerlerden oluşan bir dizi 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) |
Veya SelectComponents işlevleri tarafından GetAllComponents daha önce 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 | Veri Akışı Açıklaması |
|---|---|---|
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 |
Dize | 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 |
Dize | Bu bileşenin ait olduğu bir grup. Örneğin, tüm motorlar bir motor grubuna ait olabilir. |
manufacturer |
Dize | 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 |
Dize | 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 |
nesne | İ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"
}
Parametrenin çı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 motorda motor-fw-2.0 ve sağ motorda kullanmaya motor-fw-1.0 devam ederken güncelleştirmeyi vakum motoruna dağıtın.
Envanter dosyası
Contoso Sanal Vakum bileşeni numaralandırıcısı için daha önce gösterilen örnek uygulama, cihaza özgü bileşenlerin bilgilerini component-inventory.json dosyasından 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 , manufacturerve modelözelliklerini içeririd.
Cihaz oluşturucusu ve group özelliklerini tanımlarname. 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şlevden GetAllComponents döndürülen değerle neredeyse aynı görünüyor. 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ı.