使用LoRa在Edge端组网并接入IoT云平台

扫盲LoRa

LoRa是个什么鬼?

物联网应用中的无线技术有多种,可组成局域网或广域网。组成局域网的无线技术主要有2.4GHz的WiFi,蓝牙、Zigbee等,组成广域网的无线技术主要有2G/3G/4G等。这些无线技术,优缺点非常明显,如下图所示:

在低功耗广域网(Low Power Wide Area Network, LPWAN)产生之前,似乎远距离和低功耗两者之间只能二选一。当采用LPWAN技术之后,设计人员可做到两者都兼顾,最大程度地实现更长距离通信与更低功耗,同时还可节省额外的中继器成本。

LoRa是LPWAN通信技术中的一种,是美国Semtech公司采用和推广的一种基于扩频技术的超远距离无线传输方案。这一方案改变了以往关于传输距离与功耗的折衷考虑方式,为用户提供一种简单的能实现远距离、长电池寿命、大容量的系统,进而扩展传感网络。目前,LoRa 主要在全球免费频段运行,包括433、868、915 MHz等。

LoRa技术具有远距离、低功耗(电池寿命长)、多节点、低成本的特性。LoRa网络主要由终端(可内置LoRa模块)、网关、Server和云四部分组成。应用数据可双向传输。如下所示:

可以看到一个LoRaWAN网络架构中包含了终端、基站、NS(网络服务器)、应用服务器这四个部分。基站和终端之间采用星型网络拓扑,由于LoRa的长距离特性,它们之间得以使用单跳传输。在终端部分官方列了6个典型应用,有个细节,你会发现终端节点可以同时发给多个基站。基站则对NS和终端之间的LoRaWAN协议数据做转发处理,将LoRaWAN数据分别承载在了LoRa射频传输和Tcp/IP上。

协议栈

下面这张图虽然有点略偏技术,但还是比较清晰地介绍了LoRaWAN在协议和网络架构的设计层次。此外,协议也考虑了节点功耗,网络容量,QoS,安全性和网络应用多样性等因素。

背后的利益

和LoRa相爱相杀的 NB-IoT 出自于全球标准化组织 3GPP ,由大名鼎鼎的ETSI(欧洲电信标准化委员会)、日本ARIB(无线行业企业协会)和TTC(电信技术委员会)、CCSA(中国通信标准化协会)、韩国TTA(电信技术协会)和北美ATIS(世界无线通讯解决方案联盟)等等组成。

相比于 3GPP 的根正苗红,LoRaWAN 背后的LoRa联盟则势力弱了一些。从协议的封面可以看到作者是来自于3个董事会成员公司: Semtech, IBM,Actility。

我们知道每一项技术的推广,都伴随着利益的推动。虽然组织和联盟都是非盈利性组织,但是旗下的企业成员都不是一心来做公益的。从企业角度来讲,花5W去投入做的事情,注定是抱着撬动至少50W美金的预期去做的。

LoRa联盟于2015年上半年由思科(Cisco)、IBM和升特(Semtech)等多家厂商共同发起创立,截止目前(2017.04)有400+的成员,董事会成员中也有不少大企业,大家共同为瓜分未来低功耗广域网的蛋糕而抱团努力着。这是我做的一个表格,收集了现阶段愿意交纳5W美金会费的19个董事会成员,你可以看到这些企业的愿景。

行业生态

结合行业生态再来看下上面提到的网络架构,大家可以各自想想自己的位置。

LoRa协议概述

终端设备分类

