Exportera IoT-data till molnmål med hjälp av dataexport (äldre)

Den äldre funktionen för dataexport (klassisk) är nu inaktuell och du bör planera att migrera till den nya dataexportfunktionen. Den äldre dataexporten saknar viktiga funktioner som tillgänglighet för olika datatyper, filtrering och meddelandetransformering. Se följande tabell för en jämförelse av äldre dataexport med ny dataexport:

Funktion Äldre dataexport (klassisk) Ny dataexport
Tillgängliga datatyper Telemetri, enheter, enhetsmallar Telemetri, egenskapsändringar, enhetsanslutningsändringar, ändringar i enhetens livscykel, livscykeländringar för enhetsmallar
Filtrering Ingen Beror på vilken datatyp som exporteras. För telemetri, filtrering efter telemetri, meddelandeegenskaper, egenskapsvärden
Berikningar Ingen Utöka med en anpassad sträng eller ett egenskapsvärde på enheten
Transformering Ingen Transformera exportmeddelandet till önskad form
Mål Azure Event Hubs, Azure Service Bus köer och ämnen Azure Blob Storage Samma som för äldre dataexport plus Azure Data Explorer och webhooks
Viktiga gränser Fem exporter per app, ett mål per export 10 exportmålanslutningar per app

Överväganden vid migrering

Om du vill migrera en äldre dataexport (klassisk) till ny dataexport bör du:

  1. Använd ett testprogram i IoT Central och skapa en ny dataexport med samma datatyp och mål. Du kan också använda funktionerna för berikning och datatransformering för att göra din exportmeddelandeform som liknar meddelandeformen från din äldre dataexport.
  2. När du har testat din nya dataexport och är redo att gå till produktion kontrollerar du att alla arbetsflöden eller beroenden för dina aktiva äldre dataexporter tas bort på ett säkert sätt.
  3. Skapa dina nya dataexporter i produktionsmiljöerna och kontrollera att exportmeddelandena uppfyller dina krav. Du kan sedan lägga till alla arbetsflöden eller beroenden i din nya dataexport.
  4. När du har migrerat alla dina äldre dataexporter till nya dataexporter kan du ta bort de äldre dataexporterna.

Migreringsöverväganden för datatyp

Standarddataformatet varierar för datatyper mellan äldre dataexport och ny dataexport. Mer information finns i dataformat för ny dataexport och dataformat för äldre dataexport. När du migrerar till den nya dataexporten bör du ta bort eventuella beroenden av dataformatet för din äldre dataexport. Men om du har starka beroenden eller arbetsflöden som är knutna till dina äldre dataexporter kan följande överväganden hjälpa dig att hantera eventuella migreringsutmaningar.

Telemetri: Om du väljer att matcha det äldre dataexportformatet för din telemetri i din nya dataexport kan du använda transformeringsfunktionen och skapa en transformeringsfråga som liknar följande exempel:

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

Enheter: Om du för närvarande använder äldre dataexporter med enhetens datatyp kan du använda både egenskapsändringarna och datatyperna för enhetslivscykelhändelser i ny export för att exportera samma data. Du kan uppnå en jämförbar datastruktur med hjälp av följande transformeringsfråga för båda datatyperna:

approved: .device.approved, 
provisioned: .device.provisioned, 
simulated: .device.simulated, 
cloudProperties: .device.cloudProperties | map({ key: .name, value: .value }) | from_entries, 
displayName: .device.name, 
id: .device.id, 
instanceOf: .device.templateId, 
properties: .device.properties.reported | map({ key: .name, value: .value }) | from_entries 

Enhetsmallar: Om du för närvarande använder äldre dataexporter med datatypen enhetsmallar kan du hämta samma data med hjälp av anropet Enhetsmallar – Hämta API.

Överväganden för målmigrering

I den nya dataexporten kan du skapa ett mål och återanvända det i olika dataexporter. När du migrerar från äldre dataexporter bör du skapa mål i de nya dataexporterna som lagrar information om dina befintliga äldre dataexportmål.

Anteckning

