将动态遥测与远程监视预配置解决方案配合使用

使用动态遥测可以可视化发送到远程监视预配置解决方案的任何遥测数据。 使用预配置解决方案部署的模拟设备发送温度和湿度遥测数据,可在仪表板上可视化。 如果自定义现有模拟设备、创建新的模拟设备或将物理设备连接到预配置解决方案,则可以发送其他遥测值,例如外部温度、RPM 或风速。 然后,可以在仪表板上可视化此附加遥测数据。

本教程使用一个简单的 Node.js 模拟设备,可以轻松地对其进行修改以试验动态遥测。

若要完成本教程,需要:

  • 有效的 Azure 订阅。 如果没有帐户,只需几分钟即可创建免费试用帐户。 有关详细信息,请参阅 Azure 免费试用
  • Node.js 版本 0.12.x 或更高版本。

可以在任何作系统(如 Windows 或 Linux)上完成本教程,可在其中安装 Node.js。

预配解决方案

如果尚未在帐户中预配远程监视预配置解决方案:

  1. 使用 Azure 帐户凭据登录到 azureiotsuite.com,然后单击 + 创建解决方案。
  2. 远程监视 磁贴上单击 选择
  3. 输入 解决方案名称 用于远程监视预配置解决方案。
  4. 选择要用于配置解决方案的 区域订阅
  5. 单击 创建解决方案 开始预配过程。 此过程通常需要几分钟才能完成。

等待预配过程完成

  1. 单击您解决方案的 预配 状态磁贴。
  2. 请注意,预配状态,因为 Azure 服务部署在 Azure 订阅中。
  3. 预配完成后,状态将更改为 就绪
  4. 单击该磁贴,在右侧窗格中查看解决方案的详细信息。

注释

如果在部署预配置的解决方案时遇到问题,请查看 azureiotsuite.com 站点 权限,以及 常见问题解答。 如果问题仍然存在,请在 门户上创建服务请求

你期望看到哪些在你的解决方案中未列出的详细信息? 请向我们提供有关 User Voice平台的功能建议。

配置 Node.js 模拟设备

  1. 在远程监控仪表板上,单击 + 添加设备,然后添加 自定义设备。 记下 IoT 中心主机名、设备 ID 和设备密钥。 在准备 remote_monitoring.js 设备客户端应用程序时,本教程稍后需要用到它们。

  2. 确保在开发计算机上安装 Node.js 0.12.x 或更高版本。 在命令提示符或 shell 中运行 node --version 以检查版本。 有关使用包管理器在 Linux 上安装 Node.js 的信息,请参阅 通过包管理器安装 Node.js。

  3. 安装 Node.js后,将 最新版本的 azure-iot-sdk-node 存储库克隆到开发计算机。 始终使用 分支获取最新版本的库和示例。

  4. azure-iot-sdk-node 存储库的本地副本中,将以下两个文件从节点/设备/示例文件夹复制到开发计算机上的空文件夹:

    • packages.json
    • remote_monitoring.js
  5. 打开 remote_monitoring.js 文件并查找以下变量定义:

    var connectionString = "[IoT Hub device connection string]";
    
  6. [IoT 中心设备连接字符串] 替换为设备连接字符串。 使用在步骤 1 中记下 IoT 中心主机名、设备 ID 和设备密钥的值。 设备连接字符串具有以下格式:

    HostName={your IoT Hub hostname};DeviceId={your device id};SharedAccessKey={your device key}
    

    如果你的 IoT 中心主机名是 contoso 而设备 ID 是 mydevice,那么连接字符串看起来如下:

    var connectionString = "HostName=contoso.azure-devices.net;DeviceId=mydevice;SharedAccessKey=2s ... =="
    
  7. 保存文件。 在包含这些文件的文件夹中的 shell 或命令提示符中运行以下命令,以安装所需的包,然后运行示例应用程序:

    npm install
    node remote_monitoring.js
    

观察动态遥测的实际运作

仪表板显示现有模拟设备的温度和湿度遥测数据:

默认仪表板

如果选择在上一部分中运行的 Node.js 模拟设备,则会看到温度、湿度和外部温度遥测:

向仪表板添加外部温度

远程监视解决方案会自动检测其他外部温度遥测类型,并将其添加到仪表板上的图表。

添加遥测类型

