mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-08 00:39:50 +03:00
Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev
This commit is contained in:
@@ -10,7 +10,7 @@ jobs:
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Github Releases To Discord
|
||||
- name: GitHub Releases To Discord
|
||||
uses: SethCohen/github-releases-to-discord@v1.13.1
|
||||
with:
|
||||
webhook_url: ${{ secrets.WEBHOOK_URL }}
|
||||
|
||||
4
.github/workflows/sonar_check.yml
vendored
4
.github/workflows/sonar_check.yml
vendored
@@ -5,8 +5,8 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- dev
|
||||
pull_request:
|
||||
types: [opened, synchronize, reopened]
|
||||
# pull_request:
|
||||
# types: [opened, synchronize, reopened]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
## **IMPORTANT! BREAKING CHANGES**
|
||||
|
||||
- new device WATER shows dhw entities from MM100 and SM100 in dhw setting
|
||||
- rename WWC to DHW, always create DHW nests/topics, remove ww prefix from mqtt names [#1634](https://github.com/emsesp/EMS-ESP32/issues/1634)
|
||||
- renamed WWC to DHW, always create DHW nests/topics, remove ww prefix from mqtt names [#1634](https://github.com/emsesp/EMS-ESP32/issues/1634)
|
||||
|
||||
## Added
|
||||
|
||||
@@ -40,3 +40,4 @@
|
||||
- dynamic register dhw circuits for thermostat
|
||||
- removed OTA feature [#1738](https://github.com/emsesp/EMS-ESP32/issues/1738)
|
||||
- added shower min duration [[#1801](https://github.com/emsesp/EMS-ESP32/issues/1801)]
|
||||
- Include TXT file along with the generated CSV for Device Data export/download
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
"react-dom": "latest",
|
||||
"react-dropzone": "^14.2.3",
|
||||
"react-icons": "^5.2.1",
|
||||
"react-router-dom": "^6.23.1",
|
||||
"react-router-dom": "^6.24.0",
|
||||
"react-toastify": "^10.0.5",
|
||||
"typesafe-i18n": "^5.26.2",
|
||||
"typescript": "^5.5.2"
|
||||
@@ -53,7 +53,7 @@
|
||||
"@babel/core": "^7.24.7",
|
||||
"@eslint/js": "^9.5.0",
|
||||
"@preact/compat": "^17.1.2",
|
||||
"@preact/preset-vite": "^2.8.2",
|
||||
"@preact/preset-vite": "^2.8.3",
|
||||
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
|
||||
"@types/babel__core": "^7",
|
||||
"concurrently": "^8.2.2",
|
||||
@@ -63,7 +63,7 @@
|
||||
"prettier": "^3.3.2",
|
||||
"rollup-plugin-visualizer": "^5.12.0",
|
||||
"terser": "^5.31.1",
|
||||
"typescript-eslint": "^7.13.1",
|
||||
"typescript-eslint": "^7.14.1",
|
||||
"vite": "^5.3.1",
|
||||
"vite-plugin-imagemin": "^0.6.1",
|
||||
"vite-tsconfig-paths": "^4.3.2"
|
||||
|
||||
@@ -163,9 +163,9 @@ const de: Translation = {
|
||||
SUPPORT_INFORMATION: 'Unterstützende Informationen',
|
||||
HELP_INFORMATION_1: 'EMS-ESP Konfigurationsanweisungen und mehr finden Sie im Online-Wiki',
|
||||
HELP_INFORMATION_2: 'Für einen Live-Community-Chat besuchen Sie unseren Discord-Server',
|
||||
HELP_INFORMATION_3: 'Um neue Funktionen anzufragen oder Fehler zu melden, eröffnen Sie ein Issue auf Github',
|
||||
HELP_INFORMATION_3: 'Um neue Funktionen anzufragen oder Fehler zu melden, eröffnen Sie ein Issue auf GitHub',
|
||||
HELP_INFORMATION_4: 'Bitte laden Sie die System-Details und hängen Sie sie an das Support-Issue an. ',
|
||||
HELP_INFORMATION_5: 'EMS-ESP ist ein freies Open-Source Projekt. Bitte unterstützen Sie die zukünftige Entwicklung mit einem "Star" auf Github!',
|
||||
HELP_INFORMATION_5: 'EMS-ESP ist ein freies Open-Source Projekt. Bitte unterstützen Sie die zukünftige Entwicklung mit einem "Star" auf GitHub!',
|
||||
UPLOAD: 'Hochladen',
|
||||
DOWNLOAD: '{{H|h|h}}erunterladen',
|
||||
ABORTED: 'abgebrochen',
|
||||
|
||||
@@ -23,7 +23,7 @@ const en: Translation = {
|
||||
ONOFF: 'on/off',
|
||||
TYPE: 'Type',
|
||||
DESCRIPTION: 'Description',
|
||||
ENTITIES: 'Entities',
|
||||
ENTITIES: 'entities',
|
||||
REFRESH: 'Refresh',
|
||||
EXPORT: 'Export',
|
||||
DEVICE_DETAILS: 'Device Details',
|
||||
@@ -165,7 +165,7 @@ const en: Translation = {
|
||||
HELP_INFORMATION_2: 'For live community chat join our Discord server',
|
||||
HELP_INFORMATION_3: 'To request a feature or report a bug',
|
||||
HELP_INFORMATION_4: 'Download and attach your support information for a faster response when reporting an issue',
|
||||
HELP_INFORMATION_5: 'EMS-ESP is a free and open-source project. Please support its future development by giving it a star on Github!',
|
||||
HELP_INFORMATION_5: 'EMS-ESP is a free and open-source project. Please support its future development by giving it a star on GitHub!',
|
||||
UPLOAD: 'Upload',
|
||||
DOWNLOAD: '{{D|d|d}}ownload',
|
||||
ABORTED: 'aborted',
|
||||
|
||||
@@ -23,7 +23,7 @@ const fr: Translation = {
|
||||
ONOFF: 'on/off',
|
||||
TYPE: 'Type',
|
||||
DESCRIPTION: 'Description',
|
||||
ENTITIES: 'Entités',
|
||||
ENTITIES: 'entités',
|
||||
REFRESH: 'Rafraîchir',
|
||||
EXPORT: 'Exporter',
|
||||
DEVICE_DETAILS: "Détails de l'appareil",
|
||||
@@ -165,7 +165,7 @@ const fr: Translation = {
|
||||
HELP_INFORMATION_2: 'Pour une discussion en direct avec la communauté, rejoignez notre serveur Discord',
|
||||
HELP_INFORMATION_3: 'Pour demander une fonctionnalité ou signaler un problème',
|
||||
HELP_INFORMATION_4: "N'oubliez pas de télécharger et de joindre les informations relatives à votre système pour obtenir une réponse plus rapide lorsque vous signalez un problème",
|
||||
HELP_INFORMATION_5: 'EMS-ESP est un projet libre et open-source. Merci de soutenir son développement futur en lui donnant une étoile sur Github !',
|
||||
HELP_INFORMATION_5: 'EMS-ESP est un projet libre et open-source. Merci de soutenir son développement futur en lui donnant une étoile sur GitHub !',
|
||||
UPLOAD: 'Upload',
|
||||
DOWNLOAD: '{{D|d|d}}ownload',
|
||||
ABORTED: 'annulé',
|
||||
|
||||
@@ -23,7 +23,7 @@ const it: Translation = {
|
||||
ONOFF: 'on/off',
|
||||
TYPE: 'Tipo',
|
||||
DESCRIPTION: 'Descrizione',
|
||||
ENTITIES: 'Entità',
|
||||
ENTITIES: 'entità',
|
||||
REFRESH: 'Ricaricare',
|
||||
EXPORT: 'Esporta',
|
||||
DEVICE_DETAILS: 'Dettagli dispositivo',
|
||||
@@ -165,7 +165,7 @@ const it: Translation = {
|
||||
HELP_INFORMATION_2: 'Per la chat della community dal vivo unisciti al nostro server Discord',
|
||||
HELP_INFORMATION_3: 'Per richiedere una funzionalità o segnalare un errore',
|
||||
HELP_INFORMATION_4: 'Ricordati di scaricare e allegare le informazioni del tuo sistema per una risposta più rapida quando segnali un problema',
|
||||
HELP_INFORMATION_5: 'EMS-ESP è un progetto gratuito e open-source. Supporta il suo sviluppo futuro assegnandogli una stella su Github!',
|
||||
HELP_INFORMATION_5: 'EMS-ESP è un progetto gratuito e open-source. Supporta il suo sviluppo futuro assegnandogli una stella su GitHub!',
|
||||
UPLOAD: 'Carica',
|
||||
DOWNLOAD: 'Scarica',
|
||||
ABORTED: 'Annullato',
|
||||
|
||||
@@ -23,7 +23,7 @@ const nl: Translation = {
|
||||
ONOFF: 'aan/uit',
|
||||
TYPE: 'Type',
|
||||
DESCRIPTION: 'Beschrijving',
|
||||
ENTITIES: 'Entiteiten',
|
||||
ENTITIES: 'entiteiten',
|
||||
REFRESH: 'Ververs',
|
||||
EXPORT: 'Export',
|
||||
DEVICE_DETAILS: 'Device Gegevens',
|
||||
@@ -165,7 +165,7 @@ const nl: Translation = {
|
||||
HELP_INFORMATION_2: 'Voor de live community ga naar de Discord server',
|
||||
HELP_INFORMATION_3: 'Om een nieuwe feature te vragen of een bug te rapporteren',
|
||||
HELP_INFORMATION_4: 'Zorg dat je ook je systeem details zijn toevoeged voor een sneller antwoord',
|
||||
HELP_INFORMATION_5: 'EMS-ESP is een gratis en open source project. Steun ons met een Star op Github!',
|
||||
HELP_INFORMATION_5: 'EMS-ESP is een gratis en open source project. Steun ons met een Star op GitHub!',
|
||||
UPLOAD: 'Upload',
|
||||
DOWNLOAD: '{{D|d|d}}ownload',
|
||||
ABORTED: 'afgebroken',
|
||||
|
||||
@@ -165,7 +165,7 @@ const pl: BaseTranslation = {
|
||||
HELP_INFORMATION_2: 'Dołącz do naszego serwera Discord by komunikować się na żywo ze społecznością.',
|
||||
HELP_INFORMATION_3: 'Zaproponuj nową funkcjonalność lub zgłoś problem.',
|
||||
HELP_INFORMATION_4: 'Zgłaszając problem, nie zapomnij pobrać i dołączyć informacji o swoim systemie!',
|
||||
HELP_INFORMATION_5: 'EMS-ESP jest darmowym projektem typu open-source. Aby go wesprzeć, rozważ przyznanie nam gwiazdki na Github!',
|
||||
HELP_INFORMATION_5: 'EMS-ESP jest darmowym projektem typu open-source. Aby go wesprzeć, rozważ przyznanie nam gwiazdki na GitHub!',
|
||||
UPLOAD: 'Wysyłanie',
|
||||
DOWNLOAD: '{{P|p||P}}obier{{anie|z||z}}',
|
||||
ABORTED: 'zostało przerwane!',
|
||||
|
||||
@@ -23,7 +23,7 @@ const sk: Translation = {
|
||||
ONOFF: 'zap/vyp',
|
||||
TYPE: 'Typ',
|
||||
DESCRIPTION: 'Popis',
|
||||
ENTITIES: 'Entity',
|
||||
ENTITIES: 'entity',
|
||||
REFRESH: 'Obnoviť',
|
||||
EXPORT: 'Export',
|
||||
DEVICE_DETAILS: 'Detaily zariadenia',
|
||||
@@ -165,7 +165,7 @@ const sk: Translation = {
|
||||
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',
|
||||
HELP_INFORMATION_5: 'EMS-ESP je bezplatný a open source projekt. Podporte jeho budúci vývoj tým, že mu dáte hviezdičku na Github!',
|
||||
HELP_INFORMATION_5: 'EMS-ESP je bezplatný a open source projekt. Podporte jeho budúci vývoj tým, že mu dáte hviezdičku na GitHub!',
|
||||
UPLOAD: 'Nahrať',
|
||||
DOWNLOAD: '{{S|s|s}}tiahnuť',
|
||||
ABORTED: 'zrušené',
|
||||
|
||||
@@ -23,7 +23,7 @@ const sv: Translation = {
|
||||
ONOFF: 'på/av',
|
||||
TYPE: 'Typ',
|
||||
DESCRIPTION: 'Beskrivning',
|
||||
ENTITIES: 'Entiteter',
|
||||
ENTITIES: 'entiteter',
|
||||
REFRESH: 'Uppdatera',
|
||||
EXPORT: 'Exportera',
|
||||
DEVICE_DETAILS: 'Enhetsdetaljer',
|
||||
|
||||
@@ -23,7 +23,7 @@ const tr: Translation = {
|
||||
ONOFF: 'açık/kapalı',
|
||||
TYPE: 'Tür',
|
||||
DESCRIPTION: 'Açıklama',
|
||||
ENTITIES: 'Varlıklar',
|
||||
ENTITIES: 'varlıklar',
|
||||
REFRESH: 'Yenile',
|
||||
EXPORT: 'Dışarı al',
|
||||
DEVICE_DETAILS: 'Cihaz Ayrıntıları',
|
||||
@@ -165,7 +165,7 @@ const tr: Translation = {
|
||||
HELP_INFORMATION_2: 'Canlı topluluk sohbeti için Discord sunucumuza katılın',
|
||||
HELP_INFORMATION_3: 'Yeni bir özellik talep etmek yada hata bildirmek için',
|
||||
HELP_INFORMATION_4: 'Bir sorun bildirirken daha hızlı bir dönüş için sistem bilginizi indirip eklemeyi unutmayın',
|
||||
HELP_INFORMATION_5: 'EMS-ESP ücretsiz ve açık kaynaklı bir projedir. Lütfen geliştirmeyi desteklemek için Githubda projeye yıldız verin!',
|
||||
HELP_INFORMATION_5: 'EMS-ESP ücretsiz ve açık kaynaklı bir projedir. Lütfen geliştirmeyi desteklemek için GitHubda projeye yıldız verin!',
|
||||
UPLOAD: 'Yükleme',
|
||||
DOWNLOAD: '{{İ|i|i}}İndirme',
|
||||
ABORTED: 'iptal edildi',
|
||||
|
||||
@@ -36,7 +36,11 @@ import {
|
||||
List,
|
||||
ListItem,
|
||||
ListItemText,
|
||||
Typography
|
||||
Tooltip,
|
||||
type TooltipProps,
|
||||
Typography,
|
||||
styled,
|
||||
tooltipClasses
|
||||
} from '@mui/material';
|
||||
|
||||
import { useRowSelect } from '@table-library/react-table-library/select';
|
||||
@@ -234,6 +238,20 @@ const Devices: FC = () => {
|
||||
}
|
||||
]);
|
||||
|
||||
const ButtonTooltip = styled(({ className, ...props }: TooltipProps) => (
|
||||
<Tooltip {...props} arrow classes={{ popper: className }} />
|
||||
))(({ theme }) => ({
|
||||
[`& .${tooltipClasses.arrow}`]: {
|
||||
color: theme.palette.success.main
|
||||
},
|
||||
[`& .${tooltipClasses.tooltip}`]: {
|
||||
backgroundColor: theme.palette.success.main,
|
||||
color: 'rgba(0, 0, 0, 0.87)',
|
||||
boxShadow: theme.shadows[1],
|
||||
fontSize: 10
|
||||
}
|
||||
}));
|
||||
|
||||
const getSortIcon = (state: State, sortKey: unknown) => {
|
||||
if (state.sortKey === sortKey && state.reverse) {
|
||||
return <KeyboardArrowDownOutlinedIcon />;
|
||||
@@ -399,13 +417,23 @@ const Devices: FC = () => {
|
||||
'\r\n'
|
||||
);
|
||||
|
||||
const csvFile = new Blob([csvData], { type: 'text/csv;charset:utf-8' });
|
||||
const downloadLink = document.createElement('a');
|
||||
downloadLink.download = filename;
|
||||
downloadLink.href = window.URL.createObjectURL(csvFile);
|
||||
document.body.appendChild(downloadLink);
|
||||
downloadLink.click();
|
||||
document.body.removeChild(downloadLink);
|
||||
const downloadBlob = (blob: Blob) => {
|
||||
const downloadLink = document.createElement('a');
|
||||
downloadLink.download = filename;
|
||||
downloadLink.href = window.URL.createObjectURL(blob);
|
||||
document.body.appendChild(downloadLink);
|
||||
downloadLink.click();
|
||||
document.body.removeChild(downloadLink);
|
||||
};
|
||||
|
||||
const device = { ...{ device: coreData.devices[deviceIndex] }, ...deviceData };
|
||||
downloadBlob(
|
||||
new Blob([JSON.stringify(device, null, 2)], {
|
||||
type: 'text;charset:utf-8'
|
||||
})
|
||||
);
|
||||
|
||||
downloadBlob(new Blob([csvData], { type: 'text/csv;charset:utf-8' }));
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
@@ -608,11 +636,11 @@ const Devices: FC = () => {
|
||||
backgroundColor: 'black',
|
||||
position: 'absolute',
|
||||
left: () => leftOffset(),
|
||||
right: 16,
|
||||
right: 0,
|
||||
bottom: 0,
|
||||
top: 128,
|
||||
top: 64,
|
||||
zIndex: 'modal',
|
||||
maxHeight: () => size[1] - 189,
|
||||
maxHeight: () => size[1] - 126,
|
||||
border: '1px solid #177ac9'
|
||||
}}
|
||||
>
|
||||
@@ -623,7 +651,7 @@ const Devices: FC = () => {
|
||||
</Typography>
|
||||
|
||||
<Grid container justifyContent="space-between">
|
||||
<Typography sx={{ ml: 1 }} variant="subtitle2" color="primary">
|
||||
<Typography sx={{ ml: 1 }} variant="subtitle2" color="grey">
|
||||
{LL.SHOWING() +
|
||||
' ' +
|
||||
shown_data.length +
|
||||
@@ -631,53 +659,44 @@ const Devices: FC = () => {
|
||||
coreData.devices[deviceIndex].e +
|
||||
' ' +
|
||||
LL.ENTITIES(shown_data.length)}
|
||||
<IconButton onClick={() => setShowDeviceInfo(true)}>
|
||||
<InfoOutlinedIcon
|
||||
color="primary"
|
||||
sx={{ fontSize: 18, verticalAlign: 'middle' }}
|
||||
/>
|
||||
</IconButton>
|
||||
{me.admin && (
|
||||
<IconButton onClick={customize}>
|
||||
<FormatListNumberedIcon
|
||||
color="primary"
|
||||
sx={{ fontSize: 18, verticalAlign: 'middle' }}
|
||||
/>
|
||||
<ButtonTooltip title="Info">
|
||||
<IconButton onClick={() => setShowDeviceInfo(true)}>
|
||||
<InfoOutlinedIcon color="primary" sx={{ fontSize: 18 }} />
|
||||
</IconButton>
|
||||
</ButtonTooltip>
|
||||
{me.admin && (
|
||||
<ButtonTooltip title={LL.CUSTOMIZATIONS()}>
|
||||
<IconButton onClick={customize}>
|
||||
<FormatListNumberedIcon color="primary" sx={{ fontSize: 18 }} />
|
||||
</IconButton>
|
||||
</ButtonTooltip>
|
||||
)}
|
||||
<IconButton onClick={handleDownloadCsv}>
|
||||
<DownloadIcon
|
||||
color="primary"
|
||||
sx={{ fontSize: 18, verticalAlign: 'middle' }}
|
||||
/>
|
||||
</IconButton>
|
||||
<IconButton onClick={() => setOnlyFav(!onlyFav)}>
|
||||
{onlyFav ? (
|
||||
<StarIcon
|
||||
color="primary"
|
||||
sx={{ fontSize: 18, verticalAlign: 'middle' }}
|
||||
/>
|
||||
) : (
|
||||
<StarBorderOutlinedIcon
|
||||
color="primary"
|
||||
sx={{ fontSize: 18, verticalAlign: 'middle' }}
|
||||
/>
|
||||
)}
|
||||
</IconButton>
|
||||
<IconButton onClick={refreshData}>
|
||||
<RefreshIcon
|
||||
color="primary"
|
||||
sx={{ fontSize: 18, verticalAlign: 'middle' }}
|
||||
/>
|
||||
</IconButton>
|
||||
<ButtonTooltip title={LL.EXPORT()}>
|
||||
<IconButton onClick={handleDownloadCsv}>
|
||||
<DownloadIcon color="primary" sx={{ fontSize: 18 }} />
|
||||
</IconButton>
|
||||
</ButtonTooltip>
|
||||
<ButtonTooltip title="Favorites">
|
||||
<IconButton onClick={() => setOnlyFav(!onlyFav)}>
|
||||
{onlyFav ? (
|
||||
<StarIcon color="primary" sx={{ fontSize: 18 }} />
|
||||
) : (
|
||||
<StarBorderOutlinedIcon color="primary" sx={{ fontSize: 18 }} />
|
||||
)}
|
||||
</IconButton>
|
||||
</ButtonTooltip>
|
||||
<ButtonTooltip title={LL.REFRESH()}>
|
||||
<IconButton onClick={refreshData}>
|
||||
<RefreshIcon color="primary" sx={{ fontSize: 18 }} />
|
||||
</IconButton>
|
||||
</ButtonTooltip>
|
||||
</Typography>
|
||||
<Grid item zeroMinWidth justifyContent="flex-end">
|
||||
<IconButton onClick={resetDeviceSelect}>
|
||||
<HighlightOffIcon
|
||||
color="primary"
|
||||
sx={{ fontSize: 18, verticalAlign: 'middle' }}
|
||||
/>
|
||||
</IconButton>
|
||||
<ButtonTooltip title={LL.CANCEL()}>
|
||||
<IconButton onClick={resetDeviceSelect}>
|
||||
<HighlightOffIcon color="primary" sx={{ fontSize: 18 }} />
|
||||
</IconButton>
|
||||
</ButtonTooltip>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Box>
|
||||
|
||||
@@ -297,7 +297,7 @@ const SchedulerDialog = ({
|
||||
name="time"
|
||||
label={isCondition ? 'Condition' : 'On Change Value'}
|
||||
fullWidth
|
||||
value={editItem.time == "00:00" ? editItem.time = "" : editItem.time}
|
||||
value={editItem.time == '00:00' ? (editItem.time = '') : editItem.time}
|
||||
margin="normal"
|
||||
onChange={updateFormValue}
|
||||
/>
|
||||
@@ -307,7 +307,9 @@ const SchedulerDialog = ({
|
||||
name="time"
|
||||
type="time"
|
||||
label={isTimer ? LL.TIMER(1) : LL.TIME(1)}
|
||||
value={editItem.time == "" ? editItem.time = "00:00" : editItem.time}
|
||||
value={
|
||||
editItem.time == '' ? (editItem.time = '00:00') : editItem.time
|
||||
}
|
||||
margin="normal"
|
||||
onChange={updateFormValue}
|
||||
/>
|
||||
|
||||
@@ -1341,10 +1341,11 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@preact/preset-vite@npm:^2.8.2":
|
||||
version: 2.8.2
|
||||
resolution: "@preact/preset-vite@npm:2.8.2"
|
||||
"@preact/preset-vite@npm:^2.8.3":
|
||||
version: 2.8.3
|
||||
resolution: "@preact/preset-vite@npm:2.8.3"
|
||||
dependencies:
|
||||
"@babel/code-frame": "npm:^7.22.13"
|
||||
"@babel/plugin-transform-react-jsx": "npm:^7.22.15"
|
||||
"@babel/plugin-transform-react-jsx-development": "npm:^7.22.5"
|
||||
"@prefresh/vite": "npm:^2.4.1"
|
||||
@@ -1360,7 +1361,7 @@ __metadata:
|
||||
peerDependencies:
|
||||
"@babel/core": 7.x
|
||||
vite: 2.x || 3.x || 4.x || 5.x
|
||||
checksum: 10c0/79a26f70ae7a129bbaf3c1969f78df2013c64202184c47e19a44e255d00e7e52b7f8071017da77c8f587121e1df02e9097a03a0791acb1bc8c52b689ac8287a4
|
||||
checksum: 10c0/984b47d24491d20ea9f0787adbef3515c3bd4cdfd77154cdb84e9038fabb5db09a0c76237557aff88b3da26cff6146ac616c2375579143fc511afcf7baf63927
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1403,10 +1404,10 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@remix-run/router@npm:1.16.1":
|
||||
version: 1.16.1
|
||||
resolution: "@remix-run/router@npm:1.16.1"
|
||||
checksum: 10c0/5f1b0aef4924830eeab9c86dcaa5af8157066e5de65b449e7fdf406532b2384828a46a447c31b0735fd713a06938dd88bfd4e566d9989be70c770457dda16c92
|
||||
"@remix-run/router@npm:1.17.0":
|
||||
version: 1.17.0
|
||||
resolution: "@remix-run/router@npm:1.17.0"
|
||||
checksum: 10c0/6f39cb81c5dec3d3cb901cfc05ef1c745d23192def7d83e6d1a53c43cbb5d7ff488055fd1418ac72f904ff41b3d3ca339d223677994150f276c648123ce166f7
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1860,15 +1861,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@typescript-eslint/eslint-plugin@npm:7.13.1":
|
||||
version: 7.13.1
|
||||
resolution: "@typescript-eslint/eslint-plugin@npm:7.13.1"
|
||||
"@typescript-eslint/eslint-plugin@npm:7.14.1":
|
||||
version: 7.14.1
|
||||
resolution: "@typescript-eslint/eslint-plugin@npm:7.14.1"
|
||||
dependencies:
|
||||
"@eslint-community/regexpp": "npm:^4.10.0"
|
||||
"@typescript-eslint/scope-manager": "npm:7.13.1"
|
||||
"@typescript-eslint/type-utils": "npm:7.13.1"
|
||||
"@typescript-eslint/utils": "npm:7.13.1"
|
||||
"@typescript-eslint/visitor-keys": "npm:7.13.1"
|
||||
"@typescript-eslint/scope-manager": "npm:7.14.1"
|
||||
"@typescript-eslint/type-utils": "npm:7.14.1"
|
||||
"@typescript-eslint/utils": "npm:7.14.1"
|
||||
"@typescript-eslint/visitor-keys": "npm:7.14.1"
|
||||
graphemer: "npm:^1.4.0"
|
||||
ignore: "npm:^5.3.1"
|
||||
natural-compare: "npm:^1.4.0"
|
||||
@@ -1879,44 +1880,44 @@ __metadata:
|
||||
peerDependenciesMeta:
|
||||
typescript:
|
||||
optional: true
|
||||
checksum: 10c0/6677f9c090a25978e4e20c24d67365ad89ca1208ebd2bb103d3f1e15a7deea22dea538e9f61f3a3d4f03a741179acf58c02ad7d03f805aceabb78929a8dc1908
|
||||
checksum: 10c0/7c2b9b98a38d78326b0ff7348fe001203eda10817ca7834a7a01f492ae7c2508469bbafaa933208d6459f8ff6685277685983cf6f6843e556a6ab2aa5c05080c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@typescript-eslint/parser@npm:7.13.1":
|
||||
version: 7.13.1
|
||||
resolution: "@typescript-eslint/parser@npm:7.13.1"
|
||||
"@typescript-eslint/parser@npm:7.14.1":
|
||||
version: 7.14.1
|
||||
resolution: "@typescript-eslint/parser@npm:7.14.1"
|
||||
dependencies:
|
||||
"@typescript-eslint/scope-manager": "npm:7.13.1"
|
||||
"@typescript-eslint/types": "npm:7.13.1"
|
||||
"@typescript-eslint/typescript-estree": "npm:7.13.1"
|
||||
"@typescript-eslint/visitor-keys": "npm:7.13.1"
|
||||
"@typescript-eslint/scope-manager": "npm:7.14.1"
|
||||
"@typescript-eslint/types": "npm:7.14.1"
|
||||
"@typescript-eslint/typescript-estree": "npm:7.14.1"
|
||||
"@typescript-eslint/visitor-keys": "npm:7.14.1"
|
||||
debug: "npm:^4.3.4"
|
||||
peerDependencies:
|
||||
eslint: ^8.56.0
|
||||
peerDependenciesMeta:
|
||||
typescript:
|
||||
optional: true
|
||||
checksum: 10c0/455d067bfb81fa3d133c75ebc4d8d7f2de5001441585f5b58dc8b0d4380d7397dc3745e11a9299d596dfa581265fdcdea6c28b2ddd2d3b542869c851ecd52fcd
|
||||
checksum: 10c0/db3169d4852685cfb27db741c557f58a3e52104bfacc7621beb7c94ec36ac2a08d4e410ac86745db52f482fbfc87e99fa0a26c1d7a10d37a215cce85e1661f0e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@typescript-eslint/scope-manager@npm:7.13.1":
|
||||
version: 7.13.1
|
||||
resolution: "@typescript-eslint/scope-manager@npm:7.13.1"
|
||||
"@typescript-eslint/scope-manager@npm:7.14.1":
|
||||
version: 7.14.1
|
||||
resolution: "@typescript-eslint/scope-manager@npm:7.14.1"
|
||||
dependencies:
|
||||
"@typescript-eslint/types": "npm:7.13.1"
|
||||
"@typescript-eslint/visitor-keys": "npm:7.13.1"
|
||||
checksum: 10c0/3d8770bf9c89e7a07e54efbc3dac6df02c0ce49d49575076111ac663566c90cbb852f06c94a311db7c0aec1fab0417f3ef6e601b3852aa30bed75c65f4f076f4
|
||||
"@typescript-eslint/types": "npm:7.14.1"
|
||||
"@typescript-eslint/visitor-keys": "npm:7.14.1"
|
||||
checksum: 10c0/f8c05a0d6f8de4cc19b90a4da308817c66e53f36f7ec48f6cc23e93c7399bc418643d8135933aaf5fc013199cbef0e1ea4223f5147db5ca401b239eaf087011e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@typescript-eslint/type-utils@npm:7.13.1":
|
||||
version: 7.13.1
|
||||
resolution: "@typescript-eslint/type-utils@npm:7.13.1"
|
||||
"@typescript-eslint/type-utils@npm:7.14.1":
|
||||
version: 7.14.1
|
||||
resolution: "@typescript-eslint/type-utils@npm:7.14.1"
|
||||
dependencies:
|
||||
"@typescript-eslint/typescript-estree": "npm:7.13.1"
|
||||
"@typescript-eslint/utils": "npm:7.13.1"
|
||||
"@typescript-eslint/typescript-estree": "npm:7.14.1"
|
||||
"@typescript-eslint/utils": "npm:7.14.1"
|
||||
debug: "npm:^4.3.4"
|
||||
ts-api-utils: "npm:^1.3.0"
|
||||
peerDependencies:
|
||||
@@ -1924,23 +1925,23 @@ __metadata:
|
||||
peerDependenciesMeta:
|
||||
typescript:
|
||||
optional: true
|
||||
checksum: 10c0/c02305dccb0b2c7dcc9249230078c83e851ee589f93e08eb6cdc0b4c38d78d85ef4996631ac427836ee9d0a868ac031417feb74a6e4d0600096f41ca3c0e99a0
|
||||
checksum: 10c0/bd1c4a8db6273e24156fb10da2cbeb52b4eb03f819da193d4b6bd5a95db3b5524c6fe00d088308d8855b9ae60a3b82afa3a06e89982a09a8573561da960758fd
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@typescript-eslint/types@npm:7.13.1":
|
||||
version: 7.13.1
|
||||
resolution: "@typescript-eslint/types@npm:7.13.1"
|
||||
checksum: 10c0/38a01004e11259e457ae2fd02300ef362a3268a8fc70addfbf1508e2edcaca72da2f0f8771e42c1cb9f191c1f754af583cdcaebd830c8e3c3f796dcf30d3c3a8
|
||||
"@typescript-eslint/types@npm:7.14.1":
|
||||
version: 7.14.1
|
||||
resolution: "@typescript-eslint/types@npm:7.14.1"
|
||||
checksum: 10c0/5b7bda83c47a9b386482e63447c6b0ed7bd4e82eb43f11a180c6e2f3d2e7a2828f57bcbed82196ad761c49e363cccf4c81a89f1fc976e9f5f0a79dcc928fa2d2
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@typescript-eslint/typescript-estree@npm:7.13.1":
|
||||
version: 7.13.1
|
||||
resolution: "@typescript-eslint/typescript-estree@npm:7.13.1"
|
||||
"@typescript-eslint/typescript-estree@npm:7.14.1":
|
||||
version: 7.14.1
|
||||
resolution: "@typescript-eslint/typescript-estree@npm:7.14.1"
|
||||
dependencies:
|
||||
"@typescript-eslint/types": "npm:7.13.1"
|
||||
"@typescript-eslint/visitor-keys": "npm:7.13.1"
|
||||
"@typescript-eslint/types": "npm:7.14.1"
|
||||
"@typescript-eslint/visitor-keys": "npm:7.14.1"
|
||||
debug: "npm:^4.3.4"
|
||||
globby: "npm:^11.1.0"
|
||||
is-glob: "npm:^4.0.3"
|
||||
@@ -1950,31 +1951,31 @@ __metadata:
|
||||
peerDependenciesMeta:
|
||||
typescript:
|
||||
optional: true
|
||||
checksum: 10c0/bd5c8951ae79e8eacd05ff100def02926c633045a1a54426f98f20b4ca31c485968af3226dd7939934dfaf36a6b5fcb3386948e2a7d763ddee2db905ac187ebc
|
||||
checksum: 10c0/a8da9bcc4de3334a225424946abd99374de05c42098455419224bc0f46bb1b66115f8bd6ae268461294b90943ed4a407bcd255c0fa60eb76ba4cdc5fc7c20855
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@typescript-eslint/utils@npm:7.13.1":
|
||||
version: 7.13.1
|
||||
resolution: "@typescript-eslint/utils@npm:7.13.1"
|
||||
"@typescript-eslint/utils@npm:7.14.1":
|
||||
version: 7.14.1
|
||||
resolution: "@typescript-eslint/utils@npm:7.14.1"
|
||||
dependencies:
|
||||
"@eslint-community/eslint-utils": "npm:^4.4.0"
|
||||
"@typescript-eslint/scope-manager": "npm:7.13.1"
|
||||
"@typescript-eslint/types": "npm:7.13.1"
|
||||
"@typescript-eslint/typescript-estree": "npm:7.13.1"
|
||||
"@typescript-eslint/scope-manager": "npm:7.14.1"
|
||||
"@typescript-eslint/types": "npm:7.14.1"
|
||||
"@typescript-eslint/typescript-estree": "npm:7.14.1"
|
||||
peerDependencies:
|
||||
eslint: ^8.56.0
|
||||
checksum: 10c0/d2f6be42a80608ed265b34a5f6a0c97dc0b627d53b91e83d87c7d67541cb5b3c038e7320026b4ad8dfafe1ac07a0554efa8fe7673f54d74b68c253d6f9519bb6
|
||||
checksum: 10c0/c7f635a3c2c6c085e1d51a52088e55cad9d7e1257b1f60378e5eeb6eb0871db027d42747e9ef60a2f557cf9dd68b2ce014d488d795db8f771506290b164b0e5a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@typescript-eslint/visitor-keys@npm:7.13.1":
|
||||
version: 7.13.1
|
||||
resolution: "@typescript-eslint/visitor-keys@npm:7.13.1"
|
||||
"@typescript-eslint/visitor-keys@npm:7.14.1":
|
||||
version: 7.14.1
|
||||
resolution: "@typescript-eslint/visitor-keys@npm:7.14.1"
|
||||
dependencies:
|
||||
"@typescript-eslint/types": "npm:7.13.1"
|
||||
"@typescript-eslint/types": "npm:7.14.1"
|
||||
eslint-visitor-keys: "npm:^3.4.3"
|
||||
checksum: 10c0/23c1bb896173cadfb33e3801420a70aa2f0481384caa3b534b04f7920acdb9d8f7d635fcaf1f8c7fc78ebce71b8f2435391608d120091761ad2e2c00eb870832
|
||||
checksum: 10c0/39ac489990fcfdcee442f27658431a0eb44ccf694f701a45df2a108c47cea9582e0955bff0d449047549149385f72895a5d7e6c1622ece1fe32594b7cecb85f3
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1991,7 +1992,7 @@ __metadata:
|
||||
"@mui/icons-material": "npm:^5.15.20"
|
||||
"@mui/material": "npm:^5.15.20"
|
||||
"@preact/compat": "npm:^17.1.2"
|
||||
"@preact/preset-vite": "npm:^2.8.2"
|
||||
"@preact/preset-vite": "npm:^2.8.3"
|
||||
"@table-library/react-table-library": "npm:4.1.7"
|
||||
"@trivago/prettier-plugin-sort-imports": "npm:^4.3.0"
|
||||
"@types/babel__core": "npm:^7"
|
||||
@@ -2015,13 +2016,13 @@ __metadata:
|
||||
react-dom: "npm:latest"
|
||||
react-dropzone: "npm:^14.2.3"
|
||||
react-icons: "npm:^5.2.1"
|
||||
react-router-dom: "npm:^6.23.1"
|
||||
react-router-dom: "npm:^6.24.0"
|
||||
react-toastify: "npm:^10.0.5"
|
||||
rollup-plugin-visualizer: "npm:^5.12.0"
|
||||
terser: "npm:^5.31.1"
|
||||
typesafe-i18n: "npm:^5.26.2"
|
||||
typescript: "npm:^5.5.2"
|
||||
typescript-eslint: "npm:^7.13.1"
|
||||
typescript-eslint: "npm:^7.14.1"
|
||||
vite: "npm:^5.3.1"
|
||||
vite-plugin-imagemin: "npm:^0.6.1"
|
||||
vite-tsconfig-paths: "npm:^4.3.2"
|
||||
@@ -6102,27 +6103,27 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"react-router-dom@npm:^6.23.1":
|
||||
version: 6.23.1
|
||||
resolution: "react-router-dom@npm:6.23.1"
|
||||
"react-router-dom@npm:^6.24.0":
|
||||
version: 6.24.0
|
||||
resolution: "react-router-dom@npm:6.24.0"
|
||||
dependencies:
|
||||
"@remix-run/router": "npm:1.16.1"
|
||||
react-router: "npm:6.23.1"
|
||||
"@remix-run/router": "npm:1.17.0"
|
||||
react-router: "npm:6.24.0"
|
||||
peerDependencies:
|
||||
react: ">=16.8"
|
||||
react-dom: ">=16.8"
|
||||
checksum: 10c0/01b954d7d0ff4c53bb2edbc816458f3fad1ce9ee49a4dfdc5c866065c23026c9cce429b46b754cbaebb83b22cfe5f605bbf441acf515e3c377cbdf021b0bec4c
|
||||
checksum: 10c0/2cb41120c1ff58fd1e187807214cf581e78e2845e5f411aa6a04f4748bd100431fd1ac5f8a45db281ea03d0d2354b66896b938c0b77adf7b343a6c1be52411de
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"react-router@npm:6.23.1":
|
||||
version: 6.23.1
|
||||
resolution: "react-router@npm:6.23.1"
|
||||
"react-router@npm:6.24.0":
|
||||
version: 6.24.0
|
||||
resolution: "react-router@npm:6.24.0"
|
||||
dependencies:
|
||||
"@remix-run/router": "npm:1.16.1"
|
||||
"@remix-run/router": "npm:1.17.0"
|
||||
peerDependencies:
|
||||
react: ">=16.8"
|
||||
checksum: 10c0/091949805745136350ab049b2a96281bf38742c9d3651019fb48ea79c5eafbfb0379f1d3e636602dd56b0ef278389e8fd25be983dc2c0ffd1103d06dfa8019f3
|
||||
checksum: 10c0/ad9c924d16dc4f5c90dff588e9a69d37488d2ad537de1ddbdf3b68561658c6e3fd1b8b12d16d50f19177f6547748c54e948d477e921f9230799ac71acfec24cf
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -7139,19 +7140,19 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"typescript-eslint@npm:^7.13.1":
|
||||
version: 7.13.1
|
||||
resolution: "typescript-eslint@npm:7.13.1"
|
||||
"typescript-eslint@npm:^7.14.1":
|
||||
version: 7.14.1
|
||||
resolution: "typescript-eslint@npm:7.14.1"
|
||||
dependencies:
|
||||
"@typescript-eslint/eslint-plugin": "npm:7.13.1"
|
||||
"@typescript-eslint/parser": "npm:7.13.1"
|
||||
"@typescript-eslint/utils": "npm:7.13.1"
|
||||
"@typescript-eslint/eslint-plugin": "npm:7.14.1"
|
||||
"@typescript-eslint/parser": "npm:7.14.1"
|
||||
"@typescript-eslint/utils": "npm:7.14.1"
|
||||
peerDependencies:
|
||||
eslint: ^8.56.0
|
||||
peerDependenciesMeta:
|
||||
typescript:
|
||||
optional: true
|
||||
checksum: 10c0/b929e865cdbf2b8b5dd417d40a6af2d76bb87a8ad3879dcde9a0f66b478906247ec3378aa7ab4c0659ddae73ba4bb15167053ff20a552e192f352797e94bee46
|
||||
checksum: 10c0/93439aa50a814a2d7e117c7d9b54982292986e3c090950961d13dcb07b804ae31e43300e094fd5d27d1208c1647ebbb95fda4bc89163b1c0b2e36e8a777a6800
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
|
||||
@@ -39,6 +39,7 @@ ESP8266React::ESP8266React(AsyncWebServer * server, FS * fs)
|
||||
response->addHeader("Content-Encoding", "gzip");
|
||||
// response->addHeader("Content-Encoding", "br"); // only works over HTTPS
|
||||
// response->addHeader("Cache-Control", "public, immutable, max-age=31536000");
|
||||
response->addHeader("Cache-Control", "must-revalidate"); // ensure that a client will check the server for a change
|
||||
response->addHeader("Last-Modified", last_modified);
|
||||
response->addHeader("ETag", hash);
|
||||
|
||||
@@ -46,6 +47,7 @@ ESP8266React::ESP8266React(AsyncWebServer * server, FS * fs)
|
||||
};
|
||||
|
||||
server->on(uri, HTTP_GET, requestHandler);
|
||||
|
||||
// Serving non matching get requests with "/index.html"
|
||||
// OPTIONS get a straight up 200 response
|
||||
if (strncmp(uri, "/index.html", 11) == 0) {
|
||||
|
||||
@@ -37,8 +37,8 @@ class Roomctrl {
|
||||
static void set_timeout(uint8_t t);
|
||||
|
||||
private:
|
||||
static constexpr uint32_t SEND_INTERVAL = 15000; // 15 sec
|
||||
static constexpr uint8_t HCS = 4; // max 4 heating circuits
|
||||
static constexpr uint32_t SEND_INTERVAL = 15000; // 15 sec
|
||||
static constexpr uint8_t HCS = 4; // max 4 heating circuits
|
||||
enum SendType : uint8_t { TEMP, HUMI };
|
||||
|
||||
static uint8_t get_hc(const uint8_t addr);
|
||||
|
||||
@@ -100,12 +100,12 @@ void Shower::loop() {
|
||||
// it is over the wait period, so assume that the shower has finished and calculate the total time and publish
|
||||
// because its unsigned long, can't have negative so check if length is less than OFFSET_TIME
|
||||
if ((timer_pause_ - timer_start_) > SHOWER_OFFSET_TIME) {
|
||||
duration_ = (timer_pause_ - timer_start_ - SHOWER_OFFSET_TIME);
|
||||
duration_ = (timer_pause_ - timer_start_ - SHOWER_OFFSET_TIME); // duration in seconds
|
||||
if (duration_ > shower_min_duration_) {
|
||||
JsonDocument doc;
|
||||
|
||||
// duration in seconds
|
||||
doc["duration"] = (duration_ / 1000UL); // seconds
|
||||
doc["duration"] = duration_; // seconds
|
||||
time_t now = time(nullptr);
|
||||
// if NTP enabled, publish timestamp
|
||||
if (now > 1576800000) { // year 2020
|
||||
@@ -114,9 +114,9 @@ void Shower::loop() {
|
||||
char dt[25];
|
||||
strftime(dt, sizeof(dt), "%FT%T%z", tm_);
|
||||
doc["timestamp"] = dt;
|
||||
LOG_INFO("shower finished %s (duration %lu s)", dt, duration_ / 1000UL);
|
||||
LOG_INFO("shower finished %s (duration %lu s)", dt, duration_);
|
||||
} else {
|
||||
LOG_INFO("shower finished (duration %lu s)", duration_ / 1000UL);
|
||||
LOG_INFO("shower finished (duration %lu s)", duration_);
|
||||
}
|
||||
Mqtt::queue_publish("shower_data", doc.as<JsonObject>());
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
#define EMSESP_APP_VERSION "3.7.0-dev.17"
|
||||
#define EMSESP_APP_VERSION "3.7.0-dev.18"
|
||||
|
||||
@@ -36,7 +36,6 @@ WebDataService::WebDataService(AsyncWebServer * server, SecurityManager * securi
|
||||
HTTP_GET,
|
||||
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { device_data(request); }, AuthenticationPredicates::IS_AUTHENTICATED));
|
||||
|
||||
|
||||
server->on(CORE_DATA_SERVICE_PATH,
|
||||
HTTP_GET,
|
||||
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { core_data(request); }, AuthenticationPredicates::IS_AUTHENTICATED));
|
||||
|
||||
@@ -65,6 +65,14 @@ GET {{host}}/api/temperaturesensor/info
|
||||
|
||||
###
|
||||
|
||||
GET {{host}}/rest/deviceData?id=3
|
||||
Content-Type: application/json
|
||||
Authorization: Bearer {{token}}
|
||||
|
||||
###
|
||||
|
||||
GET {{host}}/api/boiler/commands
|
||||
|
||||
#
|
||||
# Test on dev
|
||||
#
|
||||
|
||||
Reference in New Issue
Block a user