- Created by Dmitry Matytsin, last updated on Nov 28, 2024 2 minute read
You are viewing an old version of this page. View the current version.
Compare with Current View Page History
« Previous Version 2 Next »
Описанный метод позволяет расширить количество частотных каналов LoRaWAN при использовании дополнительных базовых станций (БС) на той же территории.
По умолчанию chirpstack сконфигурирован для работы только с двумя каналами в частотном плане RU864. Расширение каналов для одной БС описано здесь.
Одна БС работает с 7 каналами = 2 основных + 5 дополнительных. При добавлении второй БС на ту же территорию можно расширить частотный план на 5 дополнительных каналов, а 2 основных останутся стандартными.
То есть две БС работают в 2 + 5 + 5 = 12 частотных каналах.
Нужно добавить новый частотный регион в Chirpstack, назовем его RU865.
- Делаем копию файла configuration/chirpstack/region_ru864.toml → region_ru865.toml
- Редактируем содержимое region_ru865.toml - два дефолтных канала оставляем неизменными, оставшиеся 5 каналов модифицируем в соответствии с новыми частотами. Так же меняем id региона:Expand source
[[regions]] # ID is an user-defined identifier for this region. id="ru865" # Description is a short description for this region. description="RU864 (non standard channels)" # Common-name refers to the common-name of this region as defined by # the LoRa Alliance. common_name="RU864" # 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] # Topic prefix. # # The topic prefix can be used to define the region of the gateway. # Note, there is no need to add a trailing '/' to the prefix. The trailing # '/' is automatically added to the prefix if it is configured. topic_prefix="ru865" # 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="" # Keep alive interval. # # This defines the maximum time that that should pass without communication # between the client and server. keep_alive_interval="30s" # 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=868900000 bandwidth=125000 modulation="LORA" spreading_factors=[7, 8, 9, 10, 11, 12] [[regions.gateway.channels]] frequency=869100000 bandwidth=125000 modulation="LORA" spreading_factors=[7, 8, 9, 10, 11, 12] # there are regular channels # [[regions.gateway.channels]] # frequency=864100000 # bandwidth=125000 # modulation="LORA" # spreading_factors=[7, 8, 9, 10, 11, 12] # # [[regions.gateway.channels]] # frequency=864300000 # bandwidth=125000 # modulation="LORA" # spreading_factors=[7, 8, 9, 10, 11, 12] # # [[regions.gateway.channels]] # frequency=864500000 # bandwidth=125000 # modulation="LORA" # spreading_factors=[7, 8, 9, 10, 11, 12] # # [[regions.gateway.channels]] # frequency=864700000 # bandwidth=125000 # modulation="LORA" # spreading_factors=[7, 8, 9, 10, 11, 12] # # [[regions.gateway.channels]] # frequency=864900000 # bandwidth=125000 # modulation="LORA" # spreading_factors=[7, 8, 9, 10, 11, 12] # there are non standard channels [[regions.gateway.channels]] frequency=865100000 bandwidth=125000 modulation="LORA" spreading_factors=[7, 8, 9, 10, 11, 12] [[regions.gateway.channels]] frequency=865300000 bandwidth=125000 modulation="LORA" spreading_factors=[7, 8, 9, 10, 11, 12] [[regions.gateway.channels]] frequency=865500000 bandwidth=125000 modulation="LORA" spreading_factors=[7, 8, 9, 10, 11, 12] [[regions.gateway.channels]] frequency=865700000 bandwidth=125000 modulation="LORA" spreading_factors=[7, 8, 9, 10, 11, 12] [[regions.gateway.channels]] frequency=865900000 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=869100000 # 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 # 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=3 # 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 [[regions.network.extra_channels]] frequency=865100000 min_dr=0 max_dr=5 [[regions.network.extra_channels]] frequency=865300000 min_dr=0 max_dr=5 [[regions.network.extra_channels]] frequency=865500000 min_dr=0 max_dr=5 [[regions.network.extra_channels]] frequency=865700000 min_dr=0 max_dr=5 [[regions.network.extra_channels]] frequency=865900000 min_dr=0 max_dr=5
3. Редактируем общий файл конфигурации регионов - добавляем новый ru865:
# 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",
"ru865",
"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
4. Редактируем файл docker-compose.yml - добавляем новый экземпляр моста chirpstack-gateway-bridge-ru865 с новым внешним портом 1701:
chirpstack-gateway-bridge:
image: chirpstack/chirpstack-gateway-bridge:4
restart: unless-stopped
ports:
- 1700:1700/udp
volumes:
- ./configuration/chirpstack-gateway-bridge:/etc/chirpstack-gateway-bridge
environment:
- INTEGRATION__MQTT__EVENT_TOPIC_TEMPLATE=ru864/gateway/{{ .GatewayID }}/event/{{ .EventType }}
- INTEGRATION__MQTT__STATE_TOPIC_TEMPLATE=ru864/gateway/{{ .GatewayID }}/state/{{ .StateType }}
- INTEGRATION__MQTT__COMMAND_TOPIC_TEMPLATE=ru864/gateway/{{ .GatewayID }}/command/#
depends_on:
- mosquitto
logging:
driver: json-file
options:
max-size: 100m
max-file: "5"
chirpstack-gateway-bridge-ru865:
image: chirpstack/chirpstack-gateway-bridge:4
restart: unless-stopped
ports:
- 1701:1700/udp
volumes:
- ./configuration/chirpstack-gateway-bridge:/etc/chirpstack-gateway-bridge
environment:
- INTEGRATION__MQTT__EVENT_TOPIC_TEMPLATE=ru865/gateway/{{ .GatewayID }}/event/{{ .EventType }}
- INTEGRATION__MQTT__STATE_TOPIC_TEMPLATE=ru865/gateway/{{ .GatewayID }}/state/{{ .StateType }}
- INTEGRATION__MQTT__COMMAND_TOPIC_TEMPLATE=ru865/gateway/{{ .GatewayID }}/command/#
depends_on:
- mosquitto
logging:
driver: json-file
options:
max-size: 100m
max-file: "5"
Настройка второй БС:
- No labels