Heltec HT-M01 LoRa concentrator board for €100

PacketForwarder running on Windows
image

and global_conf.json editor UI
image

2 Likes

Hello,

did somebody already manage to use it for TTN? I got mine yesterday, I also read the tutorial I‘ve downloaded from this side but it‘s not connected on TTN side.

I use a Raspberry Pi Zero W with the SPI adapter board

KR Bernd

use it with USB following this steps

1 Like

Hello nestorayuso,

thank you for the hint. But I have now managed to make my HT-M01 run with the SPI version (at least TTN says my gateway is connected).

The solution is simple: use the installation description of the HT-M01

mkdir lora
cd lora
sudo apt-get update
sudo apt-get install git
git clone GitHub - Lora-net/lora_gateway: Driver/HAL to build a gateway using a concentrator board based on Semtech SX1301 multi-channel modem and SX1257/SX1255 RF transceivers.
git clone GitHub - Lora-net/packet_forwarder: A LoRa packet forwarder is a program running on the host of a LoRa gateway that forwards RF packets receive by the concentrator to a server through a IP/UDP link, and emits RF packets that are sent by the server.
git clone GitHub - HelTecAutomation/lorasdk: Scripts and files for LoRa gateway produced by Heltec automation(TM)
cd /home/pi/lora/lora_gateway
make clean all
cd /home/pi/lora/packet_forwarder
make clean all
cd /home/pi/lora/lorasdk
chmod +x install.sh
./install.sh
sudo cp -f /home/pi/lora/lorasdk/global_conf_CN470.json /home/pi/lora/packet_forwarder/lora_pkt_fwd/global_conf.json

omit the last task and use the original global_conf.json where you update the “gateway_conf”:

“gateway_ID”: “xxxxx”, #<- your gateway id
“server_address”: “router.eu.thethings.network”,
“serv_port_up”: 1700,
“serv_port_down”: 1700,

then you can start it:

pi@RaspiZeroW:~/lora/packet_forwarder/lora_pkt_fwd $ ./lora_pkt_fwd start global_conf.json
*** Beacon Packet Forwarder for Lora Gateway ***
Version: 4.0.1
*** Lora concentrator HAL library version info ***
Version: 5.0.1;


INFO: Little endian host
INFO: found global configuration file global_conf.json, parsing it
INFO: global_conf.json does contain a JSON object named SX1301_conf, parsing SX1301 parameters
INFO: lorawan_public 1, clksrc 1

TTN:

KR Bernd

2 Likes

Hello,

but my HT-M01 is still not working. Connection to TTN is fine but I only get CRC_Errors using the provided global_conf.json

Aug 24 17:42:13 RaspiZeroW lora_pkt_fwd[585]: # CRC_OK: 0.00%, CRC_FAIL: 100.00%, NO_CRC: 0.00%
Aug 24 17:42:13 RaspiZeroW lora_pkt_fwd[585]: # CRC_OK: 0.00%, CRC_FAIL: 100.00%, NO_CRC: 0.00%
Aug 24 17:42:13 RaspiZeroW lora_pkt_fwd[585]: # CRC_OK: 0.00%, CRC_FAIL: 100.00%, NO_CRC: 0.00%
Aug 24 17:49:00 RaspiZeroW lora_pkt_fwd[585]: # CRC_OK: 0.00%, CRC_FAIL: 100.00%, NO_CRC: 0.00%
Aug 24 17:49:00 RaspiZeroW lora_pkt_fwd[585]: # CRC_OK: 0.00%, CRC_FAIL: 100.00%, NO_CRC: 0.00%
Aug 24 17:49:00 RaspiZeroW lora_pkt_fwd[585]: # CRC_OK: 0.00%, CRC_FAIL: 0.00%, NO_CRC: 0.00%
Aug 24 17:55:00 RaspiZeroW lora_pkt_fwd[585]: # CRC_OK: 0.00%, CRC_FAIL: 0.00%, NO_CRC: 0.00%
Aug 24 17:55:00 RaspiZeroW lora_pkt_fwd[585]: # CRC_OK: 0.00%, CRC_FAIL: 100.00%, NO_CRC: 0.00%
Aug 24 17:55:00 RaspiZeroW lora_pkt_fwd[585]: # CRC_OK: 0.00%, CRC_FAIL: 0.00%, NO_CRC: 0.00%
Aug 24 17:55:00 RaspiZeroW lora_pkt_fwd[585]: # CRC_OK: 0.00%, CRC_FAIL: 100.00%, NO_CRC: 0.00%
Aug 24 18:01:00 RaspiZeroW lora_pkt_fwd[585]: # CRC_OK: 0.00%, CRC_FAIL: 100.00%, NO_CRC: 0.00%
Aug 24 18:01:00 RaspiZeroW lora_pkt_fwd[585]: # CRC_OK: 0.00%, CRC_FAIL: 0.00%, NO_CRC: 0.00%
Aug 24 18:01:00 RaspiZeroW lora_pkt_fwd[585]: # CRC_OK: 0.00%, CRC_FAIL: 0.00%, NO_CRC: 0.00%
Aug 24 18:07:00 RaspiZeroW lora_pkt_fwd[585]: # CRC_OK: 0.00%, CRC_FAIL: 0.00%, NO_CRC: 0.00%
Aug 24 18:07:00 RaspiZeroW lora_pkt_fwd[585]: # CRC_OK: 0.00%, CRC_FAIL: 0.00%, NO_CRC: 0.00%
Aug 24 18:07:00 RaspiZeroW lora_pkt_fwd[585]: # CRC_OK: 0.00%, CRC_FAIL: 0.00%, NO_CRC: 0.00%
Aug 27 11:26:36 RaspiZeroW lora_pkt_fwd[584]: # CRC_OK: 0.00%, CRC_FAIL: 100.00%, NO_CRC: 0.00%
Aug 27 11:32:36 RaspiZeroW lora_pkt_fwd[584]: # CRC_OK: 0.00%, CRC_FAIL: 100.00%, NO_CRC: 0.00%

Three status messages with the same time stamp does not look right.

Make sure the node is at least 3 meters away from the gateway or the signal might be too strong resulting in CRC errors.

Hello Jac,

Thank you for the hint!

I have now 5m+ and a wall between my device and my gateway - but the result is still the same: 3 messages per second (every 6 minutes) and all with CRC_FAIL. I had it running all night - but not a single message was successfully received :frowning:

Sep 1 09:12:40 RaspiZeroW lora_pkt_fwd[584]: # CRC_OK: 0.00%, CRC_FAIL: 100.00%, NO_CRC: 0.00%
Sep 1 09:12:40 RaspiZeroW lora_pkt_fwd[584]: # CRC_OK: 0.00%, CRC_FAIL: 100.00%, NO_CRC: 0.00%
Sep 1 09:12:40 RaspiZeroW lora_pkt_fwd[584]: # CRC_OK: 0.00%, CRC_FAIL: 100.00%, NO_CRC: 0.00%
Sep 1 09:18:40 RaspiZeroW lora_pkt_fwd[584]: # CRC_OK: 0.00%, CRC_FAIL: 100.00%, NO_CRC: 0.00%
Sep 1 09:18:40 RaspiZeroW lora_pkt_fwd[584]: # CRC_OK: 0.00%, CRC_FAIL: 100.00%, NO_CRC: 0.00%
Sep 1 09:18:40 RaspiZeroW lora_pkt_fwd[584]: # CRC_OK: 0.00%, CRC_FAIL: 100.00%, NO_CRC: 0.00%
Sep 1 09:18:40 RaspiZeroW lora_pkt_fwd[584]: # CRC_OK: 0.00%, CRC_FAIL: 100.00%, NO_CRC: 0.00%
Sep 1 09:24:40 RaspiZeroW lora_pkt_fwd[584]: # CRC_OK: 0.00%, CRC_FAIL: 100.00%, NO_CRC: 0.00%
Sep 1 09:24:40 RaspiZeroW lora_pkt_fwd[584]: # CRC_OK: 0.00%, CRC_FAIL: 100.00%, NO_CRC: 0.00%
Sep 1 09:24:40 RaspiZeroW lora_pkt_fwd[584]: # CRC_OK: 0.00%, CRC_FAIL: 100.00%, NO_CRC: 0.00%

I’m using the provided global_conf.json for EU868 (and local_conf.jason to overwrite the gateway-id and the server address, which obviously works as I see the gateway on TTN)

KR Bernd

Hi Bernd,

The interval between status messages should be 30 seconds, not 6 minutes. However this might just be a logging issue. Could you check the gateway consoles ‘Last Seen’ message for a couple of minutes? The value should not exceed 35 seconds.

Just to make sure, you are using a 868MHz model, not 443MHz?

Could you post a picture of your setup?

Best regards,

Jac

Hello Jac,

the update on last seen happens precisely every 2 minutes (3x2min = 6min … could be the explanation) in my local_conf.json I use this setting:

/* adjust the following parameters for your network */
“keepalive_interval”: 30,
“stat_interval”: 120,
“push_timeout_ms”: 100,

At least I ordered the 868MHz Version - but there is no info neither on the device nor on the packaging .




As Lora-Device I use a Mini-Ultra-Ultra-Pro3 with Radio from Rocketscream which works fine with TTN but never uses MY gateway but others (see metadata).

mini-ultra-pro-v3-ttn
mini-ultra-pro-v3-metadata

