本指南提供了将Abeeway Micro Tracker和Abeeway Industrial Tracker连接到ThingsBoard Professional Edition(PE)的分步说明。连接通过LoRaWAN IoT网络和Actility的ThingPark Wireless OSS智能记录器进行。在本指南中,我们将使用免费的ThingsBoard PE演示服务器thingsboard.cloud。本指南对任何想要将Abeeway或其他工业物联网应用制造的跟踪器连接到LoRaWAN网络的人都很有用。
- 前置条件
- 步骤1:检查Actility的ThingPark Wireless平台注册
- 步骤2:创建上行与下行数据转换器
- 步骤3:上行数据转换器配置
- 步骤4:下行数据转换器配置
- 步骤5:集成配置
- 步骤6:验证集成创建与配置后的设备连接
- 步骤7:仪表板的创建与配置
- 步骤8:上报遥测并验证集成配置
- 步骤9:配置根规则链(Root)
- 步骤10:创建并发送下行消息
- 下一步
前置条件
我们假设:
- 您在Actility网站上注册。
- 您至少拥有一个已经连接到Actility ThingPark IoT Network并处于活跃状态的Abeeway Micro Tracker或Abeeway Industrial Tracker。
- 您已拥有ThingsBoard PE服务器或免费演示账户。否则,您可以在此处注册30天免费演示账户:thingsboard.cloud。
- 您至少具备关于ThingsBoard的基本知识,因此建议您完成入门指南。## 集成概述
ThingsBoard平台集成功能允许将来自各种平台和连接解决方案的数据推送到ThingsBoard。我们将使用Actility的ThingPark Wireless平台来使用来自LoRaWAN网络的数据,并在ThingsBoard中自动注册设备。除了配置集成外,我们还将设置ThingsBoard以解码传入的数据、将其存储在数据库中、在仪表板上可视化并根据可配置的阈值生成警报。
步骤1:检查Actility的ThingPark Wireless平台注册
- 设备的注册与状态
需要注意的几点:
上行报文中的DevEUI将作为ThingsBoard中该设备的名称;
ThingsBoard会自动创建设备,类型为”tracker”,名称等于DevEUI;
因此在创建新设备时,请在名称字段中填入DevEUI的值,该值可从ThingPark Wireless OSS智能记录器(Actility)的设备信息部分获取。
<详情>设备必须 处于活跃状态!!! 本示例中DevEUI= "20635F010800105C"
设备必须关联到应用。本示例中:关联到应用 "NoAS21"
<详情>步骤2:创建上行与下行数据转换器
要创建集成,首先需创建上行数据转换器和下行数据转换器。转换器将把LoRaWAN标准中编码的hex格式遥测载荷数据解码为人类可读、简化的ThingsBoard数据格式。
<详情>步骤3:上行数据转换器配置
创建上行转换器时,会在解码器区域自动添加一个默认解码器。
创建上行转换器后,需将解码器区域的代码更新为以下代码。
需要编辑上行解码器
<详情>(单击打开展开视图)
-
<详情>
- 本节描述跟踪器支持的载荷消息类型。
- 除非另有说明,所有数值均按网络字节序(高位在前)传输。
- 每条消息由以下部分组成:
- 通用头
- 特定数据部分
- (1) 活动状态消息与配置消息共用同一标识,通过其他字段区分。
- (2) 仅固件 1.7-3 支持,可通过 config_flag 参数配置。
-
<详情>
(单击打开展开视图)
1
2
3
4
5
6
7
{"DevEUI_uplink": {"Time":"2019-11-06T09:54:46.342+01:00","DevEUI":"20635F00C5000660","FPort": 17,"FCntUp": 1796,"ADRbit": 1,"MType": 2,"FCntDn": 94,"payload_hex":"0500997d3040","mic_hex":"304d48f9","Lrcid":"00000211","LrrRSSI": -63.0,"LrrSNR": 7.5,"SpFact": 7,"SubBand":"G1","Channel":"LC2","DevLrrCnt": 1,"Lrrid":"10000329","Late": 0,"Lrrs": {"Lrr": [{"Lrrid":"10000329","Chain": 0,"LrrRSSI": -63.0,"LrrSNR": 7.5,"LrrESP": -63.710819
}]
},"CustomerID":"100038328","CustomerData": {"alr": {"pro":"ABEE/APY","ver":"1"}
},"ModelCfg":"0","InstantPER": 0.0,"MeanPER": 0.001706,"DevAddr":"05C1704A","TxPower": 9.5,"NbTrans": 1
}
}
(单击打开展开视图)
-
<详情>
(单击打开展开视图)
1
2
3
4
5
{"deviceName":"20635F00C5000660","deviceType":"Abeeway Micro/Industrial Tracker","遥测": {"ts": 1573030486342,"values": {"batteryVoltage": 8.388,"temperature": 18.5,"ph_type":"Heartbeat消息","ph_status":"Standby","ph_alert_SOS_bit4": 0,"ph_tracking/idle_state_bit3": 0,"ph_tracker_is_moving_bit2": 0,"ph_periodic_position_message_bit1": 0,"ph_POD_message_bit0": 0,"m_type":"Unconfirmed数据Up","m_port": 17,"m_customerID":"100038328","m_LrrRSSI": -63,"m_LrrSNR": 7.5,"m_Lrrid":"10000329","ack": 3
},"last_reset_cause": 64
}
}
(单击打开展开视图)
(单击打开展开视图)
| Byte 0 | Byte 1 | Byte 2 | Byte 3 | Byte 4 | 数据变量 |
| 类型 | 状态 | Battery | Temperature | Ack/opt | 数据 |
| Field | First Byte | Byte length | 值 | 说明 |
| 类型 | 0 | 1 | 0x05 | Heartbeat消息 |
| 状态 | 1 | 1 | 0x00 | Standby |
| Battery | 2 | 1 | 0x99 | 8.388 |
| Temperature | 3 | 1 | 0x7d | 18.5 |
| Ack/opt | 4 | 1 | 0x30 | 3/可选数据(依消息类型而定,当前仅用于位置消息) |
| 数据 | 5 | 1-22 | 0x40 | last_reset_cause |
| 消息类型 | ID | 内容 |
| 帧挂起 | 0x00 | 当网关有下行消息且无其他上行消息排队时发送此上行消息以触发下发(并加快跟踪器配置) |
| 位置消息 | 0x03 | GPS、低功耗 GPS、WIFI 或 BLE 位置数据 |
| 能量状态消息 | 0x04 | 供服务器估算电量,包含与功耗相关的信息 |
| 心跳消息 | 0x05 | 通知服务器跟踪器运行正常且处于 LoRa 覆盖范围内 |
| 活动状态消息 (1) | 0x07 | 上报活动计数,仅用于活动跟踪模式 |
| 配置消息 (1) | 0x07 | 上报跟踪器部分或完整配置 |
| 关机消息 | 0x09 | 在跟踪器关机时发送 |
| 地理定位开始消息 (2) | 0x0A | 在跟踪器开始地理定位时发送 |
| 调试消息 | 0xFF | 仅内部使用 |
也可从 该文件 导入
<详情>步骤4:下行数据转换器配置
创建下行转换器时,会在解码器区域自动添加一个默认解码器。
创建下行转换器后,需将解码器区域的代码更新为 以下代码。
需要编辑下行解码器
打开下行转换器、进入编辑模式,点击「测试解码器函数」并用新代码替换默认代码:
-
<详情>
(单击打开展开视图)
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
{
{
/** 编码器 **/
var数据 = {};
// Process数据from incoming消息and metadata
数据.载荷 = msg.sentPayloadHex;
数据.DevEUI = metadata['DevEUI'];
数据.deviceType = metadata['deviceType'];
数据.ContentType ="application/json";
数据.Accept ="application/json";
数据.urlPrefix ="/core/latest/API/设备/";
数据.urlSufix ="/downlinkMessages";
数据.urlSufixToken ="/admin/latest/API/oauth/令牌";
数据.firstParamToken ="client_credentials";
数据.urlSufixGetDevices ="/core/latest/API/设备";
// Result object with encoded downlink载荷
var result = {
// downlink数据content类型: JSON, TEXT or BINARY (base64格式)
contentType:"JSON",
// downlink数据
数据: JSON.stringify(数据),
msg: msg,
metadata: metadata
};
return result;
}
}
也可从 该文件 导入
<详情>步骤5:集成配置
<详情>(单击打开展开视图)
警告!!! 创建集成后……
- 请核对 基础 URL;
- 请核对 下行 URL,并完成以下操作:
- 从集成窗口复制 下行 URL(即 HTTP 端点 URL,示例:https://thingparkenterprise.eu.actility.com/thingpark/dx/core/latest/API/设备);
- 将该 下行 URL 粘贴到 Actility 应用服务器的 URL 中,设备数据将由此地址收发。
(单击打开展开视图)
步骤6:验证集成创建与配置后的设备连接
创建并配置集成、并将其连接到 Actility 公司的 ThingPark Wireless 平台后,ThingsBoard 将开始接收来自您设备的首批遥测上报。
<详情>根据这些首批消息,ThingsBoard 系统会自动创建设备,其类型和名称与在 ThingPark Actility Enterprise 中注册时一致。
<详情>因此,在创建并配置集成后、开始仪表板设置前,请确认所有设备均已被 ThingsBoard 识别并可见。
步骤7:仪表板的创建与配置
<详情>创建仪表板
<详情>- 打开仪表板并添加:
别名(List abeeways):filter_type: Entity_list,类型:设备,device_names: DevEUI_1_, DevEUI_2_, DevEUI_3_...
<详情> - 打开仪表板并添加:别名(DigEntityFrom):类型:来自仪表板状态的实体,类型:设备 <详情>
(单击打开展开视图)
(单击打开展开视图)
向仪表板添加新部件:
- widget number 1:
- Current_bundle: Cards -> latest_values -> Entities:
- Datasources: 类型: Entity, 参数: List abeeways <详情>
- Action: action sources: on row click, 名称: ${entityName}, 类型: Update_current_dashboard_state, Set_entity_from_widget <详情>
- widget number 2:
- Current_bundle: Charts -> time_series: Timeseries_Float: <详情>
- Data_Source: 类型: Entity, 参数: List_abeeways, 键:temperature, label: ${entityLabel} <详情>
- widget number 3:
- Current_bundle: Digital_guages <详情>
- Data_Source: 类型: Entity, 参数: DigEntityFrom, 键:temperature, label: temperature <详情>
- widget number 4:
- Current_bundle: Cards ->Timeseries <详情>
- Data_Source: 类型: Entity, 参数: DigEntityFrom
- keys:temperature, label: temperature
- keys:batteryVoltage, label: batteryVoltage ...
- widget number 5:
- Current_bundle: Input widgets ->Update Multiple属性 <详情>
- Data_Source: 类型: Entity, 参数: DigEntityFrom
- keys:sentPayloadHex, label: ${entityLabel}
-注意:
- Widgets Number 1 and Number 2 with alias Entity_list.设备.
- Widgets Number 3 and Number 4 with alias DigEntityFrom.
步骤8:上报遥测并验证集成配置
<详情>(单击打开展开视图)
若设备处于活跃状态且您已正确完成连接 ThingPark Wireless OSS 智能记录器(Actility)平台的所有步骤,则会在您创建的仪表板上看到入站消息。
<详情>步骤9:配置根规则链(Root)
添加部件 5 后,需将其与下行解码器关联。
请进入「规则链」选项卡并打开「根规则链」。
编辑「根规则链」:
- 在「消息类型 Switch」之后添加 enrichment 节点「originator fields」,名称为「Fetch名称and类型」,以通过元数据获取设备原始名称:
- 名称:deviceName
- 类型:deviceType
- 「消息类型 Switch」与「Fetch名称and类型」之间的连接:
- 规则节点链接详情:「属性更新」
- 通过解码器接收下行数据并将解码后的数据传递至「Action - rpc call request」:
- 在「Fetch名称and类型」与「Action - rpc call request」之间
- 添加:Action「integration downlink」:名称 Actility_DownLink,integration Test_ThigPark <详情>
- 「Fetch名称and类型」与「Actility_DownLink」之间的连接:
- 规则节点链接详情:「成功」
- 「Actility_DownLink」与「Action - rpc call request」之间的连接:
- 规则节点链接详情:「成功」
步骤10:创建并发送下行消息
发送消息前:
- 需先确定请求类型(与配置、设备状态或新配置相关的信息),
以及数据内容本身(对数据的详细描述)。
- 这些消息由服务器经 LoRa 网络发送至跟踪器,用于配置或管理跟踪器。每条消息包含一个头,其中包括:
- 消息类型
- 确认令牌
- Operational mode配置
- Request设备 配置
- 参数 配置
(单击打开展开视图)
| 消息类型 | ID | 说明 |
| POD | 0x01 | 按需定位 |
| Set Mode | 0x02 | 更改跟踪器运行模式 |
| 请求配置 | 0x03 | 请求跟踪器当前配置 |
| 开始 SOS 模式 | 0x04 | 开启 SOS 模式 |
| 停止 SOS 模式 | 0x05 | 关闭 SOS 模式 |
| Set Param | 0x0B | 修改参数 |
| 调试命令 | 0xFF | 删除 BLE 绑定并重置跟踪器 |
-
<详情>
| Mode | 值 |
| Standby | 0 |
| Motion tracking | 1 |
| Permanent tracking | 2 |
| Motion开始/结束tracking | 3 |
| Activity tracking | 4 |
| Off mode | 5 |
1
2
3
4
{...
payloadHex:"0203", ...
}
1
2
3
4
5
6
7
8
9
10
11
{...
payloadHex:"030605090C01", ...
*"05"- geoloc_sensor,
*"09"- gps_timeout,
*"0C"- gps_convergence,
*"01"- lora_period,
Special parameter ID:
*"0xFD": get the BLE version.
*"0xFE": get the firmware version.
}
1
2
3
4
5
6
{...
payloadHex:"0B 0A 0C00000078 1100000E10", ...
*"0C00000078"- 0C - gps_convergence, 0x78 - 值 (sec),
* 1100000E10 - 11 - gps_standby_timeout. 0xE10 - 值 (sec).
}
- Messages to设备are sent from widget number 5: <详情>
1
2
3
4
{...
payloadHex:"03020001020305",
...}
1
2
3
4
5
6
7
8
9
10
{...
Byte 0 Byte 1 Byte 2-21"0x03""ACK"Byte"2-21"Parameter ID list (optional)
Special parameter ID:
➢ 0xFD: get the BLE version.
➢ 0xFE: get the firmware version.
Byte 2-21 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12
13 fd fe
00 01 02 03 05 06 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 fe
...}