Я выполнил все инструкции по настройке «Устройства нисходящего потока» для отправки сообщений через IoT Edge, работающий в Transparent Gateway.Я считаю, что мои правила маршрутизации верны, но мой функциональный модуль не получает ни одно из Сообщений через поток сообщений.
Это инструкция, которой я следовал: https://docs.microsoft.com/en-us/azure/iot-edge/how-to-create-transparent-gateway-linux
Яиспользуя 2 виртуальные машины Linxu (Ubuntu 16.04.5).
- Виртуальный шлюз IoT Edge Transparent Gateway настроен с правильной настройкой, настройкой и проверкой всех сертификатов.Я смог использовать инструмент openssl из
openssl s_client -connect {my-gateway-machine-name-dns-name} .centralus.cloudapp.azure.com: 8883 -CAfile/certs/certs/azure-iot-test-only.root.ca.cert.pem -showcerts
Нижестоящее устройство, работающее на виртуальной машине Linux с установленными и проверенными сертификатами.Моя строка подключения выглядит следующим образом:
HostName = {IoTHubName} .azure-devices.net; DeviceId = TC51_EdgeDownStreamDevice01; SharedAccessKey = {My-Shared-Access-Key} = GatewayHostName = {my-gateway-machine-name-dns-name} .centralus.cloudapp.azure.com
a.Я подтвердил, что получил успешную проверку сертификата SSL с помощью инструмента openssl.б.Я использую следующее в моем нисходящем устройстве для подключения с использованием NodeJS SDK
var client = DeviceClient.fromConnectionString (connectionString, Mqtt);с.Я вижу сообщения, отображаемые в концентраторе IoT Azure в облаке, но не могу запустить мой модуль на прозрачном шлюзе IoT.
Вот мои правила маршрутизации, сконфигурированные для edgeHub, как указано в разделе «Маршрутизация сообщений от нижестоящих устройств» на странице примера документа.
Это то, что показывают примеры документов: {"маршруты":{"sensorToAIInsightsInput1": "FROM / messages / * WHERE NOT IS_DEFINED ($ connectionModuleId) INTO BrokeredEndpoint (\" / modules / ai_insights / input / input1 \ ")", "AIInsightsToIoTHub": "FROM / messages / modules / ai_insights/ output1 INTO $ upstream "}}
Это то, что моя конфигурация маршрутизации установлена на:" route ": {" downstreamBatterySensorToBatteryDataFunctionInput1 ":" FROM / * ГДЕ НЕ IS_DEFINED ($ connectionModuleId) INTO BrokeredEndpoint (\ "/modules / BatteryDataFunctionModule / входы / input1 \ ")", "BatteryDataFunctionModuleToIoTHub": "FROM / messages / modules / BatteryDataFunctionModule / output / * INTO $ upstream"}
** Обратите внимание, что я использовал "FROM/ * WHERE NOT IS_DEFINED "и" FROM / messages / * WHERE NOT IS_DEFINED "
Мой модуль на IoT Edge настроен как функция.Когда я использую пример «из коробки», где имитирующее устройство - это другой модуль, работающий на IoT Edge, моя функция срабатывает правильно.Только когда я пытаюсь использовать «Устройство нисходящего потока», модуль не запускается.
Я включил «Журналирование отладки для IoT Edge Service», запущенное на моем Прозрачном шлюзе.
This is the basic Run method for the Function module:
#r "Microsoft.Azure.Devices.Client"
#r "Newtonsoft.Json"
using System.IO;
using Microsoft.Azure.Devices.Client;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
// Filter messages based on the temperature value in the body of the message and the temperature threshold value.
public static async Task Run(Message messageReceived, IAsyncCollector<Message> output, TraceWriter log)
{
Как я могу выяснить, как заставить мой Модуль работать в IoT Edge, чтобы он попадал / запускался с устройства Downstream?