Den nya dataexporten stöder inte export av icke-giltiga JSON-meddelanden.

Exportera IoT-data till molnmål (äldre)

Anteckning

Den här artikeln beskriver äldre funktioner för dataexport i IoT Central

Den här artikeln beskriver hur du använder dataexportfunktionen i Azure IoT Central. Med den här funktionen kan du exportera dina data kontinuerligt till Azure Event Hubs-, Azure Service Bus- eller Azure Blob Storage-instanser. Dataexport använder JSON-formatet och kan innehålla telemetri, enhetsinformation och information om enhetsmallar. Använd exporterade data för:

  • Insikter och analyser med varm väg. Det här alternativet inkluderar att utlösa anpassade regler i Azure Stream Analytics, utlösa anpassade arbetsflöden i Azure Logic Apps eller skicka dem via Azure Functions som ska transformeras.
  • Kallvägsanalys, till exempel träningsmodeller i Azure Machine Learning eller långsiktig trendanalys i Microsoft Power BI.

Anteckning

När du aktiverar dataexport får du bara data från den tidpunkten och framåt. Data kan för närvarande inte hämtas under en tid då dataexporten var inaktiverad. Om du vill behålla mer historiska data aktiverar du dataexport tidigt.

Förutsättningar

Du måste vara administratör i ditt IoT Central-program eller ha behörighet att exportera data.

Konfigurera exportmål

Exportmålet måste finnas innan du konfigurerar dataexporten.

Skapa en namnrymd för Event Hubs

Om du inte har ett befintligt Event Hubs-namnområde att exportera till följer du dessa steg:

  1. Skapa ett nytt Event Hubs-namnområde i Azure Portal. Du kan läsa mer i Azure Event Hubs dokument.

  2. Välj en prenumeration. Du kan exportera data till andra prenumerationer som inte finns i samma prenumeration som ditt IoT Central-program. Du ansluter med hjälp av en anslutningssträng i det här fallet.

  3. Skapa en händelsehubb i Event Hubs-namnområdet. Gå till ditt namnområde och välj + Händelsehubb längst upp för att skapa en händelsehubbinstans.

Skapa Service Bus-namnområde

Om du inte har ett befintligt Service Bus-namnområde att exportera till följer du dessa steg:

  1. Skapa ett nytt Service Bus-namnområde i Azure Portal. Du kan läsa mer i Azure Service Bus dokument.

  2. Välj en prenumeration. Du kan exportera data till andra prenumerationer som inte finns i samma prenumeration som ditt IoT Central-program. Du ansluter med hjälp av en anslutningssträng i det här fallet.

  3. Om du vill skapa en kö eller ett ämne att exportera till går du till Service Bus-namnområdet och väljer + Kö eller + Ämne.

När du väljer Service Bus som exportmål får köerna och ämnena inte ha sessioner eller dubblettidentifiering aktiverade. Om något av dessa alternativ är aktiverat kommer vissa meddelanden inte att tas emot i kön eller ämnet.

Skapa lagringskonto

Om du inte har ett befintligt Azure Storage-konto att exportera till följer du dessa steg:

  1. Skapa ett nytt lagringskonto i Azure Portal. Du kan lära dig mer om att skapa nya Azure Blob Storage-konton eller Azure Data Lake Storage v2-lagringskonton. Dataexport kan bara skriva data till lagringskonton som stöder blockblobar. I följande lista visas kända kompatibla lagringskontotyper:

    Prestandanivå Kontotyp
    Standard Generell användning V2
    Standard Generell användning V1
    Standard Blob Storage
    Premium Blockbloblagring
  2. Skapa en container i ditt lagringskonto. Gå till ditt lagringskonto. Under Blob Service väljer du Bläddra blobar. Välj + Container längst upp för att skapa en ny container.

Konfigurera dataexport

Nu när du har ett mål att exportera data till följer du de här stegen för att konfigurera dataexport.

  1. Logga in på ditt IoT Central-program.

  2. I den vänstra rutan väljer du Dataexport.

    Tips

    Om du inte ser dataexport i den vänstra rutan har du inte behörighet att konfigurera dataexport i din app. Prata med en administratör för att konfigurera dataexport.

  3. Välj knappen + Ny . Välj ett av Azure Blob Storage, Azure Event Hubs, Azure Service Bus Queue eller Azure Service Bus Topic som mål för exporten. Det maximala antalet exporter per program är fem.

  4. Ange ett namn för exporten. I listrutan väljer du ditt namnområde eller Ange en anslutningssträng.

    Tips

    Du ser bara lagringskonton, Event Hubs-namnrymder och Service Bus-namnområden i samma prenumeration som ditt IoT Central-program. Om du vill exportera till ett mål utanför den här prenumerationen väljer du Ange en anslutningssträng och ser steg 6.

    Skapa ny händelsehubb

  5. Välj en händelsehubb, kö, ämne eller container i listrutan.

  6. (Valfritt) Om du väljer Ange en anslutningssträng visas en ny ruta där du kan klistra in anslutningssträngen. Så här hämtar du anslutningssträngen för din:

    • Event Hubs eller Service Bus går du till namnområdet i Azure Portal:
      • Så här använder du en anslutningssträng för hela namnområdet:
        1. Under Inställningar väljer du Principer för delad åtkomst
        2. Skapa en ny nyckel eller välj en befintlig nyckel som har send-behörigheter .
        3. Kopiera antingen den primära eller sekundära anslutningssträngen
      • Om du vill använda anslutningssträngen för en specifik händelsehubbinstans eller Service Bus-kö eller -ämne går du till Entitetshändelsehubbar>, Entitetsköer > eller Ämnen om entiteter>. Välj en specifik instans och följ samma steg ovan för att hämta en anslutningssträng.
    • Gå till lagringskontot i Azure Portal:
      • Endast anslutningssträngar för hela lagringskontot stöds. Anslutningssträngar som är begränsade till en enda container stöds inte.
        1. Under Inställningar väljer du Åtkomstnycklar
        2. Kopiera antingen key1-anslutningssträngen eller key2-anslutningssträngen

    Klistra in anslutningssträngen. Skriv in instansen eller skiftlägeskänsligt containernamn.

  7. Under Data som ska exporteras väljer du vilka typer av data som ska exporteras genom att ange typen till .

  8. Om du vill aktivera dataexport kontrollerar du att växlingsknappen Aktiverad är . Välj Spara.

  9. Efter några minuter visas dina data i det valda målet.

Exportera innehåll och format

Exporterade telemetridata innehåller hela meddelandet som dina enheter skickade till IoT Central, inte bara själva telemetrivärdena. Exporterade enhetsdata innehåller ändringar av egenskaper och metadata för alla enheter, och exporterade enhetsmallar innehåller ändringar i alla enhetsmallar.

För Event Hubs och Service Bus exporteras data nästan i realtid. Data finns i egenskapen body och är i JSON-format. Se nedan för exempel.

För Blob Storage exporteras data en gång per minut, där varje fil innehåller batchen med ändringar sedan den senast exporterade filen. Exporterade data placeras i tre mappar i JSON-format. Standardsökvägarna i ditt lagringskonto är:

  • Telemetri: {container}/{app-id}/telemetri/{YYYY}/{MM}/{dd}/{hh}/{mm}/{filename}
  • Enheter: {container}/{app-id}/devices/{YYYY}/{MM}/{dd}/{hh}/{mm}/{filename}
  • Enhetsmallar: {container}/{app-id}/deviceTemplates/{YYYY}/{MM}/{dd}/{hh}/{mm}/{filename}

Om du vill bläddra bland de exporterade filerna i Azure Portal navigerar du till filen och väljer fliken Redigera blob.

Telemetri

För Event Hubs och Service Bus exporterar IoT Central ett nytt meddelande snabbt när det har fått meddelandet från en enhet. Varje exporterat meddelande innehåller det fullständiga meddelandet som enheten skickade i brödtextegenskapen i JSON-format.

