Udostępnij za pośrednictwem


Jak zarządzać urządzeniami przy użyciu interfejsu API REST usługi IoT Central

Interfejs API REST usługi IoT Central umożliwia tworzenie aplikacji klienckich, które integrują się z aplikacjami usługi IoT Central. Interfejs API REST umożliwia zarządzanie urządzeniami w aplikacji usługi IoT Central.

Każde wywołanie interfejsu API REST usługi IoT Central wymaga nagłówka autoryzacji. Aby dowiedzieć się więcej, zobacz Jak uwierzytelniać i autoryzować wywołania interfejsu API REST usługi IoT Central.

Aby uzyskać dokumentację referencyjną interfejsu API REST usługi IoT Central, zobacz Dokumentacja interfejsu API REST usługi Azure IoT Central.

Aby dowiedzieć się, jak zarządzać urządzeniami przy użyciu interfejsu użytkownika usługi IoT Central, zobacz Zarządzanie poszczególnymi urządzeniami w aplikacji usługi Azure IoT Central.

Interfejs API REST urządzeń

Interfejs API REST usługi IoT Central umożliwia wykonywanie następujących działań:

  • Dodawanie urządzenia do aplikacji
  • Aktualizowanie urządzenia w aplikacji
  • Pobieranie listy urządzeń w aplikacji
  • Pobieranie urządzenia według identyfikatora
  • Uzyskiwanie poświadczeń urządzenia
  • Usuwanie urządzenia w aplikacji
  • Filtrowanie listy urządzeń w aplikacji

Dodawanie urządzenia

Użyj następującego żądania, aby utworzyć nowe urządzenie.

PUT https://{your app subdomain}/api/devices/{deviceId}?api-version=2022-07-31

Poniższy przykład przedstawia treść żądania, która dodaje urządzenie dla szablonu urządzenia. Szczegółowe informacje można uzyskać template na stronie szablonów urządzeń w interfejsie użytkownika aplikacji usługi IoT Central.

{
  "displayName": "CheckoutThermostat",
  "template": "dtmi:contoso:Thermostat;1",
  "simulated": true,
  "enabled": true
}

Treść żądania zawiera kilka wymaganych pól:

  • @displayName: nazwa wyświetlana urządzenia.
  • @enabled: deklaruje, że ten obiekt jest interfejsem.
  • @etag: Element ETag używany do zapobiegania konfliktom w aktualizacjach urządzeń.
  • simulated: Czy urządzenie jest symulowane?
  • template : definicja szablonu urządzenia dla urządzenia.

Odpowiedź na to żądanie wygląda następująco:

{
    "id": "thermostat1",
    "etag": "eyJoZWFkZXIiOiJcIjI0MDAwYTdkLTAwMDAtMDMwMC0wMDAwLTYxYjgxZDIwMDAwMFwiIiwiZGF0YSI6IlwiMzMwMDQ1M2EtMDAwMC0wMzAwLTAwMDAtNjFiODFkMjAwMDAwXCIifQ",
    "displayName": "CheckoutThermostat",
    "simulated": true,
    "provisioned": false,
    "template": "dtmi:contoso:Thermostat;1",
    "enabled": true
}

Pobieranie urządzenia

Użyj następującego żądania, aby pobrać szczegóły urządzenia z aplikacji:

GET https://{your app subdomain}/api/devices/{deviceId}?api-version=2022-07-31

Uwaga

Możesz pobrać element z interfejsu deviceId użytkownika aplikacji usługi IoT Central, umieszczając wskaźnik myszy na urządzeniu.

Odpowiedź na to żądanie wygląda następująco:

{
    "id": "5jcwskdwbm",
    "etag": "eyJoZWFkZXIiOiJcIjI0MDBlMDdjLTAwMDAtMDMwMC0wMDAwLTYxYjgxYmVlMDAwMFwiIn0",
    "displayName": "Thermostat - 5jcwskdwbm",
    "simulated": false,
    "provisioned": false,
    "template": "dtmi:contoso:Thermostat;1",
    "enabled": true
}

W poniższej tabeli przedstawiono sposób mapowania wartości stanu urządzenia w interfejsie użytkownika na wartości używane przez interfejs API REST do interakcji z urządzeniami:

Stan urządzenia interfejsu użytkownika Uwagi Pobieranie interfejsu API REST
Oczekiwanie na zatwierdzenie Opcja automatycznego zatwierdzania jest wyłączona w grupie połączeń urządzeń, a urządzenie nie zostało dodane za pośrednictwem interfejsu użytkownika.
Aby można było go użyć, użytkownik musi ręcznie zatwierdzić urządzenie za pośrednictwem interfejsu użytkownika.
Provisioned: false
Enabled: false
Zarejestrowano Urządzenie zostało zatwierdzone automatycznie lub ręcznie. Provisioned: false
Enabled: true
Zaaprowizowane Urządzenie zostało aprowidowane i może nawiązać połączenie z aplikacją usługi IoT Central. Provisioned: true
Enabled: true
Zablokowano Urządzenie nie może łączyć się z aplikacją usługi IoT Central. Możesz zablokować urządzenie, które znajduje się w dowolnym z innych stanów. Provisioned: Zależy Waiting for approval/Registered/Provisioned status
Enabled: false

Uzyskiwanie poświadczeń urządzenia

Użyj następującego żądania, aby pobrać poświadczenia urządzenia z aplikacji:

GET https://{your app subdomain}/api/devices/{deviceId}/credentials?api-version=2022-07-31

Odpowiedź na to żądanie wygląda następująco:

{
    "idScope": "0ne003E64EF",
    "symmetricKey": {
        "primaryKey": "XUQvxGl6+Q1R0NKN5kOTmLOWsSKiuqs5N9unrjYCH4k=",
        "secondaryKey": "Qp/MTGHjn5MUTw4NVGhRfG+P+L1zh1gtAhO/KH8kn5c="
    }
}

Aktualizowanie urządzenia

PATCH https://{your app subdomain}/api/devices/{deviceId}?api-version=2022-07-31

Następująca przykładowa treść żądania zmienia enabled pole na false:

{
  "enabled": false
}

Odpowiedź na to żądanie wygląda następująco:

{
    "id": "thermostat1",
    "etag": "eyJoZWFkZXIiOiJcIjI0MDAwYTdkLTAwMDAtMDMwMC0wMDAwLTYxYjgxZDIwMDAwMFwiIiwiZGF0YSI6IlwiMzMwMDQ1M2EtMDAwMC0wMzAwLTAwMDAtNjFiODFkMjAwMDAwXCIifQ",
    "displayName": "CheckoutThermostat",
    "simulated": true,
    "provisioned": false,
    "template": "dtmi:contoso:Thermostat;1",
    "enabled": false
}

Usuwanie urządzenia

Użyj następującego żądania, aby usunąć urządzenie:

DELETE https://{your app subdomain}/api/devices/{deviceId}?api-version=2022-07-31

Wyświetl listę urządzeń

Użyj następującego żądania, aby pobrać listę urządzeń z aplikacji:

GET https://{your app subdomain}/api/devices?api-version=2022-07-31

Odpowiedź na to żądanie wygląda następująco:

{
    "value": [
        {
            "id": "5jcwskdwbm",
            "etag": "eyJoZWFkZXIiOiJcIjI0MDBlMDdjLTAwMDAtMDMwMC0wMDAwLTYxYjgxYmVlMDAwMFwiIn0",
            "displayName": "Thermostat - 5jcwskdwbm",
            "simulated": false,
            "provisioned": false,
            "template": "dtmi:contoso:Thermostat;1",
            "enabled": true
        },
        {
            "id": "ccc",
            "etag": "eyJoZWFkZXIiOiJcIjI0MDAwYjdkLTAwMDAtMDMwMC0wMDAwLTYxYjgxZDJjMDAwMFwiIn0",
            "displayName": "CheckoutThermostat",
            "simulated": true,
            "provisioned": true,
            "template": "dtmi:contoso:Thermostat;1",
            "enabled": true
        }
    ]
}

Przypisywanie manifestu wdrożenia

Jeśli dodajesz urządzenie usługi IoT Edge, możesz użyć interfejsu API, aby przypisać manifest wdrożenia usługi IoT Edge do urządzenia. Aby dowiedzieć się więcej, zobacz Przypisywanie manifestu wdrożenia do urządzenia.

Korzystanie z filtrów ODATA

W wersji zapoznawczej interfejsu API (api-version=2022-10-31-preview) można użyć filtrów ODATA do filtrowania i sortowania wyników zwracanych przez interfejs API urządzeń listy.