下一步是将 Node.js 模拟设备生成的遥测替换为一组新的值:

  1. 通过在命令提示符或 shell 中键入 Ctrl+C 来停止 Node.js 模拟设备。

  2. 在 remote_monitoring.js 文件中,可以查看现有温度、湿度和外部温度遥测的基本数据值。 为 rpm 添加基本数据值,如下所示:

    // Sensors data
    var temperature = 50;
    var humidity = 50;
    var externalTemperature = 55;
    var rpm = 200;
    
  3. Node.js 模拟设备使用 remote_monitoring.js 文件中的 generateRandomIncrement 函数向基本数据值添加随机增量。 通过在现有随机化后添加一行代码来随机化 rpm 值,如下所示:

    temperature += generateRandomIncrement();
    externalTemperature += generateRandomIncrement();
    humidity += generateRandomIncrement();
    rpm += generateRandomIncrement();
    
  4. 将新的 rpm 值添加到设备发送到 IoT 中心的 JSON 有效负载:

    var data = JSON.stringify({
      'DeviceID': deviceId,
      'Temperature': temperature,
      'Humidity': humidity,
      'ExternalTemperature': externalTemperature,
      'RPM': rpm
    });
    
  5. 使用以下命令运行 Node.js 模拟设备:

    node remote_monitoring.js

  6. 请查看仪表板中图表上显示的新 RPM 遥测类型:

将 RPM 添加到仪表板

注释

您可能需要先禁用 Node.js 设备,然后在仪表板的“设备”页面上重新启用,以便立即查看更改。

自定义仪表板显示

设备信息 消息可以包含关于设备可以发送到 IoT 中枢的遥测信息的元数据。 此元数据可以指定设备发送的遥测类型。 修改 remote_monitoring.js 文件中的 deviceMetaData 值,以便在 Commands 定义之后添加 Telemetry 定义。 以下代码片段显示了 命令 定义(请务必在 , 定义后添加 ):

'Commands': [{
  'Name': 'SetTemperature',
  'Parameters': [{
    'Name': 'Temperature',
    'Type': 'double'
  }]
},
{
  'Name': 'SetHumidity',
  'Parameters': [{
    'Name': 'Humidity',
    'Type': 'double'
  }]
}],
'Telemetry': [{
  'Name': 'Temperature',
  'Type': 'double'
},
{
  'Name': 'Humidity',
  'Type': 'double'
},
{
  'Name': 'ExternalTemperature',
  'Type': 'double'
}]

注释

远程监视解决方案使用不区分大小写的匹配来比较元数据定义与遥测流中的数据。

添加 遥测 定义,如前面的代码片段所示,不会更改仪表板的行为。 但是,元数据还可以包含 DisplayName 属性,以自定义仪表板中的显示。 更新 遥测 元数据定义,如以下代码片段所示:

'Telemetry': [
{
  'Name': 'Temperature',
  'Type': 'double',
  'DisplayName': 'Temperature (C*)'
},
{
  'Name': 'Humidity',
  'Type': 'double',
  'DisplayName': 'Humidity (relative)'
},
{
  'Name': 'ExternalTemperature',
  'Type': 'double',
  'DisplayName': 'Outdoor Temperature (C*)'
}
]

以下屏幕截图显示了此更改如何修改仪表板上的图表图例:

自定义图表图例

注释

您可能需要先禁用 Node.js 设备,然后在仪表板的“设备”页面上重新启用,以便立即查看更改。

筛选遥测类型

默认情况下,仪表板上的图表显示遥测流中的每个数据系列。 可以使用 Device-Info 元数据来抑制图表上特定遥测类型的显示。

为了让图表仅显示温度和湿度的遥测数据,请从 Device-InfoTelemetry 元数据中省略 外部温度,如下所示:

'Telemetry': [
{
  'Name': 'Temperature',
  'Type': 'double',
  'DisplayName': 'Temperature (C*)'
},
{
  'Name': 'Humidity',
  'Type': 'double',
  'DisplayName': 'Humidity (relative)'
},
//{
//  'Name': 'ExternalTemperature',
//  'Type': 'double',
//  'DisplayName': 'Outdoor Temperature (C*)'
//}
]

户外温度 不再显示在图表上:

筛选仪表板上的遥测数据

此更改仅影响图表显示。 ExternalTemperature 数据值仍存储并可用于任何后端处理。

注释

您可能需要先禁用 Node.js 设备,然后在仪表板的“设备”页面上重新启用,以便立即查看更改。

处理错误

要使数据流显示在图表上,其 类型Device-Info 元数据必须与遥测值的数据类型匹配。 例如,如果元数据指定湿度数据的 类型是整数,并且在遥测流中发现了 双精度浮点数,则湿度遥测不会显示在图表上。 但是,湿度 值仍存储并可用于任何后端处理。

后续步骤

了解如何使用动态遥测后,可以详细了解预配置解决方案如何使用设备信息:远程监视预配置解决方案中的设备信息元数据