Как подключить шлюз Minew BLE Gateway к Azure Iot Central?

Я пытаюсь подключить устройство шлюза Minew BLE (https://en.minewtech.com/gateway.html) в лазурный IOT Central. В шаблоне устройства есть готовый вариант под названием FM 201 BLE, и я просто согласился с ним. Шлюз требует, чтобы вы подключили его через сертификаты X509 (ECC), поэтому я создал несколько самоподписанных сертификатов, загрузил их на устройство шлюза и загрузил его с его панели управления  введите описание изображения здесь

Я взял URL отсюда

введите здесь описание изображения

Я что-то делаю не так? Я ожидаю чего-то в аналитике моего iotcentral приложения или хотя бы файла журнала от BLE Gateway где-нибудь, если аутентификация с сертификатами не удалась. Любое руководство будет высоко оценено. Я провел часы в Интернете, пытаясь заставить это работать


person Shahab Uddin    schedule 23.12.2019    source источник
comment
URL-адрес приложения, который вы используете, не является конечной точкой, с которой устройство должно взаимодействовать. Обычно для подключения к Central устройство сначала связывается с DPS, а затем ему назначается конечная точка IoT Hub. Я предполагаю, что вам нужно заполнить эту конечную точку IoTHub на вашем устройстве Minew.   -  person Matthijs van der Veer    schedule 23.12.2019
comment
Привет, спасибо. Я немного погуглил. Устройство minew не может использовать SDK для получения URL-адреса хаба, о котором вы говорите. У него буквально есть простая панель инструментов, на которой я должен ввести URL-адрес хоста. Знаете ли вы, где я могу получить этот базовый URL-адрес iothubs с панели инструментов, который я могу просто вставить в поле хоста моего мини-устройства?   -  person Shahab Uddin    schedule 23.12.2019
comment
@ShahabUddin, вы можете получить HostName базового IoTHub из строки подключения, сгенерированной утилитой dps_cstr, см. Следующую ссылку github.com/Azure/dps-keygen/tree/master/bin/windows   -  person Roman Kiss    schedule 24.12.2019
comment
@roman: Эй, я только что попробовал этот инструмент. и получил строку в этом формате Hostname = x; Deviceid = y; ShareAccesskey = z Я скопировал x (имя хоста) и ввел в поле ввода URL-адреса панели управления моего шлюза BLE. Похоже, что до сих пор ничего не изменилось (шлюз не создает никаких журналов, чтобы усугубить ситуацию). PS пытаюсь коннектиться с сертификатами x509 как вы понимаете. Я уже пробовал этот URL-адрес ранее в URL-адресе хоста global.azure-devices-provisioning.net, и ни один из них не помог мне.   -  person Shahab Uddin    schedule 24.12.2019


Ответы (1)


Я рекомендую выполнить следующие шаги перед подключением реального устройства к IoT Central:

  1. Создайте 3 устройства (например, device1, device2 и device3) с разными типами аутентификации, такими как sas, selfSigned и certificateAuthority в Центре Интернета вещей ( вы также можете использовать уровень Free)

  2. Создайте моделируемое устройство (консольную программу) для каждого типа аутентификации, подключите их к Центру Интернета вещей и отправьте пару сообщений.

  3. Я считаю, что все устройства будут работать правильно (как в моем тесте), поэтому аутентификация через сертификат CA (и листовой сертификат) и самоподписанный сертификат в порядке.

Обратите внимание, что описанные выше шаги прошли в моем тесте с использованием смоделированных устройств C # (.Net SDK), а также с прямым протоколом MQTT с моим Azure IoT Hub Tester.

  1. После того, как ваши смоделированные устройства заработают, этот шаг заключается в их замене (кроме устройства sas) вашим реальным устройством. Это важный шаг, который докажет, что ваше настоящее устройство может быть подключено к Azure IoT Hub.

  2. На этом этапе мы собираемся заменить Центр Интернета вещей на Центральное приложение Интернета вещей. Вы можете создать бесплатное приложение для предварительного просмотра. Вы можете загрузить шаблон устройства, например FM-201 IoT Gateway, и создать 3 устройства, как на шаге 1, из этого шаблона. Обратите внимание: используйте те же идентификаторы устройств, что и на шаге 1, мы можем использовать тот же листовой сертификат устройства.

  3. Используя инструмент dps_cstr, мы можем получить строку подключения устройства для , лежащий в основе IoT Hub приложения IoTC.

  4. Замените имя хоста в ваших смоделированных устройствах, а также вам необходимо создать токен sas из этой строки подключения для аутентификации устройства с помощью токена sas.

  5. Запустите моделируемые устройства, подключенные к приложению IoTC.

  6. Основываясь на моем недавнем тесте, вы увидите, что работает только устройство sas, остальные, например устройства сертификатов, не работают из-за ошибки аутентификации.

  7. Этот шаг предназначен для устранения неполадок, по которым моделируемые устройства X509, переключающиеся на приложение IoTC, не проходят проверку подлинности с использованием тех же сертификатов. Для этого случая нет надлежащего документа, и я надеюсь, что кто-то из команды IoT Central ответит на него, если мы сможем переключить устройство X509 между Центром Интернета вещей и приложением IoTC, как мы можем сделать это для устройства sas .

Обновление:

На основе Образца клиента устройства инициализации - Microsoft Azure IoT SDK для .NET, шаги 6 и 7 подходят для sas device, где утилита dps_cstr зарегистрирует устройство для SecurityProviderSymmetricKey. После того, как устройство было зарегистрировано и предоставлено этому провайдеру безопасности, реальное устройство (а) должно быть подключено только этим способом. Вот почему мы получаем ошибку для смоделированных устройств x509. Итак, следующий шаг - это пример подготовки устройства X509 с листовым сертификатом (device3.pfx). Обратите внимание, что сертификат CA необходимо загрузить в приложение IoTC.

6a. Регистрация device3 (из шага 1) в приложении IoTC.

string GlobalDeviceEndpoint = "global.azure-devices-provisioning.net";
string idScope = "<idScope_IoTCapp>";
string certificateFileName = @"<your path>\device3.pfx";            
//
var cert = new X509Certificate2(certificateFileName, "1234");
var securityProvider = new SecurityProviderX509Certificate(cert);
var transport = new ProvisioningTransportHandlerMqtt(TransportFallbackType.TcpOnly);
var provClient = ProvisioningDeviceClient.Create(GlobalDeviceEndpoint, idScope, securityProvider, transport);           
var result = provClient.RegisterAsync().Result;
string hostname = result.AssignedHub;
string deviceId = result.DeviceId;

На этом этапе состояние устройства в приложении IoTC - Provisioned, и можно подключить смоделированное или реальное устройство.

6b. Для подготовки устройства к приложению IoT Central также можно использовать REST API. Следующие фрагменты экрана показывают подготовку X509 device3, аутентифицированного его конечным сертификатом с помощью Postman:

Перед использованием вызовов REST мы должны добавить листовой сертификат device3 в Postman:

введите здесь описание изображения

Теперь мы можем вызвать службу подготовки:

PUT https://global.azure-devices-provisioning.net/0ne000AA0F5/registrations/device3/register?api-version=2019-03-31

введите здесь описание изображения

Чтобы получить объект registrationState:

GET https://global.azure-devices-provisioning.net/0ne000AA0F5/registrations/device3/operations/{operationId}?api-version=2019-03-31

введите здесь описание изображения

Как вы можете видеть на картинке выше, приложение IoTC готово к подключению к реальному устройству X509.

 "registrationState": {
    "x509": {
        "enrollmentGroupId": "fa472b95-b5f6-47af-a4ef-9490f45c3961"
    },
    "registrationId": "device3",
    "createdDateTimeUtc": "2020-01-04T17:09:15.5147034Z",
    "assignedHub": "iotc-bceedf66-9792-4f32-b49f-7674a6aa09ff.azure-devices.net",
    "deviceId": "device3",
    "status": "assigned",
    "substatus": "initialAssignment",
    "lastUpdatedDateTimeUtc": "2020-01-04T17:09:15.6947214Z",
    "etag": "IjBmMDA3YTgzLTAwMDAtMGMwMC0wMDAwLTVlMTBjNmJiMDAwMCI="
}

Обратите внимание, что в случае инициализации sas-устройства (например, device1 в этом тесте) с использованием вызовов REST, заголовок Authorization должен быть настроенным с помощью токена sas:

string sas = generateSASToken($"{scopeId}/registrations/{deviceId}", deviceKey, "registration");

7a. Следующий фрагмент кода является примером отправки данных телеметрии с устройства X509 с его конечным сертификатом (device3.pfx):

using (var dc = DeviceClient.Create(hostname, new DeviceAuthenticationWithX509Certificate(deviceId, cert), Microsoft.Azure.Devices.Client.TransportType.Mqtt))
{
   var telemetryDataPoint = new { bleCnt = 50, telemetryLocation = new { lat = 49.85, lon = 20.99, alt = 29.41 } };
   dc.OpenAsync().ConfigureAwait(false);
   dc.SendEventAsync(new Message(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(telemetryDataPoint)))).ConfigureAwait(false);
   dc.CloseAsync().ConfigureAwait(false);
}

Кроме того, с помощью моего Azure IoT Hub Tester, основанного на библиотека M2Mqtt device3 с листовым сертификатом device3.pfx успешно подключился к приложению IoTC.

На основе вышеуказанного обновления я хотел бы исправить шаг 10. Похоже, устройства (например, sas и X509) можно переключать между Azure IoT Hub и центральным приложением IoT после того, как устройства были подготовлены в приложении IoTC. Другими словами, имя хоста (например, из моего тестового предварительного просмотра приложения IoTC iotc-bceedf66-9792-4f32-b49f-7674a6aa09ff.azure-devices.net) из процесса подготовки является допустимым устройством, обращенным к конечной точке.

Также мой тест показал, что устройство с прямым протоколом MQTT, использующим листовой сертификат (device3.pfx) для подключения к приложению IoTC, работает очень хорошо, оба направления включают модель PnP.

Следующие фрагменты экрана показывают сторону устройства и приложение IoTC:

введите здесь описание изображения

публикация некоторых данных телеметрии:

введите здесь описание изображения

отображение данных телеметрии на панели управления:

введите здесь описание изображения

и сертификат корневого ЦС в приложении IoTC:

введите здесь описание изображения

person Roman Kiss    schedule 30.12.2019