[howto] GL-X3000 GPS configuration guide

According to the Quectel RM520NGL Hardware Design manual ( RM520N-GL/Documents/RM520NGL-Hardware-Design.pdf at main · 4IceG/RM520N-GL · GitHub ) on page 60-61, the modem supports the GPS, Galileo, QZSS, and BDS constellations (together identified as GNSS - Global Navigation Satellite Systems) with frequencies:

  • GPS/Galileo/QZSS - 1575.42 ±1.023 (L1) MHz

  • Galileo - 1575.42 ±2.046 (E1) MHz

  • QZSS - 1575.42 (L1) MHz

  • GLONASS - 1597.5–1605.8 MHz

  • BDS - 1561.098 ±2.046 MHz

  • L5 GPS/Galileo/QZSS - 1176.45 ±10.23 (GPS L5) MHz

So, basically, in order to receive GNSS signals, the CELLULAR antenna that you attach to the X3000 must support those frequencies (approx: 1165-1186 MHz, 1573-1578 MHz, and 1597-1606 MHz) for full, suppoerted GNSS coverage.

Unfortunately, the Peplink 42G cellular antennas do not support any of those bands. It does have a separate GPS antenna, but unfortunately, the X3000 does not have a separate, dedicated GPS antenna port.

Personally, I recently put in an order for a Parsec Akita for my travel trailer - although it can also be used as a portable antenna, its not roof-mounted and its best performance is mounted on a pole (note: although its flat, it is an omni-directional antenna). The Akita does support the GNSS bands. I should receive the antenna later next week… I’ll get back to this thread with my opinion on how effective it is with GPS.

Yes, you can use this antenna, just connect 4 cellular antennas to the X3000 SMA-connectors, it will receive both cellular and GPS signal.

1 Like

Tim, I’m confused. I see one other person says it does not work.

Who is correct? Also, I’m in the USA, so not all GPS freq bands are necessary. Ie Europe

The cellular antenna can receive the signal of 600M~6GHz, which covers the GPS frequency.

Antenna vendor always optimizes the design to improve the gain on the Cellular frequencies, including low frequency 600~900M, medium frequency 1700~2700M, and high frequency, but still can receive other frequency signal, the problem is the gain is not good.

I tested X3000 with another Dome antenna, received the GPS signal successfully.

2 Likes

It’s people like Tim who ‘s help is invaluable that makes me happy I bought my GL-3000!!

Thank you Tim

1 Like

very, very, very useful, many thanks for posting, marco

1 Like

Thanks for sharing, I’ve tried to get it working but when I attempt to run the parse gpx script I get a 404, is this still working for you?

root@GL-X3000:/tmp/mountd/disk1_part1# ./scripts/gpx-parse.php gpxlog.gpx

url: http://localhost/gps/

parseJson: gpxlog.gpx

Warning: file_get_contents(http://localhost/gps/?f=gpxlog.gpx&m=): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /tmp/mountd/disk1_part1/scripts/gpx-parse.php on line 36
got http 404

Thanks so much in advance!!

reload web server config (nginx -s reload) and try again

Thanks for the quick response, that didnt work, i got the same message

root@GL-X3000:/tmp/mountd/disk1_part1# nginx -s reload
nginx: [alert] lua_code_cache is off; this will hurt performance in /etc/nginx/conf.d/gl.conf:6
root@GL-X3000:/tmp/mountd/disk1_part1# ./scripts/gpx-parse.php gpxlog.gpx

url: http://localhost/gps/

parseJson: gpxlog.gpx

Warning: file_get_contents(http://localhost/gps/?f=gpxlog.gpx&m=): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /tmp/mountd/disk1_part1/scripts/gpx-parse.php on line 36
got http 404

This is my output from config.sh, do you think the lack og gps.conf indicates an issue?

root@GL-X3000:/tmp/mountd/disk1_part1# ./scripts/config.sh

checking all files in /tmp/mountd/disk1_part1/.config

name                                               cmp    status              
-------------------------------------------------- ------ --------------------
/etc/nginx/gl-conf.d/service-gps.conf              ok     exists (link)
/etc/php.ini                                              exists 
/etc/init.d/gpsd                                          exists 
/etc/php8-fpm.conf                                 ok     exists 
/etc/php8-fpm.d/gps.conf                                  not exists 

checking required packages: ok (17 installed)

root@GL-X3000:/tmp/mountd/disk1_part1# 

I’ve confirmed I have an output in gpxlog.gpx too:

<?xml version="1.0" encoding="utf-8"?>
<gpx version="1.1" creator="GPSD 3.23 - https://gpsd.io/"
        xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://www.topografix.com/GPX/1/1"
        xsi:schemaLocation="http://www.topografix.com/GPX/1/1
        http://www.topografix.com/GPX/1/1/gpx.xsd">
 <metadata>
  <time>2024-04-03T08:59:32.730Z</time>
 </metadata>
 <trk>
  <src>GPSD 3.23</src>
  <trkseg>
   <trkpt lat="11.111111111" lon="-1.111111111">
    <ele>55.7000</ele>
    <time>2024-04-03T08:59:33.000Z</time>
    <fix>3d</fix>
    <sat>1</sat>
    <hdop>3.0</hdop>
    <vdop>1.0</vdop>
    <pdop>3.2</pdop>
   </trkpt>

and I get streams when running cgps, any help would be much appreciated but also understand how difficult it can be to remote support random people :slight_smile:

can we handle it on github (issue)? php needs more config

yeah sure thanks so much, I’ll open an issue on GH now.

Can this be commercially made available on the x3000? Sounds like most of the work is done already.

Hi all.
many thanks to elafargue for describing the GPS capabilities of the GL-X(E)3000. This inspired me to feed the current position of my router (using in an RV) via mqtt into my OwnTracks setup. But since a couple of days I cannot get any location info from /dev/mhi_LOOPBACK.

cat /dev/mhi_LOOPBACK looks like

$GPGSV,1,1,0,1*54
$GPGGA,134121.96,,,,,0,,,,,,,,*43
$PQXFI,134121.9,,,,,,,,*69
$GPVTG,,T,,M,,N,,K,N*2C
$GPRMC,,V,,,,,,,,,,N,V*29
$GPGSA,A,1,,,,,,,,,,,,,,,,*32

and gpsd cannot derive any information from this

root@router: gpsd -N -D5 -S 12947 /dev/mhi_LOOPBACK
root@router: nc localhost 12947 | jq                                 
{                                                                                         
  "class": "VERSION",                                                                     
  "release": "3.23",                                                                      
  "rev": "3.23",                                                                          
  "proto_major": 3,                                                                       
  "proto_minor": 14                                                                       
}                                                                                         
?WATCH={"enable":true,"json":true};                                                       
{                                                                                         
  "class": "DEVICES",                                                                     
  "devices": []                                                                           
}                                                                                         
{                                                                                         
  "class": "WATCH",                                                                       
  "enable": true,                                                                         
  "json": true,                                                                           
  "nmea": false,                                                                          
  "raw": 0,                                                                               
  "scaled": false,                                                                        
  "timing": false,                                                                        
  "split24": false,                                                                       
  "pps": false                                                                            
}                                                                                         

and nothing more is printed.

How to troubleshoot this?
AT+QGPS=1 and AT+QGPSEND work fine, giving an OK
I connected an external GPS via USB, the gpsd and it's output is fine (therefore testing with Port 12947)

Thanks
Frank

1 Like

This is awesome. I would love to see this info get fed into the map page on goodcloud.

1 Like

I looked at MyTracks and it seems a very good direction for a complete solution.
If the above solution worked fine than it could (hopefully) be implemented as a standard application. @GLinet: is anything planned for 4.4.10?
An RV router should really have something like this..

I managed to install everything like @habeIchVergessen and @elafargue provided.
With cat /dev/mhi_LOOPBACK ,I can see constant updates of GPS coming in.
@Glumidor: can you provide more details on your MQTT and OwnTracks configuration?

Hi brewie,

in general I followed the OwnTracks.org booklet.

OwnTracks is an app for my mobile devices (iOS and Android) which send regular location updates (and battery, speed, etc) to my mosquitto instance. Previously via mqtt protocol, currently through a cloudflare tunnel via https wecksockets to the server I set up in my car.
It's a normal mosquitto installation, OwnTracks uses the topics under owntracks/# (see booklet).

My PuliAX router (also in my car) sends every minute, also via websockets, its location to the same mosquitto instance (script for the router on gitlab)

Then there's OwnTracks-Recorder as a subscriber to the mqtt topics which collects all the location data from my devices and offers an API to show them on a map. You could use the OwnTracks Frontend, I wrote my own OwnTracks-Viewer.

Hope that helps.

cheers
Frank

1 Like

Thx Frank! very helpful explanation. Did you use the mosquitto plugins available on the PuliAX Router? I just installed them on my X3000....

no, I used the mqtt.js within nodejs

The GPS goes out my my X3000 every now and then. Usually, a full unplug-for-10-seconds and power it up again gets is going (a simple reboot does not).

If you haven't upgraded the Quectel firmware, that may help as well. See: X-3000 Lock to 5G towers - #6 by ywp