我是AzureIot的初学者,我已经获得了拥有IOT中心的azure帐户的权限。
从天蓝色的门户网站我看到一个形式的连接字符串:
HostName=iothub-mycompany.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=_somekey_in_base64_
现在我只需要将JSON有效负载发送到此IOT中心。任何协议都可以。
我假设,当我发送消息时,我可以使用this device explorer tool看到此消息。但是我不确定我做错了什么,或者我的理解是否存在缺陷。
我尝试了博客,msdn等的示例。最后,我提出了以下代码
它运行,但我不知道它在做什么,在哪里查找此消息是否已发送。
设备资源管理器不显示任何内容。
我查看了Activity Login portal.azure.com,但它似乎更像是登录活动日志。
以下是代码,是.Net4.5.2 ConsoleApplication的一部分。
Program.cs
:
class Program
{
static DeviceClient deviceClient;
const string IOT_HUB_CONN_STRING = "connection str in format specified above.";
const string IOT_HUB_DEVICE_LOCATION = "_some_location.";
const string IOT_HUB_DEVICE = "device_id";
static void Main(string[] args)
{
var ret = SendMessageToIoTHubAsync("temperature", 15);
Console.WriteLine("completed:" + ret.IsCompleted);
}
private static async Task SendMessageToIoTHubAsync(string sensorType, int sensorState)
{
deviceClient = DeviceClient.CreateFromConnectionString(IOT_HUB_CONN_STRING, TransportType.Mqtt);//i tried other trsnsports
try
{
var payload = "{" +
"\"deviceId\":\"" + IOT_HUB_DEVICE + "\", " +
"\"location\":\"" + IOT_HUB_DEVICE_LOCATION + "\", " +
"\"sensorType\":\"" + sensorType + "\", " +
"\"sensorState\":" + sensorState + ", " +
"\"localTimestamp\":\"" + DateTime.Now.ToLocalTime() + "\"" +
"}";
var msg = new Message(Encoding.UTF8.GetBytes(payload));
Debug.WriteLine("\t{0}> Sending message: [{1}]", DateTime.Now.ToLocalTime(), payload);
await deviceClient.SendEventAsync(msg);
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("!!!! " + ex.Message);
}
}
}
作为旁注,我的设备"是ClearScada。我将使用C#Driver从ClearScada实例中获取数据,此驱动程序应将该数据发送到azure iot中心。 本质上我只需要从C#算起来发送 到Azure iot。 的的问题:
答案 0 :(得分:1)
- 我在哪里可以看到我的消息。?
您可以在设备资源管理器中看到您的消息,如下所示:
- 我的功能是正确的还是我的理解存在缺陷。
您的功能有两个问题:
首先,您需要使用设备指定的连接字符串而不是 Azure IoT Hub连接字符串。它具有以下格式:
" HostName = [你的中心名称] .azure-devices.net; DeviceId = [设备ID]; SharedAccessKey = [设备密钥]"
您可以通过设备资源管理器轻松获取此连接字符串,如下所示:
Console.ReadLine();
来避免这种情况发生
这样的:<强>更新强>
您可以像这样编辑main
方法:
static void Main(string[] args)
{
var ret = SendMessageToIoTHubAsync("temperature", 15);
ret.Wait();
Console.WriteLine("completed:" + ret.IsCompleted);
Console.ReadLine();
}