Conduit mLinux: LoRa Communication
Prerequisites
- Set up Conduit mLinux and mDot for use with LoRa. Refer to Getting Started with LoRa Conduit mLinux (LoRa Configuration) .
Receive Packets on the Conduit
- Use MQTT to show all received LoRa messages on the console:
$ mosquitto_sub -t lora/+/up
OR
- Use UDP and netcat to show all received LoRa messages on the console:
$ nc --udp --listen --local-port 1784
If UDP doesn’t work, confirm udp[“appPortUp”] is 1784 by looking at the config that’s printed in/var/log/lora-network-server.conf
when the server starts.
Transmit Packets from the Conduit
Queue downstream packets on the Conduit by publishing the packets to the mosquitto or UDP channel for a specific mDot like this:
$ mosquitto_pub -t lora/00:80:00:00:00:00:6a:1a/down -m '{ "data":"aGVsbG8gd29ybGQ=" }'
or
$ nc --udp localhost 1786 <ENTER> lora/00:80:00:00:00:00:6a:1a/down {"data":"aGVsbG8gd29ybGQ="} <ENTER>
- The packet must be in JSON format and the data must be Base64 encoded
- To transmit one packet back to the mDot, the Conduit must receive one packet from the mDot.
Because Conduit and mDots are currently designed for the LoRa Class A specification, the Conduit can only send a packet to an mDot during one of the two receive windows the mDot opens after transmitting a packet to the Conduit.
Downstream Packet Options
- Require acknowledgement from mDot
{ "data":"aGVsbG8gd29ybGQ=", "ack": true }
- Send data on a specific port to mDot, if not specified port 1 will be used. (this is FPort in the LoRaWAN protocol)
{ "data":"aGVsbG8gd29ybGQ=", "port": 6 }
- Send mac commands on to mDot in node.js
// Send a new channel to mDot // NewChannelReq // Channel Index - 1 byte // Frequency - 3 bytes // Datarate Range - 1 byte // Max :4 - DR 0-7 // Min :4 - DR 0-7 // Frequency converted to HEX and reversed for network byte order // 869100000 / 100 --> 0x849D38 --> 0x389D84 // Example: add channel 4 869100000 DR0 - DR5 // ID | Index | Frequency | Range Base64 // 07 04 389D84 50 ---> BwQ4nYRQ var cmd = new Buffer([ 0x07, 0x09, 0xf8, 0x7d, 0x84, 0x77 ]).toString("base64"); var packet = JSON.stringify({ "data": cmd, "port": 0 }); var topic = "lora/" + eui + "/down" client.publish(topic, packet);
- Generate mac commands with nodejs on command line
test ADR command 0341ff0101 CMD DR PWR MASK CTRL 03 4 1 ff01 01
$ node > new Buffer("0341ff0101", "hex").toString("base64") 'A0H/AQE=' <CTRL>D $ nc --udp localhost 1786 <ENTER> lora/00:80:00:00:00:00:6a:1a/down {"port": 0, "data":"A0H/AQE="} <ENTER>
Sample Node.js App
- Download a sample Node.js app that demonstrates how to receive and send LoRa packets.
- Copy the tarball to the Conduit:
scp Downloads/lora-sample-app.tar.gz root@192.168.2.1
- ssh into the Conduit
- Unpack the tarball:
tar -xzf lora-sample-app.tar.gz
- Run the app:
node lora-sample-app.js
(it’ll take a little time to start) - To echo received packets back to the mDot, uncomment this line at the end of the file:
// uncomment to send the same message back to the dot // send_to_node(eui, json.data)
Using the sample app on the mDot: