mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-07 00:09:51 +03:00
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
|
||||||
|
|||||||
@@ -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',
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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',
|
||||||
|
|||||||
@@ -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',
|
||||||
|
|||||||
@@ -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',
|
||||||
|
|||||||
@@ -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ı',
|
||||||
|
|||||||
@@ -426,8 +426,9 @@ const Devices: FC = () => {
|
|||||||
document.body.removeChild(downloadLink);
|
document.body.removeChild(downloadLink);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const device = { ...{ device: coreData.devices[deviceIndex] }, ...deviceData };
|
||||||
downloadBlob(
|
downloadBlob(
|
||||||
new Blob([JSON.stringify(deviceData, null, 2)], {
|
new Blob([JSON.stringify(device, null, 2)], {
|
||||||
type: 'text;charset:utf-8'
|
type: 'text;charset:utf-8'
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
@@ -650,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 +
|
||||||
@@ -660,61 +661,40 @@ const Devices: FC = () => {
|
|||||||
LL.ENTITIES(shown_data.length)}
|
LL.ENTITIES(shown_data.length)}
|
||||||
<ButtonTooltip title="Info">
|
<ButtonTooltip title="Info">
|
||||||
<IconButton onClick={() => setShowDeviceInfo(true)}>
|
<IconButton onClick={() => setShowDeviceInfo(true)}>
|
||||||
<InfoOutlinedIcon
|
<InfoOutlinedIcon color="primary" sx={{ fontSize: 18 }} />
|
||||||
color="primary"
|
|
||||||
sx={{ fontSize: 18, verticalAlign: 'middle' }}
|
|
||||||
/>
|
|
||||||
</IconButton>
|
</IconButton>
|
||||||
</ButtonTooltip>
|
</ButtonTooltip>
|
||||||
{me.admin && (
|
{me.admin && (
|
||||||
<ButtonTooltip title={LL.CUSTOMIZATIONS()}>
|
<ButtonTooltip title={LL.CUSTOMIZATIONS()}>
|
||||||
<IconButton onClick={customize}>
|
<IconButton onClick={customize}>
|
||||||
<FormatListNumberedIcon
|
<FormatListNumberedIcon color="primary" sx={{ fontSize: 18 }} />
|
||||||
color="primary"
|
|
||||||
sx={{ fontSize: 18, verticalAlign: 'middle' }}
|
|
||||||
/>
|
|
||||||
</IconButton>
|
</IconButton>
|
||||||
</ButtonTooltip>
|
</ButtonTooltip>
|
||||||
)}
|
)}
|
||||||
<ButtonTooltip title={LL.EXPORT()}>
|
<ButtonTooltip title={LL.EXPORT()}>
|
||||||
<IconButton onClick={handleDownloadCsv}>
|
<IconButton onClick={handleDownloadCsv}>
|
||||||
<DownloadIcon
|
<DownloadIcon color="primary" sx={{ fontSize: 18 }} />
|
||||||
color="primary"
|
|
||||||
sx={{ fontSize: 18, verticalAlign: 'middle' }}
|
|
||||||
/>
|
|
||||||
</IconButton>
|
</IconButton>
|
||||||
</ButtonTooltip>
|
</ButtonTooltip>
|
||||||
<ButtonTooltip title="Favorites">
|
<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
|
<StarBorderOutlinedIcon color="primary" sx={{ fontSize: 18 }} />
|
||||||
color="primary"
|
|
||||||
sx={{ fontSize: 18, verticalAlign: 'middle' }}
|
|
||||||
/>
|
|
||||||
)}
|
)}
|
||||||
</IconButton>
|
</IconButton>
|
||||||
</ButtonTooltip>
|
</ButtonTooltip>
|
||||||
<ButtonTooltip title={LL.REFRESH()}>
|
<ButtonTooltip title={LL.REFRESH()}>
|
||||||
<IconButton onClick={refreshData}>
|
<IconButton onClick={refreshData}>
|
||||||
<RefreshIcon
|
<RefreshIcon color="primary" sx={{ fontSize: 18 }} />
|
||||||
color="primary"
|
|
||||||
sx={{ fontSize: 18, verticalAlign: 'middle' }}
|
|
||||||
/>
|
|
||||||
</IconButton>
|
</IconButton>
|
||||||
</ButtonTooltip>
|
</ButtonTooltip>
|
||||||
</Typography>
|
</Typography>
|
||||||
<Grid item zeroMinWidth justifyContent="flex-end">
|
<Grid item zeroMinWidth justifyContent="flex-end">
|
||||||
<ButtonTooltip title={LL.CANCEL()}>
|
<ButtonTooltip title={LL.CANCEL()}>
|
||||||
<IconButton onClick={resetDeviceSelect}>
|
<IconButton onClick={resetDeviceSelect}>
|
||||||
<HighlightOffIcon
|
<HighlightOffIcon color="primary" sx={{ fontSize: 18 }} />
|
||||||
color="primary"
|
|
||||||
sx={{ fontSize: 18, verticalAlign: 'middle' }}
|
|
||||||
/>
|
|
||||||
</IconButton>
|
</IconButton>
|
||||||
</ButtonTooltip>
|
</ButtonTooltip>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
#define EMSESP_APP_VERSION "3.7.0-dev.17"
|
#define EMSESP_APP_VERSION "3.7.0-dev.18"
|
||||||
|
|||||||
Reference in New Issue
Block a user