Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,29 @@
# Changelog
## [2.7.0] Not Released

## [2.7.0] - 2025-11-28

### Added
- Now compatible with Debian 13 (Trixie).
- Now compatible with Septentrio Mosaic-X5 firmware 4.15. Default login/password is `basegnss/basegnss!`.
- GUI -> Settings: Add display of network interface mac address.
- GUI -> Settings: Add Tcp host addr entry to open or block external access to the Gnss receiver. [#490](https://github.com/Stefal/rtkbase/issues/490)
- GUI ->: Add mount name in the web page title. Thanks to @sbonaime [#484](https://github.com/Stefal/rtkbase/issues/484)
- GUI -> Add mount name in the web page title. Thanks to @sbonaime [#484](https://github.com/Stefal/rtkbase/issues/484)
- GUI -> Logs: .sbf files get a type in the type column.
- GUI -> Logs: .obs and .2?o files displayed as RINEX in type column.

### Changed
- RTKLib upgraded to release v2.5.0-EX.
- Add Galileo inside rinex preset for Nrcan. [#479](https://github.com/Stefal/rtkbase/issues/479)
- U-Blox ZED-F9P settings : Dynamic model sets to static during configuration. Thanks to @Jef239 [#488](https://github.com/Stefal/rtkbase/issues/488)

### Fixed
- GUI -> Logs: Fix wrong path when using custom data directory. [#471](https://github.com/Stefal/rtkbase/issues/471)
- GUI -> Settings: Better toggle buttons color behaviour.

### Deprecated
- Operating systems older than Debian 12 / Ubuntu 24.04 can't update RTKBase anymore.
- Python release < 3.11 deprecated

### Security
- Update various python module
- Update js library (leaflet, bootstrap-table)
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ Frontend's main features are:
Other images are available in the ./images folder.

## Ready to flash release:
A ready to flash image is available for Orange Pi Zero, Orange Pi Zero 2, Orange Pi Zero 3 SBC : [Armbian_RTKBase](https://github.com/Stefal/build/releases/latest)
A ready to flash Armbian image is available for Raspberry Pi, Orange Pi Zero, Orange Pi Zero 2, Orange Pi Zero 3 SBC : [Armbian_RTKBase](https://github.com/Stefal/build/releases/latest)

If you use a Raspberry Pi, thanks to [jancelin](https://github.com/jancelin), you can download a ready to flash iso file [here](https://github.com/jancelin/pi-gen/releases/latest).
For older Raspberry Pi releases, see [here](https://github.com/jancelin/pi-gen/releases/latest).

## Easy installation:
+ Connect your gnss receiver to your raspberry pi/orange pi/....
Expand Down
21 changes: 21 additions & 0 deletions receiver_cfg/Unicore_UM960_rtcm3.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Config file for using a Unicore UM960 with RTKBase (RTCM3)
# SIGNALGROUP will reset the device
CONFIG SIGNALGROUP 1
CONFIG SBAS ENABLE AUTO
MODE BASE 1 TIME 60 1
rtcm1005 30
rtcm1019 1
rtcm1020 1
rtcm1033 30
rtcm1042 1
rtcm1044 1
rtcm1045 1
rtcm1046 1
rtcm1077 1
rtcm1087 1
rtcm1097 1
rtcm1107 1
rtcm1117 1
rtcm1127 1
GNGGA 1
GNGSV 1
Binary file modified tools/bin/RTKLIB-2.5.0/aarch64/convbin
Binary file not shown.
Binary file modified tools/bin/RTKLIB-2.5.0/aarch64/rtkrcv
Binary file not shown.
Binary file modified tools/bin/RTKLIB-2.5.0/aarch64/str2str
Binary file not shown.
4 changes: 4 additions & 0 deletions tools/find_rtkbase/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ This is a gui app to find RTKBase base station on the local network.
Executable files are available in the /dist directory for Windows x64 and Gnu/Linux x86_64.

![find_rtkbase gui screenshot](find_rtkbase_screenshot.png)

## Download binary/executable release:
- Windows: [find_rtkbase.exe](https://github.com/Stefal/rtkbase/raw/refs/heads/master/tools/find_rtkbase/dist/find_rtkbase.exe)
- Gnu/Linux (need testing): [find_rtkbase](https://github.com/Stefal/rtkbase/raw/refs/heads/master/tools/find_rtkbase/dist/find_rtkbase)
## building binary/executable from source:

- without console option:
Expand Down
40 changes: 38 additions & 2 deletions tools/install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -179,8 +179,11 @@ install_rtklib() {
#test if computer_model in sbc_array (https://stackoverflow.com/questions/3685970/check-if-a-bash-array-contains-a-value)
if printf '%s\0' "${sbc_array[@]}" | grep -Fxqz -- "${computer_model}" \
&& [[ -f "${rtkbase_path}"'/tools/bin/'"${RTKLIB_RELEASE}"'/'"${arch_package}"'/str2str' ]] \
&& lsb_release -c | grep -qE 'bullseye|bookworm|trixie' \
&& "${rtkbase_path}"'/tools/bin/'"${RTKLIB_RELEASE}"'/'"${arch_package}"/str2str --version > /dev/null 2>&1
&& lsb_release -c | grep -qE 'bookworm|trixie' \
&& "${rtkbase_path}"'/tools/bin/'"${RTKLIB_RELEASE}"'/'"${arch_package}"/str2str --version > /dev/null 2>&1 \
&& "${rtkbase_path}"'/tools/bin/'"${RTKLIB_RELEASE}"'/'"${arch_package}"/convbin --version > /dev/null 2>&1 \
&& "${rtkbase_path}"'/tools/bin/'"${RTKLIB_RELEASE}"'/'"${arch_package}"/rtkrcv --version > /dev/null 2>&1

then
echo 'Copying new rtklib binary for ' "${computer_model}" ' - ' "${arch_package}"
cp "${rtkbase_path}"'/tools/bin/'"${RTKLIB_RELEASE}"'/'"${arch_package}"/str2str /usr/local/bin/
Expand Down Expand Up @@ -443,6 +446,12 @@ detect_gnss() {
detected_gnss[2]=$port_speed
#echo 'U-blox ZED-F9P DETECTED ON '$port $port_speed
break
elif { model=$(python3 "${rtkbase_path}"/tools/unicore_tool.py --port /dev/$port --baudrate $port_speed --command get_model 2>/dev/null) ; [[ "${model}" == 'UM960' ]] ;}; then
detected_gnss[0]=$port
detected_gnss[1]='unicore'
detected_gnss[2]=$port_speed
#echo 'Unicore ' "${model}" ' DETECTED ON '$port $port_speed
break
elif { model=$(python3 "${rtkbase_path}"/tools/unicore_tool.py --port /dev/$port --baudrate $port_speed --command get_model 2>/dev/null) ; [[ "${model}" == 'UM98'[0-2] ]] ;}; then
detected_gnss[0]=$port
detected_gnss[1]='unicore'
Expand Down Expand Up @@ -603,6 +612,33 @@ configure_gnss(){
return $?
fi

elif { model=$(python3 "${rtkbase_path}"/tools/unicore_tool.py --port /dev/${com_port} --baudrate ${com_port_settings%%:*} --command get_model 2>/dev/null) ; [[ "${model}" == 'UM960' ]] ;}
then
#get UM960 firmware release
firmware="$(python3 "${rtkbase_path}"/tools/unicore_tool.py --port /dev/${com_port} --baudrate ${com_port_settings%%:*} --command get_firmware 2>/dev/null)" || firmware='?'
echo 'Unicore-' "${model}" 'Firmware: ' "${firmware}"
sudo -u "${RTKBASE_USER}" sed -i s/^receiver_firmware=.*/receiver_firmware=\'${firmware}\'/ "${rtkbase_path}"/settings.conf
#configure the UM960 for RTKBase
echo 'Resetting the ' "${model}" ' settings....'
python3 "${rtkbase_path}"/tools/unicore_tool.py --port /dev/${com_port} --baudrate ${com_port_settings%%:*} --command reset --retry 5
sleep_time=10 ; echo 'Waiting '$sleep_time's for ' "${model}" ' reboot' ; sleep $sleep_time
echo 'Sending settings....'
python3 "${rtkbase_path}"/tools/unicore_tool.py --port /dev/${com_port} --baudrate ${com_port_settings%%:*} --command send_config_file "${rtkbase_path}"/receiver_cfg/Unicore_"${model}"_rtcm3.cfg --store --retry 2
if [[ $? -eq 0 ]]
then
echo 'Unicore UM960 successfuly configured'
sudo -u "${RTKBASE_USER}" sed -i s/^com_port_settings=.*/com_port_settings=\'115200:8:n:1\'/ "${rtkbase_path}"/settings.conf && \
sudo -u "${RTKBASE_USER}" sed -i s/^receiver=.*/receiver=\'Unicore_$model\'/ "${rtkbase_path}"/settings.conf && \
sudo -u "${RTKBASE_USER}" sed -i s/^receiver_format=.*/receiver_format=\'rtcm3\'/ "${rtkbase_path}"/settings.conf
#UM960 archives a bigger, we need more remaining space to compress archives
sudo -u "${RTKBASE_USER}" sed -i s/^min_free_space=.*/min_free_space=\'1500\'/ "${rtkbase_path}"/settings.conf

return $?
else
echo 'Failed to configure the Gnss receiver'
return 1
fi

elif { model=$(python3 "${rtkbase_path}"/tools/unicore_tool.py --port /dev/${com_port} --baudrate ${com_port_settings%%:*} --command get_model 2>/dev/null) ; [[ "${model}" == 'UM98'[0-2] ]] ;}
then
#get UM98x firmware release
Expand Down
4 changes: 4 additions & 0 deletions tools/rtkbase_update.sh
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,10 @@ upd_2.6.4() {
[ $str2str_active = 'active' ] && systemctl restart str2str_tcp
[ $str2str_file = 'active' ] && systemctl restart str2str_file
[ $rtkrcv_raw2nmea = 'active' ] && systemctl restart rtkbase_raw2nmea
# some users informed me that the archive time was not enabled, fix that:
! systemctl is-active --quiet rtkbase_archive.timer && systemctl enable --now rtkbase_archive.timer
# restarting the gnss proxy service:
systemctl is-active --quiet rtkbase_gnss_web_proxy.service && systemctl restart rtkbase_gnss_web_proxy.service
echo 'Main service restarted'
}

Expand Down
4 changes: 2 additions & 2 deletions web_app/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -647,7 +647,7 @@ def detect_receiver(json_msg):
#print("DEBUG json_msg: ", json_msg)
answer = subprocess.run([os.path.join(rtkbase_path, "tools", "install.sh"), "--user", rtkbaseconfig.get("general", "user"), "--detect-gnss", "--no-write-port"], encoding="UTF-8", stderr=subprocess.PIPE, stdout=subprocess.PIPE, check=False)
if answer.returncode == 0 and "/dev/" in answer.stdout:
#print("DEBUG ok stdout: ", answer.stdout)
print(answer.stdout)
try:
device_info = next(x for x in answer.stdout.splitlines() if x.startswith('/dev/')).split(' - ')
port, gnss_type, speed, firmware, model = [x.strip() for x in device_info]
Expand Down Expand Up @@ -694,7 +694,7 @@ def configure_receiver(brand="", model=""):

print("configuring {} gnss receiver model {}".format(brand, model))
answer = subprocess.run([os.path.join(rtkbase_path, "tools", "install.sh"), "--user", rtkbaseconfig.get("general", "user"), "--configure-gnss"], encoding="UTF-8", stderr=subprocess.PIPE, stdout=subprocess.PIPE, check=False)
#print("DEBUG - stdout: ", answer.stdout)
print(answer.stdout)
#print("DEBUG - returncode: ", answer.returncode)

if answer.returncode == 0: # and "Done" in answer.stdout:
Expand Down