KR Bernd

Hello Jac,

after disassembling the device it turned out that I’ve received the 433MHZ (although I clearly ordered the 868 MHZ version) version as it contains 2 SX1255 (instead of SX1257) :frowning:

Thank you for your support!

KR Bernd

1 Like

Hi Bernd,

That is disappointing. Hopefully the vendor will solve this issue soon.

Best regards,

Jac

1 Like

Hi

One question. Do you receive packets from radio 0? Because I have one TTGO and one Heltec ESP32 and the gateway only receives in radio 1, it seems the channels in radio 0 are not listening:

*** Packet Forwarder for Lora PicoCell Gateway ***
Version: 0.1.0
*** Lora concentrator HAL library version info ***
Version: 0.2.2;
*** MCU FW version for LoRa PicoCell Gateway ***
Version: 0x010A0006
***
INFO: Little endian host
INFO: found global configuration file global_conf.json, parsing it
INFO: global_conf.json does contain a JSON object named SX1301_conf, parsing SX1301 parameters
INFO: lorawan_public 1, clksrc 1
INFO: antenna_gain 0 dBi
INFO: Configuring TX LUT with 16 indexes
INFO: radio 0 enabled (type SX1257), center frequency 867500000, RSSI offset -164.000000, tx enabled 1
INFO: radio 1 enabled (type SX1257), center frequency 868500000, RSSI offset -164.000000, tx enabled 0
INFO: Lora multi-SF channel 0>  radio 1, IF -400000 Hz, 125 kHz bw, SF 7 to 12
INFO: Lora multi-SF channel 1>  radio 1, IF -200000 Hz, 125 kHz bw, SF 7 to 12
INFO: Lora multi-SF channel 2>  radio 1, IF 0 Hz, 125 kHz bw, SF 7 to 12
INFO: Lora multi-SF channel 3>  radio 0, IF -400000 Hz, 125 kHz bw, SF 7 to 12
INFO: Lora multi-SF channel 4>  radio 0, IF -200000 Hz, 125 kHz bw, SF 7 to 12
INFO: Lora multi-SF channel 5>  radio 0, IF 0 Hz, 125 kHz bw, SF 7 to 12
INFO: Lora multi-SF channel 6>  radio 0, IF 200000 Hz, 125 kHz bw, SF 7 to 12
INFO: Lora multi-SF channel 7>  radio 0, IF 400000 Hz, 125 kHz bw, SF 7 to 12
INFO: Lora std channel> radio 1, IF -200000 Hz, 250000 Hz bw, SF 7
INFO: FSK channel> radio 1, IF 300000 Hz, 125000 Hz bw, 50000 bps datarate
INFO: global_conf.json does contain a JSON object named gateway_conf, parsing gateway parameters
INFO: gateway MAC address is configured to AA555A0000240409
INFO: server hostname or IP address is configured to "localhost"
INFO: upstream port is configured to "1680"
INFO: downstream port is configured to "1680"
INFO: downstream keep-alive interval is configured to 10 seconds
INFO: statistics display interval is configured to 30 seconds
INFO: upstream PUSH_DATA time-out is configured to 100 ms
INFO: packets received with a valid CRC will be forwarded
INFO: packets received with a CRC error will NOT be forwarded
INFO: packets received with no CRC will NOT be forwarded
INFO: found local configuration file local_conf.json, parsing it
INFO: redefined parameters will overwrite global parameters
INFO: local_conf.json does not contain a JSON object named SX1301_conf
INFO: local_conf.json does contain a JSON object named gateway_conf, parsing gateway parameters
INFO: gateway MAC address is configured to <hidden>
INFO: server hostname or IP address is configured to "router.eu.thethings.network"
INFO: upstream port is configured to "1700"
INFO: downstream port is configured to "1700"
INFO: packets received with a valid CRC will be forwarded
INFO: packets received with a CRC error will NOT be forwarded
INFO: packets received with no CRC will NOT be forwarded
INFO: [down] PULL_ACK received in 51 ms
INFO: [down] PULL_ACK received in 56 ms
INFO: [down] PULL_ACK received in 58 ms

INFO: Received pkt from mote: 26011ACE (fcnt=84Preformatted text0)

JSON up: {"rxpk":[{"tmst":25992764,"chan":0,"rfch":1,"freq":868.100000,"stat":1,"modu":"LORA","datr":"SF7BW125","codr":"4/5","lsnr":8.8,"rssi":-41,"size":16,"data":"QM4aASaASAMBrLDMhzv+mw=="}]}
INFO: [up] PUSH_ACK received in 57 ms

##### 2018-11-01 00:31:03 GMT #####
### [UPSTREAM] ###
# RF packets received by concentrator: 3
# CRC_OK: 33.33%, CRC_FAIL: 66.67%, NO_CRC: 0.00%
# RF packets forwarded: 1 (16 bytes)
# PUSH_DATA datagrams sent: 1 (196 bytes)
# PUSH_DATA acknowledged: 100.00%
### [DOWNSTREAM] ###
# PULL_DATA sent: 3 (100.00% acknowledged)
# PULL_RESP(onse) datagrams received: 0 (0 bytes)
# RF packets sent to concentrator: 0 (0 bytes)
# TX errors: 0
### [JIT] ###
src/jitqueue.c:448:jit_print_queue(): INFO: [jit] queue is empty
### [GPS] ###
# GPS sync is disabled
##### END #####

JSON up: {"stat":{"time":"2018-11-01 00:31:03 GMT","rxnb":3,"rxok":1,"rxfw":1,"ackr":100.0,"dwnb":0,"txnb":0}}
INFO: [up] PUSH_ACK received in 55 ms
INFO: [down] PULL_ACK received in 57 ms

INFO: Received pkt from mote: 26011ACE (fcnt=841)

JSON up: {"rxpk":[{"tmst":38228572,"chan":1,"rfch":1,"freq":868.300000,"stat":1,"modu":"LORA","datr":"SF7BW125","codr":"4/5","lsnr":8.2,"rssi":-65,"size":16,"data":"QM4aASaASQMB+Ippj4C6DA=="}]}
INFO: [up] PUSH_ACK received in 52 ms
INFO: [down] PULL_ACK received in 55 ms

INFO: Received pkt from mote: 26011ACE (fcnt=842)

JSON up: {"rxpk":[{"tmst":50464316,"chan":2,"rfch":1,"freq":868.500000,"stat":1,"modu":"LORA","datr":"SF7BW125","codr":"4/5","lsnr":5.5,"rssi":-64,"size":16,"data":"QM4aASaASgMByGJhP4rY7g=="}]}
INFO: [up] PUSH_ACK received in 68 ms
INFO: [down] PULL_ACK received in 56 ms
INFO: host/sx1301 time offset=(1541032230s:361669µs) - drift=2522µs

##### 2018-11-01 00:31:33 GMT #####
### [UPSTREAM] ###
# RF packets received by concentrator: 4
# CRC_OK: 50.00%, CRC_FAIL: 50.00%, NO_CRC: 0.00%
# RF packets forwarded: 2 (32 bytes)
# PUSH_DATA datagrams sent: 3 (505 bytes)
# PUSH_DATA acknowledged: 100.00%
### [DOWNSTREAM] ###
# PULL_DATA sent: 3 (100.00% acknowledged)
# PULL_RESP(onse) datagrams received: 0 (0 bytes)
# RF packets sent to concentrator: 0 (0 bytes)
# TX errors: 0
### [JIT] ###
src/jitqueue.c:448:jit_print_queue(): INFO: [jit] queue is empty
### [GPS] ###
# GPS sync is disabled
##### END #####

JSON up: {"stat":{"time":"2018-11-01 00:31:33 GMT","rxnb":4,"rxok":2,"rxfw":2,"ackr":100.0,"dwnb":0,"txnb":0}}
INFO: [up] PUSH_ACK received in 57 ms
INFO: [down] PULL_ACK received in 54 ms
INFO: [down] PULL_ACK received in 55 ms

Since here the log doesn’t show any activity until the modules start to send in frequencies associated to radio 1.

I’m using it by usb, but I think there is not difference if I connect it by SPI with a Raspberry Pi Zero W.

What can I do?

I’ve just added a tutorial to my blog for this gateway: https://robotzero.one/heltec-lora-gateway-things-network/

Maybe helpful to someone. Let me know if there’s any errors.

I’ll be setting this up as a permanent gateway in the next few weeks and run some range tests.

2 Likes

Did someone compared the receive sensitivity to other gateways? I think the measured 15,5dBm Output power are enough if we look at our local laws…

25 posts were split to a new topic: PCI/mini PCIe concentrator boards

I did a quick test today with this and the Heltec Lora 32. Connected fine at 2.9km. I’ll try some longer distances when I get my breath back…

image

:rofl:

Did you get your breath back?

I’m wondering about treating myself to one of these as an upgrade to the single channel test gateways I have been playing with, so I am following your experiments with interest. I was looking at a more conventional RPI + RAK831 setup, but this small unit would be a much easier unit to mount on a mast.

Many thanks for your efforts so far. I have spent the week cycling about with a TTNmapper node taped on the back on my bike to see how my gateways are working…

ha! yeah… but now it’s really hot here so I don’t want to be walking up any mountains.

I need to find some way of adding a remote antennae and mounting the unit and Pi Zero in the shade somehow.

So LoRaWAN is like fitness :thinking: interesting :wink: