This commit is contained in:
MichaelDvP
2025-03-31 10:50:23 +02:00
44 changed files with 1146 additions and 1115 deletions

View File

@@ -30,7 +30,7 @@ jobs:
- name: Get EMS-ESP version
id: build_info
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
- name: Install PlatformIO

View File

@@ -28,7 +28,7 @@ jobs:
- name: Get EMS-ESP source code and version
id: build_info
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
- name: Install PlatformIO

1
.gitignore vendored
View File

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

View File

@@ -98,7 +98,7 @@ CXX := /usr/bin/g++
# LDFLAGS Linker Flags
#----------------------------------------------------------------------
CPPFLAGS += $(DEFINES) $(DEFAULTS) $(INCLUDE)
CPPFLAGS += -ggdb -g3 -O3
CPPFLAGS += -ggdb -g3
CPPFLAGS += -MMD
CPPFLAGS += -flto=auto -fno-lto
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 |
| 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 |
| 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 |
| auxheateronly | aux heater only | boolean | | true | DEVICE_DATA | 210 | 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 |
| 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 |
| 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 |
| auxheateronly | aux heater only | boolean | | true | DEVICE_DATA | 210 | 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 |
| 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 |
| 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 |
| auxheateronly | aux heater only | boolean | | true | DEVICE_DATA | 210 | 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,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,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,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
@@ -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,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,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,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
@@ -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,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,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,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
Can't render this file because it is too large.

View File

