使用REST API调用进行天气阅读

本教程将展示如何使用REST API获取天气数据。

用例

假设你需要了解资产位置的当前天气。你可以将天气信息用于某些数据 处理逻辑或仅用于跟踪历史记录并在仪表板上启用此信息的可视化。

在本教程中,我们将配置ThingsBoard规则引擎以使用REST API自动获取天气信息。 你可以将本教程用作更复杂任务的基础。

先决条件

我们假设你已完成以下指南并查看了以下文章:

添加资产

在ThingsBoard中添加资产实体。它的名称为Building A,类型为building

image

注意:如果你拥有专业版,则需要使用客户层次结构向客户添加资产 以下方式:

  • 转到Customers Hierarchy -> All -> (Current tenant) -> Customer groups -> (Your customer group) -> (Your customer) -> Asset groups -> (Your asset group) -> Add asset

image

在社区版中为客户分配资产

  • 转到Assets -> Assign to customer -> (Your Customer) -> Assign

image

在提供数据的网站上注册

为了获取天气数据,你应该在提供该数据的网站上注册。在这种情况下 OpenWeatherMap 将被使用。

在此处签名后,请转到这里页面以获取你的api密钥。

image

创建属性

要执行REST API调用,我们需要以下URL参数: API密钥,经度,纬度和度量单位。

我们建议将API键参数添加到客户服务器端属性,并将其他参数添加到资产 服务器端属性。

客户属性应如下所示:

  • 转到(Assigned customer) -> Attributes -> Add

image

如下添加属性:

FieldData TypeInput Data
APPID String (an API key you got from OpenWeatherMap)

资产属性应如下所示:

  • 转到时Building A -> Attributes -> Add

image

  • 使用下表中显示的输入数据填写属性:
FieldData TypeInput Data
latitude Double latitude of an asset
longitude Double longitude of an asset
units String "metric" for meters per second wind speed and Celsius temperature, "imperial" for miles per hour wind speed and Fahrenheit temperature, empty for meters per second wind speed and Kelvin temperature

在此示例中,将使用纽约市的坐标和公制单位。

消息流

在本节中,我们将解释本教程中每个节点的用途。将涉及一个规则链:

  • Outside Temperature/Humidity - 规则链每15秒将API调用发送到OpenWeatherMap,并将有关湿度和温度的数据发送到选定的资产。

下面的屏幕截图显示了上面的规则链应该是什么样子:

image

下载并导入 json 文件其中包含本教程的规则链。 请注意,你需要将最开始创建的资产设置为最左侧生成器节点中的发起者。

下一节将向你展示如何从头开始创建此规则链。

创建新的规则链(Outside Temperature/Humidity)

转到Rule Chains -> Add new Rule Chain

配置:

  • Name : Outside Temperature/Humidity

image

创建新规则链。按Edit按钮并配置链。

添加所需的节点

在此规则链中,你将创建5个节点,如以下各节所述:

节点A A: Generator node
  • 添加Generator节点。此规则节点生成空消息以触发REST API调用。
  • 通过以下方式填写其字段:
FieldValue
Name Generate requests
Message count 0
Period in seconds 15
Originator type Asset
Asset Building A
Generate function return { msg: {}, metadata: {}, msgType: "POST_TELEMETRY_REQUEST" };

image

节点 B: Customer attributes enrichment node
  • 添加Customer attributes node并将其连接到关联类型为SuccessGenerator node节点。 该节点会将客户属性APPID放入消息的元数据中。
  • 通过以下方式填写其字段:
FieldValue
Name Get customer API key
Latest telemetry False
Source attribute APPID
Target attribute APPID

image

节点 C: Originator attributes enrichment node
  • 添加Originator attributes enrichment node节点并将其连接到关联类型为SuccessCustomer attributes node节点该节点将获取服务器属性的纬度,经度和在Generator节点中设置的发起者的单位到元数据中。

  • 通过以下方式填写其字段:

    FieldValue
    Name Latitude/Longitude
    Server attributes latitude, longitude, units

    image

节点 D: External REST API call node
  • 添加External REST API call node并将其连接到关联类型为SuccessOriginator attributes enrichment node节点该节点将执行对OpenWeatherMap的REST API调用。
  • 通过以下方式填写其字段:
    FieldValue
    Name Get Weather Data
    Endpoint URL pattern http://api.openweathermap.org/data/2.5/weather?lat=${ss_latitude}&lon=${ss_longitude}&units=${ss_units}&APPID=${APPID}
    Request method GET
    Use simple client HTTP factory False
  • ss_latitude, ss_longitude, ss_units, ss_APPID是从元数据中获取的服务器属性,这些元数据由Originator attributes enrichment node放置在那里。

image

节点 E: Script transformation node
  • 添加Script transformation node并将其连接到关系类型为SuccessExternal REST API call node点.该中断外部温度,最高温度,最低温度和湿度插入消息。
  • 通过以下方式填充变换功能:
      var newMsg = {
          "outsideTemp": msg.main.temp,
          "outsideMaxTemp": msg.main.temp_max,
          "outsideMinTemp": msg.main.temp_min,
          "outsideHumidity": msg.main.humidity,
      };
      
      
      return {msg: newMsg, metadata: metadata, msgType: msgType};

image

节点 F: Save timeseries node
  • 添加Script transformation node并将其连接到关系类型为SuccessExternal REST API call node** 调用节点”。该节点会将消息放入遥测中。

image

设置仪表板

下载并导入上传的仪表板教程文件

仪表板应如下所示: image

下一步

  • 入门指南 - 这些指南提供了ThingsBoard主要功能的快速概述。

  • 安装指南 - 了解如何在各种操作系统上安装ThingsBoard。

  • 设备连接 - 了解如何根据您的连接方式或解决方案连接设备。

  • 数据看板 - 这些指南包含有关如何配置复杂的ThingsBoard仪表板的说明。

  • 数据分析 - 了解如何使用规则引擎执行基本的分析任务。

  • 硬件样品 - 了解如何将各种硬件平台连接到ThingsBoard。

  • 高级功能 - 了解高级ThingsBoard功能。

  • 开发指南 - 了解ThingsBoard中的贡献和开发。