用例
我有一个物联网中心设备,它向物联网中心发送遥测数据。我想处理遥测数据,例如使用函数存储到数据库。
功能
我在VS2019中创建了以下函数并将其发布到Azure:
[FunctionName("HttpTrigger")]
public static async Task<HttpResponseMessage> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "post")]HttpRequestMessage req,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
var messages = await req.Content.ReadAsAsync<JArray>();
// If the request is for subscription validation, send back the validation code.
if (messages.Count > 0 && string.Equals((string)messages[0]["eventType"],
"Microsoft.EventGrid.SubscriptionValidationEvent",
System.StringComparison.OrdinalIgnoreCase))
{
log.LogInformation("Validate request received");
return req.CreateResponse<object>(new
{
validationResponse = messages[0]["data"]["validationCode"]
});
}
// The request is not for subscription validation, so it's for one or more events.
foreach (JObject message in messages)
{
// Handle one event.
EventGridEvent eventGridEvent = message.ToObject<EventGridEvent>();
log.LogInformation($"Subject: {eventGridEvent.Subject}");
log.LogInformation($"Time: {eventGridEvent.EventTime}");
log.LogInformation($"Event data: {eventGridEvent.Data.ToString()}");
}
return req.CreateResponse(HttpStatusCode.OK);
}
资料来源:https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-event-grid#use-作为事件网格触发器的http触发器
事件订阅
在IoT Hub中,我使用Web钩子endpoint类型创建了一个触发函数的事件订阅。
问题
事件数据的主体似乎被加密了(?):
{{
"properties": {},
"systemProperties": {
"iothub-connection-device-id": "smartmeter",
"iothub-connection-auth-method": "{\"scope\":\"device\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}",
"iothub-connection-auth-generation-id": "637057961942743477",
"iothub-enqueuedtime": "2019-10-05T08:09:17.973Z",
"iothub-message-source": "Telemetry"
},
"body": "eyJEYXRlVGltZSI6IjIwMTktMTAtMDVUMTA6MDk6MjkiLCJBY3R1YWxUYXJyaWYiOjEsIkFjdHVhbFBvd2VyRGVsaXZlcmVkIjoyNzEuMCwiVG90YWxFbGVjdHJpY2l0eURlbGl2ZXJlZFRhcnJpZjEiOjYwMTU1NzcuMCwiVG90YWxFbGVjdHJpY2l0eURlbGl2ZXJlZFRhcnJpZjIiOjYwMjc5NTIuMH0="
}}
虽然在云Shell中,我可以看到可读的数据。我还可以通过使用EventHubClient读取设备到云的消息来查看可读数据。网
我错过了什么?我如何解密尸体?
主体是Base64编码的,您可以使用https://docs.microsoft.com/en-us/dotnet/api/system.convert.frombase64string?view=netframework-4.8
这是您的邮件的可读正文:{“DateTime”:“2019-10-05T10:09:29”,“ActualArrif”:1,“ActualPowerDelivered”:271.0,“TotalElectricityDeliveredTerrif1”:6015577.0,“TotalElectricityDeliveredTerrif2”:6027952.0}
设备发送遥测数据时未指定内容类型和内容编码,请参阅systemProperties对象中缺少这些属性。
设备在发送遥测数据时需要填充这些系统属性,然后您将在事件消息中看到:
"systemProperties":{
"iothub-content-type":"application/json",
"iothub-content-encoding":"utf-8",
...
事件的data.body将是json格式的文本。
这里有更多细节。
我有一个Azure IOT解决方案,其中来自两台设备的数据将传输到同一IOT中心。从我的计算机上,我只需要从其中一个设备读取消息。我实现了ReadDeviceToCloudMessages。js inhttps://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-node-node-getstarted 但是我在IOThub里收到了所有的信息。如何仅从
我在Azure (blob)存储上读取Blob中存储的文本时遇到问题。 blob只包含单行文本(字符串)。blob通过Azure Functions HttpTrigger (C#)填充文本,HttpTrigger通过POST接收文本,并用用户指定的名称将文本保存到blob中。保存blob时,名称全部转换为小写。 然后,用户可以访问一个简单的超文本标记语言网页,并在表单中输入blob的名称。当用户
尝试使用CosmosDB bidning创建一个HttpTrigger v2 Azure函数,该函数将使用SQLQuery从路由数据中查找ID。这与Microsoft在这里提供的示例非常相似。我正在使用VS代码开发这个函数。代码如下: 函数(.../GetUser)错误:Microsoft.Azure.webjobs.host:错误索引方法'GetUser'。System.Private.Core
在Azure IoT SDK节点的帮助下,我被指派使用NodeJS将遥测数据从设备发送到IoT hub。如何编写或如何找到d2c消息的适当示例。我很困惑这个特定SDK中用于设备到物联网中心遥测的示例代码。https://github.com/Azure/azure-iot-sdk-node“假设我的设备有一个废物水平传感器,并将废物填充水平发送到IoT hub,那么我如何从该SDK获取适当的样本以
我想利用AZURE Function应用程序从AZURE BLOB存储中读取XLSX文件。该函数应由REST API调用来调用。我可以访问blob并下载文件,但我很难用pandas直接读取文件内容。我找了几个小时,但是找不到解决办法。我的最新方法是这样的: 在MS homepage*上,有一个从blob下载文件并随后进行处理的例子,但由于我使用的是功能应用程序,如果我没有遗漏任何内容,那么首先下载
我们将有一个高负荷的遥测服务。我正在寻找能够扩展收集器和后端(zipkin)的解决方案 有一种扩展zipkin的解决方案。看起来很简单-只需使用内部平衡 但是,我找不到使用多个openTelemetry收集器的示例。运行几个收集器实例没有什么问题,但我如何说“myApp”来平衡它们呢?在Exporters中没有这样的选项。