From 39fc4ad33119ab442c4db3c282352cc6ec859d97 Mon Sep 17 00:00:00 2001 From: Noe Date: Mon, 26 Feb 2024 16:56:19 +0100 Subject: [PATCH] Fixed path problems in front-end (configuration tab) Push scripts for battery logging download and battery firmware update --- .../App/Backend/DataTypes/Methods/ExoCmd.cs | 4 +- .../downloadBatteryLogs/download-bms-log | 284 ++++++++++++++++ .../download_battery_logs.sh | 70 ++++ csharp/App/SaliMax/uploadBatteryFw/AF0A.bin | Bin 0 -> 589824 bytes .../uploadBatteryFw/update_firmware.sh | 29 ++ .../uploadBatteryFw/upload-bms-firmware | 303 ++++++++++++++++++ .../dashboards/Installations/Installation.tsx | 4 +- .../dashboards/Installations/index.tsx | 31 +- 8 files changed, 712 insertions(+), 13 deletions(-) create mode 100644 csharp/App/SaliMax/downloadBatteryLogs/download-bms-log create mode 100755 csharp/App/SaliMax/downloadBatteryLogs/download_battery_logs.sh create mode 100644 csharp/App/SaliMax/uploadBatteryFw/AF0A.bin create mode 100755 csharp/App/SaliMax/uploadBatteryFw/update_firmware.sh create mode 100755 csharp/App/SaliMax/uploadBatteryFw/upload-bms-firmware diff --git a/csharp/App/Backend/DataTypes/Methods/ExoCmd.cs b/csharp/App/Backend/DataTypes/Methods/ExoCmd.cs index d6fe2b8a4..eadfaf265 100644 --- a/csharp/App/Backend/DataTypes/Methods/ExoCmd.cs +++ b/csharp/App/Backend/DataTypes/Methods/ExoCmd.cs @@ -296,7 +296,7 @@ public static class ExoCmd byte[] replyData = udpClient.Receive(ref remoteEndPoint); string replyMessage = Encoding.UTF8.GetString(replyData); Console.WriteLine("Received " + replyMessage + " from installation " + installation.VpnIp); - break; + return true; } catch (SocketException ex) { @@ -310,7 +310,7 @@ public static class ExoCmd } - return true; + return false; //var s3Region = new S3Region($"https://{installation.S3Region}.{installation.S3Provider}", S3Credentials!); //var url = s3Region.Bucket(installation.BucketName()).Path("config.json"); diff --git a/csharp/App/SaliMax/downloadBatteryLogs/download-bms-log b/csharp/App/SaliMax/downloadBatteryLogs/download-bms-log new file mode 100644 index 000000000..b9c2e8f23 --- /dev/null +++ b/csharp/App/SaliMax/downloadBatteryLogs/download-bms-log @@ -0,0 +1,284 @@ +#!/usr/bin/python2 -u +# coding=utf-8 +import os +import re +import struct +import serial +import logging +from sys import argv, exit +from datetime import datetime +from pymodbus.pdu import ModbusRequest, ModbusResponse, ExceptionResponse +from pymodbus.other_message import ReportSlaveIdRequest +from pymodbus.exceptions import ModbusException +from pymodbus.pdu import ExceptionResponse +from pymodbus.factory import ClientDecoder +from pymodbus.client import ModbusSerialClient as Modbus +logging.basicConfig(level=logging.INFO) + + + +# trick the pycharm type-checker into thinking Callable is in scope, not used at runtime +# noinspection PyUnreachableCode +if False: + from typing import List, Optional, NoReturn + +RESET_REGISTER = 0x2087 +FIRMWARE_VERSION_REGISTER = 1054 +SERIAL_STARTER_DIR = '/opt/victronenergy/serial-starter/' +INSTALLATION_NAME_FILE = '/data/innovenergy/openvpn/installation-name' +OUTPUT_DIR = '/data/innovenergy' + + +class ReadLogRequest(ModbusRequest): + + function_code = 0x42 + _rtu_frame_size = 5 # not used + + def __init__(self, address = None, **kwargs): + + ModbusRequest.__init__(self, **kwargs) + self.sub_function = 0 if address is None else 1 + self.address = address + + # FUGLY as hell, but necessary bcs PyModbus cannot deal + # with responses that have lengths depending on the sub_function. + # it goes without saying that this isn't thread-safe + ReadLogResponse._rtu_frame_size = 9 if self.sub_function == 0 else 9+128 + + def encode(self): + + if self.sub_function == 0: + return struct.pack('>B', self.sub_function) + else: + return struct.pack('>BI', self.sub_function, self.address) + + def decode(self, data): + self.sub_function = struct.unpack('>B', data) + + def execute(self, context): + print("EXECUTE1") + + def get_response_pdu_size(self): + return ReadLogResponse._rtu_frame_size - 3 + + def __str__(self): + return "ReadLogAddressRequest" + + +class ReadLogResponse(ModbusResponse): + + function_code = 0x42 + _rtu_frame_size = 9 # the WHOLE frame incl crc + + def __init__(self, sub_function=0, address=b'\x00', data=None, **kwargs): + ModbusResponse.__init__(self, **kwargs) + self.sub_function = sub_function + self.address = address + self.data = data + + def encode(self): + pass + + def decode(self, data): + self.address, self.address = struct.unpack_from(">BI", data) + self.data = data[5:] + + def __str__(self): + arguments = (self.function_code, self.address) + return "ReadLogAddressResponse(%s, %s)" % arguments + +# unfortunately we have to monkey-patch this global table because +# the current (victron) version of PyModbus does not have a +# way to "register" new function-codes yet +ClientDecoder.function_table.append(ReadLogResponse) + + +class LockTTY(object): + + def __init__(self, tty): + # type: (str) -> None + self.tty = tty + + def __enter__(self): + os.system(SERIAL_STARTER_DIR + 'stop-tty.sh ' + self.tty) + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + os.system(SERIAL_STARTER_DIR + 'start-tty.sh ' + self.tty) + + +def wrap_try_except(error_msg): + def decorate(f): + def applicator(*args, **kwargs): + try: + return f(*args, **kwargs) + except: + print(error_msg) + exit(1) + return applicator + return decorate + + +def init_modbus(tty): + # type: (str) -> Modbus + + return Modbus( + port='/dev/' + tty, + method='rtu', + baudrate=115200, + stopbits=1, + bytesize=8, + timeout=0.5, # seconds + parity=serial.PARITY_ODD) + + +@wrap_try_except("Failed to download BMS log!") +def download_log(modbus, node_id, battery_id): + # type: (Modbus, int, str) -> NoReturn + + # Get address of latest log entry + # request = ReadLogRequest(unit=slave_id) + + print ('downloading BMS log from node ' + str(node_id) + ' ...') + + progress = -1 + log_file = battery_id + "-node" + str(node_id) + "-" + datetime.now().strftime('%d-%m-%Y') + ".bin" + print(log_file) + + with open(log_file, 'w') as f: + + eof = 0x200000 + record = 0x40 + for address in range(0, eof, 2*record): + + percent = int(100*address/eof) + + if percent != progress: + progress = percent + print('\r{}% '.format(progress),end='') + + request = ReadLogRequest(address, slave=node_id) + result = modbus.execute(request) # type: ReadLogResponse + + address1 = "{:06X}".format(address) + address2 = "{:06X}".format(address+record) + + data1 = result.data[:record] + data2 = result.data[record:] + + line1 = address1 + ":" + ''.join('{:02X}'.format(byte) for byte in data1) + line2 = address2 + ":" + ''.join('{:02X}'.format(byte) for byte in data2) + + lines = line1 + "\n" + line2 + "\n" + f.write(lines) + + print("\r100%") + print("done") + print("wrote log to " + log_file) + + return True + + +@wrap_try_except("Failed to contact battery!") +def identify_battery(modbus, node_id): + # type: (Modbus, int) -> str + + target = 'battery #' + str(node_id) + print('contacting ' + target + ' ...') + + request = ReportSlaveIdRequest(slave=node_id) + response = modbus.execute(request) + + index_of_ff = response.identifier.find(b'\xff') + sid_response = response.identifier[index_of_ff + 1:].decode('utf-8').split(' ') + + response = modbus.read_input_registers(address=FIRMWARE_VERSION_REGISTER, count=1, slave=node_id) + + fw = '{0:0>4X}'.format(response.registers[0]) + print("log string is",sid_response[0]+"-"+sid_response[1]+"-"+fw) + + #return re.sub(" +", "-", sid + " " + fw) + return sid_response[0]+"-"+sid_response[1]+"-"+fw + + +def is_int(value): + # type: (str) -> bool + try: + _ = int(value) + return True + except ValueError: + return False + + +def print_usage(): + print ('Usage: ' + __file__ + ' ') + print ('Example: ' + __file__ + ' 2 ttyUSB0') + print ('') + print ('You can omit the "ttyUSB" prefix of the serial device:') + print (' ' + __file__ + ' 2 0') + print ('') + print ('You can omit the serial device entirely when the "com.victronenergy.battery." service is running:') + print (' ' + __file__ + ' 2') + print ('') + + +def get_tty_from_battery_service_name(): + # type: () -> Optional[str] + + import dbus + bus = dbus.SystemBus() + + tty = ( + name.split('.')[-1] + for name in bus.list_names() + if name.startswith('com.victronenergy.battery.') + ) + + return next(tty, None) + + +def parse_tty(tty): + # type: (Optional[str]) -> str + + if tty is None: + return get_tty_from_battery_service_name() + + if is_int(tty): + return 'ttyUSB' + argv[1] + else: + return tty + + +def parse_cmdline_args(argv): + # type: (List[str]) -> (str, int) + + slave_id = element_at_or_none(argv, 0) + tty = parse_tty(element_at_or_none(argv, 1)) + + if slave_id is None or tty is None: + print_usage() + exit(2) + + print("tty=",tty) + print("slave id= ",slave_id) + + return tty, int(slave_id) + + +def element_at_or_none(lst, index): + return next(iter(lst[index:]), None) + + +def main(argv): + # type: (List[str]) -> () + + tty, node_id = parse_cmdline_args(argv) + + with init_modbus(tty) as modbus: + battery_id = identify_battery(modbus, node_id) + download_log(modbus, node_id, battery_id) + + exit(0) + + +main(argv[1:]) diff --git a/csharp/App/SaliMax/downloadBatteryLogs/download_battery_logs.sh b/csharp/App/SaliMax/downloadBatteryLogs/download_battery_logs.sh new file mode 100755 index 000000000..20c3f05b4 --- /dev/null +++ b/csharp/App/SaliMax/downloadBatteryLogs/download_battery_logs.sh @@ -0,0 +1,70 @@ +#!/bin/bash + +#Prototype 10.2.3.115 Prototype +#Salimax0001 10.2.3.104 Marti Technik (Bern) +#Salimax0002 10.2.4.29 Weidmann d (ZG) +#Salimax0003 10.2.4.33 Elektrotechnik Stefan GmbH +#Salimax0004 10.2.4.32 Biohof Gubelmann (Walde) +#Salimax0005 10.2.4.36 Schreinerei Schönthal (Thun) +#Salimax0006 10.2.4.35 Steakhouse Mettmenstetten +#Salimax0007 10.2.4.154 LerchenhofHerr Twannberg +#Salimax0008 10.2.4.113 Wittmann Kottingbrunn + +dotnet_version='net6.0' +ip_address="$1" +battery_ids="$2" +username='ie-entwicklung' +root_password='Salimax4x25' + +if [ "$#" -lt 2 ]; then + echo "Error: Insufficient arguments. Usage: $0 " + exit 1 +fi + +# Function to expand battery ids from a range +expand_battery_ids() { + local range="$1" + local expanded_ids=() + + IFS='-' read -r start end <<< "$range" + for ((i = start; i <= end; i++)); do + expanded_ids+=("$i") + done + + echo "${expanded_ids[@]}" +} + +# Check if battery_ids_arg contains a hyphen indicating a range +if [[ "$battery_ids" == *-* ]]; then + # Expand battery ids from the range + battery_ids=$(expand_battery_ids "$battery_ids") +else + # Use the provided battery ids + battery_ids=("$battery_ids") +fi + +echo "ip_address: $ip_address" +echo "Battery_ids: ${battery_ids[@]}" + +#ip_addresses=("10.2.3.115" "10.2.3.104" "10.2.4.33" "10.2.4.32" "10.2.4.36" "10.2.4.35" "10.2.4.154" "10.2.4.113" "10.2.4.29") +#battery_ids=("2" "3" "4" "5" "6" "7" "8" "9" "10" "11") + +set -e + +scp download-bms-log "$username"@"$ip_address":/home/"$username" +ssh "$username"@"$ip_address" "echo '$root_password' | sudo -S systemctl stop battery.service" +ssh "$username"@"$ip_address" "echo '$root_password' | sudo -S apt install python3-pip -y" +ssh "$username"@"$ip_address" "echo '$root_password' | sudo -S pip3 install pymodbus" + +for battery in "${battery_ids[@]}"; do + ssh "$username"@"$ip_address" "echo '$root_password' | sudo -S python3 download-bms-log " "$battery" " ttyUSB0" +done +ssh "$username"@"$ip_address" "echo '$root_password' | sudo -S systemctl start battery.service" +ssh "$username"@"$ip_address" "echo '$root_password' | sudo -S rm download-bms-log" +scp "$username"@"$ip_address":/home/"$username/*.bin" . +ssh "$username"@"$ip_address" "echo '$root_password' | sudo -S rm *.bin" + +echo "Deployed and ran commands on $ip_address" +done + + diff --git a/csharp/App/SaliMax/uploadBatteryFw/AF0A.bin b/csharp/App/SaliMax/uploadBatteryFw/AF0A.bin new file mode 100644 index 0000000000000000000000000000000000000000..e5b7b9aba4bd3faaa32acad19314bfac5a4307da GIT binary patch literal 589824 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 J@c);A{{wk90$Bh6 literal 0 HcmV?d00001 diff --git a/csharp/App/SaliMax/uploadBatteryFw/update_firmware.sh b/csharp/App/SaliMax/uploadBatteryFw/update_firmware.sh new file mode 100755 index 000000000..fab8d1174 --- /dev/null +++ b/csharp/App/SaliMax/uploadBatteryFw/update_firmware.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +dotnet_version='net6.0' +salimax_ip="$1" +username='ie-entwicklung' +root_password='Salimax4x25' + +set -e + +ip_addresses=("10.2.3.115" "10.2.3.104" "10.2.4.33" "10.2.4.32" "10.2.4.36" "10.2.4.35" "10.2.4.154" "10.2.4.113" "10.2.4.29") +battery_ids=("2" "3" "4" "5" "6" "7" "8" "9" "10" "11") + + +for ip_address in "${ip_addresses[@]}"; do + scp upload-bms-firmware AF0A.bin "$username"@"$ip_address":/home/"$username" + ssh "$username"@"$ip_address" "echo '$root_password' | sudo -S systemctl stop battery.service" + ssh "$username"@"$ip_address" "echo '$root_password' | sudo -S apt install python3-pip -y" + ssh "$username"@"$ip_address" "echo '$root_password' | sudo -S pip3 install pymodbus" + + for battery in "${battery_ids[@]}"; do + ssh "$username"@"$ip_address" "echo '$root_password' | sudo -S python3 upload-bms-firmware ttyUSB0 " "$battery" " AF0A.bin" + done + ssh "$username"@"$ip_address" "echo '$root_password' | sudo -S systemctl start battery.service" + ssh "$username"@"$ip_address" "echo '$root_password' | sudo -S systemctl rm upload-bms-firmware AF0A.bin" + +echo "Deployed and ran commands on $ip_address" +done + + diff --git a/csharp/App/SaliMax/uploadBatteryFw/upload-bms-firmware b/csharp/App/SaliMax/uploadBatteryFw/upload-bms-firmware new file mode 100755 index 000000000..458fe44ed --- /dev/null +++ b/csharp/App/SaliMax/uploadBatteryFw/upload-bms-firmware @@ -0,0 +1,303 @@ +#!/usr/bin/python2 -u +# coding=utf-8 + +import os +import struct +from time import sleep + +import serial +from os import system +import logging + +from pymodbus.client import ModbusSerialClient as Modbus +from pymodbus.exceptions import ModbusIOException +from pymodbus.pdu import ModbusResponse +from os.path import dirname, abspath +from sys import path, argv, exit + +path.append(dirname(dirname(abspath(__file__)))) + +PAGE_SIZE = 0x100 +HALF_PAGE =int( PAGE_SIZE / 2) +WRITE_ENABLE = [1] +FIRMWARE_VERSION_REGISTER = 1054 + +ERASE_FLASH_REGISTER = 0x2084 +RESET_REGISTER = 0x2087 +logging.basicConfig(level=logging.INFO) + + +# trick the pycharm type-checker into thinking Callable is in scope, not used at runtime +# noinspection PyUnreachableCode +if False: + from typing import List, NoReturn, Iterable, Optional + + +class LockTTY(object): + + def __init__(self, tty): + # type: (str) -> None + self.tty = tty + + def __enter__(self): + system(SERIAL_STARTER_DIR + 'stop-tty.sh ' + self.tty) + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + system(SERIAL_STARTER_DIR + 'start-tty.sh ' + self.tty) + + +def calc_stm32_crc_round(crc, data): + # type: (int, int) -> int + crc = crc ^ data + for _ in range(32): + xor = (crc & 0x80000000) != 0 + crc = (crc & 0x7FFFFFFF) << 1 # clear bit 31 because python ints have "infinite" bits + if xor: + crc = crc ^ 0x04C11DB7 + + return crc + + +def calc_stm32_crc(data): + # type: (Iterable[int]) -> int + crc = 0xFFFFFFFF + + for dw in data: + crc = calc_stm32_crc_round(crc, dw) + + return crc + + +def init_modbus(tty): + # type: (str) -> Modbus + + return Modbus( + port='/dev/' + tty, + method='rtu', + baudrate=115200, + stopbits=1, + bytesize=8, + timeout=0.5, # seconds + parity=serial.PARITY_ODD) + + +def failed(response): + # type: (ModbusResponse) -> bool + + # Todo 'ModbusIOException' object has no attribute 'function_code' + return response.function_code > 0x80 + + +def clear_flash(modbus, slave_address): + # type: (Modbus, int) -> bool + + print ('erasing flash...') + + write_response = modbus.write_registers(address=0x2084, values=[1], slave=slave_address) + + if failed(write_response): + print('erasing flash FAILED') + return False + + flash_countdown = 17 + while flash_countdown > 0: + read_response = modbus.read_holding_registers(address=0x2085, count=1, slave=slave_address) + + if failed(read_response): + print('erasing flash FAILED') + return False + + if read_response.registers[0] != flash_countdown: + flash_countdown = read_response.registers[0] + + msg = str(100 * (16 - flash_countdown) / 16) + '%' + print('\r{0} '.format(msg), end=' ') + + print('done!') + + return True + + +# noinspection PyShadowingBuiltins +def bytes_to_words(bytes): + # type: (str) -> List[int] + return list(struct.unpack('>' + int(len(bytes)/2) * 'H', bytes)) + + +def send_half_page_1(modbus, slave_address, data, page): + # type: (Modbus, int, str, int) -> NoReturn + + first_half = [page] + bytes_to_words(data[:HALF_PAGE]) + write_first_half = modbus.write_registers(0x2000, first_half, slave=slave_address) + + if failed(write_first_half): + raise Exception("Failed to write page " + str(page)) + + +def send_half_page_2(modbus, slave_address, data, page): + # type: (Modbus, int, str, int) -> NoReturn + + registers = bytes_to_words(data[HALF_PAGE:]) + calc_crc(page, data) + WRITE_ENABLE + result = modbus.write_registers(0x2041, registers, slave=slave_address) + + if failed(result): + raise Exception("Failed to write page " + str(page)) + + +def get_fw_name(fw_path): + # type: (str) -> str + return fw_path.split('/')[-1].split('.')[0] + + +def upload_fw(modbus, slave_id, fw_path, fw_name): + # type: (Modbus, int, str, str) -> NoReturn + + with open(fw_path, "rb") as f: + + size = os.fstat(f.fileno()).st_size + n_pages = int(size / PAGE_SIZE) + + print('uploading firmware ' + fw_name + ' to BMS ...') + + for page in range(0, n_pages): + page_data = f.read(PAGE_SIZE) + + msg = "page " + str(page + 1) + '/' + str(n_pages) + ' ' + str(100 * page / n_pages + 1) + '%' + print('\r{0} '.format(msg), end=' ') + + if is_page_empty(page_data): + continue + sleep(0.01) + send_half_page_1(modbus, slave_id, page_data, page) + sleep(0.01) + send_half_page_2(modbus, slave_id, page_data, page) + + +def is_page_empty(page): + # type: (str) -> bool + return page.count(b'\xff') == len(page) + + +def reset_bms(modbus, slave_id): + # type: (Modbus, int) -> bool + + print ('resetting BMS...') + + result = modbus.write_registers(RESET_REGISTER, [1], slave=slave_id) + + # expecting a ModbusIOException (timeout) + # BMS can no longer reply because it is already reset + success = isinstance(result, ModbusIOException) + + if success: + print('done') + else: + print('FAILED to reset battery!') + + return success + + +def calc_crc(page, data): + # type: (int, str) -> List[int] + + crc = calc_stm32_crc([page] + bytes_to_words(data)) + crc_bytes = struct.pack('>L', crc) + + return bytes_to_words(crc_bytes) + + +def identify_battery(modbus, slave_id): + # type: (Modbus, int) -> Optional[str] + print("slave id=",slave_id) + target = 'battery ' + str(slave_id) + ' at ' + '502' + + try: + + print(('contacting ...')) + + response = modbus.read_input_registers(address=FIRMWARE_VERSION_REGISTER, count=1, slave=slave_id) + fw = '{0:0>4X}'.format(response.registers[0]) + + print(('found battery with firmware ' + fw)) + + return fw + + except: + print(('failed to communicate with ')) + return None + + +def print_usage(): + print(('Usage: ' + __file__ + ' ')) + print(('Example: ' + __file__ + ' ttyUSB0 2 A08C.bin')) + + +def parse_cmdline_args(argv): + # type: (List[str]) -> (str, str, str, str) + + def fail_with(msg): + print(msg) + print_usage() + exit(1) + + if len(argv) < 1: + fail_with('missing argument for tty device') + + if len(argv) < 2: + fail_with('missing argument for battery ID') + + if len(argv) < 3: + fail_with('missing argument for firmware') + + return argv[0], int(argv[1]), argv[2], get_fw_name(argv[2]) + + +def verify_firmware(modbus, battery_id, fw_name): + # type: (Modbus, int, str) -> NoReturn + + fw_verify = identify_battery(modbus, battery_id) + + if fw_verify == fw_name: + print('SUCCESS') + else: + print('FAILED to verify uploaded firmware!') + if fw_verify is not None: + print('expected firmware version ' + fw_name + ' but got ' + fw_verify) + + +def wait_for_bms_reboot(): + # type: () -> NoReturn + + # wait 20s for the battery to reboot + + print('waiting for BMS to reboot...') + + for t in range(20, 0, -1): + print('\r{0} '.format(t), end=' ') + sleep(1) + + print('0') + + +def main(argv): + # type: (List[str]) -> NoReturn + + tty, battery_id, fw_path, fw_name = parse_cmdline_args(argv) + with init_modbus(tty) as modbus: + + if identify_battery(modbus, battery_id) is None: + return + + clear_flash(modbus, battery_id) + upload_fw(modbus, battery_id, fw_path, fw_name) + + if not reset_bms(modbus, battery_id): + return + + wait_for_bms_reboot() + + verify_firmware(modbus, battery_id, fw_name) + + +main(argv[1:]) diff --git a/typescript/frontend-marios2/src/content/dashboards/Installations/Installation.tsx b/typescript/frontend-marios2/src/content/dashboards/Installations/Installation.tsx index 8c0295fdc..3f83af635 100644 --- a/typescript/frontend-marios2/src/content/dashboards/Installations/Installation.tsx +++ b/typescript/frontend-marios2/src/content/dashboards/Installations/Installation.tsx @@ -78,7 +78,9 @@ function Installation(props: singleInstallationProps) { const fetchDataOnlyOneTime = async () => { let success = false; - while (true) { + const max_retransmissions = 3; + + for (let i = 0; i < max_retransmissions; i++) { success = await fetchDataPeriodically(); await new Promise((resolve) => setTimeout(resolve, 1000)); if (success) { diff --git a/typescript/frontend-marios2/src/content/dashboards/Installations/index.tsx b/typescript/frontend-marios2/src/content/dashboards/Installations/index.tsx index 94bd65089..deb2b99ec 100644 --- a/typescript/frontend-marios2/src/content/dashboards/Installations/index.tsx +++ b/typescript/frontend-marios2/src/content/dashboards/Installations/index.tsx @@ -67,6 +67,25 @@ function InstallationTabs() { setCurrentTab(value); }; + const navigateToTabPath = (pathname: string, tab_value: string): string => { + let pathlist = pathname.split('/'); + let ret_path = ''; + for (let i = 1; i < pathlist.length; i++) { + if (Number.isNaN(Number(pathlist[i]))) { + ret_path += '/'; + ret_path += pathlist[i]; + } else { + ret_path += '/'; + ret_path += pathlist[i]; + ret_path += '/'; + break; + } + } + + ret_path += tab_value; + return ret_path; + }; + const singleInstallationTabs = currentUser.hasWriteAccess ? [ { @@ -275,10 +294,7 @@ function InstallationTabs() { to={ tab.value === 'list' || tab.value === 'tree' ? routes[tab.value] - : location.pathname.substring( - 0, - location.pathname.lastIndexOf('/') + 1 - ) + routes[tab.value] + : navigateToTabPath(location.pathname, routes[tab.value]) } /> ))} @@ -334,12 +350,7 @@ function InstallationTabs() { value={tab.value} component={Link} label={tab.label} - to={ - location.pathname.substring( - 0, - location.pathname.lastIndexOf('/') + 1 - ) + routes[tab.value] - } + to={routes[tab.value]} /> ))}