First steps with Helium IoT network

Helium is a crowdsourced-crypto-blockchain-Iot network working with LoRaWan. With all these trendy name, for sure they had the key elements to raise a large amount of money. That’s great for the development of this technology.

I’ve decided to write about this IoT network after an interesting talk given at the Zurich IoT meetup today (thank you CoVID-19 for making us the opportunity to reach such event, today online, bad things can get positive sometime).

Helium is a crowdsourced network. It means, like for TheThingsNetwork or Amazon Sidewalk, the infrastructure, at least the gateways part (antennas) are provided by anybody, basically you and me. That way the network deployment costs are really limited and the network have no boundaries.

Compared to TTN, Helium network is “crypto-blockchained” basically, the gateway owner are mining different challenges like registering some network change, proving the location of a gateway, cryptocurrency transactions… For this work, for maintaining the network architecture and relaying the messages, the gateway’s owner are earning HNT (Helium Network Tokens) ($2.24 each today).

Compared to TTN where you make it running for free, just because you are convinced about the sharing economy, Helium base its business model on a promise of getting some money back from your investment the gateways (+energy, communications…).

Helium is an IoT network, a LPWAN for being more precise. It relies on LoRaWan standard protocol & gateways. You need to add an Helium miner software on a backend system to make it running.

So they are looking to Uber-ize the telecom domain, at least this is what they are expecting.

How does it work ?

When a device message is relayed by Helium network, a forwarding cost is applied, corresponding to 1 Data Credit (DC) per 24 Bytes message. This is a flat price of $0.00001 per message. You can convert your HNT to create DC to get a credit of communication ; the conversion rate is managed by an “Oracle” using the cryptocurrency average market price. This action is burning HNT and reduce the HNT availability (basically it increases the HNT token value).

So, that way, your transactions on your own gateways should be free of charge. If you forward traffic from other people you win more token than you consume and you can use gateway of other people… if you consume more traffic than you provide you need to buy DCs.

DCs are burned on every transaction. Basically we can say: burning DCs creates HNT, even if it is not the only one way to do it.

You can also buy DCs from Helium Inc with your credit card. In this situation, Helium Inc is burning a part of his HNT stock to generate the DCs. Helium Inc & Investor receive 34% of the 5M max HNT minted every month. This is 1.7M HNT / per month they can burn to create DC for your communications.

There is a direct relation between the number of DC you can create and the HNT currency value on the market.

DCs you can generate = (HNT available qty * HNT price) / 0.00001

Imagine a demand for 1000 Billions DC per month (24TB of data) with a HNT creation of 5M per month (and no previous HNT available) we have:

HNT unit price = 1000*10^9 * 0.00001 / 5*10^6 = 2$

HNT price, today, is mostly speculation (as any cryptocurrency value currently) but we can imagine that DC scarcity in the future will make the HNT value growing. This is directly in relation with the traffic level on this network.

As a consequence, in my point of view, there is no warranty to get a profit from running gateways because today there is no link between HNT value and reality of the traffic. As in most of the blockchain, this is a problem in my point of view. Helium is the first blockchain I see where there is a search of a balanced situation between producer and consumers. That’s an interesting point. The current speculative price is eventually related to an expected future value when the traffic will grow requiring a high volume of HNT to be burn every month. This is a bet you make like on risky financial product.

Let’s be a bit more technical

Helium is composed of:

LoRaWAn gateways

Any standard one can be use, as soon as it has a Semtech packet forwarder (standard stuff). Nothing special needs to be installed on it, just a regular setting.

Helium proposes it’s own hardware, the Helium Hotspot. It also includes the miner component in it.

Currently, the only legit way to get rewarded with HNT is to own a Helium hotspot (450€). I don’t think this limitation is good in a blockchain mindset but it’s a good way to finance the Helium corp blockchain development activities. Sigfox have a similar business model on that point, even if here, it is a bit artificial, as there is no rocket science in that hotspot.

The other thing I don’t really like is the indoor approach: anyone who deployed a LoRaWan network know that indoor gateway coverage are limited to 300-500 meters so deploying a large network with such gateways is going to be complicated.

Miner process

This is a piece of software, running on raspberry PI or a VM in the Cloud. It is owning and running the blockchain. This process has been written in ERLANG, is opensource and distributed as a docker container.

You have currently 1 Miner process per gateway. A miner process requires about 400Mb of RAM so you can imagine running some of them on a single VM or Raspberry PI 4.

The Miner are all connected together in a peer-to-peer network as usual for a block chain. Every thing is distributed: if Helium company die, the network continue to run.

The miner receives the transmissions coming from the device through the LoRaWan gateway and route them to the right network server according to the routing rules registered in the blockchain. These rules are based on OUI. So we can see Helium block chain as a blockchain to manage the roaming between different LoRaWan networks. As a standard Network operator, you can work with Helium to exchange traffic and extend your own network transparently.

in a such case, the DCs are payed by the other network operator, transparently for the device owner. This is a really interesting feature, where different LoRaWAn operators could join their network and manage the traffic exchange and cost that way.

Miner stores and maintains a copy if the blockchain.

The block-chain

It contains no data coming from the devices communication so it size is reasonable. It basically manage the message routing and the gateway list. It validates the gateway location and that way the reality of the device traffic. It also manage the HNT transaction. I did not find details on all the blockchain transaction type. If anyone have a link to complete I will be happy.

Network servers

As I’ve indicated the system support multiple network server and the associated traffic routing.

Helium have it’s own network server, like TheThingsNetwork console. this backend helps you to manage and register devices. It allows you to route you device payload to your own applications. Nothing really specific here.

From the Helium console, you can buy DCs for your communication.

By creating an account you get 10.000 data credit (equivalent of $0.1) and 10.000 messages with 24bytes.

So you can start using Helium at no cost for giving it a try.

As you can see, the communication price on that network are less expensive than public network (but more than TTN as is is free of charge). There is no volume reduction price compared to public network, so lower your fleet size is, more interesting it is. If you compare with Sigfox price ( 140 messages a day, the price is about 15 times less for the unit price). The other big advantage is the ability to pay per message and to support use-case requiring a couple of messages per year or having a time limitation of a couple of days/weeks instead a full year usage. Simple pricing, ready for larger use-cases. This is where the comparison is ending as comparing globally deployed and managed network with crowd-sourced network is, in term of coverage, reliability and service level, something wrong to do.

Devices

There is nothing specific on devices: any LoRaWan device works with Helium, you currently just need to get your credential from the helium console. That’s it.

Let’s implement it

If you are not interested in implementing your own Helium Hotspot, you can directly jump to the conclusion at the end of this post to get my opinion on this IoT network and see the global context of such networks.

Here is what I have implemented to make it running:

I did not have a Helium hotspot (and it was more fun to make it from scratch). So I decide to use existing components I owned:

  • 1 Mikrotik LoRa8 outdoor gateway
  • 1 Raspberry Pi 3 + 64 GB sdcard

Get a Pi 3 or 4 configured

The helium miner is the key edge component of the solution. They are proposing to deploy in a Amazon instance… cool, but a bit expensive and not so fun to understand it. So let’s try on a Raspberry PI. I found a RPI3 free for use in my stock.

Helium needs a 64bits system to run. On Raspberry Pi the RaspbianOS is only 32b so the best choice is to run a Ubuntu distribution. Following this link you can select you raspberry Pi version and download the image. Make sure you select the 64b one.

Now you can flash it to the sdcard. I’m using Balena Etcher for this:

After this step, you can connect to the RPI with ubuntu / ubuntu default user. SSH is accessible by default but you need to wait a bit for the end of the Linux initialization, even if the console looks ready… it is not.

The first startup is a bit long: I had to wait for 24 minutes before getting this ubuntu ready for an apt-get update… so, take a break !

Install the Miner

You can refer to the official installation guide also.

On your network, it seems you need to forward the port 44158/TCP to your Miner.

Then update the system and install docker:

[~] sudo apt-get update
[~] sudo apt-get upgrade
[~] sudo apt-get install docker.io
[~] sudo usermod -aG docker $USER
[~] sudo mkdir /root/miner_data
[~] mkdir /root/miner_logs

Now we can run the Miner on docker. You need to select the last updated container for your platform. The list is on quay.io. You can also use latest-arm64 or latest-adm64 as image name.

[~] docker run -d --restart always\
   --env REGION_OVERRIDE=EU868 \
   --publish 1680:1680/udp \
   --publish 44158:44158/tcp \
   --name miner \
   --mount type=bind,source=/root/miner_data,target=/var/data \
   --mount type=bind,source=/root/miner_logs,target=/var/log/miner \
   quay.io/team-helium/miner:miner-arm64_2020.09.21.1_GA

Verify container is running

[~] docker ps
CONTAINER ID        IMAGE                                                   COMMAND                  CREATED             STATUS              PORTS                    NAMES
282803630a58        quay.io/team-helium/miner:miner-arm64_2020.09.21.1_GA   "/opt/miner/bin/mine…"   18 seconds ago      Up 14 seconds       0.0.0.0:1680->1680/udp   miner

Ensure you are connected to miner network. The following content can take 10-15 minutes to reach this status. It sounds normal. Just wait.

[~] docker exec miner miner peer book -s

Check where you are in the blockchain processing

[~] docker exec miner miner info height
13226		509796 (local blockchain state)
[~] curl https://api.helium.io/v1/blocks/height
{"data":{"height":514333}} (global blockchain state)

The values should be equivalent once your miner is in sync with the blockchain.

Backup your Swarms keys located in

~/miner_data/miner/swarm_key

Here are some other useful command to manage your miner’s containers

If you need to stop or start the container

# docker stop miner
# docker start miner

Get access to container logs

# docker logs [--tail xxx] miner
# docker exec miner tail -F /var/log/miner/console.log

In case you need later to update the container with a newer version (as an example, replace by the version you need:

# docker pull quay.io/team-helium/miner:miner-arm64_2020.09.21.1_GA

List your image available

# docker images

Configure the LoRaWan Gateway

Helium is based on LoRaWan and uses the classical Semtech packet forwarder to send packets to the miner. So what we need to do is to set the miner raspberry pi as target for the packet forwarder.

The way to configure it depends on the gateway you have. I’ve setup my Mikrotik LoRa8 gateway following the same procedure than for TTN with the Raspberry PI IP address and port 1680. Check my different gateway test to find the corresponding setting for you.

Once configured you should see in the log some LoRaWan traffic.

[~] docker exec miner tail -F /var/log/miner/console.log
...
<0.1358.0>@miner_lora:handle_json_data:470 got status #{<<"ackr">> => 100.0,<<"dwnb">> => 0,<<"rxfw">> => 2,<<"rxnb">> => 2,<<"rxok">> => 0,...
<0.1358.0>@miner_lora:handle_json_data:471 Gateway #gateway{mac=3617851966899635XXX,ip={10,0,0,170},port=45578,sent=0,received=9,dropped=0,status=#{<<"ackr">> => 100.0,<<"dwnb">> => 0,...

Link your Helium Wallet with your hotspot

With what we have done previously, we never indicated the hotspot’s property and not yet linked it with a Helium Wallet. So basically you will earn nothing (but the gateway is part of the network and routing traffic).

So for this step you need different things:

Create an Helium Wallet

The Helium mobile application allows you to have a personal wallet and show your Hotspot in it. When installing this application you will have a Wallet created and authenticated with a list of 12 Keywords.

You will need to have your wallet created, then this list of keywords to authenticate yourself as the owner of your Hostpot.

In the next steps, we are going to install a wallet on a linux machine to make the links. A wallet should not be on a server exposed on Internet, so it should be removed once the installation step executed. This software, written in rust require too much RAM to be compiled on a RPI3. You can give a try on RPI4 but I recommend to use a VM.

At the end of the process you will be able to see you hotspot on the map from the mobile application.

Get a CODE from Helium

This is currently the trickiest part, obtaining a CODE from Helium to be able to join. To get it, you need to join the Helium Discord forum and ask for a code in the Hotspot-diy-hardware channel. The Helium team is really busy as the network is growing really fast world-wide so, it’s a long step to achieve.

Install the wallet on your machine

I’ve basically followed this video to make this tutorial.

Clone the wallet repo

[~] git clone https://github.com/helium/helium-wallet-rs
[~] cd helium-wallet-rs

Install the compilers & rust environment

[~] sudo apt-get install pkg-config libssl-dev build-essential
[~] sudo curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

The rust installation use rustup.rs service. You can check that webpage to ensure the link has not been changed. Once launched, select:

1) Proceed with installation (default)

Once done, source the Rust environment variables

source $HOME/.cargo/env

