Dışarı aktarma için IoT Central uygulamanızın içindeki verileri dönüştürme

IoT cihazları verileri çeşitli biçimlerde gönderir. IoT çözümünüzdeki cihaz verilerini kullanmak için cihaz verilerinizi diğer hizmetlere aktarmadan önce dönüştürmeniz gerekebilir.

Bu makalede, ioT Central uygulamasındaki bir veri dışarı aktarma tanımının parçası olarak cihaz verilerini dönüştürme işlemi gösterilmektedir.

IoT Central veri dışarı aktarma tanımındaki dönüştürmeler, bir hedefe dışarı aktarilmeden önce cihaz verilerinin biçimini ve yapısını değiştirmenize olanak sağlar. Dışarı aktarma tanımındaki her hedef için bir dönüştürme belirtebilirsiniz. Her ileti, hedefe dışarı aktarılan bir çıkış kaydı oluşturmak için dönüştürme işleminden geçer.

JSON yüklerini yeniden yapılandırmak, alanları yeniden adlandırmak, alanları filtrelemek ve telemetri değerlerinde basit hesaplamalar çalıştırmak için dönüştürmeleri kullanın. Örneğin, iletilerinizi Azure Veri Gezgini tablosu gibi bir hedefin şemasıyla eşleşen bir tablo biçiminde dönüştürmek için dönüştürme kullanın.

Aşağıdaki video ioT Central veri dönüşümlerini tanıtır:

Dönüştürme ekleme

Veri dışarı aktarma işleminizde bir hedef için dönüşüm eklemek için, aşağıdaki ekran görüntüsünde gösterildiği gibi + Dönüştür'ü seçin:

Screenshot that shows how to add a transformation to a destination.

Veri Dönüştürme paneli, dönüşümü belirtmenize olanak tanır. 1'de . Giriş iletisi bölümünüzü ekleyin; dönüştürme işleminden geçirmek istediğiniz örnek bir ileti girebilirsiniz. Ayrıca bir cihaz şablonu seçerek de örnek bir ileti oluşturabilirsiniz. 2'de . Derleme dönüştürme sorgusu bölümü, giriş iletisini dönüştüren sorguyu girebilirsiniz. 3. Çıktı iletilerinin önizlemesi bölümünde dönüştürmenin sonucu gösterilir:

Screenshot of transformation editor in IoT Central.

Bahşiş

Giriş iletinizin biçimini bilmiyorsanız, iletiyi Web Kancası gibi bir hedefe dışarı aktarmak için sorgu olarak kullanın . . Ardından web kancası tarafından alınan iletiyi 1'e yapıştırın. Giriş iletinizi ekleyin. Ardından, bu iletiyi gerekli çıkış biçiminize işlemek için bir dönüştürme sorgusu oluşturun.

Dönüştürme sorgusu oluşturma

Dönüşüm altyapısı, JSON yüklerini yeniden yapılandırmak ve biçimlendirmek için açık kaynak JQ JSON işlemcisini kullanır. Dönüştürmeyi belirtmek için, JQ'nun yerleşik filtrelerini, işlevlerini ve özelliklerini kullanabilen bir JQ sorgusu yazarsınız. Bazı sorgu örnekleri için bkz . Örnek dönüştürme sorguları. JQ sorguları yazma hakkında daha fazla bilgi edinmek için bkz . JQ kılavuzu.

Dönüştürme öncesi ileti yapısı

IoT Central'dan aşağıdaki veri akışlarını dışarı aktarabilirsiniz: telemetri, özellik değişiklikleri, cihaz bağlantı olayları, cihaz yaşam döngüsü olayları ve cihaz şablonu yaşam döngüsü olayları. Her veri türünün telemetri değerleri, uygulama bilgileri, cihaz meta verileri ve özellik değerleri gibi bilgileri içeren belirli bir yapısı vardır.

Aşağıdaki örnekte telemetri iletisinin şekli gösterilmektedir. Tüm bu veriler dönüşümünüzün kullanımına sunulur. İletinin yapısı diğer ileti türleri için benzerdir, ancak türe özgü bazı alanlar vardır. Uygulamanızdaki bir cihaz şablonunu temel alan örnek bir ileti oluşturmak için Giriş iletinizi ekleyin özelliğini kullanabilirsiniz.

