Meeting Lora



It started accidentally: I took a course on Connected embedded systems architecture at CMU - something that I, having experience mostly with web and high-level systems, have feared. Next thing I know is I’m doing a research project on Lora - long range wide area network, a standard gainining popularity in IoT. While I’m not allowed to tell much about our project itself, I might try to explain the technology from a perspective of IoT application developer.

There is a great introductory article - LoRaWAN simply explained - that gives a general understanding of lora and how it’s different from “regular” networks like LTE. I’m not going to repeat it all, but here’s the list of features and peculiarities of Lora that I find important:

There are several open-source network servers that facilitate communication with lora and provide API for node management and gathering data. I’m working with loraserver - which actually consists of 3 components (one is an actual network server for handling data transmission to and from gateways and nodes, another enhances gateway capabilities for more simple and transparent data transmission, and the last one provides higher-level API for node management and access control).

As I mostly work with gathering data from lora network, I communicate with lora application server API a lot and had been exploring its implementation quite deeply. This lora server is written in Go - which I think is a great choice for the task. It is a pleasure to see a well-implemented project that follows languages’ best practices and utilizes its power fully. Naturally, for our project that I’m building on top of lora-server I have also chosen Go - and this is where my existing experience with this language and with web came handy. In general, what I’m doing is moving data between systems: from message queue to database, from big Internet to small IoT device, from incoming HTTP API requests to lora-server. Go feels perfect for gluing them all together, and building a stable long-living service.

From a practical side, Lora is just one of several protocols that are competing for title of a standard IoT protocol. There are others, like zigbee - I’m not familiar with them yet. I know there are certain tradeoffs in every approach and protocol; Lora is not ideal, and there are numerous questions about how it may scale, especially taking in account that ALOHA principle does not allow network to grow without too much interference. There probably will be some improvements and more competition among IoT protocols, and it’s not clear who would win; but for now Lora looks like a major competitor.

I learned a lot during working with lora - and will be learning more, extending my relatively narrow background of a web-developer. Moving down through the OSI stack I’m getting a better understanding of how the Internet works, and, in general, how systems are organized from separate and what it seems primitive particles. I am glad I had a chance to work with it, and although I felt uncertain first, now I believe that changing the focus in software engineering from one field to another makes me a better developer.