WedX - журнал о программировании и компьютерных науках

Как перенаправить сообщение, поступающее с IotDevice, на IoTEdge-устройство?

Я перешел по этой ссылке Чтобы написать собственные модули. В этом руководстве модуль с именем tempSensor отправляет данные другому модулю CSharpModule. Что касается учебника, я его успешно реализовал.

Я хочу: получать данные телеметрии от IoTDevice на IoTEdge Device.

Архитектура: Azure IoTHub подключен к устройствам Интернета вещей и устройству IoTEdge.

Что я пробовал: я попытался отправить данные телеметрии с моделируемого устройства, подключенного к ioTEdge с помощью connectionString.

Код для отправки данных здесь

        //DeviceClient connected to IoTEdge     
        s_deviceClient = DeviceClient.CreateFromConnectionString(s_connectionString);

        private static async void SendDeviceToCloudMessagesAsync()
        {
            // Initial telemetry values
            double minTemperature = 20;
            double minHumidity = 60;
            Random rand = new Random();

            while (true)
            {
                double currentTemperature = minTemperature + rand.NextDouble() * 15;
                double currentHumidity = minHumidity + rand.NextDouble() * 20;

                // Create JSON message
                var telemetryDataPoint = new
                {
                    temperature = currentTemperature,
                    humidity = currentHumidity
                };
                var messageString = JsonConvert.SerializeObject(telemetryDataPoint);
                var message = new Message(Encoding.ASCII.GetBytes(messageString));

                // Add a custom application property to the message.                    
                message.Properties.Add("temperatureAlert", (currentTemperature > 30) ? "true" : "false");

                // Send the tlemetry message to endpoint output1
                await s_deviceClient.SendEventAsync("ouput1",message);

                //await s_deviceClient.SendEventAsync(message);
                Console.WriteLine("{0} > Sending message: {1}", DateTime.Now, messageString);

                await Task.Delay(s_telemetryInterval * 10000);
            }
        }

Получатель кода настраиваемого модуля IoTEdge находится здесь ...

        static async Task Init()
        {
            AmqpTransportSettings amqpSetting = new AmqpTransportSettings(TransportType.Amqp_Tcp_Only);
            ITransportSettings[] settings = { amqpSetting };

            // Open a connection to the Edge runtime
            ModuleClient ioTHubModuleClient = await ModuleClient.CreateFromEnvironmentAsync(settings);
            await ioTHubModuleClient.OpenAsync();
            Console.WriteLine("IoT Hub module client initialized.");

        // Register a callback for messages that are received by the module.
            // await ioTHubModuleClient.SetImputMessageHandlerAsync("input1", PipeMessage, iotHubModuleClient);

            // Read the TemperatureThreshold value from the module twin's desired properties
            var moduleTwin = await ioTHubModuleClient.GetTwinAsync();
            var moduleTwinCollection = moduleTwin.Properties.Desired;
            try {
                temperatureThreshold = moduleTwinCollection["iothub-connection-device-id"];
            } catch(ArgumentOutOfRangeException e) {
                Console.WriteLine($"Property TemperatureThreshold not exist: {e.Message}"); 
            }

            // Attach a callback for updates to the module twin's desired properties.
            await ioTHubModuleClient.SetDesiredPropertyUpdateCallbackAsync(OnDesiredPropertiesUpdate, null);

            // Register a callback for messages that are received by the module
            await ioTHubModuleClient.SetInputMessageHandlerAsync("input1", PipeMessage, ioTHubModuleClient);
        }

Информация о маршруте из файла deployment.template.json настраиваемого модуля выглядит следующим образом.

 "routes": {
      "aggregationModuleToIoTHub": "FROM /messages/modules/aggregationModule/outputs/* INTO $upstream"           
    }

Но проблема в том, что обратный вызов PipeMessage никогда не вызывается. Насколько я понимаю, на конечную точку IoTEdge messages / input1 не поступает сообщение.


Ответы:


1

Чтобы убедиться, что я понял ваш вопрос, вы пытаетесь отправить код с IoT-устройства вне IoT Edge в IoT Edge, а затем направить эти данные через модуль в IoT Edge в IoT Hub? это верно? В этом случае мы называем IoT-устройство нисходящим или «листовым» устройством. IoT Edge необходимо настроить как «прозрачный шлюз», например в этой документации. Как только вы это сделаете, вам нужно добавить; GatewayHostName = в конец строки подключения, где это имя, которое вы использовали в качестве параметра hostname в вашем файле config.yaml.

14.09.2018
  • да вы правильно поняли. Тогда я попробую, дам тебе знать. просто хочу подтвердить одно: должно ли устройство отправки данных подключаться к IotEdge? со строкой подключения? или с Центром Интернета вещей? 14.09.2018
  • Устройство отправки данных использует обычную строку подключения на основе IoT Hub ... в конец вы просто добавляете; GatewayHostName = ‹your_edge_device_name›, где ‹your_edge_device_name› - это имя вашего пограничного устройства из параметра hostname в config.yaml … Вам необходимо убедиться, что ваше оконечное устройство (как мы его называем) может разрешить это имя (поэтому вам может потребоваться добавить запись файла hosts, если у вас нет DNS). Кроме того, как указано в документации, о которой я упоминал выше, вам необходимо убедиться, что конечное устройство доверяет корневому сертификату CA вашего пограничного устройства, иначе соединение между листом и краем не удастся. 14.09.2018
  • Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]