{
  "applicationId": "93d68c98-9a22-4b28-94d1-06625d4c3d0f",
  "device": {
    "id": "31edabe6-e0b9-4c83-b0df-d12e95745b9f",
    "name": "Scripted Device - 31edabe6-e0b9-4c83-b0df-d12e95745b9f",
    "cloudProperties": [],
    "properties": {
      "reported": [
        {
          "id": "urn:smartKneeBrace:Smart_Vitals_Patch_wr:FirmwareVersion:1",
          "name": "FirmwareVersion",
          "value": 1.0
        }
      ]
    },
    "templateId": "urn:sbq3croo:modelDefinition:nf7st1wn3",
    "templateName": "Smart Knee Brace"
  },
  "telemetry": [
      {
        "id": "urn:continuousPatientMonitoringTemplate:Smart_Knee_Brace_6wm:Acceleration:1",
        "name": "Acceleration",
        "value": {
          "x": 19.212770659918583,
          "y": 20.596296675217335,
          "z": 54.04859440697045
        }
      },
      {
        "id": "urn:continuousPatientMonitoringTemplate:Smart_Knee_Brace_6wm:RangeOfMotion:1",
        "name": "RangeOfMotion",
        "value": 110
      }
  ],
  "enqueuedTime": "2021-03-23T19:55:56.971Z",
  "enrichments": {
      "your-enrichment-key": "enrichment-value"
  },
  "messageProperties": {
      "prop1": "prop-value"
  },
  "messageSource": "telemetry"
}

Bahşiş

Özellik değişiklikleri gibi diğer veri dışarı aktarma türlerine yönelik örnek ileti yapılarını görmek için IoT Central uygulama kullanıcı arabiriminde Giriş iletinizi ekleyin özelliğini kullanın.

Örnek dönüştürme sorguları

Aşağıdaki sorgu örnekleri, önceki bölümde gösterilen telemetri iletisini kullanır.

Örnek 1: Aşağıdaki JQ sorgusu, her telemetri parçasını giriş iletisinden ayrı bir çıkış iletisi olarak çıkarmaktadır:

.telemetry[]

JSON çıkışı:

{
  "id": "urn:continuousPatientMonitoringTemplate:Smart_Knee_Brace_6wm:Acceleration:1",
  "name": "Acceleration",
  "value": {
    "x": 19.212770659918583,
    "y": 20.596296675217335,
    "z": 54.04859440697045
  }
},
{
  "id": "urn:continuousPatientMonitoringTemplate:Smart_Knee_Brace_6wm:RangeOfMotion:1",
  "name": "RangeOfMotion",
  "value": 110
}

Bahşiş

Çıktıyı telemetri türleri dizisiyle tek bir iletiyle değiştirmek için sorgusunu .telemetrykullanın.

Örnek 2: Aşağıdaki JQ sorgusu, giriş telemetri dizisini anahtar olarak telemetri adlarını içeren bir nesneye dönüştürür:

.telemetry | map({ key: .name, value: .value }) | from_entries

JSON çıkışı:

{
  "Acceleration": {
    "x": 19.212770659918583,
    "y": 20.596296675217335,
    "z": 54.04859440697045
  },
  "RangeOfMotion": 110
}

Örnek 3: Aşağıdaki JQ sorgusu RangeOfMotion telemetri değerini bulur ve formülünü rad = degree * pi / 180kullanarak derecelerden radyanlara dönüştürür. Bu sorgu ayrıca modülü içeri aktarmayı ve kullanmayı iotc da gösterir:

import "iotc" as iotc;
{
  rangeOfMotion: (
    .telemetry
    | iotc::find(.name == "RangeOfMotion").value
    | . * 3.14159265358979323846 / 180
  )
}

JSON çıkışı:

{
  "rangeOfMotion": 1.9198621771937625
}

Örnek 4: Giriş iletisini tablo biçiminde işlemek için, dışarı aktarılan her iletiyi bir veya daha fazla satıra eşleyebilirsiniz. Satır çıktısı mantıksal olarak sütun adının anahtar, sütun değerinin ise değer olduğu bir JSON nesnesi olarak temsil edilir:

{
    "<column 1 name>": "<column 1 value>",
    "<column 2 name>": "<column 2 value>",
    ...
}

Bahşiş

Azure Veri Gezgini'a dışarı aktarırken tablosal biçim kullanın.

Aşağıdaki JQ sorgusu, farklı cihazlarda rangeOfMotion telemetrisini depolayan bir tabloya satır yazar. Sorgu, cihaz kimliğini, sıralanan süreyi ve hareket aralığını şu sütunları içeren bir tabloyla eşler:

import "iotc" as iotc;
{
    deviceId: .deviceId,
    timestamp: .enqueuedTime,
    rangeOfMotion: .telemetry | iotc::find(.name == "RangeOfMotion").value
}

JSON biçiminde çıktı:

{
  "deviceId": "31edabe6-e0b9-4c83-b0df-d12e95745b9f",
  "timestamp": "2021-03-23T19:55:56.971Z",
  "rangeOfMotion": 110
}

IoT Central modülü

JQ modülü, özel işlevlerden oluşan bir koleksiyondur. Dönüştürme sorgunuzun bir parçası olarak, sorgularınızı yazmanızı kolaylaştırmak için işlevleri içeren yerleşik bir IoT Central modülünü içeri aktarabilirsiniz. IoT Central modülünü içeri aktarmak için aşağıdaki yönergeyi kullanın:

import "iotc" as iotc;

IoT Central modülü aşağıdaki işlevleri içerir:

find(expression): İşlev, find yükünüzde telemetri değeri veya özellik girişi gibi belirli bir dizi öğesini bulmanıza olanak tanır. İşlev girişi bir dizidir ve parametresi dizideki her öğeye karşı çalıştırılacak bir JQ filtresi tanımlar. işlevi, filtrenin true olarak değerlendirildiği her dizi öğesini döndürür:

Örneğin, adlı RangeOfMotionbelirli bir telemetri değerini bulmak için:

.telemetry | iotc::find(.name == "RangeOfMotion")

Senaryolar

Aşağıdaki senaryolarda, belirli bir hedef için cihaz veri biçimini özelleştirmek için dönüştürme işlevi kullanılır.

Senaryo 1: Cihaz verilerini Azure Veri Gezgini dışarı aktarma

Bu senaryoda, cihaz verilerini Azure Veri Gezgini'daki sabit şemayla eşleşecek şekilde dönüştürür, burada her telemetri değeri tabloda bir sütun olarak görünür ve her satır tek bir iletiyi temsil eder. Örnek:

DeviceId Zaman damgası T1 T2 T3
"31edabe6-e0b9-4c83-b0df-d12e95745b9f" "2021-03-23T19:55:56.971Z 1.18898 1.434709 2.97008

Bu tabloyla uyumlu verileri dışarı aktarmak için, dışarı aktarılan her ileti aşağıdaki nesne gibi görünmelidir. nesnesi tek bir satırı temsil eder ve burada anahtarlar sütun adlarıdır ve değerler her sütuna yerleştirebileceğiniz değerdir:

{
    "Timestamp": <value-of-Timestamp>,
    "DeviceId": <value-of-deviceId>,
    "T1": <value-of-T1>,
    "T2": <value-of-T2>,
    "T3": <value-of-T3>,
}

Bu senaryoda, cihaz aşağıdaki örneğe benzer bir giriş iletisinde , t2ve t3 telemetri değerlerini gönderirt1:

{
  "applicationId": "c57fe8d9-d15d-4659-9814-d3cc38ca9e1b",
  "enqueuedTime": "1933-01-26T03:10:44.480001324Z",
  "messageSource": "telemetry",
  "telemetry": [
    {
      "id": "dtmi:temperaturesensor288:sensors1lr:t1;1",
      "name": "t1",
      "value": 1.1889838348731093e+308
    },
    {
      "id": "dtmi:temperaturesensor288:sensors1lr:t2;1",
      "name": "t2",
      "value": 1.4347093391531383e+308
    },
    {
      "id": "dtmi:temperaturesensor288:sensors1lr:t3;1",
      "name": "t3",
      "value": 2.9700885230380616e+307
    }
  ],
  "device": {
    "id": "oozrnl1zs857",
    "name": "haptic alarm",
    "templateId": "dtmi:modelDefinition:nhhbjotee:qytxnp8hi",
    "templateName": "hapticsensors",
    "properties": {
      "reported": []
    },
    "cloudProperties": [],
    "simulated": true,
    "approved": false,
    "blocked": false,
    "provisioned": true
  }
}

