What is a downlink, why would you want one, and how can you use ’em? With Helium being a permissionless network, we’re going to have a ton of people who are not LoRa wizards trying to use a LoRaWAN, including downlinks. I thought I’d write up a few articles on how to solve some of the frustrating obstacles you might find as you continue your Helium journey. This should help the average user get a hold of one lever in this high technology world called “the downlink”. We’ll start off with some background, explain a little about how it works and give some examples of how you might use it.
LoRaWAN is not something the average person is familiar with, and almost all manuals available are written for people who already understand what’s going on. That’s fantastic if you got a EE degree and then a Masters in wireless communication. It’s less useful if you’re a plumber who wants to level up their game and is curious about technology (i.e. an excellent candidate to use the Helium network).
Let’s start with a few sensors from Browan, a company that’s been in the LoRaWAN business since 2016, and the wireless business since 2002. Browan was kind enough to send me samples so I could share them with you.
Browan famously makes the Object Locator Tabs, which were some of the first devices ever on Helium, and make up many of the devices BFGNeil uses over at Trackpac. While most of us know Tabs as trackers, the Tab form factor (the little hexagonal shape) is used to house a number of sensors, 3 of which I’ll talk about here. Browan also makes the MerryIoT line, which produced a Helium Hotspot for a while and continues to sell LoRaWAN sensors.
Here are a few examples of different Tabs. You can find all of ’em over on Browan’s website.
- Tab TBWL100 — Water Leak Sensor
- Tab TBHV110 — Healthy Home (IAQ) Sensor
- Tab TBMS100 — Motion Sensor
Onboarding these sensors will give you a good idea of the potential and the limitations that they come with. The potential is the bigger of the two; by combining these you can figure out an awful lot about a space; from whether the cat came in (motion sensor in a cat tunnel) knocked over the water bowl and then left, all the way out to determining whether or not you should open the windows when you’re welding in your garage workshop.
I’ll leave the imagination part up to you and dig into some of the practicalities you might run up against if you’re still new to the whole LoRaWAN & Helium thing.
We’ll start at the basic level: Every sensor has 3 “keys” to it: The DevEUI, the AppEUI, and the AppKey. There are others, but as a basic Helium user, those are the three you need.
In many sensors you can change those keys to suit you. That might be important if you’re security minded, or if you have an internal identification scheme for the sensors in your business.
With Browan Tabs, you don’t have to worry about changing keys. You can’t reprogram the DevEUI, AppEUI, or AppKey. It’s simple: What they ship with is what you’ve got. You’ll either receive the key-set in an email, or they may be printed on a slip of paper or sticker in the box. Don’t lose ’em, as you won’t have an easy way to retrieve them. I know of one case where the keys for over 300 Tabs were lost and they got thrown out. Don’t let that be you!
Now, every device on a LoRaWAN has a “decoder”, also called a “codec”. This is a set of instructions that deciphers the data the sensor sends out (in an uplink) and turns it into something we can read and use, like a temperature or air quality reading. Decoders are vital to actually using the network, but they’re not always easy to find or to write for a specific device.
The Tabs all share one decoder, which is kind of cool. This means that in Chirpstack (which you can try here), you just set up a Device Profile and then create multiple Applications for it. In the Helium Console, you’d just set up one Function, then run all the Devices through that Function.
Ok, so that’s all the basic stuff. What happens if you want to change something on the device? There isn’t a way to connect a programming cable to Tabs, so you have to do it wirelessly, through something called a downlink.
A downlink is a command you send over the air once the sensor is activated and has joined the network. A downlink is received by the sensor AFTER the sensor uplinks. If your uplink interval (the interval at which your sensor sends data) is only once a day, you’ll only have one shot per day to send back a downlink.
A downlink might tell the sensor to send out packets on a different interval (every 5 minutes vs every hour), or it might tell the sensor when to actually report something. For example on the Indoor Air Quality sensor, you might only want to pay attention to temperature changes of over 5 degrees; you don’t need to know if the room went from 72F to 73F.
Downlinks are tricky for new users. Conceptually easy, they are finicky in practice. If you don’t get every detail correct, they don’t work. Let’s go through a few examples of common pitfalls that you can avoid.
Let’s start by checking out the Browan manual for the IAQ Sensor, you can find it here. On page 14, you’ll see the the Appendix for Configuration of Downlink Commands.
The first thing to look for is what port to send the downlink on. In this case, it’s 204.
Next, figure out what parameter you want to change. If you want to change multiple parameters and see what happens after each change, consider changing your uplink intervals to be frequent so you have multiple fast options for sending back downlinks, then setting the uplink interval back to whatever you’ll use long term.
So, how do we write an downlink and then send it? Every device is slightly different, and reading the manual helps. In general, you’ll have to do some translation between what you want to say (Hey, only tell me if the temp changes 10 degrees) and what you send (0x10 in the case of a Browan IAQ tab). Usually you can find example payloads that’ll guide you, like this:
I’ve found that most of the time, the examples seem simple but can be really confusing. Are you supposed to send 01 02
or 0x02
? Or something else?
Usually, the engineer who wrote the firmware on the device has done some little tweak that totally makes sense to her, but can catch ya out if you’re not paying attention. In the example image above, note that the “Unit” of time is 5 minutes. They also don’t refer to a “uplink interval”, they call it a “Keep alive value”.
Finally, you may notice that they use a format called hexadecimal, which you’ll need to translate to. In the IAQ index delta example above, 50 is the number you as a human would read, but you’ll need to send 32
. You can convert Decimal to Hexadecimal here.
The easiest way to get the right command is to use Browan’s Downlink Translator, which I’ve made available in a Google sheet you can view and copy by hitting the button below.
Here’s what it looks like; use the tabs on the bottom to find the sensor you’re using, then choose the Config value you want and then copy/paste the Downlink Command Payload. You can choose to configure all of ’em at once as well (as you can see in the screenshot below.)
Oh, and one more thing. There’s a trick to popping off the shell so you can replace the battery; here’s how to do it:
Leave a Reply