This commit is contained in:
MichaelDvP
2024-06-25 15:28:43 +02:00
22 changed files with 199 additions and 167 deletions

View File

@@ -10,7 +10,7 @@ jobs:
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Github Releases To Discord - name: GitHub Releases To Discord
uses: SethCohen/github-releases-to-discord@v1.13.1 uses: SethCohen/github-releases-to-discord@v1.13.1
with: with:
webhook_url: ${{ secrets.WEBHOOK_URL }} webhook_url: ${{ secrets.WEBHOOK_URL }}

View File

@@ -5,8 +5,8 @@ on:
push: push:
branches: branches:
- dev - dev
pull_request: # pull_request:
types: [opened, synchronize, reopened] # types: [opened, synchronize, reopened]
jobs: jobs:
build: build:

View File

@@ -5,7 +5,7 @@
## **IMPORTANT! BREAKING CHANGES** ## **IMPORTANT! BREAKING CHANGES**
- new device WATER shows dhw entities from MM100 and SM100 in dhw setting - 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 ## Added
@@ -40,3 +40,4 @@
- dynamic register dhw circuits for thermostat - dynamic register dhw circuits for thermostat
- removed OTA feature [#1738](https://github.com/emsesp/EMS-ESP32/issues/1738) - 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)] - 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

View File

@@ -44,7 +44,7 @@
"react-dom": "latest", "react-dom": "latest",
"react-dropzone": "^14.2.3", "react-dropzone": "^14.2.3",
"react-icons": "^5.2.1", "react-icons": "^5.2.1",
"react-router-dom": "^6.23.1", "react-router-dom": "^6.24.0",
"react-toastify": "^10.0.5", "react-toastify": "^10.0.5",
"typesafe-i18n": "^5.26.2", "typesafe-i18n": "^5.26.2",
"typescript": "^5.5.2" "typescript": "^5.5.2"
@@ -53,7 +53,7 @@
"@babel/core": "^7.24.7", "@babel/core": "^7.24.7",
"@eslint/js": "^9.5.0", "@eslint/js": "^9.5.0",
"@preact/compat": "^17.1.2", "@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", "@trivago/prettier-plugin-sort-imports": "^4.3.0",
"@types/babel__core": "^7", "@types/babel__core": "^7",
"concurrently": "^8.2.2", "concurrently": "^8.2.2",
@@ -63,7 +63,7 @@
"prettier": "^3.3.2", "prettier": "^3.3.2",
"rollup-plugin-visualizer": "^5.12.0", "rollup-plugin-visualizer": "^5.12.0",
"terser": "^5.31.1", "terser": "^5.31.1",
"typescript-eslint": "^7.13.1", "typescript-eslint": "^7.14.1",
"vite": "^5.3.1", "vite": "^5.3.1",
"vite-plugin-imagemin": "^0.6.1", "vite-plugin-imagemin": "^0.6.1",
"vite-tsconfig-paths": "^4.3.2" "vite-tsconfig-paths": "^4.3.2"

View File

@@ -163,9 +163,9 @@ const de: Translation = {
SUPPORT_INFORMATION: 'Unterstützende Informationen', SUPPORT_INFORMATION: 'Unterstützende Informationen',
HELP_INFORMATION_1: 'EMS-ESP Konfigurationsanweisungen und mehr finden Sie im Online-Wiki', 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_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_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', UPLOAD: 'Hochladen',
DOWNLOAD: '{{H|h|h}}erunterladen', DOWNLOAD: '{{H|h|h}}erunterladen',
ABORTED: 'abgebrochen', ABORTED: 'abgebrochen',

View File

@@ -23,7 +23,7 @@ const en: Translation = {
ONOFF: 'on/off', ONOFF: 'on/off',
TYPE: 'Type', TYPE: 'Type',
DESCRIPTION: 'Description', DESCRIPTION: 'Description',
ENTITIES: 'Entities', ENTITIES: 'entities',
REFRESH: 'Refresh', REFRESH: 'Refresh',
EXPORT: 'Export', EXPORT: 'Export',
DEVICE_DETAILS: 'Device Details', DEVICE_DETAILS: 'Device Details',
@@ -165,7 +165,7 @@ const en: Translation = {
HELP_INFORMATION_2: 'For live community chat join our Discord server', HELP_INFORMATION_2: 'For live community chat join our Discord server',
HELP_INFORMATION_3: 'To request a feature or report a bug', 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_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', UPLOAD: 'Upload',
DOWNLOAD: '{{D|d|d}}ownload', DOWNLOAD: '{{D|d|d}}ownload',
ABORTED: 'aborted', ABORTED: 'aborted',

View File

@@ -23,7 +23,7 @@ const fr: Translation = {
ONOFF: 'on/off', ONOFF: 'on/off',
TYPE: 'Type', TYPE: 'Type',
DESCRIPTION: 'Description', DESCRIPTION: 'Description',
ENTITIES: 'Entités', ENTITIES: 'entités',
REFRESH: 'Rafraîchir', REFRESH: 'Rafraîchir',
EXPORT: 'Exporter', EXPORT: 'Exporter',
DEVICE_DETAILS: "Détails de l'appareil", 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_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_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_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', UPLOAD: 'Upload',
DOWNLOAD: '{{D|d|d}}ownload', DOWNLOAD: '{{D|d|d}}ownload',
ABORTED: 'annulé', ABORTED: 'annulé',

View File

@@ -23,7 +23,7 @@ const it: Translation = {
ONOFF: 'on/off', ONOFF: 'on/off',
TYPE: 'Tipo', TYPE: 'Tipo',
DESCRIPTION: 'Descrizione', DESCRIPTION: 'Descrizione',
ENTITIES: 'Entità', ENTITIES: 'entità',
REFRESH: 'Ricaricare', REFRESH: 'Ricaricare',
EXPORT: 'Esporta', EXPORT: 'Esporta',
DEVICE_DETAILS: 'Dettagli dispositivo', 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_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_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_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', UPLOAD: 'Carica',
DOWNLOAD: 'Scarica', DOWNLOAD: 'Scarica',
ABORTED: 'Annullato', ABORTED: 'Annullato',

View File

@@ -23,7 +23,7 @@ const nl: Translation = {
ONOFF: 'aan/uit', ONOFF: 'aan/uit',
TYPE: 'Type', TYPE: 'Type',
DESCRIPTION: 'Beschrijving', DESCRIPTION: 'Beschrijving',
ENTITIES: 'Entiteiten', ENTITIES: 'entiteiten',
REFRESH: 'Ververs', REFRESH: 'Ververs',
EXPORT: 'Export', EXPORT: 'Export',
DEVICE_DETAILS: 'Device Gegevens', 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_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_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_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', UPLOAD: 'Upload',
DOWNLOAD: '{{D|d|d}}ownload', DOWNLOAD: '{{D|d|d}}ownload',
ABORTED: 'afgebroken', ABORTED: 'afgebroken',

View File

@@ -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_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_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_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', UPLOAD: 'Wysyłanie',
DOWNLOAD: '{{P|p||P}}obier{{anie|z||z}}', DOWNLOAD: '{{P|p||P}}obier{{anie|z||z}}',
ABORTED: 'zostało przerwane!', ABORTED: 'zostało przerwane!',

View File

@@ -23,7 +23,7 @@ const sk: Translation = {
ONOFF: 'zap/vyp', ONOFF: 'zap/vyp',
TYPE: 'Typ', TYPE: 'Typ',
DESCRIPTION: 'Popis', DESCRIPTION: 'Popis',
ENTITIES: 'Entity', ENTITIES: 'entity',
REFRESH: 'Obnoviť', REFRESH: 'Obnoviť',
EXPORT: 'Export', EXPORT: 'Export',
DEVICE_DETAILS: 'Detaily zariadenia', 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_2: 'Pre živý komunitný chat sa pripojte na náš Discord server',
HELP_INFORMATION_3: 'Ak chcete požiadať o funkciu alebo nahlásiť chybu', HELP_INFORMATION_3: 'Ak chcete požiadať o funkciu alebo nahlásiť chybu',
HELP_INFORMATION_4: 'nezabudnite si stiahnuť a pripojiť informácie o vašom systéme, aby ste mohli rýchlejšie reagovať pri nahlasovaní problému', HELP_INFORMATION_4: 'nezabudnite si stiahnuť a pripojiť informácie o vašom systéme, aby ste mohli rýchlejšie reagovať pri nahlasovaní problému',
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ť', UPLOAD: 'Nahrať',
DOWNLOAD: '{{S|s|s}}tiahnuť', DOWNLOAD: '{{S|s|s}}tiahnuť',
ABORTED: 'zrušené', ABORTED: 'zrušené',

View File

@@ -23,7 +23,7 @@ const sv: Translation = {
ONOFF: 'på/av', ONOFF: 'på/av',
TYPE: 'Typ', TYPE: 'Typ',
DESCRIPTION: 'Beskrivning', DESCRIPTION: 'Beskrivning',
ENTITIES: 'Entiteter', ENTITIES: 'entiteter',
REFRESH: 'Uppdatera', REFRESH: 'Uppdatera',
EXPORT: 'Exportera', EXPORT: 'Exportera',
DEVICE_DETAILS: 'Enhetsdetaljer', DEVICE_DETAILS: 'Enhetsdetaljer',

View File

@@ -23,7 +23,7 @@ const tr: Translation = {
ONOFF: 'açık/kapalı', ONOFF: 'açık/kapalı',
TYPE: 'Tür', TYPE: 'Tür',
DESCRIPTION: 'Açıklama', DESCRIPTION: 'Açıklama',
ENTITIES: 'Varlıklar', ENTITIES: 'varlıklar',
REFRESH: 'Yenile', REFRESH: 'Yenile',
EXPORT: 'Dışarı al', EXPORT: 'Dışarı al',
DEVICE_DETAILS: 'Cihaz Ayrıntıları', 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_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_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_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', UPLOAD: 'Yükleme',
DOWNLOAD: '{{İ|i|i}}İndirme', DOWNLOAD: '{{İ|i|i}}İndirme',
ABORTED: 'iptal edildi', ABORTED: 'iptal edildi',

View File

@@ -36,7 +36,11 @@ import {
List, List,
ListItem, ListItem,
ListItemText, ListItemText,
Typography Tooltip,
type TooltipProps,
Typography,
styled,
tooltipClasses
} from '@mui/material'; } from '@mui/material';
import { useRowSelect } from '@table-library/react-table-library/select'; 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) => { const getSortIcon = (state: State, sortKey: unknown) => {
if (state.sortKey === sortKey && state.reverse) { if (state.sortKey === sortKey && state.reverse) {
return <KeyboardArrowDownOutlinedIcon />; return <KeyboardArrowDownOutlinedIcon />;
@@ -399,13 +417,23 @@ const Devices: FC = () => {
'\r\n' '\r\n'
); );
const csvFile = new Blob([csvData], { type: 'text/csv;charset:utf-8' }); const downloadBlob = (blob: Blob) => {
const downloadLink = document.createElement('a'); const downloadLink = document.createElement('a');
downloadLink.download = filename; downloadLink.download = filename;
downloadLink.href = window.URL.createObjectURL(csvFile); downloadLink.href = window.URL.createObjectURL(blob);
document.body.appendChild(downloadLink); document.body.appendChild(downloadLink);
downloadLink.click(); downloadLink.click();
document.body.removeChild(downloadLink); 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(() => { useEffect(() => {
@@ -608,11 +636,11 @@ const Devices: FC = () => {
backgroundColor: 'black', backgroundColor: 'black',
position: 'absolute', position: 'absolute',
left: () => leftOffset(), left: () => leftOffset(),
right: 16, right: 0,
bottom: 0, bottom: 0,
top: 128, top: 64,
zIndex: 'modal', zIndex: 'modal',
maxHeight: () => size[1] - 189, maxHeight: () => size[1] - 126,
border: '1px solid #177ac9' border: '1px solid #177ac9'
}} }}
> >
@@ -623,7 +651,7 @@ const Devices: FC = () => {
</Typography> </Typography>
<Grid container justifyContent="space-between"> <Grid container justifyContent="space-between">
<Typography sx={{ ml: 1 }} variant="subtitle2" color="primary"> <Typography sx={{ ml: 1 }} variant="subtitle2" color="grey">
{LL.SHOWING() + {LL.SHOWING() +
' ' + ' ' +
shown_data.length + shown_data.length +
@@ -631,53 +659,44 @@ const Devices: FC = () => {
coreData.devices[deviceIndex].e + coreData.devices[deviceIndex].e +
' ' + ' ' +
LL.ENTITIES(shown_data.length)} LL.ENTITIES(shown_data.length)}
<IconButton onClick={() => setShowDeviceInfo(true)}> <ButtonTooltip title="Info">
<InfoOutlinedIcon <IconButton onClick={() => setShowDeviceInfo(true)}>
color="primary" <InfoOutlinedIcon color="primary" sx={{ fontSize: 18 }} />
sx={{ fontSize: 18, verticalAlign: 'middle' }}
/>
</IconButton>
{me.admin && (
<IconButton onClick={customize}>
<FormatListNumberedIcon
color="primary"
sx={{ fontSize: 18, verticalAlign: 'middle' }}
/>
</IconButton> </IconButton>
</ButtonTooltip>
{me.admin && (
<ButtonTooltip title={LL.CUSTOMIZATIONS()}>
<IconButton onClick={customize}>
<FormatListNumberedIcon color="primary" sx={{ fontSize: 18 }} />
</IconButton>
</ButtonTooltip>
)} )}
<IconButton onClick={handleDownloadCsv}> <ButtonTooltip title={LL.EXPORT()}>
<DownloadIcon <IconButton onClick={handleDownloadCsv}>
color="primary" <DownloadIcon color="primary" sx={{ fontSize: 18 }} />
sx={{ fontSize: 18, verticalAlign: 'middle' }} </IconButton>
/> </ButtonTooltip>
</IconButton> <ButtonTooltip title="Favorites">
<IconButton onClick={() => setOnlyFav(!onlyFav)}> <IconButton onClick={() => setOnlyFav(!onlyFav)}>
{onlyFav ? ( {onlyFav ? (
<StarIcon <StarIcon color="primary" sx={{ fontSize: 18 }} />
color="primary" ) : (
sx={{ fontSize: 18, verticalAlign: 'middle' }} <StarBorderOutlinedIcon color="primary" sx={{ fontSize: 18 }} />
/> )}
) : ( </IconButton>
<StarBorderOutlinedIcon </ButtonTooltip>
color="primary" <ButtonTooltip title={LL.REFRESH()}>
sx={{ fontSize: 18, verticalAlign: 'middle' }} <IconButton onClick={refreshData}>
/> <RefreshIcon color="primary" sx={{ fontSize: 18 }} />
)} </IconButton>
</IconButton> </ButtonTooltip>
<IconButton onClick={refreshData}>
<RefreshIcon
color="primary"
sx={{ fontSize: 18, verticalAlign: 'middle' }}
/>
</IconButton>
</Typography> </Typography>
<Grid item zeroMinWidth justifyContent="flex-end"> <Grid item zeroMinWidth justifyContent="flex-end">
<IconButton onClick={resetDeviceSelect}> <ButtonTooltip title={LL.CANCEL()}>
<HighlightOffIcon <IconButton onClick={resetDeviceSelect}>
color="primary" <HighlightOffIcon color="primary" sx={{ fontSize: 18 }} />
sx={{ fontSize: 18, verticalAlign: 'middle' }} </IconButton>
/> </ButtonTooltip>
</IconButton>
</Grid> </Grid>
</Grid> </Grid>
</Box> </Box>

View File

@@ -297,7 +297,7 @@ const SchedulerDialog = ({
name="time" name="time"
label={isCondition ? 'Condition' : 'On Change Value'} label={isCondition ? 'Condition' : 'On Change Value'}
fullWidth fullWidth
value={editItem.time == "00:00" ? editItem.time = "" : editItem.time} value={editItem.time == '00:00' ? (editItem.time = '') : editItem.time}
margin="normal" margin="normal"
onChange={updateFormValue} onChange={updateFormValue}
/> />
@@ -307,7 +307,9 @@ const SchedulerDialog = ({
name="time" name="time"
type="time" type="time"
label={isTimer ? LL.TIMER(1) : LL.TIME(1)} 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" margin="normal"
onChange={updateFormValue} onChange={updateFormValue}
/> />

View File

@@ -1341,10 +1341,11 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@preact/preset-vite@npm:^2.8.2": "@preact/preset-vite@npm:^2.8.3":
version: 2.8.2 version: 2.8.3
resolution: "@preact/preset-vite@npm:2.8.2" resolution: "@preact/preset-vite@npm:2.8.3"
dependencies: dependencies:
"@babel/code-frame": "npm:^7.22.13"
"@babel/plugin-transform-react-jsx": "npm:^7.22.15" "@babel/plugin-transform-react-jsx": "npm:^7.22.15"
"@babel/plugin-transform-react-jsx-development": "npm:^7.22.5" "@babel/plugin-transform-react-jsx-development": "npm:^7.22.5"
"@prefresh/vite": "npm:^2.4.1" "@prefresh/vite": "npm:^2.4.1"
@@ -1360,7 +1361,7 @@ __metadata:
peerDependencies: peerDependencies:
"@babel/core": 7.x "@babel/core": 7.x
vite: 2.x || 3.x || 4.x || 5.x vite: 2.x || 3.x || 4.x || 5.x
checksum: 10c0/79a26f70ae7a129bbaf3c1969f78df2013c64202184c47e19a44e255d00e7e52b7f8071017da77c8f587121e1df02e9097a03a0791acb1bc8c52b689ac8287a4 checksum: 10c0/984b47d24491d20ea9f0787adbef3515c3bd4cdfd77154cdb84e9038fabb5db09a0c76237557aff88b3da26cff6146ac616c2375579143fc511afcf7baf63927
languageName: node languageName: node
linkType: hard linkType: hard
@@ -1403,10 +1404,10 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@remix-run/router@npm:1.16.1": "@remix-run/router@npm:1.17.0":
version: 1.16.1 version: 1.17.0
resolution: "@remix-run/router@npm:1.16.1" resolution: "@remix-run/router@npm:1.17.0"
checksum: 10c0/5f1b0aef4924830eeab9c86dcaa5af8157066e5de65b449e7fdf406532b2384828a46a447c31b0735fd713a06938dd88bfd4e566d9989be70c770457dda16c92 checksum: 10c0/6f39cb81c5dec3d3cb901cfc05ef1c745d23192def7d83e6d1a53c43cbb5d7ff488055fd1418ac72f904ff41b3d3ca339d223677994150f276c648123ce166f7
languageName: node languageName: node
linkType: hard linkType: hard
@@ -1860,15 +1861,15 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@typescript-eslint/eslint-plugin@npm:7.13.1": "@typescript-eslint/eslint-plugin@npm:7.14.1":
version: 7.13.1 version: 7.14.1
resolution: "@typescript-eslint/eslint-plugin@npm:7.13.1" resolution: "@typescript-eslint/eslint-plugin@npm:7.14.1"
dependencies: dependencies:
"@eslint-community/regexpp": "npm:^4.10.0" "@eslint-community/regexpp": "npm:^4.10.0"
"@typescript-eslint/scope-manager": "npm:7.13.1" "@typescript-eslint/scope-manager": "npm:7.14.1"
"@typescript-eslint/type-utils": "npm:7.13.1" "@typescript-eslint/type-utils": "npm:7.14.1"
"@typescript-eslint/utils": "npm:7.13.1" "@typescript-eslint/utils": "npm:7.14.1"
"@typescript-eslint/visitor-keys": "npm:7.13.1" "@typescript-eslint/visitor-keys": "npm:7.14.1"
graphemer: "npm:^1.4.0" graphemer: "npm:^1.4.0"
ignore: "npm:^5.3.1" ignore: "npm:^5.3.1"
natural-compare: "npm:^1.4.0" natural-compare: "npm:^1.4.0"
@@ -1879,44 +1880,44 @@ __metadata:
peerDependenciesMeta: peerDependenciesMeta:
typescript: typescript:
optional: true optional: true
checksum: 10c0/6677f9c090a25978e4e20c24d67365ad89ca1208ebd2bb103d3f1e15a7deea22dea538e9f61f3a3d4f03a741179acf58c02ad7d03f805aceabb78929a8dc1908 checksum: 10c0/7c2b9b98a38d78326b0ff7348fe001203eda10817ca7834a7a01f492ae7c2508469bbafaa933208d6459f8ff6685277685983cf6f6843e556a6ab2aa5c05080c
languageName: node languageName: node
linkType: hard linkType: hard
"@typescript-eslint/parser@npm:7.13.1": "@typescript-eslint/parser@npm:7.14.1":
version: 7.13.1 version: 7.14.1
resolution: "@typescript-eslint/parser@npm:7.13.1" resolution: "@typescript-eslint/parser@npm:7.14.1"
dependencies: dependencies:
"@typescript-eslint/scope-manager": "npm:7.13.1" "@typescript-eslint/scope-manager": "npm:7.14.1"
"@typescript-eslint/types": "npm:7.13.1" "@typescript-eslint/types": "npm:7.14.1"
"@typescript-eslint/typescript-estree": "npm:7.13.1" "@typescript-eslint/typescript-estree": "npm:7.14.1"
"@typescript-eslint/visitor-keys": "npm:7.13.1" "@typescript-eslint/visitor-keys": "npm:7.14.1"
debug: "npm:^4.3.4" debug: "npm:^4.3.4"
peerDependencies: peerDependencies:
eslint: ^8.56.0 eslint: ^8.56.0
peerDependenciesMeta: peerDependenciesMeta:
typescript: typescript:
optional: true optional: true
checksum: 10c0/455d067bfb81fa3d133c75ebc4d8d7f2de5001441585f5b58dc8b0d4380d7397dc3745e11a9299d596dfa581265fdcdea6c28b2ddd2d3b542869c851ecd52fcd checksum: 10c0/db3169d4852685cfb27db741c557f58a3e52104bfacc7621beb7c94ec36ac2a08d4e410ac86745db52f482fbfc87e99fa0a26c1d7a10d37a215cce85e1661f0e
languageName: node languageName: node
linkType: hard linkType: hard
"@typescript-eslint/scope-manager@npm:7.13.1": "@typescript-eslint/scope-manager@npm:7.14.1":
version: 7.13.1 version: 7.14.1
resolution: "@typescript-eslint/scope-manager@npm:7.13.1" resolution: "@typescript-eslint/scope-manager@npm:7.14.1"
dependencies: dependencies:
"@typescript-eslint/types": "npm:7.13.1" "@typescript-eslint/types": "npm:7.14.1"
"@typescript-eslint/visitor-keys": "npm:7.13.1" "@typescript-eslint/visitor-keys": "npm:7.14.1"
checksum: 10c0/3d8770bf9c89e7a07e54efbc3dac6df02c0ce49d49575076111ac663566c90cbb852f06c94a311db7c0aec1fab0417f3ef6e601b3852aa30bed75c65f4f076f4 checksum: 10c0/f8c05a0d6f8de4cc19b90a4da308817c66e53f36f7ec48f6cc23e93c7399bc418643d8135933aaf5fc013199cbef0e1ea4223f5147db5ca401b239eaf087011e
languageName: node languageName: node
linkType: hard linkType: hard
"@typescript-eslint/type-utils@npm:7.13.1": "@typescript-eslint/type-utils@npm:7.14.1":
version: 7.13.1 version: 7.14.1
resolution: "@typescript-eslint/type-utils@npm:7.13.1" resolution: "@typescript-eslint/type-utils@npm:7.14.1"
dependencies: dependencies:
"@typescript-eslint/typescript-estree": "npm:7.13.1" "@typescript-eslint/typescript-estree": "npm:7.14.1"
"@typescript-eslint/utils": "npm:7.13.1" "@typescript-eslint/utils": "npm:7.14.1"
debug: "npm:^4.3.4" debug: "npm:^4.3.4"
ts-api-utils: "npm:^1.3.0" ts-api-utils: "npm:^1.3.0"
peerDependencies: peerDependencies:
@@ -1924,23 +1925,23 @@ __metadata:
peerDependenciesMeta: peerDependenciesMeta:
typescript: typescript:
optional: true optional: true
checksum: 10c0/c02305dccb0b2c7dcc9249230078c83e851ee589f93e08eb6cdc0b4c38d78d85ef4996631ac427836ee9d0a868ac031417feb74a6e4d0600096f41ca3c0e99a0 checksum: 10c0/bd1c4a8db6273e24156fb10da2cbeb52b4eb03f819da193d4b6bd5a95db3b5524c6fe00d088308d8855b9ae60a3b82afa3a06e89982a09a8573561da960758fd
languageName: node languageName: node
linkType: hard linkType: hard
"@typescript-eslint/types@npm:7.13.1": "@typescript-eslint/types@npm:7.14.1":
version: 7.13.1 version: 7.14.1
resolution: "@typescript-eslint/types@npm:7.13.1" resolution: "@typescript-eslint/types@npm:7.14.1"
checksum: 10c0/38a01004e11259e457ae2fd02300ef362a3268a8fc70addfbf1508e2edcaca72da2f0f8771e42c1cb9f191c1f754af583cdcaebd830c8e3c3f796dcf30d3c3a8 checksum: 10c0/5b7bda83c47a9b386482e63447c6b0ed7bd4e82eb43f11a180c6e2f3d2e7a2828f57bcbed82196ad761c49e363cccf4c81a89f1fc976e9f5f0a79dcc928fa2d2
languageName: node languageName: node
linkType: hard linkType: hard
"@typescript-eslint/typescript-estree@npm:7.13.1": "@typescript-eslint/typescript-estree@npm:7.14.1":
version: 7.13.1 version: 7.14.1
resolution: "@typescript-eslint/typescript-estree@npm:7.13.1" resolution: "@typescript-eslint/typescript-estree@npm:7.14.1"
dependencies: dependencies:
"@typescript-eslint/types": "npm:7.13.1" "@typescript-eslint/types": "npm:7.14.1"
"@typescript-eslint/visitor-keys": "npm:7.13.1" "@typescript-eslint/visitor-keys": "npm:7.14.1"
debug: "npm:^4.3.4" debug: "npm:^4.3.4"
globby: "npm:^11.1.0" globby: "npm:^11.1.0"
is-glob: "npm:^4.0.3" is-glob: "npm:^4.0.3"
@@ -1950,31 +1951,31 @@ __metadata:
peerDependenciesMeta: peerDependenciesMeta:
typescript: typescript:
optional: true optional: true
checksum: 10c0/bd5c8951ae79e8eacd05ff100def02926c633045a1a54426f98f20b4ca31c485968af3226dd7939934dfaf36a6b5fcb3386948e2a7d763ddee2db905ac187ebc checksum: 10c0/a8da9bcc4de3334a225424946abd99374de05c42098455419224bc0f46bb1b66115f8bd6ae268461294b90943ed4a407bcd255c0fa60eb76ba4cdc5fc7c20855
languageName: node languageName: node
linkType: hard linkType: hard
"@typescript-eslint/utils@npm:7.13.1": "@typescript-eslint/utils@npm:7.14.1":
version: 7.13.1 version: 7.14.1
resolution: "@typescript-eslint/utils@npm:7.13.1" resolution: "@typescript-eslint/utils@npm:7.14.1"
dependencies: dependencies:
"@eslint-community/eslint-utils": "npm:^4.4.0" "@eslint-community/eslint-utils": "npm:^4.4.0"
"@typescript-eslint/scope-manager": "npm:7.13.1" "@typescript-eslint/scope-manager": "npm:7.14.1"
"@typescript-eslint/types": "npm:7.13.1" "@typescript-eslint/types": "npm:7.14.1"
"@typescript-eslint/typescript-estree": "npm:7.13.1" "@typescript-eslint/typescript-estree": "npm:7.14.1"
peerDependencies: peerDependencies:
eslint: ^8.56.0 eslint: ^8.56.0
checksum: 10c0/d2f6be42a80608ed265b34a5f6a0c97dc0b627d53b91e83d87c7d67541cb5b3c038e7320026b4ad8dfafe1ac07a0554efa8fe7673f54d74b68c253d6f9519bb6 checksum: 10c0/c7f635a3c2c6c085e1d51a52088e55cad9d7e1257b1f60378e5eeb6eb0871db027d42747e9ef60a2f557cf9dd68b2ce014d488d795db8f771506290b164b0e5a
languageName: node languageName: node
linkType: hard linkType: hard
"@typescript-eslint/visitor-keys@npm:7.13.1": "@typescript-eslint/visitor-keys@npm:7.14.1":
version: 7.13.1 version: 7.14.1
resolution: "@typescript-eslint/visitor-keys@npm:7.13.1" resolution: "@typescript-eslint/visitor-keys@npm:7.14.1"
dependencies: dependencies:
"@typescript-eslint/types": "npm:7.13.1" "@typescript-eslint/types": "npm:7.14.1"
eslint-visitor-keys: "npm:^3.4.3" eslint-visitor-keys: "npm:^3.4.3"
checksum: 10c0/23c1bb896173cadfb33e3801420a70aa2f0481384caa3b534b04f7920acdb9d8f7d635fcaf1f8c7fc78ebce71b8f2435391608d120091761ad2e2c00eb870832 checksum: 10c0/39ac489990fcfdcee442f27658431a0eb44ccf694f701a45df2a108c47cea9582e0955bff0d449047549149385f72895a5d7e6c1622ece1fe32594b7cecb85f3
languageName: node languageName: node
linkType: hard linkType: hard
@@ -1991,7 +1992,7 @@ __metadata:
"@mui/icons-material": "npm:^5.15.20" "@mui/icons-material": "npm:^5.15.20"
"@mui/material": "npm:^5.15.20" "@mui/material": "npm:^5.15.20"
"@preact/compat": "npm:^17.1.2" "@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" "@table-library/react-table-library": "npm:4.1.7"
"@trivago/prettier-plugin-sort-imports": "npm:^4.3.0" "@trivago/prettier-plugin-sort-imports": "npm:^4.3.0"
"@types/babel__core": "npm:^7" "@types/babel__core": "npm:^7"
@@ -2015,13 +2016,13 @@ __metadata:
react-dom: "npm:latest" react-dom: "npm:latest"
react-dropzone: "npm:^14.2.3" react-dropzone: "npm:^14.2.3"
react-icons: "npm:^5.2.1" 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" react-toastify: "npm:^10.0.5"
rollup-plugin-visualizer: "npm:^5.12.0" rollup-plugin-visualizer: "npm:^5.12.0"
terser: "npm:^5.31.1" terser: "npm:^5.31.1"
typesafe-i18n: "npm:^5.26.2" typesafe-i18n: "npm:^5.26.2"
typescript: "npm:^5.5.2" typescript: "npm:^5.5.2"
typescript-eslint: "npm:^7.13.1" typescript-eslint: "npm:^7.14.1"
vite: "npm:^5.3.1" vite: "npm:^5.3.1"
vite-plugin-imagemin: "npm:^0.6.1" vite-plugin-imagemin: "npm:^0.6.1"
vite-tsconfig-paths: "npm:^4.3.2" vite-tsconfig-paths: "npm:^4.3.2"
@@ -6102,27 +6103,27 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"react-router-dom@npm:^6.23.1": "react-router-dom@npm:^6.24.0":
version: 6.23.1 version: 6.24.0
resolution: "react-router-dom@npm:6.23.1" resolution: "react-router-dom@npm:6.24.0"
dependencies: dependencies:
"@remix-run/router": "npm:1.16.1" "@remix-run/router": "npm:1.17.0"
react-router: "npm:6.23.1" react-router: "npm:6.24.0"
peerDependencies: peerDependencies:
react: ">=16.8" react: ">=16.8"
react-dom: ">=16.8" react-dom: ">=16.8"
checksum: 10c0/01b954d7d0ff4c53bb2edbc816458f3fad1ce9ee49a4dfdc5c866065c23026c9cce429b46b754cbaebb83b22cfe5f605bbf441acf515e3c377cbdf021b0bec4c checksum: 10c0/2cb41120c1ff58fd1e187807214cf581e78e2845e5f411aa6a04f4748bd100431fd1ac5f8a45db281ea03d0d2354b66896b938c0b77adf7b343a6c1be52411de
languageName: node languageName: node
linkType: hard linkType: hard
"react-router@npm:6.23.1": "react-router@npm:6.24.0":
version: 6.23.1 version: 6.24.0
resolution: "react-router@npm:6.23.1" resolution: "react-router@npm:6.24.0"
dependencies: dependencies:
"@remix-run/router": "npm:1.16.1" "@remix-run/router": "npm:1.17.0"
peerDependencies: peerDependencies:
react: ">=16.8" react: ">=16.8"
checksum: 10c0/091949805745136350ab049b2a96281bf38742c9d3651019fb48ea79c5eafbfb0379f1d3e636602dd56b0ef278389e8fd25be983dc2c0ffd1103d06dfa8019f3 checksum: 10c0/ad9c924d16dc4f5c90dff588e9a69d37488d2ad537de1ddbdf3b68561658c6e3fd1b8b12d16d50f19177f6547748c54e948d477e921f9230799ac71acfec24cf
languageName: node languageName: node
linkType: hard linkType: hard
@@ -7139,19 +7140,19 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"typescript-eslint@npm:^7.13.1": "typescript-eslint@npm:^7.14.1":
version: 7.13.1 version: 7.14.1
resolution: "typescript-eslint@npm:7.13.1" resolution: "typescript-eslint@npm:7.14.1"
dependencies: dependencies:
"@typescript-eslint/eslint-plugin": "npm:7.13.1" "@typescript-eslint/eslint-plugin": "npm:7.14.1"
"@typescript-eslint/parser": "npm:7.13.1" "@typescript-eslint/parser": "npm:7.14.1"
"@typescript-eslint/utils": "npm:7.13.1" "@typescript-eslint/utils": "npm:7.14.1"
peerDependencies: peerDependencies:
eslint: ^8.56.0 eslint: ^8.56.0
peerDependenciesMeta: peerDependenciesMeta:
typescript: typescript:
optional: true optional: true
checksum: 10c0/b929e865cdbf2b8b5dd417d40a6af2d76bb87a8ad3879dcde9a0f66b478906247ec3378aa7ab4c0659ddae73ba4bb15167053ff20a552e192f352797e94bee46 checksum: 10c0/93439aa50a814a2d7e117c7d9b54982292986e3c090950961d13dcb07b804ae31e43300e094fd5d27d1208c1647ebbb95fda4bc89163b1c0b2e36e8a777a6800
languageName: node languageName: node
linkType: hard linkType: hard

View File

@@ -39,6 +39,7 @@ ESP8266React::ESP8266React(AsyncWebServer * server, FS * fs)
response->addHeader("Content-Encoding", "gzip"); response->addHeader("Content-Encoding", "gzip");
// response->addHeader("Content-Encoding", "br"); // only works over HTTPS // response->addHeader("Content-Encoding", "br"); // only works over HTTPS
// response->addHeader("Cache-Control", "public, immutable, max-age=31536000"); // 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("Last-Modified", last_modified);
response->addHeader("ETag", hash); response->addHeader("ETag", hash);
@@ -46,6 +47,7 @@ ESP8266React::ESP8266React(AsyncWebServer * server, FS * fs)
}; };
server->on(uri, HTTP_GET, requestHandler); server->on(uri, HTTP_GET, requestHandler);
// Serving non matching get requests with "/index.html" // Serving non matching get requests with "/index.html"
// OPTIONS get a straight up 200 response // OPTIONS get a straight up 200 response
if (strncmp(uri, "/index.html", 11) == 0) { if (strncmp(uri, "/index.html", 11) == 0) {

View File

@@ -37,8 +37,8 @@ class Roomctrl {
static void set_timeout(uint8_t t); static void set_timeout(uint8_t t);
private: private:
static constexpr uint32_t SEND_INTERVAL = 15000; // 15 sec static constexpr uint32_t SEND_INTERVAL = 15000; // 15 sec
static constexpr uint8_t HCS = 4; // max 4 heating circuits static constexpr uint8_t HCS = 4; // max 4 heating circuits
enum SendType : uint8_t { TEMP, HUMI }; enum SendType : uint8_t { TEMP, HUMI };
static uint8_t get_hc(const uint8_t addr); static uint8_t get_hc(const uint8_t addr);

View File

@@ -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 // 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 // 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) { 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_) { if (duration_ > shower_min_duration_) {
JsonDocument doc; JsonDocument doc;
// duration in seconds // duration in seconds
doc["duration"] = (duration_ / 1000UL); // seconds doc["duration"] = duration_; // seconds
time_t now = time(nullptr); time_t now = time(nullptr);
// if NTP enabled, publish timestamp // if NTP enabled, publish timestamp
if (now > 1576800000) { // year 2020 if (now > 1576800000) { // year 2020
@@ -114,9 +114,9 @@ void Shower::loop() {
char dt[25]; char dt[25];
strftime(dt, sizeof(dt), "%FT%T%z", tm_); strftime(dt, sizeof(dt), "%FT%T%z", tm_);
doc["timestamp"] = dt; 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 { } 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>()); Mqtt::queue_publish("shower_data", doc.as<JsonObject>());
} }

View File

@@ -1 +1 @@
#define EMSESP_APP_VERSION "3.7.0-dev.17" #define EMSESP_APP_VERSION "3.7.0-dev.18"

View File

@@ -36,7 +36,6 @@ WebDataService::WebDataService(AsyncWebServer * server, SecurityManager * securi
HTTP_GET, HTTP_GET,
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { device_data(request); }, AuthenticationPredicates::IS_AUTHENTICATED)); securityManager->wrapRequest([this](AsyncWebServerRequest * request) { device_data(request); }, AuthenticationPredicates::IS_AUTHENTICATED));
server->on(CORE_DATA_SERVICE_PATH, server->on(CORE_DATA_SERVICE_PATH,
HTTP_GET, HTTP_GET,
securityManager->wrapRequest([this](AsyncWebServerRequest * request) { core_data(request); }, AuthenticationPredicates::IS_AUTHENTICATED)); securityManager->wrapRequest([this](AsyncWebServerRequest * request) { core_data(request); }, AuthenticationPredicates::IS_AUTHENTICATED));

View File

@@ -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 # Test on dev
# #