[
  {
    "@context": "dtmi:dtdl:context;2",
    "@id": "dtmi:com:example:TemperatureController;1",
    "@type": "Interface",
    "displayName": "Temperature Controller",
    "description": "Device with two thermostats and remote reboot.",
    "contents": [
      {
        "@type": [
          "Telemetry",
          "DataSize"
        ],
        "name": "workingSet",
        "displayName": "Working Set",
        "description": "Current working set of the device memory in KiB.",
        "schema": "double",
        "unit": "kibibyte"
      },
      {
        "@type": "Property",
        "name": "serialNumber",
        "displayName": "Serial Number",
        "description": "Serial number of the device.",
        "schema": "string"
      },
      {
        "@type": "Command",
        "name": "reboot",
        "displayName": "Reboot",
        "description": "Reboots the device after waiting the number of seconds specified.",
        "request": {
          "name": "delay",
          "displayName": "Delay",
          "description": "Number of seconds to wait before rebooting the device.",
          "schema": "integer"
        }
      },
      {
        "@type": "Component",
        "schema": "dtmi:com:example:Thermostat;1",
        "name": "thermostat1",
        "displayName": "Thermostat One",
        "description": "Thermostat One of Two."
      },
      {
        "@type": "Component",
        "schema": "dtmi:com:example:Thermostat;1",
        "name": "thermostat2",
        "displayName": "Thermostat Two",
        "description": "Thermostat Two of Two."
      },
      {
        "@type": "Component",
        "schema": "dtmi:azure:DeviceManagement:DeviceInformation;1",
        "name": "deviceInformation",
        "displayName": "Device Information interface",
        "description": "Optional interface with basic device hardware information."
      }
    ]
  },
  {
    "@context": "dtmi:dtdl:context;2",
    "@id": "dtmi:com:example:Thermostat;1",
    "@type": "Interface",
    "displayName": "Thermostat",
    "description": "Reports current temperature and provides desired temperature control.",
    "contents": [
      {
        "@type": [
          "Telemetry",
          "Temperature"
        ],
        "name": "temperature",
        "displayName": "Temperature",
        "description": "Temperature in degrees Celsius.",
        "schema": "double",
        "unit": "degreeCelsius"
      },
      {
        "@type": [
          "Property",
          "Temperature"
        ],
        "name": "targetTemperature",
        "schema": "double",
        "displayName": "Target Temperature",
        "description": "Allows to remotely specify the desired target temperature.",
        "unit": "degreeCelsius",
        "writable": true
      },
      {
        "@type": [
          "Property",
          "Temperature"
        ],
        "name": "maxTempSinceLastReboot",
        "schema": "double",
        "unit": "degreeCelsius",
        "displayName": "Max temperature since last reboot.",
        "description": "Returns the max temperature since last device reboot."
      },
      {
        "@type": "Command",
        "name": "getMaxMinReport",
        "displayName": "Get Max-Min report.",
        "description": "This command returns the max, min and average temperature from the specified time to the current time.",
        "request": {
          "name": "since",
          "displayName": "Since",
          "description": "Period to return the max-min report.",
          "schema": "dateTime"
        },
        "response": {
          "name": "tempReport",
          "displayName": "Temperature Report",
          "schema": {
            "@type": "Object",
            "fields": [
              {
                "name": "maxTemp",
                "displayName": "Max temperature",
                "schema": "double"
              },
              {
                "name": "minTemp",
                "displayName": "Min temperature",
                "schema": "double"
              },
              {
                "name": "avgTemp",
                "displayName": "Average Temperature",
                "schema": "double"
              },
              {
                "name": "startTime",
                "displayName": "Start Time",
                "schema": "dateTime"
              },
              {
                "name": "endTime",
                "displayName": "End Time",
                "schema": "dateTime"
              }
            ]
          }
        }
      }
    ]
  },
  {
    "@context": "dtmi:dtdl:context;2",
    "@id": "dtmi:azure:DeviceManagement:DeviceInformation;1",
    "@type": "Interface",
    "displayName": "Device Information",
    "contents": [
      {
        "@type": "Property",
        "name": "manufacturer",
        "displayName": "Manufacturer",
        "schema": "string",
        "description": "Company name of the device manufacturer. This could be the same as the name of the original equipment manufacturer (OEM). Ex. Contoso."
      },
      {
        "@type": "Property",
        "name": "model",
        "displayName": "Device model",
        "schema": "string",
        "description": "Device model name or ID. Ex. Surface Book 2."
      },
      {
        "@type": "Property",
        "name": "swVersion",
        "displayName": "Software version",
        "schema": "string",
        "description": "Version of the software on your device. This could be the version of your firmware. Ex. 1.3.45"
      },
      {
        "@type": "Property",
        "name": "osName",
        "displayName": "Operating system name",
        "schema": "string",
        "description": "Name of the operating system on the device. Ex. Windows 10 IoT Core."
      },
      {
        "@type": "Property",
        "name": "processorArchitecture",
        "displayName": "Processor architecture",
        "schema": "string",
        "description": "Architecture of the processor on the device. Ex. x64 or ARM."
      },
      {
        "@type": "Property",
        "name": "processorManufacturer",
        "displayName": "Processor manufacturer",
        "schema": "string",
        "description": "Name of the manufacturer of the processor on the device. Ex. Intel."
      },
      {
        "@type": "Property",
        "name": "totalStorage",
        "displayName": "Total storage",
        "schema": "double",
        "description": "Total available storage on the device in kilobytes. Ex. 2048000 kilobytes."
      },
      {
        "@type": "Property",
        "name": "totalMemory",
        "displayName": "Total memory",
        "schema": "double",
        "description": "Total available memory on the device in kilobytes. Ex. 256000 kilobytes."
      }
    ]
  }
]