LoRaWAN网络根据实际应用的不同,把终端设备划分成A/B/C三类:

  • Class A:双向通信终端设备。
    • 这一类的终端设备允许双向通信,每一个终端设备上行传输会伴随着两个下行接收窗口。终端设备的传输槽是基于其自身通信需求,其微调是基于一个随机的时间基准(ALOHA协议)。Class A所属的终端设备在应用时功耗最低,终端发送一个上行传输信号后,服务器能很迅速地进行下行通信,任何时候,服务器的下行通信都只能在上行通信之后。
    • 下行时机:必须等待终端上报数据后才能对其下发数据。
    • 应用场景:垃圾桶监测、烟雾报警器、气体监测等
  • Class B:具有预设接收槽的双向通信终端设备。
    • 这一类的终端设备会在预设时间中开放多余的接收窗口,为了达到这一目的,终端设备会同步从网关接收一个Beacon,通过Beacon将基站与模块的时间进行同步。这种方式能使服务器知晓终端设备正在接收数据。
    • 下行时机:在终端固定接收窗口即可对其下发数据,下发的延时有所提高。
    • 应用场景:阀控水气电表等
  • Class C:具有最大接收槽的双向通信终端设备。
    • 这一类的终端设备持续开放接收窗口,只在传输时关闭。Class C 的终端会比 Class A 和 Class B 更加耗电。
    • 下行时机:由于终端处于持续接收状态,可在任意时间对终端下发数据。
    • 应用场景:路灯控制等

终端节点的上下行传输

  • 对于Class A来说, 接收窗口RX1一般是在上行后1秒开始,接收窗口RX2是在上行后2秒开始。
  • Class B 的时隙则复杂一些,它有一个同步时隙beacon,还有一个固定周期的接收窗口ping时隙。
  • Class C 和 A 基本是相同的,只是在 Class A 休眠的期间,它都打开了接收窗口RX2。

终端节点的加网

在正式收发数据之前,终端都必须先加网。

有两种加网方式:Over-the-Air Activation(空中激活方式 OTAA),Activation by Personalization(独立激活方式 ABP)。

商用的LoRaWAN网络一般都是走OTAA激活流程,这样安全性才得以保证。此种方式需要准备 DevEUI,AppEUI,AppKey 这三个参数。

  • DevEUI 是一个类似IEEE EUI64的全球唯一ID,标识唯一的终端设备。相当于是设备的MAC地址。
  • AppEUI 是一个类似IEEE EUI64的全球唯一ID,标识唯一的应用提供者。比如各家的垃圾桶监测应用、烟雾报警器应用等等,都具有自己的唯一ID。
  • AppKey 是由应用程序拥有者分配给终端。

终端在发起加网join流程后,发出加网命令,NS(网络服务器)确认无误后会给终端做加网回复,分配网络地址 DevAddr(32位ID),双方利用加网回复中的相关信息以及AppKey,产生会话密钥NwkSKey和AppSKey,用来对数据进行加密和校验。

如果是采用第二种加网方式,即ABP激活,则比较简单粗暴,直接配置 DevAddr,NwkSKey,AppSKey 这三个LoRaWAN最终通讯的参数,不再需要join流程。在这种情况下,这个设备是可以直接发应用数据的。

数据收发

加网之后,应用数据就被加密处理了。 LoRaWAN规定数据帧类型有 Confirmed 或者 Unconfirmed 两种,即 需要应答 和不需要应答类型。厂商可以根据应用需要选择合适的类型。

另外,从介绍中可以看到,LoRaWAN设计之初的一大考虑就是要支持应用多样性。除了利用 AppEUI 来划分应用外,在传输时也可以利用 FPort 应用端口来对数据分别处理。FPort 的取值范围是(1~223),由应用层来指定。

空中唤醒技术

无线网络应用中,通常要求节点尽可能休眠,最大限度降低功耗,但又希望节点能尽可能及时地收发无线数据,这似乎是个不可调和的矛盾。

但是有个神奇的功能,空中唤醒。节点即使处于休眠,当需要节点工作时可以直接通过无线手段唤醒该节点。

LoRa组网

千言万语汇成一句话,oh,一幅画。

开源实现

A LoRa Server architecture constists out of multiple components:

LoRa数据包转发

A LoRa packet forwarder is a program running on the host of a LoRa gateway that forwards RF packets receive by the concentrator to a server through a IP/UDP link, and emits RF packets that are sent by the server.

Uplink: radio packets received by the gateway, with metadata added by the gateway, forwarded to the server. Might also include gateway status.

Downlink: packets generated by the server, with additional metadata, to be transmitted by the gateway on the radio channel. Might also include configuration data for the gateway.

LoRa网关桥

LoRa Gateway Bridge is a service which abstracts the packet_forwarder UDP protocol running on most LoRa gateways into JSON over MQTT. It enables you to use MQTT for receiving data from and sending data to your gateways.