Definiera enhetsmallen för kaffebryggaren

Slutförd

En enhetsmall i Azure IoT Central är en skiss som definierar egenskaperna och beteendena för en typ av enhet som ansluter till ditt program. Enhetsmallen definierar till exempel telemetrin som en enhet skickar, så att IoT Central kan skapa visualiseringar som använder rätt enheter och datatyper.

En enhetsmall innehåller följande avsnitt:

  • En enhetsmodell. De data som kaffebryggarens simulator utbyter med ditt program anges i en enhetsmodell.
    • Rotkomponent. Rotkomponentens gränssnitt beskriver funktioner som är specifika för enhetsmodellen.
    • Komponenter. En enhetsmodell kan innehålla komponenter utöver rotkomponenten för att beskriva enhetsfunktioner. I det här scenariot använder du bara rotkomponenten för att definiera den Anslut kaffebryggarmodellen.
    • Ärvda gränssnitt. En enhetsmodell innehåller ett eller flera gränssnitt som utökar funktionerna i rotkomponenten. I det här scenariot definierar du bara ett gränssnitt.
  • Visningar. Med den här delen av enhetsmallen kan du definiera visualiseringar för att visa data från enheten och formulär för att hantera och kontrollera kaffebryggaren.

När du har skapat en enhetsmall kan du ansluta en simulerad enhet. Den simulerade enheten genererar telemetri så att du kan testa programmets beteende innan du ansluter en riktig enhet.

Här ser du hur telemetri, egenskaper och kommandodefinitioner anges i enhetsmodellen och de molnegenskaper och vyer som behövs för att hantera och kontrollera enheterna i exemplet med IoT-aktiverade kaffebryggare.

Telemetri

Telemetri är de data som strömmar från enheten. Du kan lägga till flera telemetrityper i din enhetsmall för att matcha enhetens funktioner. Kaffebryggaren skickar värden för luftfuktighet och vattentemperatur från sina sensorer. Den skickar också tillståndsinformation om huruvida den för närvarande bryggs och när en kopp identifieras.

Egenskaper

Använd egenskaper för att dela konfigurationsdata mellan en enhet och ditt program.

I det här scenariot använder du en skrivbar egenskap för att ange kaffebryggarens optimala vattentemperatur och skicka den till kaffebryggaren. När den skrivbara egenskapen uppdateras i IoT Central markeras den som väntande i användargränssnittet tills enheten bekräftar att den har reagerat på uppdateringen.

Du kan använda skrivskyddade egenskaper om du vill att en enhet ska skicka värden till programmet. Skrivskyddade egenskaper kan bara ändras av enheten. I det här scenariot definierar du en skrivskyddad enhetsegenskap som heter Device Warranty Expired i enhetsmallen. Fältet Device Warranty Expired förblir tomt tills kaffebryggaren är ansluten till IoT Central. När den är ansluten skickar kaffebryggaren garantistatusen till programmet.

Molnegenskaper är enhetsmetadata som är associerade med enheten. Använd molnegenskaper för att registrera information om din enhet i IoT Central-programmet. I det här scenariot använder du molnegenskaper till att registrera kaffebryggarens optimala intervall för vattentemperatur. Molnegenskaper lagras i IoT Central-programmet och synkroniseras inte med enheten.

Kommandon

Använd kommandon för att fjärrhantera enheten från ditt program. Du kan köra styrkommandon direkt på enheten från molnet. I det här scenariot kör du kommandon på kaffebryggaren för att sätta den i underhållsläge eller starta bryggningen.

Vyer

Du kan anpassa användargränssnittet som IoT Central visar för att hantera och övervaka enheter som är kopplade till enhetsmallen. I det här scenariot skapar du en vy för att rita telemetrivärden som skickas från enheten. Du skapar också ett formulär för att hantera enhetsegenskaperna.

Anslut modell för kaffebryggare

En enhetsmodell är den del av enhetsmallen som definierar telemetri, egenskaper och kommandon som en enhet stöder. Du kan lagra en modell för enhetskapacitet i en JSON-fil och importera den till IoT Central. Följande JSON är modellen för enhetskapacitet för den anslutna kaffebryggaren.

