diff --git a/CHANGELOG.md b/CHANGELOG.md index 02a02ee0..6854d37d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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) diff --git a/README.md b/README.md index 5697e039..a3e466db 100644 --- a/README.md +++ b/README.md @@ -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/.... diff --git a/receiver_cfg/Unicore_UM960_rtcm3.cfg b/receiver_cfg/Unicore_UM960_rtcm3.cfg new file mode 100644 index 00000000..4fbfe19e --- /dev/null +++ b/receiver_cfg/Unicore_UM960_rtcm3.cfg @@ -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 \ No newline at end of file diff --git a/tools/bin/RTKLIB-2.5.0/aarch64/convbin b/tools/bin/RTKLIB-2.5.0/aarch64/convbin index 1394a195..0168378d 100755 Binary files a/tools/bin/RTKLIB-2.5.0/aarch64/convbin and b/tools/bin/RTKLIB-2.5.0/aarch64/convbin differ diff --git a/tools/bin/RTKLIB-2.5.0/aarch64/rtkrcv b/tools/bin/RTKLIB-2.5.0/aarch64/rtkrcv index 57e8b626..f21dab5f 100755 Binary files a/tools/bin/RTKLIB-2.5.0/aarch64/rtkrcv and b/tools/bin/RTKLIB-2.5.0/aarch64/rtkrcv differ diff --git a/tools/bin/RTKLIB-2.5.0/aarch64/str2str b/tools/bin/RTKLIB-2.5.0/aarch64/str2str index d18a99f8..bac07a27 100755 Binary files a/tools/bin/RTKLIB-2.5.0/aarch64/str2str and b/tools/bin/RTKLIB-2.5.0/aarch64/str2str differ diff --git a/tools/find_rtkbase/readme.md b/tools/find_rtkbase/readme.md index 205edf56..96f4cf63 100644 --- a/tools/find_rtkbase/readme.md +++ b/tools/find_rtkbase/readme.md @@ -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: diff --git a/tools/install.sh b/tools/install.sh index 5ebabb72..5b7b307d 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -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/ @@ -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' @@ -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 diff --git a/tools/rtkbase_update.sh b/tools/rtkbase_update.sh index 3f577e32..caec42ad 100755 --- a/tools/rtkbase_update.sh +++ b/tools/rtkbase_update.sh @@ -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' } diff --git a/web_app/server.py b/web_app/server.py index 8e40a868..e36bbc49 100755 --- a/web_app/server.py +++ b/web_app/server.py @@ -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] @@ -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: