前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ChirpStack 学习笔记 2.8 应用集成 InfluxDB

ChirpStack 学习笔记 2.8 应用集成 InfluxDB

作者头像
twowinter
发布2020-04-17 17:47:18
2.1K1
发布2020-04-17 17:47:18
举报
文章被收录于专栏:twowintertwowinter

前言

为了对 LoRaWAN 系统中的节点和网关的指标进行可视化观察,ChirpStack 引入了 Grafana。 Granfana 现在支持了多种数据库,最典型的是时序数据库 InfluxDB

ChirpStack 可以在应用集成中配置将数据的收发存储到 InfluxDB,再通过 Granfana 进行可视化观察。

在论坛中翻到 18年5月的时候B哥就发布了这个特性,当时貌似还很开心,这确实是一个很棒的功能。

在这篇笔记里先记录下如何使用 InfluxDB,下一篇再记录如何使用 grafana。

小能手最近在学习 ChirpStack 项目,应该是最有影响力的 LoRaWAN 服务器开源项目。它组件丰富,代码可读性强,是个很好的学习资料。更多学习笔记,可点此查看

1 功能说明

关于上下行数据的 measurement

measurement 的命名格式
代码语言:javascript
复制
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 示例:

代码语言:javascript
复制
{
    "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 容器

代码语言:javascript
复制
# 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 容器通信。

代码语言:javascript
复制
# 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 的日志打印如下:

代码语言:javascript
复制
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。

代码语言:javascript
复制
> 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

代码语言:javascript
复制
> 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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 1 功能说明
    • 关于上下行数据的 measurement
      • measurement 的命名格式
      • measurements 的 tag
    • 其他类的 measurement
    • 2 具体操作
      • 2.1 初始化并启动 InfluxDB 容器
        • 2.2 webui 配置 InfluxDB
          • 2.3 设备上报数据
          • 3 结果
            • device_frmpayload_data
              • device_uplink
              • END
              相关产品与服务
              容器服务
              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档