【问题标题】:Connect real device to Azure IoT Central using MQTT使用 MQTT 将真实设备连接到 Azure IoT Central
【发布时间】:2020-07-22 11:55:48
【问题描述】:

我正在摆弄 Azure IoT Central 并配置了一个设备。现在我想使用 MQTT 从真实设备(无代码)发送数据。 如果 IoT Central 可行,我似乎无法找到相关信息。

对于 IoT 中心,我发现:Azure Iot Hub MQTT

由于内置仪表板,我想使用 IoT Central。物联网中心似乎不存在这些。 如果我无法将数据直接发送到 IoT Central,有没有办法使用 IoT Central 中的 IoT 中心设备?

【问题讨论】:

  • 嗨 Sebastian,当您说“真实设备(无代码)”时,您的确切意思是什么?就像在彼得的回答中一样,您可以对设备进行编程以连接到 IoT Central 的内置集线器。
  • 这是您无法编程的设备。您只能配置 MQTT 设置。我的设备在使用 IoT 中心时可以工作,我认为 IoT 中心也是如此。我提到的页面引用“如果设备无法使用设备 SDK,它仍然可以使用端口 8883 上的 MQTT 协议连接到公共设备端点”,这对于 IoT 集线器是可能的

标签: azure iot azure-iot-hub azure-iot-central


【解决方案1】:

Azure IoT Central 在后台使用 IoT 中心,因此您仍然可以使用端口 8883 上的 MQTT 协议连接到公共设备端点。

要获取集线器的地址,您可以根据 Azure IoT Central 应用程序中的设备信息在任何机器上使用以下脚本(请参阅the docs

// npm install azure-iot-device azure-iot-device-mqtt azure-iot-provisioning-device-mqtt azure-iot-security-symmetric-key --save

"use strict";

// Use the Azure IoT device SDK for devices that connect to Azure IoT Central.
var iotHubTransport = require('azure-iot-device-mqtt').Mqtt;
var Client = require('azure-iot-device').Client;
var Message = require('azure-iot-device').Message;
var ProvisioningTransport = require('azure-iot-provisioning-device-mqtt').Mqtt;
var SymmetricKeySecurityClient = require('azure-iot-security-symmetric-key').SymmetricKeySecurityClient;
var ProvisioningDeviceClient = require('azure-iot-provisioning-device').ProvisioningDeviceClient;

var provisioningHost = 'global.azure-devices-provisioning.net';
var idScope = '{your Scope ID}';
var registrationId = '{your Device ID}';
var symmetricKey = ''{your Primary Key}';
var provisioningSecurityClient = new SymmetricKeySecurityClient(registrationId, symmetricKey);
var provisioningClient = ProvisioningDeviceClient.create(provisioningHost, idScope, new ProvisioningTransport(), provisioningSecurityClient);

provisioningClient.register((err, result) => {
    if (err) {
      console.log('Error registering device: ' + err);
    } else {
      console.log('Registration succeeded');
      console.log('Assigned hub=' + result.assignedHub);
      console.log('DeviceId=' + result.deviceId);
      var connectionString = 'HostName=' + result.assignedHub + ';DeviceId=' + result.deviceId + ';SharedAccessKey=' + symmetricKey;
      console.log(connectionString);
    }
  });

输出:

注册成功
分配的 hub=iotc-xxx.azure-devices.net
设备 ID=xxx
HostName=xxx.azure-devices.net;DeviceId=xxx;SharedAccessKey=xxx=

此外,正如 Matthijs van der Veer 所述,请注意 IoT Central 使用 Device Provisioning Service 使您的设备能够连接到 IoT 中心。它会在注册时为设备分配一个 IoT 集线器,但如果设备被重新分配给不同的集线器,设备将失去连接。

【讨论】:

  • 我将给出与@mathijs-van-der-veer 相同的答案,因为我不知道您是否收到通知:这是您无法编程的设备。您只能配置 MQTT 设置。我的设备在使用 IoT 中心时可以工作,我认为 IoT 中心也是如此。引用我提到的页面“如果设备无法使用设备 SDK,它仍然可以使用端口 8883 上的 MQTT 协议连接到公共设备端点”,这对于 IoT 集线器是可能的
  • 很好的答案!我认为这需要免责声明,因为 IoT Central Microsoft 提倡在设备上使用 DPS。虽然这可能不适用于 Sebastian 的设备,但如果该设备被重新分配给不同的集线器,该设备将失去连接。
  • @MatthijsvanderVeer 好点,感谢您指出这一点。我已将其添加到答案中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-20
相关资源
最近更新 更多