{
    "@id": "dtmi:com:example:ConnectedCoffeeMaker;1",
    "@type": "Interface",
    "contents": [
        {
            "@type": ["Telemetry", "NumberValue", "Temperature"],
            "displayName": {
                "en": "Water Temperature"
            },
            "name": "WaterTemperature",
            "schema": "double",
            "unit": "degreeCelsius",
            "decimalPlaces": 1,
            "maxValue": 100,
            "minValue": 86
        },
        {
            "@type": ["Telemetry", "NumberValue", "Humidity"],
            "displayName": {
                "en": "Air Humidity"
            },
            "name": "AirHumidity",
            "schema": "integer",
            "unit": "percent",
            "maxValue": 100,
            "minValue": 20
        },
        {
            "@type": ["Telemetry", "State"],
            "displayName": {
                "en": "Brewing"
            },
            "name": "Brewing",
            "schema": {
                "@type": "Enum",
                "enumValues": [
                    {
                        "displayName": {
                            "en": "Brewing"
                        },
                        "enumValue": "brewing",
                        "name": "Brewing"
                    },
                    {
                        "displayName": {
                            "en": "Not Brewing"
                        },
                        "enumValue": "notbrewing",
                        "name": "NotBrewing"
                    }
                ],
                "valueSchema": "string"
            }
        },
        {
            "@type": ["Telemetry", "State"],
            "displayName": {
                "en": "Cup Detected"
            },
            "name": "CupDetected",
            "schema": {
                "@type": "Enum",
                "enumValues": [
                    {
                        "displayName": {
                            "en": "Detected"
                        },
                        "enumValue": "detected",
                        "name": "Detected"
                    },
                    {
                        "displayName": {
                            "en": "Not Detected"
                        },
                        "enumValue": "notdetected",
                        "name": "NotDetected"
                    }
                ],
                "valueSchema": "string"
            }
        },
        {
            "@type": ["Property", "NumberValue", "Initialized", "Temperature"],
            "displayName": {
                "en": "Optimal Temperature"
            },
            "name": "OptimalTemperature",
            "schema": "double",
            "unit": "degreeCelsius",
            "writable": true,
            "decimalPlaces": 1,
            "initialValue": 98,
            "maxValue": 100,
            "minValue": 86
        },
        {
            "@type": ["Property", "BooleanValue"],
            "displayName": {
                "en": "Device Warranty Expired"
            },
            "name": "DeviceWarrantyExpired",
            "schema": "boolean",
            "writable": false
        },
        {
            "@type": ["Property", "Cloud", "NumberValue", "Temperature"],
            "displayName": {
                "en": "Coffee Maker Min Temperature"
            },
            "name": "CoffeeMakerMinTemperature",
            "schema": "double",
            "unit": "degreeCelsius",
            "decimalPlaces": 1,
            "maxValue": 92,
            "minValue": 88
        },
        {
            "@type": ["Property", "Cloud", "NumberValue", "Temperature"],
            "displayName": {
                "en": "Coffee Maker Max Temperature"
            },
            "name": "CoffeeMakerMaxTemperature",
            "schema": "double",
            "unit": "degreeCelsius",
            "decimalPlaces": 1,
            "maxValue": 99,
            "minValue": 96
        },
        {
            "@type": "Command",
            "commandType": "synchronous",
            "displayName": {
                "en": "Set Maintenance Mode"
            },
            "name": "SetMaintenanceMode"
        },
        {
            "@type": "Command",
            "commandType": "synchronous",
            "displayName": {
                "en": "Start Brewing"
            },
            "name": "StartBrewing"
        }
    ],
    "displayName": {
        "en": "Connected Coffee Maker"
    },
    "@context": [
        "dtmi:iotcentral:context;2",
        "dtmi:dtdl:context;2"
    ]
}
  • Fältet @id är DTMI (Digital Twin Model Identifier) för modellen i formatet dtmi:<domain>:<unique-model-identifier>;<model-version-number>.
  • Identifierar @type den typ av information som beskrivs. Används till exempel "@type": "Interface" för att ange typen av DTDL-entitet (Digital Twin Definition Language). I det här fallet är entiteten en Interface.
  • Fältet contents är en matris med attributdefinitioner. Varje attribut måste tillhandahålla en @type för att identifiera vilken typ av gränssnittsinformation som beskrivs. I det här fallet Telemetrybeskriver , Propertyoch Command -objekt funktionerna i den anslutna kaffebryggaren.
  • Fältet displayName är ett objekt som ger ett läsbart namn för gränssnittet eller entiteten på olika språk. I det här fallet är Connected Coffee Maker gränssnittet displayName på engelska.
  • Fältet @context används för att ange DTDL-kontexten där gränssnittet eller entiteten definieras. I det här fallet refererar den till kontexterna iotcentral och dtdl .
  • Fältet name är en unik identifierare för Telemetry, Propertyeller Command.
  • Varje telemetrifält representerar mått eller händelser och används ofta för att beskriva avläsningar av enhetssensorer. Till Water Temperature exempel har en schema av double och en unit av degreeCelsius. Fälten decimalPlaces, maxValueoch minValue anger mer information om telemetridata.
  • Varje egenskapsfält representerar tillståndet för en entitet. Till exempel Device Warranty Expired är av typen boolesk och kan ha dess tillstånd inställt av den anslutna enheten som sant eller falskt.
  • Fältet writable anger om egenskapen kan anges från IoT Central-programmet. I det här fallet Optimal Temperature kan ställas in från programmets användargränssnitt, men Device Warranty Expired det kan det inte.
  • Om en egenskap finns Cloud i listan över typer är det en molnegenskap. I det här fallet Coffee Maker Min Temperature och Coffee Maker Max Temperature är molnegenskaper.
  • Varje kommandofält beskriver en åtgärd som enheten kan utföra. Är till exempel Start Brewing ett kommando som molnet kan skicka till enheten för att börja brygga kaffe.
  • Fältet commandType anger om ett kommando är synkront (väntar på ett svar) eller asynkront (väntar inte på ett svar).

Testa dina kunskaper

1.

Hur många telemetrifunktioner definieras i Anslut kaffebryggarmodellen?

2.

Sant eller falskt: Optimal temperatur är en skrivbar egenskap.

3.

Sant eller falskt: den anslutna kaffebryggaren kan starta bryggningen via fjärranslutning med hjälp av kommandot StartBrewing.