maxpagesize

Użyj parametru maxpagesize , aby ustawić rozmiar wyniku. Maksymalny zwracany rozmiar wyniku to 100, a domyślny rozmiar to 25.

Użyj następującego żądania, aby pobrać 10 pierwszych urządzeń z aplikacji:

GET https://{your app subdomain}/api/devices?api-version=2022-10-31-preview&maxpagesize=10

Odpowiedź na to żądanie wygląda następująco:

{
    "value": [
        {
            "id": "5jcwskdwbm",
            "etag": "eyJoZWFkZXIiOiJcIjI0MDBlMDdjLTAwMDAtMDMwMC0wMDAwLTYxYjgxYmVlMDAwMFwiIn0",
            "displayName": "Thermostat - 5jcwskdwbm",
            "simulated": false,
            "provisioned": false,
            "template": "dtmi:contoso:Thermostat;1",
            "enabled": true
        },
        {
            "id": "5jcwskdgdwbm",
            "etag": "eyJoZWdhhZXIiOiJcIjI0MDBlMDdjLTAwMDAtMDMwMC0wMDAwLTYxYjgxYmVlMDAwMFwiIn0",
            "displayName": "RS40 Occupancy Sensor - 5jcwskdgdwbm",
            "simulated": false,
            "provisioned": false,
            "template": "urn:modelDefinition:aqlyr1ulfku:tz5rut2pvx",
            "enabled": true
        },
        ...
    ],
    "nextLink": "https://{your app subdomain}.azureiotcentral.com/api/devices?api-version=2022-07-31&%24top=1&%24skiptoken=%257B%2522token%2522%253A%2522%252BRID%253A%7EJWYqAOis7THQbBQAAAAAAg%253D%253D%2523RT%253A1%2523TRC%253A1%2523ISV%253A2%2523IEO%253A65551%2523QCF%253A4%2522%252C%2522range%2522%253A%257B%2522min%2522%253A%2522%2522%252C%2522max%2522%253A%252205C1D7F7591D44%2522%257D%257D"
}

Odpowiedź zawiera wartość nextLink , której można użyć do pobrania następnej strony wyników.

filtr

Użyj filtru , aby utworzyć wyrażenia filtrujące listę urządzeń. W poniższej tabeli przedstawiono operatory porównania, których można użyć:

Operator porównania Symbol Przykład
Równa się eq id eq 'device1' and scopes eq 'redmond'
Nie równa się ne Enabled ne true
Mniejsze niż lub równe le id le '26whl7mure6'
Mniejsze niż lt id lt '26whl7mure6'
Większe niż lub równe ge id ge '26whl7mure6'
Większe niż gt id gt '26whl7mure6'

W poniższej tabeli przedstawiono operatory logiki, których można używać w wyrażeniach filtru :

Operator logiki Symbol Przykład
ORAZ oraz id eq 'device1' and enabled eq true
LUB lub id eq 'device1' or simulated eq false

Obecnie filtr działa z następującymi polami urządzenia:

Nazwa pola Type opis
id string Identyfikator urządzenia
displayName string Nazwa wyświetlana urządzenia
enabled boolean Stan włączonego urządzenia
provisioned boolean Stan aprowizowania urządzenia
simulated boolean Stan symulowanego urządzenia
template string Identyfikator szablonu urządzenia
scopes string identyfikator organizacji

filtrowanie obsługiwanych funkcji:

Obecnie jedyną obsługiwaną funkcją contains filtru dla list urządzeń jest funkcja:

filter=contains(displayName, 'device1')

W poniższym przykładzie pokazano, jak pobrać wszystkie urządzenia, na których nazwa wyświetlana zawiera ciąg thermostat:

GET https://{your app subdomain}/api/deviceTemplates?api-version=2022-10-31-preview&filter=contains(displayName, 'thermostat')

Odpowiedź na to żądanie wygląda następująco:

{
    "value": [
        {
            "id": "5jcwskdwbm",
            "etag": "eyJoZWFkZXIiOiJcIjI0MDBlMDdjLTAwMDAtMDMwMC0wMDAwLTYxYjgxYmVlMDAwMFwiIn0",
            "displayName": "thermostat1",
            "simulated": false,
            "provisioned": false,
            "template": "dtmi:contoso:Thermostat;1",
            "enabled": true
        },
        {
            "id": "ccc",
            "etag": "eyJoZWFkZXIiOiJcIjI0MDAwYjdkLTAwMDAtMDMwMC0wMDAwLTYxYjgxZDJjMDAwMFwiIn0",
            "displayName": "thermostat2",
            "simulated": true,
            "provisioned": true,
            "template": "dtmi:contoso:Thermostat;1",
            "enabled": true
        }
    ]
}

orderby

Użyj polecenia orderby , aby posortować wyniki. Obecnie funkcja orderby umożliwia sortowanie tylko według parametru displayName. Domyślnie kolejność sortuje w kolejności rosnącej. Użyj desc do sortowania w kolejności malejącej, na przykład:

orderby=displayName
orderby=displayName desc

W poniższym przykładzie pokazano, jak pobrać wszystkie szablony urządzeń, w których wynik jest sortowany według displayName :

GET https://{your app subdomain}/api/devices?api-version=2022-10-31-preview&orderby=displayName

Odpowiedź na to żądanie wygląda następująco:

{
    "value": [
        {
            "id": "ccc",
            "etag": "eyJoZWFkZXIiOiJcIjI0MDAwYjdkLTAwMDAtMDMwMC0wMDAwLTYxYjgxZDJjMDAwMFwiIn0",
            "displayName": "CheckoutThermostat",
            "simulated": true,
            "provisioned": true,
            "template": "dtmi:contoso:Thermostat;1",
            "enabled": true
        },
        {
            "id": "5jcwskdwbm",
            "etag": "eyJoZWFkZXIiOiJcIjI0MDBlMDdjLTAwMDAtMDMwMC0wMDAwLTYxYjgxYmVlMDAwMFwiIn0",
            "displayName": "Thermostat - 5jcwskdwbm",
            "simulated": false,
            "provisioned": false,
            "template": "dtmi:contoso:Thermostat;1",
            "enabled": true
        }
    ]
}

Można również połączyć dwa lub więcej filtrów.

W poniższym przykładzie pokazano, jak pobrać trzy pierwsze urządzenia, na których nazwa wyświetlana zawiera ciąg Thermostat.

GET https://{your app subdomain}/api/deviceTemplates?api-version=2022-10-31-preview&filter=contains(displayName, 'Thermostat')&maxpagesize=3

Odpowiedź na to żądanie wygląda następująco:

{
  "value": [
    {
      "id": "1fpwlahp0zp",
      "displayName": "Thermostat - 1fpwlahp0zp",
      "simulated": false,
      "provisioned": false,
      "etag": "eyJwZ0luc3RhbmNlIjoiYTRjZGQyMjQtZjIxMi00MTI4LTkyMTMtZjcwMTBlZDhkOWQ0In0=",
      "template": "dtmi:contoso:mythermostattemplate;1",
      "enabled": true
    },
    {
      "id": "1yg0zvpz9un",
      "displayName": "Thermostat - 1yg0zvpz9un",
      "simulated": false,
      "provisioned": false,
      "etag": "eyJwZ0luc3RhbmNlIjoiZGQ1YTY4MDUtYzQxNS00ZTMxLTgxM2ItNTRiYjdiYWQ1MWQ2In0=",
      "template": "dtmi:contoso:mythermostattemplate;1",
      "enabled": true
    },
    {
      "id": "20cp9l96znn",
      "displayName": "Thermostat - 20cp9l96znn",
      "simulated": false,
      "provisioned": false,
      "etag": "eyJwZ0luc3RhbmNlIjoiNGUzNWM4OTItNDBmZi00OTcyLWExYjUtM2I4ZjU5NGZkODBmIn0=",
      "template": "dtmi:contoso:mythermostattemplate;1",
      "enabled": true
    }
  ],
  "nextLink": "https://{your app subdomain}.azureiotcentral.com/api/devices?api-version=2022-10-31-preview&filter=contains%28displayName%2C+%27Thermostat%27%29&maxpagesize=3&$skiptoken=aHR0cHM6Ly9pb3RjLXByb2QtbG4taW5ma3YteWRtLnZhdWx0LmF6dXJlLm5ldC9zZWNyZXRzL2FwaS1lbmMta2V5LzY0MzZkOTY2ZWRjMjRmMDQ5YWM1NmYzMzFhYzIyZjZi%3AgWMDkfdpzBF0eYiYCGRdGQ%3D%3D%3ATVTgi5YVv%2FBfCd7Oos6ayrCIy9CaSUVu2ULktGQoHZDlaN7uPUa1OIuW0MCqT3spVXlSRQ9wgNFXsvb6mXMT3WWapcDB4QPynkI%2FE1Z8k7s3OWiBW3EQpdtit3JTCbj8qRNFkA%3D%3D%3Aq63Js0HL7OCq%2BkTQ19veqA%3D%3D"
}

