Merge pull request #2498 from proddy/dev

fixes #2497
This commit is contained in:
Proddy
2025-03-31 10:19:13 +02:00
committed by GitHub
44 changed files with 1152 additions and 1119 deletions

View File

@@ -30,7 +30,7 @@ jobs:
- name: Get EMS-ESP version - name: Get EMS-ESP version
id: build_info id: build_info
run: | run: |
version=`grep -E '^#define EMSESP_APP_VERSION' ./src/version.h | awk -F'"' '{print $2}'` version=`grep -E '^#define EMSESP_APP_VERSION' ./src/emsesp_version.h | awk -F'"' '{print $2}'`
echo "VERSION=$version" >> $GITHUB_OUTPUT echo "VERSION=$version" >> $GITHUB_OUTPUT
- name: Install PlatformIO - name: Install PlatformIO

View File

@@ -28,7 +28,7 @@ jobs:
- name: Get EMS-ESP source code and version - name: Get EMS-ESP source code and version
id: build_info id: build_info
run: | run: |
version=`grep -E '^#define EMSESP_APP_VERSION' ./src/version.h | awk -F'"' '{print $2}'` version=`grep -E '^#define EMSESP_APP_VERSION' ./src/emsesp_version.h | awk -F'"' '{print $2}'`
echo "VERSION=$version" >> $GITHUB_OUTPUT echo "VERSION=$version" >> $GITHUB_OUTPUT
- name: Install PlatformIO - name: Install PlatformIO

1
.gitignore vendored
View File

@@ -76,3 +76,4 @@ CMakeLists.txt
logs/* logs/*
sdkconfig.* sdkconfig.*
sdkconfig_tasmota_esp32 sdkconfig_tasmota_esp32
yarn.lock

View File

@@ -98,7 +98,7 @@ CXX := /usr/bin/g++
# LDFLAGS Linker Flags # LDFLAGS Linker Flags
#---------------------------------------------------------------------- #----------------------------------------------------------------------
CPPFLAGS += $(DEFINES) $(DEFAULTS) $(INCLUDE) CPPFLAGS += $(DEFINES) $(DEFAULTS) $(INCLUDE)
CPPFLAGS += -ggdb -g3 -O3 CPPFLAGS += -ggdb -g3
CPPFLAGS += -MMD CPPFLAGS += -MMD
CPPFLAGS += -flto=auto -fno-lto CPPFLAGS += -flto=auto -fno-lto
CPPFLAGS += -Wall -Wextra -Werror CPPFLAGS += -Wall -Wextra -Werror

View File

@@ -377,7 +377,7 @@
| maxheatcomp | heat limit compressor | enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW] | | true | DEVICE_DATA | 206 | 1 | 1 | | maxheatcomp | heat limit compressor | enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW] | | true | DEVICE_DATA | 206 | 1 | 1 |
| maxheatheat | heat limit heating | enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW] | | true | DEVICE_DATA | 207 | 1 | 1 | | maxheatheat | heat limit heating | enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW] | | true | DEVICE_DATA | 207 | 1 | 1 |
| dhw.maxheat | heat limit | enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW] | | true | DHW | 14 | 1 | 1 | | dhw.maxheat | heat limit | enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW] | | true | DHW | 14 | 1 | 1 |
| mandefrost | manual defrost | boolean | | true | DEVICE_DATA | 208 | 1 | 1 | | auxheatersource | aux heater source | enum [not installed\|electric heater\|exclusive\|parallel\|hybrid] | | true | DEVICE_DATA | 208 | 1 | 1 |
| pvcooling | cooling only with PV | boolean | | true | DEVICE_DATA | 209 | 1 | 1 | | pvcooling | cooling only with PV | boolean | | true | DEVICE_DATA | 209 | 1 | 1 |
| auxheateronly | aux heater only | boolean | | true | DEVICE_DATA | 210 | 1 | 1 | | auxheateronly | aux heater only | boolean | | true | DEVICE_DATA | 210 | 1 | 1 |
| auxheateroff | disable aux heater | boolean | | true | DEVICE_DATA | 211 | 1 | 1 | | auxheateroff | disable aux heater | boolean | | true | DEVICE_DATA | 211 | 1 | 1 |
@@ -1532,7 +1532,7 @@
| maxheatcomp | heat limit compressor | enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW] | | true | DEVICE_DATA | 206 | 1 | 1 | | maxheatcomp | heat limit compressor | enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW] | | true | DEVICE_DATA | 206 | 1 | 1 |
| maxheatheat | heat limit heating | enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW] | | true | DEVICE_DATA | 207 | 1 | 1 | | maxheatheat | heat limit heating | enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW] | | true | DEVICE_DATA | 207 | 1 | 1 |
| dhw.maxheat | heat limit | enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW] | | true | DHW | 14 | 1 | 1 | | dhw.maxheat | heat limit | enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW] | | true | DHW | 14 | 1 | 1 |
| mandefrost | manual defrost | boolean | | true | DEVICE_DATA | 208 | 1 | 1 | | auxheatersource | aux heater source | enum [not installed\|electric heater\|exclusive\|parallel\|hybrid] | | true | DEVICE_DATA | 208 | 1 | 1 |
| pvcooling | cooling only with PV | boolean | | true | DEVICE_DATA | 209 | 1 | 1 | | pvcooling | cooling only with PV | boolean | | true | DEVICE_DATA | 209 | 1 | 1 |
| auxheateronly | aux heater only | boolean | | true | DEVICE_DATA | 210 | 1 | 1 | | auxheateronly | aux heater only | boolean | | true | DEVICE_DATA | 210 | 1 | 1 |
| auxheateroff | disable aux heater | boolean | | true | DEVICE_DATA | 211 | 1 | 1 | | auxheateroff | disable aux heater | boolean | | true | DEVICE_DATA | 211 | 1 | 1 |
@@ -2097,7 +2097,7 @@
| maxheatcomp | heat limit compressor | enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW] | | true | DEVICE_DATA | 206 | 1 | 1 | | maxheatcomp | heat limit compressor | enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW] | | true | DEVICE_DATA | 206 | 1 | 1 |
| maxheatheat | heat limit heating | enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW] | | true | DEVICE_DATA | 207 | 1 | 1 | | maxheatheat | heat limit heating | enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW] | | true | DEVICE_DATA | 207 | 1 | 1 |
| dhw.maxheat | heat limit | enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW] | | true | DHW | 14 | 1 | 1 | | dhw.maxheat | heat limit | enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW] | | true | DHW | 14 | 1 | 1 |
| mandefrost | manual defrost | boolean | | true | DEVICE_DATA | 208 | 1 | 1 | | auxheatersource | aux heater source | enum [not installed\|electric heater\|exclusive\|parallel\|hybrid] | | true | DEVICE_DATA | 208 | 1 | 1 |
| pvcooling | cooling only with PV | boolean | | true | DEVICE_DATA | 209 | 1 | 1 | | pvcooling | cooling only with PV | boolean | | true | DEVICE_DATA | 209 | 1 | 1 |
| auxheateronly | aux heater only | boolean | | true | DEVICE_DATA | 210 | 1 | 1 | | auxheateronly | aux heater only | boolean | | true | DEVICE_DATA | 210 | 1 | 1 |
| auxheateroff | disable aux heater | boolean | | true | DEVICE_DATA | 211 | 1 | 1 | | auxheateroff | disable aux heater | boolean | | true | DEVICE_DATA | 211 | 1 | 1 |

View File

@@ -118,7 +118,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/
"CS*800i, Logatherm WLW*",boiler,8,maxheatcomp,heat limit compressor,enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW], ,true,select.boiler_heat_limit_compressor,select.boiler_maxheatcomp,5,0,1,206,1 "CS*800i, Logatherm WLW*",boiler,8,maxheatcomp,heat limit compressor,enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW], ,true,select.boiler_heat_limit_compressor,select.boiler_maxheatcomp,5,0,1,206,1
"CS*800i, Logatherm WLW*",boiler,8,maxheatheat,heat limit heating,enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW], ,true,select.boiler_heat_limit_heating,select.boiler_maxheatheat,5,0,1,207,1 "CS*800i, Logatherm WLW*",boiler,8,maxheatheat,heat limit heating,enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW], ,true,select.boiler_heat_limit_heating,select.boiler_maxheatheat,5,0,1,207,1
"CS*800i, Logatherm WLW*",boiler,8,dhw.maxheat,heat limit,enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW], ,true,select.boiler_dhw_heat_limit,select.boiler_dhw_maxheat,5,9,1,14,1 "CS*800i, Logatherm WLW*",boiler,8,dhw.maxheat,heat limit,enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW], ,true,select.boiler_dhw_heat_limit,select.boiler_dhw_maxheat,5,9,1,14,1
"CS*800i, Logatherm WLW*",boiler,8,mandefrost,manual defrost,boolean, ,true,switch.boiler_manual_defrost,switch.boiler_mandefrost,5,0,1,208,1 "CS*800i, Logatherm WLW*",boiler,8,auxheatersource,aux heater source,enum [not installed\|electric heater\|exclusive\|parallel\|hybrid], ,true,select.boiler_aux_heater_source,select.boiler_auxheatersource,5,0,1,208,1
"CS*800i, Logatherm WLW*",boiler,8,pvcooling,cooling only with PV,boolean, ,true,switch.boiler_cooling_only_with_PV,switch.boiler_pvcooling,5,0,1,209,1 "CS*800i, Logatherm WLW*",boiler,8,pvcooling,cooling only with PV,boolean, ,true,switch.boiler_cooling_only_with_PV,switch.boiler_pvcooling,5,0,1,209,1
"CS*800i, Logatherm WLW*",boiler,8,auxheateronly,aux heater only,boolean, ,true,switch.boiler_aux_heater_only,switch.boiler_auxheateronly,5,0,1,210,1 "CS*800i, Logatherm WLW*",boiler,8,auxheateronly,aux heater only,boolean, ,true,switch.boiler_aux_heater_only,switch.boiler_auxheateronly,5,0,1,210,1
"CS*800i, Logatherm WLW*",boiler,8,auxheateroff,disable aux heater,boolean, ,true,switch.boiler_disable_aux_heater,switch.boiler_auxheateroff,5,0,1,211,1 "CS*800i, Logatherm WLW*",boiler,8,auxheateroff,disable aux heater,boolean, ,true,switch.boiler_disable_aux_heater,switch.boiler_auxheateroff,5,0,1,211,1
@@ -2377,7 +2377,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/
"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,maxheatcomp,heat limit compressor,enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW], ,true,select.boiler_heat_limit_compressor,select.boiler_maxheatcomp,5,0,1,206,1 "Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,maxheatcomp,heat limit compressor,enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW], ,true,select.boiler_heat_limit_compressor,select.boiler_maxheatcomp,5,0,1,206,1
"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,maxheatheat,heat limit heating,enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW], ,true,select.boiler_heat_limit_heating,select.boiler_maxheatheat,5,0,1,207,1 "Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,maxheatheat,heat limit heating,enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW], ,true,select.boiler_heat_limit_heating,select.boiler_maxheatheat,5,0,1,207,1
"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,dhw.maxheat,heat limit,enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW], ,true,select.boiler_dhw_heat_limit,select.boiler_dhw_maxheat,5,9,1,14,1 "Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,dhw.maxheat,heat limit,enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW], ,true,select.boiler_dhw_heat_limit,select.boiler_dhw_maxheat,5,9,1,14,1
"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,mandefrost,manual defrost,boolean, ,true,switch.boiler_manual_defrost,switch.boiler_mandefrost,5,0,1,208,1 "Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,auxheatersource,aux heater source,enum [not installed\|electric heater\|exclusive\|parallel\|hybrid], ,true,select.boiler_aux_heater_source,select.boiler_auxheatersource,5,0,1,208,1
"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,pvcooling,cooling only with PV,boolean, ,true,switch.boiler_cooling_only_with_PV,switch.boiler_pvcooling,5,0,1,209,1 "Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,pvcooling,cooling only with PV,boolean, ,true,switch.boiler_cooling_only_with_PV,switch.boiler_pvcooling,5,0,1,209,1
"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,auxheateronly,aux heater only,boolean, ,true,switch.boiler_aux_heater_only,switch.boiler_auxheateronly,5,0,1,210,1 "Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,auxheateronly,aux heater only,boolean, ,true,switch.boiler_aux_heater_only,switch.boiler_auxheateronly,5,0,1,210,1
"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,auxheateroff,disable aux heater,boolean, ,true,switch.boiler_disable_aux_heater,switch.boiler_auxheateroff,5,0,1,211,1 "Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,auxheateroff,disable aux heater,boolean, ,true,switch.boiler_disable_aux_heater,switch.boiler_auxheateroff,5,0,1,211,1
@@ -2584,7 +2584,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/
"Geo 5xx",boiler,173,maxheatcomp,heat limit compressor,enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW], ,true,select.boiler_heat_limit_compressor,select.boiler_maxheatcomp,5,0,1,206,1 "Geo 5xx",boiler,173,maxheatcomp,heat limit compressor,enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW], ,true,select.boiler_heat_limit_compressor,select.boiler_maxheatcomp,5,0,1,206,1
"Geo 5xx",boiler,173,maxheatheat,heat limit heating,enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW], ,true,select.boiler_heat_limit_heating,select.boiler_maxheatheat,5,0,1,207,1 "Geo 5xx",boiler,173,maxheatheat,heat limit heating,enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW], ,true,select.boiler_heat_limit_heating,select.boiler_maxheatheat,5,0,1,207,1
"Geo 5xx",boiler,173,dhw.maxheat,heat limit,enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW], ,true,select.boiler_dhw_heat_limit,select.boiler_dhw_maxheat,5,9,1,14,1 "Geo 5xx",boiler,173,dhw.maxheat,heat limit,enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW], ,true,select.boiler_dhw_heat_limit,select.boiler_dhw_maxheat,5,9,1,14,1
"Geo 5xx",boiler,173,mandefrost,manual defrost,boolean, ,true,switch.boiler_manual_defrost,switch.boiler_mandefrost,5,0,1,208,1 "Geo 5xx",boiler,173,auxheatersource,aux heater source,enum [not installed\|electric heater\|exclusive\|parallel\|hybrid], ,true,select.boiler_aux_heater_source,select.boiler_auxheatersource,5,0,1,208,1
"Geo 5xx",boiler,173,pvcooling,cooling only with PV,boolean, ,true,switch.boiler_cooling_only_with_PV,switch.boiler_pvcooling,5,0,1,209,1 "Geo 5xx",boiler,173,pvcooling,cooling only with PV,boolean, ,true,switch.boiler_cooling_only_with_PV,switch.boiler_pvcooling,5,0,1,209,1
"Geo 5xx",boiler,173,auxheateronly,aux heater only,boolean, ,true,switch.boiler_aux_heater_only,switch.boiler_auxheateronly,5,0,1,210,1 "Geo 5xx",boiler,173,auxheateronly,aux heater only,boolean, ,true,switch.boiler_aux_heater_only,switch.boiler_auxheateronly,5,0,1,210,1
"Geo 5xx",boiler,173,auxheateroff,disable aux heater,boolean, ,true,switch.boiler_disable_aux_heater,switch.boiler_auxheateroff,5,0,1,211,1 "Geo 5xx",boiler,173,auxheateroff,disable aux heater,boolean, ,true,switch.boiler_disable_aux_heater,switch.boiler_auxheateroff,5,0,1,211,1
Can't render this file because it is too large.

View File

@@ -13,7 +13,7 @@ telegram_type_id,name,is_fetched
0x19,UBAMonitorSlow, 0x19,UBAMonitorSlow,
0x1A,UBASetPoints, 0x1A,UBASetPoints,
0x1C,UBAMaintenanceStatus, 0x1C,UBAMaintenanceStatus,
0x1E,HydrTemp, 0x1E,WM10TempMessage,
0x23,JunkersSetMixer,fetched 0x23,JunkersSetMixer,fetched
0x26,UBASettingsWW,fetched 0x26,UBASettingsWW,fetched
0x28,WeatherComp,fetched 0x28,WeatherComp,fetched
@@ -109,10 +109,10 @@ telegram_type_id,name,is_fetched
0x02A0,RC300Curves, 0x02A0,RC300Curves,
0x02A1,RC300Curves, 0x02A1,RC300Curves,
0x02A2,RC300Curves, 0x02A2,RC300Curves,
0x02A5,CRFMonitor, 0x02A5,RC300Monitor,fetched
0x02A6,RC300Monitor, 0x02A6,RC300Monitor,
0x02A7,RC300Monitor, 0x02A7,CRFMonitor,
0x02A8,CRFMonitor, 0x02A8,RC300Monitor,
0x02A9,RC300Monitor, 0x02A9,RC300Monitor,
0x02AA,RC300Monitor, 0x02AA,RC300Monitor,
0x02AB,RC300Monitor, 0x02AB,RC300Monitor,
@@ -133,7 +133,7 @@ telegram_type_id,name,is_fetched
0x02BE,RC300Set, 0x02BE,RC300Set,
0x02BF,RC300Set, 0x02BF,RC300Set,
0x02C0,RC300Set, 0x02C0,RC300Set,
0x02CC,RC300Set2, 0x02CC,HPPressure,fetched
0x02CD,MMPLUSConfigMessage,fetched 0x02CD,MMPLUSConfigMessage,fetched
0x02CE,RC300Set2, 0x02CE,RC300Set2,
0x02D0,RC300Set2, 0x02D0,RC300Set2,
1 telegram_type_id name is_fetched
13 0x19 UBAMonitorSlow
14 0x1A UBASetPoints
15 0x1C UBAMaintenanceStatus
16 0x1E HydrTemp WM10TempMessage
17 0x23 JunkersSetMixer fetched
18 0x26 UBASettingsWW fetched
19 0x28 WeatherComp fetched
109 0x02A0 RC300Curves
110 0x02A1 RC300Curves
111 0x02A2 RC300Curves
112 0x02A5 CRFMonitor RC300Monitor fetched
113 0x02A6 RC300Monitor
114 0x02A7 RC300Monitor CRFMonitor
115 0x02A8 CRFMonitor RC300Monitor
116 0x02A9 RC300Monitor
117 0x02AA RC300Monitor
118 0x02AB RC300Monitor
133 0x02BE RC300Set
134 0x02BF RC300Set
135 0x02C0 RC300Set
136 0x02CC RC300Set2 HPPressure fetched
137 0x02CD MMPLUSConfigMessage fetched
138 0x02CE RC300Set2
139 0x02D0 RC300Set2

File diff suppressed because one or more lines are too long

View File

@@ -1,3 +1,3 @@
nodeLinker: node-modules nodeLinker: node-modules
yarnPath: .yarn/releases/yarn-4.7.0.cjs yarnPath: .yarn/releases/yarn-4.8.1.cjs

View File

@@ -24,18 +24,18 @@
"@alova/adapter-xhr": "2.1.1", "@alova/adapter-xhr": "2.1.1",
"@emotion/react": "^11.14.0", "@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.0", "@emotion/styled": "^11.14.0",
"@mui/icons-material": "^7.0.0", "@mui/icons-material": "^7.0.1",
"@mui/material": "^7.0.0", "@mui/material": "^7.0.1",
"@table-library/react-table-library": "4.1.12", "@table-library/react-table-library": "4.1.12",
"alova": "3.2.10", "alova": "3.2.10",
"async-validator": "^4.2.5", "async-validator": "^4.2.5",
"jwt-decode": "^4.0.0", "jwt-decode": "^4.0.0",
"mime-types": "^2.1.35", "mime-types": "^3.0.1",
"preact": "^10.26.4", "preact": "^10.26.4",
"react": "^19.0.0", "react": "^19.1.0",
"react-dom": "^19.0.0", "react-dom": "^19.1.0",
"react-icons": "^5.5.0", "react-icons": "^5.5.0",
"react-router": "^7.4.0", "react-router": "^7.4.1",
"react-toastify": "^11.0.5", "react-toastify": "^11.0.5",
"typesafe-i18n": "^5.26.2", "typesafe-i18n": "^5.26.2",
"typescript": "^5.8.2" "typescript": "^5.8.2"
@@ -47,7 +47,7 @@
"@preact/preset-vite": "^2.10.1", "@preact/preset-vite": "^2.10.1",
"@trivago/prettier-plugin-sort-imports": "^5.2.2", "@trivago/prettier-plugin-sort-imports": "^5.2.2",
"@types/formidable": "^3", "@types/formidable": "^3",
"@types/node": "^22.13.13", "@types/node": "^22.13.14",
"@types/react": "^19.0.12", "@types/react": "^19.0.12",
"@types/react-dom": "^19.0.4", "@types/react-dom": "^19.0.4",
"concurrently": "^9.1.2", "concurrently": "^9.1.2",
@@ -62,5 +62,5 @@
"vite-plugin-imagemin": "^0.6.1", "vite-plugin-imagemin": "^0.6.1",
"vite-tsconfig-paths": "^5.1.4" "vite-tsconfig-paths": "^5.1.4"
}, },
"packageManager": "yarn@4.7.0" "packageManager": "yarn@4.8.1"
} }

View File

@@ -97,7 +97,7 @@ const SystemMonitor = () => {
color="error" color="error"
onClick={onCancel} onClick={onCancel}
> >
{LL.RESET(0)} {LL.RESTART()}
</Button> </Button>
</MessageBox> </MessageBox>
) : ( ) : (

View File

@@ -4,7 +4,6 @@ import { toast } from 'react-toastify';
import CancelIcon from '@mui/icons-material/Cancel'; import CancelIcon from '@mui/icons-material/Cancel';
import CheckIcon from '@mui/icons-material/Done'; import CheckIcon from '@mui/icons-material/Done';
import DownloadIcon from '@mui/icons-material/GetApp'; import DownloadIcon from '@mui/icons-material/GetApp';
import InfoOutlinedIcon from '@mui/icons-material/InfoOutlined';
import WarningIcon from '@mui/icons-material/Warning'; import WarningIcon from '@mui/icons-material/Warning';
import { import {
Box, Box,
@@ -44,7 +43,10 @@ const Version = () => {
const [restarting, setRestarting] = useState<boolean>(false); const [restarting, setRestarting] = useState<boolean>(false);
const [openInstallDialog, setOpenInstallDialog] = useState<boolean>(false); const [openInstallDialog, setOpenInstallDialog] = useState<boolean>(false);
const [usingDevVersion, setUsingDevVersion] = useState<boolean>(false); const [usingDevVersion, setUsingDevVersion] = useState<boolean>(false);
const [upgradeAvailable, setUpgradeAvailable] = useState<boolean>(false); const [fetchDevVersion, setFetchDevVersion] = useState<boolean>(false);
const [devUpgradeAvailable, setDevUpgradeAvailable] = useState<boolean>(false);
const [stableUpgradeAvailable, setStableUpgradeAvailable] =
useState<boolean>(false);
const [internetLive, setInternetLive] = useState<boolean>(false); const [internetLive, setInternetLive] = useState<boolean>(false);
const [downloadOnly, setDownloadOnly] = useState<boolean>(false); const [downloadOnly, setDownloadOnly] = useState<boolean>(false);
@@ -62,8 +64,13 @@ const Version = () => {
immediate: false immediate: false
} }
).onSuccess((event) => { ).onSuccess((event) => {
const data = event.data as { emsesp_version: string; upgradeable: boolean }; const data = event.data as {
setUpgradeAvailable(data.upgradeable); emsesp_version: string;
dev_upgradeable: boolean;
stable_upgradeable: boolean;
};
setDevUpgradeAvailable(data.dev_upgradeable);
setStableUpgradeAvailable(data.stable_upgradeable);
}); });
const { const {
@@ -144,14 +151,14 @@ const Version = () => {
} }
const filename = const filename =
'EMS-ESP-' + 'EMS-ESP-' +
(usingDevVersion ? latestDevVersion.name : latestVersion.name).replaceAll( (fetchDevVersion ? latestDevVersion.name : latestVersion.name).replaceAll(
'.', '.',
'_' '_'
) + ) +
'-' + '-' +
getPlatform() + getPlatform() +
'.bin'; '.bin';
return usingDevVersion return fetchDevVersion
? DEV_URL + filename ? DEV_URL + filename
: STABLE_URL + 'v' + latestVersion.name + '/' + filename; : STABLE_URL + 'v' + latestVersion.name + '/' + filename;
}; };
@@ -172,67 +179,96 @@ const Version = () => {
useLayoutTitle('EMS-ESP Firmware'); useLayoutTitle('EMS-ESP Firmware');
const renderInstallDialog = () => ( const renderInstallDialog = () => {
<Dialog const binURL = getBinURL();
sx={dialogStyle}
open={openInstallDialog}
onClose={() => closeInstallDialog()}
>
<DialogTitle>
{LL.INSTALL() +
' ' +
(usingDevVersion ? LL.DEVELOPMENT() : LL.STABLE()) +
' Firmware'}
</DialogTitle>
<DialogContent dividers>
<Typography mb={2}>
{LL.INSTALL_VERSION(
usingDevVersion ? latestDevVersion?.name : latestVersion?.name
)}
</Typography>
</DialogContent>
<DialogActions>
<Button
startIcon={<CancelIcon />}
variant="outlined"
onClick={() => closeInstallDialog()}
color="secondary"
>
{LL.CANCEL()}
</Button>
<Button
startIcon={<DownloadIcon />}
variant="outlined"
onClick={() => closeInstallDialog()}
color="primary"
>
<Link underline="none" target="_blank" href={getBinURL()} color="primary">
{LL.DOWNLOAD(1)}
</Link>
</Button>
<Button
startIcon={<WarningIcon color="warning" />}
variant="outlined"
onClick={() => installFirmwareURL(getBinURL())}
color="primary"
>
{LL.INSTALL()}
</Button>
</DialogActions>
</Dialog>
);
const showFirmwareDialog = (useDevVersion?: boolean) => { return (
setUsingDevVersion(useDevVersion || usingDevVersion); <Dialog
sx={dialogStyle}
open={openInstallDialog}
onClose={() => closeInstallDialog()}
>
<DialogTitle>
{LL.INSTALL() +
' ' +
(fetchDevVersion ? LL.DEVELOPMENT() : LL.STABLE()) +
' Firmware'}
</DialogTitle>
<DialogContent dividers>
<Typography mb={2}>
{LL.INSTALL_VERSION(
fetchDevVersion ? latestDevVersion?.name : latestVersion?.name
)}
</Typography>
</DialogContent>
<DialogActions>
<Button
startIcon={<CancelIcon />}
variant="outlined"
onClick={() => closeInstallDialog()}
color="secondary"
>
{LL.CANCEL()}
</Button>
<Button
startIcon={<DownloadIcon />}
variant="outlined"
onClick={() => closeInstallDialog()}
color="primary"
>
<Link underline="none" target="_blank" href={binURL} color="primary">
{LL.DOWNLOAD(1)}
</Link>
</Button>
<Button
startIcon={<WarningIcon color="warning" />}
variant="outlined"
onClick={() => installFirmwareURL(binURL)}
color="primary"
>
{LL.INSTALL()}
</Button>
</DialogActions>
</Dialog>
);
};
const showFirmwareDialog = (useDevVersion: boolean) => {
setFetchDevVersion(useDevVersion);
setOpenInstallDialog(true); setOpenInstallDialog(true);
}; };
const closeInstallDialog = () => { const closeInstallDialog = () => {
setOpenInstallDialog(false); setOpenInstallDialog(false);
setUsingDevVersion(data.emsesp_version.includes('dev'));
}; };
const showButtons = (showDev?: boolean) => { const showButtons = (showingDev: boolean) => {
const choice = showingDev
? !usingDevVersion
? LL.SWITCH_RELEASE_TYPE(LL.DEVELOPMENT())
: devUpgradeAvailable
? LL.UPDATE_AVAILABLE()
: undefined
: usingDevVersion
? LL.SWITCH_RELEASE_TYPE(LL.STABLE())
: stableUpgradeAvailable
? LL.UPDATE_AVAILABLE()
: undefined;
if (!choice) {
return (
<>
<CheckIcon
color="success"
sx={{ verticalAlign: 'middle', ml: 0.5, mr: 0.5 }}
/>
<span style={{ color: '#66bb6a', fontSize: '0.8em' }}>
{LL.LATEST_VERSION(usingDevVersion ? LL.DEVELOPMENT() : LL.STABLE())}
</span>
</>
);
}
if (!me.admin) { if (!me.admin) {
return; return;
} }
@@ -258,14 +294,11 @@ const Version = () => {
<Button <Button
sx={{ ml: 2 }} sx={{ ml: 2 }}
variant="outlined" variant="outlined"
color="warning" color={choice === LL.UPDATE_AVAILABLE() ? 'success' : 'warning'}
size="small" size="small"
onClick={() => showFirmwareDialog()} onClick={() => showFirmwareDialog(showingDev)}
> >
{upgradeAvailable || (!usingDevVersion && showDev) {choice}
? LL.UPGRADE()
: LL.REINSTALL()}
&hellip;
</Button> </Button>
); );
}; };
@@ -395,7 +428,7 @@ const Version = () => {
{formatTimeAgo(new Date(latestVersion.published_at))}) {formatTimeAgo(new Date(latestVersion.published_at))})
</Typography> </Typography>
)} )}
{!usingDevVersion && showButtons(false)} {showButtons(false)}
</Typography> </Typography>
</Grid> </Grid>
@@ -417,24 +450,6 @@ const Version = () => {
</Typography> </Typography>
</Grid> </Grid>
</Grid> </Grid>
{upgradeAvailable ? (
<Typography mt={2} color="warning">
<InfoOutlinedIcon
color="warning"
sx={{ verticalAlign: 'middle', mr: 2 }}
/>
{LL.UPGRADE_AVAILABLE()}
</Typography>
) : (
<Typography mt={2} color="success">
<CheckIcon
color="success"
sx={{ verticalAlign: 'middle', mr: 2 }}
/>
{LL.LATEST_VERSION()}
</Typography>
)}
</> </>
) : ( ) : (
<Typography mt={2} color="warning"> <Typography mt={2} color="warning">

View File

@@ -332,8 +332,8 @@ const cz: Translation = {
SPECIAL_FUNCTIONS: 'Speciální funkce', SPECIAL_FUNCTIONS: 'Speciální funkce',
WAIT_FIRMWARE: 'Firmware se nahrává a instaluje', WAIT_FIRMWARE: 'Firmware se nahrává a instaluje',
INSTALL_VERSION: 'Tímto se instalovat verze {0}. Jste si jistí?', INSTALL_VERSION: 'Tímto se instalovat verze {0}. Jste si jistí?',
UPGRADE_AVAILABLE: 'Je k dispozici aktualizace firmwaru!', UPDATE_AVAILABLE: 'update available', // TODO translate
LATEST_VERSION: 'Používáte nejnovější verzi firmwaru', LATEST_VERSION: 'Používáte nejnovější verzi {0}firmwaru',
PLEASE_WAIT: 'Prosím čekejte', PLEASE_WAIT: 'Prosím čekejte',
RESTARTING_PRE: 'Inicializace', RESTARTING_PRE: 'Inicializace',
RESTARTING_POST: 'Příprava', RESTARTING_POST: 'Příprava',
@@ -343,7 +343,6 @@ const cz: Translation = {
BYTES: 'Bytes', // TODO translate BYTES: 'Bytes', // TODO translate
BITMASK: 'Bit Mask',// TODO translate BITMASK: 'Bit Mask',// TODO translate
DUPLICATE: 'Duplikát', DUPLICATE: 'Duplikát',
UPGRADE: 'Upgrade',
DASHBOARD_1: 'Všechny aktivní entity EMS jsou označené jako oblíbené. Všechny vlastní entity, harmonogramy a externí sensory jsou zobrazeny níže.', DASHBOARD_1: 'Všechny aktivní entity EMS jsou označené jako oblíbené. Všechny vlastní entity, harmonogramy a externí sensory jsou zobrazeny níže.',
NO_DATA_1: 'Nebyly nalezeny žádné oblíbené entity. Použijte', NO_DATA_1: 'Nebyly nalezeny žádné oblíbené entity. Použijte',
NO_DATA_2: 'modul sloužící k jejich výběru.', NO_DATA_2: 'modul sloužící k jejich výběru.',
@@ -351,8 +350,8 @@ const cz: Translation = {
THIS_VERSION: 'Tato verze', THIS_VERSION: 'Tato verze',
PLATFORM: 'Platforma', PLATFORM: 'Platforma',
RELEASE_TYPE: 'Typ sestavení', RELEASE_TYPE: 'Typ sestavení',
REINSTALL: 'Přeinstalovat',
INTERNET_CONNECTION_REQUIRED: 'Pro automatickou kontrolu a instalaci aktualizací je třeba internetové připojení', INTERNET_CONNECTION_REQUIRED: 'Pro automatickou kontrolu a instalaci aktualizací je třeba internetové připojení',
SWITCH_RELEASE_TYPE: 'Přepnout na {0} verzi'
}; };
export default cz; export default cz;

View File

@@ -42,7 +42,7 @@ const de: Translation = {
CANCEL: 'Abbrechen', CANCEL: 'Abbrechen',
RESET: 'Zurücksetzen', RESET: 'Zurücksetzen',
APPLY_CHANGES: 'Änderungen anwenden ({0})', APPLY_CHANGES: 'Änderungen anwenden ({0})',
UPDATE: 'Update', UPDATE: 'Update', // TODO translate
EXECUTE: 'Ausführen', EXECUTE: 'Ausführen',
REMOVE: 'Entfernen', REMOVE: 'Entfernen',
PROBLEM_UPDATING: 'Problem beim Aktualisieren', PROBLEM_UPDATING: 'Problem beim Aktualisieren',
@@ -332,8 +332,8 @@ const de: Translation = {
SPECIAL_FUNCTIONS: 'Sonderfunktionen', SPECIAL_FUNCTIONS: 'Sonderfunktionen',
WAIT_FIRMWARE: 'Die Firmware wird hochgeladen und installiert.', WAIT_FIRMWARE: 'Die Firmware wird hochgeladen und installiert.',
INSTALL_VERSION: 'Dadurch wird die Version {0} heruntergeladen. Sind Sie sicher?', INSTALL_VERSION: 'Dadurch wird die Version {0} heruntergeladen. Sind Sie sicher?',
UPGRADE_AVAILABLE: 'Es ist ein Firmware-Upgrade verfügbar.', UPDATE_AVAILABLE: 'Firmware-Update verfügbar',
LATEST_VERSION: 'Sie verwenden die neueste Firmware-Version', LATEST_VERSION: 'Sie verwenden die neueste {0} Firmware-Version',
PLEASE_WAIT: 'Bitte warten', PLEASE_WAIT: 'Bitte warten',
RESTARTING_PRE: 'Initialisierung', RESTARTING_PRE: 'Initialisierung',
RESTARTING_POST: 'Vorbereitung', RESTARTING_POST: 'Vorbereitung',
@@ -343,7 +343,6 @@ const de: Translation = {
BYTES: 'Bytes', BYTES: 'Bytes',
BITMASK: 'Bit Maske', BITMASK: 'Bit Maske',
DUPLICATE: 'Kopieren', DUPLICATE: 'Kopieren',
UPGRADE: 'Aktualisieren',
DASHBOARD_1: 'Alle EMS-Entitäten, die aktiv und als Favorit markiert sind, sowie alle benutzerdefinierten Entitäten, Zeitpläne und externen Sensordaten werden unten angezeigt.', DASHBOARD_1: 'Alle EMS-Entitäten, die aktiv und als Favorit markiert sind, sowie alle benutzerdefinierten Entitäten, Zeitpläne und externen Sensordaten werden unten angezeigt.',
NO_DATA_1: 'Keine favorisierten EMS-Entitäten gefunden! Verwenden Sie das Modul', NO_DATA_1: 'Keine favorisierten EMS-Entitäten gefunden! Verwenden Sie das Modul',
NO_DATA_2: ', um sie zu markieren.', NO_DATA_2: ', um sie zu markieren.',
@@ -351,8 +350,8 @@ const de: Translation = {
THIS_VERSION: 'Diese Version', THIS_VERSION: 'Diese Version',
PLATFORM: 'Plattform', PLATFORM: 'Plattform',
RELEASE_TYPE: 'Release Typ', RELEASE_TYPE: 'Release Typ',
REINSTALL: 'Neu installieren',
INTERNET_CONNECTION_REQUIRED: 'Internetverbindung erforderlich für automatische Version-Überprüfung und -Aktualisierung', INTERNET_CONNECTION_REQUIRED: 'Internetverbindung erforderlich für automatische Version-Überprüfung und -Aktualisierung',
SWITCH_RELEASE_TYPE: 'Zum {0}-Release wechseln'
}; };
export default de; export default de;

View File

@@ -332,8 +332,8 @@ const en: Translation = {
SPECIAL_FUNCTIONS: 'Special Functions', SPECIAL_FUNCTIONS: 'Special Functions',
WAIT_FIRMWARE: 'Firmware is uploading and installing', WAIT_FIRMWARE: 'Firmware is uploading and installing',
INSTALL_VERSION: 'This will install version {0}. Are you sure?', INSTALL_VERSION: 'This will install version {0}. Are you sure?',
UPGRADE_AVAILABLE: 'There is a firmware upgrade available!', UPDATE_AVAILABLE: 'update available',
LATEST_VERSION: 'You are using the latest firmware version', LATEST_VERSION: 'You are using the latest {0} firmware version',
PLEASE_WAIT: 'Please wait', PLEASE_WAIT: 'Please wait',
RESTARTING_PRE: 'Initializing', RESTARTING_PRE: 'Initializing',
RESTARTING_POST: 'Preparing', RESTARTING_POST: 'Preparing',
@@ -344,15 +344,14 @@ const en: Translation = {
BYTES: 'Bytes', BYTES: 'Bytes',
BITMASK: 'Bit Mask', BITMASK: 'Bit Mask',
DUPLICATE: 'Duplicate', DUPLICATE: 'Duplicate',
UPGRADE: 'Upgrade',
NO_DATA_1: 'No favorite EMS entities found yet. Use the', NO_DATA_1: 'No favorite EMS entities found yet. Use the',
NO_DATA_2: 'module to mark them.', NO_DATA_2: 'module to mark them.',
NO_DATA_3: 'To see all available entities go to', NO_DATA_3: 'To see all available entities go to',
THIS_VERSION: 'This Version', THIS_VERSION: 'This Version',
PLATFORM: 'Platform', PLATFORM: 'Platform',
RELEASE_TYPE: 'Release Type', RELEASE_TYPE: 'Release Type',
REINSTALL: 'Re-install',
INTERNET_CONNECTION_REQUIRED: 'Internet connection required for automatic version checking and upgrading', INTERNET_CONNECTION_REQUIRED: 'Internet connection required for automatic version checking and upgrading',
SWITCH_RELEASE_TYPE: 'Switch to {0} release'
}; };
export default en; export default en;

View File

@@ -66,7 +66,7 @@ const fr: Translation = {
TEMP_SENSOR: 'Capteur de température', TEMP_SENSOR: 'Capteur de température',
TEMP_SENSORS: 'Capteurs de température', TEMP_SENSORS: 'Capteurs de température',
WRITE_CMD_SENT: 'Envoyer la commande sent', WRITE_CMD_SENT: 'Envoyer la commande sent',
EMS_BUS_WARNING: 'Bus EMS déconnecté. Si ce message persiste après quelques secondes, vérifiez les paramètres et la configuration de la carte.', EMS_BUS_WARNING: 'Bus EMS déconnecté. Si ce message persiste après quelques secondes, vérifiez les paramètres et la configuration de la carte.',
EMS_BUS_SCANNING: 'Scan des appareils EMS...', EMS_BUS_SCANNING: 'Scan des appareils EMS...',
CONNECTED: 'Connecté', CONNECTED: 'Connecté',
TX_ISSUES: 'Problèmes de transmission (Tx) - Essayez un autre mode Tx', TX_ISSUES: 'Problèmes de transmission (Tx) - Essayez un autre mode Tx',
@@ -332,8 +332,8 @@ const fr: Translation = {
SPECIAL_FUNCTIONS: 'Special Functions', SPECIAL_FUNCTIONS: 'Special Functions',
WAIT_FIRMWARE: 'Firmware is uploading and installing', // TODO translate WAIT_FIRMWARE: 'Firmware is uploading and installing', // TODO translate
INSTALL_VERSION: 'This will install version {0}. Are you sure?', // TODO translate INSTALL_VERSION: 'This will install version {0}. Are you sure?', // TODO translate
UPGRADE_AVAILABLE: 'There is a firmware upgrade available!', // TODO translate UPDATE_AVAILABLE: 'update available', // TODO translate
LATEST_VERSION: 'You are using the latest firmware version', // TODO translate LATEST_VERSION: 'You are using the latest {0} firmware version', // TODO translate
PLEASE_WAIT: 'Please wait', // TODO translate PLEASE_WAIT: 'Please wait', // TODO translate
RESTARTING_PRE: 'Initializing', // TODO translate RESTARTING_PRE: 'Initializing', // TODO translate
RESTARTING_POST: 'Preparing', // TODO translate RESTARTING_POST: 'Preparing', // TODO translate
@@ -343,7 +343,6 @@ const fr: Translation = {
BYTES: 'Bytes', // TODO translate BYTES: 'Bytes', // TODO translate
BITMASK: 'Bit Mask',// TODO translate BITMASK: 'Bit Mask',// TODO translate
DUPLICATE: 'Duplicate', // TODO translate DUPLICATE: 'Duplicate', // TODO translate
UPGRADE: 'Upgrade', // TODO translate
DASHBOARD_1: 'All EMS entities that are active and marked as Favorite, plus all Custom Entities, Schedules and external Sensors data are displayed below.', // TODO translate DASHBOARD_1: 'All EMS entities that are active and marked as Favorite, plus all Custom Entities, Schedules and external Sensors data are displayed below.', // TODO translate
NO_DATA_1: 'No favorite EMS entities found yet. Use the', // TODO translate NO_DATA_1: 'No favorite EMS entities found yet. Use the', // TODO translate
NO_DATA_2: 'module to mark them.', // TODO translate NO_DATA_2: 'module to mark them.', // TODO translate
@@ -351,8 +350,8 @@ const fr: Translation = {
THIS_VERSION: 'This Version', // TODO translate THIS_VERSION: 'This Version', // TODO translate
PLATFORM: 'Platform', // TODO translate PLATFORM: 'Platform', // TODO translate
RELEASE_TYPE: 'Release Type', // TODO translate RELEASE_TYPE: 'Release Type', // TODO translate
REINSTALL: 'Re-install', // TODO translate INTERNET_CONNECTION_REQUIRED: 'Internet connection required for automatic version checking and upgrading', // TODO translate
INTERNET_CONNECTION_REQUIRED: 'Internet connection required for automatic version checking and upgrading', SWITCH_RELEASE_TYPE: 'Switch to {0} release' // TODO translate
}; };
export default fr; export default fr;

View File

@@ -332,8 +332,8 @@ const it: Translation = {
SPECIAL_FUNCTIONS: 'Special Functions', // TODO translate SPECIAL_FUNCTIONS: 'Special Functions', // TODO translate
WAIT_FIRMWARE: 'Firmware is uploading and installing', // TODO translate WAIT_FIRMWARE: 'Firmware is uploading and installing', // TODO translate
INSTALL_VERSION: 'This will install version {0}. Are you sure?', // TODO translate INSTALL_VERSION: 'This will install version {0}. Are you sure?', // TODO translate
UPGRADE_AVAILABLE: 'There is a firmware upgrade available!', // TODO translate UPDATE_AVAILABLE: 'update available', // TODO translate
LATEST_VERSION: 'You are using the latest firmware version', // TODO translate LATEST_VERSION: 'You are using the latest {0}firmware version', // TODO translate
PLEASE_WAIT: 'Please wait', // TODO translate PLEASE_WAIT: 'Please wait', // TODO translate
RESTARTING_PRE: 'Initializing', // TODO translate RESTARTING_PRE: 'Initializing', // TODO translate
RESTARTING_POST: 'Preparing', // TODO translate RESTARTING_POST: 'Preparing', // TODO translate
@@ -343,7 +343,6 @@ const it: Translation = {
BYTES: 'Bytes', // TODO translate BYTES: 'Bytes', // TODO translate
BITMASK: 'Bit Mask',// TODO translate BITMASK: 'Bit Mask',// TODO translate
DUPLICATE: 'Duplicate', // TODO translate DUPLICATE: 'Duplicate', // TODO translate
UPGRADE: 'Upgrade', // TODO translate
DASHBOARD_1: 'All EMS entities that are active and marked as Favorite, plus all Custom Entities, Schedules and external Sensors data are displayed below.', // TODO translate DASHBOARD_1: 'All EMS entities that are active and marked as Favorite, plus all Custom Entities, Schedules and external Sensors data are displayed below.', // TODO translate
NO_DATA_1: 'No favorite EMS entities found yet. Use the', // TODO translate NO_DATA_1: 'No favorite EMS entities found yet. Use the', // TODO translate
NO_DATA_2: 'module to mark them.', // TODO translate NO_DATA_2: 'module to mark them.', // TODO translate
@@ -351,8 +350,8 @@ const it: Translation = {
THIS_VERSION: 'This Version', // TODO translate THIS_VERSION: 'This Version', // TODO translate
PLATFORM: 'Platform', // TODO translate PLATFORM: 'Platform', // TODO translate
RELEASE_TYPE: 'Release Type', // TODO translate RELEASE_TYPE: 'Release Type', // TODO translate
REINSTALL: 'Re-install', // TODO translate INTERNET_CONNECTION_REQUIRED: 'Internet connection required for automatic version checking and upgrading', // TODO translate
INTERNET_CONNECTION_REQUIRED: 'Internet connection required for automatic version checking and upgrading', SWITCH_RELEASE_TYPE: 'Switch to {0} release' // TODO translate
}; };
export default it; export default it;

View File

@@ -273,7 +273,7 @@ const nl: Translation = {
NETWORK_SUBNET: 'Subnetmasker', NETWORK_SUBNET: 'Subnetmasker',
NETWORK_DNS: 'DNS Servers', NETWORK_DNS: 'DNS Servers',
ADDRESS_OF: '{0} Address', ADDRESS_OF: '{0} Address',
ADMINISTRATOR: 'Administrator', ADMINISTRATOR: 'Administrator',
GUEST: 'Gast', GUEST: 'Gast',
NEW: 'Nieuwe', NEW: 'Nieuwe',
NEW_NAME_OF: 'Hernoem {0}', NEW_NAME_OF: 'Hernoem {0}',
@@ -320,7 +320,7 @@ const nl: Translation = {
DOWNLOAD_UPLOAD_1: 'Download en upload instellingen en firmware', DOWNLOAD_UPLOAD_1: 'Download en upload instellingen en firmware',
MODULES: 'Module', MODULES: 'Module',
MODULES_1: 'Externe modules activeren of deactiveren', MODULES_1: 'Externe modules activeren of deactiveren',
MODULES_UPDATED: 'Modules geüpdatet', MODULES_UPDATED: 'Modules geüpdatet',
MODULES_DESCRIPTION: 'Klik op de module om EMS-ESP library modules te activeren of te deactiveren', MODULES_DESCRIPTION: 'Klik op de module om EMS-ESP library modules te activeren of te deactiveren',
MODULES_NONE: 'Geen externe modules gedetecteerd', MODULES_NONE: 'Geen externe modules gedetecteerd',
RENAME: 'Hernoemen', RENAME: 'Hernoemen',
@@ -332,18 +332,17 @@ const nl: Translation = {
SPECIAL_FUNCTIONS: 'Speciale functies', SPECIAL_FUNCTIONS: 'Speciale functies',
WAIT_FIRMWARE: 'Firmware wordt geüpload en geïnstalleerd', WAIT_FIRMWARE: 'Firmware wordt geüpload en geïnstalleerd',
INSTALL_VERSION: 'Hiermee wordt versie {0} geïnstalleerd. Weet je het zeker?', INSTALL_VERSION: 'Hiermee wordt versie {0} geïnstalleerd. Weet je het zeker?',
UPGRADE_AVAILABLE: 'Er is een firmware-upgrade beschikbaar!', UPDATE_AVAILABLE: 'update beschikbaar',
LATEST_VERSION: 'U gebruikt de nieuwste firmwareversie', LATEST_VERSION: 'U gebruikt de nieuwste {0} firmwareversie',
PLEASE_WAIT: 'Een ogenblik geduld', PLEASE_WAIT: 'Een ogenblik geduld',
RESTARTING_PRE: 'Initialiseren', RESTARTING_PRE: 'Initialiseren',
RESTARTING_POST: 'Voorbereiding', RESTARTING_POST: 'Voorbereiding',
AUTO_SCROLL: 'Automatisch Scrollen', AUTO_SCROLL: 'Automatisch Scrollen',
DASHBOARD: 'Dashboard', DASHBOARD: 'Dashboard',
DEVELOPER_MODE: 'Ontwikkelaarsmodus', DEVELOPER_MODE: 'Ontwikkelaarsmodus',
BYTES: 'Bytes', // TODO translate BYTES: 'Bytes',
BITMASK: 'Bit Mask',// TODO translate BITMASK: 'Bit Mask',
DUPLICATE: 'Duplicaat', DUPLICATE: 'Duplicaat',
UPGRADE: 'Upgraden',
DASHBOARD_1: 'Alle EMS-entiteiten die actief zijn en als favoriet zijn gemarkeerd, plus alle aangepaste entiteiten en externe sensorgegevens worden hieronder weergegeven.', DASHBOARD_1: 'Alle EMS-entiteiten die actief zijn en als favoriet zijn gemarkeerd, plus alle aangepaste entiteiten en externe sensorgegevens worden hieronder weergegeven.',
NO_DATA_1: 'Er zijn nog geen favoriete EMS-entiteiten gevonden. Gebruik de', NO_DATA_1: 'Er zijn nog geen favoriete EMS-entiteiten gevonden. Gebruik de',
NO_DATA_2: 'module om ze te markeren.', NO_DATA_2: 'module om ze te markeren.',
@@ -351,8 +350,8 @@ const nl: Translation = {
THIS_VERSION: 'Deze Versie', THIS_VERSION: 'Deze Versie',
PLATFORM: 'Platform', PLATFORM: 'Platform',
RELEASE_TYPE: 'Release Typ', RELEASE_TYPE: 'Release Typ',
REINSTALL: 'Opnieuw Installeren',
INTERNET_CONNECTION_REQUIRED: 'Internetverbinding vereist voor automatische versiecontrole en -upgrade', INTERNET_CONNECTION_REQUIRED: 'Internetverbinding vereist voor automatische versiecontrole en -upgrade',
SWITCH_RELEASE_TYPE: 'Switch naar {0} release'
}; };
export default nl; export default nl;

View File

@@ -332,8 +332,8 @@ const no: Translation = {
SPECIAL_FUNCTIONS: 'Special Functions', // TODO translate SPECIAL_FUNCTIONS: 'Special Functions', // TODO translate
WAIT_FIRMWARE: 'Firmware is uploading and installing', // TODO translate WAIT_FIRMWARE: 'Firmware is uploading and installing', // TODO translate
INSTALL_VERSION: 'This will install version {0}. Are you sure?', // TODO translate INSTALL_VERSION: 'This will install version {0}. Are you sure?', // TODO translate
UPGRADE_AVAILABLE: 'There is a firmware upgrade available!', // TODO translate UPDATE_AVAILABLE: 'update available', // TODO translate
LATEST_VERSION: 'You are using the latest firmware version', // TODO translate LATEST_VERSION: 'You are using the latest {0}firmware version', // TODO translate
PLEASE_WAIT: 'Please wait', // TODO translate PLEASE_WAIT: 'Please wait', // TODO translate
RESTARTING_PRE: 'Initializing', // TODO translate RESTARTING_PRE: 'Initializing', // TODO translate
RESTARTING_POST: 'Preparing', // TODO translate RESTARTING_POST: 'Preparing', // TODO translate
@@ -343,7 +343,6 @@ const no: Translation = {
BYTES: 'Bytes', // TODO translate BYTES: 'Bytes', // TODO translate
BITMASK: 'Bit Mask',// TODO translate BITMASK: 'Bit Mask',// TODO translate
DUPLICATE: 'Duplicate', // TODO translate DUPLICATE: 'Duplicate', // TODO translate
UPGRADE: 'Upgrade', // TODO translate
DASHBOARD_1: 'All EMS entities that are active and marked as Favorite, plus all Custom Entities, Schedules and external Sensors data are displayed below.', // TODO translate DASHBOARD_1: 'All EMS entities that are active and marked as Favorite, plus all Custom Entities, Schedules and external Sensors data are displayed below.', // TODO translate
NO_DATA_1: 'No favorite EMS entities found yet. Use the', // TODO translate NO_DATA_1: 'No favorite EMS entities found yet. Use the', // TODO translate
NO_DATA_2: 'module to mark them.', // TODO translate NO_DATA_2: 'module to mark them.', // TODO translate
@@ -351,8 +350,8 @@ const no: Translation = {
THIS_VERSION: 'This Version', // TODO translate THIS_VERSION: 'This Version', // TODO translate
PLATFORM: 'Platform', // TODO translate PLATFORM: 'Platform', // TODO translate
RELEASE_TYPE: 'Release Type', // TODO translate RELEASE_TYPE: 'Release Type', // TODO translate
REINSTALL: 'Re-install', // TODO translate INTERNET_CONNECTION_REQUIRED: 'Internet connection required for automatic version checking and upgrading', // TODO translate
INTERNET_CONNECTION_REQUIRED: 'Internet connection required for automatic version checking and upgrading', SWITCH_RELEASE_TYPE: 'Switch to {0} release' // TODO translate
}; };
export default no; export default no;

View File

@@ -332,8 +332,8 @@ const pl: BaseTranslation = {
SPECIAL_FUNCTIONS: 'Special Functions', // TODO translate SPECIAL_FUNCTIONS: 'Special Functions', // TODO translate
WAIT_FIRMWARE: 'Firmware is uploading and installing', // TODO translate WAIT_FIRMWARE: 'Firmware is uploading and installing', // TODO translate
INSTALL_VERSION: 'This will install version {0}. Are you sure?', // TODO translate INSTALL_VERSION: 'This will install version {0}. Are you sure?', // TODO translate
UPGRADE_AVAILABLE: 'There is a firmware upgrade available!', // TODO translate UPDATE_AVAILABLE: 'update available', // TODO translate
LATEST_VERSION: 'You are using the latest firmware version', // TODO translate LATEST_VERSION: 'You are using the latest {0} firmware version', // TODO translate
PLEASE_WAIT: 'Please wait', // TODO translate PLEASE_WAIT: 'Please wait', // TODO translate
RESTARTING_PRE: 'Initializing', // TODO translate RESTARTING_PRE: 'Initializing', // TODO translate
RESTARTING_POST: 'Preparing', // TODO translate RESTARTING_POST: 'Preparing', // TODO translate
@@ -343,7 +343,6 @@ const pl: BaseTranslation = {
BYTES: 'Bytes', // TODO translate BYTES: 'Bytes', // TODO translate
BITMASK: 'Bit Mask',// TODO translate BITMASK: 'Bit Mask',// TODO translate
DUPLICATE: 'Duplicate', // TODO translate DUPLICATE: 'Duplicate', // TODO translate
UPGRADE: 'Upgrade', // TODO translate
DASHBOARD_1: 'All EMS entities that are active and marked as Favorite, plus all Custom Entities, Schedules and external Sensors data are displayed below.', // TODO translate DASHBOARD_1: 'All EMS entities that are active and marked as Favorite, plus all Custom Entities, Schedules and external Sensors data are displayed below.', // TODO translate
NO_DATA_1: 'No favorite EMS entities found yet. Use the', // TODO translate NO_DATA_1: 'No favorite EMS entities found yet. Use the', // TODO translate
NO_DATA_2: 'module to mark them.', // TODO translate NO_DATA_2: 'module to mark them.', // TODO translate
@@ -351,8 +350,8 @@ const pl: BaseTranslation = {
THIS_VERSION: 'This Version', // TODO translate THIS_VERSION: 'This Version', // TODO translate
PLATFORM: 'Platform', // TODO translate PLATFORM: 'Platform', // TODO translate
RELEASE_TYPE: 'Release Type', // TODO translate RELEASE_TYPE: 'Release Type', // TODO translate
REINSTALL: 'Re-install', // TODO translate
INTERNET_CONNECTION_REQUIRED: 'Internet connection required for automatic version checking and upgrading', // TODO translate INTERNET_CONNECTION_REQUIRED: 'Internet connection required for automatic version checking and upgrading', // TODO translate
SWITCH_RELEASE_TYPE: 'Switch to {0} release' // TODO translate
}; };
export default pl; export default pl;

View File

@@ -155,7 +155,7 @@ const sk: Translation = {
NAME: 'Názov', NAME: 'Názov',
CUSTOMIZATIONS_RESET: 'Naozaj chcete odstrániť všetky prispôsobenia vrátane vlastných nastavení snímačov teploty a analógových snímačov?', CUSTOMIZATIONS_RESET: 'Naozaj chcete odstrániť všetky prispôsobenia vrátane vlastných nastavení snímačov teploty a analógových snímačov?',
SUPPORT_INFORMATION: 'Informácie pre podporu', SUPPORT_INFORMATION: 'Informácie pre podporu',
HELP_INFORMATION_1: 'Navštívte online wiki, kde nájdete pokyny na konfiguráciu EMS-ESP', HELP_INFORMATION_1: 'Navštívte online wiki, kde nájdete pokyny na konfiguráciu EMS-ESP',
HELP_INFORMATION_2: 'Pre živý komunitný chat sa pripojte na náš Discord server', HELP_INFORMATION_2: 'Pre živý komunitný chat sa pripojte na náš Discord server',
HELP_INFORMATION_3: 'Ak chcete požiadať o funkciu alebo nahlásiť chybu', HELP_INFORMATION_3: 'Ak chcete požiadať o funkciu alebo nahlásiť chybu',
HELP_INFORMATION_4: 'nezabudnite si stiahnuť a pripojiť informácie o vašom systéme, aby ste mohli rýchlejšie reagovať pri nahlasovaní problému', HELP_INFORMATION_4: 'nezabudnite si stiahnuť a pripojiť informácie o vašom systéme, aby ste mohli rýchlejšie reagovať pri nahlasovaní problému',
@@ -323,7 +323,7 @@ const sk: Translation = {
MODULES_UPDATED: 'Aktualizované moduly', MODULES_UPDATED: 'Aktualizované moduly',
MODULES_DESCRIPTION: 'Kliknutím na modul aktivujete alebo deaktivujete moduly knižnice EMS-ESP', MODULES_DESCRIPTION: 'Kliknutím na modul aktivujete alebo deaktivujete moduly knižnice EMS-ESP',
MODULES_NONE: 'Neboli zistené žiadne externé moduly', MODULES_NONE: 'Neboli zistené žiadne externé moduly',
RENAME: 'Premenovať', RENAME: 'Premenovať',
ENABLE_MODBUS: 'Povoliť Modbus', ENABLE_MODBUS: 'Povoliť Modbus',
VIEW_LOG: 'Zobrazte log na diagnostiku problémov', VIEW_LOG: 'Zobrazte log na diagnostiku problémov',
UPLOAD_DRAG: 'presuňte sem súbor alebo ho kliknutím vyberte', UPLOAD_DRAG: 'presuňte sem súbor alebo ho kliknutím vyberte',
@@ -332,8 +332,8 @@ const sk: Translation = {
SPECIAL_FUNCTIONS: 'Špeciálne funkcie', SPECIAL_FUNCTIONS: 'Špeciálne funkcie',
WAIT_FIRMWARE: 'Firmvér sa nahráva a inštaluje', WAIT_FIRMWARE: 'Firmvér sa nahráva a inštaluje',
INSTALL_VERSION: 'Týmto sa inštalovať verzia {0}. Si si istý?', INSTALL_VERSION: 'Týmto sa inštalovať verzia {0}. Si si istý?',
UPGRADE_AVAILABLE: 'K dispozícii je aktualizácia firmvéru!', UPDATE_AVAILABLE: 'update available', // TODO translate
LATEST_VERSION: 'Používate poslednú verziu firmvéru', LATEST_VERSION: 'Používate poslednú {0} verziu firmvéru',
PLEASE_WAIT: 'Čakajte prosím', PLEASE_WAIT: 'Čakajte prosím',
RESTARTING_PRE: 'Prebieha inicializácia', RESTARTING_PRE: 'Prebieha inicializácia',
RESTARTING_POST: 'Príprava', RESTARTING_POST: 'Príprava',
@@ -343,7 +343,6 @@ const sk: Translation = {
BYTES: 'Bytov', BYTES: 'Bytov',
BITMASK: 'Bitová maska', BITMASK: 'Bitová maska',
DUPLICATE: 'Duplicitné', DUPLICATE: 'Duplicitné',
UPGRADE: 'Inovovať',
DASHBOARD_1: 'Všetky entity EMS, ktoré sú aktívne a označené ako obľúbené, plus všetky vlastné entity, plány a údaje externých senzorov sú zobrazené nižšie.', DASHBOARD_1: 'Všetky entity EMS, ktoré sú aktívne a označené ako obľúbené, plus všetky vlastné entity, plány a údaje externých senzorov sú zobrazené nižšie.',
NO_DATA_1: 'Nenašli sa žiadne obľúbené entity EMS. Použite', NO_DATA_1: 'Nenašli sa žiadne obľúbené entity EMS. Použite',
NO_DATA_2: 'modul na ich označenie.', NO_DATA_2: 'modul na ich označenie.',
@@ -351,8 +350,8 @@ const sk: Translation = {
THIS_VERSION: 'Táto verzia', THIS_VERSION: 'Táto verzia',
PLATFORM: 'Platforma', PLATFORM: 'Platforma',
RELEASE_TYPE: 'Typ vydania', RELEASE_TYPE: 'Typ vydania',
REINSTALL: 'Preinštalovať',
INTERNET_CONNECTION_REQUIRED: 'Internetové pripojenie je potrebné pre automatickú kontrolu a aktualizáciu', INTERNET_CONNECTION_REQUIRED: 'Internetové pripojenie je potrebné pre automatickú kontrolu a aktualizáciu',
SWITCH_RELEASE_TYPE: 'Prepnúť na {0} verziu'
}; };
export default sk; export default sk;

View File

@@ -332,8 +332,8 @@ const sv: Translation = {
SPECIAL_FUNCTIONS: 'Specialfunktioner', SPECIAL_FUNCTIONS: 'Specialfunktioner',
WAIT_FIRMWARE: 'Firmware laddas upp och installeras', WAIT_FIRMWARE: 'Firmware laddas upp och installeras',
INSTALL_VERSION: 'Det här kommer installera version {0}. Är du säker?', INSTALL_VERSION: 'Det här kommer installera version {0}. Är du säker?',
UPGRADE_AVAILABLE: 'Det finns en tillgänglig firmwareupgradering!', UPDATE_AVAILABLE: 'update available', // TODO translate
LATEST_VERSION: 'Du använder den senaste firmwareversionen.', LATEST_VERSION: 'Du använder den senaste {0} firmwareversionen.',
PLEASE_WAIT: 'Var god vänta', PLEASE_WAIT: 'Var god vänta',
RESTARTING_PRE: 'Initialiserar', RESTARTING_PRE: 'Initialiserar',
RESTARTING_POST: 'Förbereder', RESTARTING_POST: 'Förbereder',
@@ -343,7 +343,6 @@ const sv: Translation = {
BYTES: 'Bytes', // TODO translate BYTES: 'Bytes', // TODO translate
BITMASK: 'Bit Mask',// TODO translate BITMASK: 'Bit Mask',// TODO translate
DUPLICATE: 'Dublett', DUPLICATE: 'Dublett',
UPGRADE: 'Uppgradera',
DASHBOARD_1: 'All EMS entities that are active and marked as Favorite, plus all Custom Entities, Schedules and external Sensors data are displayed below.', // TODO translate DASHBOARD_1: 'All EMS entities that are active and marked as Favorite, plus all Custom Entities, Schedules and external Sensors data are displayed below.', // TODO translate
NO_DATA_1: 'No favorite EMS entities found yet. Use the', // TODO translate NO_DATA_1: 'No favorite EMS entities found yet. Use the', // TODO translate
NO_DATA_2: 'module to mark them.', // TODO translate NO_DATA_2: 'module to mark them.', // TODO translate
@@ -351,8 +350,8 @@ const sv: Translation = {
THIS_VERSION: 'This Version', // TODO translate THIS_VERSION: 'This Version', // TODO translate
PLATFORM: 'Platform', // TODO translate PLATFORM: 'Platform', // TODO translate
RELEASE_TYPE: 'Release Type', // TODO translate RELEASE_TYPE: 'Release Type', // TODO translate
REINSTALL: 'Re-install', // TODO translate
INTERNET_CONNECTION_REQUIRED: 'Internetanslutning krävs för automatisk version kontroll och uppdatering', INTERNET_CONNECTION_REQUIRED: 'Internetanslutning krävs för automatisk version kontroll och uppdatering',
SWITCH_RELEASE_TYPE: 'Byt till {0} version'
}; };
export default sv; export default sv;

View File

@@ -332,8 +332,8 @@ const tr: Translation = {
SPECIAL_FUNCTIONS: 'Special Functions', // TODO translate SPECIAL_FUNCTIONS: 'Special Functions', // TODO translate
WAIT_FIRMWARE: 'Firmware is uploading and installing', // TODO translate WAIT_FIRMWARE: 'Firmware is uploading and installing', // TODO translate
INSTALL_VERSION: 'This will install version {0}. Are you sure?', // TODO translate INSTALL_VERSION: 'This will install version {0}. Are you sure?', // TODO translate
UPGRADE_AVAILABLE: 'There is a firmware upgrade available!', // TODO translate UPDATE_AVAILABLE: 'update available!', // TODO translate
LATEST_VERSION: 'You are using the latest firmware version.', // TODO translate LATEST_VERSION: 'You are using the latest {0}firmware version.', // TODO translate
PLEASE_WAIT: 'Please wait', // TODO translate PLEASE_WAIT: 'Please wait', // TODO translate
RESTARTING_PRE: 'Initializing', // TODO translate RESTARTING_PRE: 'Initializing', // TODO translate
RESTARTING_POST: 'Preparing', // TODO translate RESTARTING_POST: 'Preparing', // TODO translate
@@ -343,7 +343,6 @@ const tr: Translation = {
BYTES: 'Bytes', // TODO translate BYTES: 'Bytes', // TODO translate
BITMASK: 'Bit Mask',// TODO translate BITMASK: 'Bit Mask',// TODO translate
DUPLICATE: 'Duplicate', // TODO translate DUPLICATE: 'Duplicate', // TODO translate
UPGRADE: 'Upgrade', // TODO translate
DASHBOARD_1: 'All EMS entities that are active and marked as Favorite, plus all Custom Entities, Schedules and external Sensors data are displayed below.', // TODO translate DASHBOARD_1: 'All EMS entities that are active and marked as Favorite, plus all Custom Entities, Schedules and external Sensors data are displayed below.', // TODO translate
NO_DATA_1: 'No favorite EMS entities found yet. Use the', // TODO translate NO_DATA_1: 'No favorite EMS entities found yet. Use the', // TODO translate
NO_DATA_2: 'module to mark them.', // TODO translate NO_DATA_2: 'module to mark them.', // TODO translate
@@ -351,8 +350,8 @@ const tr: Translation = {
THIS_VERSION: 'This Version', // TODO translate THIS_VERSION: 'This Version', // TODO translate
PLATFORM: 'Platform', // TODO translate PLATFORM: 'Platform', // TODO translate
RELEASE_TYPE: 'Release Type', // TODO translate RELEASE_TYPE: 'Release Type', // TODO translate
REINSTALL: 'Re-install', // TODO translate
INTERNET_CONNECTION_REQUIRED: 'Internet connection required for automatic version checking and upgrading', // TODO translate INTERNET_CONNECTION_REQUIRED: 'Internet connection required for automatic version checking and upgrading', // TODO translate
SWITCH_RELEASE_TYPE: 'Switch to {0} release' // TODO translate
}; };
export default tr; export default tr;

View File

@@ -790,38 +790,38 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@mui/core-downloads-tracker@npm:^7.0.0": "@mui/core-downloads-tracker@npm:^7.0.1":
version: 7.0.0 version: 7.0.1
resolution: "@mui/core-downloads-tracker@npm:7.0.0" resolution: "@mui/core-downloads-tracker@npm:7.0.1"
checksum: 10c0/3028987b44763774f7adf16326687a2045d4802ad3957862e262912cca63ac07f918239b2944dd0e9892df44f9c4c588cebeeb5df06e2d577b809bc432369832 checksum: 10c0/8291211a5aefd9348c9fddd4b12340087f2d661bfbdcf6797b09b2e58ae9a4a37ae80de7124613b870ea3a8ea5661b6a35849214eeb2d5f238cdba10d381d056
languageName: node languageName: node
linkType: hard linkType: hard
"@mui/icons-material@npm:^7.0.0": "@mui/icons-material@npm:^7.0.1":
version: 7.0.0 version: 7.0.1
resolution: "@mui/icons-material@npm:7.0.0" resolution: "@mui/icons-material@npm:7.0.1"
dependencies: dependencies:
"@babel/runtime": "npm:^7.26.10" "@babel/runtime": "npm:^7.26.10"
peerDependencies: peerDependencies:
"@mui/material": ^7.0.0 "@mui/material": ^7.0.1
"@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0
react: ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0
peerDependenciesMeta: peerDependenciesMeta:
"@types/react": "@types/react":
optional: true optional: true
checksum: 10c0/3915dc9bc873beba3d1846b5e4dab5ee8fa77292be68c5bc58951aaf18fb015e149fbb2a7d17a344c3ac109c238d4b6630dc4379bb5b253f6126f82069ae8a01 checksum: 10c0/375ba909363cc248154937bcc8522ba98566311bf20d4c0c3114ed4bd31430354b0d5779523b3f7cf78bb15ba7544d137a7ccbde63cf75ec957ae30e73083693
languageName: node languageName: node
linkType: hard linkType: hard
"@mui/material@npm:^7.0.0": "@mui/material@npm:^7.0.1":
version: 7.0.0 version: 7.0.1
resolution: "@mui/material@npm:7.0.0" resolution: "@mui/material@npm:7.0.1"
dependencies: dependencies:
"@babel/runtime": "npm:^7.26.10" "@babel/runtime": "npm:^7.26.10"
"@mui/core-downloads-tracker": "npm:^7.0.0" "@mui/core-downloads-tracker": "npm:^7.0.1"
"@mui/system": "npm:^7.0.0" "@mui/system": "npm:^7.0.1"
"@mui/types": "npm:^7.4.0" "@mui/types": "npm:^7.4.0"
"@mui/utils": "npm:^7.0.0" "@mui/utils": "npm:^7.0.1"
"@popperjs/core": "npm:^2.11.8" "@popperjs/core": "npm:^2.11.8"
"@types/react-transition-group": "npm:^4.4.12" "@types/react-transition-group": "npm:^4.4.12"
clsx: "npm:^2.1.1" clsx: "npm:^2.1.1"
@@ -832,7 +832,7 @@ __metadata:
peerDependencies: peerDependencies:
"@emotion/react": ^11.5.0 "@emotion/react": ^11.5.0
"@emotion/styled": ^11.3.0 "@emotion/styled": ^11.3.0
"@mui/material-pigment-css": ^7.0.0 "@mui/material-pigment-css": ^7.0.1
"@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0
react: ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0
@@ -845,16 +845,16 @@ __metadata:
optional: true optional: true
"@types/react": "@types/react":
optional: true optional: true
checksum: 10c0/165a646d238b9e9b8c66efb55a46612aced2466c9e7cbf3808d0ad4c0200f757c26a5c227cf02aaa1978e6f27f76f8c17ad2c4cf29e010de83b7e15caae278d6 checksum: 10c0/95203b299dc5481f8fe903f7604dea641067db431c0606bffa5fafa8a4e9e0a0203a8d5ef9af3e314186c779c08654d6e0c1b85c70d8320397f2ce7a05ee633d
languageName: node languageName: node
linkType: hard linkType: hard
"@mui/private-theming@npm:^7.0.0": "@mui/private-theming@npm:^7.0.1":
version: 7.0.0 version: 7.0.1
resolution: "@mui/private-theming@npm:7.0.0" resolution: "@mui/private-theming@npm:7.0.1"
dependencies: dependencies:
"@babel/runtime": "npm:^7.26.10" "@babel/runtime": "npm:^7.26.10"
"@mui/utils": "npm:^7.0.0" "@mui/utils": "npm:^7.0.1"
prop-types: "npm:^15.8.1" prop-types: "npm:^15.8.1"
peerDependencies: peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0
@@ -862,13 +862,13 @@ __metadata:
peerDependenciesMeta: peerDependenciesMeta:
"@types/react": "@types/react":
optional: true optional: true
checksum: 10c0/c901aeee59add7b36382282a0338ec4bbfd1e22d8759c127c497fd6f6ddb464eba04dc611e86aaaa6ae44dd11037950d7bfa33189314b5e8993ceceff072863f checksum: 10c0/15f0037925d9dd59b0bdc4bf6031407e31ef008ebe0e437f424eeed3f433bafd585676b995739f0362c9d403c0cbe2f99478d5eeadd60bfa8b1d968a6be7185d
languageName: node languageName: node
linkType: hard linkType: hard
"@mui/styled-engine@npm:^7.0.0": "@mui/styled-engine@npm:^7.0.1":
version: 7.0.0 version: 7.0.1
resolution: "@mui/styled-engine@npm:7.0.0" resolution: "@mui/styled-engine@npm:7.0.1"
dependencies: dependencies:
"@babel/runtime": "npm:^7.26.10" "@babel/runtime": "npm:^7.26.10"
"@emotion/cache": "npm:^11.13.5" "@emotion/cache": "npm:^11.13.5"
@@ -885,19 +885,19 @@ __metadata:
optional: true optional: true
"@emotion/styled": "@emotion/styled":
optional: true optional: true
checksum: 10c0/9ed5ee9b16ced11ecc411ad1c98613e17a634d17868bdbb668cf57ccd9d4fe248a22607def8327e0ddc289444a4b40e3d629e6220b78d60634c4d7c80810533f checksum: 10c0/cdef1c15ea645198440cd87a53c1a0155f444688387ed816b98890e42bd22a9204242cae8fb1b56124fe05c163d9e38fa482901804dee0bef6f88da1cddd8579
languageName: node languageName: node
linkType: hard linkType: hard
"@mui/system@npm:^7.0.0": "@mui/system@npm:^7.0.1":
version: 7.0.0 version: 7.0.1
resolution: "@mui/system@npm:7.0.0" resolution: "@mui/system@npm:7.0.1"
dependencies: dependencies:
"@babel/runtime": "npm:^7.26.10" "@babel/runtime": "npm:^7.26.10"
"@mui/private-theming": "npm:^7.0.0" "@mui/private-theming": "npm:^7.0.1"
"@mui/styled-engine": "npm:^7.0.0" "@mui/styled-engine": "npm:^7.0.1"
"@mui/types": "npm:^7.4.0" "@mui/types": "npm:^7.4.0"
"@mui/utils": "npm:^7.0.0" "@mui/utils": "npm:^7.0.1"
clsx: "npm:^2.1.1" clsx: "npm:^2.1.1"
csstype: "npm:^3.1.3" csstype: "npm:^3.1.3"
prop-types: "npm:^15.8.1" prop-types: "npm:^15.8.1"
@@ -913,7 +913,7 @@ __metadata:
optional: true optional: true
"@types/react": "@types/react":
optional: true optional: true
checksum: 10c0/4fb99d0594be2783d78cf820389aeb9a8c7ace69eea1edde3fae84e598223e8e35605074d8bc7fdaf25b4f414d82963d4f0bf421a6a50ab547e3fa2b10869cff checksum: 10c0/58de50dceef8a85aa24cda596836c034068b6f3e960c47520b9401a3f6f5bdf013e6ad7adb1a31cc57707ae304d524813ed53d4d12c1193ec8ca6b31d90f8dcf
languageName: node languageName: node
linkType: hard linkType: hard
@@ -931,9 +931,9 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@mui/utils@npm:^7.0.0": "@mui/utils@npm:^7.0.1":
version: 7.0.0 version: 7.0.1
resolution: "@mui/utils@npm:7.0.0" resolution: "@mui/utils@npm:7.0.1"
dependencies: dependencies:
"@babel/runtime": "npm:^7.26.10" "@babel/runtime": "npm:^7.26.10"
"@mui/types": "npm:^7.4.0" "@mui/types": "npm:^7.4.0"
@@ -947,7 +947,7 @@ __metadata:
peerDependenciesMeta: peerDependenciesMeta:
"@types/react": "@types/react":
optional: true optional: true
checksum: 10c0/89c6df710ddbd506a77428a1c0bd600c8902ccad42ff9e0d49df2435d236aa9a2d5bf600f473a742bb2934632165206caacfac2315cf2a03644f1aa6aeb4cbc1 checksum: 10c0/bf5d721c9e09f2eba359db227dfafca51152a47753c6f32d020f8a9af572f8f14515e03592b2a95b5bea8207efe775d7d1ae4a0e42f0638f03a15fd1d303ffce
languageName: node languageName: node
linkType: hard linkType: hard
@@ -1091,142 +1091,142 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@rollup/rollup-android-arm-eabi@npm:4.37.0": "@rollup/rollup-android-arm-eabi@npm:4.38.0":
version: 4.37.0 version: 4.38.0
resolution: "@rollup/rollup-android-arm-eabi@npm:4.37.0" resolution: "@rollup/rollup-android-arm-eabi@npm:4.38.0"
conditions: os=android & cpu=arm conditions: os=android & cpu=arm
languageName: node languageName: node
linkType: hard linkType: hard
"@rollup/rollup-android-arm64@npm:4.37.0": "@rollup/rollup-android-arm64@npm:4.38.0":
version: 4.37.0 version: 4.38.0
resolution: "@rollup/rollup-android-arm64@npm:4.37.0" resolution: "@rollup/rollup-android-arm64@npm:4.38.0"
conditions: os=android & cpu=arm64 conditions: os=android & cpu=arm64
languageName: node languageName: node
linkType: hard linkType: hard
"@rollup/rollup-darwin-arm64@npm:4.37.0": "@rollup/rollup-darwin-arm64@npm:4.38.0":
version: 4.37.0 version: 4.38.0
resolution: "@rollup/rollup-darwin-arm64@npm:4.37.0" resolution: "@rollup/rollup-darwin-arm64@npm:4.38.0"
conditions: os=darwin & cpu=arm64 conditions: os=darwin & cpu=arm64
languageName: node languageName: node
linkType: hard linkType: hard
"@rollup/rollup-darwin-x64@npm:4.37.0": "@rollup/rollup-darwin-x64@npm:4.38.0":
version: 4.37.0 version: 4.38.0
resolution: "@rollup/rollup-darwin-x64@npm:4.37.0" resolution: "@rollup/rollup-darwin-x64@npm:4.38.0"
conditions: os=darwin & cpu=x64 conditions: os=darwin & cpu=x64
languageName: node languageName: node
linkType: hard linkType: hard
"@rollup/rollup-freebsd-arm64@npm:4.37.0": "@rollup/rollup-freebsd-arm64@npm:4.38.0":
version: 4.37.0 version: 4.38.0
resolution: "@rollup/rollup-freebsd-arm64@npm:4.37.0" resolution: "@rollup/rollup-freebsd-arm64@npm:4.38.0"
conditions: os=freebsd & cpu=arm64 conditions: os=freebsd & cpu=arm64
languageName: node languageName: node
linkType: hard linkType: hard
"@rollup/rollup-freebsd-x64@npm:4.37.0": "@rollup/rollup-freebsd-x64@npm:4.38.0":
version: 4.37.0 version: 4.38.0
resolution: "@rollup/rollup-freebsd-x64@npm:4.37.0" resolution: "@rollup/rollup-freebsd-x64@npm:4.38.0"
conditions: os=freebsd & cpu=x64 conditions: os=freebsd & cpu=x64
languageName: node languageName: node
linkType: hard linkType: hard
"@rollup/rollup-linux-arm-gnueabihf@npm:4.37.0": "@rollup/rollup-linux-arm-gnueabihf@npm:4.38.0":
version: 4.37.0 version: 4.38.0
resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.37.0" resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.38.0"
conditions: os=linux & cpu=arm & libc=glibc conditions: os=linux & cpu=arm & libc=glibc
languageName: node languageName: node
linkType: hard linkType: hard
"@rollup/rollup-linux-arm-musleabihf@npm:4.37.0": "@rollup/rollup-linux-arm-musleabihf@npm:4.38.0":
version: 4.37.0 version: 4.38.0
resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.37.0" resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.38.0"
conditions: os=linux & cpu=arm & libc=musl conditions: os=linux & cpu=arm & libc=musl
languageName: node languageName: node
linkType: hard linkType: hard
"@rollup/rollup-linux-arm64-gnu@npm:4.37.0": "@rollup/rollup-linux-arm64-gnu@npm:4.38.0":
version: 4.37.0 version: 4.38.0
resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.37.0" resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.38.0"
conditions: os=linux & cpu=arm64 & libc=glibc conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node languageName: node
linkType: hard linkType: hard
"@rollup/rollup-linux-arm64-musl@npm:4.37.0": "@rollup/rollup-linux-arm64-musl@npm:4.38.0":
version: 4.37.0 version: 4.38.0
resolution: "@rollup/rollup-linux-arm64-musl@npm:4.37.0" resolution: "@rollup/rollup-linux-arm64-musl@npm:4.38.0"
conditions: os=linux & cpu=arm64 & libc=musl conditions: os=linux & cpu=arm64 & libc=musl
languageName: node languageName: node
linkType: hard linkType: hard
"@rollup/rollup-linux-loongarch64-gnu@npm:4.37.0": "@rollup/rollup-linux-loongarch64-gnu@npm:4.38.0":
version: 4.37.0 version: 4.38.0
resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.37.0" resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.38.0"
conditions: os=linux & cpu=loong64 & libc=glibc conditions: os=linux & cpu=loong64 & libc=glibc
languageName: node languageName: node
linkType: hard linkType: hard
"@rollup/rollup-linux-powerpc64le-gnu@npm:4.37.0": "@rollup/rollup-linux-powerpc64le-gnu@npm:4.38.0":
version: 4.37.0 version: 4.38.0
resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.37.0" resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.38.0"
conditions: os=linux & cpu=ppc64 & libc=glibc conditions: os=linux & cpu=ppc64 & libc=glibc
languageName: node languageName: node
linkType: hard linkType: hard
"@rollup/rollup-linux-riscv64-gnu@npm:4.37.0": "@rollup/rollup-linux-riscv64-gnu@npm:4.38.0":
version: 4.37.0 version: 4.38.0
resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.37.0" resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.38.0"
conditions: os=linux & cpu=riscv64 & libc=glibc conditions: os=linux & cpu=riscv64 & libc=glibc
languageName: node languageName: node
linkType: hard linkType: hard
"@rollup/rollup-linux-riscv64-musl@npm:4.37.0": "@rollup/rollup-linux-riscv64-musl@npm:4.38.0":
version: 4.37.0 version: 4.38.0
resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.37.0" resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.38.0"
conditions: os=linux & cpu=riscv64 & libc=musl conditions: os=linux & cpu=riscv64 & libc=musl
languageName: node languageName: node
linkType: hard linkType: hard
"@rollup/rollup-linux-s390x-gnu@npm:4.37.0": "@rollup/rollup-linux-s390x-gnu@npm:4.38.0":
version: 4.37.0 version: 4.38.0
resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.37.0" resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.38.0"
conditions: os=linux & cpu=s390x & libc=glibc conditions: os=linux & cpu=s390x & libc=glibc
languageName: node languageName: node
linkType: hard linkType: hard
"@rollup/rollup-linux-x64-gnu@npm:4.37.0": "@rollup/rollup-linux-x64-gnu@npm:4.38.0":
version: 4.37.0 version: 4.38.0
resolution: "@rollup/rollup-linux-x64-gnu@npm:4.37.0" resolution: "@rollup/rollup-linux-x64-gnu@npm:4.38.0"
conditions: os=linux & cpu=x64 & libc=glibc conditions: os=linux & cpu=x64 & libc=glibc
languageName: node languageName: node
linkType: hard linkType: hard
"@rollup/rollup-linux-x64-musl@npm:4.37.0": "@rollup/rollup-linux-x64-musl@npm:4.38.0":
version: 4.37.0 version: 4.38.0
resolution: "@rollup/rollup-linux-x64-musl@npm:4.37.0" resolution: "@rollup/rollup-linux-x64-musl@npm:4.38.0"
conditions: os=linux & cpu=x64 & libc=musl conditions: os=linux & cpu=x64 & libc=musl
languageName: node languageName: node
linkType: hard linkType: hard
"@rollup/rollup-win32-arm64-msvc@npm:4.37.0": "@rollup/rollup-win32-arm64-msvc@npm:4.38.0":
version: 4.37.0 version: 4.38.0
resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.37.0" resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.38.0"
conditions: os=win32 & cpu=arm64 conditions: os=win32 & cpu=arm64
languageName: node languageName: node
linkType: hard linkType: hard
"@rollup/rollup-win32-ia32-msvc@npm:4.37.0": "@rollup/rollup-win32-ia32-msvc@npm:4.38.0":
version: 4.37.0 version: 4.38.0
resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.37.0" resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.38.0"
conditions: os=win32 & cpu=ia32 conditions: os=win32 & cpu=ia32
languageName: node languageName: node
linkType: hard linkType: hard
"@rollup/rollup-win32-x64-msvc@npm:4.37.0": "@rollup/rollup-win32-x64-msvc@npm:4.38.0":
version: 4.37.0 version: 4.38.0
resolution: "@rollup/rollup-win32-x64-msvc@npm:4.37.0" resolution: "@rollup/rollup-win32-x64-msvc@npm:4.38.0"
conditions: os=win32 & cpu=x64 conditions: os=win32 & cpu=x64
languageName: node languageName: node
linkType: hard linkType: hard
@@ -1293,14 +1293,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/estree@npm:1.0.6": "@types/estree@npm:1.0.7, @types/estree@npm:^1.0.6":
version: 1.0.6
resolution: "@types/estree@npm:1.0.6"
checksum: 10c0/cdfd751f6f9065442cd40957c07fd80361c962869aa853c1c2fd03e101af8b9389d8ff4955a43a6fcfa223dd387a089937f95be0f3eec21ca527039fd2d9859a
languageName: node
linkType: hard
"@types/estree@npm:^1.0.6":
version: 1.0.7 version: 1.0.7
resolution: "@types/estree@npm:1.0.7" resolution: "@types/estree@npm:1.0.7"
checksum: 10c0/be815254316882f7c40847336cd484c3bc1c3e34f710d197160d455dc9d6d050ffbf4c3bc76585dba86f737f020ab20bdb137ebe0e9116b0c86c7c0342221b8c checksum: 10c0/be815254316882f7c40847336cd484c3bc1c3e34f710d197160d455dc9d6d050ffbf4c3bc76585dba86f737f020ab20bdb137ebe0e9116b0c86c7c0342221b8c
@@ -1422,12 +1415,12 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/node@npm:*, @types/node@npm:^22.13.13": "@types/node@npm:*, @types/node@npm:^22.13.14":
version: 22.13.13 version: 22.13.14
resolution: "@types/node@npm:22.13.13" resolution: "@types/node@npm:22.13.14"
dependencies: dependencies:
undici-types: "npm:~6.20.0" undici-types: "npm:~6.20.0"
checksum: 10c0/daf792ba5dcff1316abf4b33680f94b792f8d54d6ae495efc8929531e0ba1284a248d29aab117d2259f9280284d986ad5799b193b0516e2b926d713aab835f7d checksum: 10c0/fa2ab5b8277bfbcc86c42e46a3ea9871b0d559894cc9d955685d17178c9499f0b1bf03d1d1ea8d92ef2dda818988f4035acb8abf9dc15423a998fa56173ab804
languageName: node languageName: node
linkType: hard linkType: hard
@@ -1611,14 +1604,14 @@ __metadata:
"@emotion/react": "npm:^11.14.0" "@emotion/react": "npm:^11.14.0"
"@emotion/styled": "npm:^11.14.0" "@emotion/styled": "npm:^11.14.0"
"@eslint/js": "npm:^9.23.0" "@eslint/js": "npm:^9.23.0"
"@mui/icons-material": "npm:^7.0.0" "@mui/icons-material": "npm:^7.0.1"
"@mui/material": "npm:^7.0.0" "@mui/material": "npm:^7.0.1"
"@preact/compat": "npm:^18.3.1" "@preact/compat": "npm:^18.3.1"
"@preact/preset-vite": "npm:^2.10.1" "@preact/preset-vite": "npm:^2.10.1"
"@table-library/react-table-library": "npm:4.1.12" "@table-library/react-table-library": "npm:4.1.12"
"@trivago/prettier-plugin-sort-imports": "npm:^5.2.2" "@trivago/prettier-plugin-sort-imports": "npm:^5.2.2"
"@types/formidable": "npm:^3" "@types/formidable": "npm:^3"
"@types/node": "npm:^22.13.13" "@types/node": "npm:^22.13.14"
"@types/react": "npm:^19.0.12" "@types/react": "npm:^19.0.12"
"@types/react-dom": "npm:^19.0.4" "@types/react-dom": "npm:^19.0.4"
alova: "npm:3.2.10" alova: "npm:3.2.10"
@@ -1628,13 +1621,13 @@ __metadata:
eslint-config-prettier: "npm:^10.1.1" eslint-config-prettier: "npm:^10.1.1"
formidable: "npm:^3.5.2" formidable: "npm:^3.5.2"
jwt-decode: "npm:^4.0.0" jwt-decode: "npm:^4.0.0"
mime-types: "npm:^2.1.35" mime-types: "npm:^3.0.1"
preact: "npm:^10.26.4" preact: "npm:^10.26.4"
prettier: "npm:^3.5.3" prettier: "npm:^3.5.3"
react: "npm:^19.0.0" react: "npm:^19.1.0"
react-dom: "npm:^19.0.0" react-dom: "npm:^19.1.0"
react-icons: "npm:^5.5.0" react-icons: "npm:^5.5.0"
react-router: "npm:^7.4.0" react-router: "npm:^7.4.1"
react-toastify: "npm:^11.0.5" react-toastify: "npm:^11.0.5"
rollup-plugin-visualizer: "npm:^5.14.0" rollup-plugin-visualizer: "npm:^5.14.0"
terser: "npm:^5.39.0" terser: "npm:^5.39.0"
@@ -2638,9 +2631,9 @@ __metadata:
linkType: hard linkType: hard
"electron-to-chromium@npm:^1.5.73": "electron-to-chromium@npm:^1.5.73":
version: 1.5.124 version: 1.5.128
resolution: "electron-to-chromium@npm:1.5.124" resolution: "electron-to-chromium@npm:1.5.128"
checksum: 10c0/f27de21f8763836daf5593bbedb8b78f41e88519aa27d3232e9f3e34b0a0fd5aee9cc37a31c3a36d2fa32291827738e996e866ad8ceb479e4c45bc0ee396ecba checksum: 10c0/3c64ec24a8aff8e9954e99366aebdf41c0a5d0e48a498435b68d4deddd938584af53c1b176edd166285cfb9dcd407d4897184208a0369d1bb97e21d8daee8bc2
languageName: node languageName: node
linkType: hard linkType: hard
@@ -4763,26 +4756,19 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"mime-db@npm:1.52.0": "mime-db@npm:^1.28.0, mime-db@npm:^1.54.0":
version: 1.52.0
resolution: "mime-db@npm:1.52.0"
checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa
languageName: node
linkType: hard
"mime-db@npm:^1.28.0":
version: 1.54.0 version: 1.54.0
resolution: "mime-db@npm:1.54.0" resolution: "mime-db@npm:1.54.0"
checksum: 10c0/8d907917bc2a90fa2df842cdf5dfeaf509adc15fe0531e07bb2f6ab15992416479015828d6a74200041c492e42cce3ebf78e5ce714388a0a538ea9c53eece284 checksum: 10c0/8d907917bc2a90fa2df842cdf5dfeaf509adc15fe0531e07bb2f6ab15992416479015828d6a74200041c492e42cce3ebf78e5ce714388a0a538ea9c53eece284
languageName: node languageName: node
linkType: hard linkType: hard
"mime-types@npm:^2.1.35": "mime-types@npm:^3.0.1":
version: 2.1.35 version: 3.0.1
resolution: "mime-types@npm:2.1.35" resolution: "mime-types@npm:3.0.1"
dependencies: dependencies:
mime-db: "npm:1.52.0" mime-db: "npm:^1.54.0"
checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 checksum: 10c0/bd8c20d3694548089cf229016124f8f40e6a60bbb600161ae13e45f793a2d5bb40f96bbc61f275836696179c77c1d6bf4967b2a75e0a8ad40fe31f4ed5be4da5
languageName: node languageName: node
linkType: hard linkType: hard
@@ -5593,14 +5579,14 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"react-dom@npm:^19.0.0": "react-dom@npm:^19.1.0":
version: 19.0.0 version: 19.1.0
resolution: "react-dom@npm:19.0.0" resolution: "react-dom@npm:19.1.0"
dependencies: dependencies:
scheduler: "npm:^0.25.0" scheduler: "npm:^0.26.0"
peerDependencies: peerDependencies:
react: ^19.0.0 react: ^19.1.0
checksum: 10c0/a36ce7ab507b237ae2759c984cdaad4af4096d8199fb65b3815c16825e5cfeb7293da790a3fc2184b52bfba7ba3ff31c058c01947aff6fd1a3701632aabaa6a9 checksum: 10c0/3e26e89bb6c67c9a6aa86cb888c7a7f8258f2e347a6d2a15299c17eb16e04c19194e3452bc3255bd34000a61e45e2cb51e46292392340432f133e5a5d2dfb5fc
languageName: node languageName: node
linkType: hard linkType: hard
@@ -5621,15 +5607,15 @@ __metadata:
linkType: hard linkType: hard
"react-is@npm:^19.0.0": "react-is@npm:^19.0.0":
version: 19.0.0 version: 19.1.0
resolution: "react-is@npm:19.0.0" resolution: "react-is@npm:19.1.0"
checksum: 10c0/d1be8e8500cf04f76df71942a21ef3a71266397a383d7ec8885f35190df818d35c65efd35aed7be47a89ad99aaff2c52e0c4e39e8930844a6b997622e50625a8 checksum: 10c0/b6c6cadd172d5d39f66d493700d137a5545c294a62ce0f8ec793d59794c97d2bed6bad227626f16bd0e90004ed7fdc8ed662a004e6edcf5d2b7ecb6e3040ea6b
languageName: node languageName: node
linkType: hard linkType: hard
"react-router@npm:^7.4.0": "react-router@npm:^7.4.1":
version: 7.4.0 version: 7.4.1
resolution: "react-router@npm:7.4.0" resolution: "react-router@npm:7.4.1"
dependencies: dependencies:
"@types/cookie": "npm:^0.6.0" "@types/cookie": "npm:^0.6.0"
cookie: "npm:^1.0.1" cookie: "npm:^1.0.1"
@@ -5641,7 +5627,7 @@ __metadata:
peerDependenciesMeta: peerDependenciesMeta:
react-dom: react-dom:
optional: true optional: true
checksum: 10c0/9cf943d7854e1e4d068162efa9a61e2d06a5c679cf3272a867046cc97a6cc65c9744490f54e8fd77bbe2d114610a5cb285ceb3d3941b9b19ac6f63385ac0a89d checksum: 10c0/c501e46bf4e672f977250acb431ecfad120d7a0383bbb17e5c3276a1390c01d36bd36bd995c9dddca39ba3a8521be11295292595523d880ec11240fc5d74e637
languageName: node languageName: node
linkType: hard linkType: hard
@@ -5695,10 +5681,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"react@npm:^19.0.0": "react@npm:^19.1.0":
version: 19.0.0 version: 19.1.0
resolution: "react@npm:19.0.0" resolution: "react@npm:19.1.0"
checksum: 10c0/9cad8f103e8e3a16d15cb18a0d8115d8bd9f9e1ce3420310aea381eb42aa0a4f812cf047bb5441349257a05fba8a291515691e3cb51267279b2d2c3253f38471 checksum: 10c0/530fb9a62237d54137a13d2cfb67a7db6a2156faed43eecc423f4713d9b20c6f2728b026b45e28fcd72e8eadb9e9ed4b089e99f5e295d2f0ad3134251bdd3698
languageName: node languageName: node
linkType: hard linkType: hard
@@ -5879,30 +5865,30 @@ __metadata:
linkType: hard linkType: hard
"rollup@npm:^4.30.1": "rollup@npm:^4.30.1":
version: 4.37.0 version: 4.38.0
resolution: "rollup@npm:4.37.0" resolution: "rollup@npm:4.38.0"
dependencies: dependencies:
"@rollup/rollup-android-arm-eabi": "npm:4.37.0" "@rollup/rollup-android-arm-eabi": "npm:4.38.0"
"@rollup/rollup-android-arm64": "npm:4.37.0" "@rollup/rollup-android-arm64": "npm:4.38.0"
"@rollup/rollup-darwin-arm64": "npm:4.37.0" "@rollup/rollup-darwin-arm64": "npm:4.38.0"
"@rollup/rollup-darwin-x64": "npm:4.37.0" "@rollup/rollup-darwin-x64": "npm:4.38.0"
"@rollup/rollup-freebsd-arm64": "npm:4.37.0" "@rollup/rollup-freebsd-arm64": "npm:4.38.0"
"@rollup/rollup-freebsd-x64": "npm:4.37.0" "@rollup/rollup-freebsd-x64": "npm:4.38.0"
"@rollup/rollup-linux-arm-gnueabihf": "npm:4.37.0" "@rollup/rollup-linux-arm-gnueabihf": "npm:4.38.0"
"@rollup/rollup-linux-arm-musleabihf": "npm:4.37.0" "@rollup/rollup-linux-arm-musleabihf": "npm:4.38.0"
"@rollup/rollup-linux-arm64-gnu": "npm:4.37.0" "@rollup/rollup-linux-arm64-gnu": "npm:4.38.0"
"@rollup/rollup-linux-arm64-musl": "npm:4.37.0" "@rollup/rollup-linux-arm64-musl": "npm:4.38.0"
"@rollup/rollup-linux-loongarch64-gnu": "npm:4.37.0" "@rollup/rollup-linux-loongarch64-gnu": "npm:4.38.0"
"@rollup/rollup-linux-powerpc64le-gnu": "npm:4.37.0" "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.38.0"
"@rollup/rollup-linux-riscv64-gnu": "npm:4.37.0" "@rollup/rollup-linux-riscv64-gnu": "npm:4.38.0"
"@rollup/rollup-linux-riscv64-musl": "npm:4.37.0" "@rollup/rollup-linux-riscv64-musl": "npm:4.38.0"
"@rollup/rollup-linux-s390x-gnu": "npm:4.37.0" "@rollup/rollup-linux-s390x-gnu": "npm:4.38.0"
"@rollup/rollup-linux-x64-gnu": "npm:4.37.0" "@rollup/rollup-linux-x64-gnu": "npm:4.38.0"
"@rollup/rollup-linux-x64-musl": "npm:4.37.0" "@rollup/rollup-linux-x64-musl": "npm:4.38.0"
"@rollup/rollup-win32-arm64-msvc": "npm:4.37.0" "@rollup/rollup-win32-arm64-msvc": "npm:4.38.0"
"@rollup/rollup-win32-ia32-msvc": "npm:4.37.0" "@rollup/rollup-win32-ia32-msvc": "npm:4.38.0"
"@rollup/rollup-win32-x64-msvc": "npm:4.37.0" "@rollup/rollup-win32-x64-msvc": "npm:4.38.0"
"@types/estree": "npm:1.0.6" "@types/estree": "npm:1.0.7"
fsevents: "npm:~2.3.2" fsevents: "npm:~2.3.2"
dependenciesMeta: dependenciesMeta:
"@rollup/rollup-android-arm-eabi": "@rollup/rollup-android-arm-eabi":
@@ -5949,7 +5935,7 @@ __metadata:
optional: true optional: true
bin: bin:
rollup: dist/bin/rollup rollup: dist/bin/rollup
checksum: 10c0/2e00382e08938636edfe0a7547ea2eaa027205dc0b6ff85d8b82be0fbe55a4ef88a1995fee2a5059e33dbccf12d1376c236825353afb89c96298cc95c5160a46 checksum: 10c0/931a6d3bf34fa13adec44a8660319bb7b2f61fbabbf2030f4d29df991fb37b6a685cd7dc203fde8d4ab8b4fe783f1fe8814e448a97f651dc4727511faf958cb4
languageName: node languageName: node
linkType: hard linkType: hard
@@ -5992,10 +5978,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"scheduler@npm:^0.25.0": "scheduler@npm:^0.26.0":
version: 0.25.0 version: 0.26.0
resolution: "scheduler@npm:0.25.0" resolution: "scheduler@npm:0.26.0"
checksum: 10c0/a4bb1da406b613ce72c1299db43759526058fdcc413999c3c3e0db8956df7633acf395cb20eb2303b6a65d658d66b6585d344460abaee8080b4aa931f10eaafe checksum: 10c0/5b8d5bfddaae3513410eda54f2268e98a376a429931921a81b5c3a2873aab7ca4d775a8caac5498f8cbc7d0daeab947cf923dbd8e215d61671f9f4e392d34356
languageName: node languageName: node
linkType: hard linkType: hard

View File

@@ -147,5 +147,6 @@ double ledcSetup(uint8_t chan, double freq, uint8_t bit_num) {
void ledcAttachPin(uint8_t pin, uint8_t chan) {}; void ledcAttachPin(uint8_t pin, uint8_t chan) {};
void ledcWrite(uint8_t chan, uint32_t duty) {}; void ledcWrite(uint8_t chan, uint32_t duty) {};
void neopixelWrite(uint8_t pin, uint8_t red_val, uint8_t green_val, uint8_t blue_val) {}; void neopixelWrite(uint8_t pin, uint8_t red_val, uint8_t green_val, uint8_t blue_val) {};
void rgbLedWrite(uint8_t pin, uint8_t red_val, uint8_t green_val, uint8_t blue_val) {};
#endif #endif

View File

@@ -72,6 +72,7 @@ double ledcSetup(uint8_t chan, double freq, uint8_t bit_num);
void ledcAttachPin(uint8_t pin, uint8_t chan); void ledcAttachPin(uint8_t pin, uint8_t chan);
void ledcWrite(uint8_t chan, uint32_t duty); void ledcWrite(uint8_t chan, uint32_t duty);
void neopixelWrite(uint8_t pin, uint8_t red_val, uint8_t green_val, uint8_t blue_val); void neopixelWrite(uint8_t pin, uint8_t red_val, uint8_t green_val, uint8_t blue_val);
void rgbLedWrite(uint8_t pin, uint8_t red_val, uint8_t green_val, uint8_t blue_val);
#define PROGMEM #define PROGMEM
#define PGM_P const char * #define PGM_P const char *

File diff suppressed because one or more lines are too long

View File

@@ -1,3 +1,3 @@
nodeLinker: node-modules nodeLinker: node-modules
yarnPath: .yarn/releases/yarn-4.7.0.cjs yarnPath: .yarn/releases/yarn-4.8.1.cjs

View File

@@ -15,5 +15,5 @@
"itty-router": "^5.0.18", "itty-router": "^5.0.18",
"prettier": "^3.5.3" "prettier": "^3.5.3"
}, },
"packageManager": "yarn@4.7.0" "packageManager": "yarn@4.8.1"
} }

View File

@@ -112,47 +112,46 @@ let system_status = {
status: 3 status: 3
}; };
let VERSION_IS_UPGRADEABLE: boolean; // Testing Versioning
let DEV_VERSION_IS_UPGRADEABLE: boolean;
let STABLE_VERSION_IS_UPGRADEABLE: boolean;
let THIS_VERSION: string;
let version_test: number;
// Versions
// default - on latest stable, no stable upgrades
let THIS_VERSION = '3.7.2';
let LATEST_STABLE_VERSION = '3.7.2'; let LATEST_STABLE_VERSION = '3.7.2';
let LATEST_DEV_VERSION = '3.7.3-dev.9'; let LATEST_DEV_VERSION = '3.7.3-dev.3';
// scenarios for testing versioning // scenarios for testing versioning
let version_test = 0; version_test = 0; // on latest stable, can switch to dev only
version_test = 0; // on latest stable, no upgrades, but can switch // version_test = 1; // on latest dev, can switch back to stable only or reinstall
// version_test = 1; // on latest dev, no update // version_test = 2; // upgrade an older stable to latest stable or switch to latest dev
// version_test = 2; // on stable, upgrade stable to latest stable // version_test = 3; // upgrade an older dev to latest dev, switch to stable available
// version_test = 3; // on dev, upgrade dev to latest dev
switch (version_test as number) { switch (version_test as number) {
case 0: case 0:
default: default:
// use default - on latest stable, no upgrades, but can switch // on latest stable, can upgrade to dev only
VERSION_IS_UPGRADEABLE = false; THIS_VERSION = LATEST_STABLE_VERSION;
STABLE_VERSION_IS_UPGRADEABLE = false;
DEV_VERSION_IS_UPGRADEABLE = true;
break; break;
case 1: case 1:
// on latest dev, no update // on latest dev, no updates to either dev or stable
THIS_VERSION = '3.7.2-dev.9'; THIS_VERSION = LATEST_DEV_VERSION;
LATEST_STABLE_VERSION = '3.7.2'; STABLE_VERSION_IS_UPGRADEABLE = false;
LATEST_DEV_VERSION = '3.7.3-dev.9'; DEV_VERSION_IS_UPGRADEABLE = false;
VERSION_IS_UPGRADEABLE = false;
break; break;
case 2: case 2:
// upgrade stable to latest stable // upgrade an older stable to latest stable or the latest dev
THIS_VERSION = '3.6.5'; THIS_VERSION = '3.6.5';
LATEST_STABLE_VERSION = '3.7.2'; STABLE_VERSION_IS_UPGRADEABLE = true;
LATEST_DEV_VERSION = '3.7.3-dev.12'; DEV_VERSION_IS_UPGRADEABLE = true;
VERSION_IS_UPGRADEABLE = true;
break; break;
case 3: case 3:
// upgrade dev to latest dev // upgrade an older dev to latest dev, no stable upgrades available
THIS_VERSION = '3.7.2-dev-1'; THIS_VERSION = '3.7.3-dev.2';
LATEST_STABLE_VERSION = '3.7.2'; STABLE_VERSION_IS_UPGRADEABLE = false;
LATEST_DEV_VERSION = '3.7.3-dev.12'; DEV_VERSION_IS_UPGRADEABLE = true;
VERSION_IS_UPGRADEABLE = true;
break; break;
} }
@@ -270,10 +269,10 @@ function updateMask(entity: any, de: any, dd: any) {
const old_custom_name = dd.nodes[dd_objIndex].cn; const old_custom_name = dd.nodes[dd_objIndex].cn;
console.log( console.log(
'comparing names, old (' + 'comparing names, old (' +
old_custom_name + old_custom_name +
') with new (' + ') with new (' +
new_custom_name + new_custom_name +
')' ')'
); );
if (old_custom_name !== new_custom_name) { if (old_custom_name !== new_custom_name) {
changed = true; changed = true;
@@ -366,21 +365,23 @@ function check_upgrade(version: string) {
if (version) { if (version) {
const dev_version = version.split(',')[0]; const dev_version = version.split(',')[0];
const stable_version = version.split(',')[1]; const stable_version = version.split(',')[1];
console.log( console.log(
'latest dev version: ' + 'Version upgrade check. This version (' +
dev_version + THIS_VERSION +
', latest stable version: ' + ') to dev (' +
stable_version dev_version +
); ') is ' +
console.log( (DEV_VERSION_IS_UPGRADEABLE ? 'YES' : 'NO') +
'Version upgrade check from version ' + ' and to stable (' +
THIS_VERSION + stable_version +
', upgradable: ' + ') is ' +
VERSION_IS_UPGRADEABLE (STABLE_VERSION_IS_UPGRADEABLE ? 'YES' : 'NO')
); );
data = { data = {
emsesp_version: THIS_VERSION, emsesp_version: THIS_VERSION,
upgradeable: VERSION_IS_UPGRADEABLE dev_upgradeable: DEV_VERSION_IS_UPGRADEABLE,
stable_upgradeable: STABLE_VERSION_IS_UPGRADEABLE
}; };
} else { } else {
console.log('requesting ems-esp version (' + THIS_VERSION + ')'); console.log('requesting ems-esp version (' + THIS_VERSION + ')');

View File

@@ -54,34 +54,7 @@ framework = arduino
board_build.partitions = partitions/esp32_partition_16M.csv board_build.partitions = partitions/esp32_partition_16M.csv
board_upload.flash_size = 16MB board_upload.flash_size = 16MB
board_build.app_partition_name = app0 board_build.app_partition_name = app0
platform = espressif32@6.10.0 ; Arduino Core 2.0.17 / IDF 4.4.7 platform = espressif32@6.10.0 ; Arduino Core v2.0.17 / IDF v4.4.7
; platform = https://github.com/pioarduino/platform-espressif32/releases/download/53.03.11/platform-espressif32.zip ; Arduino Core 3.1.1 / IDF 5.3.2
;
; Experimental for building using espidf and the Hybrid mode to remove core libraries.
;
; custom_sdkconfig = https://raw.githubusercontent.com/pioarduino/sdkconfig/refs/heads/main/sdkconfig_tasmota_esp32
; '# CONFIG_ETH_USE_ESP32_EMAC is not set'
; '# CONFIG_ETH_PHY_INTERFACE_RMII is not set'
; '# CONFIG_ETH_RMII_CLK_INPUT is not set'
; '# CONFIG_ETH_RMII_CLK_IN_GPIO is not set'
; custom_component_remove = espressif/esp_hosted
; espressif/esp_wifi_remote
; espressif/esp-dsp
; espressif/network_provisioning
; espressif/esp-zboss-lib
; espressif/esp-zigbee-lib
; espressif/esp_rainmaker
; espressif/rmaker_common
; espressif/esp_insights
; espressif/esp_diag_data_store
; espressif/esp_diagnostics
; espressif/cbor
; espressif/qrcode
; espressif/esp-sr
; espressif/libsodium
; espressif/esp-modbus
; chmorgan/esp-libhelix-mp3
; espressif/esp32-camera
; 32MB Flash variants ; 32MB Flash variants
[espressif32_base_32M] [espressif32_base_32M]

View File

@@ -9,10 +9,10 @@ OUTPUT_DIR = "build{}".format(os.path.sep)
def bin_copy(source, target, env): def bin_copy(source, target, env):
# get the application version from version.h # get the application version from emsesp_version.h
bag = {} bag = {}
exprs = [(re.compile(r'^#define EMSESP_APP_VERSION\s+"(\S+)"'), 'app_version')] exprs = [(re.compile(r'^#define EMSESP_APP_VERSION\s+"(\S+)"'), 'app_version')]
with open('./src/version.h', 'r') as f: with open('./src/emsesp_version.h', 'r') as f:
for l in f.readlines(): for l in f.readlines():
for expr, var in exprs: for expr, var in exprs:
m = expr.match(l) m = expr.match(l)

View File

@@ -11,7 +11,7 @@ def move_file(source, target, env):
# get the build info # get the build info
bag = {} bag = {}
exprs = [(re.compile(r'^#define EMSESP_APP_VERSION\s+"(\S+)"'), 'app_version')] exprs = [(re.compile(r'^#define EMSESP_APP_VERSION\s+"(\S+)"'), 'app_version')]
with open('./src/version.h', 'r') as f: with open('./src/emsesp_version.h', 'r') as f:
for l in f.readlines(): for l in f.readlines():
for expr, var in exprs: for expr, var in exprs:
m = expr.match(l) m = expr.match(l)

View File

@@ -1,7 +1,7 @@
sonar.organization=emsesp sonar.organization=emsesp
sonar.projectKey=emsesp_EMS-ESP32 sonar.projectKey=emsesp_EMS-ESP32
sonar.projectName=EMS-ESP32 sonar.projectName=EMS-ESP32
sonar.projectVersion=3.7.2 sonar.projectVersion=3.7.3
sonar.sources=./src sonar.sources=./src
sonar.cfamily.compile-commands=compile_commands.json sonar.cfamily.compile-commands=compile_commands.json
sonar.sourceEncoding=UTF-8 sonar.sourceEncoding=UTF-8

View File

@@ -53,7 +53,9 @@ class SecuritySettings {
// users // users
settings.users.clear(); settings.users.clear();
if (root["users"].is<JsonArray>()) { if (root["users"].is<JsonArray>()) {
for (JsonVariant user : root["users"].as<JsonArray>()) { JsonArray users = root["users"].as<JsonArray>();
for (size_t i = 0; i < users.size(); i++) {
JsonObject user = users[i].as<JsonObject>();
settings.users.emplace_back(user["username"], user["password"], user["admin"]); settings.users.emplace_back(user["username"], user["password"], user["admin"]);
} }
} else { } else {

View File

@@ -71,7 +71,7 @@
#include "roomcontrol.h" #include "roomcontrol.h"
#include "command.h" #include "command.h"
#include "../version.h" #include "../emsesp_version.h"
// Load external modules // Load external modules
class Module {}; // forward declaration class Module {}; // forward declaration

View File

@@ -551,7 +551,11 @@ void System::led_init(bool refresh) {
if (refresh) { if (refresh) {
// disabled old led port before setting new one // disabled old led port before setting new one
if ((led_gpio_ != 0) && is_valid_gpio(led_gpio_)) { if ((led_gpio_ != 0) && is_valid_gpio(led_gpio_)) {
#if ESP_ARDUINO_VERSION_MAJOR < 3
led_type_ ? neopixelWrite(led_gpio_, 0, 0, 0) : digitalWrite(led_gpio_, !LED_ON); led_type_ ? neopixelWrite(led_gpio_, 0, 0, 0) : digitalWrite(led_gpio_, !LED_ON);
#else
led_type_ ? rgbLedWrite(led_gpio_, 0, 0, 0) : digitalWrite(led_gpio_, !LED_ON);
#endif
pinMode(led_gpio_, INPUT); pinMode(led_gpio_, INPUT);
} }
reload_settings(); reload_settings();
@@ -560,7 +564,11 @@ void System::led_init(bool refresh) {
if ((led_gpio_ != 0) && is_valid_gpio(led_gpio_)) { // 0 means disabled if ((led_gpio_ != 0) && is_valid_gpio(led_gpio_)) { // 0 means disabled
if (led_type_) { if (led_type_) {
// rgb LED WS2812B, use Neopixel // rgb LED WS2812B, use Neopixel
#if ESP_ARDUINO_VERSION_MAJOR < 3
neopixelWrite(led_gpio_, 0, 0, 0); neopixelWrite(led_gpio_, 0, 0, 0);
#else
rgbLedWrite(led_gpio_, 0, 0, 0);
#endif
} else { } else {
pinMode(led_gpio_, OUTPUT); pinMode(led_gpio_, OUTPUT);
digitalWrite(led_gpio_, !LED_ON); // start with LED off digitalWrite(led_gpio_, !LED_ON); // start with LED off
@@ -817,12 +825,20 @@ void System::system_check() {
if (healthcheck_ == 0) { if (healthcheck_ == 0) {
// everything is healthy, show LED permanently on or off depending on setting // everything is healthy, show LED permanently on or off depending on setting
if (led_gpio_) { if (led_gpio_) {
#if ESP_ARDUINO_VERSION_MAJOR < 3
led_type_ ? neopixelWrite(led_gpio_, 0, hide_led_ ? 0 : 128, 0) : digitalWrite(led_gpio_, hide_led_ ? !LED_ON : LED_ON); led_type_ ? neopixelWrite(led_gpio_, 0, hide_led_ ? 0 : 128, 0) : digitalWrite(led_gpio_, hide_led_ ? !LED_ON : LED_ON);
#else
led_type_ ? rgbLedWrite(led_gpio_, 0, hide_led_ ? 0 : 128, 0) : digitalWrite(led_gpio_, hide_led_ ? !LED_ON : LED_ON);
#endif
} }
} else { } else {
// turn off LED so we're ready to the flashes // turn off LED so we're ready to the flashes
if (led_gpio_) { if (led_gpio_) {
#if ESP_ARDUINO_VERSION_MAJOR < 3
led_type_ ? neopixelWrite(led_gpio_, 0, 0, 0) : digitalWrite(led_gpio_, !LED_ON); led_type_ ? neopixelWrite(led_gpio_, 0, 0, 0) : digitalWrite(led_gpio_, !LED_ON);
#else
led_type_ ? rgbLedWrite(led_gpio_, 0, 0, 0) : digitalWrite(led_gpio_, !LED_ON);
#endif
} }
} }
} }
@@ -882,7 +898,11 @@ void System::led_monitor() {
// reset the whole sequence // reset the whole sequence
led_long_timer_ = uuid::get_uptime(); led_long_timer_ = uuid::get_uptime();
led_flash_step_ = 0; led_flash_step_ = 0;
#if ESP_ARDUINO_VERSION_MAJOR < 3
led_type_ ? neopixelWrite(led_gpio_, 0, 0, 0) : digitalWrite(led_gpio_, !LED_ON); // LED off led_type_ ? neopixelWrite(led_gpio_, 0, 0, 0) : digitalWrite(led_gpio_, !LED_ON); // LED off
#else
led_type_ ? rgbLedWrite(led_gpio_, 0, 0, 0) : digitalWrite(led_gpio_, !LED_ON); // LED off
#endif
} else if (led_flash_step_ % 2) { } else if (led_flash_step_ % 2) {
// handle the step events (on odd numbers 3,5,7,etc). see if we need to turn on a LED // handle the step events (on odd numbers 3,5,7,etc). see if we need to turn on a LED
// 1 flash is the EMS bus is not connected // 1 flash is the EMS bus is not connected
@@ -892,17 +912,33 @@ void System::led_monitor() {
if (led_type_) { if (led_type_) {
if (led_flash_step_ == 3) { if (led_flash_step_ == 3) {
if ((healthcheck_ & HEALTHCHECK_NO_NETWORK) == HEALTHCHECK_NO_NETWORK) { if ((healthcheck_ & HEALTHCHECK_NO_NETWORK) == HEALTHCHECK_NO_NETWORK) {
#if ESP_ARDUINO_VERSION_MAJOR < 3
neopixelWrite(led_gpio_, 128, 0, 0); // red neopixelWrite(led_gpio_, 128, 0, 0); // red
#else
rgbLedWrite(led_gpio_, 128, 0, 0); // red
#endif
} else if ((healthcheck_ & HEALTHCHECK_NO_BUS) == HEALTHCHECK_NO_BUS) { } else if ((healthcheck_ & HEALTHCHECK_NO_BUS) == HEALTHCHECK_NO_BUS) {
#if ESP_ARDUINO_VERSION_MAJOR < 3
neopixelWrite(led_gpio_, 0, 0, 128); // blue neopixelWrite(led_gpio_, 0, 0, 128); // blue
#else
rgbLedWrite(led_gpio_, 0, 0, 128); // blue
#endif
} }
} }
if (led_flash_step_ == 5 && (healthcheck_ & HEALTHCHECK_NO_NETWORK) == HEALTHCHECK_NO_NETWORK) { if (led_flash_step_ == 5 && (healthcheck_ & HEALTHCHECK_NO_NETWORK) == HEALTHCHECK_NO_NETWORK) {
#if ESP_ARDUINO_VERSION_MAJOR < 3
neopixelWrite(led_gpio_, 128, 0, 0); // red neopixelWrite(led_gpio_, 128, 0, 0); // red
#else
rgbLedWrite(led_gpio_, 128, 0, 0); // red
#endif
} }
if ((led_flash_step_ == 7) && ((healthcheck_ & HEALTHCHECK_NO_NETWORK) == HEALTHCHECK_NO_NETWORK) if ((led_flash_step_ == 7) && ((healthcheck_ & HEALTHCHECK_NO_NETWORK) == HEALTHCHECK_NO_NETWORK)
&& ((healthcheck_ & HEALTHCHECK_NO_BUS) == HEALTHCHECK_NO_BUS)) { && ((healthcheck_ & HEALTHCHECK_NO_BUS) == HEALTHCHECK_NO_BUS)) {
#if ESP_ARDUINO_VERSION_MAJOR < 3
neopixelWrite(led_gpio_, 0, 0, 128); // blue neopixelWrite(led_gpio_, 0, 0, 128); // blue
#else
rgbLedWrite(led_gpio_, 0, 0, 128); // blue
#endif
} }
} else { } else {
if ((led_flash_step_ == 3) if ((led_flash_step_ == 3)
@@ -926,7 +962,11 @@ void System::led_monitor() {
} else { } else {
// turn the led off after the flash, on even number count // turn the led off after the flash, on even number count
if (led_on_) { if (led_on_) {
#if ESP_ARDUINO_VERSION_MAJOR < 3
led_type_ ? neopixelWrite(led_gpio_, 0, 0, 0) : digitalWrite(led_gpio_, !LED_ON); led_type_ ? neopixelWrite(led_gpio_, 0, 0, 0) : digitalWrite(led_gpio_, !LED_ON);
#else
led_type_ ? rgbLedWrite(led_gpio_, 0, 0, 0) : digitalWrite(led_gpio_, !LED_ON);
#endif
led_on_ = false; led_on_ = false;
} }
} }

1
src/emsesp_version.h Normal file
View File

@@ -0,0 +1 @@
#define EMSESP_APP_VERSION "3.7.3-dev.4"

View File

@@ -1112,19 +1112,30 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const
// EMSESP::webStatusService.action(&request, doc.as<JsonVariant>()); // EMSESP::webStatusService.action(&request, doc.as<JsonVariant>());
// test version checks // test version checks
// test with "current_version_s = "3.7.1-dev.8" in WebStatusService::checkUpgrade() // use same data as in rest_server.ts
// request.url("/rest/action"); // log shows first if you can upgrade to dev, and then if you can upgrade to stable
// deserializeJson(doc, "{\"action\":\"checkUpgrade\", \"param\":\"3.7.1-dev.9,3.7.0\"}"); // is upgradable request.url("/rest/action");
// EMSESP::webStatusService.action(&request, doc.as<JsonVariant>()); std::string LATEST_STABLE_VERSION = "3.7.2";
// deserializeJson(doc, "{\"action\":\"checkUpgrade\", \"param\":\"3.7.1-dev.7,3.7.0\"}"); // is not upgradable std::string LATEST_DEV_VERSION = "3.7.3-dev.3";
// EMSESP::webStatusService.action(&request, doc.as<JsonVariant>()); std::string param = LATEST_DEV_VERSION + "," + LATEST_STABLE_VERSION;
std::string action = "{\"action\":\"checkUpgrade\", \"param\":\"" + param + "\"}";
deserializeJson(doc, action);
// test with "current_version_s = "3.6.5" in WebStatusService::checkUpgrade() // case 0: on latest stable, can upgrade to dev only. So true, false
// request.url("/rest/action"); EMSESP::webStatusService.set_current_version(LATEST_STABLE_VERSION);
// deserializeJson(doc, "{\"action\":\"checkUpgrade\", \"param\":\"3.7.1-dev.9,3.6.5\"}"); // is noy upgradable EMSESP::webStatusService.action(&request, doc.as<JsonVariant>());
// EMSESP::webStatusService.action(&request, doc.as<JsonVariant>());
// deserializeJson(doc, "{\"action\":\"checkUpgrade\", \"param\":\"3.7.1-dev.7,3.7.0\"}"); // is upgradable // case 1: on latest dev, no updates to either dev or stable. So false, false
// EMSESP::webStatusService.action(&request, doc.as<JsonVariant>()); EMSESP::webStatusService.set_current_version(LATEST_DEV_VERSION);
EMSESP::webStatusService.action(&request, doc.as<JsonVariant>());
// case 2: upgrade an older stable to latest stable or the latest dev. So true, true
EMSESP::webStatusService.set_current_version("3.6.5");
EMSESP::webStatusService.action(&request, doc.as<JsonVariant>());
// case 3: upgrade an older dev to latest dev, no stable upgrades available. So true, false
EMSESP::webStatusService.set_current_version("3.7.3-dev.2");
EMSESP::webStatusService.action(&request, doc.as<JsonVariant>());
// char data6[] = "{\"device\":\"system\", \"cmd\":\"read\",\"value\":\"8 2 27 1\"}"; // char data6[] = "{\"device\":\"system\", \"cmd\":\"read\",\"value\":\"8 2 27 1\"}";
// deserializeJson(doc, data6); // deserializeJson(doc, data6);

View File

@@ -41,7 +41,7 @@ namespace emsesp {
// #define EMSESP_DEBUG_DEFAULT "310" // #define EMSESP_DEBUG_DEFAULT "310"
// #define EMSESP_DEBUG_DEFAULT "render" // #define EMSESP_DEBUG_DEFAULT "render"
// #define EMSESP_DEBUG_DEFAULT "api" // #define EMSESP_DEBUG_DEFAULT "api"
// #define EMSESP_DEBUG_DEFAULT "api3" #define EMSESP_DEBUG_DEFAULT "api3"
// #define EMSESP_DEBUG_DEFAULT "api4" // #define EMSESP_DEBUG_DEFAULT "api4"
// #define EMSESP_DEBUG_DEFAULT "crash" // #define EMSESP_DEBUG_DEFAULT "crash"
// #define EMSESP_DEBUG_DEFAULT "dv" // #define EMSESP_DEBUG_DEFAULT "dv"

View File

@@ -73,14 +73,17 @@ void EMSuart::uart_event_task(void * pvParameters) {
*/ */
void EMSuart::start(const uint8_t tx_mode, const uint8_t rx_gpio, const uint8_t tx_gpio) { void EMSuart::start(const uint8_t tx_mode, const uint8_t rx_gpio, const uint8_t tx_gpio) {
if (tx_mode_ == 0xFF) { if (tx_mode_ == 0xFF) {
uart_config_t uart_config = { uart_config_t uart_config = {.baud_rate = EMSUART_BAUD,
.baud_rate = EMSUART_BAUD, .data_bits = UART_DATA_8_BITS,
.data_bits = UART_DATA_8_BITS, .parity = UART_PARITY_DISABLE,
.parity = UART_PARITY_DISABLE, .stop_bits = UART_STOP_BITS_1,
.stop_bits = UART_STOP_BITS_1, .flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE, .rx_flow_ctrl_thresh = 0,
.rx_flow_ctrl_thresh = 0, // not used - https://docs.espressif.com/projects/esp-idf/en/v3.3.6/api-reference/peripherals/uart.html .source_clk = UART_SCLK_APB
.source_clk = UART_SCLK_APB, #if ESP_ARDUINO_VERSION_MAJOR >= 3
,
.flags = {0, 0}
#endif
}; };
#if defined(EMSUART_RX_INVERT) #if defined(EMSUART_RX_INVERT)
inverse_mask |= UART_SIGNAL_RXD_INV; inverse_mask |= UART_SIGNAL_RXD_INV;

View File

@@ -1 +0,0 @@
#define EMSESP_APP_VERSION "3.7.3-dev.3"

View File

@@ -219,37 +219,38 @@ void WebStatusService::action(AsyncWebServerRequest * request, JsonVariant json)
// action = checkUpgrade // action = checkUpgrade
// versions holds the latest development version and stable version in one string, comma separated // versions holds the latest development version and stable version in one string, comma separated
bool WebStatusService::checkUpgrade(JsonObject root, std::string & versions) { bool WebStatusService::checkUpgrade(JsonObject root, std::string & versions) {
std::string current_version_s;
#ifndef EMSESP_STANDALONE
current_version_s = EMSESP_APP_VERSION;
#else
// for testing only - see api3 test in test.cpp
// current_version_s = "3.6.5";
current_version_s = "3.7.2-dev.1";
#endif
if (!versions.empty()) { if (!versions.empty()) {
version::Semver200_version current_version(current_version_s); version::Semver200_version current_version(current_version_s);
bool using_dev_version = !current_version.prerelease().find("dev"); // look for dev in the name to determine if we're using dev version version::Semver200_version latest_dev_version(versions.substr(0, versions.find(',')));
version::Semver200_version latest_version(using_dev_version ? versions.substr(0, versions.find(',')) : versions.substr(versions.find(',') + 1)); version::Semver200_version latest_stable_version(versions.substr(versions.find(',') + 1));
bool upgradeable = (latest_version > current_version);
bool dev_upgradeable = latest_dev_version > current_version;
bool stable_upgradeable = latest_stable_version > current_version;
#if defined(EMSESP_DEBUG) #if defined(EMSESP_DEBUG)
// look for dev in the name to determine if we're using a dev release
bool using_dev_version = !current_version.prerelease().find("dev");
emsesp::EMSESP::logger() emsesp::EMSESP::logger()
.debug("Checking Version upgrade. Using %s release branch. current version=%d.%d.%d-%s, latest version=%d.%d.%d-%s (%s upgradeable)", .debug("Checking version upgrade. This version=%d.%d.%d-%s (%s),latest dev=%d.%d.%d-%s (%s upgradeable),latest stable=%d.%d.%d-%s (%s upgradeable)",
(using_dev_version ? "dev" : "stable"),
current_version.major(), current_version.major(),
current_version.minor(), current_version.minor(),
current_version.patch(), current_version.patch(),
current_version.prerelease().c_str(), current_version.prerelease().c_str(),
latest_version.major(), using_dev_version ? "Dev" : "Stable",
latest_version.minor(), latest_dev_version.major(),
latest_version.patch(), latest_dev_version.minor(),
latest_version.prerelease().c_str(), latest_dev_version.patch(),
upgradeable ? "IS" : "NOT"); latest_dev_version.prerelease().c_str(),
dev_upgradeable ? "is" : "is not",
latest_stable_version.major(),
latest_stable_version.minor(),
latest_stable_version.patch(),
latest_stable_version.prerelease().c_str(),
stable_upgradeable ? "is" : "is not");
#endif #endif
root["upgradeable"] = upgradeable; root["dev_upgradeable"] = dev_upgradeable;
root["stable_upgradeable"] = stable_upgradeable;
} }
root["emsesp_version"] = current_version_s; // always send back current version root["emsesp_version"] = current_version_s; // always send back current version

View File

@@ -5,12 +5,19 @@
#define EMSESP_ACTION_SERVICE_PATH "/rest/action" #define EMSESP_ACTION_SERVICE_PATH "/rest/action"
#include <semver200.h> // for version checking #include <semver200.h> // for version checking
#include "../emsesp_version.h"
namespace emsesp { namespace emsesp {
class WebStatusService { class WebStatusService {
public: public:
WebStatusService(AsyncWebServer * server, SecurityManager * securityManager); WebStatusService(AsyncWebServer * server, SecurityManager * securityManager);
void set_current_version(const std::string & version) {
current_version_s = version;
}
std::string get_current_version() {
return current_version_s;
}
// make action function public so we can test in the debug and standalone mode // make action function public so we can test in the debug and standalone mode
#ifndef EMSESP_STANDALONE #ifndef EMSESP_STANDALONE
@@ -29,6 +36,8 @@ class WebStatusService {
bool uploadURL(const char * url); bool uploadURL(const char * url);
bool setSystemStatus(const char * status); bool setSystemStatus(const char * status);
void allvalues(JsonObject output); void allvalues(JsonObject output);
std::string current_version_s = EMSESP_APP_VERSION;
}; };
} // namespace emsesp } // namespace emsesp