产品定价 立即试用
专业版
文档 > 集成 > Azure服务总线
入门
指南 安装 架构 API 常见问题
目录

Azure Service Bus 集成

文档信息图标
ThingsBoard PE 功能

专业版支持Platform Integrations功能。
请使用ThingsBoard Cloud自行安装平台实例。

概述

Azure Service Bus集成可从Azure Service Bus向ThingsBoard流式传输数据,并将设备负载转换为ThingsBoard格式。

image

配置Azure Service Bus

要创建ThingsBoard Service Bus集成,您需要在Azure门户中创建两项内容:topic(主题)和该主题的subscription(订阅)。 您还需要找到并保存Service Bus命名空间的connection string(连接字符串),后续步骤中会用到。

创建上行转换器

您可以在Data converters部分创建Uplink converter(上行转换器),也可以直接在集成中创建。上行转换器用于将来自设备的传入数据转换为ThingsBoard所需的显示格式。点击“加号”按钮,然后点击“Create new converter”。要查看事件,请启用Debug模式。 在函数解码器字段中,指定用于解析和转换数据的脚本。

调试模式

启用调试模式可追踪与integrations执行相关的事件、状态及潜在错误,便于开发和排障。

文档信息图标

注意:调试模式可能迅速增加磁盘占用,因为所有调试事件都会存入数据库。 自ThingsBoard 3.9起,平台仅在integrations创建后的前15分钟内存储完整调试事件,之后仅保留错误事件。

调试模式设置可组合使用或完全关闭。

以下是来自Service Bus主题的示例上行消息:

1
2
3
4
5
6
7
{
   "devName": "Sensor A1",
   "msg": {
      "temp": 23,
      "humidity": 40
   }
}

可使用 TBEL(TBEL)或 JavaScript 开发用户自定义函数。 建议使用 TBEL,其在ThingsBoard 中的执行效率远高于 JS。

可使用以下代码,将其复制到 decoder function 区域:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/** Decoder **/

// decode payload to string
var data = decodeToJson(payload);
var deviceName = data.devName;
var deviceType = 'thermostat';

var result = {
    deviceName: deviceName,
    deviceType: deviceType,
    telemetry: {
        temperature: data.msg.temp,
        humidity: data.msg.humidity
    }
};

/** Helper functions 'decodeToString' and 'decodeToJson' are already built-in **/
return result;

image

可使用以下代码,将其复制到 decoder function 区域:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/** Decoder **/

// decode payload to string
var data = decodeToJson(payload);
var deviceName = data.devName;
var deviceType = 'thermostat';

var result = {
    deviceName: deviceName,
    deviceType: deviceType,
    telemetry: {
        temperature: data.msg.temp,
        humidity: data.msg.humidity
    }
};

function decodeToString(payload) {
    return String.fromCharCode.apply(String, payload);
}

function decodeToJson(payload) {
    var str = decodeToString(payload);
    var data = JSON.parse(str);
    return data;
}

return result;

image

在ThingsBoard中创建集成

现在我们已经在Azure门户中创建了一个topic,并且创建了上行转换器,可以开始创建集成了。

1) 进入Integrations center -> Integrations页面,点击“加号”按钮创建新的集成。将其命名为Azure Service Bus Integration,选择类型为Azure Service Bus,然后点击“Next”;

image

2) 在此步骤中,您可以选择之前创建的转换器,也可以直接在此窗口中创建新的上行转换器。选择之前创建的Service Bus Uplink Converter,然后点击“Next”;

image

3) 在添加下行转换器的步骤中,您同样可以选择之前创建的或创建新的下行转换器。但目前请将“Downlink data converter”字段留空,点击“Skip”;

image

4) 填写Service Bus命名空间的connection string(连接字符串)、topic(主题名称)和subscription(订阅名称);

image

5) [可选] 点击Check connection按钮检查与Service Bus主题的连接。点击Add按钮创建集成。

image

测试一下!

要发送测试消息,请使用Azure Service Bus的附加功能——Service Bus Explorer。

登录Azure门户并选择您的namespace(命名空间)。选择用于上行的topic(主题)。 在左侧面板中选择”Service Bus Explorer“选项卡。 点击”Send message“,根据上行转换器选择数据载荷类型,然后发送测试消息。

image

数据载荷示例:

1
2
3
4
5
6
7
{
    "devName": "Sensor A1",
    "msg": {
        "temp": 23,
        "humidity": 40
    }
}

要检查消息是否已到达Service Bus集成,请打开集成的“Events”选项卡。

image


接收到的数据可以在上行转换器中查看。在“Events”选项卡的“In”和“Out”区域中:

发送上行消息后,系统会自动创建一个新设备。您会收到相关通知。要查看通知,请点击屏幕右上角的铃铛图标。 通知中会包含指向已创建设备的链接,点击进入该设备。

image

在这里您可以看到新设备的信息,以及我们发送到该设备的遥测数据。

image

了解更多关于通知及其配置方法,请参阅此处

高级用法:下行消息

要向设备发送消息,您需要配置下行设置,包括下行转换器以及接收消息的Service Bus主题信息。 在Azure门户中创建topic用于下行消息传递。 (建议同时为该主题创建subscription,以便稍后在Azure门户中检查消息)。

现在,创建downlink converter(下行转换器)(步骤与创建上行转换器相同,但需选择Downlink并指定不同的函数)。

可使用我们的 downlink converter 示例,或根据您的配置自行编写:

1
2
3
4
5
6
7
8
9
10
11
12
13
// Encode downlink data from incoming Rule Engine message
// msg - JSON message payload downlink message json
// msgType - type of message, for ex. 'ATTRIBUTES_UPDATED', 'POST_TELEMETRY_REQUEST', etc.
// Result object with encoded downlink payload
var result = {
    contentType: "JSON",
    data: JSON.stringify(msg),
    metadata: {
        deviceId: 'Sensor A1'
    }
};

return result;

image

您可以使用我们的下行转换器示例,或根据您的配置编写自己的转换器:

1
2
3
4
5
6
7
8
9
10
11
12
// 将传入的规则引擎消息编码为下行数据
// msg - 下行消息的 JSON 消息 payload
// 包含编码后下行 payload 的结果对象
var result = {
    contentType: "JSON",
    data: JSON.stringify(msg),
    metadata: {
        deviceId: 'Sensor A1'
    }
};

return result;

image

文档信息图标

NOTE
如果您使用了其他设备名称(而非Sensor A1),则需要在下行转换器中为deviceId字段指定您的设备名称

进入集成页面并指定已创建的downlink converter(下行转换器)。然后打开Advanced settings,指定Service Bus命名空间的Downlink topicDownlink connection string (如果下行使用相同的命名空间,可以从上行设置中复制连接字符串)。

image


好了,下行转换器和集成都已准备就绪。让我们通过downlink节点来测试集成。

发送测试上行消息后,集成已在ThingsBoard中创建了设备。让我们检查该设备连接到了哪个规则链。 为此,请在ThingsBoard菜单中进入Entities -> Devices页面,找到我们在上行消息中使用的设备名称对应的设备。找到并进入该设备使用的device profile(设备配置)。

image

找到该设备配置所使用的rule chain(规则链)名称。

image

进入Rule chains页面。在”Search nodes”字段中输入”downlink”,在菜单中选择”integration downlink“节点并将其拖放到画布上。 在弹出窗口中,指定规则节点的名称并选择您的集成。

image

然后,点击“message type switch”规则节点右侧的灰色圆圈,将其拖动到“integration downlink”节点的左侧。在此选择“Post attribute”和“Attributes update”,点击“Add”链接并保存规则链。

image

进入“Entities” -> “Devices”页面,选择我们的设备。切换到Attributes选项卡。在”Entity attributes scope”列表中选择Shared attributes。 点击”加号”创建新的属性。在弹出窗口中指定属性的键名、值类型和具体值,然后点击”Add”。

image

进入Integrations页面查看下行结果。

image

如您所见,集成已成功生成下行消息并发送到了Azure Service Bus。

要在Azure Service Bus中检查消息,您需要进入Azure门户,选择用于下行的topic及其订阅。 选择Receive mode,然后点击Receive messages。在弹出窗口中点击”Receive“按钮。

image


image

总结

以上就是全部内容!祝您在配置IoT设备和仪表板时一切顺利!

下一步