Grupy urządzeń

Grupy urządzeń można tworzyć w aplikacji usługi IoT Central, aby monitorować zagregowane dane, używać ich z zadaniami i zarządzać dostępem. Grupy urządzeń są definiowane przez filtr, który wybiera urządzenia do dodania do grupy. Grupy urządzeń można tworzyć w portalu usługi IoT Central lub przy użyciu interfejsu API.

Dodawanie grupy urządzeń

Użyj następującego żądania, aby utworzyć nową grupę urządzeń.

PUT https://{your app subdomain}/api/deviceGroups/{deviceGroupId}?api-version=2022-07-31

Podczas tworzenia grupy urządzeń należy zdefiniować element filter , który wybiera urządzenia do dodania do grupy. Element filter identyfikuje szablon urządzenia i wszystkie właściwości, które mają być zgodne. Poniższy przykład obejmuje tworzenie grupy urządzeń zawierającej wszystkie urządzenia skojarzone z szablonem "dtmi:modelDefinition:dtdlv2", w którym provisioned właściwość to true.

{
  "displayName": "Device group 1",
  "description": "Custom device group.",
  "filter": "SELECT * FROM devices WHERE $template = \"dtmi:modelDefinition:dtdlv2\" AND $provisioned = true",
  "organizations": [
    "seattle"
  ]
}

Treść żądania zawiera kilka wymaganych pól:

  • @displayName: Nazwa wyświetlana grupy urządzeń.
  • @filter: Kwerenda definiująca, które urządzenia powinny znajdować się w tej grupie.
  • @etag: Element ETag używany do zapobiegania konfliktom w aktualizacjach urządzeń.
  • description: krótkie podsumowanie grupy urządzeń.

Pole organizacji jest używane tylko wtedy, gdy aplikacja ma zdefiniowaną hierarchię organizacji. Aby dowiedzieć się więcej o organizacjach, zobacz Zarządzanie organizacjami usługi IoT Central.

Odpowiedź na to żądanie wygląda następująco:

{
  "id": "group1",
  "displayName": "Device group 1",
  "description": "Custom device group.",
  "filter": "SELECT * FROM devices WHERE $template = \"dtmi:modelDefinition:dtdlv2\" AND $provisioned = true",
  "organizations": [
    "seattle"
  ]
}

Pobieranie grupy urządzeń

Użyj następującego żądania, aby pobrać szczegóły grupy urządzeń z aplikacji:

GET https://{your app subdomain}/api/deviceGroups/{deviceGroupId}?api-version=2022-07-31
  • deviceGroupId — unikatowy identyfikator grupy urządzeń.

Odpowiedź na to żądanie wygląda następująco:

{
  "id": "475cad48-b7ff-4a09-b51e-1a9021385453",
  "displayName": "DeviceGroupEntry1",
  "description": "This is a default device group containing all the devices for this particular Device Template.",
  "filter": "SELECT * FROM devices WHERE $template = \"dtmi:modelDefinition:dtdlv2\" AND $provisioned = true",
  "organizations": [
    "seattle"
  ]
}

Aktualizowanie grupy urządzeń

PATCH https://{your app subdomain}/api/deviceGroups/{deviceGroupId}?api-version=2022-07-31

Przykładowa treść żądania wygląda podobnie do poniższego przykładu, który aktualizuje displayName grupę urządzeń:

{
  "displayName": "New group name"
}

Odpowiedź na to żądanie wygląda następująco:

{
  "id": "group1",
  "displayName": "New group name",
  "description": "Custom device group.",
  "filter": "SELECT * FROM devices WHERE $template = \"dtmi:modelDefinition:dtdlv2\" AND $provisioned = true",
  "organizations": [
    "seattle"
  ]
}

Usuwanie grupy urządzeń

Użyj następującego żądania, aby usunąć grupę urządzeń:

DELETE https://{your app subdomain}/api/deviceGroups/{deviceGroupId}?api-version=2022-07-31

Wyświetlanie listy grup urządzeń

Użyj następującego żądania, aby pobrać listę grup urządzeń z aplikacji:

GET https://{your app subdomain}/api/deviceGroups?api-version=2022-07-31

Odpowiedź na to żądanie wygląda następująco:

{
  "value": [
    {
      "id": "475cad48-b7ff-4a09-b51e-1a9021385453",
      "displayName": "DeviceGroupEntry1",
      "description": "This is a default device group containing all the devices for this particular Device Template.",
      "filter": "SELECT * FROM devices WHERE $template = \"dtmi:modelDefinition:dtdlv2\" AND $provisioned = true",
      "organizations": [
        "seattle"
      ]
    },
    {
      "id": "c2d5ae1d-2cb7-4f58-bf44-5e816aba0a0e",
      "displayName": "DeviceGroupEntry2",
      "description": "This is a default device group containing all the devices for this particular Device Template.",
      "filter": "SELECT * FROM devices WHERE $template = \"dtmi:modelDefinition:model1\"",
      "organizations": [
        "redmond"
      ]
    },
    {
      "id": "241ad72b-32aa-4216-aabe-91b240582c8d",
      "displayName": "DeviceGroupEntry3",
      "description": "This is a default device group containing all the devices for this particular Device Template.",
      "filter": "SELECT * FROM devices WHERE $template = \"dtmi:modelDefinition:model2\" AND $simulated = true"
    },
    {
      "id": "group4",
      "displayName": "DeviceGroupEntry4",
      "description": "This is a default device group containing all the devices for this particular Device Template.",
      "filter": "SELECT * FROM devices WHERE $template = \"dtmi:modelDefinition:model3\""
    }
  ]
}

Grupy rejestracji

Grupy rejestracji służą do zarządzania opcjami uwierzytelniania urządzeń w aplikacji usługi IoT Central. Aby dowiedzieć się więcej, zobacz Pojęcia dotyczące uwierzytelniania urządzeń w usłudze IoT Central.

Aby dowiedzieć się, jak tworzyć grupy rejestracji i zarządzać nimi w interfejsie użytkownika, zobacz Jak połączyć urządzenia z certyfikatami X.509 z aplikacją usługi IoT Central.

Tworzenie grupy rejestracji

Podczas tworzenia grupy rejestracji dla urządzeń korzystających z certyfikatów X.509 należy najpierw przekazać certyfikat główny lub pośredni do aplikacji usługi IoT Central.

Generowanie certyfikatów głównych i urządzeń

W tej sekcji wygenerujesz certyfikaty X.509, które należy połączyć z usługą IoT Central.

Ostrzeżenie

Ten sposób generowania certyfikatów X.509 jest przeznaczony tylko do testowania. W środowisku produkcyjnym należy użyć oficjalnego, bezpiecznego mechanizmu generowania certyfikatów.

  1. Przejdź do skryptu generatora certyfikatów w pobranym zestawie SDK usługi Microsoft Azure IoT dla Node.js. Zainstaluj wymagane pakiety:

    cd azure-iot-sdk-node/provisioning/tools
    npm install
    
  2. Utwórz certyfikat główny, a następnie utwórz certyfikat urządzenia, uruchamiając skrypt:

    node create_test_cert.js root mytestrootcert
    node create_test_cert.js device sample-device-01 mytestrootcert
    

    Napiwek

    Identyfikator urządzenia może zawierać litery, cyfry i - znak.

Te polecenia tworzą następujący katalog główny i certyfikaty urządzeń:

filename treść
mytestrootcert_cert.pem Publiczna część głównego certyfikatu X.509
mytestrootcert_key.pem Klucz prywatny certyfikatu X.509 głównego
mytestrootcert_fullchain.pem Cały pęk kluczy dla głównego certyfikatu X.509.
mytestrootcert.pfx Plik PFX dla głównego certyfikatu X.509.
sampleDevice01_cert.pem Publiczna część certyfikatu X.509 urządzenia
sampleDevice01_key.pem Klucz prywatny certyfikatu X.509 urządzenia
sampleDevice01_fullchain.pem Cały pęk kluczy dla certyfikatu X.509 urządzenia.
sampleDevice01.pfx Plik PFX dla certyfikatu X.509 urządzenia.

