Search code examples
azure-digital-twins

Adding new Sensor to Object Model is failing


I am trying to modify the quick sample provided here.
I tried to add a few custom sensor data type but it is failing. Then I tried a few data types mentioned in the documentation which also failed. I am getting below error

Creating Sensor: {
    "DataType": "Noise",
    "DeviceId": "some-device-id",
    "HardwareId": "SAMPLE_SENSOR_NOISE"
  }
  Request: POST 
https://******.*******.azuresmartspaces.net/management/api/v1.0/sensors
Response Status: 404, NotFound , {"error": 
{"code":"404.600.000.001","message":"There is no SensorDataType of the 
given name."}}
  1. Can we add custom sensor datatype?
  2. If no then what are the inbuilt data types? or if yes then what went wrong here?

Solution

  • You need to post the DataType when creating the Sensor object. Use “None” if you want to change it later. Swagger DOCs show the “Model” you can expand and see required fields.

    If the DataType is not in the api/v1/system/types you will need to enable it or create a new DataType. Create a new DataType POST to the Types with the required information. The minimum is the TypeName and SpaceID to neat the type under. My typical pattern is to create a root space and append any custom twin objects like types to this space.

    I believe these are case sensitive names as well.

    https://{servicename}.{region}.azuresmartspaces.net/management/swagger/ui/index#/Types 
    

    EDIT:

    Check your Ontologies with:

    https://{servicename}.{region}.azuresmartspaces.net/management/api/v1.0/ontologies
    

    Select these by ID and POST to set them to true to get all available built-in types:

    [
        {
            "id": 1,
            "name": "Required",
            "loaded": true
        },
        {
            "id": 2,
            "name": "Default",
            "loaded": true
        },
        {
            "id": 3,
            "name": "BACnet",
            "loaded": true
        },
        {
            "id": 4,
            "name": "Advanced",
            "loaded": true
        }
    ]
    

    Then you can query all the given types:

    https://{servicename}.{region}.azuresmartspaces.net/management/api/v1.0/types?includes=Description,FullPath,Ontologies,Space
    

    You should receive something like:

    [
        {
            "id": 1,
            "category": "DeviceSubtype",
            "name": "None",
            "disabled": false,
            "logicalOrder": 0,
            "fullName": "None",
            "spacePaths": [
                "/system"
            ],
            "ontologies": [
                {
                    "id": 1,
                    "name": "Required",
                    "loaded": true
                }
            ]
        },
        {
            "id": 2,
            "category": "DeviceType",
            "name": "None",
            "disabled": false,
            "logicalOrder": 0,
            "fullName": "None",
            "spacePaths": [
                "/system"
            ],
            "ontologies": [
                {
                    "id": 1,
                    "name": "Required",
                    "loaded": true
                }
            ]
        },
        {
            "id": 3,
            "category": "DeviceBlobSubtype",
            "name": "None",
            "disabled": false,
            "logicalOrder": 0,
            "fullName": "None",
            "spacePaths": [
                "/system"
            ],
            "ontologies": [
                {
                    "id": 1,
                    "name": "Required",
                    "loaded": true
                }
            ]
        },
        ...Objects,
    ]