author:廖宝众

createTime:2022-05-27

updateTime:2022-06-02

2022-06-02:培训结束

# 罗万核心网实现架构、演示与实践

# LoRaWAN 一般架构

image-commen-struct

由图所示,LoRaWAN网络的系统由4部分组成,分别是终端节点、网关、网络服务器、应用服务器。其中终端节点也叫终端设备、传感器或者节点;网关也可以叫集中器或基站。由于LoRaWAN应用于物联网中,所以服务和连接的对象是终端节点,对应于移动通信网络种的用于。LoRaWAN网络种的网关对应于移动通信网络种的基站;LoRaWAN网络种的网络服务器对应于移动通信网络种的移动交换中心或移动台辅助切换;而LoRaWAN网络中的网关与网络服务器之间的连接方式采用3G/4G等移动通信网络或以太网网线的连接方式,对应于移动网络中的公众通信。根据应用和服务不同,LoRaWAN网络系统需要应用服务器的支持,它是LoRaWAN系统组成的必要部分,而移动通信网络种并非必要组成项。这是因为LoRaWAN的节点一定是为了满足某种业务而存在,几乎不存在没有服务业务而挂在网上的情况。这个情况与移动通信网络不同,移动通信服务的目的是让用户一直连接在网上,对于运行什么业务并不关心。这也是物联网的网络与移动通信网络系统的重要差别之一。

在LoRaWAN网络中,终端节点通过LoRa无线通信与网关连接,网关通过现有的优先/无线网络与网络服务器连接,网络服务器再通过以太网与应用服务器连接。一次通信过程可以是终端节点发起或者由应用服务器发起,网关和网络服务器只是实现透传和网络管理的工作,与业务没有直接关系。LoRaWAN网关只是不断接收节点发来的数据并透传给网络服务器,而网络服务器会整理数据发往应用服务器;应用服务器收到节点的业务数据后,响应应答指令发往网络服务器,网络服务器管理网关下发命令到达原业务节点。

# 罗万核心网实现架构

在我们的实现中,核心网担任上图中的网络服务器的功能,以及部分应用服务器的功能。
核心网的一部分服务对接网关和管理网关,一部分服务实现LoRaWAN协议,一部分服务对接实际应用。
在底层,我们使用mysql数据库存储节点的静态信息,比如节点号、初始密钥、偏好配置等;使用redis保存节点一些实时会话信息;使用kafka作为各服务的高速通信总线。

image-lowan-struct

# 部署流程

  1. 基础服务部署。如mysql、kafka、zookeeper、redis。推荐使用docker一站式部署。脚本如下:
  version: "3"
  
  services:
    zookeeper:
      image: zookeeper:3.4
      hostname: zk
      ports:
        - 2181:2181
      environment:
        ZOO_MY_ID: 1
        ZOO_PORT: 2181
  #      ZOO_SERVERS: server.1=zookeeper:2888:3888
      volumes:
        - zkdata:/data
        - zklog:/datalog
  
    kafka:
      image: confluentinc/cp-kafka
      hostname: kafka
      ports:
        - 9092:9092
      environment:
        KAFKA_ADVERTISED_LISTENERS: LISTENER_DOCKER_INTERNAL://kafka:19092,LISTENER_DOCKER_EXTERNAL://${DOCKER_HOST_IP:-192.168.20.103}:9092
        KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: LISTENER_DOCKER_INTERNAL:PLAINTEXT,LISTENER_DOCKER_EXTERNAL:PLAINTEXT
        KAFKA_INTER_BROKER_LISTENER_NAME: LISTENER_DOCKER_INTERNAL
        KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
        KAFKA_ZOOKEEPER_CONNECT_TIMEOUT_MS: 600000
        KAFKA_BROKER_ID: 1
        KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
        KAFKA_LOG_RETENTION_MS: 600000
        KAFKA_LOG_RETENTION_CHECK_INTERVAL_MS: 600000
        KAFKA_DELETE_TOPIC_ENABLE: 'true'
      volumes:
        - kafkadata:/var/lib/kafka/data
      depends_on:
        - zookeeper
  
    mysql:
      hostname: mysql
      restart: always
      image: mysql:8.0
      ports:
        - 13306:3306
      command: --default-authentication-plugin=mysql_native_password
      environment:
        MYSQL_ROOT_PASSWORD: toor
      volumes:
  #      - ./scripts/mysql:/docker-entrypoint-initdb.d
        - mysqldata:/var/lib/mysql
  
  
    redis:
      hostname: redis
      image: redis:5-alpine
      ports:
        - 16379:6379
      volumes:
        - redisdata:/data
    emqx:
      hostname: mqtt
      image: emqx/emqx
      ports:
        - 1883:1883
        - 8083:8083
  
  volumes:
    kafkadata:
    zkdata:
    zklog:
    mysqldata:
    redisdata:
  1. 应用服务器和网络服务器部署。
    ./ns -c ns.toml
  2. 网关转发服务部署。
    ./bridge -c bridge.toml
  3. 网关部署。 网关上电后,可以通过wifi连接网关热点Lowan-${网关ID}进入管理后台192.168.128.1:9000,配置服务地址和通道中心频点等。
    image-lowan-gateway
  4. 节点部署。
    节点部署后等待入网即可。

# 部署注意事项

  1. 网络服务器部署时,需要注意配置各种网络参数,会话相关的参数。
  2. 网关部署时,需要注意网关的8个上行信道频点配置。
  3. 节点部署时,需要注意触发节点入网,因为有些节点并非重新上电后就立刻重新请求入网。
  4. 下行消息前,按照一般要求,需要等待节点发送一个上行消息后,才能将下行消息发送给节点。

# 演示

(实际操作)