ChirpStack 学习笔记 2.8 应用集成 InfluxDB
为了对 LoRaWAN 系统中的节点和网关的指标进行可视化观察,ChirpStack 可以在应用集成中配置将数据的收发存储到 InfluxDB,再通过 Granfana 进行可视化观察。
文章目录
前言
为了对 LoRaWAN 系统中的节点和网关的指标进行可视化观察,ChirpStack 引入了 Grafana。 Granfana 现在支持了多种数据库,最典型的是时序数据库 InfluxDB。
ChirpStack 可以在应用集成中配置将数据的收发存储到 InfluxDB,再通过 Granfana 进行可视化观察。
在论坛中翻到 18年5月的时候B哥就发布了这个特性,当时貌似还很开心,这确实是一个很棒的功能。
在这篇笔记里先记录下如何使用 InfluxDB,下一篇再记录如何使用 grafana。
小能手最近在学习 ChirpStack 项目,应该是最有影响力的 LoRaWAN 服务器开源项目。它组件丰富,代码可读性强,是个很好的学习资料。更多学习笔记,可点此查看。
1 功能说明
关于上下行数据的 measurement
measurement 的命名格式
All measurements are using the field names from the object element, joined by an underscode (_) in case the object element is nested. Payload data is prefixed by device_frmpayload_data.
所有 measurements 名称都是将 object 的几个元素用下划线来连接下来。其中的 Payload 数据是以 device_frmpayload_data 做前缀,同时要求 Payload 存入 InfluxDB 之前需要保证为 JSON 格式, 键为:object。
Payload 示例:
{
"object": {
"temperature_sensor": {
"1": 23.5
}
}
}
这个示例 measurements 名称将为 device_frmpayload_data_temperature_sensor_1.
measurements 的 tag
每个 measurements 都有如下的 tag:
- application_name
- device_name
- dev_eui
- f_port (LoRaWAN port used for uplink)
其他类的 measurement
除了最核心的上下行数据之外,ChirpStack 还支持几类数据的记录:
- Device uplink meta-data,为了监控扩频因子、信道等数据,每个上行数据都会记录到名为 device_uplink 的 measurement。 其中的 value 固定为 1。
- Device battery level,从 mac 命令 DevStatusAns 中获得
- Device margin status,从 mac 命令 DevStatusAns 中获得
2 具体操作
2.1 初始化并启动 InfluxDB 容器
# mkdir InfluxDB
# cd InfluxDB/
# sudo docker run --rm\
-e INFLUXDB_DB=db0 -e INFLUXDB_ADMIN_ENABLED=true \
-e INFLUXDB_ADMIN_USER=admin -e INFLUXDB_ADMIN_PASSWORD=supersecretpassword \
-e INFLUXDB_USER=telegraf -e INFLUXDB_USER_PASSWORD=secretpassword \
-v $PWD:/var/lib/influxdb \
influxdb /init-influxdb.sh
# docker run --name=influxdb -d -p 8086:8086 -v $PWD:/var/lib/influxdb influxdb
#
这里初始化了 db0 数据库,并且增加了用户 telegraf。详细的 InfluxDB 操作见教程 InfluxDB 基础概念及操作。
2.2 webui 配置 InfluxDB
注意其中的 API endpoint (write) 中的 IP 一定要记得处理下,我是在相同的宿主机上运行了 InfluxDB 容器,不能采用默认的 localhost,必须配置为 Docker 网桥的地址,只有这样才能让 AS 的容器通过宿主机地址来与 InfluxDB 容器通信。
# ip a
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 02:42:5f:e8:7c:be brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
关于这个问题,我在下一篇笔记 2.8.1 ChirpStack 容器连接本机 InfluxDB 容器的一个典型问题处理 中有详细的记录。
2.3 设备上报数据
操作设备上报数据,我使用的是 2.7 JS编解码函数的使用 相同的程序,上报数据经过编解码后出来一个 temperature 的对象。
3 结果
设备数据上报后,AS 的日志打印如下:
time="2020-02-07T11:29:23Z" level=info msg="device updated" dev_eui=1219000000000003
time="2020-02-07T11:29:23Z" level=info msg="finished unary call with code OK" grpc.code=OK grpc.method=HandleUplinkData grpc.request.deadline="2020-02-07T11:29:24Z" grpc.service=as.ApplicationServerService grpc.start_time="2020-02-07T11:29:23Z" grpc.time_ms=4.927 peer.address="192.168.64.5:53871" span.kind=server system=grpc
time="2020-02-07T11:29:23Z" level=info msg="integration/mqtt: publishing message" qos=0 topic=application/2/device/1219000000000003/rx
time="2020-02-07T11:29:23Z" level=info msg="integration/influxdb: uplink measurements written" dev_eui=1219000000000003
我们登录 InfluxDB 查看相关 measurements。
device_frmpayload_data
因为我上传的 object 是 “object”:{“temperature”:104},所以相应的 measurements 为:device_frmpayload_data_temperature。
> use db0
Using database db0
> SELECT * FROM device_frmpayload_data_temperature
name: device_frmpayload_data_temperature
time application_name dev_eui device_name f_port value
---- ---------------- ------- ----------- ------ -----
1581074823742000000 demoapp 1219000000000003 ths_001 5 104
1581074843739000000 demoapp 1219000000000003 ths_001 5 104
1581074863740000000 demoapp 1219000000000003 ths_001 5 104
1581074883739000000 demoapp 1219000000000003 ths_001 5 104
1581074903742000000 demoapp 1219000000000003 ths_001 5 104
1581074923740000000 demoapp 1219000000000003 ths_001 5 104
1581074943744000000 demoapp 1219000000000003 ths_001 5 104
1581074963741000000 demoapp 1219000000000003 ths_001 5 104
1581074983740000000 demoapp 1219000000000003 ths_001 5 104
1581075003741000000 demoapp 1219000000000003 ths_001 5 104
1581075023754000000 demoapp 1219000000000003 ths_001 5 104
1581075043742000000 demoapp 1219000000000003 ths_001 5 104
device_uplink
> SELECT * FROM device_uplink
name: device_uplink
time application_name dev_eui device_name dr f_cnt frequency rssi snr value
---- ---------------- ------- ----------- -- ----- --------- ---- --- -----
1581074823742000000 demoapp 1219000000000003 ths_001 4 0 470300000 -113 -4.3 1
1581074843739000000 demoapp 1219000000000003 ths_001 4 1 470300000 -113 -4.3 1
1581074863740000000 demoapp 1219000000000003 ths_001 4 2 470300000 -113 -4.3 1
1581074883739000000 demoapp 1219000000000003 ths_001 4 3 470300000 -113 -4.3 1
1581074903742000000 demoapp 1219000000000003 ths_001 4 4 470300000 -113 -4.3 1
1581074923740000000 demoapp 1219000000000003 ths_001 4 5 470300000 -113 -4.3 1
1581074943744000000 demoapp 1219000000000003 ths_001 4 6 470300000 -113 -4.3 1
1581074963741000000 demoapp 1219000000000003 ths_001 4 7 470300000 -113 -4.3 1
1581074983740000000 demoapp 1219000000000003 ths_001 4 8 470300000 -113 -4.3 1
1581075003741000000 demoapp 1219000000000003 ths_001 4 9 470300000 -113 -4.3 1
1581075023754000000 demoapp 1219000000000003 ths_001 4 10 470300000 -113 -4.3 1
1581075043742000000 demoapp 1219000000000003 ths_001 4 11 470300000 -113 -4.3 1
>
END
更多推荐
所有评论(0)