Aşağıdaki JQ sorgusuT1, TimestampT2 azure T3 Veri Gezgini tablo şemasıyla eşleşen anahtar-değer çiftlerine sahip bir ileti olarak ve deviceId telemetri değerlerini ve çıkışını verir:

import "iotc" as iotc;
{
  deviceId: .device.id,
  Timestamp: .enqueuedTime,
  T1: .telemetry | iotc::find(.name == "t1").value,
  T2: .telemetry | iotc::find(.name == "t2").value,
  T3: .telemetry | iotc::find(.name == "t3").value,
}

JSON çıkışı:

{
  "T1": 1.1889838348731093e+308,
  "T2": 1.4347093391531383e+308,
  "T3": 2.9700885230380616e+307,
  "Timestamp": "1933-01-26T03:10:44.480001324Z",
  "deviceId": "oozrnl1zs857"
}

Azure Veri Gezgini kümesini ve veritabanını dışarı aktarma hedefi olarak ekleme hakkında daha fazla bilgi edinmek için bkz. Azure Veri Gezgini hedefi oluşturma.

Senaryo 2: Telemetri dizilerini ayırma

Bu senaryoda, cihaz aşağıdaki telemetri dizisini tek bir iletide gönderir:

{
  "applicationId": "570c2d7b-d72e-4ad1-aaf4-ad9b727daa47",
  "enqueuedTime": "1909-10-10T07:11:56.078161042Z",
  "messageSource": "telemetry",
  "telemetry": [
    {
      "id": "dtmi:sample1:data;1",
      "name": "data",
      "value": [
        {
          "id": "subdevice1",
          "values": {
              "running": true,
              "cycleCount": 2315
          }
        },
        {
          "id": "subdevice2",
          "values": {
              "running": false,
              "cycleCount": 824567
          }
        }
      ]
    },
    {
      "id": "dtmi:sample1:parentStatus;1",
      "name": "parentStatus",
      "value": "healthy"
    }
  ],
  "device": {
    "id": "9xwhr7khkfri",
    "name": "wireless port",
    "templateId": "dtmi:hpzy1kfcbt2:umua7dplmbd",
    "templateName": "Smart Vitals Patch",
    "properties": {
      "reported": [
        {
          "id": "dtmi:sample1:prop;1",
          "name": "Connectivity",
          "value": "Tenetur ut quasi minus ratione voluptatem."
        }
      ]
    },
    "cloudProperties": [],
    "simulated": true,
    "approved": true,
    "blocked": false,
    "provisioned": false
  }
}

Bu cihaz verilerini aşağıdaki tablo şemasıyla eşleşecek şekilde dönüştürmek istiyorsunuz:

cycleCount deviceId enqueuedTime parentStatus çalışıyor subdeviceId
2315 "9xwhr7khkfri" "1909-10-10T07:11:56.078161042Z" "sağlıklı" true "subdevice1"
824567 "9xwhr7khkfri" "1909-10-10T07:11:56.078161042Z" "sağlıklı" false "subdevice2"

Aşağıdaki JQ sorgusu, iletideki her alt hizmet girdisi için ayrı bir çıkış iletisi oluşturur ve temel iletiden ve üst cihazdan bazı yaygın bilgileri içerir. Bu sorgu çıktıyı düzler ve verilerinizde tek bir ileti olarak gelen mantıksal bölmeleri ayırır:

import "iotc" as iotc;
{
    enqueuedTime: .enqueuedTime,
    deviceId: .device.id,
    parentStatus: .telemetry | iotc::find(.name == "parentStatus").value
} + (
    .telemetry
    | iotc::find(.name == "data").value[]
    | {
        subdeviceId: .id,
        running: .values.running,
        cycleCount: .values.cycleCount
    }
)

JSON çıkışı:

{
    "cycleCount": 2315,
    "deviceId": "9xwhr7khkfri",
    "enqueuedTime": "1909-10-10T07:11:56.078161042Z",
    "parentStatus": "healthy",
    "running": true,
    "subdeviceId": "subdevice1"
},
{
    "cycleCount": 824567,
    "deviceId": "9xwhr7khkfri",
    "enqueuedTime": "1909-10-10T07:11:56.078161042Z",
    "parentStatus": "healthy",
    "running": false,
    "subdeviceId": "subdevice2"
}

