Judulnya terdengar cukup komprehensif, tetapi pertanyaan dasar saya cukup sederhana, saya kira.

Konteks

Saya Azure, saya memiliki hub IoT, tempat saya mengirim pesan. Saya menggunakan versi modifikasi salah satu sampel dari Azure Iot SDK untuk python.

Mengirim bekerja dengan baik. Namun, alih-alih string, saya mengirim struktur JSON.

Saat saya menonton acara yang mengalir ke hub IoT, menggunakan Cloud shell, tampilannya seperti ini:

PS /home/marcel> az iot hub monitor-events --hub-name weathertestiothub
This extension 'azure-cli-iot-ext' is deprecated and scheduled for removal. Please remove and add 'azure-iot' instead.
Starting event monitor, use ctrl-c to stop...
{
"event": {
        "origin": "raspberrypi-zero-wh",
        "payload": "{ \"timestamp\": \"1608643863720\", \"locationDescription\": \"Attic\", \"temperature\": \"21.941\", \"relhumidity\": \"71.602\" }"
    }
}

Isu

Datanya tampak baik-baik saja, kecuali muatannya terlihat aneh di sini. TETAPI, muatannya secara harfiah adalah apa yang saya kirim dari perangkat, menggunakan sampel SDK.

Apakah ini cara yang benar untuk melakukannya? Pada akhirnya, saya mengalami kesulitan untuk benar-benar memasukkan data ke dalam model Time Series Insights. Jadi saya kira, struktur saya yang harus disalahkan.

Pertanyaan

Apa struktur data JSON yang disarankan untuk dikirim ke hub IoT untuk digunakan nanti?

0
Marcel 22 Desember 2020, 16:45

2 jawaban

Jawaban Terbaik

Saya akhirnya menggunakan tip oleh @elhorton, tetapi itu bukan perubahan utama. Meskipun demikian, pemformatan di Azure Shell Monitor sekarang terlihat jauh lebih baik:

"event": {
    "origin": "raspberrypi-zero-wh",
    "payload": {
        "temperature": 21.543947753906245,
        "humidity": 69.22964477539062,
        "locationDescription": "Attic"
    }
}

Kuncinya adalah:

  1. sertakan waktu sumber pesan dalam format ISO
    from datetime import datetime
    timestampIso = datetime.now().isoformat()
    message.custom_properties["iothub-creation-time-utc"] = timestampIso
  1. Menggunakan locationDescription sebagai Time Series ID Property Lihat https://docs.microsoft.com/en-us/azure/time-series-insights/how-to-select-tsid (Mungkin saya juga bisa mengambil iothub-connection-device-id, tetapi saya tidak mengujinya sendiri secara khusus)
1
Marcel 29 Desember 2020, 23:02

Anda harus menambahkan 2 baris berikut ke pesan Anda di sampel python SDK Anda:

msg.content_encoding = "utf-8"
msg.content_type = "application/json"

Ini akan menyelesaikan masalah pemformatan Anda.

Kami juga telah memperbarui sampel kami untuk mencerminkan hal ini: https://github.com/Azure/azure-iot-sdk-python/blob/master/azure-iot-device/samples/sync-samples/send_message.py

1
Marcel 29 Desember 2020, 22:18