本指南包含分步说明,介绍如何通过T-Mobile NB IoT网络将SODAQ NB-IoT开发板连接到ThingsBoard专业版(PE)。本指南使用免费的ThingsBoard PE演示服务器 thingsboard.cloud。适用于希望将SODAQ NB-IoT开发板或其他硬件连接到T-Mobile NB IoT网络的用户。* TOC
前置条件
假设您至少有一块 SODAQ NB-IoT 追踪器已接入 T-Mobile IoT 网络,并已有 ThingsBoard PE 服务器或免费演示账户;否则可在此注册 30 天免费演示:thingsboard.cloud。
建议具备 ThingsBoard 基础知识,否则请先完成以下指南:
- 入门 指南.
- Platform Integrations 指南.
Integration概述
ThingsBoard平台集成功能可将各平台与连接方案的数据推送到ThingsBoard。 我们将使用UDP平台集成来消费T-Mobile NB IoT网络数据,并在ThingsBoard中自动注册设备。 除配置集成外,还将配置ThingsBoard解码上行数据、写入数据库、在仪表板中可视化并按可配置阈值生成告警。
步骤1:数据转换器配置
要创建集成,需先创建上行数据转换器。 转换器会将T-Mobile NB IoT的编码十六进制遥测载荷解码为易读、简化的ThingsBoard数据格式。
- T-Mobile NB IoT平台的上行数据为字节序列,转换为十六进制字符串后形如:
1
"010145292a2bfbfc0000000000000000e6e3355c751a879de31e6535d10306005600d00402"
- UDP集成将上述十六进制字符串传入JSON,得到如下载荷:
1
2
{"reports": [{"value":"010145292a2bfbfc0000000000000000e6e3355c751a879de31e6535d10306005600d00402"}]
}
- 针对该载荷,解码器代码如下:
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
/** 解码器 **/
// 输入JSON的字段
var reports = decodeToJson(payload).reports;
// 结果对象含设备属性/遥测数据
var result = {
deviceName: {},
deviceType:"tracker",
telemetry: []
};
for (var i = 0; i < reports.length; i++) {
result.deviceName = parseInt(reports[i].value.substring(2, 16), 16);
var telemetryObj = {
ts: {},
values: {}
};
timestamp = stringToInt(reports[i].value.substring(32,40))*1000;
v = stringToInt(reports[i].value.substring(40,42))/100 + 3;
t = stringToInt(reports[i].value.substring(42,44));
lat = stringToInt(reports[i].value.substring(44,52))/10000000;
lon = stringToInt(reports[i].value.substring(52,60))/10000000;
alt = stringToInt(reports[i].value.substring(60, 64));
speed = stringToInt(reports[i].value.substring(64, 68));
sat = stringToInt(reports[i].value.substring(68, 70));
ttf = stringToInt(reports[i].value.substring(70, 72));
telemetryObj.ts = timestamp;
telemetryObj.values.batteryVoltage = v;
telemetryObj.values.temperature = t;
if(lat !== 0) {
telemetryObj.values.latitude = lat;
}
if(lon !== 0) {
telemetryObj.values.longitude = lon;
}
if(alt !== 0) {
telemetryObj.values.altitude = alt;
}
telemetryObj.values.speed = speed;
telemetryObj.values.satellitesObserved = sat;
telemetryObj.values.timetToFirstFix = ttf;
result.telemetry.push(telemetryObj);
}
/** 辅助函数 **/
function stringToInt(hex) {
return parseInt('0x' + hex.match(/../g).reverse().join(''));
}
function decodeToString(payload) {
return String.fromCharCode.apply(String, payload);
}
function decodeToJson(payload) {
// 将payload转换为字符串
var str = decodeToString(payload);
// 将字符串解析为JSON
var data = JSON.parse(str);
return data;
}
return result;
- 解码后的输出数据如下所示:
1
2
3
4
{"deviceName": 357518080211964,"deviceType":"tracker","telemetry": [{"ts": 1547035622000,"values": {"batteryVoltage": 4.17,"temperature": 26,"latitude": 51.8233479,"longitude": 6.4042341,"altitude": 6,"speed": 86,"satellitesObserved": 208,"timetToFirstFix": 4
}
}]
}
注意以下几点:
- 上行消息中的IMEI将作为ThingsBoard中的设备名称;
- ThingsBoard会自动创建设备,类型为”tracker”,名称等于IMEI;
- 时间戳与传感器读数从上行十六进制字符串解码。
- 下表显示了传入十六进制字符串中每个编码字段的首字节位置和字节数:
| 字段 | 首字节 | 字节长度 |
| deviceName | 2 | 7 |
| ts | 16 | 4 |
| batteryVoltage | 20 | 1 |
| temperature | 21 | 1 |
| latitude | 22 | 4 |
| longitude | 26 | 4 |
| altitude | 30 | 2 |
| speed | 32 | 2 |
| satellitesObserved | 35 | 1 |
| timetToFirstFix | 36 | 1 |
-
进入数据转换器 > 添加新数据转换器 > 导入转换器
-
导入以下JSON文件:SODAQ UDP上行数据转换器(鼠标左键单击链接,然后按Ctrl+S下载) 如以下屏幕截图所示:
步骤2:集成配置
- 根据以下屏幕截图创建新的集成。
请注意按UDP集成设置指南复制集成键与集成密钥。
- 使用下表所示的输入数据填充字段:
| 字段 | 输入数据 |
| 名称 | SODAQ UDP集成 |
| 类型 | UDP |
| 调试模式 | 是 |
| 上行数据转换器 | SODAQ UDP数据上行转换器 |
| 下行数据转换器 | (空) |
| 端口 | 11560 |
| SO广播选项 | 64 |
| 处理器配置 | 处理器类型|HEX |
- 填完所有字段后,点击添加按钮。
步骤3:发布遥测数据并验证集成配置
在配置T-Mobile IoT平台前,请确保您已完成远程集成安装步骤。
同时,让我们确保ThingsBoard正确配置。使用简单的echo命令和netcat实用程序进行测试。 我们将使用下面的命令模拟来自T-Mobile IoT平台的消息。 执行以下命令:
1
2
3
echo -e -n '$payload' | xxd -r -p | nc -q1 -w1 -u $URL_THINGSBOARD_CLOUD_HOST $port
请将$payload、$URL_THINGSBOARD_CLOUD_HOST和$port分别替换为实际载荷、云主机URL和端口。
示例:
1
echo -e -n '010145292a2bfbfc0000000000000000e6e3355c751a879de31e6535d10306005600d00402' | xxd -r -p | nc -q1 -w1 -u 127.0.0.1 11560
进入集成调试事件,确认真实数据已到达并被成功处理。
应会创建名称为357518080211964的设备。