MQTT Topic / property bag from Iot hub routed to event hub - azure-eventhub

my device publish a MQTT message to an Azure Iot hub and uses a topic with an additional property bag. The iot hub routes the message with the build-in routes and endpoints feature to an eventhub.
Is it possible, that an application which listens to the eventhub, could get the topic and property bag information from the message? And if it's possible, is each propertiy in the property bag accessible as property/value pair, or do I have to parse the topic property?
Thanks in advance!
Best regards,
Mananana

the following screen snippets show the MQTT Client and the Azure Function as an EventHub trigger:
and the consumer side:

Related

Google IoT Core - How to subscribe to a topic

I have developed a device that is able to connect to Google IoT Core through the MQTT protocol, I can publish MQTT messages on telemetry topics (/devices/DEVICE_ID/events).
But I can't figure out how to subscribe my device to a generic topic and send messages from cloud to device via this topic.
Through the console I created the topic MyTestTopic and a subscription MyTestTopic-sub, I guess that somehow I have to subscribe my device to the subscription MyTestTopic-sub, but I don't know to which topic I have to subscribe my device.
I tried to subscribe my device to the following topics:
projects/PROJECT_ID/topics/MyTestTopic
projects/PROJECT_ID/topics/MyTestTopic-sub
/devices/DEVICE_ID/events/MyTestTopic
/devices/DEVICE_ID/events/MyTestTopic-sub
the subscription to these topics seems to be successful, but the device does not receive the messages I send from the console.
Any suggestions please?
I found this thread (Google Cloud IoT - Invalid MQTT publish topic) from 4 years ago, from which I understand that it is possible to subscribe only to some predefined topics, also from the various documents I have read I understand that Google IoT Core allows devices to subscribe to only two topics: /devices/{device-id}/config and /devices/{device-id}/commands/#
Has anything changed since then?
So to be clear, there are two different "topics" in play here. There's the MQTT topics that are described in the docs you found, config and commands. Those are subscribed to on the device using an MQTT client (e.g. Paho MQTT), and sent down to the device from somewhere else via the IoT Core Admin APIs. Then there's Pub/Sub topics. Out of the box, a device using IoT Core does not directly interact with Pub/Sub at all. They publish/receive via the MQTT topics only. So if you register a device with IoT Core, all messages come and go via the MQTT bridge (or HTTPS).
What Gambit support linked to in that github repo is a direct subscription to a Pub/Sub topic (not MQTT). If you look at the Python code, it's establishing proper Google Cloud Credentials via a json token (service account bearer token) that needs to be present on the device or a proxy device. Depending on the device you're using, that may not be possible of course (implementing GCP APIs on a microcontroller is difficult at best).
The easiest way I've seen this done is to implement a Cloud Function that subscribes to a Pub/Sub topic you want to use, and it implements the proper IoT Core Admin calls to push the Pub/Sub messages down to the device as needed. But of course, it all depends on what you're trying to do.

Google Cloud IoT- How to publish to the same topic with multiple IoT devices and process it by cloud functions

In my project multiple IoT devices need to publish to a single topic and cloud functions listening to that topic need to process data published by IoT devices. Multiple devices should be able to publish at the same time.A MQTT broker logic is needed. But in Google IoT Core "The MQTT bridge allows only a single connection for a given device ID. If a second device connects with the ID of a device that is already connected, the older device connection will be closed automatically.".
I am new to google cloud IoT and trying to understand basic concepts. I have looked into gateways but I am not sure that gateways work as broker. Can multiple devices publish through a gateway to a same single topic? or should I implement/add a MQTT broker(mosquitto I guess) myself or is there an another way to use google Cloud IoT in my case? Could you guys direct me to the right direction. Opening sub/pub topics for each device doesn't sound right because in my project there can be thousands of IoT devices.
Let all the devices in the registry publish messages to the common topic given to the registry.Then trigger a cloud function with this topic.
You can process the messages with cloud function based on the deviceId

Do messages sent via AWS IoT Basic ingest not reach subscribers (unlike MQTT or HTTP)?

Device can send message to the AWS IoT rules engine either via MQTT, HTTP or basic ingest. Rules engine uses SQL query to listen on topic and selects the data when topic matching the FROM clause arrives.
Code to send MQTT message:
device.publish('topic/subtopic, payload)
Code to send message via basic ingest is:
device.publish('aws/rules/topic/subtopic, payload)
URL to send message via HTTP POST is:
https://IoT_data_endpoint/topics/url_encoded_topic_name?qos=1
MQTT involves broker (pub/sub). So message sent to topic via MQTT will reach all subscribers. Similarly message sent via HTTP will also reach to all subscribers. Where as basic ingest bypasses the broker, thus saving cost and also since broker is not involved the message will not reach any subscribers. Have I understood this correctly?
Where as basic ingest bypasses the broker, thus saving cost and also since broker is not involved the message will not reach any subscribers. Have I understood this correctly?
Correct - MQTT subscribers will not receive messages that are sent using basic ingest as the broker is bypassed.
From the documentation at https://docs.aws.amazon.com/iot/latest/developerguide/iot-basic-ingest.html
Basic Ingest optimizes data flow by removing the publish/subscribe message broker from the ingestion path
And the "Designing MQTT Topics for AWS IoT" whitepaper at https://d1.awsstatic.com/whitepapers/Designing_MQTT_Topics_for_AWS_IoT_Core.pdf
Basic Ingest enables you to send data to only cloud services through the Rules Engine.
MQTT clients cannot subscribe to the Basic Ingest reserved topics:
Your devices and rules cannot subscribe to Basic Ingest reserved topics
See https://docs.aws.amazon.com/iot/latest/developerguide/iot-basic-ingest.html

What azure/aws services to use to be able to subscribe to particular IoT device

Say I have 1000 IoT devices. Each device sends telemetry data to the Azure cloud each second. There is mobile app which displays that telemetry data. Mobile user can see data from specific IoT device only, based on his login. It's not an issue to receive all those d2c messages in the cloud, for example with Event Hubs (initially i wanted to use IoT Hub, but it's pretty expensive with huge amount of messages). It's also clear how to get general event stream (for example, by listening to events endpoint in IoT hub). However, this stream gives all messages, from all devices. Receiving all messages in mobile app and filtering them there does not look like right choice. How can I subscribe to events from specific IoT device only? Can I do this with Event Hubs and/or IoT Hub only, or do I need to utilize other Azure services? If yes, what will be the most cheap solution.
Update:
Original question was just about Azure. But is it possible to achieve what I need with AWS without requiring adding multiple parts to the system. Is Message Broker for AWS IoT what I need here (as I understood, this is built in functionality of AWS IoT Core)?

AWS IOT: Does the platform act as an MQTT broker?

I just need to be sure whether I would need to use a separate library/provider such as Mosquitto and HiveMQ and integrate them with AWS IOT or would the amazon platform act as a self sufficient endtoend solution.
TIA
The AWS IoT service includes an MQTT message broker.
I am not into AWS IoT that deep, but:
When using a MQTT Broker, make sure that
* each device gets individual credentials
* device cannot subscribe to topics of other devices (unless that is explicitly what you want).
BR,