diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index 899fb95c1..69fa7f9ee 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -27,6 +27,7 @@ For more details go to [docs.emsesp.org](https://docs.emsesp.org/). - analog dac output and inputs on dac pins [#2201](https://github.com/emsesp/EMS-ESP32/discussions/2201) - api memory leak [#2216](https://github.com/emsesp/EMS-ESP32/issues/2216) - modbus multiple mixers [#2229](https://github.com/emsesp/EMS-ESP32/issues/2229) +- Last Will (LWT) not set on MQTT Connect [#2247](https://github.com/emsesp/EMS-ESP32/issues/2247) ## Changed diff --git a/docs/Modbus-Entity-Registers.md b/docs/Modbus-Entity-Registers.md index 3599f039b..b694353c6 100644 --- a/docs/Modbus-Entity-Registers.md +++ b/docs/Modbus-Entity-Registers.md @@ -3629,6 +3629,10 @@ | flowsettemp | setpoint flow temperature | uint8 (>=0<=254) | C | true | HC | 2 | 1 | 1 | | pumpstatus | pump status (PC1) | boolean | | true | HC | 3 | 1 | 1 | | flowtempvf | flow temperature in header (T0/Vf) | uint16 (>=0<=3199) | C | false | HC | 6 | 1 | 1/10 | + +### IPM2 +| shortname | fullname | type | uom | writeable | tag type | register offset | register count | scale factor | +|-|-|-|-|-|-|-|-|-| | flowtemphc | flow temperature (TC1) | uint16 (>=0<=3199) | C | false | HC | 0 | 1 | 1/10 | | valvestatus | mixing valve actuator (VC1) | uint8 (>=0<=100) | % | false | HC | 1 | 1 | 1 | | flowsettemp | setpoint flow temperature | uint8 (>=0<=254) | C | true | HC | 2 | 1 | 1 | @@ -5610,6 +5614,10 @@ | disinfectiontemp | disinfection temperature | uint8 (>=0<=254) | C | true | DHW | 8 | 1 | 1 | | circ | circulation active | boolean | | true | DHW | 9 | 1 | 1 | | circmode | circulation pump mode | enum [off\|on\|auto\|own prog] | | true | DHW | 10 | 1 | 1 | + +### IPM2 +| shortname | fullname | type | uom | writeable | tag type | register offset | register count | scale factor | +|-|-|-|-|-|-|-|-|-| | seltemp | selected temperature | uint8 (>=0<=254) | C | true | DHW | 0 | 1 | 1 | | temp | current temperature | uint16 (>=0<=3199) | C | false | DHW | 1 | 1 | 1/10 | | curtemp2 | current extern temperature | uint16 (>=0<=3199) | C | false | DHW | 2 | 1 | 1/10 | @@ -5654,51 +5662,51 @@ | shortname | fullname | type | uom | writeable | tag type | register offset | register count | scale factor | |-|-|-|-|-|-|-|-|-| | temp | current temperature | uint16 (>=0<=3199) | C | false | DHW | 1 | 1 | 1/10 | -| storagetemp1 | storage intern temperature | uint16 (>=0<=3199) | C | false | DHW | 1 | 1 | 1/10 | -| coldtemp | cold water | uint16 (>=0<=3199) | C | false | DHW | 2 | 1 | 1/10 | -| temp5 | temperature 5 | uint16 (>=0<=3199) | C | false | DHW | 3 | 1 | 1/10 | -| rettemp | return temperature | uint16 (>=0<=3199) | C | false | DHW | 4 | 1 | 1/10 | +| storagetemp1 | storage intern temperature | uint16 (>=0<=3199) | C | false | DHW | 16 | 1 | 1/10 | +| coldtemp | cold water | uint16 (>=0<=3199) | C | false | DHW | 17 | 1 | 1/10 | +| temp5 | temperature 5 | uint16 (>=0<=3199) | C | false | DHW | 18 | 1 | 1/10 | +| rettemp | return temperature | uint16 (>=0<=3199) | C | false | DHW | 19 | 1 | 1/10 | | pump | pump | boolean | | false | DHW | 4 | 1 | 1 | | maxtemp | maximum temperature | uint8 (>=0<=254) | C | true | DHW | 12 | 1 | 1 | | seltemp | selected temperature | uint8 (>=0<=254) | C | true | DHW | 0 | 1 | 1 | | redtemp | reduced temperature | uint8 (>=0<=254) | C | true | DHW | 14 | 1 | 1 | -| hottemp | extra hot temperature | uint8 (>=0<=254) | C | true | DHW | 9 | 1 | 1 | -| dailytemp | daily temperature | uint8 (>=0<=254) | C | true | DHW | 10 | 1 | 1 | +| hottemp | extra hot temperature | uint8 (>=0<=254) | C | true | DHW | 20 | 1 | 1 | +| dailytemp | daily temperature | uint8 (>=0<=254) | C | true | DHW | 21 | 1 | 1 | | disinfectiontemp | disinfection temperature | uint8 (>=0<=254) | C | true | DHW | 8 | 1 | 1 | | circ | circulation active | boolean | | true | DHW | 9 | 1 | 1 | | circmode | circulation pump mode | enum [off\|1x3min\|2x3min\|3x3min\|4x3min\|5x3min\|6x3min\|continuous] | | true | DHW | 10 | 1 | 1 | -| circtc | circulation time controled | boolean | | true | DHW | 14 | 1 | 1 | -| keepwarm | keep warm | boolean | | true | DHW | 15 | 1 | 1 | -| status2 | status 2 | enum [\|\|\|no heat\|\|\|heat request\|\|disinfecting\|hold] | | false | DHW | 16 | 1 | 1 | -| pumpmod | pump modulation | uint8 (>=0<=100) | % | false | DHW | 17 | 1 | 1 | -| flow | flow rate | uint16 (>=0<=3199) | l/min | false | DHW | 18 | 1 | 1/10 | -| valvereturn | return valve | uint8 (>=0<=100) | % | true | DHW | 19 | 1 | 1 | -| deltatret | temp. diff. return valve | uint8 (>=0<=254) | K | true | DHW | 20 | 1 | 1 | -| errordisp | error display | enum [off\|normal\|inverted] | | true | DHW | 21 | 1 | 1 | +| circtc | circulation time controled | boolean | | true | DHW | 22 | 1 | 1 | +| keepwarm | keep warm | boolean | | true | DHW | 23 | 1 | 1 | +| status2 | status 2 | enum [\|\|\|no heat\|\|\|heat request\|\|disinfecting\|hold] | | false | DHW | 24 | 1 | 1 | +| pumpmod | pump modulation | uint8 (>=0<=100) | % | false | DHW | 25 | 1 | 1 | +| flow | flow rate | uint16 (>=0<=3199) | l/min | false | DHW | 26 | 1 | 1/10 | +| valvereturn | return valve | uint8 (>=0<=100) | % | true | DHW | 27 | 1 | 1 | +| deltatret | temp. diff. return valve | uint8 (>=0<=254) | K | true | DHW | 28 | 1 | 1 | +| errordisp | error display | enum [off\|normal\|inverted] | | true | DHW | 29 | 1 | 1 | ### SM200, MS200 | shortname | fullname | type | uom | writeable | tag type | register offset | register count | scale factor | |-|-|-|-|-|-|-|-|-| | temp | current temperature | uint16 (>=0<=3199) | C | false | DHW | 1 | 1 | 1/10 | -| storagetemp1 | storage intern temperature | uint16 (>=0<=3199) | C | false | DHW | 1 | 1 | 1/10 | -| coldtemp | cold water | uint16 (>=0<=3199) | C | false | DHW | 2 | 1 | 1/10 | -| temp5 | temperature 5 | uint16 (>=0<=3199) | C | false | DHW | 3 | 1 | 1/10 | -| rettemp | return temperature | uint16 (>=0<=3199) | C | false | DHW | 4 | 1 | 1/10 | +| storagetemp1 | storage intern temperature | uint16 (>=0<=3199) | C | false | DHW | 16 | 1 | 1/10 | +| coldtemp | cold water | uint16 (>=0<=3199) | C | false | DHW | 17 | 1 | 1/10 | +| temp5 | temperature 5 | uint16 (>=0<=3199) | C | false | DHW | 18 | 1 | 1/10 | +| rettemp | return temperature | uint16 (>=0<=3199) | C | false | DHW | 19 | 1 | 1/10 | | pump | pump | boolean | | false | DHW | 4 | 1 | 1 | | maxtemp | maximum temperature | uint8 (>=0<=254) | C | true | DHW | 12 | 1 | 1 | | seltemp | selected temperature | uint8 (>=0<=254) | C | true | DHW | 0 | 1 | 1 | | redtemp | reduced temperature | uint8 (>=0<=254) | C | true | DHW | 14 | 1 | 1 | -| hottemp | extra hot temperature | uint8 (>=0<=254) | C | true | DHW | 9 | 1 | 1 | -| dailytemp | daily temperature | uint8 (>=0<=254) | C | true | DHW | 10 | 1 | 1 | +| hottemp | extra hot temperature | uint8 (>=0<=254) | C | true | DHW | 20 | 1 | 1 | +| dailytemp | daily temperature | uint8 (>=0<=254) | C | true | DHW | 21 | 1 | 1 | | disinfectiontemp | disinfection temperature | uint8 (>=0<=254) | C | true | DHW | 8 | 1 | 1 | | circ | circulation active | boolean | | true | DHW | 9 | 1 | 1 | | circmode | circulation pump mode | enum [off\|1x3min\|2x3min\|3x3min\|4x3min\|5x3min\|6x3min\|continuous] | | true | DHW | 10 | 1 | 1 | -| circtc | circulation time controled | boolean | | true | DHW | 14 | 1 | 1 | -| keepwarm | keep warm | boolean | | true | DHW | 15 | 1 | 1 | -| status2 | status 2 | enum [\|\|\|no heat\|\|\|heat request\|\|disinfecting\|hold] | | false | DHW | 16 | 1 | 1 | -| pumpmod | pump modulation | uint8 (>=0<=100) | % | false | DHW | 17 | 1 | 1 | -| flow | flow rate | uint16 (>=0<=3199) | l/min | false | DHW | 18 | 1 | 1/10 | -| valvereturn | return valve | uint8 (>=0<=100) | % | true | DHW | 19 | 1 | 1 | -| deltatret | temp. diff. return valve | uint8 (>=0<=254) | K | true | DHW | 20 | 1 | 1 | -| errordisp | error display | enum [off\|normal\|inverted] | | true | DHW | 21 | 1 | 1 | +| circtc | circulation time controled | boolean | | true | DHW | 22 | 1 | 1 | +| keepwarm | keep warm | boolean | | true | DHW | 23 | 1 | 1 | +| status2 | status 2 | enum [\|\|\|no heat\|\|\|heat request\|\|disinfecting\|hold] | | false | DHW | 24 | 1 | 1 | +| pumpmod | pump modulation | uint8 (>=0<=100) | % | false | DHW | 25 | 1 | 1 | +| flow | flow rate | uint16 (>=0<=3199) | l/min | false | DHW | 26 | 1 | 1/10 | +| valvereturn | return valve | uint8 (>=0<=100) | % | true | DHW | 27 | 1 | 1 | +| deltatret | temp. diff. return valve | uint8 (>=0<=254) | K | true | DHW | 28 | 1 | 1 | +| errordisp | error display | enum [off\|normal\|inverted] | | true | DHW | 29 | 1 | 1 | diff --git a/docs/dump_entities.csv b/docs/dump_entities.csv index 48a2aee99..9a68b69ed 100644 --- a/docs/dump_entities.csv +++ b/docs/dump_entities.csv @@ -4841,11 +4841,11 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "IPM",mixer,100,flowsettemp,setpoint flow temperature,uint8 (>=0<=254),C,true,number.mixer_hc1_setpoint_flow_temperature,number.mixer_hc1_flowsettemp,7,1,1,2,1 "IPM",mixer,100,pumpstatus,pump status (PC1),boolean, ,true,switch.mixer_hc1_pump_status_(PC1),switch.mixer_hc1_pumpstatus,7,1,1,3,1 "IPM",mixer,100,flowtempvf,flow temperature in header (T0/Vf),uint16 (>=0<=3199),C,false,sensor.mixer_hc1_flow_temperature_in_header_(T0/Vf),sensor.mixer_hc1_flowtempvf,7,1,1/10,6,1 -"IPM",mixer,102,flowtemphc,flow temperature (TC1),uint16 (>=0<=3199),C,false,sensor.mixer_hc1_flow_temperature_(TC1),sensor.mixer_hc1_flowtemphc,7,1,1/10,0,1 -"IPM",mixer,102,valvestatus,mixing valve actuator (VC1),uint8 (>=0<=100),%,false,sensor.mixer_hc1_mixing_valve_actuator_(VC1),sensor.mixer_hc1_valvestatus,7,1,1,1,1 -"IPM",mixer,102,flowsettemp,setpoint flow temperature,uint8 (>=0<=254),C,true,number.mixer_hc1_setpoint_flow_temperature,number.mixer_hc1_flowsettemp,7,1,1,2,1 -"IPM",mixer,102,pumpstatus,pump status (PC1),boolean, ,true,switch.mixer_hc1_pump_status_(PC1),switch.mixer_hc1_pumpstatus,7,1,1,3,1 -"IPM",mixer,102,flowtempvf,flow temperature in header (T0/Vf),uint16 (>=0<=3199),C,false,sensor.mixer_hc1_flow_temperature_in_header_(T0/Vf),sensor.mixer_hc1_flowtempvf,7,1,1/10,6,1 +"IPM2",mixer,102,flowtemphc,flow temperature (TC1),uint16 (>=0<=3199),C,false,sensor.mixer_hc1_flow_temperature_(TC1),sensor.mixer_hc1_flowtemphc,7,1,1/10,0,1 +"IPM2",mixer,102,valvestatus,mixing valve actuator (VC1),uint8 (>=0<=100),%,false,sensor.mixer_hc1_mixing_valve_actuator_(VC1),sensor.mixer_hc1_valvestatus,7,1,1,1,1 +"IPM2",mixer,102,flowsettemp,setpoint flow temperature,uint8 (>=0<=254),C,true,number.mixer_hc1_setpoint_flow_temperature,number.mixer_hc1_flowsettemp,7,1,1,2,1 +"IPM2",mixer,102,pumpstatus,pump status (PC1),boolean, ,true,switch.mixer_hc1_pump_status_(PC1),switch.mixer_hc1_pumpstatus,7,1,1,3,1 +"IPM2",mixer,102,flowtempvf,flow temperature in header (T0/Vf),uint16 (>=0<=3199),C,false,sensor.mixer_hc1_flow_temperature_in_header_(T0/Vf),sensor.mixer_hc1_flowtempvf,7,1,1/10,6,1 "MM50",mixer,159,flowtemphc,flow temperature (TC1),uint16 (>=0<=3199),C,false,sensor.mixer_hc1_flow_temperature_(TC1),sensor.mixer_hc1_flowtemphc,7,1,1/10,0,1 "MM50",mixer,159,valvestatus,mixing valve actuator (VC1),uint8 (>=0<=100),%,false,sensor.mixer_hc1_mixing_valve_actuator_(VC1),sensor.mixer_hc1_valvestatus,7,1,1,1,1 "MM50",mixer,159,flowsettemp,setpoint flow temperature,uint8 (>=0<=254),C,true,number.mixer_hc1_setpoint_flow_temperature,number.mixer_hc1_flowsettemp,7,1,1,2,1 @@ -5224,17 +5224,17 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "IPM",water,100,disinfectiontemp,disinfection temperature,uint8 (>=0<=254),C,true,number.water_dhw_disinfection_temperature,number.water_dhw_disinfectiontemp,19,9,1,8,1 "IPM",water,100,circ,circulation active,boolean, ,true,switch.water_dhw_circulation_active,switch.water_dhw_circ,19,9,1,9,1 "IPM",water,100,circmode,circulation pump mode,enum [off\|on\|auto\|own prog], ,true,select.water_dhw_circulation_pump_mode,select.water_dhw_circmode,19,9,1,10,1 -"IPM",water,102,seltemp,selected temperature,uint8 (>=0<=254),C,true,number.water_dhw_selected_temperature,number.water_dhw_seltemp,19,9,1,0,1 -"IPM",water,102,temp,current temperature,uint16 (>=0<=3199),C,false,sensor.water_dhw_current_temperature,sensor.water_dhw_temp,19,9,1/10,1,1 -"IPM",water,102,curtemp2,current extern temperature,uint16 (>=0<=3199),C,false,sensor.water_dhw_current_extern_temperature,sensor.water_dhw_curtemp2,19,9,1/10,2,1 -"IPM",water,102,hydrTemp,hydraulic header temperature,uint16 (>=0<=3199),C,false,sensor.water_dhw_hydraulic_header_temperature,sensor.water_dhw_hydrTemp,19,9,1/10,3,1 -"IPM",water,102,pump,pump,boolean, ,false,binary_sensor.water_dhw_pump,binary_sensor.water_dhw_pump,19,9,1,4,1 -"IPM",water,102,flowtempoffset,flow temperature offset,uint8 (>=0<=254),C,true,number.water_dhw_flow_temperature_offset,number.water_dhw_flowtempoffset,19,9,1,5,1 -"IPM",water,102,hyston,hysteresis on temperature,int8 (>=-126<=126),C,true,number.water_dhw_hysteresis_on_temperature,number.water_dhw_hyston,19,9,1,6,1 -"IPM",water,102,hystoff,hysteresis off temperature,int8 (>=-126<=126),C,true,number.water_dhw_hysteresis_off_temperature,number.water_dhw_hystoff,19,9,1,7,1 -"IPM",water,102,disinfectiontemp,disinfection temperature,uint8 (>=0<=254),C,true,number.water_dhw_disinfection_temperature,number.water_dhw_disinfectiontemp,19,9,1,8,1 -"IPM",water,102,circ,circulation active,boolean, ,true,switch.water_dhw_circulation_active,switch.water_dhw_circ,19,9,1,9,1 -"IPM",water,102,circmode,circulation pump mode,enum [off\|on\|auto\|own prog], ,true,select.water_dhw_circulation_pump_mode,select.water_dhw_circmode,19,9,1,10,1 +"IPM2",water,102,seltemp,selected temperature,uint8 (>=0<=254),C,true,number.water_dhw_selected_temperature,number.water_dhw_seltemp,19,9,1,0,1 +"IPM2",water,102,temp,current temperature,uint16 (>=0<=3199),C,false,sensor.water_dhw_current_temperature,sensor.water_dhw_temp,19,9,1/10,1,1 +"IPM2",water,102,curtemp2,current extern temperature,uint16 (>=0<=3199),C,false,sensor.water_dhw_current_extern_temperature,sensor.water_dhw_curtemp2,19,9,1/10,2,1 +"IPM2",water,102,hydrTemp,hydraulic header temperature,uint16 (>=0<=3199),C,false,sensor.water_dhw_hydraulic_header_temperature,sensor.water_dhw_hydrTemp,19,9,1/10,3,1 +"IPM2",water,102,pump,pump,boolean, ,false,binary_sensor.water_dhw_pump,binary_sensor.water_dhw_pump,19,9,1,4,1 +"IPM2",water,102,flowtempoffset,flow temperature offset,uint8 (>=0<=254),C,true,number.water_dhw_flow_temperature_offset,number.water_dhw_flowtempoffset,19,9,1,5,1 +"IPM2",water,102,hyston,hysteresis on temperature,int8 (>=-126<=126),C,true,number.water_dhw_hysteresis_on_temperature,number.water_dhw_hyston,19,9,1,6,1 +"IPM2",water,102,hystoff,hysteresis off temperature,int8 (>=-126<=126),C,true,number.water_dhw_hysteresis_off_temperature,number.water_dhw_hystoff,19,9,1,7,1 +"IPM2",water,102,disinfectiontemp,disinfection temperature,uint8 (>=0<=254),C,true,number.water_dhw_disinfection_temperature,number.water_dhw_disinfectiontemp,19,9,1,8,1 +"IPM2",water,102,circ,circulation active,boolean, ,true,switch.water_dhw_circulation_active,switch.water_dhw_circ,19,9,1,9,1 +"IPM2",water,102,circmode,circulation pump mode,enum [off\|on\|auto\|own prog], ,true,select.water_dhw_circulation_pump_mode,select.water_dhw_circmode,19,9,1,10,1 "MM100",water,160,temp,current temperature,uint16 (>=0<=3199),C,false,sensor.water_dhw_current_temperature,sensor.water_dhw_temp,19,9,1/10,1,1 "MM100",water,160,tempstatus,temperature switch in assigned dhw (MC1),int8 (>=-126<=126), ,false,sensor.water_dhw_temperature_switch_in_assigned_dhw_(MC1),sensor.water_dhw_tempstatus,19,9,1,11,1 "MM100",water,160,pump,pump,boolean, ,false,binary_sensor.water_dhw_pump,binary_sensor.water_dhw_pump,19,9,1,4,1 @@ -5255,50 +5255,50 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "MM200",water,161,requiredtemp,required temperature,uint8 (>=0<=254),C,true,number.water_dhw_required_temperature,number.water_dhw_requiredtemp,19,9,1,15,1 "MM200",water,161,circ,circulation active,boolean, ,true,switch.water_dhw_circulation_active,switch.water_dhw_circ,19,9,1,9,1 "MM200",water,161,circmode,circulation pump mode,enum [off\|on\|auto\|own prog], ,true,select.water_dhw_circulation_pump_mode,select.water_dhw_circmode,19,9,1,10,1 -"SM100, MS100",water,163,temp,current temperature,uint16 (>=0<=3199),C,false,sensor.water_dhw3_current_temperature,sensor.water_dhw3_temp,19,11,1/10,1,1 -"SM100, MS100",water,163,storagetemp1,storage intern temperature,uint16 (>=0<=3199),C,false,sensor.water_dhw3_storage_intern_temperature,sensor.water_dhw3_storagetemp1,19,11,1/10,1,1 -"SM100, MS100",water,163,coldtemp,cold water,uint16 (>=0<=3199),C,false,sensor.water_dhw3_cold_water,sensor.water_dhw3_coldtemp,19,11,1/10,2,1 -"SM100, MS100",water,163,temp5,temperature 5,uint16 (>=0<=3199),C,false,sensor.water_dhw3_temperature_5,sensor.water_dhw3_temp5,19,11,1/10,3,1 -"SM100, MS100",water,163,rettemp,return temperature,uint16 (>=0<=3199),C,false,sensor.water_dhw3_return_temperature,sensor.water_dhw3_rettemp,19,11,1/10,4,1 -"SM100, MS100",water,163,pump,pump,boolean, ,false,binary_sensor.water_dhw3_pump,binary_sensor.water_dhw3_pump,19,11,1,4,1 -"SM100, MS100",water,163,maxtemp,maximum temperature,uint8 (>=0<=254),C,true,number.water_dhw3_maximum_temperature,number.water_dhw3_maxtemp,19,11,1,12,1 -"SM100, MS100",water,163,seltemp,selected temperature,uint8 (>=0<=254),C,true,number.water_dhw3_selected_temperature,number.water_dhw3_seltemp,19,11,1,0,1 -"SM100, MS100",water,163,redtemp,reduced temperature,uint8 (>=0<=254),C,true,number.water_dhw3_reduced_temperature,number.water_dhw3_redtemp,19,11,1,14,1 -"SM100, MS100",water,163,hottemp,extra hot temperature,uint8 (>=0<=254),C,true,number.water_dhw3_extra_hot_temperature,number.water_dhw3_hottemp,19,11,1,9,1 -"SM100, MS100",water,163,dailytemp,daily temperature,uint8 (>=0<=254),C,true,number.water_dhw3_daily_temperature,number.water_dhw3_dailytemp,19,11,1,10,1 -"SM100, MS100",water,163,disinfectiontemp,disinfection temperature,uint8 (>=0<=254),C,true,number.water_dhw3_disinfection_temperature,number.water_dhw3_disinfectiontemp,19,11,1,8,1 -"SM100, MS100",water,163,circ,circulation active,boolean, ,true,switch.water_dhw3_circulation_active,switch.water_dhw3_circ,19,11,1,9,1 -"SM100, MS100",water,163,circmode,circulation pump mode,enum [off\|1x3min\|2x3min\|3x3min\|4x3min\|5x3min\|6x3min\|continuous], ,true,select.water_dhw3_circulation_pump_mode,select.water_dhw3_circmode,19,11,1,10,1 -"SM100, MS100",water,163,circtc,circulation time controled,boolean, ,true,switch.water_dhw3_circulation_time_controled,switch.water_dhw3_circtc,19,11,1,14,1 -"SM100, MS100",water,163,keepwarm,keep warm,boolean, ,true,switch.water_dhw3_keep_warm,switch.water_dhw3_keepwarm,19,11,1,15,1 -"SM100, MS100",water,163,status2,status 2,enum [\|\|\|no heat\|\|\|heat request\|\|disinfecting\|hold], ,false,sensor.water_dhw3_status_2,sensor.water_dhw3_status2,19,11,1,16,1 -"SM100, MS100",water,163,pumpmod,pump modulation,uint8 (>=0<=100),%,false,sensor.water_dhw3_pump_modulation,sensor.water_dhw3_pumpmod,19,11,1,17,1 -"SM100, MS100",water,163,flow,flow rate,uint16 (>=0<=3199),l/min,false,sensor.water_dhw3_flow_rate,sensor.water_dhw3_flow,19,11,1/10,18,1 -"SM100, MS100",water,163,valvereturn,return valve,uint8 (>=0<=100),%,true,number.water_dhw3_return_valve,number.water_dhw3_valvereturn,19,11,1,19,1 -"SM100, MS100",water,163,deltatret,temp. diff. return valve,uint8 (>=0<=254),K,true,number.water_dhw3_temp._diff._return_valve,number.water_dhw3_deltatret,19,11,1,20,1 -"SM100, MS100",water,163,errordisp,error display,enum [off\|normal\|inverted], ,true,select.water_dhw3_error_display,select.water_dhw3_errordisp,19,11,1,21,1 -"SM200, MS200",water,164,temp,current temperature,uint16 (>=0<=3199),C,false,sensor.water_dhw3_current_temperature,sensor.water_dhw3_temp,19,11,1/10,1,1 -"SM200, MS200",water,164,storagetemp1,storage intern temperature,uint16 (>=0<=3199),C,false,sensor.water_dhw3_storage_intern_temperature,sensor.water_dhw3_storagetemp1,19,11,1/10,1,1 -"SM200, MS200",water,164,coldtemp,cold water,uint16 (>=0<=3199),C,false,sensor.water_dhw3_cold_water,sensor.water_dhw3_coldtemp,19,11,1/10,2,1 -"SM200, MS200",water,164,temp5,temperature 5,uint16 (>=0<=3199),C,false,sensor.water_dhw3_temperature_5,sensor.water_dhw3_temp5,19,11,1/10,3,1 -"SM200, MS200",water,164,rettemp,return temperature,uint16 (>=0<=3199),C,false,sensor.water_dhw3_return_temperature,sensor.water_dhw3_rettemp,19,11,1/10,4,1 -"SM200, MS200",water,164,pump,pump,boolean, ,false,binary_sensor.water_dhw3_pump,binary_sensor.water_dhw3_pump,19,11,1,4,1 -"SM200, MS200",water,164,maxtemp,maximum temperature,uint8 (>=0<=254),C,true,number.water_dhw3_maximum_temperature,number.water_dhw3_maxtemp,19,11,1,12,1 -"SM200, MS200",water,164,seltemp,selected temperature,uint8 (>=0<=254),C,true,number.water_dhw3_selected_temperature,number.water_dhw3_seltemp,19,11,1,0,1 -"SM200, MS200",water,164,redtemp,reduced temperature,uint8 (>=0<=254),C,true,number.water_dhw3_reduced_temperature,number.water_dhw3_redtemp,19,11,1,14,1 -"SM200, MS200",water,164,hottemp,extra hot temperature,uint8 (>=0<=254),C,true,number.water_dhw3_extra_hot_temperature,number.water_dhw3_hottemp,19,11,1,9,1 -"SM200, MS200",water,164,dailytemp,daily temperature,uint8 (>=0<=254),C,true,number.water_dhw3_daily_temperature,number.water_dhw3_dailytemp,19,11,1,10,1 -"SM200, MS200",water,164,disinfectiontemp,disinfection temperature,uint8 (>=0<=254),C,true,number.water_dhw3_disinfection_temperature,number.water_dhw3_disinfectiontemp,19,11,1,8,1 -"SM200, MS200",water,164,circ,circulation active,boolean, ,true,switch.water_dhw3_circulation_active,switch.water_dhw3_circ,19,11,1,9,1 -"SM200, MS200",water,164,circmode,circulation pump mode,enum [off\|1x3min\|2x3min\|3x3min\|4x3min\|5x3min\|6x3min\|continuous], ,true,select.water_dhw3_circulation_pump_mode,select.water_dhw3_circmode,19,11,1,10,1 -"SM200, MS200",water,164,circtc,circulation time controled,boolean, ,true,switch.water_dhw3_circulation_time_controled,switch.water_dhw3_circtc,19,11,1,14,1 -"SM200, MS200",water,164,keepwarm,keep warm,boolean, ,true,switch.water_dhw3_keep_warm,switch.water_dhw3_keepwarm,19,11,1,15,1 -"SM200, MS200",water,164,status2,status 2,enum [\|\|\|no heat\|\|\|heat request\|\|disinfecting\|hold], ,false,sensor.water_dhw3_status_2,sensor.water_dhw3_status2,19,11,1,16,1 -"SM200, MS200",water,164,pumpmod,pump modulation,uint8 (>=0<=100),%,false,sensor.water_dhw3_pump_modulation,sensor.water_dhw3_pumpmod,19,11,1,17,1 -"SM200, MS200",water,164,flow,flow rate,uint16 (>=0<=3199),l/min,false,sensor.water_dhw3_flow_rate,sensor.water_dhw3_flow,19,11,1/10,18,1 -"SM200, MS200",water,164,valvereturn,return valve,uint8 (>=0<=100),%,true,number.water_dhw3_return_valve,number.water_dhw3_valvereturn,19,11,1,19,1 -"SM200, MS200",water,164,deltatret,temp. diff. return valve,uint8 (>=0<=254),K,true,number.water_dhw3_temp._diff._return_valve,number.water_dhw3_deltatret,19,11,1,20,1 -"SM200, MS200",water,164,errordisp,error display,enum [off\|normal\|inverted], ,true,select.water_dhw3_error_display,select.water_dhw3_errordisp,19,11,1,21,1 +"SM100, MS100",water,163,temp,current temperature,uint16 (>=0<=3199),C,false,sensor.water_dhw_current_temperature,sensor.water_dhw_temp,19,9,1/10,1,1 +"SM100, MS100",water,163,storagetemp1,storage intern temperature,uint16 (>=0<=3199),C,false,sensor.water_dhw_storage_intern_temperature,sensor.water_dhw_storagetemp1,19,9,1/10,16,1 +"SM100, MS100",water,163,coldtemp,cold water,uint16 (>=0<=3199),C,false,sensor.water_dhw_cold_water,sensor.water_dhw_coldtemp,19,9,1/10,17,1 +"SM100, MS100",water,163,temp5,temperature 5,uint16 (>=0<=3199),C,false,sensor.water_dhw_temperature_5,sensor.water_dhw_temp5,19,9,1/10,18,1 +"SM100, MS100",water,163,rettemp,return temperature,uint16 (>=0<=3199),C,false,sensor.water_dhw_return_temperature,sensor.water_dhw_rettemp,19,9,1/10,19,1 +"SM100, MS100",water,163,pump,pump,boolean, ,false,binary_sensor.water_dhw_pump,binary_sensor.water_dhw_pump,19,9,1,4,1 +"SM100, MS100",water,163,maxtemp,maximum temperature,uint8 (>=0<=254),C,true,number.water_dhw_maximum_temperature,number.water_dhw_maxtemp,19,9,1,12,1 +"SM100, MS100",water,163,seltemp,selected temperature,uint8 (>=0<=254),C,true,number.water_dhw_selected_temperature,number.water_dhw_seltemp,19,9,1,0,1 +"SM100, MS100",water,163,redtemp,reduced temperature,uint8 (>=0<=254),C,true,number.water_dhw_reduced_temperature,number.water_dhw_redtemp,19,9,1,14,1 +"SM100, MS100",water,163,hottemp,extra hot temperature,uint8 (>=0<=254),C,true,number.water_dhw_extra_hot_temperature,number.water_dhw_hottemp,19,9,1,20,1 +"SM100, MS100",water,163,dailytemp,daily temperature,uint8 (>=0<=254),C,true,number.water_dhw_daily_temperature,number.water_dhw_dailytemp,19,9,1,21,1 +"SM100, MS100",water,163,disinfectiontemp,disinfection temperature,uint8 (>=0<=254),C,true,number.water_dhw_disinfection_temperature,number.water_dhw_disinfectiontemp,19,9,1,8,1 +"SM100, MS100",water,163,circ,circulation active,boolean, ,true,switch.water_dhw_circulation_active,switch.water_dhw_circ,19,9,1,9,1 +"SM100, MS100",water,163,circmode,circulation pump mode,enum [off\|1x3min\|2x3min\|3x3min\|4x3min\|5x3min\|6x3min\|continuous], ,true,select.water_dhw_circulation_pump_mode,select.water_dhw_circmode,19,9,1,10,1 +"SM100, MS100",water,163,circtc,circulation time controled,boolean, ,true,switch.water_dhw_circulation_time_controled,switch.water_dhw_circtc,19,9,1,22,1 +"SM100, MS100",water,163,keepwarm,keep warm,boolean, ,true,switch.water_dhw_keep_warm,switch.water_dhw_keepwarm,19,9,1,23,1 +"SM100, MS100",water,163,status2,status 2,enum [\|\|\|no heat\|\|\|heat request\|\|disinfecting\|hold], ,false,sensor.water_dhw_status_2,sensor.water_dhw_status2,19,9,1,24,1 +"SM100, MS100",water,163,pumpmod,pump modulation,uint8 (>=0<=100),%,false,sensor.water_dhw_pump_modulation,sensor.water_dhw_pumpmod,19,9,1,25,1 +"SM100, MS100",water,163,flow,flow rate,uint16 (>=0<=3199),l/min,false,sensor.water_dhw_flow_rate,sensor.water_dhw_flow,19,9,1/10,26,1 +"SM100, MS100",water,163,valvereturn,return valve,uint8 (>=0<=100),%,true,number.water_dhw_return_valve,number.water_dhw_valvereturn,19,9,1,27,1 +"SM100, MS100",water,163,deltatret,temp. diff. return valve,uint8 (>=0<=254),K,true,number.water_dhw_temp._diff._return_valve,number.water_dhw_deltatret,19,9,1,28,1 +"SM100, MS100",water,163,errordisp,error display,enum [off\|normal\|inverted], ,true,select.water_dhw_error_display,select.water_dhw_errordisp,19,9,1,29,1 +"SM200, MS200",water,164,temp,current temperature,uint16 (>=0<=3199),C,false,sensor.water_dhw_current_temperature,sensor.water_dhw_temp,19,9,1/10,1,1 +"SM200, MS200",water,164,storagetemp1,storage intern temperature,uint16 (>=0<=3199),C,false,sensor.water_dhw_storage_intern_temperature,sensor.water_dhw_storagetemp1,19,9,1/10,16,1 +"SM200, MS200",water,164,coldtemp,cold water,uint16 (>=0<=3199),C,false,sensor.water_dhw_cold_water,sensor.water_dhw_coldtemp,19,9,1/10,17,1 +"SM200, MS200",water,164,temp5,temperature 5,uint16 (>=0<=3199),C,false,sensor.water_dhw_temperature_5,sensor.water_dhw_temp5,19,9,1/10,18,1 +"SM200, MS200",water,164,rettemp,return temperature,uint16 (>=0<=3199),C,false,sensor.water_dhw_return_temperature,sensor.water_dhw_rettemp,19,9,1/10,19,1 +"SM200, MS200",water,164,pump,pump,boolean, ,false,binary_sensor.water_dhw_pump,binary_sensor.water_dhw_pump,19,9,1,4,1 +"SM200, MS200",water,164,maxtemp,maximum temperature,uint8 (>=0<=254),C,true,number.water_dhw_maximum_temperature,number.water_dhw_maxtemp,19,9,1,12,1 +"SM200, MS200",water,164,seltemp,selected temperature,uint8 (>=0<=254),C,true,number.water_dhw_selected_temperature,number.water_dhw_seltemp,19,9,1,0,1 +"SM200, MS200",water,164,redtemp,reduced temperature,uint8 (>=0<=254),C,true,number.water_dhw_reduced_temperature,number.water_dhw_redtemp,19,9,1,14,1 +"SM200, MS200",water,164,hottemp,extra hot temperature,uint8 (>=0<=254),C,true,number.water_dhw_extra_hot_temperature,number.water_dhw_hottemp,19,9,1,20,1 +"SM200, MS200",water,164,dailytemp,daily temperature,uint8 (>=0<=254),C,true,number.water_dhw_daily_temperature,number.water_dhw_dailytemp,19,9,1,21,1 +"SM200, MS200",water,164,disinfectiontemp,disinfection temperature,uint8 (>=0<=254),C,true,number.water_dhw_disinfection_temperature,number.water_dhw_disinfectiontemp,19,9,1,8,1 +"SM200, MS200",water,164,circ,circulation active,boolean, ,true,switch.water_dhw_circulation_active,switch.water_dhw_circ,19,9,1,9,1 +"SM200, MS200",water,164,circmode,circulation pump mode,enum [off\|1x3min\|2x3min\|3x3min\|4x3min\|5x3min\|6x3min\|continuous], ,true,select.water_dhw_circulation_pump_mode,select.water_dhw_circmode,19,9,1,10,1 +"SM200, MS200",water,164,circtc,circulation time controled,boolean, ,true,switch.water_dhw_circulation_time_controled,switch.water_dhw_circtc,19,9,1,22,1 +"SM200, MS200",water,164,keepwarm,keep warm,boolean, ,true,switch.water_dhw_keep_warm,switch.water_dhw_keepwarm,19,9,1,23,1 +"SM200, MS200",water,164,status2,status 2,enum [\|\|\|no heat\|\|\|heat request\|\|disinfecting\|hold], ,false,sensor.water_dhw_status_2,sensor.water_dhw_status2,19,9,1,24,1 +"SM200, MS200",water,164,pumpmod,pump modulation,uint8 (>=0<=100),%,false,sensor.water_dhw_pump_modulation,sensor.water_dhw_pumpmod,19,9,1,25,1 +"SM200, MS200",water,164,flow,flow rate,uint16 (>=0<=3199),l/min,false,sensor.water_dhw_flow_rate,sensor.water_dhw_flow,19,9,1/10,26,1 +"SM200, MS200",water,164,valvereturn,return valve,uint8 (>=0<=100),%,true,number.water_dhw_return_valve,number.water_dhw_valvereturn,19,9,1,27,1 +"SM200, MS200",water,164,deltatret,temp. diff. return valve,uint8 (>=0<=254),K,true,number.water_dhw_temp._diff._return_valve,number.water_dhw_deltatret,19,9,1,28,1 +"SM200, MS200",water,164,errordisp,error display,enum [off\|normal\|inverted], ,true,select.water_dhw_error_display,select.water_dhw_errordisp,19,9,1,29,1 "MP100",pool,204,pooltemp,pool temperature,int16 (>=-3199<=3199),C,false,sensor.pool_pool_temperature,sensor.pool_pooltemp,20,0,1/10,-1,1 "MP100",pool,204,poolshuntstatus,pool shunt status opening/closing,enum [stopped\|opening\|closing\|open\|close], ,false,sensor.pool_pool_shunt_status_opening/closing,sensor.pool_poolshuntstatus,20,0,1,-1,1 "MP100",pool,204,poolshunt,pool shunt open/close (0% = pool / 100% = heat),uint8 (>=0<=100),%,false,sensor.pool_pool_shunt_open/close_(0%_=_pool_/_100%_=_heat),sensor.pool_poolshunt,20,0,1,-1,1 diff --git a/interface/package.json b/interface/package.json index 3d8f0ef47..d6ac31e6c 100644 --- a/interface/package.json +++ b/interface/package.json @@ -35,10 +35,10 @@ "react": "^18.3.1", "react-dom": "^18.3.1", "react-icons": "^5.3.0", - "react-router-dom": "^6.28.0", + "react-router": "^7.0.1", "react-toastify": "^10.0.6", "typesafe-i18n": "^5.26.2", - "typescript": "^5.6.3" + "typescript": "^5.7.2" }, "devDependencies": { "@babel/core": "^7.26.0", @@ -47,10 +47,9 @@ "@preact/preset-vite": "^2.9.1", "@trivago/prettier-plugin-sort-imports": "^4.3.0", "@types/formidable": "^3", - "@types/node": "^22.9.1", + "@types/node": "^22.9.3", "@types/react": "^18.3.12", "@types/react-dom": "^18.3.1", - "@types/react-router-dom": "^5.3.3", "concurrently": "^9.1.0", "eslint": "^9.15.0", "eslint-config-prettier": "^9.1.0", diff --git a/interface/src/AppRouting.tsx b/interface/src/AppRouting.tsx index b8122c813..cf570a169 100644 --- a/interface/src/AppRouting.tsx +++ b/interface/src/AppRouting.tsx @@ -1,5 +1,5 @@ import { useContext, useEffect } from 'react'; -import { Navigate, Route, Routes } from 'react-router-dom'; +import { Navigate, Route, Routes } from 'react-router'; import { toast } from 'react-toastify'; import AuthenticatedRouting from 'AuthenticatedRouting'; diff --git a/interface/src/AuthenticatedRouting.tsx b/interface/src/AuthenticatedRouting.tsx index 2171d81d8..43f03d00a 100644 --- a/interface/src/AuthenticatedRouting.tsx +++ b/interface/src/AuthenticatedRouting.tsx @@ -1,5 +1,5 @@ import { useContext } from 'react'; -import { Navigate, Route, Routes } from 'react-router-dom'; +import { Navigate, Route, Routes } from 'react-router'; import CustomEntities from 'app/main/CustomEntities'; import Customizations from 'app/main/Customizations'; diff --git a/interface/src/app/main/CustomEntities.tsx b/interface/src/app/main/CustomEntities.tsx index d5064383d..4c725bb0f 100644 --- a/interface/src/app/main/CustomEntities.tsx +++ b/interface/src/app/main/CustomEntities.tsx @@ -1,5 +1,5 @@ import { useCallback, useState } from 'react'; -import { useBlocker } from 'react-router-dom'; +import { useBlocker } from 'react-router'; import { toast } from 'react-toastify'; import AddIcon from '@mui/icons-material/Add'; diff --git a/interface/src/app/main/Customizations.tsx b/interface/src/app/main/Customizations.tsx index 2eb6f58f3..119c32032 100644 --- a/interface/src/app/main/Customizations.tsx +++ b/interface/src/app/main/Customizations.tsx @@ -1,5 +1,5 @@ import { useCallback, useEffect, useState } from 'react'; -import { useBlocker, useLocation } from 'react-router-dom'; +import { useBlocker, useLocation } from 'react-router'; import { toast } from 'react-toastify'; import CancelIcon from '@mui/icons-material/Cancel'; diff --git a/interface/src/app/main/Devices.tsx b/interface/src/app/main/Devices.tsx index f82a1930e..1fc3ada7a 100644 --- a/interface/src/app/main/Devices.tsx +++ b/interface/src/app/main/Devices.tsx @@ -6,7 +6,7 @@ import { useState } from 'react'; import { IconContext } from 'react-icons'; -import { useNavigate } from 'react-router-dom'; +import { useNavigate } from 'react-router'; import { toast } from 'react-toastify'; import CommentsDisabledOutlinedIcon from '@mui/icons-material/CommentsDisabledOutlined'; @@ -306,9 +306,9 @@ const Devices = () => { const customize = () => { if (selectedDevice === 99) { - navigate('/customentities'); + void navigate('/customentities'); } else { - navigate('/customizations', { state: selectedDevice }); + void navigate('/customizations', { state: selectedDevice }); } }; diff --git a/interface/src/app/main/Modules.tsx b/interface/src/app/main/Modules.tsx index d8363fb32..c5fa4ad88 100644 --- a/interface/src/app/main/Modules.tsx +++ b/interface/src/app/main/Modules.tsx @@ -1,5 +1,5 @@ import { useCallback, useState } from 'react'; -import { useBlocker } from 'react-router-dom'; +import { useBlocker } from 'react-router'; import { toast } from 'react-toastify'; import CancelIcon from '@mui/icons-material/Cancel'; diff --git a/interface/src/app/main/Scheduler.tsx b/interface/src/app/main/Scheduler.tsx index 5d9e360e9..0552923a4 100644 --- a/interface/src/app/main/Scheduler.tsx +++ b/interface/src/app/main/Scheduler.tsx @@ -1,5 +1,5 @@ import { useCallback, useEffect, useState } from 'react'; -import { useBlocker } from 'react-router-dom'; +import { useBlocker } from 'react-router'; import { toast } from 'react-toastify'; import AddIcon from '@mui/icons-material/Add'; diff --git a/interface/src/app/settings/APSettings.tsx b/interface/src/app/settings/APSettings.tsx index 0f1f8b462..7c9aee614 100644 --- a/interface/src/app/settings/APSettings.tsx +++ b/interface/src/app/settings/APSettings.tsx @@ -46,7 +46,7 @@ const APSettings = () => { const { LL } = useI18nContext(); - useLayoutTitle(LL.SETTINGS_OF(LL.ACCESS_POINT(0))); + useLayoutTitle(LL.ACCESS_POINT(0)); const [fieldErrors, setFieldErrors] = useState(); diff --git a/interface/src/app/settings/ApplicationSettings.tsx b/interface/src/app/settings/ApplicationSettings.tsx index 0789fee40..ef45485fd 100644 --- a/interface/src/app/settings/ApplicationSettings.tsx +++ b/interface/src/app/settings/ApplicationSettings.tsx @@ -121,7 +121,7 @@ const ApplicationSettings = () => { }); }; - useLayoutTitle(LL.SETTINGS_OF(LL.APPLICATION())); + useLayoutTitle(LL.APPLICATION()); const SecondsInputProps = { endAdornment: {LL.SECONDS()} diff --git a/interface/src/app/settings/MqttSettings.tsx b/interface/src/app/settings/MqttSettings.tsx index cd41a45e4..66f653861 100644 --- a/interface/src/app/settings/MqttSettings.tsx +++ b/interface/src/app/settings/MqttSettings.tsx @@ -48,7 +48,7 @@ const MqttSettings = () => { }); const { LL } = useI18nContext(); - useLayoutTitle(LL.SETTINGS_OF('MQTT')); + useLayoutTitle('MQTT'); const [fieldErrors, setFieldErrors] = useState(); diff --git a/interface/src/app/settings/NTPSettings.tsx b/interface/src/app/settings/NTPSettings.tsx index 277744e0d..cf42b5e19 100644 --- a/interface/src/app/settings/NTPSettings.tsx +++ b/interface/src/app/settings/NTPSettings.tsx @@ -44,7 +44,7 @@ const NTPSettings = () => { }); const { LL } = useI18nContext(); - useLayoutTitle(LL.SETTINGS_OF('NTP')); + useLayoutTitle('NTP'); const updateFormValue = updateValueDirty( origData, diff --git a/interface/src/app/settings/network/Network.tsx b/interface/src/app/settings/network/Network.tsx index 0a7feeb54..3e6b663d3 100644 --- a/interface/src/app/settings/network/Network.tsx +++ b/interface/src/app/settings/network/Network.tsx @@ -1,5 +1,5 @@ import { useCallback, useState } from 'react'; -import { Navigate, Route, Routes, useNavigate } from 'react-router-dom'; +import { Navigate, Route, Routes, useNavigate } from 'react-router'; import { Tab } from '@mui/material'; @@ -13,7 +13,7 @@ import WiFiNetworkScanner from './WiFiNetworkScanner'; const Network = () => { const { LL } = useI18nContext(); - useLayoutTitle(LL.SETTINGS_OF(LL.NETWORK(0))); + useLayoutTitle(LL.NETWORK(0)); const { routerTab } = useRouterTab(); @@ -24,7 +24,7 @@ const Network = () => { const selectNetwork = useCallback( (network: WiFiNetwork) => { setSelectedNetwork(network); - navigate('settings'); + void navigate('/settings'); }, [navigate] ); diff --git a/interface/src/app/settings/security/ManageUsers.tsx b/interface/src/app/settings/security/ManageUsers.tsx index 758882869..f4724ece9 100644 --- a/interface/src/app/settings/security/ManageUsers.tsx +++ b/interface/src/app/settings/security/ManageUsers.tsx @@ -1,5 +1,5 @@ import { useContext, useState } from 'react'; -import { useBlocker } from 'react-router-dom'; +import { useBlocker } from 'react-router'; import CancelIcon from '@mui/icons-material/Cancel'; import CloseIcon from '@mui/icons-material/Close'; diff --git a/interface/src/app/settings/security/Security.tsx b/interface/src/app/settings/security/Security.tsx index 6bf2b3bc4..23bd82a53 100644 --- a/interface/src/app/settings/security/Security.tsx +++ b/interface/src/app/settings/security/Security.tsx @@ -1,4 +1,4 @@ -import { Navigate, Route, Routes } from 'react-router-dom'; +import { Navigate, Route, Routes } from 'react-router'; import { Tab } from '@mui/material'; @@ -10,7 +10,7 @@ import SecuritySettings from './SecuritySettings'; const Security = () => { const { LL } = useI18nContext(); - useLayoutTitle(LL.SETTINGS_OF(LL.SECURITY(0))); + useLayoutTitle(LL.SECURITY(0)); const { routerTab } = useRouterTab(); diff --git a/interface/src/app/status/APStatus.tsx b/interface/src/app/status/APStatus.tsx index 2f4903976..d9c9f24db 100644 --- a/interface/src/app/status/APStatus.tsx +++ b/interface/src/app/status/APStatus.tsx @@ -41,7 +41,7 @@ const APStatus = () => { } = useAutoRequest(APApi.readAPStatus, { pollingTime: 3000 }); const { LL } = useI18nContext(); - useLayoutTitle(LL.STATUS_OF(LL.ACCESS_POINT(0))); + useLayoutTitle(LL.ACCESS_POINT(0)); const theme = useTheme(); diff --git a/interface/src/app/status/HardwareStatus.tsx b/interface/src/app/status/HardwareStatus.tsx index 6c872468e..45384e3c1 100644 --- a/interface/src/app/status/HardwareStatus.tsx +++ b/interface/src/app/status/HardwareStatus.tsx @@ -30,7 +30,7 @@ function formatNumber(num: number) { const HardwareStatus = () => { const { LL } = useI18nContext(); - useLayoutTitle(LL.STATUS_OF(LL.HARDWARE())); + useLayoutTitle(LL.HARDWARE()); const { data, diff --git a/interface/src/app/status/MqttStatus.tsx b/interface/src/app/status/MqttStatus.tsx index d2808b3b6..3ba7943fd 100644 --- a/interface/src/app/status/MqttStatus.tsx +++ b/interface/src/app/status/MqttStatus.tsx @@ -61,7 +61,7 @@ const MqttStatus = () => { } = useAutoRequest(MqttApi.readMqttStatus, { pollingTime: 3000 }); const { LL } = useI18nContext(); - useLayoutTitle(LL.STATUS_OF('MQTT')); + useLayoutTitle('MQTT'); const theme = useTheme(); diff --git a/interface/src/app/status/NTPStatus.tsx b/interface/src/app/status/NTPStatus.tsx index a65ee8620..aefd81802 100644 --- a/interface/src/app/status/NTPStatus.tsx +++ b/interface/src/app/status/NTPStatus.tsx @@ -47,7 +47,7 @@ const NTPStatus = () => { const [processing, setProcessing] = useState(false); const { LL } = useI18nContext(); - useLayoutTitle(LL.STATUS_OF('NTP')); + useLayoutTitle('NTP'); const { send: updateTime } = useRequest( (local_time: Time) => NTPApi.updateTime(local_time), diff --git a/interface/src/app/status/NetworkStatus.tsx b/interface/src/app/status/NetworkStatus.tsx index 86a9994c2..696e02155 100644 --- a/interface/src/app/status/NetworkStatus.tsx +++ b/interface/src/app/status/NetworkStatus.tsx @@ -88,7 +88,7 @@ const NetworkStatus = () => { } = useAutoRequest(NetworkApi.readNetworkStatus, { pollingTime: 3000 }); const { LL } = useI18nContext(); - useLayoutTitle(LL.STATUS_OF(LL.NETWORK(1))); + useLayoutTitle(LL.NETWORK(1)); const theme = useTheme(); diff --git a/interface/src/components/layout/Layout.tsx b/interface/src/components/layout/Layout.tsx index c02b26f46..70c94100a 100644 --- a/interface/src/components/layout/Layout.tsx +++ b/interface/src/components/layout/Layout.tsx @@ -1,6 +1,6 @@ import { useEffect, useMemo, useState } from 'react'; import type { FC } from 'react'; -import { useLocation } from 'react-router-dom'; +import { useLocation } from 'react-router'; import { Box, Toolbar } from '@mui/material'; diff --git a/interface/src/components/layout/LayoutAppBar.tsx b/interface/src/components/layout/LayoutAppBar.tsx index f254ccc77..377ab5c04 100644 --- a/interface/src/components/layout/LayoutAppBar.tsx +++ b/interface/src/components/layout/LayoutAppBar.tsx @@ -1,9 +1,11 @@ -import { useLocation, useNavigate } from 'react-router-dom'; +import { Link, useLocation, useNavigate } from 'react-router'; import ArrowBackIcon from '@mui/icons-material/ArrowBack'; import MenuIcon from '@mui/icons-material/Menu'; import { AppBar, IconButton, Toolbar, Typography } from '@mui/material'; +import { useI18nContext } from 'i18n/i18n-react'; + export const DRAWER_WIDTH = 210; interface LayoutAppBarProps { @@ -12,12 +14,12 @@ interface LayoutAppBarProps { } const LayoutAppBar = ({ title, onToggleDrawer }: LayoutAppBarProps) => { + const { LL } = useI18nContext(); + const navigate = useNavigate(); + const pathnames = useLocation() .pathname.split('/') .filter((x) => x); - const show_back = pathnames.length > 1; - - const navigate = useNavigate(); return ( { - {show_back && ( - navigate(pathnames[0])} - > - - + {pathnames.length > 1 && ( + <> + navigate('/' + pathnames[0])} + > + + + + + + {pathnames[0] === 'status' ? LL.STATUS_OF('') : LL.SETTINGS(0)} +  |  + + + )} - - {title} - + {title} ); diff --git a/interface/src/components/layout/LayoutMenuItem.tsx b/interface/src/components/layout/LayoutMenuItem.tsx index 9bcec5f3d..99b6278bd 100644 --- a/interface/src/components/layout/LayoutMenuItem.tsx +++ b/interface/src/components/layout/LayoutMenuItem.tsx @@ -1,4 +1,4 @@ -import { Link, useLocation } from 'react-router-dom'; +import { Link, useLocation } from 'react-router'; import { ListItemButton, ListItemIcon, ListItemText } from '@mui/material'; import type { SvgIconProps } from '@mui/material'; diff --git a/interface/src/components/layout/ListMenuItem.tsx b/interface/src/components/layout/ListMenuItem.tsx index 49d7091a0..0a8df795b 100644 --- a/interface/src/components/layout/ListMenuItem.tsx +++ b/interface/src/components/layout/ListMenuItem.tsx @@ -1,4 +1,4 @@ -import { Link } from 'react-router-dom'; +import { Link } from 'react-router'; import NavigateNextIcon from '@mui/icons-material/NavigateNext'; import { diff --git a/interface/src/components/routing/BlockNavigation.tsx b/interface/src/components/routing/BlockNavigation.tsx index 1c56c8448..3dd2f255d 100644 --- a/interface/src/components/routing/BlockNavigation.tsx +++ b/interface/src/components/routing/BlockNavigation.tsx @@ -1,4 +1,4 @@ -import type { Blocker } from 'react-router-dom'; +import type { Blocker } from 'react-router'; import { Button, diff --git a/interface/src/components/routing/RequireAdmin.tsx b/interface/src/components/routing/RequireAdmin.tsx index 077eaf3aa..5c363a30a 100644 --- a/interface/src/components/routing/RequireAdmin.tsx +++ b/interface/src/components/routing/RequireAdmin.tsx @@ -1,6 +1,6 @@ import { useContext } from 'react'; import type { FC } from 'react'; -import { Navigate } from 'react-router-dom'; +import { Navigate } from 'react-router'; import { AuthenticatedContext } from 'contexts/authentication'; import type { RequiredChildrenProps } from 'utils'; diff --git a/interface/src/components/routing/RequireAuthenticated.tsx b/interface/src/components/routing/RequireAuthenticated.tsx index 709e79ea1..29a352158 100644 --- a/interface/src/components/routing/RequireAuthenticated.tsx +++ b/interface/src/components/routing/RequireAuthenticated.tsx @@ -1,6 +1,6 @@ import { useContext, useEffect } from 'react'; import type { FC } from 'react'; -import { Navigate, useLocation } from 'react-router-dom'; +import { Navigate, useLocation } from 'react-router'; import { storeLoginRedirect } from 'components/routing/authentication'; import type { AuthenticatedContextValue } from 'contexts/authentication/context'; diff --git a/interface/src/components/routing/RequireUnauthenticated.tsx b/interface/src/components/routing/RequireUnauthenticated.tsx index f98a78ac9..03632a85f 100644 --- a/interface/src/components/routing/RequireUnauthenticated.tsx +++ b/interface/src/components/routing/RequireUnauthenticated.tsx @@ -1,6 +1,6 @@ import { useContext } from 'react'; import type { FC } from 'react'; -import { Navigate } from 'react-router-dom'; +import { Navigate } from 'react-router'; import { fetchLoginRedirect } from 'components/routing/authentication'; import { AuthenticationContext } from 'contexts/authentication'; diff --git a/interface/src/components/routing/RouterTabs.tsx b/interface/src/components/routing/RouterTabs.tsx index abf2dda27..67e76c297 100644 --- a/interface/src/components/routing/RouterTabs.tsx +++ b/interface/src/components/routing/RouterTabs.tsx @@ -1,5 +1,5 @@ import type { FC } from 'react'; -import { useNavigate } from 'react-router-dom'; +import { useNavigate } from 'react-router'; import { Tabs, useMediaQuery, useTheme } from '@mui/material'; diff --git a/interface/src/components/routing/authentication.ts b/interface/src/components/routing/authentication.ts index ae93fa88e..58f92024c 100644 --- a/interface/src/components/routing/authentication.ts +++ b/interface/src/components/routing/authentication.ts @@ -1,4 +1,4 @@ -import type { Path } from 'react-router-dom'; +import type { Path } from 'react-router'; import type * as H from 'history'; import { jwtDecode } from 'jwt-decode'; diff --git a/interface/src/components/routing/useRouterTab.ts b/interface/src/components/routing/useRouterTab.ts index 5e53c09c5..865c3c28e 100644 --- a/interface/src/components/routing/useRouterTab.ts +++ b/interface/src/components/routing/useRouterTab.ts @@ -1,4 +1,4 @@ -import { useMatch, useResolvedPath } from 'react-router-dom'; +import { useMatch, useResolvedPath } from 'react-router'; export const useRouterTab = () => { const routerTabPathMatch = useMatch(useResolvedPath(':tab').pathname); diff --git a/interface/src/contexts/authentication/Authentication.tsx b/interface/src/contexts/authentication/Authentication.tsx index 5691ab76e..d3aef600d 100644 --- a/interface/src/contexts/authentication/Authentication.tsx +++ b/interface/src/contexts/authentication/Authentication.tsx @@ -1,6 +1,6 @@ import { useCallback, useEffect, useMemo, useState } from 'react'; import type { FC } from 'react'; -import { redirect } from 'react-router-dom'; +import { redirect } from 'react-router'; import { toast } from 'react-toastify'; import { ACCESS_TOKEN } from 'api/endpoints'; diff --git a/interface/src/index.tsx b/interface/src/index.tsx index bc6d09288..57ae0fb7d 100644 --- a/interface/src/index.tsx +++ b/interface/src/index.tsx @@ -5,7 +5,7 @@ import { RouterProvider, createBrowserRouter, createRoutesFromElements -} from 'react-router-dom'; +} from 'react-router'; import App from 'App'; diff --git a/interface/src/utils/useRest.ts b/interface/src/utils/useRest.ts index 02e42dc40..fcc9fc54c 100644 --- a/interface/src/utils/useRest.ts +++ b/interface/src/utils/useRest.ts @@ -1,5 +1,5 @@ import { useState } from 'react'; -import { useBlocker } from 'react-router-dom'; +import { useBlocker } from 'react-router'; import { toast } from 'react-toastify'; import type { AlovaGenerics, Method } from 'alova'; diff --git a/interface/tsconfig.json b/interface/tsconfig.json index ef7ab1a46..3e8dfeb47 100644 --- a/interface/tsconfig.json +++ b/interface/tsconfig.json @@ -27,5 +27,5 @@ } }, "include": ["src/**/*", "vite.config.ts"], - "exclude": ["node_modules", "dist", "src/**/*.test.tsx", "src/**/*.test.ts"] + "exclude": ["node_modules", "dist"] } diff --git a/interface/vite.config.ts b/interface/vite.config.ts index 5198143d4..b6eb7eb02 100644 --- a/interface/vite.config.ts +++ b/interface/vite.config.ts @@ -118,11 +118,7 @@ export default defineConfig(({ command, mode }) => { manualChunks(id: string) { if (id.includes('node_modules')) { // creating a chunk to react routes deps. Reducing the vendor chunk size - if ( - id.includes('react-router-dom') || - id.includes('@remix-run') || - id.includes('react-router') - ) { + if (id.includes('react-router')) { return '@react-router'; } return 'vendor'; diff --git a/interface/yarn.lock b/interface/yarn.lock index 7dafff76d..cbdc440b8 100644 --- a/interface/yarn.lock +++ b/interface/yarn.lock @@ -34,20 +34,20 @@ __metadata: linkType: hard "@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.22.13, @babel/code-frame@npm:^7.25.9, @babel/code-frame@npm:^7.26.0": - version: 7.26.0 - resolution: "@babel/code-frame@npm:7.26.0" + version: 7.26.2 + resolution: "@babel/code-frame@npm:7.26.2" dependencies: "@babel/helper-validator-identifier": "npm:^7.25.9" js-tokens: "npm:^4.0.0" picocolors: "npm:^1.0.0" - checksum: 10c0/46f7e367714be736b52ea3c01b24f47e2102e210fb83021d1c8237d8fc511b9538909e16e2fcdbb5cb6173e0794e28624309a59014e52fcfb7bde908f5284388 + checksum: 10c0/7d79621a6849183c415486af99b1a20b84737e8c11cd55b6544f688c51ce1fd710e6d869c3dd21232023da272a79b91efb3e83b5bc2dc65c1187c5fcd1b72ea8 languageName: node linkType: hard "@babel/compat-data@npm:^7.25.9": - version: 7.26.0 - resolution: "@babel/compat-data@npm:7.26.0" - checksum: 10c0/6325c9151a3c9b0a3a807e854a26255ef66d989bff331475a935af9bb18f160e0fffe6aed550e4e96b63f91efcd874bfbaab2a1f4a2f8d25645d712a0de590fb + version: 7.26.2 + resolution: "@babel/compat-data@npm:7.26.2" + checksum: 10c0/c9b5f3724828d17f728a778f9d66c19b55c018d0d76de6d731178cca64f182c22b71400a73bf2b65dcc4fcfe52b630088a94d5902911b54206aa90e3ffe07d12 languageName: node linkType: hard @@ -86,15 +86,15 @@ __metadata: linkType: hard "@babel/generator@npm:^7.23.0, @babel/generator@npm:^7.25.9, @babel/generator@npm:^7.26.0": - version: 7.26.0 - resolution: "@babel/generator@npm:7.26.0" + version: 7.26.2 + resolution: "@babel/generator@npm:7.26.2" dependencies: - "@babel/parser": "npm:^7.26.0" + "@babel/parser": "npm:^7.26.2" "@babel/types": "npm:^7.26.0" "@jridgewell/gen-mapping": "npm:^0.3.5" "@jridgewell/trace-mapping": "npm:^0.3.25" jsesc: "npm:^3.0.2" - checksum: 10c0/b6bb9185f19a97eaf58e04a6d39a13237076678e7ed16b6321dea914535d4bf6a8d7727c9dcb65539845aa0096b326eb67be4bab764bd74bcfd848e2eda68609 + checksum: 10c0/167ebce8977142f5012fad6bd91da51ac52bcd752f2261a54b7ab605d928aebe57e21636cdd2a9c7757e552652c68d9fcb5d40b06fcb66e02d9ee7526e118a5c languageName: node linkType: hard @@ -218,14 +218,14 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.20.5, @babel/parser@npm:^7.23.0, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.0": - version: 7.26.1 - resolution: "@babel/parser@npm:7.26.1" +"@babel/parser@npm:^7.20.5, @babel/parser@npm:^7.23.0, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.0, @babel/parser@npm:^7.26.2": + version: 7.26.2 + resolution: "@babel/parser@npm:7.26.2" dependencies: "@babel/types": "npm:^7.26.0" bin: parser: ./bin/babel-parser.js - checksum: 10c0/dc7d4e6b7eb667fa0784e7e2c3f6f92ca12ad72242f6d4311995310dae55093f02acdb595b69b0dbbf04cb61ad87156ac03186ff32eacfa35149c655bc22c14b + checksum: 10c0/751a743087b3a9172a7599f1421830d44c38f065ef781588d2bfb1c98f9b461719a226feb13c868d7a284783eee120c88ea522593118f2668f46ebfb1105c4d7 languageName: node linkType: hard @@ -358,20 +358,7 @@ __metadata: languageName: node linkType: hard -"@emotion/cache@npm:^11.13.1": - version: 11.13.1 - resolution: "@emotion/cache@npm:11.13.1" - dependencies: - "@emotion/memoize": "npm:^0.9.0" - "@emotion/sheet": "npm:^1.4.0" - "@emotion/utils": "npm:^1.4.0" - "@emotion/weak-memoize": "npm:^0.4.0" - stylis: "npm:4.2.0" - checksum: 10c0/321e97d8980885737de13b47e41fd4febfbd83086f10c620f865fcbddb29b8fe198adec7e1c69cc7b137638ea9242d7c475c57f954f7ca229157fa92e368f473 - languageName: node - linkType: hard - -"@emotion/cache@npm:^11.13.5": +"@emotion/cache@npm:^11.13.1, @emotion/cache@npm:^11.13.5": version: 11.13.5 resolution: "@emotion/cache@npm:11.13.5" dependencies: @@ -428,20 +415,7 @@ __metadata: languageName: node linkType: hard -"@emotion/serialize@npm:^1.3.2": - version: 1.3.2 - resolution: "@emotion/serialize@npm:1.3.2" - dependencies: - "@emotion/hash": "npm:^0.9.2" - "@emotion/memoize": "npm:^0.9.0" - "@emotion/unitless": "npm:^0.10.0" - "@emotion/utils": "npm:^1.4.1" - csstype: "npm:^3.0.2" - checksum: 10c0/b4873b643721d28b4450f9d77b71e6c8d0109e6825c54fc79e649d2fa438fe4080d2fa696ec8fda421b8e713fcd42306d6197b6121ddd2486ffab8e4b6311ce0 - languageName: node - linkType: hard - -"@emotion/serialize@npm:^1.3.3": +"@emotion/serialize@npm:^1.3.2, @emotion/serialize@npm:^1.3.3": version: 1.3.3 resolution: "@emotion/serialize@npm:1.3.3" dependencies: @@ -497,13 +471,6 @@ __metadata: languageName: node linkType: hard -"@emotion/utils@npm:^1.4.0, @emotion/utils@npm:^1.4.1": - version: 1.4.1 - resolution: "@emotion/utils@npm:1.4.1" - checksum: 10c0/f4704e0bdf48062fd6eb9c64771c88f521aab1e108a48cb23d65b6438597c63a6945301cef4c43611e79e0e76a304ec5481c31025ea8f573d7ad5423d747602c - languageName: node - linkType: hard - "@emotion/utils@npm:^1.4.2": version: 1.4.2 resolution: "@emotion/utils@npm:1.4.2" @@ -697,14 +664,7 @@ __metadata: languageName: node linkType: hard -"@eslint-community/regexpp@npm:^4.10.0": - version: 4.11.2 - resolution: "@eslint-community/regexpp@npm:4.11.2" - checksum: 10c0/c6ab16307c64bc72ea05b9c1740734dfe4a3eea8f7cc395266eb7f04a0ab8f84fe58d41888e906c18bc56262b685eb3074443a0375fb8c44fb4ff20fdb11e250 - languageName: node - linkType: hard - -"@eslint-community/regexpp@npm:^4.12.1": +"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.12.1": version: 4.12.1 resolution: "@eslint-community/regexpp@npm:4.12.1" checksum: 10c0/a03d98c246bcb9109aec2c08e4d10c8d010256538dcb3f56610191607214523d4fb1b00aa81df830b6dffb74c5fa0be03642513a289c567949d3e550ca11cdf6 @@ -1135,11 +1095,11 @@ __metadata: linkType: hard "@prefresh/core@npm:^1.5.1": - version: 1.5.2 - resolution: "@prefresh/core@npm:1.5.2" + version: 1.5.3 + resolution: "@prefresh/core@npm:1.5.3" peerDependencies: preact: ^10.0.0 - checksum: 10c0/53d1ce714ed098ccc11f3a8e2826ff6b90237445c24df6281eb162791b534d1d7626a43c0c1c7427139d2ade658e1ba7020963c001135bbdbeeb15073008529b + checksum: 10c0/402e2d39fecdea6963326c952513c21aaaed215c6066e55708bca725025638911068bac09d6a6d9a044f6093827d6cf23b063651806ddc9d4aa977015f5c713e languageName: node linkType: hard @@ -1166,13 +1126,6 @@ __metadata: languageName: node linkType: hard -"@remix-run/router@npm:1.21.0": - version: 1.21.0 - resolution: "@remix-run/router@npm:1.21.0" - checksum: 10c0/570792211c083a1c7146613b79cbb8e0d1e14f34e974052e060e7f9dcad38c800d80fe0a18bf42811bc278ab12c0e8fd62cfce649e905046c4e55bd5a09eafdc - languageName: node - linkType: hard - "@rollup/pluginutils@npm:^4.1.1, @rollup/pluginutils@npm:^4.2.1": version: 4.2.1 resolution: "@rollup/pluginutils@npm:4.2.1" @@ -1183,114 +1136,128 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm-eabi@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.24.0" +"@rollup/rollup-android-arm-eabi@npm:4.27.4": + version: 4.27.4 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.27.4" conditions: os=android & cpu=arm languageName: node linkType: hard -"@rollup/rollup-android-arm64@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-android-arm64@npm:4.24.0" +"@rollup/rollup-android-arm64@npm:4.27.4": + version: 4.27.4 + resolution: "@rollup/rollup-android-arm64@npm:4.27.4" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-arm64@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-darwin-arm64@npm:4.24.0" +"@rollup/rollup-darwin-arm64@npm:4.27.4": + version: 4.27.4 + resolution: "@rollup/rollup-darwin-arm64@npm:4.27.4" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-x64@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-darwin-x64@npm:4.24.0" +"@rollup/rollup-darwin-x64@npm:4.27.4": + version: 4.27.4 + resolution: "@rollup/rollup-darwin-x64@npm:4.27.4" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-linux-arm-gnueabihf@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.24.0" +"@rollup/rollup-freebsd-arm64@npm:4.27.4": + version: 4.27.4 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.27.4" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-x64@npm:4.27.4": + version: 4.27.4 + resolution: "@rollup/rollup-freebsd-x64@npm:4.27.4" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-gnueabihf@npm:4.27.4": + version: 4.27.4 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.27.4" conditions: os=linux & cpu=arm & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm-musleabihf@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.24.0" +"@rollup/rollup-linux-arm-musleabihf@npm:4.27.4": + version: 4.27.4 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.27.4" conditions: os=linux & cpu=arm & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-arm64-gnu@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.24.0" +"@rollup/rollup-linux-arm64-gnu@npm:4.27.4": + version: 4.27.4 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.27.4" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm64-musl@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.24.0" +"@rollup/rollup-linux-arm64-musl@npm:4.27.4": + version: 4.27.4 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.27.4" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-powerpc64le-gnu@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.24.0" +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.27.4": + version: 4.27.4 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.27.4" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-gnu@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.24.0" +"@rollup/rollup-linux-riscv64-gnu@npm:4.27.4": + version: 4.27.4 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.27.4" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-s390x-gnu@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.24.0" +"@rollup/rollup-linux-s390x-gnu@npm:4.27.4": + version: 4.27.4 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.27.4" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-gnu@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.24.0" +"@rollup/rollup-linux-x64-gnu@npm:4.27.4": + version: 4.27.4 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.27.4" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-musl@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.24.0" +"@rollup/rollup-linux-x64-musl@npm:4.27.4": + version: 4.27.4 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.27.4" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-win32-arm64-msvc@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.24.0" +"@rollup/rollup-win32-arm64-msvc@npm:4.27.4": + version: 4.27.4 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.27.4" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-win32-ia32-msvc@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.24.0" +"@rollup/rollup-win32-ia32-msvc@npm:4.27.4": + version: 4.27.4 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.27.4" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@rollup/rollup-win32-x64-msvc@npm:4.24.0": - version: 4.24.0 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.24.0" +"@rollup/rollup-win32-x64-msvc@npm:4.27.4": + version: 4.27.4 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.27.4" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -1344,6 +1311,13 @@ __metadata: languageName: node linkType: hard +"@types/cookie@npm:^0.6.0": + version: 0.6.0 + resolution: "@types/cookie@npm:0.6.0" + checksum: 10c0/5b326bd0188120fb32c0be086b141b1481fec9941b76ad537f9110e10d61ee2636beac145463319c71e4be67a17e85b81ca9e13ceb6e3bb63b93d16824d6c149 + languageName: node + linkType: hard + "@types/estree@npm:1.0.6, @types/estree@npm:^1.0.6": version: 1.0.6 resolution: "@types/estree@npm:1.0.6" @@ -1370,13 +1344,6 @@ __metadata: languageName: node linkType: hard -"@types/history@npm:^4.7.11": - version: 4.7.11 - resolution: "@types/history@npm:4.7.11" - checksum: 10c0/3facf37c2493d1f92b2e93a22cac7ea70b06351c2ab9aaceaa3c56aa6099fb63516f6c4ec1616deb5c56b4093c026a043ea2d3373e6c0644d55710364d02c934 - languageName: node - linkType: hard - "@types/imagemin-gifsicle@npm:^7.0.1": version: 7.0.4 resolution: "@types/imagemin-gifsicle@npm:7.0.4" @@ -1473,21 +1440,12 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*": - version: 22.8.1 - resolution: "@types/node@npm:22.8.1" - dependencies: - undici-types: "npm:~6.19.8" - checksum: 10c0/83550fdf72a7db5b55eceac3f4fb038844eaee20202bdd2297a8248370cfa08317bda1605b781a8043eda4f173b75e73632e652fc85509eb14dfef78fa17337f - languageName: node - linkType: hard - -"@types/node@npm:^22.9.1": - version: 22.9.1 - resolution: "@types/node@npm:22.9.1" +"@types/node@npm:*, @types/node@npm:^22.9.3": + version: 22.9.3 + resolution: "@types/node@npm:22.9.3" dependencies: undici-types: "npm:~6.19.8" - checksum: 10c0/ea489ae603aa8874e4e88980aab6f2dad09c755da779c88dd142983bfe9609803c89415ca7781f723072934066f63daf2b3339ef084a8ad1a8079cf3958be243 + checksum: 10c0/954ec72bf29436ea62425a9563914a9c1e93f97b18194acd51d74d13998a701977547ed2985ed3a0e97211b785436d28377116e5f613bfcf3182d9bd81d784dc languageName: node linkType: hard @@ -1514,27 +1472,6 @@ __metadata: languageName: node linkType: hard -"@types/react-router-dom@npm:^5.3.3": - version: 5.3.3 - resolution: "@types/react-router-dom@npm:5.3.3" - dependencies: - "@types/history": "npm:^4.7.11" - "@types/react": "npm:*" - "@types/react-router": "npm:*" - checksum: 10c0/a9231a16afb9ed5142678147eafec9d48582809295754fb60946e29fcd3757a4c7a3180fa94b45763e4c7f6e3f02379e2fcb8dd986db479dcab40eff5fc62a91 - languageName: node - linkType: hard - -"@types/react-router@npm:*": - version: 5.1.20 - resolution: "@types/react-router@npm:5.1.20" - dependencies: - "@types/history": "npm:^4.7.11" - "@types/react": "npm:*" - checksum: 10c0/1f7eee61981d2f807fa01a34a0ef98ebc0774023832b6611a69c7f28fdff01de5a38cabf399f32e376bf8099dcb7afaf724775bea9d38870224492bea4cb5737 - languageName: node - linkType: hard - "@types/react-transition-group@npm:^4.4.11": version: 4.4.11 resolution: "@types/react-transition-group@npm:4.4.11" @@ -1709,10 +1646,9 @@ __metadata: "@table-library/react-table-library": "npm:4.1.7" "@trivago/prettier-plugin-sort-imports": "npm:^4.3.0" "@types/formidable": "npm:^3" - "@types/node": "npm:^22.9.1" + "@types/node": "npm:^22.9.3" "@types/react": "npm:^18.3.12" "@types/react-dom": "npm:^18.3.1" - "@types/react-router-dom": "npm:^5.3.3" alova: "npm:3.2.4" async-validator: "npm:^4.2.5" concurrently: "npm:^9.1.0" @@ -1726,12 +1662,12 @@ __metadata: react: "npm:^18.3.1" react-dom: "npm:^18.3.1" react-icons: "npm:^5.3.0" - react-router-dom: "npm:^6.28.0" + react-router: "npm:^7.0.1" react-toastify: "npm:^10.0.6" rollup-plugin-visualizer: "npm:^5.12.0" terser: "npm:^5.36.0" typesafe-i18n: "npm:^5.26.2" - typescript: "npm:^5.6.3" + typescript: "npm:^5.7.2" typescript-eslint: "npm:8.15.0" vite: "npm:^5.4.11" vite-plugin-imagemin: "npm:^0.6.1" @@ -1755,16 +1691,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.12.0, acorn@npm:^8.8.2": - version: 8.13.0 - resolution: "acorn@npm:8.13.0" - bin: - acorn: bin/acorn - checksum: 10c0/f35dd53d68177c90699f4c37d0bb205b8abe036d955d0eb011ddb7f14a81e6fd0f18893731c457c1b5bd96754683f4c3d80d9a5585ddecaa53cdf84e0b3d68f7 - languageName: node - linkType: hard - -"acorn@npm:^8.14.0": +"acorn@npm:^8.14.0, acorn@npm:^8.8.2": version: 8.14.0 resolution: "acorn@npm:8.14.0" bin: @@ -2168,9 +2095,9 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.30001669": - version: 1.0.30001671 - resolution: "caniuse-lite@npm:1.0.30001671" - checksum: 10c0/9bb81be7be641fdcdf4d3722b661d4204cc203a489c16080503a72b1605bd5c1061f8ae2452cc6c15d6957c818182824eb34e6569521051795f42cd14e844f99 + version: 1.0.30001683 + resolution: "caniuse-lite@npm:1.0.30001683" + checksum: 10c0/0ca7f4f2fbd0c71fde5a14ca2e29bb1dcb84c095d7a3d88e47371e062f276f1dc31da3f10931ec134ef7fb096259c0d67c9ffb843a9ec4a040a85eb2fea0bdec languageName: node linkType: hard @@ -2352,6 +2279,13 @@ __metadata: languageName: node linkType: hard +"cookie@npm:^1.0.1": + version: 1.0.2 + resolution: "cookie@npm:1.0.2" + checksum: 10c0/fd25fe79e8fbcfcaf6aa61cd081c55d144eeeba755206c058682257cb38c4bd6795c6620de3f064c740695bb65b7949ebb1db7a95e4636efb8357a335ad3f54b + languageName: node + linkType: hard + "core-util-is@npm:~1.0.0": version: 1.0.3 resolution: "core-util-is@npm:1.0.3" @@ -2384,37 +2318,26 @@ __metadata: linkType: hard "cross-spawn@npm:^6.0.0": - version: 6.0.5 - resolution: "cross-spawn@npm:6.0.5" + version: 6.0.6 + resolution: "cross-spawn@npm:6.0.6" dependencies: nice-try: "npm:^1.0.4" path-key: "npm:^2.0.1" semver: "npm:^5.5.0" shebang-command: "npm:^1.2.0" which: "npm:^1.2.9" - checksum: 10c0/e05544722e9d7189b4292c66e42b7abeb21db0d07c91b785f4ae5fefceb1f89e626da2703744657b287e86dcd4af57b54567cef75159957ff7a8a761d9055012 + checksum: 10c0/bf61fb890e8635102ea9bce050515cf915ff6a50ccaa0b37a17dc82fded0fb3ed7af5478b9367b86baee19127ad86af4be51d209f64fd6638c0862dca185fe1d languageName: node linkType: hard -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.3": - version: 7.0.3 - resolution: "cross-spawn@npm:7.0.3" +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.3, cross-spawn@npm:^7.0.5": + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" dependencies: path-key: "npm:^3.1.0" shebang-command: "npm:^2.0.0" which: "npm:^2.0.1" - checksum: 10c0/5738c312387081c98d69c98e105b6327b069197f864a60593245d64c8089c8a0a744e16349281210d56835bb9274130d825a78b2ad6853ca13cfbeffc0c31750 - languageName: node - linkType: hard - -"cross-spawn@npm:^7.0.5": - version: 7.0.5 - resolution: "cross-spawn@npm:7.0.5" - dependencies: - path-key: "npm:^3.1.0" - shebang-command: "npm:^2.0.0" - which: "npm:^2.0.1" - checksum: 10c0/aa82ce7ac0814a27e6f2b738c5a7cf1fa21a3558a1e42df449fc96541ba3ba731e4d3ecffa4435348808a86212f287c6f20a1ee551ef1ff95d01cfec5f434944 + checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 languageName: node linkType: hard @@ -2762,9 +2685,9 @@ __metadata: linkType: hard "electron-to-chromium@npm:^1.5.41": - version: 1.5.47 - resolution: "electron-to-chromium@npm:1.5.47" - checksum: 10c0/5f8c4a9f0698695960f7bef5242d52b1043020ce50b51fb534409a768847f9bdc9672cb4a6a560eeb8f8b47a04327ae9b31b2cee376cb637b3eb04a4daeaa3b8 + version: 1.5.64 + resolution: "electron-to-chromium@npm:1.5.64" + checksum: 10c0/331c2160cc37ef85317b44f2078af8ff16f068fc95d4af2210fe943b567f20b1445a7faa40c05d290bc229102ef1b662371464ba2725d10ff6c8543af6d40adf languageName: node linkType: hard @@ -3180,13 +3103,6 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^4.1.0": - version: 4.1.0 - resolution: "eslint-visitor-keys@npm:4.1.0" - checksum: 10c0/5483ef114c93a136aa234140d7aa3bd259488dae866d35cb0d0b52e6a158f614760a57256ac8d549acc590a87042cb40f6951815caa821e55dc4fd6ef4c722eb - languageName: node - linkType: hard - "eslint-visitor-keys@npm:^4.2.0": version: 4.2.0 resolution: "eslint-visitor-keys@npm:4.2.0" @@ -3243,18 +3159,7 @@ __metadata: languageName: node linkType: hard -"espree@npm:^10.0.1": - version: 10.2.0 - resolution: "espree@npm:10.2.0" - dependencies: - acorn: "npm:^8.12.0" - acorn-jsx: "npm:^5.3.2" - eslint-visitor-keys: "npm:^4.1.0" - checksum: 10c0/2b6bfb683e7e5ab2e9513949879140898d80a2d9867ea1db6ff5b0256df81722633b60a7523a7c614f05a39aeea159dd09ad2a0e90c0e218732fc016f9086215 - languageName: node - linkType: hard - -"espree@npm:^10.3.0": +"espree@npm:^10.0.1, espree@npm:^10.3.0": version: 10.3.0 resolution: "espree@npm:10.3.0" dependencies: @@ -3621,9 +3526,9 @@ __metadata: linkType: hard "flatted@npm:^3.2.9": - version: 3.3.1 - resolution: "flatted@npm:3.3.1" - checksum: 10c0/324166b125ee07d4ca9bcf3a5f98d915d5db4f39d711fba640a3178b959919aae1f7cfd8aabcfef5826ed8aa8a2aa14cc85b2d7d18ff638ddf4ae3df39573eaf + version: 3.3.2 + resolution: "flatted@npm:3.3.2" + checksum: 10c0/24cc735e74d593b6c767fe04f2ef369abe15b62f6906158079b9874bdb3ee5ae7110bb75042e70cd3f99d409d766f357caf78d5ecee9780206f5fdc5edbad334 languageName: node linkType: hard @@ -5560,7 +5465,7 @@ __metadata: languageName: node linkType: hard -"picocolors@npm:^1.0.0, picocolors@npm:^1.1.0": +"picocolors@npm:^1.0.0, picocolors@npm:^1.1.0, picocolors@npm:^1.1.1": version: 1.1.1 resolution: "picocolors@npm:1.1.1" checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 @@ -5625,13 +5530,13 @@ __metadata: linkType: hard "postcss@npm:^8.4.43": - version: 8.4.47 - resolution: "postcss@npm:8.4.47" + version: 8.4.49 + resolution: "postcss@npm:8.4.49" dependencies: nanoid: "npm:^3.3.7" - picocolors: "npm:^1.1.0" + picocolors: "npm:^1.1.1" source-map-js: "npm:^1.2.1" - checksum: 10c0/929f68b5081b7202709456532cee2a145c1843d391508c5a09de2517e8c4791638f71dd63b1898dba6712f8839d7a6da046c72a5e44c162e908f5911f57b5f44 + checksum: 10c0/f1b3f17aaf36d136f59ec373459f18129908235e65dbdc3aee5eef8eba0756106f52de5ec4682e29a2eab53eb25170e7e871b3e4b52a8f1de3d344a514306be3 languageName: node linkType: hard @@ -5798,27 +5703,21 @@ __metadata: languageName: node linkType: hard -"react-router-dom@npm:^6.28.0": - version: 6.28.0 - resolution: "react-router-dom@npm:6.28.0" - dependencies: - "@remix-run/router": "npm:1.21.0" - react-router: "npm:6.28.0" - peerDependencies: - react: ">=16.8" - react-dom: ">=16.8" - checksum: 10c0/e2930cf83e8c843a932b008c7ce11059fd83390502a433f0e41f192e3cb80081a621d069eeda7af3cf4bf74d7f8029f0141cdce741bca3f0af82d4bbbc7f7f10 - languageName: node - linkType: hard - -"react-router@npm:6.28.0": - version: 6.28.0 - resolution: "react-router@npm:6.28.0" +"react-router@npm:^7.0.1": + version: 7.0.1 + resolution: "react-router@npm:7.0.1" dependencies: - "@remix-run/router": "npm:1.21.0" + "@types/cookie": "npm:^0.6.0" + cookie: "npm:^1.0.1" + set-cookie-parser: "npm:^2.6.0" + turbo-stream: "npm:2.4.0" peerDependencies: - react: ">=16.8" - checksum: 10c0/b435510de78fd882bf6ca9800a73cd90cee418bd1d19efd91b8dcaebde36929bbb589e25d9f7eec24ceb84255e8d538bc1fe54e6ddb5c43c32798e2b720fa76d + react: ">=18" + react-dom: ">=18" + peerDependenciesMeta: + react-dom: + optional: true + checksum: 10c0/aac4c9989ae6b9cf989b5ddcda88f505ba0704a4e4b37ae04c819c2bd02f080361f9eb1793695e3ecf41080d91b79aee454c3163b586d1b19ceca13f6eacec0e languageName: node linkType: hard @@ -6044,25 +5943,27 @@ __metadata: linkType: hard "rollup@npm:^4.20.0": - version: 4.24.0 - resolution: "rollup@npm:4.24.0" - dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.24.0" - "@rollup/rollup-android-arm64": "npm:4.24.0" - "@rollup/rollup-darwin-arm64": "npm:4.24.0" - "@rollup/rollup-darwin-x64": "npm:4.24.0" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.24.0" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.24.0" - "@rollup/rollup-linux-arm64-gnu": "npm:4.24.0" - "@rollup/rollup-linux-arm64-musl": "npm:4.24.0" - "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.24.0" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.24.0" - "@rollup/rollup-linux-s390x-gnu": "npm:4.24.0" - "@rollup/rollup-linux-x64-gnu": "npm:4.24.0" - "@rollup/rollup-linux-x64-musl": "npm:4.24.0" - "@rollup/rollup-win32-arm64-msvc": "npm:4.24.0" - "@rollup/rollup-win32-ia32-msvc": "npm:4.24.0" - "@rollup/rollup-win32-x64-msvc": "npm:4.24.0" + version: 4.27.4 + resolution: "rollup@npm:4.27.4" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.27.4" + "@rollup/rollup-android-arm64": "npm:4.27.4" + "@rollup/rollup-darwin-arm64": "npm:4.27.4" + "@rollup/rollup-darwin-x64": "npm:4.27.4" + "@rollup/rollup-freebsd-arm64": "npm:4.27.4" + "@rollup/rollup-freebsd-x64": "npm:4.27.4" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.27.4" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.27.4" + "@rollup/rollup-linux-arm64-gnu": "npm:4.27.4" + "@rollup/rollup-linux-arm64-musl": "npm:4.27.4" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.27.4" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.27.4" + "@rollup/rollup-linux-s390x-gnu": "npm:4.27.4" + "@rollup/rollup-linux-x64-gnu": "npm:4.27.4" + "@rollup/rollup-linux-x64-musl": "npm:4.27.4" + "@rollup/rollup-win32-arm64-msvc": "npm:4.27.4" + "@rollup/rollup-win32-ia32-msvc": "npm:4.27.4" + "@rollup/rollup-win32-x64-msvc": "npm:4.27.4" "@types/estree": "npm:1.0.6" fsevents: "npm:~2.3.2" dependenciesMeta: @@ -6074,6 +5975,10 @@ __metadata: optional: true "@rollup/rollup-darwin-x64": optional: true + "@rollup/rollup-freebsd-arm64": + optional: true + "@rollup/rollup-freebsd-x64": + optional: true "@rollup/rollup-linux-arm-gnueabihf": optional: true "@rollup/rollup-linux-arm-musleabihf": @@ -6102,7 +6007,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 10c0/77fb549c1de8afd1142d2da765adbb0cdab9f13c47df5217f00b5cf40b74219caa48c6ba2157f6249313ee81b6fa4c4fa8b3d2a0347ad6220739e00e580a808d + checksum: 10c0/1442650cfea5e4617ce14743784f6f578817e31db56f9c8aaf96a82daa9bc20b6ccd66c0d677dbf302a4da3e70664dc3bef11a1aec85e6aff3cecccb945b1d35 languageName: node linkType: hard @@ -6209,6 +6114,13 @@ __metadata: languageName: node linkType: hard +"set-cookie-parser@npm:^2.6.0": + version: 2.7.1 + resolution: "set-cookie-parser@npm:2.7.1" + checksum: 10c0/060c198c4c92547ac15988256f445eae523f57f2ceefeccf52d30d75dedf6bff22b9c26f756bd44e8e560d44ff4ab2130b178bd2e52ef5571bf7be3bd7632d9a + languageName: node + linkType: hard + "shebang-command@npm:^1.2.0": version: 1.2.0 resolution: "shebang-command@npm:1.2.0" @@ -6747,11 +6659,11 @@ __metadata: linkType: hard "ts-api-utils@npm:^1.3.0": - version: 1.3.0 - resolution: "ts-api-utils@npm:1.3.0" + version: 1.4.0 + resolution: "ts-api-utils@npm:1.4.0" peerDependencies: typescript: ">=4.2.0" - checksum: 10c0/f54a0ba9ed56ce66baea90a3fa087a484002e807f28a8ccb2d070c75e76bde64bd0f6dce98b3802834156306050871b67eec325cb4e918015a360a3f0868c77c + checksum: 10c0/1b2bfa50ea52771d564bb143bb69010d25cda03ed573095fbac9b86f717012426443af6647e00e3db70fca60360482a30c1be7cf73c3521c321f6bf5e3594ea0 languageName: node linkType: hard @@ -6770,9 +6682,9 @@ __metadata: linkType: hard "tslib@npm:^2.1.0": - version: 2.8.0 - resolution: "tslib@npm:2.8.0" - checksum: 10c0/31e4d14dc1355e9b89e4d3c893a18abb7f90b6886b089c2da91224d0a7752c79f3ddc41bc1aa0a588ac895bd97bb99c5bc2bfdb2f86de849f31caeb3ba79bbe5 + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 languageName: node linkType: hard @@ -6785,6 +6697,13 @@ __metadata: languageName: node linkType: hard +"turbo-stream@npm:2.4.0": + version: 2.4.0 + resolution: "turbo-stream@npm:2.4.0" + checksum: 10c0/e68b2569f1f16e6e9633d090c6024b2ae9f0e97bfeacb572451ca3732e120ebbb546f3bc4afc717c46cb57b5aea6104e04ef497f9912eef6a7641e809518e98a + languageName: node + linkType: hard + "type-check@npm:^0.4.0, type-check@npm:~0.4.0": version: 0.4.0 resolution: "type-check@npm:0.4.0" @@ -6828,23 +6747,23 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^5.6.3": - version: 5.6.3 - resolution: "typescript@npm:5.6.3" +"typescript@npm:^5.7.2": + version: 5.7.2 + resolution: "typescript@npm:5.7.2" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/44f61d3fb15c35359bc60399cb8127c30bae554cd555b8e2b46d68fa79d680354b83320ad419ff1b81a0bdf324197b29affe6cc28988cd6a74d4ac60c94f9799 + checksum: 10c0/a873118b5201b2ef332127ef5c63fb9d9c155e6fdbe211cbd9d8e65877283797cca76546bad742eea36ed7efbe3424a30376818f79c7318512064e8625d61622 languageName: node linkType: hard -"typescript@patch:typescript@npm%3A^5.6.3#optional!builtin": - version: 5.6.3 - resolution: "typescript@patch:typescript@npm%3A5.6.3#optional!builtin::version=5.6.3&hash=8c6c40" +"typescript@patch:typescript@npm%3A^5.7.2#optional!builtin": + version: 5.7.2 + resolution: "typescript@patch:typescript@npm%3A5.7.2#optional!builtin::version=5.7.2&hash=5786d5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/7c9d2e07c81226d60435939618c91ec2ff0b75fbfa106eec3430f0fcf93a584bc6c73176676f532d78c3594fe28a54b36eb40b3d75593071a7ec91301533ace7 + checksum: 10c0/f3b8082c9d1d1629a215245c9087df56cb784f9fb6f27b5d55577a20e68afe2a889c040aacff6d27e35be165ecf9dca66e694c42eb9a50b3b2c451b36b5675cb languageName: node linkType: hard diff --git a/lib/framework/ESP8266React.h b/lib/framework/ESP8266React.h index fd61a389d..7cecdda17 100644 --- a/lib/framework/ESP8266React.h +++ b/lib/framework/ESP8266React.h @@ -57,10 +57,6 @@ class ESP8266React { // special functions needed outside scope // - void setWill(const char * will_topic) { - _mqttSettingsService.setWill(will_topic); - } - // true if AP is active bool apStatus() { return _apSettingsService.getAPNetworkStatus() == APNetworkStatus::ACTIVE; diff --git a/lib/framework/MqttSettingsService.cpp b/lib/framework/MqttSettingsService.cpp index 9274ae49b..0c24304e6 100644 --- a/lib/framework/MqttSettingsService.cpp +++ b/lib/framework/MqttSettingsService.cpp @@ -101,16 +101,6 @@ const char * MqttSettingsService::getClientId() { return _mqttClient->getClientId(); } -void MqttSettingsService::setWill(const char * topic) { -#ifndef TASMOTA_SDK - if (_state.enableTLS) { - static_cast(_mqttClient)->setWill(topic, 1, true, "offline"); - return; - } -#endif - static_cast(_mqttClient)->setWill(topic, 1, true, "offline"); -} - void MqttSettingsService::onMqttMessage(const espMqttClientTypes::MessageProperties & properties, const char * topic, const uint8_t * payload, @@ -183,6 +173,14 @@ bool MqttSettingsService::configureMqtt() { // only connect if WiFi is connected and MQTT is enabled if (_state.enabled && emsesp::EMSESP::system_.network_connected() && !_state.host.isEmpty()) { + // create last will topic with the base prefixed. It has to be static because the client destroys the reference + static char will_topic[FACTORY_MQTT_MAX_TOPIC_LENGTH]; + if (_state.base.isEmpty()) { + snprintf(will_topic, sizeof(will_topic), "status"); + } else { + snprintf(will_topic, sizeof(will_topic), "%s/status", _state.base.c_str()); + } + _reconfigureMqtt = false; #ifndef TASMOTA_SDK if (_state.enableTLS) { @@ -197,6 +195,7 @@ bool MqttSettingsService::configureMqtt() { static_cast(_mqttClient)->setClientId(_state.clientId.c_str()); static_cast(_mqttClient)->setKeepAlive(_state.keepAlive); static_cast(_mqttClient)->setCleanSession(_state.cleanSession); + static_cast(_mqttClient)->setWill(will_topic, 1, true, "offline"); // QOS 1, retain return _mqttClient->connect(); } #endif @@ -207,6 +206,7 @@ bool MqttSettingsService::configureMqtt() { static_cast(_mqttClient)->setClientId(_state.clientId.c_str()); static_cast(_mqttClient)->setKeepAlive(_state.keepAlive); static_cast(_mqttClient)->setCleanSession(_state.cleanSession); + static_cast(_mqttClient)->setWill(will_topic, 1, true, "offline"); // QOS 1, retain return _mqttClient->connect(); } diff --git a/lib/framework/MqttSettingsService.h b/lib/framework/MqttSettingsService.h index 0ea187e0c..ef448af0d 100644 --- a/lib/framework/MqttSettingsService.h +++ b/lib/framework/MqttSettingsService.h @@ -101,7 +101,6 @@ class MqttSettingsService : public StatefulService { const char * getClientId(); espMqttClientTypes::DisconnectReason getDisconnectReason(); MqttClient * getMqttClient(); - void setWill(const char * topic); protected: void onConfigUpdated(); diff --git a/mock-api/rest_server.ts b/mock-api/rest_server.ts index c3abfdd60..56a752281 100644 --- a/mock-api/rest_server.ts +++ b/mock-api/rest_server.ts @@ -216,14 +216,24 @@ function check_upgrade(version: string) { if (version) { const dev_version = version.split(',')[0]; const stable_version = version.split(',')[1]; - console.log("latest dev version: " + dev_version + ", latest stable version: " + stable_version); - console.log('Version upgrade check from version ' + THIS_VERSION + ', upgradable: ' + VERSION_IS_UPGRADEABLE); + console.log( + 'latest dev version: ' + + dev_version + + ', latest stable version: ' + + stable_version + ); + console.log( + 'Version upgrade check from version ' + + THIS_VERSION + + ', upgradable: ' + + VERSION_IS_UPGRADEABLE + ); data = { emsesp_version: THIS_VERSION, upgradeable: VERSION_IS_UPGRADEABLE }; } else { - console.log('requesting ems-esp version ('+THIS_VERSION+')'); + console.log('requesting ems-esp version (' + THIS_VERSION + ')'); data = { emsesp_version: THIS_VERSION }; @@ -4898,11 +4908,11 @@ router router .get(GH_ENDPOINT_ROOT + '/tags/latest', () => { console.log('returning latest development version: ' + LATEST_DEV_VERSION); - return { name: 'v'+LATEST_DEV_VERSION }; + return { name: 'v' + LATEST_DEV_VERSION }; }) .get(GH_ENDPOINT_ROOT + '/latest', () => { console.log('returning latest stable version: ' + LATEST_STABLE_VERSION); - return { name: 'v'+LATEST_STABLE_VERSION }; + return { name: 'v' + LATEST_STABLE_VERSION }; }); export default router; diff --git a/mock-api/yarn.lock b/mock-api/yarn.lock index 4e8b439bd..7e65c5b64 100644 --- a/mock-api/yarn.lock +++ b/mock-api/yarn.lock @@ -6,13 +6,13 @@ __metadata: cacheKey: 10c0 "@babel/code-frame@npm:^7.22.13, @babel/code-frame@npm:^7.25.9": - version: 7.26.0 - resolution: "@babel/code-frame@npm:7.26.0" + version: 7.26.2 + resolution: "@babel/code-frame@npm:7.26.2" dependencies: "@babel/helper-validator-identifier": "npm:^7.25.9" js-tokens: "npm:^4.0.0" picocolors: "npm:^1.0.0" - checksum: 10c0/46f7e367714be736b52ea3c01b24f47e2102e210fb83021d1c8237d8fc511b9538909e16e2fcdbb5cb6173e0794e28624309a59014e52fcfb7bde908f5284388 + checksum: 10c0/7d79621a6849183c415486af99b1a20b84737e8c11cd55b6544f688c51ce1fd710e6d869c3dd21232023da272a79b91efb3e83b5bc2dc65c1187c5fcd1b72ea8 languageName: node linkType: hard @@ -28,15 +28,15 @@ __metadata: linkType: hard "@babel/generator@npm:^7.23.0": - version: 7.26.0 - resolution: "@babel/generator@npm:7.26.0" + version: 7.26.2 + resolution: "@babel/generator@npm:7.26.2" dependencies: - "@babel/parser": "npm:^7.26.0" + "@babel/parser": "npm:^7.26.2" "@babel/types": "npm:^7.26.0" "@jridgewell/gen-mapping": "npm:^0.3.5" "@jridgewell/trace-mapping": "npm:^0.3.25" jsesc: "npm:^3.0.2" - checksum: 10c0/b6bb9185f19a97eaf58e04a6d39a13237076678e7ed16b6321dea914535d4bf6a8d7727c9dcb65539845aa0096b326eb67be4bab764bd74bcfd848e2eda68609 + checksum: 10c0/167ebce8977142f5012fad6bd91da51ac52bcd752f2261a54b7ab605d928aebe57e21636cdd2a9c7757e552652c68d9fcb5d40b06fcb66e02d9ee7526e118a5c languageName: node linkType: hard @@ -91,14 +91,14 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.20.5, @babel/parser@npm:^7.23.0, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.0": - version: 7.26.1 - resolution: "@babel/parser@npm:7.26.1" +"@babel/parser@npm:^7.20.5, @babel/parser@npm:^7.23.0, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.2": + version: 7.26.2 + resolution: "@babel/parser@npm:7.26.2" dependencies: "@babel/types": "npm:^7.26.0" bin: parser: ./bin/babel-parser.js - checksum: 10c0/dc7d4e6b7eb667fa0784e7e2c3f6f92ca12ad72242f6d4311995310dae55093f02acdb595b69b0dbbf04cb61ad87156ac03186ff32eacfa35149c655bc22c14b + checksum: 10c0/751a743087b3a9172a7599f1421830d44c38f065ef781588d2bfb1c98f9b461719a226feb13c868d7a284783eee120c88ea522593118f2668f46ebfb1105c4d7 languageName: node linkType: hard diff --git a/project-words.txt b/project-words.txt index 40900bbbe..e828170bb 100644 --- a/project-words.txt +++ b/project-words.txt @@ -1375,4 +1375,18 @@ startshp cyltoptemp transferpump transferpumpmod -startshp \ No newline at end of file +startshp +tempstatus +difftemp +redtemp +requiredtemp +coldtemp +redtemp +hottemp +dailytemp +circtc +keepwarm +pumpmod +valvereturn +deltatret +errordisp diff --git a/src/modbus_entity_parameters.hpp b/src/modbus_entity_parameters.hpp index 7329e2f39..904847f5d 100644 --- a/src/modbus_entity_parameters.hpp +++ b/src/modbus_entity_parameters.hpp @@ -545,6 +545,20 @@ const std::initializer_list Modbus::modbus_register_ma REGISTER_MAPPING(dt::WATER, TAG_TYPE_DHW, FL_(wwDiffTemp), 13, 1), // difftemp REGISTER_MAPPING(dt::WATER, TAG_TYPE_DHW, FL_(wwRedTemp), 14, 1), // redtemp REGISTER_MAPPING(dt::WATER, TAG_TYPE_DHW, FL_(wwRequiredTemp), 15, 1), // requiredtemp + REGISTER_MAPPING(dt::WATER, TAG_TYPE_DHW, FL_(wwStorageTemp1), 16, 1), // storagetemp1 + REGISTER_MAPPING(dt::WATER, TAG_TYPE_DHW, FL_(wwColdTemp), 17, 1), // coldtemp + REGISTER_MAPPING(dt::WATER, TAG_TYPE_DHW, FL_(wwTemp5), 18, 1), // temp5 + REGISTER_MAPPING(dt::WATER, TAG_TYPE_DHW, FL_(retTemp), 19, 1), // rettemp + REGISTER_MAPPING(dt::WATER, TAG_TYPE_DHW, FL_(wwHotTemp), 20, 1), // hottemp + REGISTER_MAPPING(dt::WATER, TAG_TYPE_DHW, FL_(wwDailyTemp), 21, 1), // dailytemp + REGISTER_MAPPING(dt::WATER, TAG_TYPE_DHW, FL_(wwCircTc), 22, 1), // circtc + REGISTER_MAPPING(dt::WATER, TAG_TYPE_DHW, FL_(wwKeepWarm), 23, 1), // keepwarm + REGISTER_MAPPING(dt::WATER, TAG_TYPE_DHW, FL_(wwStatus2), 24, 1), // status2 + REGISTER_MAPPING(dt::WATER, TAG_TYPE_DHW, FL_(wwPumpMod), 25, 1), // pumpmod + REGISTER_MAPPING(dt::WATER, TAG_TYPE_DHW, FL_(wwFlow), 26, 1), // flow + REGISTER_MAPPING(dt::WATER, TAG_TYPE_DHW, FL_(valveReturn), 27, 1), // valvereturn + REGISTER_MAPPING(dt::WATER, TAG_TYPE_DHW, FL_(deltaTRet), 28, 1), // deltatret + REGISTER_MAPPING(dt::WATER, TAG_TYPE_DHW, FL_(errorDisp), 29, 1), // errordisp }; } // namespace emsesp diff --git a/src/mqtt.cpp b/src/mqtt.cpp index 5fef8e371..88e7f453b 100644 --- a/src/mqtt.cpp +++ b/src/mqtt.cpp @@ -386,16 +386,6 @@ void Mqtt::start() { // add the 'publish' command ('call system publish' in console or via API) Command::add(EMSdevice::DeviceType::SYSTEM, F_(publish), System::command_publish, FL_(publish_cmd)); - // create last will topic with the base prefixed. It has to be static because the client destroys the reference - static char will_topic[MQTT_TOPIC_MAX_SIZE]; - if (!Mqtt::base().empty()) { - snprintf(will_topic, MQTT_TOPIC_MAX_SIZE, "%s/status", Mqtt::base().c_str()); - } else { - snprintf(will_topic, MQTT_TOPIC_MAX_SIZE, "status"); - } - - EMSESP::esp8266React.setWill(will_topic); // with qos 1, retain true - #if defined(EMSESP_STANDALONE) Mqtt::on_connect(); // simulate an MQTT connection #endif diff --git a/src/version.h b/src/version.h index e09db829f..881539f8f 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define EMSESP_APP_VERSION "3.7.1-dev.10" \ No newline at end of file +#define EMSESP_APP_VERSION "3.7.1-dev.12" \ No newline at end of file