本指南将帮助您熟悉ThingsBoard IoT Gateway的FTP连接器配置。 请使用通用配置启用此连接器。 该连接器的用途是连接外部FTP服务器并从指定路径的文件中获取数据。 连接器还能根据ThingsBoard的更新或命令将数据推送到FTP服务器文件。
当您的设备上有FTP服务器或外部资源中有数据并希望将这些数据推送至ThingsBoard时,此连接器非常有用。
下面我们将详细介绍连接器配置文件。
连接器配置:ftp.json
连接器配置是一个JSON文件,包含如何连接到外部FTP服务器、读取数据时使用哪些路径以及如何处理数据的信息。 让我们通过以下示例来了解配置文件的格式。
FTP连接器配置文件示例。
以下示例将连接到部署在IP为0.0.0.0的服务器上的本地网络FTP服务器。 连接器将使用用户名和密码进行基本FTP认证。 然后,连接器将订阅映射部分中的路径列表。更多信息请参阅下方描述。
通用配置部分
| 参数 | 默认值 | 描述 |
|---|---|---|
| host | localhost | 服务器的域名地址或IP。 |
| port | 21 | 服务器的端口。 |
| TLSSupport | true | 验证服务器是否支持TLS。 |
子配置”security”
“security”子配置提供FTP服务器客户端授权的配置。
|
Basic 是一种安全配置方式。 授权时将使用本配置节中提供的 username 和 password 组合。
配置文件中的 security 配置小节将如下所示: |
|
Anonymous 认证是最简单的选项,适合在公共 FTP 服务器上测试。
配置文件中的 security 配置小节将如下所示: |
“paths”配置部分
此配置部分包含一个路径对象数组,网关连接到服务器后将尝试读取这些路径。 此外,该部分还包含处理传入消息(转换器)的设置。
| 参数 | 默认值 | 描述 |
|---|---|---|
| path | data/log.txt | 用于读取数据的文件路径。 |
注意:请确保您的文件扩展名是FTP连接器支持的扩展名之一(.txt、.json、.csv)。
path支持特殊符号,例如’*‘,允许订阅多个路径和文件。 让我们看看使用path参数的其他示例:
| 示例名称 | 路径 | 说明 |
|---|---|---|
| 示例1 | data/log.txt | 从单个文件读取数据(如果存在) |
| 示例2 | data/*/log.txt | 从包含data文件夹的所有文件夹中读取所有log.txt文件 |
| 示例3 | data/*/*_log.txt | 从包含data文件夹的所有文件夹中读取文件名包含_log.txt的所有文件 |
| 示例3 | data/*.* | 读取data文件夹中所有支持扩展名的所有文件 |
现在让我们查看path部分中的其他必需参数。
| 参数 | 可用值 | 描述 |
|---|---|---|
| delimiter | , | 用于分割文件中数据的符号 |
| readMode | FULL/PARTIAL | 如果参数等于FULL,文件将从头读到尾。如果参数等于PARTIAL,文件将从上次读取的行开始读取 |
| maxFileSize | 5 | 将被读取的最大文件大小(MB)(如果文件大小超过5MB,将被跳过) |
| pollPeriod | 60 | 读取路径中文件的时间周期(秒) |
| txtFileDataView | TABLE/SLICED | txtFileDataView参数仅用于.txt文件 |
| withSortingFiles | true/false | 路径中找到的文件将如何追加到数组中 |
| attributes | 此子配置包含传入消息的参数,将被解释为设备的属性。 | |
| timeseries | 此子配置包含传入消息的参数,将被解释为设备的遥测数据。 |
让我们看看如何为不同的文件扩展名配置此部分:
1.用于TABLE数据视图的.txt文件和.csv文件
json
"paths": [
{
"devicePatternName": "${temp}",
"devicePatternType": "Device",
"delimiter": ",",
"path": "fol/*.*",
"readMode": "FULL",
"maxFileSize": 5,
"pollPeriod": 60,
"txtFileDataView": "TABLE",
"withSortingFiles": true,
"attributes": [
{
"type": "int",
"key": "key",
"value": "${temp}"
}
],
"timeseries": [
{
"type": "int",
"key": "${hum}",
"value": "${temp}"
},
{
"type": "int",
"key": "temp",
"value": "${hum}"
}
]
}
]
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
这意味着FTP转换器将查找以下文件结构:
```txt
temp,hum
1,2
23,34
``` 2.用于SLICED数据视图的.txt文件
```json
"paths": [
{
"devicePatternName": "DeviceName",
"devicePatternType": "[0:1]",
"delimiter": ",",
"path": "fol/table.txt",
"readMode": "FULL",
"maxFileSize": 5,
"pollPeriod": 60,
"txtFileDataView": "SLICED",
"withSortingFiles": true,
"attributes": [
{
"key": "temp",
"value": "[1:]"
},
{
"key": "tmp",
"value": "[0:1]"
}
],
"timeseries": [
{
"type": "int",
"key": "[0:1]",
"value": "[0:1]"
},
{
"type": "int",
"key": "temp",
"value": "[1:]"
}
]
}
]
```
这意味着FTP转换器将查找以下文件结构:
```txt
1,2
23,34
``` 3.用于.json文件
```json
"paths": [
{
"devicePatternName": "${temp}",
"devicePatternType": "Device",
"delimiter": ",",
"path": "fol/*.json",
"readMode": "FULL",
"maxFileSize": 5,
"pollPeriod": 60,
"withSortingFiles": true,
"attributes": [
{
"type": "int",
"key": "key",
"value": "${temp}"
}
],
"timeseries": [
{
"type": "int",
"key": "key",
"value": "${temp}"
},
{
"type": "int",
"key": "temp",
"value": "${tmp}"
}
]
}
]
``` 4.组合attributes、telemetry和serverSideRpc部分,例如在.json文件中: ```json "paths": [
{
"devicePatternName": "${temp}",
"devicePatternType": "Device",
"delimiter": ",",
"path": "fol/*.json",
"readMode": "FULL",
"maxFileSize": 5,
"pollPeriod": 60,
"withSortingFiles": true,
"attributes": [],
"timeseries": [
{
"type": "int",
"key": "hum",
"value": "${hum}"
},
{
"type": "int",
"key": "temp",
"value": "${tmp}"
},
{
"type": "string",
"key": "combine",
"value": "${tmp}::${hum}"
}
]
}
] ```
子配置”converter”
此配置部分是可选的,仅在您希望使用自定义FTP转换器处理传入数据时使用。
典型使用场景:
-默认不支持扩展名的文件,或支持的扩展名但数据结构不同的文件,例如: -没有标题行的CSV文件 -字段位于固定列位置的CSV行
在此示例中,我们展示了一个无标题CSV文件的配置,其中设备名称、属性和遥测值通过列索引获取。
配置中的映射子部分如下所示:
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
28
29
{
"converter": {
"type": "custom",
"extension": "CustomFTPtUplinkConverter",
"extension-config": {
"devicePatternName": 0,
"devicePatternType": 1,
"attributes": [
{
"key": "meterAddress",
"column": 0,
"type": "string"
}
],
"timeseries": [
{
"key": "meterReading",
"column": 2,
"type": "double"
},
{
"key": "batteryAlert",
"column": 3,
"type": "int"
}
]
}
}
}
以下是此配置中用于自定义转换器的每个参数的描述。
顶层converter参数:
-
converter.type
必须设置为custom。这会告诉FTP连接器使用自定义转换器而非内置转换器。 -
converter.extension
实现自定义转换器的Python类名称,例如CustomFTPtUplinkConverter。
extension-config字段:
-
devicePatternName
用于解析设备名称的列索引。在示例中,0表示设备名称取自第0列。 -
devicePatternType
用于解析设备类型的列索引或字面值。在示例中,1表示设备类型取自第1列。 -
attributes
属性映射数组。每个元素描述如何从特定CSV列读取单个设备属性。 -
timeseries
遥测映射数组。每个元素描述如何从特定CSV列读取单个遥测值。
attributes和timeseries元素: attributes和timeseries的每个元素具有相同的结构:
-
key
将出现在ThingsBoard平台已创建设备上的属性或遥测键(例如meterAddress、meterReading)。 -
column
CSV行中取值的从零开始的列索引。 -
type
目标值类型。自定义转换器会将原始字符串转换为此类型(例如string、int、double)。
“attributeUpdates”配置部分
此配置部分是可选的。 ThingsBoard允许配置设备属性并从设备应用程序获取部分属性。您可以将其视为设备的远程配置,使设备能够从ThingsBoard请求共享属性。详见用户指南。
“attributeRequests”配置允许您配置将写入特定文件的相应属性数据的格式。
| 参数 | 默认值 | 描述 |
|---|---|---|
| path | fol/${attributeKey}/${attributeValue}.txt | 用于查找特定文件的JSON路径表达式 |
| deviceNameFilter | .* | 正则表达式设备名称过滤器,用于确定执行哪个功能。 |
| writingMode | OVERRIDE/WRITE | 如果writingMode等于OVERRIDE,找到的文件将被覆盖。如果writingMode等于WRITE,新数据将追加到找到的文件末尾。 |
| valueExpression | ,,,,${attributeKey},,,${attributeValue} | 用于创建将发送到FTP服务器的消息数据的表达式。’,’作为分隔符,您可以在其前面插入数据。 |
配置文件中此部分如下所示:
1
2
3
4
5
6
7
8
"attributeUpdates": [
{
"path": "fol/${attributeKey}/${attributeValue}.txt",
"deviceNameFilter": ".*",
"writingMode": "OVERRIDE",
"valueExpression": ",,,,${attributeKey},,,${attributeValue}"
}
]
服务端RPC命令
ThingsBoard允许向直接连接到ThingsBoard或通过网关连接的设备发送RPC命令。
此部分提供的配置用于从ThingsBoard向设备发送RPC请求。
| 参数 | 默认值 | 描述 |
|---|---|---|
| deviceNameFilter | .* | 正则表达式设备名称过滤器,用于确定执行哪个功能。 |
| methodFilter | read/write | 文件打开模式 |
| valueExpression | ,,,,${attributeKey},,,${attributeValue} | JSON路径表达式,用于创建发送到FTP服务器的数据,当methodFilter等于write时使用。如果methodFilter等于read,则忽略此字段。 |
配置文件中此部分如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
"serverSideRpc": [
{
"deviceNameFilter": ".*",
"methodFilter": "read",
"valueExpression": "${params}"
},
{
"deviceNameFilter": ".*",
"methodFilter": "write",
"valueExpression": "${params}"
}
]
让我们来看一些示例。
读取数据示例
假设您想从已连接的FTP服务器上的文件中读取数据。前往已启用的FTP连接器RPC页面,使用以下配置填写字段并点击”Send“按钮:

之后,响应将显示在”Response“字段中:

写入数据示例
假设您想向已连接的FTP服务器上的文件写入一些数据。前往已启用的FTP连接器RPC页面,使用以下配置填写字段并点击”Send“按钮:

之后,响应将显示在”Response“字段中:

让我们检查数据是否已写入FTP服务器上的文件,为此请使用之前描述的”读取数据“示例:

您的响应应包含您写入文件的数据,如下图所示:

下一步
浏览与ThingsBoard主要功能相关的指南: