Как подключиться к системному модулю IoT Edge с помощью пакета SDK для устройств IoT

Я знаю, что мы можем использовать SDK устройства IoT для связи с модулями моего устройства IoT Edge через строку подключения модуля. Я могу подключаться к несистемным периферийным модулям, но не к системным модулям. Я хотел бы знать, действительно ли это запрещено, и знает ли кто-нибудь ссылку на это?

Я имею в виду официальный образец на гитхабе.

Вот пример c # для модуля < / а>.

ModuleClient moduleClient = ModuleClient.CreateFromConnectionString(s_moduleConnectionString, s_transportType);

var sample = new TwinSample(moduleClient);
sample.RunSampleAsync().GetAwaiter().GetResult(); // this call the code below

//My breakpoint in RunSampleAsync()
//it hangs at the line below
Twin twin = await _moduleClient.GetTwinAsync().ConfigureAwait(false);

Я ожидаю, что он будет вести себя одинаково для системного и несистемного модулей. Несистемный модуль работает нормально.


person csamleong    schedule 31.05.2019    source источник
comment
Я не понимаю вопроса; можете ли вы предоставить более подробную информацию? Модуль, развернутый на пограничном устройстве, может использовать SDK устройства для связи через Edge Hub с другим модулем (отправлять события или вызывать прямой метод). Это то, что вы пытаетесь сделать? Кроме того, я не понимаю, что вы пытаетесь сделать с системными и несистемными модулями. Если вы напишете модуль и развернете его на своем устройстве, это будет несистемный модуль. Системные модули - это $edgeAgent и $edgeHub. Ваш модуль пытается отправлять события системному модулю? Или вызвать прямой метод в системном модуле?   -  person Damon Barry    schedule 31.05.2019
comment
@DamonBarry мне нужно создать библиотеку с использованием SDK устройства для связи с периферийным устройством IoT, которое не находится в настраиваемом модуле. Читая документацию, я понимаю, что $ edgehub хранит локальный кеш. Я хотел бы знать, могу ли я получить доступ к локальному кешу или другим свойствам как таковым в $ edgehub. Например. в моем настраиваемом модуле я могу получить клиентский объект модуля, а затем прочитать их свойства. Есть ли способы подключиться к системному модулю и получить их клиентов модуля?   -  person csamleong    schedule 01.06.2019


Ответы (1)


Вы можете написать код, который будет развернут как модуль на устройстве с IoT Edge. Ваш модуль может запрашивать свой собственный двойник и свойства. Системные модули, составляющие пограничную среду исполнения ($edgeAgent и $edgeHub), могут делать то же самое для себя. Не следует пытаться подключиться к Центру Интернета вещей, используя идентификатор одного из системных модулей, поскольку это может конфликтовать с модулями системы.

Вы можете увидеть двойников любого модуля на портале Azure, включая двойников системных модулей. Вы также можете использовать SDK службы с политикой общего доступа для получения этой информации. (Пример RegistryManager здесь демонстрирует подключение к Центру Интернета вещей для получения информации о двойниках. Показываются только устройства, а не модули, но концепции аналогичны.)

Edge Hub (также известный как $edgeHub) имеет локальный кеш, где он временно хранит полученные сообщения, пока не сможет доставить их в другие модули или в облако. У этого кеша нет общедоступного интерфейса - он полностью внутренний, и формат хранимых в нем данных может быть изменен в любое время, поэтому вам не следует пытаться получить к нему доступ.

person Damon Barry    schedule 03.06.2019
comment
Спасибо, ваш третий абзац ответил на мои вопросы. - person csamleong; 05.06.2019