Senaryo 3: Power BI akışı

Power BI gerçek zamanlı akış özelliği, düşük gecikme süresiyle gerçek zamanlı olarak güncelleştirilen bir panodaki verileri görüntülemenizi sağlar. Daha fazla bilgi edinmek için bkz . Power BI'da gerçek zamanlı akış.

IoT Central'ı Power BI Akışı ile kullanmak için, istek gövdelerini belirli bir biçimde gönderen bir web kancası dışarı aktarma ayarlayın. Bu örnekte aşağıdaki şemaya sahip bir Power BI Akış veri kümeniz olduğu varsayılır:


  {
    "bloodPressureDiastolic": 161438124,
    "bloodPressureSystolic": -966387879,
    "deviceId": "9xwhr7khkfri",
    "deviceName": "wireless port",
    "heartRate": -633994413,
    "heartRateVariability": -37514094,
    "respiratoryRate": 1582211310,
    "timestamp": "1909-10-10T07:11:56.078161042Z"
  }

Web kancası dışarı aktarma hedefini oluşturmak için Power BI akış veri kümeniz için REST API URL uç noktasına ihtiyacınız vardır.

Bu senaryoda, cihaz aşağıdaki örneğe benzer telemetri iletileri gönderir:

{
  "applicationId": "570c2d7b-d72e-4ad1-aaf4-ad9b727daa47",
  "enqueuedTime": "1909-10-10T07:11:56.078161042Z",
  "messageSource": "telemetry",
  "telemetry": [
    {
      "id": "dtmi:smartVitalsPatch:Smart_Vitals_Patch_37p:HeartRate;1",
      "name": "HeartRate",
      "value": -633994413
    },
    {
      "id": "dtmi:smartVitalsPatch:Smart_Vitals_Patch_37p:RespiratoryRate;1",
      "name": "RespiratoryRate",
      "value": 1582211310
    },
    {
      "id": "dtmi:smartVitalsPatch:Smart_Vitals_Patch_37p:HeartRateVariability;1",
      "name": "HeartRateVariability",
      "value": -37514094
    },
    {
      "id": "dtmi:smartVitalsPatch:Smart_Vitals_Patch_37p:BodyTemperature;1",
      "name": "BodyTemperature",
      "value": 5.323322666478241e+307
    },
    {
      "id": "dtmi:smartVitalsPatch:Smart_Vitals_Patch_37p:FallDetection;1",
      "name": "FallDetection",
      "value": "Earum est nobis at voluptas id qui."
    },
    {
      "id": "dtmi:smartVitalsPatch:Smart_Vitals_Patch_37p:BloodPressure;1",
      "name": "BloodPressure",
      "value": {
        "Diastolic": 161438124,
        "Systolic": -966387879
      }
    }
  ],
  "device": {
    "id": "9xwhr7khkfri",
    "name": "wireless port",
    "templateId": "dtmi:hpzy1kfcbt2:umua7dplmbd",
    "templateName": "Smart Vitals Patch",
    "properties": {
      "reported": [
        {
          "id": "dtmi:smartVitalsPatch:Smart_Vitals_Patch_wr:DeviceStatus;1",
          "name": "DeviceStatus",
          "value": "Id optio iste vero et neque sit."
        }
      ]
    },
    "cloudProperties": [],
    "simulated": true,
    "approved": true,
    "blocked": false,
    "provisioned": false
  }
}

Aşağıdaki JQ sorgusu, giriş iletisini Web kancasının Power BI akış veri kümesine göndermesi için uygun bir biçime dönüştürür. Bu örnek, yalnızca belirli bir cihaz şablonuna yönelik iletilerin çıkışını almak için bir filtre koşulu içerir. Cihaz şablonuna göre filtrelemek için veri dışarı aktarma filtresi özelliğini kullanabilirsiniz:

import "iotc" as iotc;
if .device.templateId == "dtmi:hpzy1kfcbt2:umua7dplmbd" then 
    {
        deviceId: .device.id,
        timestamp: .enqueuedTime,
        deviceName: .device.name,
        bloodPressureSystolic: .telemetry | iotc::find(.name == "BloodPressure").value.Systolic,
        bloodPressureDiastolic: .telemetry | iotc::find(.name == "BloodPressure").value.Diastolic,
        heartRate: .telemetry | iotc::find(.name == "HeartRate").value,
        heartRateVariability: .telemetry | iotc::find(.name == "HeartRateVariability").value,
        respiratoryRate: .telemetry | iotc::find(.name == "RespiratoryRate").value
    }
else
    empty
end

JSON çıkışı:

{
  "bloodPressureDiastolic": 161438124,
  "bloodPressureSystolic": -966387879,
  "deviceId": "9xwhr7khkfri",
  "deviceName": "wireless port",
  "heartRate": -633994413,
  "heartRateVariability": -37514094,
  "respiratoryRate": 1582211310,
  "timestamp": "1909-10-10T07:11:56.078161042Z"
}

Senaryo 4: Verileri Azure Veri Gezgini dışarı aktarma ve Power BI'da görselleştirme

Bu senaryoda, verileri Azure Veri Gezgini'a aktaracak ve ardından Power BI'da verileri görselleştirmek için bağlayıcı kullanacaksınız. Azure Veri Gezgini kümesini ve veritabanını dışarı aktarma hedefi olarak ekleme hakkında daha fazla bilgi edinmek için bkz. Azure Veri Gezgini hedefi oluşturma.

Bu senaryoda aşağıdaki şemaya sahip bir Azure Veri Gezgini tablosu kullanılır:

.create table smartvitalspatch (
  EnqueuedTime:datetime,
  Message:string,
  Application:string,
  Device:string,
  Simulated:boolean,
  Template:string,
  Module:string,
  Component:string,
  Capability:string,
  Value:dynamic
)

Bu senaryoda, cihaz aşağıdaki örneğe benzer telemetri iletileri gönderir:

{
    "applicationId": "570c2d7b-d72e-4ad1-aaf4-ad9b727daa47",
    "enqueuedTime": "1909-10-10T07:11:56.078161042Z",
    "messageSource": "telemetry",
    "telemetry": [
        {
            "id": "dtmi:smartVitalsPatch:Smart_Vitals_Patch_37p:HeartRate;1",
            "name": "HeartRate",
            "value": -633994413
        },
        {
            "id": "dtmi:smartVitalsPatch:Smart_Vitals_Patch_37p:RespiratoryRate;1",
            "name": "RespiratoryRate",
            "value": 1582211310
        },
        {
            "id": "dtmi:smartVitalsPatch:Smart_Vitals_Patch_37p:HeartRateVariability;1",
            "name": "HeartRateVariability",
            "value": -37514094
        },
        {
            "id": "dtmi:smartVitalsPatch:Smart_Vitals_Patch_37p:BodyTemperature;1",
            "name": "BodyTemperature",
            "value": 5.323322666478241e+307
        },
        {
            "id": "dtmi:smartVitalsPatch:Smart_Vitals_Patch_37p:FallDetection;1",
            "name": "FallDetection",
            "value": "Earum est nobis at voluptas id qui."
        },
        {
            "id": "dtmi:smartVitalsPatch:Smart_Vitals_Patch_37p:BloodPressure;1",
            "name": "BloodPressure",
            "value": {
                "Diastolic": 161438124,
                "Systolic": -966387879
            }
        }
    ],
    "device": {
        "id": "9xwhr7khkfri",
        "name": "wireless port",
        "templateId": "dtmi:hpzy1kfcbt2:umua7dplmbd",
        "templateName": "Smart Vitals Patch",
        "properties": {
            "reported": [
                {
                    "id": "dtmi:smartVitalsPatch:Smart_Vitals_Patch_wr:DeviceStatus;1",
                    "name": "DeviceStatus",
                    "value": "Id optio iste vero et neque sit."
                }
            ]
        },
        "cloudProperties": [],
        "simulated": true,
        "approved": true,
        "blocked": false,
        "provisioned": false
    }
}

Aşağıdaki JQ sorgusu, giriş iletisini her telemetri değeri için ayrı bir çıkış iletisine dönüştürür. Bu dönüştürme, Azure Veri Gezgini tablo şemasıyla eşleşen bir çıkış oluşturur. Dönüştürme, her satırın tek bir telemetri değerini barındırdığı bir entity-attribute-value şeması kullanır ve telemetrinin adı aynı satırdaki ayrı bir sütundaki bir değerdir:

