Ubah data di dalam aplikasi IoT Central Anda untuk diekspor

Perangkat IoT mengirim data dalam berbagai format. Untuk menggunakan data perangkat dalam solusi IoT, Anda mungkin perlu mengubah data perangkat sebelum diekspor ke layanan lain.

Artikel ini menunjukkan cara mengubah data perangkat sebagai bagian dari definisi ekspor data di aplikasi IoT Central.

Transformasi dalam definisi ekspor data IoT Central memungkinkan Anda memanipulasi format dan struktur data perangkat sebelum diekspor ke tujuan. Anda dapat menentukan transformasi untuk setiap tujuan dalam definisi ekspor. Setiap pesan melewati transformasi untuk membuat baris output yang diekspor ke tujuan.

Gunakan transformasi untuk menyusun ulang payload JSON, mengganti nama bidang, memfilter bidang, dan menjalankan perhitungan sederhana pada nilai telemetri. Misalnya, gunakan transformasi untuk mengonversi pesan Anda menjadi format bertabel yang cocok dengan skema tujuan seperti tabel Azure Data Explorer.

Video berikut memperkenalkan Anda ke transformasi data IoT Central:

Tambahkan transformasi

Guna menambahkan transformasi untuk tujuan dalam ekspor data Anda, pilih + Ubah seperti yang ditunjukkan pada cuplikan layar berikut:

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

Panel Transformasi Data memungkinkan Anda menentukan transformasi. Pada bagian 1. Tambahkan pesan input Anda, Anda dapat memasukkan pesan sampel yang ingin Anda lewati melalui transformasi. Anda juga dapat membuat pesan sampel dengan memilih templat perangkat. Pada bagian 2. Buat kueri transformasi, Anda dapat memasukkan kueri yang mengubah pesan input. Bagian 3. Tinjau pesan output menunjukkan hasil transformasi:

Screenshot of transformation editor in IoT Central.

Tip

Jika tidak mengetahui format pesan input Anda, gunakan . sebagai kueri untuk mengekspor pesan apa adanya ke tujuan seperti Webhook. Kemudian tempelkan pesan yang diterima oleh webhook ke dalam 1. Tambahkan pesan input Anda. Kemudian bangun kueri transformasi untuk memproses pesan ini ke dalam format output yang Anda butuhkan.

Bangun kueri transformasi

Mesin transformasi menggunakan prosesor JSON JQ sumber terbuka untuk menyusun ulang dan memformat payload JSON. Untuk menentukan transformasi, Anda menulis kueri JQ, yang dapat menggunakan filter, fungsi, dan fitur bawaan JQ. Untuk beberapa contoh kueri, lihat Contoh kueri transformasi. Untuk mempelajari selengkapnya tentang menulis kueri JQ, lihat manual JQ.

Struktur pesan pra-transformasi

Anda dapat mengekspor aliran data berikut dari IoT Central: telemetri, perubahan properti, peristiwa konektivitas perangkat, peristiwa siklus hidup perangkat, dan peristiwa siklus hidup templat perangkat. Setiap jenis data memiliki struktur khusus yang mencakup informasi seperti nilai telemetri, info aplikasi, metadata perangkat, dan nilai properti.

Contoh berikut menunjukkan bentuk pesan telemetri. Semua data ini tersedia untuk transformasi Anda. Struktur pesan adalah sama untuk jenis pesan lain tetapi ada beberapa bidang khusus jenis. Anda dapat menggunakan fitur Tambahkan pesan input Anda untuk membuat pesan sampel berdasarkan templat perangkat di aplikasi.

{
  "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"
}

Tip

Gunakan fitur Tambahkan pesan input Anda di antarmuka pengguna aplikasi IoT Central untuk melihat struktur pesan sampel untuk jenis ekspor data lainnya, seperti perubahan properti.

Contoh kueri transformasi

Contoh kueri berikut menggunakan pesan telemetri yang ditunjukkan di bagian sebelumnya.

Contoh 1: Kueri JQ berikut mengeluarkan setiap bagian telemetri dari pesan input sebagai pesan output terpisah:

.telemetry[]

Output JSON:

{
  "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
}

Tip

Untuk mengubah output menjadi satu pesan dengan array jenis telemetri, gunakan kueri .telemetry.

Contoh 2: Kueri JQ berikut mengonversi array telemetri input menjadi objek dengan nama telemetri sebagai kuncinya:

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

Output JSON:

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

Contoh 3: Kueri JQ berikut menemukan nilai telemetri RangeOfMotion dan mengonversinya dari derajat ke radian menggunakan rumus rad = degree * pi / 180. Kueri ini juga menunjukkan cara mengimpor dan menggunakan modul iotc:

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

Output JSON:

{
  "rangeOfMotion": 1.9198621771937625
}

Contoh 4: Untuk memanipulasi pesan input ke dalam format bertabel, Anda dapat memetakan setiap pesan yang diekspor ke dalam satu atau beberapa baris. Output baris secara logis direpresentasikan sebagai objek JSON di mana nama kolom adalah kuncinya dan nilai kolom adalah nilainya:

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

Tip

Gunakan format bertabel saat Anda mengekspor ke Azure Data Explorer.

Kueri JQ berikut menulis baris ke tabel yang menyimpan telemetri rangeOfMotion di berbagai perangkat. Kueri memetakan ID perangkat, waktu antrean, dan rentang gerakan ke dalam tabel dengan kolom berikut:

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

Output dalam format JSON:

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

Modul IoT Central

Modul JQ adalah kumpulan fungsi kustom. Sebagai bagian dari kueri transformasi, Anda dapat mengimpor modul khusus IoT Central bawaan yang berisi fungsi untuk memudahkan Anda menulis kueri. Untuk mengimpor modul IoT Central, gunakan arahan berikut:

import "iotc" as iotc;

Modul IoT Central mencakup fungsi-fungsi berikut:

find(expression): Fungsi find memungkinkan Anda menemukan elemen array tertentu seperti nilai telemetri atau entri properti di payload. Input fungsi adalah array dan parameter menentukan filter JQ untuk dijalankan terhadap setiap elemen dalam array. Fungsi menampilkan setiap elemen array tempat filter bernilai benar:

Misalnya, untuk menemukan nilai telemetri tertentu yang disebut RangeOfMotion:

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

Skenario

Skenario berikut menggunakan fungsi transformasi untuk menyesuaikan format data perangkat untuk tujuan tertentu.

Skenario 1: Ekspor data perangkat ke Azure Data Explorer

Dalam skenario ini, Anda mengubah data perangkat agar sesuai dengan skema tetap di Azure Data Explorer, di mana setiap nilai telemetri muncul sebagai kolom dalam tabel dan setiap baris mewakili satu pesan. Contohnya:

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

Untuk mengekspor data yang kompatibel dengan tabel ini, setiap pesan yang diekspor harus terlihat seperti objek berikut. Objek mewakili satu baris, di mana kuncinya adalah nama kolom dan nilainya adalah nilai yang akan ditempatkan di setiap kolom:

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

Dalam skenario ini, perangkat mengirimkan nilai telemetri t1, t2, dan t3 dalam pesan input yang terlihat seperti contoh berikut:

{
  "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
  }
}

Kueri JQ berikut menampilkan nilai telemetri T1, T2 dan T3, Timestamp dan deviceId sebagai pesan dengan pasangan kunci-nilai yang cocok dengan skema tabel Azure Data Explorer:

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,
}

Output JSON:

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

Untuk mempelajari selengkapnya tentang cara menambahkan kluster dan database Azure Data Explorer sebagai tujuan ekspor, lihat Membuat tujuan Azure Data Explorer.

Skenario 2: Memecah array telemetri

Dalam skenario ini, perangkat mengirimkan array telemetri berikut dalam satu pesan:

{
  "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
  }
}

Anda ingin mengubah data perangkat ini agar sesuai dengan skema tabel berikut:

cycleCount deviceId enqueuedTime parentStatus dijalankan subdeviceId
2315 "9xwhr7khkfri" "1909-10-10T07:11:56.078161042Z" "sehat" benar "subdevice1"
824567 "9xwhr7khkfri" "1909-10-10T07:11:56.078161042Z" "sehat" salah "subdevice2"

Kueri JQ berikut membuat pesan output terpisah untuk setiap entri subperangkat dalam pesan, dan menyertakan beberapa informasi umum dari pesan dasar dan perangkat induk. Kueri ini meratakan output dan memisahkan pembagian logis dalam data Anda yang datang sebagai satu pesan:

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

Output JSON:

{
    "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"
}

Skenario 3: Streaming Power BI

Fitur streaming real time Power BI memungkinkan Anda melihat data di dasbor yang diperbarui secara real time dengan latensi rendah. Untuk mempelajari selengkapnya, lihat Streaming real time di Power BI.

Untuk menggunakan IoT Central dengan Streaming Power BI, siapkan ekspor webhook yang mengirimkan isi permintaan dalam format tertentu. Contoh ini mengasumsikan Anda memiliki himpunan data Streaming Power BI dengan skema berikut:


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

Untuk membuat tujuan ekspor webhook, Anda memerlukan titik akhir URL REST API untuk himpunan data streaming Power BI.

Dalam skenario ini, perangkat mengirim pesan telemetri yang terlihat seperti contoh berikut:

{
  "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
  }
}

Kueri JQ berikut mengubah pesan input ke format yang sesuai untuk webhook untuk dikirim ke himpunan data streaming Power BI. Contoh ini mencakup kondisi filter agar hanya menampilkan pesan untuk templat perangkat tertentu. Anda dapat menggunakan fitur filter ekspor data untuk memfilter menurut templat perangkat:

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

Output JSON:

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

Skenario 4: Ekspor data ke Azure Data Explorer dan visualisasikan di Power BI

Dalam skenario ini, Anda mengekspor data ke Azure Data Explorer dan kemudian menggunakan konektor untuk memvisualisasikan data di Power BI. Untuk mempelajari selengkapnya tentang cara menambahkan kluster dan database Azure Data Explorer sebagai tujuan ekspor, lihat Membuat tujuan Azure Data Explorer.

Skenario ini menggunakan tabel Azure Data Explorer dengan skema berikut ini:

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

Dalam skenario ini, perangkat mengirim pesan telemetri yang terlihat seperti contoh berikut:

{
    "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
    }
}

Kueri JQ berikut mengubah pesan input menjadi pesan output terpisah untuk setiap nilai telemetri. Transformasi ini menghasilkan output yang cocok dengan skema tabel Azure Data Explorer. Transformasi menggunakan skema entity-attribute-value di mana setiap baris menyimpan nilai telemetri tunggal dan nama telemetri adalah nilai dalam kolom terpisah di baris yang sama:

. 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
}

Output JSON:

{
  "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
  }
}

Data output diekspor ke kluster Azure Data Explorer Anda. Untuk memvisualisasikan data yang diekspor di Power BI, selesaikan langkah-langkah berikut:

  1. Instal aplikasi Power BI. Anda dapat mengunduh aplikasi Power BI desktop dari Buka dari data ke wawasan ke tindakan dengan Power BI Desktop.
  2. Unduh file IoT Central ADX Connector.pbit Power BI desktop dari GitHub.
  3. Gunakan aplikasi Power BI Desktop untuk membuka file IoT Central ADX Connector.pbit yang Anda unduh di langkah sebelumnya. Saat diminta, masukkan informasi kluster Azure Data Explorer, database, dan tabel yang Anda buat sebelumnya.

Sekarang Anda dapat memvisualisasikan data di Power BI:

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

Langkah berikutnya

Setelah Anda mengetahui cara mengubah data di IoT Central, langkah berikutnya yang disarankan adalah mempelajari Cara menggunakan analitik di IoT Central.