Zanotuj lokalizację tych plików. Potrzebujesz go później.

Generowanie zakodowanej w formacie base-64 wersji certyfikatu głównego

W folderze na komputerze lokalnym zawierającym wygenerowane certyfikaty utwórz plik o nazwie convert.js i dodaj następującą zawartość javaScript:

const fs = require('fs')
const fileContents = fs.readFileSync(process.argv[2]).toString('base64');
console.log(fileContents);

Uruchom następujące polecenie, aby wygenerować kodowaną wersję certyfikatu base-64:

node convert.js mytestrootcert_cert.pem

Zanotuj zakodowaną w formacie base-64 wersję certyfikatu. Potrzebujesz go później.

Dodawanie grupy rejestracji X.509

Użyj następującego żądania, aby utworzyć nową grupę rejestracji z myx509eg identyfikatorem:

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

W poniższym przykładzie przedstawiono treść żądania, która dodaje nową grupę rejestracji X.509:

{
  "displayName": "My group",
  "enabled": true,
  "type": "iot",
  "attestation": {
    "type": "x509"
  }
}

Treść żądania zawiera kilka wymaganych pól:

  • @displayName: Nazwa wyświetlana grupy rejestracji.
  • @enabled: czy urządzenia korzystające z grupy mogą łączyć się z usługą IoT Central.
  • @type: typ urządzeń łączących się za pośrednictwem grupy lub iot iotEdge.
  • attestation: Mechanizm zaświadczania dla grupy rejestracji lub symmetricKey x509.

Odpowiedź na to żądanie wygląda następująco:

{
    "id": "myEnrollmentGroupId",
    "displayName": "My group",
    "enabled": true,
    "type": "iot",
    "attestation": {
        "type": "x509",
        "x509": {
            "signingCertificates": {}
        }
    },
    "etag": "IjdiMDcxZWQ5LTAwMDAtMDcwMC0wMDAwLTYzMWI3MWQ4MDAwMCI="
}

Dodawanie certyfikatu X.509 do grupy rejestracji

Użyj następującego żądania, aby ustawić podstawowy certyfikat X.509 grupy rejestracji myx509eg:

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

Użyj tego żądania, aby dodać do grupy rejestracji certyfikat podstawowy lub pomocniczy X.509.

W poniższym przykładzie przedstawiono treść żądania, która dodaje certyfikat X.509 do grupy rejestracji:

{
  "verified": false,
  "certificate": "<base64-certificate>"
}
  • certificate — wersja base-64 certyfikatu zanotowanego wcześniej.
  • zweryfikowane — true jeśli zaświadczasz, że certyfikat jest prawidłowy, false jeśli musisz udowodnić ważność certyfikatu.

Odpowiedź na to żądanie wygląda następująco:

{
  "verified": false,
  "info": {
    "sha1Thumbprint": "644543467786B60C14DFE6B7C968A1990CF63EAC"
  },
  "etag": "IjE3MDAwODNhLTAwMDAtMDcwMC0wMDAwLTYyNjFmNzk0MDAwMCI="
}

Generowanie kodu weryfikacyjnego dla certyfikatu X.509

Użyj następującego żądania, aby wygenerować kod weryfikacyjny dla podstawowego lub pomocniczego certyfikatu X.509 grupy rejestracji.

Jeśli ustawisz wartość verified false w poprzednim żądaniu, użyj następującego żądania, aby wygenerować kod weryfikacyjny podstawowego certyfikatu X.509 w myx509eg grupie rejestracji:

POST https://{your app subdomain}.azureiotcentral.com/api/enrollmentGroups/myx509eg/certificates/primary/generateVerificationCode?api-version=2022-07-31

Odpowiedź na to żądanie wygląda następująco:

{
  "verificationCode": "<certificate-verification-code>"
}

Zanotuj kod weryfikacyjny, który będzie potrzebny w następnym kroku.

Generowanie certyfikatu weryfikacji

Użyj następującego polecenia, aby wygenerować certyfikat weryfikacji na podstawie kodu weryfikacyjnego w poprzednim kroku:

node create_test_cert.js verification --ca mytestrootcert_cert.pem --key mytestrootcert_key.pem --nonce  {verification-code}

Uruchom następujące polecenie, aby wygenerować zakodowaną w formacie base-64 wersję certyfikatu:

