Ampliación del Capítulo 6 del libro de Manos a la obra con IoT en Azure.

Actualmente disponemos en version preliminar (en el momento de la escritura de este artículo, no la publicación), de una nueva opción para exportar la telemetría directamente a CosmosDB.

Este ejemplo esta basado en la ayuda de Microsoft Learn.

Ahora no tenemos que usar Functions o Stream Analytics para poder llevar estos datos directamente a CosmosDB.

Para ello vamos a necesitar el siguiente ejemplo de Python:

from azure.iot.device import IoTHubDeviceClient, Message
from time import sleep

CONNECTION_STRING = "[Your Connection String]"
RECEIVED_MESSAGES = 0
message_text = "{'Hello World!'}"


def connection_client():
    try:
        client = IoTHubDeviceClient.create_from_connection_string(
            CONNECTION_STRING)
        return client
    except KeyboardInterrupt:
        print("Stopped!")


def run_simulation(client):
    client = client
    client.on_message_received = message_handler
    while True:
        message = Message(message_text)
        print("Sending message: {}".format(message))
        client.send_message(message)
        print("Message successfully sent")
        sleep(10)


def message_handler(message):
    global RECEIVED_MESSAGES
    RECEIVED_MESSAGES += 1
    print("")
    print("Message received:")

    for property in vars(message).items():
        print("    {}".format(property))

    print("Total calls received: {}".format(RECEIVED_MESSAGES))


if __name__ == '__main__':
    print("Started simulated device")
    print("Press Ctrl-C to exit")
    run_simulation(connection_client())

Un IoTHub

az group create -l westeurope -n jmfzResourceGroup
az iot hub create --resource-group jmfzResourceGroup --name jmfzIotHub --sku F1 --partition-count 2

Crear un CosmosDB:

az cosmosdb create --name jmfzcosmosdb --resource-group jmfzResourceGroup

Creamos una colección en CosmosDB para almacenar los datos:

Enlazamos IoTHub con CosmosDB:

Si en el paso 3 no te sale tu CosmosDB, ten paciencia a mi me tarda unos 10 minutos tras la creación de la ComosDB en salir en esta opción.

Enviamos la telemetría:

La observamos en CosmosDB:

Y te llevas la sorpresa que está usando un Encode64:

Con una pequeña mejora en nuestro ejemplo, ya hemos guardado los valores en JSON:

Nota: en Python este problema aun persiste y esta pequeña modificación aun no funciona y continua viendo los datos en Encode64, pero en C# esta funcionando correctamente.

Si deseas saber más sobre IoT, te recomiendo mi libro de Manos a la obra con IoT en Azure: