From UNamur InfoSec
Jump to navigation Jump to search

Link title

LoPy Nano-gateway and private lora-server installation

In this page we are going to:

1.Install open source private LoRa server (by Orne Brocaar)

2.Setup LoPy as single channel nano gateway

3.Send data from LoPy node

1.Install private LoRa server:

We use LoRa Server Setup Ansible playbook to install all the LoRa server component:

For testing use vagrant to install the server to virtual machine in our local pc (We will update the guide to deploy later):

 git clone https://github.com/brocaar/loraserver-setup.git
  • Go to loraserver-setup folder (In terminal or CMD)
 cd loraserver-setup
  • Run vagrant up
 vagrant up
  • The virtual machine will boot and install all the component (This can take a while)
  • Note: we can access the server web interface at https://localhost:8080/ (As a self-signed certificate is used, your browser will prompt that the certificate can't be trusted. This is ok for testing)
  • We can use our machine IP address and port 1700 for our gateway to forward the package (We do this later in setup LoPy as Nano Gateway below)

2.Setup LoPy as a Single channel nano gateway: (Reference Pycom Forum Github Code

  • Update LoPy firmware to 1.6.7.b1 Firmware Upgrade
  • Download main.py, config.py, nanogateway.py from Github:
  • Edit the config.py file to setup: Gateway ID, Server IP, Server Port, Wifi Access Point for LoPy to connect to the network.
 GATEWAY_ID = '11aa334455bb7788'
 SERVER = 'ip.address.here'
 PORT = 1700
 WIFI_SSID = 'my-wifi'
 WIFI_PASS = 'my-wifi-password'
    • Note: We can get gateway id by execute these code in LoPy (Referenece TTN):
 from network import LoRa
 import binascii
 lora = LoRa(mode=LoRa.LORAWAN)
  • Copy the code to the 'flash' folder of LoPy:
 Via FTP:
 Follow this reference to connect to LoPy via FTP pycom
  • Reset LoPy

We should be able to see the message from gateway from MQTT server with this topic (Reference loraserver):

mosquitto_sub -t "gateway/#" -v

3.Send data from LoPy node:

  • Register node in server
    • To register node go to server IP address port 8080 (ex: https://localhost:8080)
    • Click create application:
      • Enter application name and description and click submit
    • Click create node:
      • Enter node name, description, device EUI and application EUI (Note: application EUI can be any hex number)
      • Check ABP node and Submit
    • Activate node:
      • Click on node name
      • Click "(RE)ACTIVATE NODE (ABP)"
      • Enter Device Address, Network Session Key, Application Session Key (click generate to generate device address, Network Session Key and Application Session Key can be any hex number)
      • Click submit
  • Send data from node (LoPy)
    • Download this code
    • Change dev_addr, nwk_swkey, app_swkey to match our node when we register our node in web server.
    • Rename the code to main.py and copy to "flash" folder of LoPy.
    • Reset the LoPy to run the code
  • Subscribe to node data from server:
 mosquitto_sub -t "application/1/#" -v


The above guide follow these two main tutorial

LoRa Server Setup Guide LoPy as Nano Gateway

  • Note:
1. After setup LoRa Server with LoRa Server Setup Guide we fail to find application ID to subscript to it MQTT topic to get data from node. 
   The application id can be seen in browser url when enter application page (Reference LoRa App Server MQTT.
 ex: mosquitto_sub -t "application/1/#" -v
     mosquitto_sub -t "application/2/#" -v
2. To use 250khz bandwidth: 
*In nanogateway.py file: we change every code with 125 to 250
*In config.py file: we change "SF7BW125" to "SF7BW250"
*In abp node file we change: 
  lora.add_channel(0, frequency=868100000, dr_min=0, dr_max=5) to lora.add_channel(0, frequency=868100000, dr_min=0, dr_max=6)
  lora.add_channel(1, frequency=868100000, dr_min=0, dr_max=5) to lora.add_channel(1, frequency=868100000, dr_min=0, dr_max=6)
  lora.add_channel(2, frequency=868100000, dr_min=0, dr_max=5) to lora.add_channel(2, frequency=868100000, dr_min=0, dr_max=6)
  s.setsockopt(socket.SOL_LORA, socket.SO_DR, 5) to s.setsockopt(socket.SOL_LORA, socket.SO_DR, 6)

LoPy Nano-gateway and private Lora-server experiments