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:
|
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 }}
|
||||||
|
|||||||
4
.github/workflows/sonar_check.yml
vendored
4
.github/workflows/sonar_check.yml
vendored
@@ -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:
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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',
|
||||||
|
|||||||
@@ -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',
|
||||||
|
|||||||
@@ -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é',
|
||||||
|
|||||||
@@ -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',
|
||||||
|
|||||||
@@ -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',
|
||||||
|
|||||||
@@ -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!',
|
||||||
|
|||||||
@@ -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é',
|
||||||
|
|||||||
@@ -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',
|
||||||
|
|||||||
@@ -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',
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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>());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,
|
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));
|
||||||
|
|||||||
@@ -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
|
||||||
#
|
#
|
||||||
|
|||||||
Reference in New Issue
Block a user