Now compile the wallet (run it and take a coffee break:

Note, if you build it on the miner RPI, stop the container before launching the build as it requires a lot of memory.

[~helium-wallet-rs] cargo build --release
[~helium-wallet-rs] cd target/realease

Create the wallet. For this, you need to have the 12 key words identifying your wallet. You will find them in the mobile application in More >> Advanced >> Reveal Words. Then you will have to enter a password for your wallet.

[~helium-wallet-rs/target/release] ./helium-wallet create basic --seed
Seed Words:word1 word2 word3 ... word12
Password:
Confirm Password:

The following command gives info about your wallet

[~helium-wallet-rs/target/release] ./helium-wallet info
+----------------+---------------------------------------+
| Key            | Value                                 |
+----------------+---------------------------------------+
| Address        |KQ2vKZPFAxyAMqxd2726UhSFzDW            |
+----------------+---------------------------------------+
| Sharded        | false                                 |
+----------------+---------------------------------------+
| PWHash         | xxxxxxxxxx                            |
+----------------+---------------------------------------+
| Balance        | 0.00000000                            |
+----------------+---------------------------------------+
| DC Balance     | 0                                     |
+----------------+---------------------------------------+
| Securities Bal | 0                                     |
+----------------+---------------------------------------+

Now we can link the gateway to this wallet, running on the miner the following command:

[~miner] sudo docker exec miner miner txn add_gateway owner=KQ2vKZPFAxyAMqxd2726UhSFzDW --payer 14fzfjFcHpDR1rTH8BNPvSi5dKBbgxaDnmsVPbCjuq9ENjpZbxh

Replacing owner string by your wallet address. This returns a string like the following one you need to store.

CrXXXXXUaMXgAXCXXXXXXXXXXXXXXXXXXcSIQBWBbBXXXXXCTgM7FXu8XXFOUef6/vjTIXXXXXXXCIHeAky/xm1TtNeCQXXXXXXXXXXXXakuGwbstGszRRXXXXXXXXX3793fZMYdsXXUqIQHjoXXXXXXXNNX43ZjXXoJrP7XXXXXkvQBQOXX7Aw==

Add the location of the gateway, the location is LAT,LON. Like previously, replace the owner string by your personal one.

[~miner] sudo docker exec miner miner txn assert_location location=47.24587,2.06001 owner=KQ2vKZPFAxyAMqxd2726UhSFzDW --payer 14fzfjFcHpDR1rTH8BNPvSi5dKBbgxaDnmsVPbCjuq9ENjpZbxh 

Like in the previous command, you get a second string we are going to use. Store it.

Es0BXXXXXXXzm9xG6FhAQXXXXXXXXn+v740yG8SIXXXXXXXXXQTRSmQaMPn7n4XXXXXXXpxohAeOhKiFYOtvXXXXXmOM+gXXXXcwRQIg ... wIQ9XXXBA==

For the next step, you need the onboarding CODE given by Helium, this will allow the gateway to be attached into the wallet. Here we pass two command for the two transaction we’ve just made.

[~helium-wallet-rs/target/release] ./helium-wallet --format json onboard CrXXXXXUa...7Aw== --onboarding CODE --commit
password: [your wallet's password]

[~helium-wallet-rs/target/release] ./helium-wallet --format json onboard Es0XXXXXUa...BA== --onboarding CODE --commit
password: [your wallet's password]

As a response of each of these command, you got

{   
  "hash": "WaEO3QuhFGuxxxxx....XXXXXxxxxxozAu6DkaI8LJkU",       
  "txn": "Cr8CCxxx...xxxx7Aw==" 
}

The onboarding takes some time to be processed, you can track them using the hash key returned on https://api.helium.io/v1/pending_transactions/WaEO3QuhFGuxxxx... (you add the hash key at the end of the API url)

It seams that when the status of the transaction is “cleared” it has been proceeded correctly.

Now you can see the new hotspot in your mobile application:

In the Account tab of the application, you will see the corresponding two transactions you’ve just created. You will see also a cost for these two transactions. This cost is in DC and they are payed by the network operator. So here, the addition of the hotspot and the addition of its location costs to Helium corp as an operator 135K DC ($1,35). Helium is creating the DCs so… but if you are a third party operator this is your contribution.

This is why, when making the transaction you set a payer (helium) and this is also why you need a code: to authorize you to create a DC invoice to that payer for the transaction you are performing.

Now, all the system is up & running. To start using the Helium network with a device you don’t need to have your gateway registered to your wallet. You can start communicate even if you don’t have the code. Once your gateway has been linked to your wallet, you start receiving HNT tokens for your gateway work. The revenue depends on the operation your gateway performs, this is related to traffic and gateways around. If you are alone with no traffic … you get less. make sense.

So, now it’s time to use that network, because we are not creating an IoT network to make cryptocurrency normally, we make an IoT network to support IoT communications !

Let’s configure a LoRaWan device to use the Helium network

There is nothing specific on the device side. To get my device running on Helium, I’ve taken a ST LRWAN devkit with a Murata chip and simply deploy my ItSDK LoRaWAN example on it.

The you need to setup the device EUI, App EUI and App Key to register the network, exactly like for any LoRaWAN network using OTAA. You can get this from the helium console, in device tab, creating a new device.

Register new device and manage groups

The credentials are proposed by helium (here I’ve hidden some of the bytes).

Usually LoRaWAN network servers have applications identified by APP EUI. This represents a group of devices. You apply data processing and back-end routing rules on application. Helium seems to randomly generate APP EUI and DEV EUI.

You can group devices another way, using the label. A label is the equivalent of a TTN Application or a Sigfox DeviceType. When using the App EUI as a device group management, you can’t move a device from a device group to another without changing the credentials. As this kind of change is not possible in production, the way Helium is managing this is really make sense.

Manage back-end integration

For each of the label you can assign Integration. Integration is the way you want to process your data. The standard integrations are:

  • Cargo, seams to be an equivalent of TTN mapper (but the coverage is not visible apparently)
  • MyDevice, to easily make dashboard with device pushing cayenne type payload.
  • HTTP push message to integrate with your back-end server
  • MQTT push message, allowing a reliable back-end integration
  • AWS IoT Core

Access to communication details

Once configured, you can connect your device to the network and start sending messages:

The JOIN procedure is not counted as part of the billable frames. The repeats are also not counted. So are only considered the end-user messages, not the radio frames.

The device details allows to see the transmission history for a device and a real-time graph of the running transmissions. For each of the messages you can see list of gateways. The tool is good enough and looks to be in development. As an example, the “Packet transferred” frame is not updated when new packet arrive, but the graph is refreshed. The Packet number is not messages, repeats are counted, so it can be surprising. The credentials are clearly displayed on the screen. This is not a state-of-the-art way to do.

Decode payload

You can assign decoding function to a label. There are some standard decoding like Cayenne format and you can also create your own javascript as you do with TTN.

So, the tool is nice and the network is young so the network server needs to be improve to convince the industrial companies to use it in my point of view, but this is a really good starting point.

Conclusion

There is a new trend on crowdsourced IoT networks. Al of them have different approach:

  • TTN is open, free and rely on the individual will – basically what I see is a large community of maker, hacking high end hardware and looking for the best spot to deploy antenna. The number of these geek, spending their money, not expecting feedback is small but they are efficient.
  • Helium is open, low cost and count on the money’s attraction to capture a larger public of geeks able to buy and deploy ready for use gateways. The consequence is a fast growth of limited coverage hotspot. This is moving and the ability to extend the network with many kind of hotspot, as I did, could change this but the community seems to be less short budget hackers and more wealthy geeks trusting the blockchain economy. The ability to touch other networks or to have industrial company interested in merging their networks in Helium for managing customer subscription or partner use of already deployed network will be a key point. I see many interesting use-cases in that way. Because the main question is now : who are the IoT solution providers who are going to use Helium network ?
  • Amazon Sidewalk, proprietary, (free?) network count on end user of smart home devices to create a network with people do not really understand what is an IoT network. So basically Mrs A will deploy a node of the network by connecting a camera. I’m quite sure this target will be higher than the 2 others and hundreds of thousandth of devices will be deployed all around the world. The main issue is none of them will find an interest in deploying a network and share it. As a consequence the coverage and quality may not be at the level of the number of gateways. But what amazon is looking for, is to create an ecosystem they control with a large range of smart-home application. Starting by the product and the distribution of it, this will be the largest used network.

The crowd-sourced networks future is a challenge to determine and it is too early to understand who’s going to be use for what purpose… In my point of view, the challenge is to be able to have a reliable network you can use in any city for your application. Certain like Amazon could imagine a free of charge network, like Bluetooth, for IoT application. Normal people do not want to pay for a subscription and Amazon (as any distributor) is not good at selling and managing subscription. The problem is that IoT is a subscription business model, not due to the telecom part, because IoT is a digital solution running servers and paying engineers every month for maintenance. So free network is not the question. Ultra low cost network with a per message costs model makes sense.

My last point is about coverage, crowdsourced models are interesting for smart-home and smart cities but will not work properly out of the cities. It means these networks can only be used in certain use-cases, excluding mobility, agricultural, industry, logistic, outdoor sports, forest protection…. In my point of view TTN, as it is more easy to adopt by the industrial will get more on this. Let see if Amazon fire satellites for this ? I’m curious on Helium possible adoption by third party IoT solutions targeting industrial applications.

Even if I love all these projects, they are not THE solution. They are part of the choice and the response. I’m really curious to see how it’s going to evolve.

What is making me smiling today: Semtech claims to have distributed 1M LoRa gateway chip. This is basically a 314 000 000 km2 of potential coverage. This is twice of the emerged land surface. It basically means, (in a mathematical theory point of view), with an efficient deployment, this already produced equipment we could have a global network, even in deserts with a redundancy of 2 !!

Right know, I’ve added a Helium gateway on a roof top antenna with a good coverage on North of Clermont-Fd so please join to see more what we can do with this network.

This entry was posted in IoT and tagged , , , , . Bookmark the permalink.

2 Responses to First steps with Helium IoT network

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.