Как получить название вещи из темы MQTT в конвейере AWS Iot Analytics?
В AWS Iot Analytics я создал следующее:
- Канал: основной шаблон темы => $aws/ вещи /+/ тень / обновление / принято
- Трубопровод: ФРС от предыдущего канала, выбирает атрибуты из сообщения
- Хранилище данных для сохранения сообщений
Входящее сообщение на канал является теневым обновлением / принято и выглядит так:
{
"state": {
"reported": {
"active": false,
"telemetry": {
"temperature": 72,
"humidity": 58,
"occupancy": 28
},
"config": null
}
},
"metadata": {
"reported": {
"active": {
"timestamp": 1533059587
},
"telemetry": {
"temperature": {
"timestamp": 1533059587
},
"humidity": {
"timestamp": 1533059587
},
"occupancy": {
"timestamp": 1533059587
}
},
"config": {
"timestamp": 1533059587
}
}
},
"version": 89,
"timestamp": 1533059587,
"clientToken": "..."
}
Я хочу извлечь название вещи из структуры темы, которая у меня есть здесь подстановочный знак:
$aws/things/+/shadow/update/accepted
Есть ли способ сделать это или он должен быть включен непосредственно в тело сообщения, если я хочу использовать его здесь для обработки?
Благодарю.
1 ответ
По-видимому, это достигается путем обогащения полезной нагрузки, которая покидает ядро IOT, путем добавления оператора SQL в правило ядра IOT, которое передает полезную нагрузку в IOT Analytics.
Использование topic()
function inside SQL statement:
SELECT *, topic() AS topic FROM 'your/thing/+/topic'
https://docs.aws.amazon.com/en_us/iot/latest/developerguide/iot-substitution-templates.html
Есть принятый ответ, но, похоже, он упустил эту часть вопроса, которая
Я хочу извлечь название предмета из структуры темы, которое у меня здесь как дикая карта
$aws/things/+/shadow/update/accepted
Я подумал, что отправлю это для тех, кому нужно извлечь имя вещи. Если вы хотите извлечь имя вещи, вы можете использовать
topic(3)
поскольку он оценивается как 3 (это позиция названия предмета в теме). Вот пример правила, которое повторно публикуется в теме, которая использует имя объекта, полученное из темы.
{
"sql": "SELECT state, version FROM '$aws/things/+/shadow/update/delta'",
"ruleDisabled": false,
"actions": [
{
"republish": {
"topic": "${topic(3)}/delta",
"roleArn": "arn:aws:iam::123456789012:role/my-iot-role"
}
}
]
}
Вот ссылка на приведенный выше пример. "topic()
"возвращает полную тему. Они называются шаблонами подстановки.
Также следует отметить одну важную вещь (которая может привести к ненужному времени на отладку) - это повторная публикация в зарезервированной теме, которая начинается с
$
, используйте
$$
(экранируйте '$', используя другой '$'). Например, для повторной публикации в теневой теме устройства
$aws/things/MyThing/shadow/update
укажите тему как
$$aws/things/MyThing/shadow/update