@@ -13,7 +13,7 @@ telegram_type_id,name,is_fetched
0x19,UBAMonitorSlow,
0x1A,UBASetPoints,
0x1C,UBAMaintenanceStatus,
0x1E,HydrTemp,
0x1E,WM10TempMessage,
0x23,JunkersSetMixer,fetched
0x26,UBASettingsWW,fetched
0x28,WeatherComp,fetched
@@ -109,10 +109,10 @@ telegram_type_id,name,is_fetched
0x02A0,RC300Curves,
0x02A1,RC300Curves,
0x02A2,RC300Curves,
0x02A5,CRFMonitor,
0x02A5,RC300Monitor,fetched
0x02A6,RC300Monitor,
0x02A7,RC300Monitor,
0x02A8,CRFMonitor,
0x02A7,CRFMonitor,
0x02A8,RC300Monitor,
0x02A9,RC300Monitor,
0x02AA,RC300Monitor,
0x02AB,RC300Monitor,
@@ -133,7 +133,7 @@ telegram_type_id,name,is_fetched
0x02BE,RC300Set,
0x02BF,RC300Set,
0x02C0,RC300Set,
0x02CC,RC300Set2,
0x02CC,HPPressure,fetched
0x02CD,MMPLUSConfigMessage,fetched
0x02CE,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
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",
"@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.0",
"@mui/icons-material": "^7.0.0",
"@mui/material": "^7.0.0",
"@mui/icons-material": "^7.0.1",
"@mui/material": "^7.0.1",
"@table-library/react-table-library": "4.1.12",
"alova": "3.2.10",
"async-validator": "^4.2.5",
"jwt-decode": "^4.0.0",
"mime-types": "^2.1.35",
"mime-types": "^3.0.1",
"preact": "^10.26.4",
"react": "^19.0.0",
"react-dom": "^19.0.0",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"react-icons": "^5.5.0",
"react-router": "^7.4.0",
"react-router": "^7.4.1",
"react-toastify": "^11.0.5",
"typesafe-i18n": "^5.26.2",
"typescript": "^5.8.2"
@@ -47,7 +47,7 @@
"@preact/preset-vite": "^2.10.1",
"@trivago/prettier-plugin-sort-imports": "^5.2.2",
"@types/formidable": "^3",
"@types/node": "^22.13.13",
"@types/node": "^22.13.14",
"@types/react": "^19.0.12",
"@types/react-dom": "^19.0.4",
"concurrently": "^9.1.2",
@@ -62,5 +62,5 @@
"vite-plugin-imagemin": "^0.6.1",
"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"
onClick={onCancel}
>
{LL.RESET(0)}
{LL.RESTART()}
</Button>
</MessageBox>
) : (

View File

@@ -4,7 +4,6 @@ import { toast } from 'react-toastify';
import CancelIcon from '@mui/icons-material/Cancel';
import CheckIcon from '@mui/icons-material/Done';
import DownloadIcon from '@mui/icons-material/GetApp';
import InfoOutlinedIcon from '@mui/icons-material/InfoOutlined';
import WarningIcon from '@mui/icons-material/Warning';
import {
Box,
@@ -45,7 +44,9 @@ const Version = () => {
const [openInstallDialog, setOpenInstallDialog] = useState<boolean>(false);
const [usingDevVersion, setUsingDevVersion] = useState<boolean>(false);
const [fetchDevVersion, setFetchDevVersion] = useState<boolean>(false);
const [upgradeAvailable, setUpgradeAvailable] = useState<boolean>(false);
const [devUpgradeAvailable, setDevUpgradeAvailable] = useState<boolean>(false);
const [stableUpgradeAvailable, setStableUpgradeAvailable] =
useState<boolean>(false);
const [internetLive, setInternetLive] = useState<boolean>(false);
const [downloadOnly, setDownloadOnly] = useState<boolean>(false);
@@ -63,8 +64,13 @@ const Version = () => {
immediate: false
}
).onSuccess((event) => {
const data = event.data as { emsesp_version: string; upgradeable: boolean };
setUpgradeAvailable(data.upgradeable);
const data = event.data as {
emsesp_version: string;
dev_upgradeable: boolean;
stable_upgradeable: boolean;
};
setDevUpgradeAvailable(data.dev_upgradeable);
setStableUpgradeAvailable(data.stable_upgradeable);
});
const {
@@ -173,55 +179,59 @@ const Version = () => {
useLayoutTitle('EMS-ESP Firmware');
const renderInstallDialog = () => (
<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={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 renderInstallDialog = () => {
const binURL = getBinURL();
return (
<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);
@@ -232,7 +242,33 @@ const Version = () => {
setOpenInstallDialog(false);
};
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) {
return;
}
@@ -258,16 +294,11 @@ const Version = () => {
<Button
sx={{ ml: 2 }}
variant="outlined"
color="warning"
color={choice === LL.UPDATE_AVAILABLE() ? 'success' : 'warning'}
size="small"
onClick={() => showFirmwareDialog(showDev)}
onClick={() => showFirmwareDialog(showingDev)}
>
{upgradeAvailable || (!usingDevVersion && showDev)
? LL.UPGRADE()
: !showDev && usingDevVersion
? LL.STABLE()
: LL.REINSTALL()}
&hellip;
{choice}
</Button>
);
};
@@ -419,24 +450,6 @@ const Version = () => {
</Typography>
</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">

View File

@@ -332,8 +332,8 @@ const cz: Translation = {
SPECIAL_FUNCTIONS: 'Speciální funkce',
WAIT_FIRMWARE: 'Firmware se nahrává a instaluje',
INSTALL_VERSION: 'Tímto se instalovat verze {0}. Jste si jistí?',
UPGRADE_AVAILABLE: 'Je k dispozici aktualizace firmwaru!',
LATEST_VERSION: 'Používáte nejnovější verzi firmwaru',
UPDATE_AVAILABLE: 'update available', // TODO translate
LATEST_VERSION: 'Používáte nejnovější verzi {0}firmwaru',
PLEASE_WAIT: 'Prosím čekejte',
RESTARTING_PRE: 'Inicializace',
RESTARTING_POST: 'Příprava',
@@ -343,7 +343,6 @@ const cz: Translation = {
BYTES: 'Bytes', // TODO translate
BITMASK: 'Bit Mask',// TODO translate
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.',
NO_DATA_1: 'Nebyly nalezeny žádné oblíbené entity. Použijte',
NO_DATA_2: 'modul sloužící k jejich výběru.',
@@ -351,8 +350,8 @@ const cz: Translation = {
THIS_VERSION: 'Tato verze',
PLATFORM: 'Platforma',
RELEASE_TYPE: 'Typ sestavení',
REINSTALL: 'Přeinstalovat',
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;

View File

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

View File

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

View File

@@ -66,7 +66,7 @@ const fr: Translation = {
TEMP_SENSOR: 'Capteur de température',
TEMP_SENSORS: 'Capteurs de température',
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...',
CONNECTED: 'Connecté',
TX_ISSUES: 'Problèmes de transmission (Tx) - Essayez un autre mode Tx',
@@ -332,8 +332,8 @@ const fr: Translation = {
SPECIAL_FUNCTIONS: 'Special Functions',
WAIT_FIRMWARE: 'Firmware is uploading and installing', // TODO translate
INSTALL_VERSION: 'This will install version {0}. Are you sure?', // TODO translate
UPGRADE_AVAILABLE: 'There is a firmware upgrade available!', // TODO translate
LATEST_VERSION: 'You are using the latest firmware version', // TODO translate
UPDATE_AVAILABLE: 'update available', // TODO translate
LATEST_VERSION: 'You are using the latest {0} firmware version', // TODO translate
PLEASE_WAIT: 'Please wait', // TODO translate
RESTARTING_PRE: 'Initializing', // TODO translate
RESTARTING_POST: 'Preparing', // TODO translate
@@ -343,7 +343,6 @@ const fr: Translation = {
BYTES: 'Bytes', // TODO translate
BITMASK: 'Bit Mask',// 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
NO_DATA_1: 'No favorite EMS entities found yet. Use the', // TODO translate
NO_DATA_2: 'module to mark them.', // TODO translate
@@ -351,8 +350,8 @@ const fr: Translation = {
THIS_VERSION: 'This Version', // TODO translate
PLATFORM: 'Platform', // 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',
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 fr;

View File

@@ -332,8 +332,8 @@ const it: Translation = {
SPECIAL_FUNCTIONS: 'Special Functions', // TODO translate
WAIT_FIRMWARE: 'Firmware is uploading and installing', // TODO translate
INSTALL_VERSION: 'This will install version {0}. Are you sure?', // TODO translate
UPGRADE_AVAILABLE: 'There is a firmware upgrade available!', // TODO translate
LATEST_VERSION: 'You are using the latest firmware version', // TODO translate
UPDATE_AVAILABLE: 'update available', // TODO translate
LATEST_VERSION: 'You are using the latest {0}firmware version', // TODO translate
PLEASE_WAIT: 'Please wait', // TODO translate
RESTARTING_PRE: 'Initializing', // TODO translate
RESTARTING_POST: 'Preparing', // TODO translate
@@ -343,7 +343,6 @@ const it: Translation = {
BYTES: 'Bytes', // TODO translate
BITMASK: 'Bit Mask',// 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
NO_DATA_1: 'No favorite EMS entities found yet. Use the', // TODO translate
NO_DATA_2: 'module to mark them.', // TODO translate
@@ -351,8 +350,8 @@ const it: Translation = {
THIS_VERSION: 'This Version', // TODO translate
PLATFORM: 'Platform', // 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',
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 it;

View File

@@ -273,7 +273,7 @@ const nl: Translation = {
NETWORK_SUBNET: 'Subnetmasker',
NETWORK_DNS: 'DNS Servers',
ADDRESS_OF: '{0} Address',
ADMINISTRATOR: 'Administrator',
ADMINISTRATOR: 'Administrator',
GUEST: 'Gast',
NEW: 'Nieuwe',
NEW_NAME_OF: 'Hernoem {0}',
@@ -320,7 +320,7 @@ const nl: Translation = {
DOWNLOAD_UPLOAD_1: 'Download en upload instellingen en firmware',
MODULES: 'Module',
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_NONE: 'Geen externe modules gedetecteerd',
RENAME: 'Hernoemen',
@@ -332,18 +332,17 @@ const nl: Translation = {
SPECIAL_FUNCTIONS: 'Speciale functies',
WAIT_FIRMWARE: 'Firmware wordt geüpload en geïnstalleerd',
INSTALL_VERSION: 'Hiermee wordt versie {0} geïnstalleerd. Weet je het zeker?',
UPGRADE_AVAILABLE: 'Er is een firmware-upgrade beschikbaar!',
LATEST_VERSION: 'U gebruikt de nieuwste firmwareversie',
UPDATE_AVAILABLE: 'update beschikbaar',
LATEST_VERSION: 'U gebruikt de nieuwste {0} firmwareversie',
PLEASE_WAIT: 'Een ogenblik geduld',
RESTARTING_PRE: 'Initialiseren',
RESTARTING_POST: 'Voorbereiding',
AUTO_SCROLL: 'Automatisch Scrollen',
DASHBOARD: 'Dashboard',
DEVELOPER_MODE: 'Ontwikkelaarsmodus',
BYTES: 'Bytes', // TODO translate
BITMASK: 'Bit Mask',// TODO translate
BYTES: 'Bytes',
BITMASK: 'Bit Mask',
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.',
NO_DATA_1: 'Er zijn nog geen favoriete EMS-entiteiten gevonden. Gebruik de',
NO_DATA_2: 'module om ze te markeren.',
@@ -351,8 +350,8 @@ const nl: Translation = {
THIS_VERSION: 'Deze Versie',
PLATFORM: 'Platform',
RELEASE_TYPE: 'Release Typ',
REINSTALL: 'Opnieuw Installeren',
INTERNET_CONNECTION_REQUIRED: 'Internetverbinding vereist voor automatische versiecontrole en -upgrade',
SWITCH_RELEASE_TYPE: 'Switch naar {0} release'
};
export default nl;

View File

@@ -332,8 +332,8 @@ const no: Translation = {
SPECIAL_FUNCTIONS: 'Special Functions', // TODO translate
WAIT_FIRMWARE: 'Firmware is uploading and installing', // TODO translate
INSTALL_VERSION: 'This will install version {0}. Are you sure?', // TODO translate
UPGRADE_AVAILABLE: 'There is a firmware upgrade available!', // TODO translate
LATEST_VERSION: 'You are using the latest firmware version', // TODO translate
UPDATE_AVAILABLE: 'update available', // TODO translate
LATEST_VERSION: 'You are using the latest {0}firmware version', // TODO translate
PLEASE_WAIT: 'Please wait', // TODO translate
RESTARTING_PRE: 'Initializing', // TODO translate
RESTARTING_POST: 'Preparing', // TODO translate
@@ -343,7 +343,6 @@ const no: Translation = {
BYTES: 'Bytes', // TODO translate
BITMASK: 'Bit Mask',// 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
NO_DATA_1: 'No favorite EMS entities found yet. Use the', // TODO translate
NO_DATA_2: 'module to mark them.', // TODO translate
@@ -351,8 +350,8 @@ const no: Translation = {
THIS_VERSION: 'This Version', // TODO translate
PLATFORM: 'Platform', // 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',
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 no;

View File

@@ -332,8 +332,8 @@ const pl: BaseTranslation = {
SPECIAL_FUNCTIONS: 'Special Functions', // TODO translate
WAIT_FIRMWARE: 'Firmware is uploading and installing', // TODO translate
INSTALL_VERSION: 'This will install version {0}. Are you sure?', // TODO translate
UPGRADE_AVAILABLE: 'There is a firmware upgrade available!', // TODO translate
LATEST_VERSION: 'You are using the latest firmware version', // TODO translate
UPDATE_AVAILABLE: 'update available', // TODO translate
LATEST_VERSION: 'You are using the latest {0} firmware version', // TODO translate
PLEASE_WAIT: 'Please wait', // TODO translate
RESTARTING_PRE: 'Initializing', // TODO translate
RESTARTING_POST: 'Preparing', // TODO translate
@@ -343,7 +343,6 @@ const pl: BaseTranslation = {
BYTES: 'Bytes', // TODO translate
BITMASK: 'Bit Mask',// 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
NO_DATA_1: 'No favorite EMS entities found yet. Use the', // TODO translate
NO_DATA_2: 'module to mark them.', // TODO translate
@@ -351,8 +350,8 @@ const pl: BaseTranslation = {
THIS_VERSION: 'This Version', // TODO translate
PLATFORM: 'Platform', // 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
SWITCH_RELEASE_TYPE: 'Switch to {0} release' // TODO translate
};
export default pl;

View File

@@ -155,7 +155,7 @@ const sk: Translation = {
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?',
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_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',
@@ -323,7 +323,7 @@ const sk: Translation = {
MODULES_UPDATED: 'Aktualizované moduly',
MODULES_DESCRIPTION: 'Kliknutím na modul aktivujete alebo deaktivujete moduly knižnice EMS-ESP',
MODULES_NONE: 'Neboli zistené žiadne externé moduly',
RENAME: 'Premenovať',
RENAME: 'Premenovať',
ENABLE_MODBUS: 'Povoliť Modbus',
VIEW_LOG: 'Zobrazte log na diagnostiku problémov',
UPLOAD_DRAG: 'presuňte sem súbor alebo ho kliknutím vyberte',
@@ -332,8 +332,8 @@ const sk: Translation = {
SPECIAL_FUNCTIONS: 'Špeciálne funkcie',
WAIT_FIRMWARE: 'Firmvér sa nahráva a inštaluje',
INSTALL_VERSION: 'Týmto sa inštalovať verzia {0}. Si si istý?',
UPGRADE_AVAILABLE: 'K dispozícii je aktualizácia firmvéru!',
LATEST_VERSION: 'Používate poslednú verziu firmvéru',
UPDATE_AVAILABLE: 'update available', // TODO translate
LATEST_VERSION: 'Používate poslednú {0} verziu firmvéru',
PLEASE_WAIT: 'Čakajte prosím',
RESTARTING_PRE: 'Prebieha inicializácia',
RESTARTING_POST: 'Príprava',
@@ -343,7 +343,6 @@ const sk: Translation = {
BYTES: 'Bytov',
BITMASK: 'Bitová maska',
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.',
NO_DATA_1: 'Nenašli sa žiadne obľúbené entity EMS. Použite',
NO_DATA_2: 'modul na ich označenie.',
@@ -351,8 +350,8 @@ const sk: Translation = {
THIS_VERSION: 'Táto verzia',
PLATFORM: 'Platforma',
RELEASE_TYPE: 'Typ vydania',
REINSTALL: 'Preinštalovať',
INTERNET_CONNECTION_REQUIRED: 'Internetové pripojenie je potrebné pre automatickú kontrolu a aktualizáciu',
SWITCH_RELEASE_TYPE: 'Prepnúť na {0} verziu'
};
export default sk;

View File

@@ -332,8 +332,8 @@ const sv: Translation = {
SPECIAL_FUNCTIONS: 'Specialfunktioner',
WAIT_FIRMWARE: 'Firmware laddas upp och installeras',
INSTALL_VERSION: 'Det här kommer installera version {0}. Är du säker?',
UPGRADE_AVAILABLE: 'Det finns en tillgänglig firmwareupgradering!',
LATEST_VERSION: 'Du använder den senaste firmwareversionen.',
UPDATE_AVAILABLE: 'update available', // TODO translate
LATEST_VERSION: 'Du använder den senaste {0} firmwareversionen.',
PLEASE_WAIT: 'Var god vänta',
RESTARTING_PRE: 'Initialiserar',
RESTARTING_POST: 'Förbereder',
@@ -343,7 +343,6 @@ const sv: Translation = {
BYTES: 'Bytes', // TODO translate
BITMASK: 'Bit Mask',// TODO translate
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
NO_DATA_1: 'No favorite EMS entities found yet. Use the', // TODO translate
NO_DATA_2: 'module to mark them.', // TODO translate
@@ -351,8 +350,8 @@ const sv: Translation = {
THIS_VERSION: 'This Version', // TODO translate
PLATFORM: 'Platform', // 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',
SWITCH_RELEASE_TYPE: 'Byt till {0} version'
};
export default sv;

View File

@@ -332,8 +332,8 @@ const tr: Translation = {
SPECIAL_FUNCTIONS: 'Special Functions', // TODO translate
WAIT_FIRMWARE: 'Firmware is uploading and installing', // TODO translate
INSTALL_VERSION: 'This will install version {0}. Are you sure?', // TODO translate
UPGRADE_AVAILABLE: 'There is a firmware upgrade available!', // TODO translate
LATEST_VERSION: 'You are using the latest firmware version.', // TODO translate
UPDATE_AVAILABLE: 'update available!', // TODO translate
LATEST_VERSION: 'You are using the latest {0}firmware version.', // TODO translate
PLEASE_WAIT: 'Please wait', // TODO translate
RESTARTING_PRE: 'Initializing', // TODO translate
RESTARTING_POST: 'Preparing', // TODO translate
@@ -343,7 +343,6 @@ const tr: Translation = {
BYTES: 'Bytes', // TODO translate
BITMASK: 'Bit Mask',// 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
NO_DATA_1: 'No favorite EMS entities found yet. Use the', // TODO translate
NO_DATA_2: 'module to mark them.', // TODO translate
@@ -351,8 +350,8 @@ const tr: Translation = {
THIS_VERSION: 'This Version', // TODO translate
PLATFORM: 'Platform', // 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
SWITCH_RELEASE_TYPE: 'Switch to {0} release' // TODO translate
};
export default tr;

View File

@@ -790,38 +790,38 @@ __metadata:
languageName: node
linkType: hard
"@mui/core-downloads-tracker@npm:^7.0.0":
version: 7.0.0
resolution: "@mui/core-downloads-tracker@npm:7.0.0"
checksum: 10c0/3028987b44763774f7adf16326687a2045d4802ad3957862e262912cca63ac07f918239b2944dd0e9892df44f9c4c588cebeeb5df06e2d577b809bc432369832
"@mui/core-downloads-tracker@npm:^7.0.1":
version: 7.0.1
resolution: "@mui/core-downloads-tracker@npm:7.0.1"
checksum: 10c0/8291211a5aefd9348c9fddd4b12340087f2d661bfbdcf6797b09b2e58ae9a4a37ae80de7124613b870ea3a8ea5661b6a35849214eeb2d5f238cdba10d381d056
languageName: node
linkType: hard
"@mui/icons-material@npm:^7.0.0":
version: 7.0.0
resolution: "@mui/icons-material@npm:7.0.0"
"@mui/icons-material@npm:^7.0.1":
version: 7.0.1
resolution: "@mui/icons-material@npm:7.0.1"
dependencies:
"@babel/runtime": "npm:^7.26.10"
peerDependencies:
"@mui/material": ^7.0.0
"@mui/material": ^7.0.1
"@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0
react: ^17.0.0 || ^18.0.0 || ^19.0.0
peerDependenciesMeta:
"@types/react":
optional: true
checksum: 10c0/3915dc9bc873beba3d1846b5e4dab5ee8fa77292be68c5bc58951aaf18fb015e149fbb2a7d17a344c3ac109c238d4b6630dc4379bb5b253f6126f82069ae8a01
checksum: 10c0/375ba909363cc248154937bcc8522ba98566311bf20d4c0c3114ed4bd31430354b0d5779523b3f7cf78bb15ba7544d137a7ccbde63cf75ec957ae30e73083693
languageName: node
linkType: hard
"@mui/material@npm:^7.0.0":
version: 7.0.0
resolution: "@mui/material@npm:7.0.0"
"@mui/material@npm:^7.0.1":
version: 7.0.1
resolution: "@mui/material@npm:7.0.1"
dependencies:
"@babel/runtime": "npm:^7.26.10"
"@mui/core-downloads-tracker": "npm:^7.0.0"
"@mui/system": "npm:^7.0.0"
"@mui/core-downloads-tracker": "npm:^7.0.1"
"@mui/system": "npm:^7.0.1"
"@mui/types": "npm:^7.4.0"
"@mui/utils": "npm:^7.0.0"
"@mui/utils": "npm:^7.0.1"
"@popperjs/core": "npm:^2.11.8"
"@types/react-transition-group": "npm:^4.4.12"
clsx: "npm:^2.1.1"
@@ -832,7 +832,7 @@ __metadata:
peerDependencies:
"@emotion/react": ^11.5.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
react: ^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
"@types/react":
optional: true
checksum: 10c0/165a646d238b9e9b8c66efb55a46612aced2466c9e7cbf3808d0ad4c0200f757c26a5c227cf02aaa1978e6f27f76f8c17ad2c4cf29e010de83b7e15caae278d6
checksum: 10c0/95203b299dc5481f8fe903f7604dea641067db431c0606bffa5fafa8a4e9e0a0203a8d5ef9af3e314186c779c08654d6e0c1b85c70d8320397f2ce7a05ee633d
languageName: node
linkType: hard
"@mui/private-theming@npm:^7.0.0":
version: 7.0.0
resolution: "@mui/private-theming@npm:7.0.0"
"@mui/private-theming@npm:^7.0.1":
version: 7.0.1
resolution: "@mui/private-theming@npm:7.0.1"
dependencies:
"@babel/runtime": "npm:^7.26.10"
"@mui/utils": "npm:^7.0.0"
"@mui/utils": "npm:^7.0.1"
prop-types: "npm:^15.8.1"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0
@@ -862,13 +862,13 @@ __metadata:
peerDependenciesMeta:
"@types/react":
optional: true
checksum: 10c0/c901aeee59add7b36382282a0338ec4bbfd1e22d8759c127c497fd6f6ddb464eba04dc611e86aaaa6ae44dd11037950d7bfa33189314b5e8993ceceff072863f
checksum: 10c0/15f0037925d9dd59b0bdc4bf6031407e31ef008ebe0e437f424eeed3f433bafd585676b995739f0362c9d403c0cbe2f99478d5eeadd60bfa8b1d968a6be7185d
languageName: node
linkType: hard
"@mui/styled-engine@npm:^7.0.0":
version: 7.0.0
resolution: "@mui/styled-engine@npm:7.0.0"
"@mui/styled-engine@npm:^7.0.1":
version: 7.0.1
resolution: "@mui/styled-engine@npm:7.0.1"
dependencies:
"@babel/runtime": "npm:^7.26.10"
"@emotion/cache": "npm:^11.13.5"
@@ -885,19 +885,19 @@ __metadata:
optional: true
"@emotion/styled":
optional: true
checksum: 10c0/9ed5ee9b16ced11ecc411ad1c98613e17a634d17868bdbb668cf57ccd9d4fe248a22607def8327e0ddc289444a4b40e3d629e6220b78d60634c4d7c80810533f
checksum: 10c0/cdef1c15ea645198440cd87a53c1a0155f444688387ed816b98890e42bd22a9204242cae8fb1b56124fe05c163d9e38fa482901804dee0bef6f88da1cddd8579
languageName: node
linkType: hard
"@mui/system@npm:^7.0.0":
version: 7.0.0
resolution: "@mui/system@npm:7.0.0"
"@mui/system@npm:^7.0.1":
version: 7.0.1
resolution: "@mui/system@npm:7.0.1"
dependencies:
"@babel/runtime": "npm:^7.26.10"
"@mui/private-theming": "npm:^7.0.0"
"@mui/styled-engine": "npm:^7.0.0"
"@mui/private-theming": "npm:^7.0.1"
"@mui/styled-engine": "npm:^7.0.1"
"@mui/types": "npm:^7.4.0"
"@mui/utils": "npm:^7.0.0"
"@mui/utils": "npm:^7.0.1"
clsx: "npm:^2.1.1"
csstype: "npm:^3.1.3"
prop-types: "npm:^15.8.1"
@@ -913,7 +913,7 @@ __metadata:
optional: true
"@types/react":
optional: true
checksum: 10c0/4fb99d0594be2783d78cf820389aeb9a8c7ace69eea1edde3fae84e598223e8e35605074d8bc7fdaf25b4f414d82963d4f0bf421a6a50ab547e3fa2b10869cff
checksum: 10c0/58de50dceef8a85aa24cda596836c034068b6f3e960c47520b9401a3f6f5bdf013e6ad7adb1a31cc57707ae304d524813ed53d4d12c1193ec8ca6b31d90f8dcf
languageName: node
linkType: hard
@@ -931,9 +931,9 @@ __metadata:
languageName: node
linkType: hard
"@mui/utils@npm:^7.0.0":
version: 7.0.0
resolution: "@mui/utils@npm:7.0.0"
"@mui/utils@npm:^7.0.1":
version: 7.0.1
resolution: "@mui/utils@npm:7.0.1"
dependencies:
"@babel/runtime": "npm:^7.26.10"
"@mui/types": "npm:^7.4.0"
@@ -947,7 +947,7 @@ __metadata:
peerDependenciesMeta:
"@types/react":
optional: true
checksum: 10c0/89c6df710ddbd506a77428a1c0bd600c8902ccad42ff9e0d49df2435d236aa9a2d5bf600f473a742bb2934632165206caacfac2315cf2a03644f1aa6aeb4cbc1
checksum: 10c0/bf5d721c9e09f2eba359db227dfafca51152a47753c6f32d020f8a9af572f8f14515e03592b2a95b5bea8207efe775d7d1ae4a0e42f0638f03a15fd1d303ffce
languageName: node
linkType: hard
@@ -1091,142 +1091,142 @@ __metadata:
languageName: node
linkType: hard
"@rollup/rollup-android-arm-eabi@npm:4.37.0":
version: 4.37.0
resolution: "@rollup/rollup-android-arm-eabi@npm:4.37.0"
"@rollup/rollup-android-arm-eabi@npm:4.38.0":
version: 4.38.0
resolution: "@rollup/rollup-android-arm-eabi@npm:4.38.0"
conditions: os=android & cpu=arm
languageName: node
linkType: hard
"@rollup/rollup-android-arm64@npm:4.37.0":
version: 4.37.0
resolution: "@rollup/rollup-android-arm64@npm:4.37.0"
"@rollup/rollup-android-arm64@npm:4.38.0":
version: 4.38.0
resolution: "@rollup/rollup-android-arm64@npm:4.38.0"
conditions: os=android & cpu=arm64
languageName: node
linkType: hard
"@rollup/rollup-darwin-arm64@npm:4.37.0":
version: 4.37.0
resolution: "@rollup/rollup-darwin-arm64@npm:4.37.0"
"@rollup/rollup-darwin-arm64@npm:4.38.0":
version: 4.38.0
resolution: "@rollup/rollup-darwin-arm64@npm:4.38.0"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
"@rollup/rollup-darwin-x64@npm:4.37.0":
version: 4.37.0
resolution: "@rollup/rollup-darwin-x64@npm:4.37.0"
"@rollup/rollup-darwin-x64@npm:4.38.0":
version: 4.38.0
resolution: "@rollup/rollup-darwin-x64@npm:4.38.0"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
"@rollup/rollup-freebsd-arm64@npm:4.37.0":
version: 4.37.0
resolution: "@rollup/rollup-freebsd-arm64@npm:4.37.0"
"@rollup/rollup-freebsd-arm64@npm:4.38.0":
version: 4.38.0
resolution: "@rollup/rollup-freebsd-arm64@npm:4.38.0"
conditions: os=freebsd & cpu=arm64
languageName: node
linkType: hard
"@rollup/rollup-freebsd-x64@npm:4.37.0":
version: 4.37.0
resolution: "@rollup/rollup-freebsd-x64@npm:4.37.0"
"@rollup/rollup-freebsd-x64@npm:4.38.0":
version: 4.38.0
resolution: "@rollup/rollup-freebsd-x64@npm:4.38.0"
conditions: os=freebsd & cpu=x64
languageName: node
linkType: hard
"@rollup/rollup-linux-arm-gnueabihf@npm:4.37.0":
version: 4.37.0
resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.37.0"
"@rollup/rollup-linux-arm-gnueabihf@npm:4.38.0":
version: 4.38.0
resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.38.0"
conditions: os=linux & cpu=arm & libc=glibc
languageName: node
linkType: hard
"@rollup/rollup-linux-arm-musleabihf@npm:4.37.0":
version: 4.37.0
resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.37.0"
"@rollup/rollup-linux-arm-musleabihf@npm:4.38.0":
version: 4.38.0
resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.38.0"
conditions: os=linux & cpu=arm & libc=musl
languageName: node
linkType: hard
"@rollup/rollup-linux-arm64-gnu@npm:4.37.0":
version: 4.37.0
resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.37.0"
"@rollup/rollup-linux-arm64-gnu@npm:4.38.0":
version: 4.38.0
resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.38.0"
conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node
linkType: hard
"@rollup/rollup-linux-arm64-musl@npm:4.37.0":
version: 4.37.0
resolution: "@rollup/rollup-linux-arm64-musl@npm:4.37.0"
"@rollup/rollup-linux-arm64-musl@npm:4.38.0":
version: 4.38.0
resolution: "@rollup/rollup-linux-arm64-musl@npm:4.38.0"
conditions: os=linux & cpu=arm64 & libc=musl
languageName: node
linkType: hard
"@rollup/rollup-linux-loongarch64-gnu@npm:4.37.0":
version: 4.37.0
resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.37.0"
"@rollup/rollup-linux-loongarch64-gnu@npm:4.38.0":
version: 4.38.0
resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.38.0"
conditions: os=linux & cpu=loong64 & libc=glibc
languageName: node
linkType: hard
"@rollup/rollup-linux-powerpc64le-gnu@npm:4.37.0":
version: 4.37.0
resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.37.0"
"@rollup/rollup-linux-powerpc64le-gnu@npm:4.38.0":
version: 4.38.0
resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.38.0"
conditions: os=linux & cpu=ppc64 & libc=glibc
languageName: node
linkType: hard
"@rollup/rollup-linux-riscv64-gnu@npm:4.37.0":
version: 4.37.0
resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.37.0"
"@rollup/rollup-linux-riscv64-gnu@npm:4.38.0":
version: 4.38.0
resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.38.0"
conditions: os=linux & cpu=riscv64 & libc=glibc
languageName: node
linkType: hard
"@rollup/rollup-linux-riscv64-musl@npm:4.37.0":
version: 4.37.0
resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.37.0"
"@rollup/rollup-linux-riscv64-musl@npm:4.38.0":
version: 4.38.0
resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.38.0"
conditions: os=linux & cpu=riscv64 & libc=musl
languageName: node
linkType: hard
"@rollup/rollup-linux-s390x-gnu@npm:4.37.0":
version: 4.37.0
resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.37.0"
"@rollup/rollup-linux-s390x-gnu@npm:4.38.0":
version: 4.38.0
resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.38.0"
conditions: os=linux & cpu=s390x & libc=glibc
languageName: node
linkType: hard
"@rollup/rollup-linux-x64-gnu@npm:4.37.0":
version: 4.37.0
resolution: "@rollup/rollup-linux-x64-gnu@npm:4.37.0"
"@rollup/rollup-linux-x64-gnu@npm:4.38.0":
version: 4.38.0
resolution: "@rollup/rollup-linux-x64-gnu@npm:4.38.0"
conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
"@rollup/rollup-linux-x64-musl@npm:4.37.0":
version: 4.37.0
resolution: "@rollup/rollup-linux-x64-musl@npm:4.37.0"
"@rollup/rollup-linux-x64-musl@npm:4.38.0":
version: 4.38.0
resolution: "@rollup/rollup-linux-x64-musl@npm:4.38.0"
conditions: os=linux & cpu=x64 & libc=musl
languageName: node
linkType: hard
"@rollup/rollup-win32-arm64-msvc@npm:4.37.0":
version: 4.37.0
resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.37.0"
"@rollup/rollup-win32-arm64-msvc@npm:4.38.0":
version: 4.38.0
resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.38.0"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
"@rollup/rollup-win32-ia32-msvc@npm:4.37.0":
version: 4.37.0
resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.37.0"
"@rollup/rollup-win32-ia32-msvc@npm:4.38.0":
version: 4.38.0
resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.38.0"
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
"@rollup/rollup-win32-x64-msvc@npm:4.37.0":
version: 4.37.0
resolution: "@rollup/rollup-win32-x64-msvc@npm:4.37.0"
"@rollup/rollup-win32-x64-msvc@npm:4.38.0":
version: 4.38.0
resolution: "@rollup/rollup-win32-x64-msvc@npm:4.38.0"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
@@ -1293,14 +1293,7 @@ __metadata:
languageName: node
linkType: hard
"@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":
"@types/estree@npm:1.0.7, @types/estree@npm:^1.0.6":
version: 1.0.7
resolution: "@types/estree@npm:1.0.7"
checksum: 10c0/be815254316882f7c40847336cd484c3bc1c3e34f710d197160d455dc9d6d050ffbf4c3bc76585dba86f737f020ab20bdb137ebe0e9116b0c86c7c0342221b8c
@@ -1422,12 +1415,12 @@ __metadata:
languageName: node
linkType: hard
"@types/node@npm:*, @types/node@npm:^22.13.13":
version: 22.13.13
resolution: "@types/node@npm:22.13.13"
"@types/node@npm:*, @types/node@npm:^22.13.14":
version: 22.13.14
resolution: "@types/node@npm:22.13.14"
dependencies:
undici-types: "npm:~6.20.0"
checksum: 10c0/daf792ba5dcff1316abf4b33680f94b792f8d54d6ae495efc8929531e0ba1284a248d29aab117d2259f9280284d986ad5799b193b0516e2b926d713aab835f7d
checksum: 10c0/fa2ab5b8277bfbcc86c42e46a3ea9871b0d559894cc9d955685d17178c9499f0b1bf03d1d1ea8d92ef2dda818988f4035acb8abf9dc15423a998fa56173ab804
languageName: node
linkType: hard
@@ -1611,14 +1604,14 @@ __metadata:
"@emotion/react": "npm:^11.14.0"
"@emotion/styled": "npm:^11.14.0"
"@eslint/js": "npm:^9.23.0"
"@mui/icons-material": "npm:^7.0.0"
"@mui/material": "npm:^7.0.0"
"@mui/icons-material": "npm:^7.0.1"
"@mui/material": "npm:^7.0.1"
"@preact/compat": "npm:^18.3.1"
"@preact/preset-vite": "npm:^2.10.1"
"@table-library/react-table-library": "npm:4.1.12"
"@trivago/prettier-plugin-sort-imports": "npm:^5.2.2"
"@types/formidable": "npm:^3"
"@types/node": "npm:^22.13.13"
"@types/node": "npm:^22.13.14"
"@types/react": "npm:^19.0.12"
"@types/react-dom": "npm:^19.0.4"
alova: "npm:3.2.10"
@@ -1628,13 +1621,13 @@ __metadata:
eslint-config-prettier: "npm:^10.1.1"
formidable: "npm:^3.5.2"
jwt-decode: "npm:^4.0.0"
mime-types: "npm:^2.1.35"
mime-types: "npm:^3.0.1"
preact: "npm:^10.26.4"
prettier: "npm:^3.5.3"
react: "npm:^19.0.0"
react-dom: "npm:^19.0.0"
react: "npm:^19.1.0"
react-dom: "npm:^19.1.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"
rollup-plugin-visualizer: "npm:^5.14.0"
terser: "npm:^5.39.0"
@@ -2638,9 +2631,9 @@ __metadata:
linkType: hard
"electron-to-chromium@npm:^1.5.73":
version: 1.5.124
resolution: "electron-to-chromium@npm:1.5.124"
checksum: 10c0/f27de21f8763836daf5593bbedb8b78f41e88519aa27d3232e9f3e34b0a0fd5aee9cc37a31c3a36d2fa32291827738e996e866ad8ceb479e4c45bc0ee396ecba
version: 1.5.128
resolution: "electron-to-chromium@npm:1.5.128"
checksum: 10c0/3c64ec24a8aff8e9954e99366aebdf41c0a5d0e48a498435b68d4deddd938584af53c1b176edd166285cfb9dcd407d4897184208a0369d1bb97e21d8daee8bc2
languageName: node
linkType: hard
@@ -4763,26 +4756,19 @@ __metadata:
languageName: node
linkType: hard
"mime-db@npm:1.52.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":
"mime-db@npm:^1.28.0, mime-db@npm:^1.54.0":
version: 1.54.0
resolution: "mime-db@npm:1.54.0"
checksum: 10c0/8d907917bc2a90fa2df842cdf5dfeaf509adc15fe0531e07bb2f6ab15992416479015828d6a74200041c492e42cce3ebf78e5ce714388a0a538ea9c53eece284
languageName: node
linkType: hard
"mime-types@npm:^2.1.35":
version: 2.1.35
resolution: "mime-types@npm:2.1.35"
"mime-types@npm:^3.0.1":
version: 3.0.1
resolution: "mime-types@npm:3.0.1"
dependencies:
mime-db: "npm:1.52.0"
checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2
mime-db: "npm:^1.54.0"
checksum: 10c0/bd8c20d3694548089cf229016124f8f40e6a60bbb600161ae13e45f793a2d5bb40f96bbc61f275836696179c77c1d6bf4967b2a75e0a8ad40fe31f4ed5be4da5
languageName: node
linkType: hard
@@ -5593,14 +5579,14 @@ __metadata:
languageName: node
linkType: hard
"react-dom@npm:^19.0.0":
version: 19.0.0
resolution: "react-dom@npm:19.0.0"
"react-dom@npm:^19.1.0":
version: 19.1.0
resolution: "react-dom@npm:19.1.0"
dependencies:
scheduler: "npm:^0.25.0"
scheduler: "npm:^0.26.0"
peerDependencies:
react: ^19.0.0
checksum: 10c0/a36ce7ab507b237ae2759c984cdaad4af4096d8199fb65b3815c16825e5cfeb7293da790a3fc2184b52bfba7ba3ff31c058c01947aff6fd1a3701632aabaa6a9
react: ^19.1.0
checksum: 10c0/3e26e89bb6c67c9a6aa86cb888c7a7f8258f2e347a6d2a15299c17eb16e04c19194e3452bc3255bd34000a61e45e2cb51e46292392340432f133e5a5d2dfb5fc
languageName: node
linkType: hard
@@ -5621,15 +5607,15 @@ __metadata:
linkType: hard
"react-is@npm:^19.0.0":
version: 19.0.0
resolution: "react-is@npm:19.0.0"
checksum: 10c0/d1be8e8500cf04f76df71942a21ef3a71266397a383d7ec8885f35190df818d35c65efd35aed7be47a89ad99aaff2c52e0c4e39e8930844a6b997622e50625a8
version: 19.1.0
resolution: "react-is@npm:19.1.0"
checksum: 10c0/b6c6cadd172d5d39f66d493700d137a5545c294a62ce0f8ec793d59794c97d2bed6bad227626f16bd0e90004ed7fdc8ed662a004e6edcf5d2b7ecb6e3040ea6b
languageName: node
linkType: hard
"react-router@npm:^7.4.0":
version: 7.4.0
resolution: "react-router@npm:7.4.0"
"react-router@npm:^7.4.1":
version: 7.4.1
resolution: "react-router@npm:7.4.1"
dependencies:
"@types/cookie": "npm:^0.6.0"
cookie: "npm:^1.0.1"
@@ -5641,7 +5627,7 @@ __metadata:
peerDependenciesMeta:
react-dom:
optional: true
checksum: 10c0/9cf943d7854e1e4d068162efa9a61e2d06a5c679cf3272a867046cc97a6cc65c9744490f54e8fd77bbe2d114610a5cb285ceb3d3941b9b19ac6f63385ac0a89d
checksum: 10c0/c501e46bf4e672f977250acb431ecfad120d7a0383bbb17e5c3276a1390c01d36bd36bd995c9dddca39ba3a8521be11295292595523d880ec11240fc5d74e637
languageName: node
linkType: hard
@@ -5695,10 +5681,10 @@ __metadata:
languageName: node
linkType: hard
"react@npm:^19.0.0":
version: 19.0.0
resolution: "react@npm:19.0.0"
checksum: 10c0/9cad8f103e8e3a16d15cb18a0d8115d8bd9f9e1ce3420310aea381eb42aa0a4f812cf047bb5441349257a05fba8a291515691e3cb51267279b2d2c3253f38471
"react@npm:^19.1.0":
version: 19.1.0
resolution: "react@npm:19.1.0"
checksum: 10c0/530fb9a62237d54137a13d2cfb67a7db6a2156faed43eecc423f4713d9b20c6f2728b026b45e28fcd72e8eadb9e9ed4b089e99f5e295d2f0ad3134251bdd3698
languageName: node
linkType: hard
@@ -5879,30 +5865,30 @@ __metadata:
linkType: hard
"rollup@npm:^4.30.1":
version: 4.37.0
resolution: "rollup@npm:4.37.0"
version: 4.38.0
resolution: "rollup@npm:4.38.0"
dependencies:
"@rollup/rollup-android-arm-eabi": "npm:4.37.0"
"@rollup/rollup-android-arm64": "npm:4.37.0"
"@rollup/rollup-darwin-arm64": "npm:4.37.0"
"@rollup/rollup-darwin-x64": "npm:4.37.0"
"@rollup/rollup-freebsd-arm64": "npm:4.37.0"
"@rollup/rollup-freebsd-x64": "npm:4.37.0"
"@rollup/rollup-linux-arm-gnueabihf": "npm:4.37.0"
"@rollup/rollup-linux-arm-musleabihf": "npm:4.37.0"
"@rollup/rollup-linux-arm64-gnu": "npm:4.37.0"
"@rollup/rollup-linux-arm64-musl": "npm:4.37.0"
"@rollup/rollup-linux-loongarch64-gnu": "npm:4.37.0"
"@rollup/rollup-linux-powerpc64le-gnu": "npm:4.37.0"
"@rollup/rollup-linux-riscv64-gnu": "npm:4.37.0"
"@rollup/rollup-linux-riscv64-musl": "npm:4.37.0"
"@rollup/rollup-linux-s390x-gnu": "npm:4.37.0"
"@rollup/rollup-linux-x64-gnu": "npm:4.37.0"
"@rollup/rollup-linux-x64-musl": "npm:4.37.0"
"@rollup/rollup-win32-arm64-msvc": "npm:4.37.0"
"@rollup/rollup-win32-ia32-msvc": "npm:4.37.0"
"@rollup/rollup-win32-x64-msvc": "npm:4.37.0"
"@types/estree": "npm:1.0.6"
"@rollup/rollup-android-arm-eabi": "npm:4.38.0"
"@rollup/rollup-android-arm64": "npm:4.38.0"
"@rollup/rollup-darwin-arm64": "npm:4.38.0"
"@rollup/rollup-darwin-x64": "npm:4.38.0"
"@rollup/rollup-freebsd-arm64": "npm:4.38.0"
"@rollup/rollup-freebsd-x64": "npm:4.38.0"
"@rollup/rollup-linux-arm-gnueabihf": "npm:4.38.0"
"@rollup/rollup-linux-arm-musleabihf": "npm:4.38.0"
"@rollup/rollup-linux-arm64-gnu": "npm:4.38.0"
"@rollup/rollup-linux-arm64-musl": "npm:4.38.0"
"@rollup/rollup-linux-loongarch64-gnu": "npm:4.38.0"
"@rollup/rollup-linux-powerpc64le-gnu": "npm:4.38.0"
"@rollup/rollup-linux-riscv64-gnu": "npm:4.38.0"
"@rollup/rollup-linux-riscv64-musl": "npm:4.38.0"
"@rollup/rollup-linux-s390x-gnu": "npm:4.38.0"
"@rollup/rollup-linux-x64-gnu": "npm:4.38.0"
"@rollup/rollup-linux-x64-musl": "npm:4.38.0"
"@rollup/rollup-win32-arm64-msvc": "npm:4.38.0"
"@rollup/rollup-win32-ia32-msvc": "npm:4.38.0"
"@rollup/rollup-win32-x64-msvc": "npm:4.38.0"
"@types/estree": "npm:1.0.7"
fsevents: "npm:~2.3.2"
dependenciesMeta:
"@rollup/rollup-android-arm-eabi":
@@ -5949,7 +5935,7 @@ __metadata:
optional: true
bin:
rollup: dist/bin/rollup
checksum: 10c0/2e00382e08938636edfe0a7547ea2eaa027205dc0b6ff85d8b82be0fbe55a4ef88a1995fee2a5059e33dbccf12d1376c236825353afb89c96298cc95c5160a46
checksum: 10c0/931a6d3bf34fa13adec44a8660319bb7b2f61fbabbf2030f4d29df991fb37b6a685cd7dc203fde8d4ab8b4fe783f1fe8814e448a97f651dc4727511faf958cb4
languageName: node
linkType: hard
@@ -5992,10 +5978,10 @@ __metadata:
languageName: node
linkType: hard
"scheduler@npm:^0.25.0":
version: 0.25.0
resolution: "scheduler@npm:0.25.0"
checksum: 10c0/a4bb1da406b613ce72c1299db43759526058fdcc413999c3c3e0db8956df7633acf395cb20eb2303b6a65d658d66b6585d344460abaee8080b4aa931f10eaafe
"scheduler@npm:^0.26.0":
version: 0.26.0
resolution: "scheduler@npm:0.26.0"
checksum: 10c0/5b8d5bfddaae3513410eda54f2268e98a376a429931921a81b5c3a2873aab7ca4d775a8caac5498f8cbc7d0daeab947cf923dbd8e215d61671f9f4e392d34356
languageName: node
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 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 rgbLedWrite(uint8_t pin, uint8_t red_val, uint8_t green_val, uint8_t blue_val) {};
#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 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 rgbLedWrite(uint8_t pin, uint8_t red_val, uint8_t green_val, uint8_t blue_val);
#define PROGMEM
#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
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",
"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
};
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_DEV_VERSION = '3.7.3-dev.9';
let LATEST_DEV_VERSION = '3.7.3-dev.3';
// scenarios for testing versioning
let version_test = 0;
version_test = 0; // on latest stable, no upgrades, but can switch
// version_test = 1; // on latest dev, no update
// version_test = 2; // on stable, upgrade stable to latest stable
// version_test = 3; // on dev, upgrade dev to latest dev
version_test = 0; // on latest stable, can switch to dev only
// version_test = 1; // on latest dev, can switch back to stable only or reinstall
// version_test = 2; // upgrade an older stable to latest stable or switch to latest dev
// version_test = 3; // upgrade an older dev to latest dev, switch to stable available
switch (version_test as number) {
case 0:
default:
// use default - on latest stable, no upgrades, but can switch
VERSION_IS_UPGRADEABLE = false;
// on latest stable, can upgrade to dev only
THIS_VERSION = LATEST_STABLE_VERSION;
STABLE_VERSION_IS_UPGRADEABLE = false;
DEV_VERSION_IS_UPGRADEABLE = true;
break;
case 1:
// on latest dev, no update
THIS_VERSION = '3.7.2-dev.9';
LATEST_STABLE_VERSION = '3.7.2';
LATEST_DEV_VERSION = '3.7.3-dev.9';
VERSION_IS_UPGRADEABLE = false;
// on latest dev, no updates to either dev or stable
THIS_VERSION = LATEST_DEV_VERSION;
STABLE_VERSION_IS_UPGRADEABLE = false;
DEV_VERSION_IS_UPGRADEABLE = false;
break;
case 2:
// upgrade stable to latest stable
// upgrade an older stable to latest stable or the latest dev
THIS_VERSION = '3.6.5';
LATEST_STABLE_VERSION = '3.7.2';
LATEST_DEV_VERSION = '3.7.3-dev.12';
VERSION_IS_UPGRADEABLE = true;
STABLE_VERSION_IS_UPGRADEABLE = true;
DEV_VERSION_IS_UPGRADEABLE = true;
break;
case 3:
// upgrade dev to latest dev
THIS_VERSION = '3.7.2-dev-1';
LATEST_STABLE_VERSION = '3.7.2';
LATEST_DEV_VERSION = '3.7.3-dev.12';
VERSION_IS_UPGRADEABLE = true;
// upgrade an older dev to latest dev, no stable upgrades available
THIS_VERSION = '3.7.3-dev.2';
STABLE_VERSION_IS_UPGRADEABLE = false;
DEV_VERSION_IS_UPGRADEABLE = true;
break;
}
@@ -270,10 +269,10 @@ function updateMask(entity: any, de: any, dd: any) {
const old_custom_name = dd.nodes[dd_objIndex].cn;
console.log(
'comparing names, old (' +
old_custom_name +
') with new (' +
new_custom_name +
')'
old_custom_name +
') with new (' +
new_custom_name +
')'
);
if (old_custom_name !== new_custom_name) {
changed = true;
@@ -366,21 +365,23 @@ function check_upgrade(version: string) {
if (version) {
const dev_version = version.split(',')[0];
const stable_version = version.split(',')[1];
console.log(
'latest dev version: ' +
dev_version +
', latest stable version: ' +
stable_version
);
console.log(
'Version upgrade check from version ' +
THIS_VERSION +
', upgradable: ' +
VERSION_IS_UPGRADEABLE
'Version upgrade check. This version (' +
THIS_VERSION +
') to dev (' +
dev_version +
') is ' +
(DEV_VERSION_IS_UPGRADEABLE ? 'YES' : 'NO') +
' and to stable (' +
stable_version +
') is ' +
(STABLE_VERSION_IS_UPGRADEABLE ? 'YES' : 'NO')
);
data = {
emsesp_version: THIS_VERSION,
upgradeable: VERSION_IS_UPGRADEABLE
dev_upgradeable: DEV_VERSION_IS_UPGRADEABLE,
stable_upgradeable: STABLE_VERSION_IS_UPGRADEABLE
};
} else {
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_upload.flash_size = 16MB
board_build.app_partition_name = app0
platform = espressif32@6.10.0 ; Arduino Core 2.0.17 / IDF 4.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
platform = espressif32@6.10.0 ; Arduino Core v2.0.17 / IDF v4.4.7
; 32MB Flash variants
[espressif32_base_32M]

View File

@@ -9,10 +9,10 @@ OUTPUT_DIR = "build{}".format(os.path.sep)
def bin_copy(source, target, env):
# get the application version from version.h
# get the application version from emsesp_version.h
bag = {}
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 expr, var in exprs:
m = expr.match(l)

View File

@@ -11,7 +11,7 @@ def move_file(source, target, env):
# get the build info
bag = {}
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 expr, var in exprs:
m = expr.match(l)

View File

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

View File

@@ -53,7 +53,9 @@ class SecuritySettings {
// users
settings.users.clear();
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"]);
}
} else {

View File

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

View File

@@ -551,7 +551,11 @@ void System::led_init(bool refresh) {
if (refresh) {
// disabled old led port before setting new one
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);
#else
led_type_ ? rgbLedWrite(led_gpio_, 0, 0, 0) : digitalWrite(led_gpio_, !LED_ON);
#endif
pinMode(led_gpio_, INPUT);
}
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_type_) {
// rgb LED WS2812B, use Neopixel
#if ESP_ARDUINO_VERSION_MAJOR < 3
neopixelWrite(led_gpio_, 0, 0, 0);
#else
rgbLedWrite(led_gpio_, 0, 0, 0);
#endif
} else {
pinMode(led_gpio_, OUTPUT);
digitalWrite(led_gpio_, !LED_ON); // start with LED off
@@ -817,12 +825,20 @@ void System::system_check() {
if (healthcheck_ == 0) {
// everything is healthy, show LED permanently on or off depending on setting
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);
#else
led_type_ ? rgbLedWrite(led_gpio_, 0, hide_led_ ? 0 : 128, 0) : digitalWrite(led_gpio_, hide_led_ ? !LED_ON : LED_ON);
#endif
}
} else {
// turn off LED so we're ready to the flashes
if (led_gpio_) {
#if ESP_ARDUINO_VERSION_MAJOR < 3
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
led_long_timer_ = uuid::get_uptime();
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
#else
led_type_ ? rgbLedWrite(led_gpio_, 0, 0, 0) : digitalWrite(led_gpio_, !LED_ON); // LED off
#endif
} 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
// 1 flash is the EMS bus is not connected
@@ -892,17 +912,33 @@ void System::led_monitor() {
if (led_type_) {
if (led_flash_step_ == 3) {
if ((healthcheck_ & HEALTHCHECK_NO_NETWORK) == HEALTHCHECK_NO_NETWORK) {
#if ESP_ARDUINO_VERSION_MAJOR < 3
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) {
#if ESP_ARDUINO_VERSION_MAJOR < 3
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 ESP_ARDUINO_VERSION_MAJOR < 3
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)
&& ((healthcheck_ & HEALTHCHECK_NO_BUS) == HEALTHCHECK_NO_BUS)) {
#if ESP_ARDUINO_VERSION_MAJOR < 3
neopixelWrite(led_gpio_, 0, 0, 128); // blue
#else
rgbLedWrite(led_gpio_, 0, 0, 128); // blue
#endif
}
} else {
if ((led_flash_step_ == 3)
@@ -926,7 +962,11 @@ void System::led_monitor() {
} else {
// turn the led off after the flash, on even number count
if (led_on_) {
#if ESP_ARDUINO_VERSION_MAJOR < 3
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;
}
}

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>());
// test version checks
// test with "current_version_s = "3.7.1-dev.8" in WebStatusService::checkUpgrade()
// request.url("/rest/action");
// deserializeJson(doc, "{\"action\":\"checkUpgrade\", \"param\":\"3.7.1-dev.9,3.7.0\"}"); // is upgradable
// EMSESP::webStatusService.action(&request, doc.as<JsonVariant>());
// deserializeJson(doc, "{\"action\":\"checkUpgrade\", \"param\":\"3.7.1-dev.7,3.7.0\"}"); // is not upgradable
// EMSESP::webStatusService.action(&request, doc.as<JsonVariant>());
// use same data as in rest_server.ts
// log shows first if you can upgrade to dev, and then if you can upgrade to stable
request.url("/rest/action");
std::string LATEST_STABLE_VERSION = "3.7.2";
std::string LATEST_DEV_VERSION = "3.7.3-dev.3";
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()
// request.url("/rest/action");
// deserializeJson(doc, "{\"action\":\"checkUpgrade\", \"param\":\"3.7.1-dev.9,3.6.5\"}"); // is noy upgradable
// EMSESP::webStatusService.action(&request, doc.as<JsonVariant>());
// deserializeJson(doc, "{\"action\":\"checkUpgrade\", \"param\":\"3.7.1-dev.7,3.7.0\"}"); // is upgradable
// EMSESP::webStatusService.action(&request, doc.as<JsonVariant>());
// case 0: on latest stable, can upgrade to dev only. So true, false
EMSESP::webStatusService.set_current_version(LATEST_STABLE_VERSION);
EMSESP::webStatusService.action(&request, doc.as<JsonVariant>());
// case 1: on latest dev, no updates to either dev or stable. So false, false
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\"}";
// deserializeJson(doc, data6);

View File

@@ -41,7 +41,7 @@ namespace emsesp {
// #define EMSESP_DEBUG_DEFAULT "310"
// #define EMSESP_DEBUG_DEFAULT "render"
// #define EMSESP_DEBUG_DEFAULT "api"
// #define EMSESP_DEBUG_DEFAULT "api3"
#define EMSESP_DEBUG_DEFAULT "api3"
// #define EMSESP_DEBUG_DEFAULT "api4"
// #define EMSESP_DEBUG_DEFAULT "crash"
// #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) {
if (tx_mode_ == 0xFF) {
uart_config_t uart_config = {
.baud_rate = EMSUART_BAUD,
.data_bits = UART_DATA_8_BITS,
.parity = UART_PARITY_DISABLE,
.stop_bits = UART_STOP_BITS_1,
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
.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,
uart_config_t uart_config = {.baud_rate = EMSUART_BAUD,
.data_bits = UART_DATA_8_BITS,
.parity = UART_PARITY_DISABLE,
.stop_bits = UART_STOP_BITS_1,
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
.rx_flow_ctrl_thresh = 0,
.source_clk = UART_SCLK_APB
#if ESP_ARDUINO_VERSION_MAJOR >= 3
,
.flags = {0, 0}
#endif
};
#if defined(EMSUART_RX_INVERT)
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
// versions holds the latest development version and stable version in one string, comma separated
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()) {
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_version(using_dev_version ? versions.substr(0, versions.find(',')) : versions.substr(versions.find(',') + 1));
bool upgradeable = (latest_version > current_version);
version::Semver200_version latest_dev_version(versions.substr(0, versions.find(',')));
version::Semver200_version latest_stable_version(versions.substr(versions.find(',') + 1));
bool dev_upgradeable = latest_dev_version > current_version;
bool stable_upgradeable = latest_stable_version > current_version;
#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()
.debug("Checking Version upgrade. Using %s release branch. current version=%d.%d.%d-%s, latest version=%d.%d.%d-%s (%s upgradeable)",
(using_dev_version ? "dev" : "stable"),
.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)",
current_version.major(),
current_version.minor(),
current_version.patch(),
current_version.prerelease().c_str(),
latest_version.major(),
latest_version.minor(),
latest_version.patch(),
latest_version.prerelease().c_str(),
upgradeable ? "IS" : "NOT");
using_dev_version ? "Dev" : "Stable",
latest_dev_version.major(),
latest_dev_version.minor(),
latest_dev_version.patch(),
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
root["upgradeable"] = upgradeable;
root["dev_upgradeable"] = dev_upgradeable;
root["stable_upgradeable"] = stable_upgradeable;
}
root["emsesp_version"] = current_version_s; // always send back current version

View File

@@ -5,12 +5,19 @@
#define EMSESP_ACTION_SERVICE_PATH "/rest/action"
#include <semver200.h> // for version checking
#include "../emsesp_version.h"
namespace emsesp {
class WebStatusService {
public:
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
#ifndef EMSESP_STANDALONE
@@ -29,6 +36,8 @@ class WebStatusService {
bool uploadURL(const char * url);
bool setSystemStatus(const char * status);
void allvalues(JsonObject output);
std::string current_version_s = EMSESP_APP_VERSION;
};
} // namespace emsesp