ChirpStack 学习笔记 2.8 应用集成 InfluxDB

本文介绍如何在ChirpStack LoRaWAN服务器中集成InfluxDB进行数据存储,包括设置InfluxDB容器、配置WebUI以及设备数据上报流程。详细展示了设备数据在InfluxDB中的存储方式,以及如何通过测量(measurements)和标签(tags)对数据进行分类。
FLUX.1-dev

FLUX.1-dev

图片生成
FLUX

FLUX.1-dev 是一个由 Black Forest Labs 创立的开源 AI 图像生成模型版本,它以其高质量和类似照片的真实感而闻名,并且比其他模型更有效率

前言

为了对 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


您可能感兴趣的与本文相关的镜像

FLUX.1-dev

FLUX.1-dev

图片生成
FLUX

FLUX.1-dev 是一个由 Black Forest Labs 创立的开源 AI 图像生成模型版本,它以其高质量和类似照片的真实感而闻名,并且比其他模型更有效率

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值