2019-07-21 08:09:11 -06:00
|
|
|
# galmon
|
2019-08-15 14:08:59 -06:00
|
|
|
galileo/GPS open source monitoring
|
|
|
|
|
|
|
|
Theoretically multi-vendor, although currently only the U-blox 8 chipset is
|
|
|
|
supported.
|
|
|
|
|
|
|
|
Goals:
|
|
|
|
|
|
|
|
1) Support multiple wildly distributed receivers
|
|
|
|
2) Combine these into a forensic archive of all Galileo/GPS NAV messages
|
|
|
|
3) Make this archive available, offline and as a stream
|
|
|
|
4) Consume this stream and turn it into an attractive live website
|
|
|
|
(https://galmon.eu/). As part of this, perform higher-level calculations
|
|
|
|
to determine ephemeris discontinuities, live gst/gps/galileo time
|
|
|
|
offsets, atomic clock jumps etc.
|
|
|
|
5) Populate an InfluxDB timeseries database with raw measurements and higher
|
|
|
|
order calculations
|
|
|
|
|
|
|
|
To get started, make sure you have a C++17 compiler, git, protobuf-compiler,
|
|
|
|
libh2o-dev.
|
|
|
|
|
|
|
|
```
|
|
|
|
git clone https://github.com/ahupowerdns/galmon.git --recursive
|
|
|
|
cd galmon
|
|
|
|
make
|
|
|
|
```
|
|
|
|
|
|
|
|
If this doesn't succeed with an error about h2o, make sure you have this
|
|
|
|
library installed, and if you have remove the # in front of "# -lwslay".
|
|
|
|
This may solve the problem.
|
|
|
|
|
|
|
|
Once compiled, run for example ./ubxtool /dev/ttyACM0 1 | ./ubxparse 10000 html null
|
|
|
|
|
|
|
|
Next up, browse to http://[::1]:10000 (or try http://localhost:10000/ and
|
|
|
|
you should be in business. ubxtool changes (non-permanently) the
|
|
|
|
configuration of your u-blox receiver so it emits the required frames for
|
|
|
|
GPS and Galileo. If you have a u-blox timing receiver it will also enable
|
|
|
|
the doppler frames.
|
|
|
|
|
|
|
|
To see what is going on, try:
|
|
|
|
|
|
|
|
```
|
|
|
|
./ubxtool /dev/ttyACM0 1 | ./navdump
|
|
|
|
```
|
|
|
|
|
|
|
|
Setting up a distributed setup is slightly more complicated & may still
|
|
|
|
change.
|
|
|
|
|
2019-08-06 11:13:25 -06:00
|
|
|
|
|
|
|
Tooling:
|
|
|
|
|
|
|
|
* ubxtool: can configure a u-blox 8 chipset, parses its output & will
|
|
|
|
convert it into a protbuf stream of GNSS NAV frames + metadata
|
|
|
|
Adds 64-bit timestamps plus origin information to each message
|
|
|
|
* xtool: if you have another chipset, build something that extracts NAV
|
2019-08-15 14:08:59 -06:00
|
|
|
frames & metadata. Not done yet.
|
2019-08-06 11:13:25 -06:00
|
|
|
* navrecv: receives GNSS NAV frames and stores them on disk, split out per
|
2019-08-11 02:43:29 -06:00
|
|
|
sender.
|
2019-08-15 14:08:59 -06:00
|
|
|
* navnexus: tails the files stored by navrecv, makes them available over
|
|
|
|
TCP
|
|
|
|
* navpartse: consumes these ordered nav updates for a nice website
|
|
|
|
and puts "ready to graph" data in influxdb - this is the first
|
2019-08-06 11:13:25 -06:00
|
|
|
step that breaks "store everything in native format". Also does
|
|
|
|
computations on ephemerides.
|
|
|
|
* grafana dashboard: makes pretty graphs
|
|
|
|
|
|
|
|
The transport format consists of repeats of:
|
|
|
|
|
|
|
|
1) Four byte magic value
|
|
|
|
2) Two-byte frame length
|
|
|
|
3) A protobuf frame
|
|
|
|
|
|
|
|
The magic value is there to help us resync from partially written data.
|
|
|
|
|
|
|
|
The whole goal is that we can continue to rebuild the database by
|
|
|
|
rerunning 'navstore' and 'navinflux'.
|
|
|
|
|
2019-08-10 08:03:45 -06:00
|
|
|
Big TODO
|
|
|
|
--------
|
|
|
|
|
2019-08-11 02:43:29 -06:00
|
|
|
* Dual goals: completeness, liveness, not the same
|
|
|
|
For forensics, great if the packet is there
|
|
|
|
For display, not that bad if we missed a message
|
|
|
|
* In general, consider refeed strategy
|
|
|
|
Raw serial
|
|
|
|
Protobuf
|
|
|
|
Influxdb
|
|
|
|
".csv files"
|
|
|
|
* Delivery needs to be bit more stateful (queue)
|
|
|
|
|
2019-08-10 08:03:45 -06:00
|
|
|
* Semantics definition for output of Navnexus
|
2019-08-11 02:43:29 -06:00
|
|
|
"we'll never surprise you with old data"
|
|
|
|
|
|
|
|
|
2019-08-10 08:03:45 -06:00
|
|
|
|
2019-08-09 07:58:52 -06:00
|
|
|
ubxtool
|
|
|
|
-------
|
|
|
|
* Will also spool raw serial data to disk (in a filename that includes the
|
|
|
|
start date)
|
|
|
|
* Can also read from disk
|
|
|
|
* Careful to add the right timestamps
|
|
|
|
|