. as $in | .telemetry[] | {
  EnqueuedTime: $in.enqueuedTime,
  Message: $in.messageId,
  Application: $in.applicationId,
  Device: $in.device.id,
  Simulated: $in.device.simulated,
  Template: ($in.device.templateName // ""),
  Module: ($in.module // ""),
  Component: ($in.component // ""),
  Capability: .name,
  Value: .value
}

JSON çıkışı:

{
  "Application": "570c2d7b-d72e-4ad1-aaf4-ad9b727daa47",
  "Capability": "HeartRate",
  "Component": "",
  "Device": "9xwhr7khkfri",
  "EnqueuedTime": "1909-10-10T07:11:56.078161042Z",
  "Message": null,
  "Module": "",
  "Simulated": true,
  "Template": "Smart Vitals Patch",
  "Value": -633994413
},
{
  "Application": "570c2d7b-d72e-4ad1-aaf4-ad9b727daa47",
  "Capability": "RespiratoryRate",
  "Component": "",
  "Device": "9xwhr7khkfri",
  "EnqueuedTime": "1909-10-10T07:11:56.078161042Z",
  "Message": null,
  "Module": "",
  "Simulated": true,
  "Template": "Smart Vitals Patch",
  "Value": 1582211310
},
{
  "Application": "570c2d7b-d72e-4ad1-aaf4-ad9b727daa47",
  "Capability": "HeartRateVariability",
  "Component": "",
  "Device": "9xwhr7khkfri",
  "EnqueuedTime": "1909-10-10T07:11:56.078161042Z",
  "Message": null,
  "Module": "",
  "Simulated": true,
  "Template": "Smart Vitals Patch",
  "Value": -37514094
},
{
  "Application": "570c2d7b-d72e-4ad1-aaf4-ad9b727daa47",
  "Capability": "BodyTemperature",
  "Component": "",
  "Device": "9xwhr7khkfri",
  "EnqueuedTime": "1909-10-10T07:11:56.078161042Z",
  "Message": null,
  "Module": "",
  "Simulated": true,
  "Template": "Smart Vitals Patch",
  "Value": 5.323322666478241e+307
},
{
  "Application": "570c2d7b-d72e-4ad1-aaf4-ad9b727daa47",
  "Capability": "FallDetection",
  "Component": "",
  "Device": "9xwhr7khkfri",
  "EnqueuedTime": "1909-10-10T07:11:56.078161042Z",
  "Message": null,
  "Module": "",
  "Simulated": true,
  "Template": "Smart Vitals Patch",
  "Value": "Earum est nobis at voluptas id qui."
},
{
  "Application": "570c2d7b-d72e-4ad1-aaf4-ad9b727daa47",
  "Capability": "BloodPressure",
  "Component": "",
  "Device": "9xwhr7khkfri",
  "EnqueuedTime": "1909-10-10T07:11:56.078161042Z",
  "Message": null,
  "Module": "",
  "Simulated": true,
  "Template": "Smart Vitals Patch",
  "Value": {
      "Diastolic": 161438124,
      "Systolic": -966387879
  }
}

Çıkış verileri Azure Veri Gezgini kümenize aktarılır. Dışarı aktarılan verileri Power BI'da görselleştirmek için aşağıdaki adımları tamamlayın:

  1. Power BI uygulamasını yükleyin. Power BI Desktop ile verilerden içgörülere ve eyleme geçiş sayfasından masaüstü Power BI uygulamasını indirebilirsiniz.
  2. GitHub'dan Power BI masaüstü IoT Central ADX Bağlan or.pbit dosyasını indirin.
  3. Önceki adımda indirdiğiniz IoT Central ADX Bağlan or.pbit dosyasını açmak için Power BI Desktop uygulamasını kullanın. İstendiğinde, daha önce not aldığınız Azure Veri Gezgini kümesini, veritabanını ve tablo bilgilerini girin.

Artık Power BI'da verileri görselleştirebilirsiniz:

Screenshot of Power BI report that shows data from IoT Central.

Sonraki adımlar

Artık IoT Central'da verileri nasıl dönüştüreceğinizi bildiğinize göre, önerilen bir sonraki adım IoT Central'da analiz kullanmayı öğrenmektir.