如何使用 C# 从 IoT 中心使用设备 ID 获取设备密钥?
How to get device key using device id from IoT hub using C#?
我已经在 Azure 中创建了一个 IoT 中心。
使用以下代码将设备注册到 IoT 中心 -
public async Task<HttpResponseMessage> RegisterDeviceAsyncData(DeviceData deviceApp)
{
deviceApp.PlatformName = _appSettingsAccessor.GetAppSettingValue(DEFAULT_HUB_KEY);
var result = await _deviceRegistrationHandler.RegisterDeviceAsync(deviceApp);
response = HttpResponseMessageFactory.CreateMessageWithObjectBody(results);
}
正在将设备成功注册到 Iot hub,现在我想使用 C# 向这些设备发送数据。
我有向下面的设备发送数据的代码,但我不知道如何获取特定设备的连接字符串或发送数据的密钥。
private static async Task SendDeviceToCloudMessagesAsync()
{
DeviceClient deviceClient = DeviceClient.CreateFromConnectionString("deviceConnectionString");
while (true)
{
string messageString = string.Empty;
Message iotHubMsg = new Message();
foreach (BaseMessage msg in currentDevice.Messages)
{
iotHubMsg = msg.ReadAsIotHubMessage();
messageString = Encoding.UTF8.GetString(iotHubMsg.GetBytes());
//Send the current messages and clear them
await deviceClient.SendEventAsync(iotHubMsg);
}
}
}
现在我尝试使用 portal.azure.com 获取连接字符串,但在注册设备后如何实时检索连接字符串?我可以使用 SAS 令牌或类似的东西吗?
我会尝试使用以下方法之一解决此问题:
- 使用通用设备连接字符串:
a) 转到 IoT 中心并从“共享访问策略”中获取 'device' 策略 的连接字符串(例如 HostName=iothub.azure-devices.net ;SharedAccessKeyName=设备;SharedAccessKey=abcd1234)
b) 这是通用连接字符串。如果您添加 "DeviceId=" 它将特定于您的设备并且 IotHub 将能够识别您的 new/existing 设备 (例如 HostName=iothub.azure-devices.net; SharedAccessKeyName=device;SharedAccessKey=abcd1234;DeviceId=device001)
- 在 Azure Device provisioning Service 的帮助下使用自动设备配置。我从来没有亲自使用过它,但它应该可以工作。此外,如果您有大量设备,这应该是方法。
希望对您有所帮助。
我已经在 Azure 中创建了一个 IoT 中心。
使用以下代码将设备注册到 IoT 中心 -
public async Task<HttpResponseMessage> RegisterDeviceAsyncData(DeviceData deviceApp)
{
deviceApp.PlatformName = _appSettingsAccessor.GetAppSettingValue(DEFAULT_HUB_KEY);
var result = await _deviceRegistrationHandler.RegisterDeviceAsync(deviceApp);
response = HttpResponseMessageFactory.CreateMessageWithObjectBody(results);
}
正在将设备成功注册到 Iot hub,现在我想使用 C# 向这些设备发送数据。
我有向下面的设备发送数据的代码,但我不知道如何获取特定设备的连接字符串或发送数据的密钥。
private static async Task SendDeviceToCloudMessagesAsync()
{
DeviceClient deviceClient = DeviceClient.CreateFromConnectionString("deviceConnectionString");
while (true)
{
string messageString = string.Empty;
Message iotHubMsg = new Message();
foreach (BaseMessage msg in currentDevice.Messages)
{
iotHubMsg = msg.ReadAsIotHubMessage();
messageString = Encoding.UTF8.GetString(iotHubMsg.GetBytes());
//Send the current messages and clear them
await deviceClient.SendEventAsync(iotHubMsg);
}
}
}
现在我尝试使用 portal.azure.com 获取连接字符串,但在注册设备后如何实时检索连接字符串?我可以使用 SAS 令牌或类似的东西吗?
我会尝试使用以下方法之一解决此问题:
- 使用通用设备连接字符串:
a) 转到 IoT 中心并从“共享访问策略”中获取 'device' 策略 的连接字符串(例如 HostName=iothub.azure-devices.net ;SharedAccessKeyName=设备;SharedAccessKey=abcd1234)
b) 这是通用连接字符串。如果您添加 "DeviceId=" 它将特定于您的设备并且 IotHub 将能够识别您的 new/existing 设备 (例如 HostName=iothub.azure-devices.net; SharedAccessKeyName=device;SharedAccessKey=abcd1234;DeviceId=device001) - 在 Azure Device provisioning Service 的帮助下使用自动设备配置。我从来没有亲自使用过它,但它应该可以工作。此外,如果您有大量设备,这应该是方法。
希望对您有所帮助。