تحويل البيانات داخل تطبيق IoT Central للتصدير

ترسل أجهزة IoT البيانات بتنسيقات مختلفة. لاستخدام بيانات الجهاز في حل IoT، قد تحتاج إلى تحويل بيانات جهازك قبل تصديرها إلى خدمات أخرى.

توضح هذه المقالة كيفية تحويل بيانات الجهاز كجزء من تعريف تصدير البيانات في تطبيق IoT Central.

تتيح لك التحويلات في تعريف تصدير بيانات IoT Central معالجة تنسيق بيانات الجهاز وبنيتها قبل تصديرها إلى وجهة. يمكنك تحديد تحويل لكل وجهة في تعريف تصدير. تمر كل رسالة عبر التحويل لإنشاء سجل إخراج يتم تصديره إلى الوجهة.

استخدم التحويلات لإعادة هيكلة بيانات JSON الأساسية وإعادة تسمية الحقول وتصفية الحقول وإجراء عمليات حسابية بسيطة على قيم بيانات تتبع الاستخدام. على سبيل المثال، استخدم تحويلاً لتحويل رسائلك إلى تنسيق جدولي يطابق مخطط وجهة مثل جدول Azure Data Explorer.

يقدم لك الفيديو التالي تحويلات بيانات IoT Central:

إضافة تحويل

لإضافة تحويل لوجهة في تصدير البيانات، حدد + Transform كما هو موضح في لقطة الشاشة التالية:

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

تتيح لك لوحة تحويل البيانات تحديد التحويل. في 1. إضافة قسم رسالة الإدخال، يمكنك إدخال نموذج رسالة تريد تمريرها من خلال التحويل. يمكنك أيضا إنشاء نموذج رسالة عن طريق تحديد قالب جهاز. في 2. إنشاء قسم استعلام التحويل، يمكنك إدخال الاستعلام الذي يحول رسالة الإدخال. ال 3. يعرض قسم معاينة رسائل (رسائل) الإخراج نتيجة التحويل:

Screenshot of transformation editor in IoT Central.

تلميح

إذا كنت لا تعرف تنسيق رسالة الإدخال، فاستخدم . الاستعلام لتصدير الرسالة كما هو الحال إلى وجهة مثل Webhook. ثم الصق الرسالة التي تلقاها خطاف الويب في 1. إضافة رسالة الإدخال الخاصة بك. ثم قم بإنشاء استعلام تحويل لمعالجة هذه الرسالة إلى تنسيق الإخراج المطلوب.

إنشاء استعلام تحويل

يستخدم محرك التحويل معالج JQ JSON مفتوح المصدر لإعادة هيكلة حمولات JSON وتنسيقها. لتحديد تحويل، يمكنك كتابة استعلام JQ، والذي يمكنه استخدام عوامل التصفية والوظائف والميزات المضمنة في JQ. للحصول على بعض أمثلة الاستعلام، راجع أمثلة على استعلامات التحويل. لمعرفة المزيد حول كتابة استعلامات JQ، راجع دليل JQ.

بنية رسالة ما قبل التحويل

يمكنك تصدير تدفقات البيانات التالية من IoT Central: بيانات تتبع الاستخدام وتغييرات الخصائص وأحداث اتصال الجهاز وأحداث دورة حياة الجهاز وأحداث دورة حياة قالب الجهاز. يحتوي كل نوع من البيانات على بنية محددة تتضمن معلومات مثل قيم بيانات تتبع الاستخدام ومعلومات التطبيق وبيانات تعريف الجهاز وقيم الخصائص.

يوضح المثال التالي شكل رسالة بيانات تتبع الاستخدام. كل هذه البيانات متاحة للتحويل الخاص بك. تتشابه بنية الرسالة مع أنواع الرسائل الأخرى ولكن هناك بعض الحقول الخاصة بالنوع. يمكنك استخدام ميزة إضافة رسالة الإدخال لإنشاء نموذج رسالة استنادا إلى قالب جهاز في التطبيق الخاص بك.

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

تلميح

استخدم ميزة إضافة رسالة الإدخال في واجهة مستخدم تطبيق IoT Central لمشاهدة نماذج بنيات الرسائل لأنواع تصدير البيانات الأخرى، مثل تغييرات الخصائص.

مثال على استعلامات التحويل

تستخدم أمثلة الاستعلام التالية رسالة القياس عن بعد الموضحة في القسم السابق.

مثال 1: يقوم استعلام JQ التالي بإخراج كل جزء من بيانات تتبع الاستخدام من رسالة الإدخال كرسالة إخراج منفصلة:

.telemetry[]

إخراج 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
}

تلميح

لتغيير الإخراج إلى رسالة واحدة مع صفيف من أنواع بيانات تتبع الاستخدام، استخدم الاستعلام .telemetry.

مثال 2: يحول استعلام JQ التالي صفيف بيانات تتبع الاستخدام الإدخال إلى كائن بأسماء بيانات تتبع الاستخدام كمفاتيح:

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

إخراج JSON:

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

مثال 3: يبحث استعلام JQ التالي عن قيمة بيانات تتبع الاستخدام RangeOfMotion ويحولها من درجات إلى تقدير دائري باستخدام الصيغة rad = degree * pi / 180. يوضح هذا الاستعلام أيضا كيفية استيراد الوحدة النمطية واستخدامها iotc :

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

إخراج JSON:

{
  "rangeOfMotion": 1.9198621771937625
}

مثال 4: لمعالجة رسالة الإدخال بتنسيق جدولي، يمكنك تعيين كل رسالة تم تصديرها إلى صف واحد أو أكثر. يتم تمثيل إخراج الصف منطقيا ككائن JSON حيث يكون اسم العمود هو المفتاح وقيمة العمود هي القيمة:

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

تلميح

استخدم تنسيقا جدوليا عند التصدير إلى Azure Data Explorer.

يكتب استعلام JQ التالي صفوفا إلى جدول يخزن بيانات تتبع الاستخدام rangeOfMotion عبر أجهزة مختلفة. يعين الاستعلام معرف الجهاز والوقت المحدد في قائمة الانتظار ونطاق الحركة في جدول يتضمن هذه الأعمدة:

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

الإخراج بتنسيق JSON:

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

وحدة IoT Central

وحدة JQ هي مجموعة من الوظائف المخصصة. كجزء من استعلام التحويل الخاص بك، يمكنك استيراد وحدة IoT Central محددة مضمنة تحتوي على وظائف لتسهيل كتابة استعلاماتك. لاستيراد الوحدة النمطية IoT Central، استخدم التوجيه التالي:

import "iotc" as iotc;

تتضمن الوحدة النمطية IoT Central الوظائف التالية:

find(expression): تتيح لك الدالة find العثور على عنصر صفيف معين مثل قيمة بيانات تتبع الاستخدام أو إدخال الخاصية في الحمولة الخاصة بك. إدخال الدالة عبارة عن صفيف وتحدد المعلمة عامل تصفية JQ لتشغيله مقابل كل عنصر في الصفيف. ترجع الدالة كل عنصر صفيف حيث يتم تقييم عامل التصفية إلى صحيح:

على سبيل المثال، للعثور على قيمة بيانات تتبع الاستخدام معينة تسمى RangeOfMotion:

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

السيناريوهات

تستخدم السيناريوهات التالية وظيفة التحويل لتخصيص تنسيق بيانات الجهاز لوجهة معينة.

السيناريو 1: تصدير بيانات الجهاز إلى Azure Data Explorer

في هذا السيناريو، يمكنك تحويل بيانات الجهاز لمطابقة المخطط الثابت في Azure Data Explorer، حيث تظهر كل قيمة بيانات تتبع الاستخدام عمودا في الجدول ويمثل كل صف رسالة واحدة. على سبيل المثال:

DeviceId الطابع الزمني T1 T2 T3
"31edabe6-e0b9-4c83-b0df-d12e95745b9f" "2021-03-23T19:55:56.971Z 1.18898 1.434709 2.97008

لتصدير البيانات المتوافقة مع هذا الجدول، يجب أن تبدو كل رسالة تم تصديرها مثل الكائن التالي. يمثل الكائن صفا واحدا، حيث تكون المفاتيح أسماء أعمدة والقيم هي القيمة التي يجب وضعها في كل عمود:

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

في هذا السيناريو، يرسل t1t2الجهاز قيم القياس عن بعد و و t3 في رسالة إدخال تبدو مثل المثال التالي:

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

يقوم استعلام JQ التالي بإخراج T2T1قيم القياس عن بعد و T3 و TimestampdeviceId كرسالة مع أزواج قيم المفاتيح التي تطابق مخطط جدول 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,
}

إخراج JSON:

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

لمعرفة المزيد حول كيفية إضافة مجموعة وقاعدة بيانات Azure Data Explorer كوجهة تصدير، راجع إنشاء وجهة Azure Data Explorer.

السيناريو 2: فصل صفيف بيانات تتبع الاستخدام

في هذا السيناريو، يرسل الجهاز الصفيف التالي من بيانات تتبع الاستخدام في رسالة واحدة:

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

تريد تحويل بيانات الجهاز هذه لمطابقة مخطط الجدول التالي:

عدد الدورات deviceId enqueuedTime حالة الأصل تشغيل معرف الجهاز الفرعي
2315 "9xwhr7khkfri" "1909-10-10T07:11:56.078161042Z" "صحي" صحيح "subdevice1"
824567 "9xwhr7khkfri" "1909-10-10T07:11:56.078161042Z" "صحي" true "subdevice2"

ينشئ استعلام JQ التالي رسالة إخراج منفصلة لكل إدخال جهاز فرعي في الرسالة، ويتضمن بعض المعلومات الشائعة من الرسالة الأساسية والجهاز الأصل. يعمل هذا الاستعلام على تبسيط الإخراج وفصل الأقسام المنطقية في بياناتك التي وصلت كرسالة واحدة:

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:

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

السيناريو 3: تدفق Power BI

تتيح لك ميزة دفق Power BI في الوقت الحقيقي عرض البيانات في لوحة معلومات يتم تحديثها في الوقت الفعلي مع زمن انتقال منخفض. لمعرفة المزيد، راجع البث في الوقت الحقيقي في Power BI.

لاستخدام IoT Central مع Power BI Streaming، قم بإعداد تصدير خطاف الويب الذي يرسل هيئات الطلب بتنسيق معين. يفترض هذا المثال أن لديك مجموعة بيانات Power BI Streaming مع المخطط التالي:


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

لإنشاء وجهة تصدير خطاف الويب، تحتاج إلى نقطة نهاية REST API URL لمجموعة بيانات تدفق Power BI.

في هذا السيناريو، يرسل الجهاز رسائل بيانات تتبع الاستخدام التي تبدو مثل المثال التالي:

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

يحول استعلام JQ التالي رسالة الإدخال إلى تنسيق مناسب لخطاف الويب لإرساله إلى مجموعة بيانات تدفق Power BI. يتضمن هذا المثال شرط عامل تصفية لإخراج الرسائل لقالب جهاز معين فقط. يمكنك استخدام ميزة عامل تصفية تصدير البيانات للتصفية حسب قالب الجهاز:

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:

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

السيناريو 4: تصدير البيانات إلى Azure Data Explorer وتصورها في Power BI

في هذا السيناريو، يمكنك تصدير البيانات إلى Azure Data Explorer ثم استخدام موصل لتصور البيانات في Power BI. لمعرفة المزيد حول كيفية إضافة مجموعة وقاعدة بيانات Azure Data Explorer كوجهة تصدير، راجع إنشاء وجهة Azure Data Explorer.

يستخدم هذا السيناريو جدول Azure Data Explorer مع المخطط التالي:

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

في هذا السيناريو، يرسل الجهاز رسائل بيانات تتبع الاستخدام التي تبدو مثل المثال التالي:

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

يحول استعلام JQ التالي رسالة الإدخال إلى رسالة إخراج منفصلة لكل قيمة بيانات تتبع الاستخدام. ينتج عن هذا التحويل إخراج يطابق مخطط جدول Azure Data Explorer. يستخدم التحويل مخطط قيمة سمة الكيان حيث يحتفظ كل صف بقيمة بيانات تتبع الاستخدام واحدة واسم القياس عن بعد هو قيمة في عمود منفصل في الصف نفسه:

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

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

يتم تصدير بيانات الإخراج إلى نظام مجموعة Azure Data Explorer. لتصور البيانات المصدرة في Power BI، أكمل الخطوات التالية:

  1. تثبيت تطبيق Power BI. يمكنك تنزيل تطبيق Power BI لسطح المكتب من Go من البيانات إلى نتيجة التحليلات إلى العمل باستخدام Power BI Desktop.
  2. قم بتنزيل ملف Power BI desktop IoT Central ADX الاتصال or.pbit من GitHub.
  3. استخدم تطبيق Power BI Desktop لفتح ملف IoT Central ADX الاتصال or.pbit الذي قمت بتنزيله في الخطوة السابقة. عند المطالبة، أدخل نظام مجموعة Azure Data Explorer وقاعدة البيانات ومعلومات الجدول التي دونتها مسبقا.

يمكنك الآن تصور البيانات في Power BI:

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

الخطوات التالية

الآن بعد أن عرفت كيفية تحويل البيانات في IoT Central، فإن الخطوة التالية المقترحة هي تعلم كيفية استخدام التحليلات في IoT Central.