产品定价 立即试用
云平台
北美地区
文档 > 集成 > 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设备和仪表板时一切顺利!

下一步