为什么我会从 Azure 事件中心获取混乱的消息正文数据。正在按照官方教程使用控制台应用程序获取数据
Why do I get scrambled message body data from Azure Event Hub. Was following official tutorial to get data using console app
我正在关注 Microsoft 的这个 article 以尝试使用来自 Event Hub 的事件数据。
我有一个 esp32 每 10 秒发送一次遥测消息到 Azure IOT hub,IOT hub 然后将消息路由到 事件中心 和消息在那里供我从我的控制台应用程序中检索。
ESP32 上的代码如下所示
float temperature = (float)random(0, 50);
float humidity = (float)random(0, 1000) / 10;
snprintf(messagePayload, MESSAGE_MAX_LEN, messageData, DEVICE_ID, messageCount++, temperature, humidity);
//// Below are the important part, I tried sending messagePayload, or a simple hello word string.
EVENT_INSTANCE *message = Esp32MQTTClient_Event_Generate(/*"HelloWorld"*/ messagePayload, MESSAGE);
Esp32MQTTClient_Event_AddProp(message, "temperatureAlert", "true");
Esp32MQTTClient_SendEventInstance(message);
以上过程对我来说似乎工作正常,因为我可以看到数据正在 Azure CLI 中传输到 IOT 中心。
I can see data flow in Azure CLI
但是当我从官方教程中复制代码以在控制台应用程序中使用遥测数据时。
实际问题发生了。
Console.WriteLine("\tReceived event: {0}", Encoding.UTF8.GetString(eventArgs.Data.Body.ToArray()));
是的,我得到了一堆字符串,看起来有点像我刚从 Esp32 发送的数据。
The full data I got
但为什么我得到:
"body":"eyJkZXZpY2VJZCI6ImVzcDMyIiwgIm1lc3NhZ2VJZCI6MSwgIlRlbXBlcmF0dXJlIjoxOS4wMDAwMDAsICJIdW1pZGl0eSI6MzAuNzk5OTk5fQ=="}
而不是
"body":"{\"deviceId\":\"esp32\", \"messageId\":8, \"Temperature\":3.000000, \"Humidity\":21.500000}"
数据看起来很混乱,它实际上以某种方式反映了我从 Esp32 发送的数据,
示例:
1.如果我简单的发送一个“你好”,我会收到"body":"SGVsbG8="
2. 如果我发送“HelloWorld”,我将收到"body":"SGVsbG9Xb3JsZA=="
我尝试过的事情:
1.Change 我正在发送的数据字符串,所以我发现加扰的数据反映了实际数据。
2.Try 使用控制台应用程序将数据发送到事件中心并检索它(就像官方文档一样),我会得到我发送的完美内容,但我最终需要从我的 Esp32 正确发送数据..
我对一切都很陌生,请给我一些提示,关键字,基本上任何东西都会有帮助。
也请随时指出这里的任何错误post,我想我可能误解了很多术语或者我没有正确提问。
我会尽量回复任何有延迟的评论。
(我一天大部分时间都很忙,而且我住在UTC+8时区,所以我可能在睡觉哈哈。)
提前感谢您的帮助!
您返回的数据是 Base64
编码的。您需要做的就是解码此数据,您将看到实际的字符串数据。
你会做这样的事情:
var text = System.Text.Encoding.UTF8.GetText(System.ConvertFromBase64String("base64-encoded-string"));
我正在关注 Microsoft 的这个 article 以尝试使用来自 Event Hub 的事件数据。
我有一个 esp32 每 10 秒发送一次遥测消息到 Azure IOT hub,IOT hub 然后将消息路由到 事件中心 和消息在那里供我从我的控制台应用程序中检索。
ESP32 上的代码如下所示
float temperature = (float)random(0, 50);
float humidity = (float)random(0, 1000) / 10;
snprintf(messagePayload, MESSAGE_MAX_LEN, messageData, DEVICE_ID, messageCount++, temperature, humidity);
//// Below are the important part, I tried sending messagePayload, or a simple hello word string.
EVENT_INSTANCE *message = Esp32MQTTClient_Event_Generate(/*"HelloWorld"*/ messagePayload, MESSAGE);
Esp32MQTTClient_Event_AddProp(message, "temperatureAlert", "true");
Esp32MQTTClient_SendEventInstance(message);
以上过程对我来说似乎工作正常,因为我可以看到数据正在 Azure CLI 中传输到 IOT 中心。
I can see data flow in Azure CLI
但是当我从官方教程中复制代码以在控制台应用程序中使用遥测数据时。
实际问题发生了。
Console.WriteLine("\tReceived event: {0}", Encoding.UTF8.GetString(eventArgs.Data.Body.ToArray()));
是的,我得到了一堆字符串,看起来有点像我刚从 Esp32 发送的数据。
The full data I got
但为什么我得到:
"body":"eyJkZXZpY2VJZCI6ImVzcDMyIiwgIm1lc3NhZ2VJZCI6MSwgIlRlbXBlcmF0dXJlIjoxOS4wMDAwMDAsICJIdW1pZGl0eSI6MzAuNzk5OTk5fQ=="}
而不是
"body":"{\"deviceId\":\"esp32\", \"messageId\":8, \"Temperature\":3.000000, \"Humidity\":21.500000}"
数据看起来很混乱,它实际上以某种方式反映了我从 Esp32 发送的数据,
示例:
1.如果我简单的发送一个“你好”,我会收到"body":"SGVsbG8="
2. 如果我发送“HelloWorld”,我将收到"body":"SGVsbG9Xb3JsZA=="
我尝试过的事情:
1.Change 我正在发送的数据字符串,所以我发现加扰的数据反映了实际数据。
2.Try 使用控制台应用程序将数据发送到事件中心并检索它(就像官方文档一样),我会得到我发送的完美内容,但我最终需要从我的 Esp32 正确发送数据..
我对一切都很陌生,请给我一些提示,关键字,基本上任何东西都会有帮助。
也请随时指出这里的任何错误post,我想我可能误解了很多术语或者我没有正确提问。
我会尽量回复任何有延迟的评论。 (我一天大部分时间都很忙,而且我住在UTC+8时区,所以我可能在睡觉哈哈。)
提前感谢您的帮助!
您返回的数据是 Base64
编码的。您需要做的就是解码此数据,您将看到实际的字符串数据。
你会做这样的事情:
var text = System.Text.Encoding.UTF8.GetText(System.ConvertFromBase64String("base64-encoded-string"));