استخدام واجهة برمجة تطبيقات REST لإنشاء تطبيقات IoT Central وإدارتها

يمكنك استخدام واجهة برمجة تطبيقات REST لمستوى التحكم لإنشاء تطبيقات IoT Central وإدارتها. يمكنك أيضا استخدام واجهة برمجة تطبيقات REST من أجل:

  • إضافة هوية مدارة إلى التطبيق الخاص بك.
  • إدارة لوحات المعلومات في التطبيق الخاص بك

لاستخدام واجهة برمجة التطبيقات هذه، تحتاج إلى رمز حامل للمورد management.azure.com . للحصول على رمز مميز للحامل، يمكنك استخدام Azure CLI:

az account get-access-token --resource https://management.azure.com

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

سرد التطبيقات الخاصة بك

للحصول على قائمة بتطبيقات IoT Central في اشتراك:

GET https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.IoTCentral/iotApps?api-version=2021-06-01

للحصول على قائمة بتطبيقات IoT Central في مجموعة موارد:

GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.IoTCentral/iotApps?api-version=2021-06-01

يمكنك استرداد تفاصيل تطبيق فردي:

GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.IoTCentral/iotApps/{applicationName}?api-version=2021-06-01

إنشاء تطبيق IoT Central

لإنشاء تطبيق IoT Central مع هوية مدارة معينة من قبل النظام:

PUT https://management.azure.com/subscriptions/<your subscription id>/resourceGroups/<your resource group name>/providers/Microsoft.IoTCentral/iotApps/<your application name>?api-version=2021-06-01

تظهر الحمولة التالية تكوين التطبيق الجديد، بما في ذلك الهوية المدارة:

{
  "location": "eastus",
  "sku": {
    "name": "ST2"
  },
  "properties": {
    "displayName": "Contoso IoT Central App",
    "subdomain": "my-iot-central-app",
    "template": "iotc-pnp-preview@1.0.0"
  },
  "identity": {
    "type": "SystemAssigned"
  }
}

تعديل تطبيق IoT Central

يمكنك تعديل تطبيق IoT Central موجود. يوضح المثال التالي كيفية تغيير اسم العرض وتمكين الهوية المدارة المعينة من قبل النظام:

PATCH https://management.azure.com/subscriptions/<your subscription id>/resourceGroups/<your resource group name>/providers/Microsoft.IoTCentral/iotApps/<your application name>?api-version=2021-06-01

استخدم الحمولة التالية لتغيير اسم العرض وتمكين الهوية المدارة المعينة من قبل النظام:

{
  "properties": {
    "displayName": "Contoso IoT Central App"
  },
  "identity": {
    "type": "SystemAssigned"
  }
}

إشعار

يمكنك فقط إضافة هوية مدارة إلى تطبيق IoT Central الذي تم إنشاؤه في منطقة. يتم إنشاء جميع التطبيقات الجديدة في منطقة.

حذف تطبيق IoT Central

لحذف تطبيق IoT Central، استخدم:

DELETE https://management.azure.com/subscriptions/<your subscription id>/resourceGroups/<your resource group name>/providers/Microsoft.IoTCentral/iotApps/<your application name>?api-version=2021-06-01

لوحات المعلومات

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

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

إشعار

إنشاء لوحات معلومات شخصية باستخدام واجهة برمجة التطبيقات غير مدعوم حاليا.

لمعرفة كيفية إدارة لوحات المعلومات باستخدام واجهة مستخدم IoT Central، راجع كيفية إدارة لوحات المعلومات.

واجهة برمجة تطبيقات REST للوحات المعلومات

تتيح لك واجهة برمجة التطبيقات الخاصة بـ IoT Central ما يلي:

  • إضافة لوحة معلومات إلى التطبيق الخاص بك
  • تحديث لوحة معلومات في التطبيق الخاص بك
  • الحصول على قائمة بلوحة المعلومات في التطبيق
  • الحصول على لوحة معلومات حسب المعرف
  • حذف لوحة معلومات في تطبيقك

إضافة لوحة معلومات

استخدم الطلب التالي لإنشاء لوحة معلومات.

PUT https://{your app subdomain}.azureiotcentral.com/api/dashboards/{dashboardId}?api-version=2022-10-31-preview

dashboardId- معرف DTMI فريد للوحة المعلومات.

يحتوي نص الطلب على بعض الحقول المطلوبة:

  • @displayName: اسم العرض للوحة المعلومات.
  • @favorite: هل لوحة المعلومات في قائمة المفضلة؟
  • group: معرف مجموعة الأجهزة.
  • Tile : تكوين يحدد كائن تجانب، بما في ذلك التخطيط واسم العرض والتكوين.

يحتوي التجانب على بعض الحقول المطلوبة:

Name ‏‏الوصف
displayName اسم العرض لللوحة
height ارتفاع اللوحة
width عرض الإطار المتجانب
x الموضع الأفقي لللوحة
y الموضع العمودي لللوحة

تستخدم أبعاد وموقع الإطار المتجانب وحدات عدد صحيح. أصغر تجانب ممكن له ارتفاع وعرض واحد.

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

مربع الرسم البياني الخطي

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

يحتوي تجانب المخطط الخطي على التكوين التالي:

Name ‏‏الوصف
capabilities تحديد القيمة الإجمالية لبيانات تتبع الاستخدام المراد عرضها.
devices قائمة الأجهزة المراد عرضها.
format تكوين تنسيق المخطط مثل المحاور التي يجب استخدامها.
group معرف مجموعة الأجهزة المراد عرضها.
queryRange النطاق الزمني والدقة المراد عرضهما.
type lineChart

لوحة Markdown

تجانبات قابلة للنقر تعرض عنوانا ونص وصف منسقا في Markdown. يمكن أن يكون عنوان موقع ويب رابطا نسبيا إلى صفحة أخرى في التطبيق أو رابطا مطلقا إلى موقع خارجي. يحتوي تجانب markdown على التكوين التالي:

Name ‏‏الوصف
description سلسلة markdown لعرضها داخل الإطار المتجانب.
href الارتباط الذي يجب زيارته عند تحديد الإطار المتجانب.
image صورة مشفرة base64 لعرضها.
type markdown

تجانب القيمة الأخيرة المعروفة

عرض أحدث قيم بيانات تتبع الاستخدام لجهاز واحد أو أكثر. على سبيل المثال، يمكنك استخدام هذا التجانب لعرض أحدث قيم درجة الحرارة والضغط والرطوبة لأجهزة واحدة أو أكثر.

يحتوي تجانب آخر قيمة معروفة (LKV) على التكوين التالي:

Name ‏‏الوصف
capabilities تحديد بيانات تتبع الاستخدام المراد عرضها.
devices قائمة الأجهزة المراد عرضها.
format تكوين تنسيق لوحة LKV مثل حجم نص التفاف الكلمات.
group معرف مجموعة الأجهزة المراد عرضها.
showTrend إظهار الفرق بين آخر قيمة معروفة والقيمة السابقة.
type lkv

يوضح المثال التالي نص طلب يضيف لوحة معلومات جديدة مع مخطط خطي وعلامة تجانب وآخر قيم معروفة. الإطارات المتجانبة ل LKV والمخطط الخطي هي 2x2 تجانبات. لوحة markdown هي 1x1 لوحة. يتم ترتيب الإطارات المتجانبة في الصف العلوي من لوحة المعلومات:

{
    "displayName": "My Dashboard ",
    "tiles": [
        {
            "displayName": "LKV Temperature",
            "configuration": {
                "type": "lkv",
                "capabilities": [
                    {
                        "capability": "temperature",
                        "aggregateFunction": "avg"
                    }
                ],
                "group": "0fb6cf08-f03c-4987-93f6-72103e9f6100",
                "devices": [
                    "3xksbkqm8r",
                    "1ak6jtz2m5q",
                    "h4ow04mv3d"
                ],
                "format": {
                    "abbreviateValue": false,
                    "wordWrap": false,
                    "textSize": 14
                }
            },
            "x": 0,
            "y": 0,
            "width": 2,
            "height": 2
        },
        {
            "displayName": "Documentation",
            "configuration": {
                "type": "markdown",
                "description": "Comprehensive help articles and links to more support.",
                "href": "https://aka.ms/iotcentral-pnp-docs",
                "image": "4d6c6373-0220-4191-be2e-d58ca2a289e1"
            },
            "x": 2,
            "y": 0,
            "width": 1,
            "height": 1
        },
        {
            "displayName": "Average temperature",
            "configuration": {
                "type": "lineChart",
                "capabilities": [
                    {
                        "capability": "temperature",
                        "aggregateFunction": "avg"
                    }
                ],
                "devices": [
                    "3xksbkqm8r",
                    "1ak6jtz2m5q",
                    "h4ow04mv3d"
                ],
                "group": "0fb6cf08-f03c-4987-93f6-72103e9f6100",
                "format": {
                    "xAxisEnabled": true,
                    "yAxisEnabled": true,
                    "legendEnabled": true
                },
                "queryRange": {
                    "type": "time",
                    "duration": "PT30M",
                    "resolution": "PT1M"
                }
            },
            "x": 3,
            "y": 0,
            "width": 2,
            "height": 2
        }
    ],
    "favorite": false
}

تبدو الاستجابة لهذا الطلب مثل المثال التالي:

{
    "id": "dtmi:kkfvwa2xi:p7pyt5x38",
    "displayName": "My Dashboard",
    "personal": false,
    "tiles": [
        {
            "displayName": "lineChart",
            "configuration": {
                "type": "lineChart",
                "capabilities": [
                    {
                        "capability": "temperature",
                        "aggregateFunction": "avg"
                    }
                ],
                "devices": [
                    "1cfqhp3tue3",
                    "mcoi4i2qh3"
                ],
                "group": "da48c8fe-bac7-42bc-81c0-d8158551f066",
                "format": {
                    "xAxisEnabled": true,
                    "yAxisEnabled": true,
                    "legendEnabled": true
                },
                "queryRange": {
                    "type": "time",
                    "duration": "PT30M",
                    "resolution": "PT1M"
                }
            },
            "x": 5,
            "y": 0,
            "width": 2,
            "height": 2
        }
    ],
    "favorite": false
}

إضافة تكوين حساب تخزين تحميل ملف

استخدم الطلب التالي لإنشاء تكوين حساب تخزين كائن ثنائي كبير الحجم لتحميل ملف في تطبيق IoT Central الخاص بك:

PUT https://{your-app-subdomain}.azureiotcentral.com/api/fileUploads?api-version=2022-07-31

يحتوي نص الطلب على الحقول التالية:

  • account: اسم حساب التخزين حيث يتم تحميل الملف إليه.
  • connectionString: سلسلة الاتصال للاتصال بحساب التخزين.
  • container: اسم الحاوية داخل حساب التخزين. يستخدم المثال التالي الاسم fileuploads.
  • etag: ETag لمنع التعارض مع التحميلات المتعددة
  • sasTtl: معيار مدة ISO 8601، مقدار الوقت الذي يكون فيه طلب الجهاز لتحميل ملف صالحا قبل انتهاء صلاحيته.
{
  "account": "yourAccountName",
  "connectionString": "DefaultEndpointsProtocol=https;AccountName=yourAccountName;AccountKey=*****;BlobEndpoint=https://yourAccountName.blob.core.windows.net/",
  "container": "fileuploads",
  "sasTtl": "PT1H"
}

تبدو الاستجابة لهذا الطلب مثل المثال التالي:

{
  "account": "yourAccountName",
  "connectionString": "DefaultEndpointsProtocol=https;AccountName=yourAccountName;AccountKey=*****;BlobEndpoint=https://yourAccountName.blob.core.windows.net/",
  "container": "fileuploads",
  "sasTtl": "PT1H",
  "state": "pending",
  "etag": "\"7502ac89-0000-0300-0000-627eaf100000\""

}

الحصول على تكوين حساب تخزين تحميل الملف

استخدم الطلب التالي لاسترداد تفاصيل تكوين حساب تخزين كائن ثنائي كبير الحجم لتحميل ملف في تطبيق IoT Central الخاص بك:

GET https://{your-app-subdomain}.azureiotcentral.com/api/fileUploads?api-version=2022-07-31

تبدو الاستجابة لهذا الطلب مثل المثال التالي:

{
  "account": "yourAccountName",
  "connectionString": "DefaultEndpointsProtocol=https;AccountName=yourAccountName;AccountKey=*****;BlobEndpoint=https://yourAccountName.blob.core.windows.net/",
  "container": "yourContainerName",
  "state": "succeeded",
  "etag": "\"7502ac89-0000-0300-0000-627eaf100000\""

}

تحديث تكوين حساب تخزين تحميل الملف

استخدم الطلب التالي لتحديث حساب تخزين blob تحميل ملف سلسلة الاتصال في تطبيق IoT Central الخاص بك:

PATCH https://{your-app-subdomain}.azureiotcentral.com/api/fileUploads?api-version=2022-07-31
{
  "connectionString": "DefaultEndpointsProtocol=https;AccountName=yourAccountName;AccountKey=*****;BlobEndpoint=https://yourAccountName.blob.core.windows.net/"
}

تبدو الاستجابة لهذا الطلب مثل المثال التالي:


{
  "account": "yourAccountName",
  "connectionString": "DefaultEndpointsProtocol=https;AccountName=yourAccountName;AccountKey=*****;BlobEndpoint=https://yourAccountName.blob.core.windows.net/",
  "container": "yourContainerName",
  "sasTtl": "PT1H",
  "state": "succeeded",
  "etag": "\"7502ac89-0000-0300-0000-627eaf100000\""
}

إزالة تكوين حساب تخزين تحميل الملف

استخدم الطلب التالي لحذف تكوين حساب تخزين:

DELETE https://{your-app-subdomain}.azureiotcentral.com/api/fileUploads?api-version=2022-07-31

الحصول على لوحة معلومات

استخدم الطلب التالي لاسترداد تفاصيل لوحة المعلومات باستخدام معرف لوحة المعلومات.

GET https://{your app subdomain}.azureiotcentral.com/api/dashboards/{dashboardId}?api-version=2022-10-31-preview

تبدو الاستجابة لهذا الطلب مثل المثال التالي:

{
    "id": "dtmi:kkfvwa2xi:p7pyt5x38",
    "displayName": "My Dashboard",
    "personal": false,
    "tiles": [
        {
            "displayName": "lineChart",
            "configuration": {
                "type": "lineChart",
                "capabilities": [
                    {
                        "capability": "AvailableMemory",
                        "aggregateFunction": "avg"
                    }
                ],
                "devices": [
                    "1cfqhp3tue3",
                    "mcoi4i2qh3"
                ],
                "group": "da48c8fe-bac7-42bc-81c0-d8158551f066",
                "format": {
                    "xAxisEnabled": true,
                    "yAxisEnabled": true,
                    "legendEnabled": true
                },
                "queryRange": {
                    "type": "time",
                    "duration": "PT30M",
                    "resolution": "PT1M"
                }
            },
            "x": 5,
            "y": 0,
            "width": 2,
            "height": 2
        }
    ],
    "favorite": false
}

تحديث لوحة معلومات

PATCH https://{your app subdomain}.azureiotcentral.com/api/dashboards/{dashboardId}?api-version=2022-10-31-preview

يوضح المثال التالي نص طلب يقوم بتحديث اسم العرض للوحة المعلومات ويضيف لوحة المعلومات إلى قائمة المفضلة:


{
    "displayName": "New Dashboard Name",
    "favorite": true
}

تبدو الاستجابة لهذا الطلب مثل المثال التالي:

{
    "id": "dtmi:kkfvwa2xi:p7pyt5x38",
    "displayName": "New Dashboard Name",
    "personal": false,
    "tiles": [
        {
            "displayName": "lineChart",
            "configuration": {
                "type": "lineChart",
                "capabilities": [
                    {
                        "capability": "AvailableMemory",
                        "aggregateFunction": "avg"
                    }
                ],
                "devices": [
                    "1cfqhp3tue3",
                    "mcoi4i2qh3"
                ],
                "group": "da48c8fe-bac7-42bc-81c0-d8158551f066",
                "format": {
                    "xAxisEnabled": true,
                    "yAxisEnabled": true,
                    "legendEnabled": true
                },
                "queryRange": {
                    "type": "time",
                    "duration": "PT30M",
                    "resolution": "PT1M"
                }
            },
            "x": 5,
            "y": 0,
            "width": 5,
            "height": 5
        }
    ],
    "favorite": true
}

القيام بحذف لوحة المعلومات

استخدم الطلب التالي لحذف لوحة معلومات باستخدام معرف لوحة المعلومات:

DELETE https://{your app subdomain}.azureiotcentral.com/api/dashboards/{dashboardId}?api-version=2022-10-31-preview

سرد لوحات المعلومات

استخدم الطلب التالي لاسترداد قائمة لوحات المعلومات من التطبيق الخاص بك:

GET https://{your app subdomain}.azureiotcentral.com/api/dashboards?api-version=2022-10-31-preview

تبدو الاستجابة لهذا الطلب مثل المثال التالي:

{
    "value": [
        {
            "id": "dtmi:kkfvwa2xi:p7pyt5x3o",
            "displayName": "Dashboard",
            "personal": false,
            "tiles": [
                {
                    "displayName": "Device templates",
                    "configuration": {
                        "type": "markdown",
                        "description": "Get started by adding your first device.",
                        "href": "/device-templates/new/devicetemplates",
                        "image": "f5ba1b00-1d24-4781-869b-6f954df48736"
                    },
                    "x": 1,
                    "y": 0,
                    "width": 1,
                    "height": 1
                },
                {
                    "displayName": "Quick start demo",
                    "configuration": {
                        "type": "markdown",
                        "description": "Learn how to use Azure IoT Central in minutes.",
                        "href": "https://aka.ms/iotcentral-pnp-video",
                        "image": "9eb01d71-491a-44e5-8fac-7af3bc9f9acd"
                    },
                    "x": 2,
                    "y": 0,
                    "width": 1,
                    "height": 1
                },
                {
                    "displayName": "Tutorials",
                    "configuration": {
                        "type": "markdown",
                        "description": "Step-by-step articles teach you how to create apps and devices.",
                        "href": "https://aka.ms/iotcentral-pnp-tutorials",
                        "image": "7d9fc12c-d46e-41c6-885f-0a67c619366e"
                    },
                    "x": 3,
                    "y": 0,
                    "width": 1,
                    "height": 1
                },
                {
                    "displayName": "Documentation",
                    "configuration": {
                        "type": "markdown",
                        "description": "Comprehensive help articles and links to more support.",
                        "href": "https://aka.ms/iotcentral-pnp-docs",
                        "image": "4d6c6373-0220-4191-be2e-d58ca2a289e1"
                    },
                    "x": 4,
                    "y": 0,
                    "width": 1,
                    "height": 1
                },
                {
                    "displayName": "IoT Central Image",
                    "configuration": {
                        "type": "image",
                        "format": {
                            "backgroundColor": "#FFFFFF",
                            "fitImage": true,
                            "showTitle": false,
                            "textColor": "#FFFFFF",
                            "textSize": 0,
                            "textSizeUnit": "px"
                        },
                        "image": ""
                    },
                    "x": 0,
                    "y": 0,
                    "width": 1,
                    "height": 1
                },
                {
                    "displayName": "Contoso Image",
                    "configuration": {
                        "type": "image",
                        "format": {
                            "backgroundColor": "#FFFFFF",
                            "fitImage": true,
                            "showTitle": false,
                            "textColor": "#FFFFFF",
                            "textSize": 0,
                            "textSizeUnit": "px"
                        },
                        "image": "c9ac5af4-f38e-4cd3-886a-e0cb107f391c"
                    },
                    "x": 0,
                    "y": 1,
                    "width": 5,
                    "height": 3
                },
                {
                    "displayName": "Available Memory",
                    "configuration": {
                        "type": "lineChart",
                        "capabilities": [
                            {
                                "capability": "AvailableMemory",
                                "aggregateFunction": "avg"
                            }
                        ],
                        "devices": [
                            "1cfqhp3tue3",
                            "mcoi4i2qh3"
                        ],
                        "group": "da48c8fe-bac7-42bc-81c0-d8158551f066",
                        "format": {
                            "xAxisEnabled": true,
                            "yAxisEnabled": true,
                            "legendEnabled": true
                        },
                        "queryRange": {
                            "type": "time",
                            "duration": "PT30M",
                            "resolution": "PT1M"
                        }
                    },
                    "x": 5,
                    "y": 0,
                    "width": 2,
                    "height": 2
                }
            ],
            "favorite": false
        }
    ]
}