För Blob Storage batchas och exporteras meddelanden en gång per minut. De exporterade filerna använder samma format som de meddelandefiler som exporteras av IoT Hub meddelandedirigering till Blob Storage.

Anteckning

För Blob Storage kontrollerar du att dina enheter skickar meddelanden som har contentType: application/JSON och contentEncoding:utf-8 (eller utf-16, utf-32). Ett exempel finns i dokumentationen för IoT Hub.

Enheten som skickade telemetrin representeras av enhets-ID:t (se följande avsnitt). Om du vill hämta namnen på enheterna exporterar du enhetsdata och korrelerar varje meddelande med hjälp av connectionDeviceId som matchar enhetsmeddelandets deviceId .

I följande exempel visas ett meddelande som tagits emot från en händelsehubb eller Service Bus-kö eller ett ämne:

{
  "temp":81.129693132351775,
  "humid":59.488071477541247,
  "EventProcessedUtcTime":"2020-04-07T09:41:15.2877981Z",
  "PartitionId":0,
  "EventEnqueuedUtcTime":"2020-04-07T09:38:32.7380000Z"
}

Det här meddelandet innehåller inte enhets-ID:t för den sändande enheten.

Om du vill hämta enhets-ID:t från meddelandedata i en Azure Stream Analytics-fråga använder du funktionen GetMetadataPropertyValue . Ett exempel finns i frågan i Utöka Azure IoT Central med anpassade regler med Stream Analytics, Azure Functions och SendGrid.

Om du vill hämta enhets-ID:t på en Azure Databricks- eller Apache Spark-arbetsyta använder du systemEgenskaper. Ett exempel finns i Databricks-arbetsytan i Utöka Azure IoT Central med anpassad analys med Azure Databricks.

I följande exempel visas en post som exporterats till bloblagring:

{
  "EnqueuedTimeUtc":"2019-09-26T17:46:09.8870000Z",
  "Properties":{

  },
  "SystemProperties":{
    "connectionDeviceId":"<deviceid>",
    "connectionAuthMethod":"{\"scope\":\"device\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}",
    "connectionDeviceGenerationId":"637051167384630591",
    "contentType":"application/json",
    "contentEncoding":"utf-8",
    "enqueuedTime":"2019-09-26T17:46:09.8870000Z"
  },
  "Body":{
    "temp":49.91322758395974,
    "humid":49.61214852573155,
    "pm25":25.87332214661367
  }
}

Enheter

Varje meddelande eller post i en ögonblicksbild representerar en eller flera ändringar av en enhet och dess egenskaper för enhet och moln sedan det senast exporterade meddelandet. Meddelandet innehåller:

  • id av enheten i IoT Central
  • displayName enhetens
  • Enhetsmalls-ID i instanceOf
  • simulated flagga, sant om enheten är en simulerad enhet
  • provisioned flagga, sant om enheten har etablerats
  • approved flagga, sant om enheten har godkänts för att skicka data
  • Egenskapsvärden
  • properties inklusive värden för enhets- och molnegenskaper

Borttagna enheter exporteras inte. För närvarande finns det inga indikatorer i exporterade meddelanden för borttagna enheter.

För Event Hubs och Service Bus skickar IoT Central meddelanden som innehåller enhetsdata till din händelsehubb eller Service Bus-kö eller ämne i nära realtid.

För Blob Storage exporteras en ny ögonblicksbild som innehåller alla ändringar sedan den sista som skrevs en gång per minut.

Följande exempelmeddelande visar information om enheter och egenskapsdata i en händelsehubb eller Service Bus-kö eller ämne:

{
  "body":{
    "id": "<device Id>",
    "etag": "<etag>",
    "displayName": "Sensor 1",
    "instanceOf": "<device template Id>",
    "simulated": false,
    "provisioned": true,
    "approved": true,
    "properties": {
        "sensorComponent": {
            "setTemp": "30",
            "fwVersion": "2.0.1",
            "status": { "first": "first", "second": "second" },
            "$metadata": {
                "setTemp": {
                    "desiredValue": "30",
                    "desiredVersion": 3,
                    "desiredTimestamp": "2020-02-01T17:15:08.9284049Z",
                    "ackVersion": 3
                },
                "fwVersion": { "ackVersion": 3 },
                "status": {
                    "desiredValue": {
                        "first": "first",
                        "second": "second"
                    },
                    "desiredVersion": 2,
                    "desiredTimestamp": "2020-02-01T17:15:08.9284049Z",
                    "ackVersion": 2
                }
            },
            
        }
    },
    "installDate": { "installDate": "2020-02-01" }
},
  "annotations":{
    "iotcentral-message-source":"devices",
    "x-opt-partition-key":"<partitionKey>",
    "x-opt-sequence-number":39740,
    "x-opt-offset":"<offset>",
    "x-opt-enqueued-time":1539274959654
  },
  "partitionKey":"<partitionKey>",
  "sequenceNumber":39740,
  "enqueuedTimeUtc":"2020-02-01T18:14:49.3820326Z",
  "offset":"<offset>"
}

Den här ögonblicksbilden är ett exempelmeddelande som visar enheter och egenskapsdata i Blob Storage. Exporterade filer innehåller en enda rad per post.

{
  "id": "<device Id>",
  "etag": "<etag>",
  "displayName": "Sensor 1",
  "instanceOf": "<device template Id>",
  "simulated": false,
  "provisioned": true,
  "approved": true,
  "properties": {
      "sensorComponent": {
          "setTemp": "30",
          "fwVersion": "2.0.1",
          "status": { "first": "first", "second": "second" },
          "$metadata": {
              "setTemp": {
                  "desiredValue": "30",
                  "desiredVersion": 3,
                  "desiredTimestamp": "2020-02-01T17:15:08.9284049Z",
                  "ackVersion": 3
              },
              "fwVersion": { "ackVersion": 3 },
              "status": {
                  "desiredValue": {
                      "first": "first",
                      "second": "second"
                  },
                  "desiredVersion": 2,
                  "desiredTimestamp": "2020-02-01T17:15:08.9284049Z",
                  "ackVersion": 2
              }
          },
          
      }
  },
  "installDate": { "installDate": "2020-02-01" }
}

Enhetsmallar

Varje meddelande- eller ögonblicksbildpost representerar en eller flera ändringar i en publicerad enhetsmall sedan det senast exporterade meddelandet. Information som skickas i varje meddelande eller post innehåller:

  • id av enhetsmallen som matchar instanceOf enhetsströmmen ovan
  • displayName av enhetsmallen
  • Enheten capabilityModel inklusive dess interfacesdefinitioner , och telemetri, egenskaper och kommandon
  • cloudProperties Definitioner
  • Åsidosättningar och initiala värden, i stil med capabilityModel

Borttagna enhetsmallar exporteras inte. För närvarande finns det inga indikatorer i exporterade meddelanden för borttagna enhetsmallar.

För Event Hubs och Service Bus skickar IoT Central meddelanden som innehåller enhetsmalldata till din händelsehubb eller Service Bus-kö eller ämne i nära realtid.

För Blob Storage exporteras en ny ögonblicksbild som innehåller alla ändringar sedan den sista som skrevs en gång per minut.

Det här exemplet visar ett meddelande om enhetsmalldata i händelsehubben eller Service Bus-kön eller ämnet:

{
  "body":{
      "id": "<device template id>",
      "etag": "<etag>",
      "types": ["DeviceModel"],
      "displayName": "Sensor template",
      "capabilityModel": {
          "@id": "<capability model id>",
          "@type": ["CapabilityModel"],
          "contents": [],
          "implements": [
              {
                  "@id": "<component Id>",
                  "@type": ["InterfaceInstance"],
                  "name": "sensorComponent",
                  "schema": {
                      "@id": "<interface Id>",
                      "@type": ["Interface"],
                      "displayName": "Sensor interface",
                      "contents": [
                          {
                              "@id": "<id>",
                              "@type": ["Telemetry"],
                              "displayName": "Humidity",
                              "name": "humidity",
                              "schema": "double"
                          },
                          {
                              "@id": "<id>",
                              "@type": ["Telemetry", "SemanticType/Event"],
                              "displayName": "Error event",
                              "name": "error",
                              "schema": "integer"
                          },
                          {
                              "@id": "<id>",
                              "@type": ["Property"],
                              "displayName": "Set temperature",
                              "name": "setTemp",
                              "writable": true,
                              "schema": "integer",
                              "unit": "Units/Temperature/fahrenheit",
                              "initialValue": "30"
                          },
                          {
                              "@id": "<id>",
                              "@type": ["Property"],
                              "displayName": "Firmware version read only",
                              "name": "fwversion",
                              "schema": "string"
                          },
                          {
                              "@id": "<id>",
                              "@type": ["Property"],
                              "displayName": "Display status",
                              "name": "status",
                              "writable": true,
                              "schema": {
                                  "@id": "urn:testInterface:status:obj:ka8iw8wka:1",
                                  "@type": ["Object"]
                              }
                          },
                          {
                              "@id": "<id>",
                              "@type": ["Command"],
                              "request": {
                                  "@id": "<id>",
                                  "@type": ["SchemaField"],
                                  "displayName": "Configuration",
                                  "name": "config",
                                  "schema": "string"
                              },
                              "response": {
                                  "@id": "<id>",
                                  "@type": ["SchemaField"],
                                  "displayName": "Response",
                                  "name": "response",
                                  "schema": "string"
                              },
                              "displayName": "Configure sensor",
                              "name": "sensorConfig"
                          }
                      ]
                  }
              }
          ],
          "displayName": "Sensor capability model"
      },
      "solutionModel": {
          "@id": "<id>",
          "@type": ["SolutionModel"],
          "cloudProperties": [
              {
                  "@id": "<id>",
                  "@type": ["CloudProperty"],
                  "displayName": "Install date",
                  "name": "installDate",
                  "schema": "dateTime",
                  "valueDetail": {
                      "@id": "<id>",
                      "@type": ["ValueDetail/DateTimeValueDetail"]
                  }
              }
          ]
      }
  },
    "annotations":{
      "iotcentral-message-source":"deviceTemplates",
      "x-opt-partition-key":"<partitionKey>",
      "x-opt-sequence-number":25315,
      "x-opt-offset":"<offset>",
      "x-opt-enqueued-time":1539274985085
    },
    "partitionKey":"<partitionKey>",
    "sequenceNumber":25315,
    "enqueuedTimeUtc":"2019-10-02T16:23:05.085Z",
    "offset":"<offset>"
  }
}

Den här exempelögonblicksbilden visar ett meddelande som innehåller enhets- och egenskapsdata i Blob Storage. Exporterade filer innehåller en enda rad per post.

{
      "id": "<device template id>",
      "etag": "<etag>",
      "types": ["DeviceModel"],
      "displayName": "Sensor template",
      "capabilityModel": {
          "@id": "<capability model id>",
          "@type": ["CapabilityModel"],
          "contents": [],
          "implements": [
              {
                  "@id": "<component Id>",
                  "@type": ["InterfaceInstance"],
                  "name": "Sensor component",
                  "schema": {
                      "@id": "<interface Id>",
                      "@type": ["Interface"],
                      "displayName": "Sensor interface",
                      "contents": [
                          {
                              "@id": "<id>",
                              "@type": ["Telemetry"],
                              "displayName": "Humidity",
                              "name": "humidity",
                              "schema": "double"
                          },
                          {
                              "@id": "<id>",
                              "@type": ["Telemetry", "SemanticType/Event"],
                              "displayName": "Error event",
                              "name": "error",
                              "schema": "integer"
                          },
                          {
                              "@id": "<id>",
                              "@type": ["Property"],
                              "displayName": "Set temperature",
                              "name": "setTemp",
                              "writable": true,
                              "schema": "integer",
                              "unit": "Units/Temperature/fahrenheit",
                              "initialValue": "30"
                          },
                          {
                              "@id": "<id>",
                              "@type": ["Property"],
                              "displayName": "Firmware version read only",
                              "name": "fwversion",
                              "schema": "string"
                          },
                          {
                              "@id": "<id>",
                              "@type": ["Property"],
                              "displayName": "Display status",
                              "name": "status",
                              "writable": true,
                              "schema": {
                                  "@id": "urn:testInterface:status:obj:ka8iw8wka:1",
                                  "@type": ["Object"]
                              }
                          },
                          {
                              "@id": "<id>",
                              "@type": ["Command"],
                              "request": {
                                  "@id": "<id>",
                                  "@type": ["SchemaField"],
                                  "displayName": "Configuration",
                                  "name": "config",
                                  "schema": "string"
                              },
                              "response": {
                                  "@id": "<id>",
                                  "@type": ["SchemaField"],
                                  "displayName": "Response",
                                  "name": "response",
                                  "schema": "string"
                              },
                              "displayName": "Configure sensor",
                              "name": "sensorconfig"
                          }
                      ]
                  }
              }
          ],
          "displayName": "Sensor capability model"
      },
      "solutionModel": {
          "@id": "<id>",
          "@type": ["SolutionModel"],
          "cloudProperties": [
              {
                  "@id": "<id>",
                  "@type": ["CloudProperty"],
                  "displayName": "Install date",
                  "name": "installDate",
                  "schema": "dateTime",
                  "valueDetail": {
                      "@id": "<id>",
                      "@type": ["ValueDetail/DateTimeValueDetail"]
                  }
              }
          ]
      }
  }

Meddelande om ändring av dataformat

Anteckning

Dataformatet för telemetriströmmen påverkas inte av den här ändringen. Endast dataströmmarna för enheter och enhetsmallar påverkas.

Om du har en befintlig dataexport i förhandsgranskningsprogrammet med dataströmmarna Enheter och Enhetsmallar aktiverade uppdaterar du exporten senast den 30 juni 2020. Det här kravet gäller för exporter till Azure Blob Storage, Azure Event Hubs och Azure Service Bus.

Från och med den 3 februari 2020 kommer alla nya exporter i program med enhetsmallar aktiverade att ha det dataformat som beskrivs ovan. Alla exporter som skapats före detta datum förblir i det gamla dataformatet fram till den 30 juni 2020, då dessa exporter automatiskt migreras till det nya dataformatet. Det nya dataformatet matchar objekten enhet, enhetsegenskap och enhetsmall i det offentliga API:et för IoT Central.

För Enheter är viktiga skillnader mellan det gamla dataformatet och det nya dataformatet:

  • @id för enheten har tagits bort, deviceId har bytt namn till id
  • provisioned flaggan läggs till för att beskriva enhetens etableringsstatus
  • approved flaggan läggs till för att beskriva godkännandetillståndet för enheten
  • properties inklusive enhets- och molnegenskaper matchar entiteter i det offentliga API:et

För Enhetsmallar är viktiga skillnader mellan det gamla dataformatet och det nya dataformatet:

  • @id för enhetsmallen har bytt namn till id
  • @type för enhetsmallen har bytt namn till typesoch är nu en matris

Enheter (inaktuellt format från och med den 3 februari 2020)

{
  "@id":"<id-value>",
  "@type":"Device",
  "displayName":"Airbox",
  "data":{
    "$cloudProperties":{
        "Color":"blue"
    },
    "EnvironmentalSensor":{
      "thsensormodel":{
        "reported":{
          "value":"Neque quia et voluptatem veritatis assumenda consequuntur quod.",
          "$lastUpdatedTimestamp":"2019-09-30T20:35:43.8478978Z"
        }
      },
      "pm25sensormodel":{
        "reported":{
          "value":"Aut alias odio.",
          "$lastUpdatedTimestamp":"2019-09-30T20:35:43.8478978Z"
        }
      }
    },
    "urn_azureiot_DeviceManagement_DeviceInformation":{
      "totalStorage":{
        "reported":{
          "value":27900.9730905171,
          "$lastUpdatedTimestamp":"2019-09-30T20:35:43.8478978Z"
        }
      },
      "totalMemory":{
        "reported":{
          "value":4667.82916715811,
          "$lastUpdatedTimestamp":"2019-09-30T20:35:43.8478978Z"
        }
      }
    }
  },
  "instanceOf":"<template-id>",
  "deviceId":"<device-id>",
  "simulated":true
}

Enhetsmallar (inaktuellt format från och med den 3 februari 2020)

{
  "@id":"<template-id>",
  "@type":"DeviceModelDefinition",
  "displayName":"Airbox",
  "capabilityModel":{
    "@id":"<id>",
    "@type":"CapabilityModel",
    "implements":[
      {
        "@id":"<id>",
        "@type":"InterfaceInstance",
        "name":"EnvironmentalSensor",
        "schema":{
          "@id":"<id>",
          "@type":"Interface",
          "comment":"Requires temperature and humidity sensors.",
          "description":"Provides functionality to report temperature, humidity. Provides telemetry, commands and read-write properties",
          "displayName":"Environmental Sensor",
          "contents":[
            {
              "@id":"<id>",
              "@type":"Telemetry",
              "description":"Current temperature on the device",
              "displayName":"Temperature",
              "name":"temp",
              "schema":"double",
              "unit":"Units/Temperature/celsius",
              "valueDetail":{
                "@id":"<id>",
                "@type":"ValueDetail/NumberValueDetail",
                "minValue":{
                  "@value":"50"
                }
              },
              "visualizationDetail":{
                "@id":"<id>",
                "@type":"VisualizationDetail"
              }
            },
            {
              "@id":"<id>",
              "@type":"Telemetry",
              "description":"Current humidity on the device",
              "displayName":"Humidity",
              "name":"humid",
              "schema":"integer"
            },
            {
              "@id":"<id>",
              "@type":"Telemetry",
              "description":"Current PM2.5 on the device",
              "displayName":"PM2.5",
              "name":"pm25",
              "schema":"integer"
            },
            {
              "@id":"<id>",
              "@type":"Property",
              "description":"T&H Sensor Model Name",
              "displayName":"T&H Sensor Model",
              "name":"thsensormodel",
              "schema":"string"
            },
            {
              "@id":"<id>",
              "@type":"Property",
              "description":"PM2.5 Sensor Model Name",
              "displayName":"PM2.5 Sensor Model",
              "name":"pm25sensormodel",
              "schema":"string"
            }
          ]
        }
      },
      {
        "@id":"<id>",
        "@type":"InterfaceInstance",
        "name":"urn_azureiot_DeviceManagement_DeviceInformation",
        "schema":{
          "@id":"<id>",
          "@type":"Interface",
          "displayName":"Device information",
          "contents":[
            {
              "@id":"<id>",
              "@type":"Property",
              "comment":"Total available storage on the device in kilobytes. Ex. 20480000 kilobytes.",
              "displayName":"Total storage",
              "name":"totalStorage",
              "displayUnit":"kilobytes",
              "schema":"long"
            },
            {
              "@id":"<id>",
              "@type":"Property",
              "comment":"Total available memory on the device in kilobytes. Ex. 256000 kilobytes.",
              "displayName":"Total memory",
              "name":"totalMemory",
              "displayUnit":"kilobytes",
              "schema":"long"
            }
          ]
        }
      }
    ],
    "displayName":"AAEONAirbox52"
  },
  "solutionModel":{
    "@id":"<id>",
    "@type":"SolutionModel",
    "cloudProperties":[
      {
        "@id":"<id>",
        "@type":"CloudProperty",
        "displayName":"Color",
        "name":"Color",
        "schema":"string",
        "valueDetail":{
          "@id":"<id>",
          "@type":"ValueDetail/StringValueDetail"
        },
        "visualizationDetail":{
          "@id":"<id>",
          "@type":"VisualizationDetail"
        }
      }
    ]
  }
}

Nästa steg

Nu när du vet hur du exporterar data till Azure Event Hubs, Azure Service Bus och Azure Blob Storage fortsätter du till nästa steg: