ChirpStack集成influxdb

influxdb备忘

influxdb的两个http端口:8083和8086

  • port 8083:管理页面端口,访问localhost:8083可以进入你本机的influxdb管理页面;
  • port 8086:http连接influxdb client端口,一般使用该端口往本机的influxdb读写数据。

在1.3以后,8083端口被弃用,admin模块也失效,但是可以使用 Chronograf 专用的开源web应用,方便的可视化监控数据,与grafana等可视化工具功能相同。

名词解释

  • database:数据库;
  • measurement:数据库中的表;
  • points:表里面的一行数据。

influxDB中独有的一些概念
Point由时间戳(time)、数据(field)和标签(tags)组成。

  • time:每条数据记录的时间,也是数据库自动生成的主索引;
  • fields:各种记录的值;
  • tags:各种有索引的属性。

docker创建

1.3后无admin界面,官方推荐使用chronograf ui管理

docker

1
2
3
4
5
$ docker run -p 8086:8086 -p 8083:8083 \
-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

docker-compose

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
version: "3.3"

services:
influxdb:
image: "influxdb"
container_name: "influxdb"
environment:
- TZ=Asia/Shanghai
- INFLUXDB_DB=testDb
- INFLUXDB_ADMIN_USER=admin
- INFLUXDB_ADMIN_PASSWORD=admin
- INFLUXDB_HTTP_AUTH_ENABLED=true
- INFLUXDB_ADMIN_ENABLED=true
- INFLUXDB_USER=bulolo
- INFLUXDB_USER_PASSWORD=hjyhjy0927
ports:
- "8086:8086"
volumes:
- "./data/influxdb:/var/lib/influxdb"

chronograf:
image: chronograf:latest
ports:
- '8888:8888'
volumes:
- ./data/chronograf:/var/lib/chronograf
depends_on:
- influxdb
environment:
- INFLUXDB_URL=http://influxdb:8086

简单命令示例

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
influx -username 'admin' -password 'admin'  登录
precision rfc3339 --把时间戳转化为方便阅读的时间格式
SHOW USERS --显示用户
CREATE USER "username" WITH PASSWORD 'password' WITH ALL PRIVILEGES --创建管理员权限的用户
DROP USER "username" --删除用户
CREATE DATABASE mydb --创建数据库
SHOW DATABASES --展示所有数据库
SHOW RETENTION POLICIES ON mydb --查看保留策略
USE mydb --使用数据库

DROP DATABASE mydb --删除数据库
SHOW MEASUREMENTS --查询当前数据库中含有的表
SHOW CONTINUOUS QUERIES --查看连续执行命令
SHOW FIELD KEYS FROM mytable --查看当前数据库下的mytable表的字段
SHOW SERIES FROM mytable --查看key数据
SHOW TAG KEYS FROM mytable --查看key中tag key值
SELECT * FROM mytable --查询当前数据库下mytable表的记录
INSERT cpu,host=serverA,region=us_west value=0.64 --在cpu表中插入相关的数据
SELECT * FROM cpu ORDER BY DESC LIMIT 3 --查询cpu表下最近的三条数据
DROP MEASUREMENT mytable --删除表
precision rfc3339 --把时间戳转化为方便阅读的时间格式


授权语法

创建用户:CREATE USER <username> WITH PASSWORD ‘<password>‘
授权权限:GRANT [READ,WRITE,ALL] ON <database_name> TO <username>
创建并授权:CREATE USER <username> WITH PASSWORD ‘<password>‘ WITH ALL PRIVILEGES
取消授权:REVOKE ALL PRIVILEGES FROM <username>
修改密码:SET PASSWORD FOR <username> = ‘<password>‘
删除用户:DROP USER <username>

集成到ChirpStack

到Applications-某个应用-INTEGRATIONS,增加InfluxDB
s5nzE3
这里有个坑,记得将influxdb的docker的网络加入到ChirpStack,并且以[http://]+[influxDB容器名称]:8086/write 来填写API endpoint.
例如:

1
http://influxdb:8086/write

indexfuxDB数据说明

所有 measurements 名称都是将 object 的几个元素用下划线来连接下来。其中的 Payload 数据是以 device_frmpayload_data 做前缀,同时要求 Payload 存入 InfluxDB 之前需要保证为 JSON 格式, 键为:object。也就是要开启 ChirpStack 编解码函数功能

Payload 示例:

1
2
3
4
5
6
7
8
9
10
11
12
{
"object": {
"DeviceType": "4A",
"Mulitplier1": "00",
"ReportType": "02",
"Version": "01",
"a_current": 257,
"b_current": 0,
"battery": 36,
"c_current": 0
}
}

其实也就是编解码函数解析出来的object字段。

例如:DeviceType最终 measurements 名称将为device_frmpayload_data_DeviceType

sr6WEE

每个 measurements 都有如下的 tag:

1
2
3
4
application_name
device_name
dev_eui
f_port (LoRaWAN port used for uplink)
Ium28Z

ChirpStack 还支持几类数据的记录:
Device uplink meta-data,为了监控扩频因子、信道等数据,每个上行数据都会记录到名为 device_uplink 的 measurement。 其中的 value 固定为 1。