node convert.js verification_cert.pem

Zanotuj zakodowaną w formacie base-64 wersję certyfikatu. Potrzebujesz go później.

Weryfikowanie certyfikatu X.509 grupy rejestracji

Użyj następującego żądania, aby zweryfikować podstawowy certyfikat myx509eg X.509 grupy rejestracji, podając certyfikat z podpisanym kodem weryfikacyjnym:

POST PUT https://{your app subdomain}.azureiotcentral.com/api/enrollmentGroups/myx509eg/certificates/primary/verify?api-version=2022-07-31

W poniższym przykładzie przedstawiono treść żądania, która weryfikuje certyfikat X.509:

{
  "certificate": "base64-verification-certificate"
}

Pobieranie certyfikatu X.509 grupy rejestracji

Użyj następującego żądania, aby pobrać szczegóły certyfikatu X.509 grupy rejestracji z aplikacji:

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

Odpowiedź na to żądanie wygląda następująco:

{
  "verified": true,
  "info": {
    "sha1Thumbprint": "644543467786B60C14DFE6B7C968A1990CF63EAC"
  },
  "etag": "IjE3MDAwODNhLTAwMDAtMDcwMC0wMDAwLTYyNjFmNzk0MDAwMCI="
}

Usuwanie certyfikatu X.509 z grupy rejestracji

Użyj następującego żądania, aby usunąć podstawowy certyfikat X.509 z grupy rejestracji o identyfikatorze myx509eg:

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

Pobieranie grupy rejestracji

Użyj następującego żądania, aby pobrać szczegóły grupy rejestracji z mysymmetric identyfikatorem:

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

Odpowiedź na to żądanie wygląda następująco:

{
  "id": "mysymmetric",
  "displayName": "My group",
  "enabled": true,
  "type": "iot",
  "attestation": {
    "type": "symmetricKey",
    "symmetricKey": {
      "primaryKey": "<primary-symmetric-key>",
      "secondaryKey": "<secondary-symmetric-key>"
    }
  },
  "etag": "IjA4MDUwMTJiLTAwMDAtMDcwMC0wMDAwLTYyODJhOWVjMDAwMCI="
}

Aktualizowanie grupy rejestracji

Użyj następującego żądania, aby zaktualizować grupę rejestracji.

PATCH https://{your app subdomain}.azureiotcentral.com/api/enrollmentGroups/myx509eg?api-version=2022-07-31

W poniższym przykładzie przedstawiono treść żądania, która aktualizuje nazwę wyświetlaną grupy rejestracji:

{
  "displayName": "My new group name",
}

Odpowiedź na to żądanie wygląda następująco:

{
  "id": "myEnrollmentGroupId",
  "displayName": "My new group name",
  "enabled": true,
  "type": "iot",
  "attestation": {
    "type": "symmetricKey",
    "symmetricKey": {
      "primaryKey": "<primary-symmetric-key>",
      "secondaryKey": "<secondary-symmetric-key>"
    }
  },
  "etag": "IjA4MDUwMTJiLTAwMDAtMDcwMC0wMDAwLTYyODJhOWVjMDAwMCI="
}

Usuwanie grupy rejestracji

Użyj następującego żądania, aby usunąć grupę rejestracji o identyfikatorze myx509eg:

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

Wyświetlanie listy grup rejestracji

Użyj następującego żądania, aby pobrać listę grup rejestracji z aplikacji:

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

Odpowiedź na to żądanie wygląda następująco:

{
    "value": [
        {
            "id": "myEnrollmentGroupId",
            "displayName": "My group",
            "enabled": true,
            "type": "iot",
            "attestation": {
                "type": "symmetricKey",
                "symmetricKey": {
                    "primaryKey": "primaryKey",
                    "secondaryKey": "secondarykey"
                }
            },
            "etag": "IjZkMDc1YTgzLTAwMDAtMDcwMC0wMDAwLTYzMTc5ZjA4MDAwMCI="
        },
        {
            "id": "enrollmentGroupId2",
            "displayName": "My group",
            "enabled": true,
            "type": "iot",
            "attestation": {
                "type": "x509",
                "x509": {
                    "signingCertificates": {}
                }
            },
            "etag": "IjZkMDdjNjkyLTAwMDAtMDcwMC0wMDAwLTYzMTdhMDY1MDAwMCI="
        }
    ]
}