Establishing a PPP Connection Using Hologram NovaM
I have been developing an IoT device based on a single-board computer (Orange Pi PC+). The device is used for vehicle tracking and includes GPS, accelerometer, gyro, and more. It sends location updates at regular intervals to a server via a cellular network. I have been using 3G GSM USB cellular modem dongles and they work fine in urban/suburban settings, but in more rural areas the 3G GSM coverage is often inadequate. Therefore, I have been seeking an LTE solution.
I have purchased a wide variety of LTE USB modems, but I have not found one that I can get to work with my device. More or less, all LTE USB modems are made in China. The market for cellular modems in the US is tiny, so the Chinese manufacturers donāt place much emphasis on compatibility with US carriers and, even worse, they donāt typically have a good way to test their devices for compatibility with US carriers. Also, they are virtually all focused on created USB modems which are Windows compatible, and know nothing about Linux. Add a language barrier, and you can understand why I have a box full of Chinese LTE USB dongles which are useless to me.
When I stumbled across the Hologram NovaM I got very excited at the prospect of an LTE modem designed in the US and supported in the US. The fact that it is open source is an added bonus.
I purchased some Hologram NovaM devices a few weeks ago and began experimenting with them using Hologram SIMs. Iāve gotten further along than with any of the Chinese devices, but Iām not out of the woods yet. In this document I will share what I have learned about the NovaM, exactly how I use it to establish a ppp connection, and what problems I have not yet been able to sort out. I have two hopes:
- this document will be helpful to others trying to use the NovaM
- folks at Hologram will provide further assistance
At this point, let me state clearly that I have only been experimenting with the Hologram Python tools and the NovaM for a few weeks, so I am certainly not an expert. I have posted numerous questions on community.hologram.io and have received some very helpful responses. I have also communicated by e-mai and phone with one of Hologramās sales engineers who has also been helpful. Iāll also add that there are some very important questions which I (and others) have asked which go unanswered. Given my understanding that Hologram developed the NovaM, I am surprised by this. The impression I get is that either nobody at Hologram is able to answer these questions, or those who can answer these questions are not aware they are being asked. Either way, without some good, basic, technical support, the NovaM cannot be adopted on large scale and certainly cannot be used except by hobbyists.
AT THE END OF THIS DOCUMENT I WILL DESCRIBE THE PROBLEMS I HAVE NOT BEEN ABLE TO SORT OUT AND FOR WHICH I HAVE NOT BEEN ABLE TO GET USEFULL ASSISTANCE FROM HOLOGRAM.
The Hologram Software
I began by using Hologramās Python SDK and their CLI (Command Line Interface). The installation instructions on the Hologram web site are intended for Raspberry Pi running Raspian. I have been able to install the Python tools on my Orange Pi, and Iāve documented the process. If anyone want the details, just ask.
I was able to use the CLI to connect to the Internet, but some problems arose:
- the tools didnāt always work.
- once a ppp connection was established, there was no way to send AT commands to the device, so there was no quick way to tell when the connection dropped. All I could do was check for the existence of a ppp0 interface. The ppp0 interface can take minutes to disappear after the connection drops.
It turns out that (2) has nothing to do with the Python tools, but without understanding the reason for (1) all I could think to do is stop using the tools and try to set up the ppp connection without them.
My current understanding is that the Python tools donāt do anythingāwith regard to setting up a ppp connectionābeyond invoking pppd (the ppp daemon) and providing a proper chat script, so now I do that myself as I will explain.
NovaM
The NovaM is based on the,
U-blox SARA R410M-02B
module. This is an LTE CatM1 and NB-IoT device. Presently, T-Mobile is building out NB-IoT and their network is available for testing (at least). Verizon, AT&T and other network providers are offering Cat M1.
This document,
https://www.u-blox.com/sites/default/files/SARA-R4-SARA-N4_ATCommands_%28UBX-17003787%29.pdf
is full of useful information about the moduleās AT command set and more.
Connecting the NovaM
Drivers are needed for the NovaM. Install them like this:
sudo modprobe optional
sudo sh -c 'echo -n 05c6 90b2 > /sys/bus/usb-serial/drrivers/option1/new_id'
After installing the drivers, inserting the NovaM into a USB port will present four devices:
/dev/ttyUSB0
/dev/ttyUSB1
/dev/ttyUSB2
/dev/ttyUSB3
Only one will respond to AT commands. It is usually,
/dev/ttyUSB2
but not necessarily. I wrote a Java program,
findmodem.jar
which attempts to open each of those devices, sends,
AT\r
and sees if it gets a response. If so, it has found the correct device. It returns the device, for example,
ā/dev/ttyUSB2ā
or,
no_modem
if none of the devs respond.
I wrote the program in Java because I already have a JVM in my device and I could write it on my desktop computer and just copy it to my IoT device without recompiling (Java is most portable). It would be easy enough to write such a program in C.
PLEASE NOTE: the active device is usually /dev/ttyUSB2 and I believe some parts of the Python SDK hard code /dev/ttyUSB2. If it happens that the active device is not /dev/tttyUSB2 then any code expecting /dev/ttyUSB2 will, obviously, not work.
Establishing a PPP Connection
To establish a ppp connection:
- create a chat script for the ppp daemon (pppd)
- configure pppd
- enable pppd logging
- invoke pppd
Step 1. Create a Chat Script
Create a file called,
chat_nova
containing (without the indenting):
ABORT 'BUSY'
ABORT 'NO CARRIER'
ABORT 'VOICE'
ABORT 'NO DIALTONE'
ABORT 'NO DIAL TONE'
ABORT 'NO ANSWER'
ABORT 'DELAYED'
TIMEOUT 12
REPORT CONNECT
"" AT
OK ATH
OK ATZ
OK ATQ0
OK ATD*99***1#
CONNECT ''
You can store the file wherever you want. I stash it at:
/etc/ppp/chatscripts/chat_nova
I got this chat script from the Hologram github site, so no credit to me for this.
Step 2. Configure pppd
To configure the ppp daemon create (or edit) the file,
/etc/ppp/options
to contain (without the indenting):
/dev/ttyUSB2
115200
noipdefault
usepeerdns
defaultroute
persist
noauth
connect "/usr/sbin/chat -v -f /etc/ppp/chatscripts/chat_nova"
Notes:
-
the first line contains the active NovaM device. It will be wise to dynamically set the correct value just before Step 3. I do this by using the sed utility.
-
the last line invokes chat and specifies the chat script to use (created in Step 1)
(Again, I got these options from the Hologram GitHub site, so no credit to me.)
Step 3. Enable pppd Logging
In the absence of some way to monitor what pppd is doing, the connection will succeed or fail but there will be no clues as to why. Enabling pppd logging will cause pppd to log its activity, and weāll be able to watch what pppd is doing in real time.
To enable pppd logging,
-
Edit,
/etc/ppp/options
and add these two lines:
debug
kdebug 7
-
Edit,
/etc/rysyslog.d/50-default.conf
and uncomment these lines:
*..=debug;...
*.=debug;\
auth,authpriv.none;\
news.none;mail.none -/var/log/messages
Now, pppd will write debug information to:
/varr/log/debug
To watch the log as pppd is running, open a console and run tail:
sudo tail -f /var/log/debug
Step 4. Invoke pppd
Now, run pppd,
sudo /usr/sbin/pppd
If all goes well pppd it will establish a ppp connection. Once a connection is established running,
sudo ifconfig
will show a ppp0 section which will contain the IP address of the device.
Remaining Problems
- Canāt Communicate with NovaM after PPP connection is established
On page 11 of the U-Blox document (the link appears early in the document) three modes are described:
Command Mode: there is no connection and the device responds to AT commands
Data Mode: a connection has been established and device does not respond to AT commands
Online Command Mode: a connection has been established and the device responds to AT commands
The documentation indicates that it is possible to switch from Command Mode to Online Command Mode. I have not been able to accomplish this, and I have not been able to obtain any useful assistance from Hologram.
This is a significant problem, but much less so than the next one.
- No Network Protocols Running
Sometimes when attempting to establish a ppp connection all goes well. Sometimes it does not. When it does not, it is quite common to see a message in the log containing this text:
No network protocols running
I have spent quite a few hours trying to get to the bottom of this one. I know Iām not the only person running into this problem because,
a. Iām just not that special
b. I believe others have reported this on the community formum
- It Can Take 20 Seconds or 5 Hours For the Red LED to Light
I have not yet identified rhyme or reason as to why the NovaM, when powered on, can take seconds or hours for the Red LED to light. Iām formulating some theories, but I donāt yet have enough experience to take any position. Many, many, many others have raised this problem on the forum and Hologram doesnāt seem to have any useful guidance. Is it firmware problems in the U-Blox module? Is it a provider/Hologram SIM problem? Is it something else?
A Plea for Help
If I were using a Hologram modem and non-Hologram SIMs, or vice-versa, I would not necessarily expect Hologram to get to the bottom of any of these problems, but Iām using a NovaM and Hologram SIM cards.
It would be very nice if Hologram provided some useful technical support or explained why they cannot. Perhaps the NovaM design was outsourced and Hologram really doesnāt have folks with the necessary technical knowledge to help.
Iāll add that I have purchased 56 NovaM devices. My intention was to deploy 50 of them with one of my new customers and keep the rest for field testing. Once I find a suitable device, I will need about 1,000/year. Referring only to my actual purchase of 56 devices, I donāt know if that makes me a ābigā user or a āsmallā one, but I feel that with such a purchase Hologram should provide more technical support than suggesting I search the Internet or post on the community forum. One reason I was attracted to Hologram was the prospect of purchasing devices and connectivity from a single source to avoid finger-pointing. It didnāt occur to me that instead of finger-pointing I would just be, more or less, ignored.
Finally, let me say that I am NOT blaming @Reuben or @Maiky or anyone else who contributes to this forum. I very much appreciate the help I have gotten on the forum. Rather, my point is that Hologram is commercial venture (nothing wrong with that). They do not give away connectivity (beyond tasting) or hardware and that is precisely why I want to use their services and products: for profit companies can and should provide solid support for their products.
Regards,
Matt