赞
踩
ChirpStack 是一款开源的 LoRaWAN 网络服务器,可用于建立私人或公共 LoRaWAN 网。ChirpStack 为网关、设备和租户的管理提供了一个 web 界面,并与主要的云提供商、数据库和通常用于处理设备数据的服务进行了数据集成,主要的集成服务包括: MQTT 前向转发代理、HTTP 转发代理、influxDB入库服务等。ChirpStack 还提供了基于 gRPC 的 API,可用于集成或扩展 ChirpStacck 的各种功能。
ChirpStack 项目的架构图如下所示:
在架构图中,可以看到 LoRa Gateway 与服务端连接的方式有 2 种。一种是由 Packet Forwarder 直接与 ChirpStack Gateway Bridge 连接,另一种在 LoRa 网关内直接集成了 Packet Forwarder 和 ChirpStack Gateway Bridge 这两个组件,然后与 MQTT Broker 进行连接。
Chirpstack 可以以 Docker 方式部署,同时,也可以在 Debian/Ubuntu 服务器上单独部署。在 Debian/Ubuntu 服务器上单独部署,需要先安装依赖包,再进行 Chirpstack 的部署,实际操作中,我觉得比较麻烦,下面就一在 Docker 运行的方式进行部署说明。
在本教程中,使用友善之臂的 nanopi NEO3 作为核心板作为运行机器。硬件参数如下所示:
友善之臂官方提供的系统镜像有基于 openwrt 和 ubuntu core 定制过的系统。不过,根据我的个人爱好,Nanopi NEO3 我运行的是 Armbian 系统。
Chirpstack 官方提供了一个快速部署 Chirpstack 的 Github 仓库,利用 dockper compose 工具,对 Chirpstack 服务进行快速部署。
git clone https://github.com/chirpstack/chirpstack-docker.git
cd chirpstack-docker
docker-compose up -d
等待 docker 启动完成后,不改变系统路径,直接在命令行输入:
docker compose ls
命令行返回 compose 启动的情况:
NAME STATUS CONFIG FILES
chirpstack-docker running(6) /home/sage/chirpstack-docker/docker-compose.yml
然后,再查看 docker compose 启动的容器运行情况:
docker compose ps
运行结果如下所示:
使用 Web 浏览器访问本地的 Nanopi NEO3 的 8080 端口,就可以看见 Chirpstack 的服务登陆页。我的 Nanopi NEO3 地址是 192.168.10.125 所以,我用浏览器直接访问“192.168.10.125:8080”端口后,自动跳转到 Chirpstack 的登陆页。
登陆的用户名和密码默认是: admin/admin,登陆成功后,就可以看到 Chirpstack 的 dashboard 页面了。
在浏览器中访问 8090 端口,就可以进入 Chirpstack 的 Swagger 后端接口 API 文档。我这里访问的是 Nanopi NEO3 的局域网地址“192.168.10.125:8090”。
到此,Chirpstack 使用 Docker 的快速部署就完成了。
从 Github 获取 chirpstack-docker 工程后,可以查看工程的目录结构如下所示:
. ├── configuration │ ├── chirpstack │ │ ├── chirpstack.toml │ │ ├── region_cn470_0.toml │ │ ├── region_cn470_10.toml │ │ ├── region_cn470_11.toml | │ ├── ... │ │ ├── region_cn779.toml │ │ ├── region_eu433.toml │ │ ├── region_eu868.toml │ ├── chirpstack-gateway-bridge │ │ └── chirpstack-gateway-bridge.toml │ ├── mosquitto │ │ └── mosquitto.conf │ └── postgresql │ └── initdb │ ├── 001-init-chirpstack.sh │ └── 002-chirpstack_extensions.sh ├── docker-compose.yml ├── LICENSE ├── lorawan-devices ├── Makefile └── README.md
chirpstack.toml
是 chirpstack 的整体配置,region_xxxxx.toml 文件时针对不同地区的 LoRaWAN 参数的网络设置。mosquitto.conf
中进行配置即可。make import-lorawan-devices
指令将 LoRaWAN 的终端设备导入到 chirpstack 数据库中。chirpstack 在部署时,只需要将 configuration/chirpstack
目录下的 chirpstack.toml
和 region_xxxxx.toml
文件配置好,就可以了。其他的配置,在刚上手的时候,可以先不用管。
先看 chirpstack.toml
文件的配置示例:
# Logging. [logging] # Log level. # # Options are: trace, debug, info, warn error. level="info" # PostgreSQL configuration. [postgresql] # PostgreSQL DSN. # # Format example: postgres://<USERNAME>:<PASSWORD>@<HOSTNAME>/<DATABASE>?sslmode=<SSLMODE>. # # SSL mode options: # * disable - no SSL # * require - Always SSL (skip verification) # * verify-ca - Always SSL (verify that the certificate presented by the server was signed by a trusted CA) # * verify-full - Always SSL (verify that the certification presented by the server was signed by a trusted CA and the server host name matches the one in the certificate) dsn="postgres://chirpstack:chirpstack@$POSTGRESQL_HOST/chirpstack?sslmode=disable" # Max open connections. # # This sets the max. number of open connections that are allowed in the # PostgreSQL connection pool. max_open_connections=10 # Min idle connections. # # This sets the min. number of idle connections in the PostgreSQL connection # pool (0 = equal to max_open_connections). min_idle_connections=0 # Redis configuration. [redis] # Server address or addresses. # # Set multiple addresses when connecting to a cluster. servers=[ "redis://$REDIS_HOST/", ] # TLS enabled. tls_enabled=false # Redis Cluster. # # Set this to true when the provided URLs are pointing to a Redis Cluster # instance. cluster=false # Network related configuration. [network] # Network identifier (NetID, 3 bytes) encoded as HEX (e.g. 010203). net_id="000000" # Enabled regions. # # Multiple regions can be enabled simultaneously. Each region must match # the 'name' parameter of the region configuration in '[[regions]]'. enabled_regions=[ "as923", "as923_2", "as923_3", "as923_4", "au915_0", "cn470_10", "cn779", "eu433", "eu868", "in865", "ism2400", "kr920", "ru864", "us915_0", "us915_1", ] # API interface configuration. [api] # interface:port to bind the API interface to. bind="0.0.0.0:8080" # Secret. # # This secret is used for generating login and API tokens, make sure this # is never exposed. Changing this secret will invalidate all login and API # tokens. The following command can be used to generate a random secret: # openssl rand -base64 32 secret="you-must-replace-this" [integration] enabled=["mqtt"] [integration.mqtt] server="tcp://$MQTT_BROKER_HOST:1883/" json=true
chirpstack.toml
文件中的配置主要有以下几项:
# This file contains an example CN470 example (channels 0-7). [[regions]] # Name is an use-defined identifier for this region. name="cn470_0" # Common-name refers to the common-name of this region as defined by # the LoRa Alliance. common_name="CN470" # Gateway configuration. [regions.gateway] # Force gateways as private. # # If enabled, gateways can only be used by devices under the same tenant. force_gws_private=false # Gateway backend configuration. [regions.gateway.backend] # The enabled backend type. enabled="mqtt" # MQTT configuration. [regions.gateway.backend.mqtt] # Event topic template. event_topic="cn470_0/gateway/+/event/+" # Command topic template. command_topic="cn470_0/gateway/{{ gateway_id }}/command/{{ command }}" # MQTT server (e.g. scheme://host:port where scheme is tcp, ssl or ws) server="tcp://$MQTT_BROKER_HOST:1883" # Connect with the given username (optional) username="" # Connect with the given password (optional) password="" # Quality of service level # # 0: at most once # 1: at least once # 2: exactly once # # Note: an increase of this value will decrease the performance. # For more information: https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels qos=0 # Clean session # # Set the "clean session" flag in the connect message when this client # connects to an MQTT broker. By setting this flag you are indicating # that no messages saved by the broker for this client should be delivered. clean_session=false # Client ID # # Set the client id to be used by this client when connecting to the MQTT # broker. A client id must be no longer than 23 characters. If left blank, # a random id will be generated by ChirpStack. client_id="" # CA certificate file (optional) # # Use this when setting up a secure connection (when server uses ssl://...) # but the certificate used by the server is not trusted by any CA certificate # on the server (e.g. when self generated). ca_cert="" # TLS certificate file (optional) tls_cert="" # TLS key file (optional) tls_key="" # Gateway channel configuration. # # Note: this configuration is only used in case the gateway is using the # ChirpStack Concentratord daemon. In any other case, this configuration # is ignored. [[regions.gateway.channels]] frequency=470300000 bandwidth=125000 modulation="LORA" spreading_factors=[7, 8, 9, 10, 11, 12] [[regions.gateway.channels]] frequency=470500000 bandwidth=125000 modulation="LORA" spreading_factors=[7, 8, 9, 10, 11, 12] [[regions.gateway.channels]] frequency=470700000 bandwidth=125000 modulation="LORA" spreading_factors=[7, 8, 9, 10, 11, 12] [[regions.gateway.channels]] frequency=470900000 bandwidth=125000 modulation="LORA" spreading_factors=[7, 8, 9, 10, 11, 12] [[regions.gateway.channels]] frequency=471100000 bandwidth=125000 modulation="LORA" spreading_factors=[7, 8, 9, 10, 11, 12] [[regions.gateway.channels]] frequency=471300000 bandwidth=125000 modulation="LORA" spreading_factors=[7, 8, 9, 10, 11, 12] [[regions.gateway.channels]] frequency=471500000 bandwidth=125000 modulation="LORA" spreading_factors=[7, 8, 9, 10, 11, 12] [[regions.gateway.channels]] frequency=471700000 bandwidth=125000 modulation="LORA" spreading_factors=[7, 8, 9, 10, 11, 12] # Region specific network configuration. [regions.network] # Installation margin (dB) used by the ADR engine. # # A higher number means that the network-server will keep more margin, # resulting in a lower data-rate but decreasing the chance that the # device gets disconnected because it is unable to reach one of the # surrounded gateways. installation_margin=10 # RX window (Class-A). # # Set this to: # 0: RX1 / RX2 # 1: RX1 only # 2: RX2 only rx_window=0 # RX1 delay (1 - 15 seconds). rx1_delay=1 # RX1 data-rate offset rx1_dr_offset=0 # RX2 data-rate rx2_dr=0 # RX2 frequency (Hz) rx2_frequency=505300000 # Prefer RX2 on RX1 data-rate less than. # # Prefer RX2 over RX1 based on the RX1 data-rate. When the RX1 data-rate # is smaller than the configured value, then the Network Server will # first try to schedule the downlink for RX2, failing that (e.g. the gateway # has already a payload scheduled at the RX2 timing) it will try RX1. rx2_prefer_on_rx1_dr_lt=0 # Prefer RX2 on link budget. # # When the link-budget is better for RX2 than for RX1, the Network Server will first # try to schedule the downlink in RX2, failing that it will try RX1. rx2_prefer_on_link_budget=false # Downlink TX Power (dBm) # # When set to -1, the downlink TX Power from the configured band will # be used. # # Please consult the LoRaWAN Regional Parameters and local regulations # for valid and legal options. Note that the configured TX Power must be # supported by your gateway(s). downlink_tx_power=-1 # ADR is disabled. adr_disabled=false # Minimum data-rate. min_dr=0 # Maximum data-rate. max_dr=5 # Enabled uplink channels. # # Use this when ony a sub-set of the by default enabled channels are being # used. For example when only using the first 8 channels of the US band. # Note: when left blank / empty array, all channels will be enabled. enabled_uplink_channels=[0, 1, 2, 3, 4, 5, 6, 7] # Rejoin-request configuration (LoRaWAN 1.1) [regions.network.rejoin_request] # Request devices to periodically send rejoin-requests. enabled=false # The device must send a rejoin-request type 0 at least every 2^(max_count_n + 4) # uplink messages. Valid values are 0 to 15. max_count_n=0 # The device must send a rejoin-request type 0 at least every 2^(max_time_n + 10) # seconds. Valid values are 0 to 15. # # 0 = roughly 17 minutes # 15 = about 1 year max_time_n=0 # Class-B configuration. [regions.network.class_b] # Ping-slot data-rate. ping_slot_dr=0 # Ping-slot frequency (Hz) # # set this to 0 to use the default frequency plan for the configured region # (which could be frequency hopping). ping_slot_frequency=0
region_cn470_0.toml
文件中的配置主要有以下几项:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。