Device-to-cloud communications guidance

When sending information from the device app to the solution back end, IoT Hub exposes three options:

  • Device-to-cloud messages for time series telemetry and alerts.
  • Device twin's reported properties for reporting device state information such as available capabilities, conditions, or the state of long-running workflows. For example, configuration and software updates.
  • File uploads for media files and large telemetry batches uploaded by intermittently connected devices or compressed to save bandwidth.

Here is a detailed comparison of the various device-to-cloud communication options.

Device-to-cloud messages Device twin's reported properties File uploads
Scenario Telemetry time series and alerts. For example, 256-KB sensor data batches sent every 5 minutes. Available capabilities and conditions. For example, the current device connectivity mode such as cellular or WiFi. Synchronizing long-running workflows, such as configuration and software updates. Media files. Large (typically compressed) telemetry batches.
Storage and retrieval Temporarily stored by IoT Hub, up to 7 days. Only sequential reading. Stored by IoT Hub in the device twin. Retrievable using the IoT Hub query language. Stored in user-provided Azure Storage account.
Size Up to 256-KB messages. Maximum reported properties size is 8 KB. Maximum file size supported by Azure Blob Storage.
Frequency High. For more information, see IoT Hub limits. Medium. For more information, see IoT Hub limits. Low. For more information, see IoT Hub limits.
Protocol Available on all protocols. Available using MQTT or AMQP. Available when using any protocol, but requires HTTPS on the device.

It is possible that an application requires to both send information as a telemetry time series or alert and also to make it available in the device twin. In this scenario, you can choose one of the following options:

  • The device app sends a device-to-cloud message and reports a property change.
  • The solution back end can store the information in the device twin's tags when it receives the message.

Since device-to-cloud messages enable a much higher throughput than device twin updates, it is sometimes desirable to avoid updating the device twin for every device-to-cloud message.