我通过以下路径发送数据。
Android - > IoT Hub - >流分析 - > SQL
我在Stream Analytics的查询中调用机器学习功能。现在,我想将机器学习的结果返回给Android设备。为了在Android设备上接收云到设备消息,我已经完成并使用Device Explorer进行了测试。我正在查看官方教程,1,2,但仍然不知道如何使用Stream Analytics将云发送到设备消息。 He说使用服务总线和功能应用程序,但没有提供详细信息。我是Azure的新手。希望有人会给我一些指导或任何链接,以便我可以更多地了解如何实现它。提前谢谢。
答案 0 :(得分:3)
您可以使用 Azure功能(预览)输出ASA作业,以通过Azure IoT Hub面向服务的端点发送云到设备消息。
以下是此功能的示例。
run.csx:
#r "Newtonsoft.Json"
using System.Configuration;
using System.Text;
using System.Net;
using Microsoft.Azure.Devices;
using Newtonsoft.Json;
// create proxy
static Microsoft.Azure.Devices.ServiceClient client = ServiceClient.CreateFromConnectionString(ConfigurationManager.AppSettings["myIoTHub"]);
public static async Task<HttpResponseMessage> Run(string input, HttpRequestMessage req, TraceWriter log)
{
log.Info($"ASA Job: {input}");
var data = JsonConvert.DeserializeAnonymousType(input, new[] { new { xyz = "", IoTHub = new { ConnectionDeviceId = ""}}});
if(!string.IsNullOrEmpty(data[0]?.IoTHub?.ConnectionDeviceId))
{
string deviceId = data[0].IoTHub.ConnectionDeviceId;
log.Info($"Device: {deviceId}");
// cloud-to-device message
var msg = JsonConvert.SerializeObject(new { temp = 20.5 });
var c2dmsg = new Microsoft.Azure.Devices.Message(Encoding.ASCII.GetBytes(msg));
// send AMQP message
await client.SendAsync(deviceId, c2dmsg);
}
return req.CreateResponse(HttpStatusCode.NoContent);
}
function.json:
{
"bindings": [
{
"authLevel": "function",
"name": "input",
"type": "httpTrigger",
"direction": "in"
},
{
"name": "$return",
"type": "http",
"direction": "out"
}
],
"disabled": false
}
project.json:
{
"frameworks": {
"net46":{
"dependencies": {
"Microsoft.Azure.Devices": "1.3.2"
}
}
}
}
附录A
出于测试目的,请执行以下步骤:
[ { &#34;时间&#34;:&#34; 2017-11-26T12:52:23.4292501Z&#34;, &#34; counter&#34;:57, &#34; windSpeed&#34;:8.7358, &#34;温度&#34;:16.63, &#34;湿度&#34;:79.42, &#34; EventProcessedUtcTime&#34;:&#34; 2017-11-26T12:52:21.3568252Z&#34;, &#34; PartitionId&#34;:2, &#34; EventEnqueuedUtcTime&#34;:&#34; 2017-11-26T12:52:22.435Z&#34;, &#34; IoTHub&#34;:{ &#34; MessageId&#34;:null, &#34; CorrelationId&#34;:null, &#34; ConnectionDeviceId&#34;:&#34; Device1 &#34;, &#34; ConnectionDeviceGenerationId&#34;:&#34; 636189812948967054&#34;, &#34; EnqueuedTime&#34;:&#34; 2017-11-26T12:52:21.562Z&#34;, &#34; StreamId&#34;:null } } ]
更改实际deviceId的值 Device1 。
当您在导入选项组合框中选择订阅时,您应该在组合框中看到此功能。完成后,按保存按钮并在屏幕上观看通知消息。 ASA将向您的AF发送验证消息,其响应状态应为20x代码。
注意, inpsim 是我的iothub输入。
ASA以下列格式输出HttpTrigger函数的有效负载,请参阅我的示例:
[
{
"time": "2017-11-26T12:52:23.4292501Z",
"counter": 57,
"windSpeed": 8.7358,
"temperature": 16.63,
"humidity": 79.42,
"EventProcessedUtcTime": "2017-11-26T12:52:21.3568252Z",
"PartitionId": 2,
"EventEnqueuedUtcTime": "2017-11-26T12:52:22.435Z",
"IoTHub": {
"MessageId": null,
"CorrelationId": null,
"ConnectionDeviceId": "Device1",
"ConnectionDeviceGenerationId": "636189812948967054",
"EnqueuedTime": "2017-11-26T12:52:21.562Z",
"StreamId": null
}
}
]
请注意,我的遥测数据(*)是计数器,温度,湿度和时间戳时间,所以其他属性是由ASA作业隐式创建的。根据查询,您可以为C2D消息创建任何业务属性。