Я пытаюсь создать следующий процесс:
IoT-устройство отправляет сообщение Центр Интернета вещей, которое, в свою очередь, если сообщение содержит какое-либо значение, запускает уведомление для всех зарегистрированных устройств Android через Центр уведомлений.
Во-первых, мне все равно, каково содержание самого сообщения, и я просто хочу запускать уведомление о каждом входящем сообщении.
Мне удалось настроить устройство IoT и подключить его к концентратору IoT. Мне также удалось настроить концентратор уведомлений и подключить его к приложению для Android таким образом, что, когда я использую «тестовую отправку» в концентраторе уведомлений, на устройство Android поступает уведомление.
Чтобы соединить оба конца (концентратор IoT и концентратор уведомлений), я попытался следовать следующему руководству: https://www.developer.com/ws/android/sending-notifications-to-mobile-apps-from-azure-function-apps.html.
Кроме того, я добавил маршрутизацию из IoT Hub в соответствующую очередь в служебной шине.
Теперь всякий раз, когда устройство IoT отправляет сообщение в концентратор, я вижу, что очередь получает сообщение. Однако я не могу использовать очередь для запуска уведомления.
Добавленная мной функция ServiceHubQueueTrigger
имеет следующую ошибку на портале:
Error:
Function (ServiceBusQueueTrigger1) Error: The binding type(s) 'notificationHub' are not registered. Please ensure the type is correct and the binding extension is installed.
Его function.json
выглядит так:
{
"bindings": [
{
"name": "myQueueItem",
"type": "serviceBusTrigger",
"direction": "in",
"queueName": "notificationqueue",
"connection": "ServiceBusConnection",
"accessRights": "manage"
},
{
"name": "notification",
"type": "notificationHub",
"hubName": "<hub-name>",
"connection": "NotificationConnString",
"platform": "gcm",
"tagExpression": "",
"direction": "out"
}
]
}
где hub-name
— название Центра уведомлений.
Как я могу запускать уведомления на устройства Android через очередь?
Есть ли способ вызвать их непосредственно из функции IoT Hub Event Trigger
?
Спасибо!
Да, вы можете активировать функцию Azure непосредственно из входящих событий Центра Интернета вещей. См. один из моих примеров здесь: https://github.com/sebader/iotedge-end2end/blob/master/CloudFunctions/IotHubMessageProcessor.cs
public static void Run([IoTHubTrigger("messages/events", Connection = "iothubevents_cs", ConsumerGroup = "receiverfunction")]EventData message, ILogger log)
{
log.LogInformation($"IotHubMessageProcessor received a message: {Encoding.UTF8.GetString(message.Body.Array)}");
}
Привязка функции Центра Интернета вещей: https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-event-iot
Это возвращает меня к ошибке, которую я получил при попытке добавить тип notificationHub
к типу function.json
. Он не распознает тип, и я не могу настроить функцию. Я не знаю, связано ли это с версиями функций 1.x или 2.x, но это происходит со всеми функциями, которые я пытаюсь создать через портал.
Это похоже на простую проблему с версией функций 1.x и 2.x.
Чтобы решить эту проблему, если вы используете портал Azure:
Function App
.Function App Settings
установите версию ~1
:
Если вы используете Visual Studio, просто выберите v1 при создании функции.
Как написано в документации Microsoft, привязка уведомлений не поддерживает функции 2.x, к сожалению.
Спасибо, но как мне использовать функцию для запуска уведомлений Android?