diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index e9dc87b96..0cd015359 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -35,11 +35,11 @@ - RC310 cooling parameters [#1857](https://github.com/emsesp/EMS-ESP32/issues/1857) - command `api/device/entities` [#1897](https://github.com/emsesp/EMS-ESP32/issues/1897) - switchprogmode [#1903] -- Autodetect and download firmware upgrades via the WebUI +- autodetect and download firmware upgrades via the WebUI - command 'show log' that lists out the current weblog buffer, showing last messages. - default web log buffer to 25 lines for ESP32s with no PSRAM - Try and determine correct board profile if none is set -- Auto Scroll in WebLog UI - reduced delay so incoming logs are faster +- auto Scroll in WebLog UI - reduced delay so incoming logs are faster ## Fixed diff --git a/README.md b/README.md index b157e14a9..81711ded8 100644 --- a/README.md +++ b/README.md @@ -14,43 +14,47 @@ **EMS-ESP** is an open-source firmware for the Espressif ESP32 microcontroller that communicates with **EMS** (Energy Management System) based equipment from manufacturers like Bosch, Buderus, Nefit, Junkers, Worcester and Sieger. It requires a small gateway circuit to interface with the EMS bus which can be purchased from or custom built. -## **Features** - -- A multi-user, multi-language secure web interface to change settings and monitor incoming data -- A console, accessible via Serial and Telnet for more advanced monitoring -- Native support for Home Assistant, Domoticz and openHAB via [MQTT Discovery](https://www.home-assistant.io/docs/mqtt/discovery/) -- Can run standalone as an independent WiFi Access Point or join an existing WiFi network -- Easy first-time configuration via a web Captive Portal -- Support for more than [120+ EMS devices](https://emsesp.org/All-Devices/) (boilers, thermostats, solar modules, mixer modules, heat pumps, gateways, switches, heat sources) +## **Key Features** + +- A multi-user, multi-language web interface to change settings and monitor incoming data +- An advanced console, accessible via Serial/USB or Telnet for more operations and monitoring +- Native integration with Home Assistant, Domoticz, openHAB and Modbus +- Easy setup and install with automatic updates +- Supporting over 120 different EMS compatible devices from thermostats, boilers, heat pumps, mixing units, solar modules from brands as Bosch, Buderus, Nefit, Junkers, Worcester and Sieger +- Simulate remote thermostats +- Localized to 10 languages, and customizable to change names to your preference +- Extendable via adding external modules or adding your own custom entities directly within the WebUI +- A powerful scheduler to automate tasks and trigger events based data changes +- A Notification service to alert you of important events ## **Installing** -Go to [install.emsesp.org](https://install.emsesp.org) or look at the documentation link below on the different ways to install EMS-ESP. +For a quick install of the latest stable release go to [https://install.emsesp.org](https://install.emsesp.org). For other methods of installing and upgrading, and switching to the development version go to the section in the [documentation](https://emsesp.org). -## **Documentation** +## **Documentation and Wiki** -For the complete documentation on how to install, configure and get support visit the [documentation at emsesp.org](https://emsesp.org). +Visit [emsesp.org](https://emsesp.org) for details on how to install and configure EMS-ESP. -## **Support** +## **Getting Support** To chat with the community reach out on our [Discord Server](https://discord.gg/3J3GgnzpyT). -If you like **EMS-ESP**, please give it a star, or fork it and contribute or offer a small donation! +If you like **EMS-ESP**, please give it a ✨ on GitHub, or even better fork it and contribute. You can also offer a small donation. This is an open-source project maintained by volunteers, and your support is greatly appreciated. -## **Demo** +## **Live Demo** -For a live demo of the Web UI click [demo.emsesp.org](https://demo.emsesp.org) and log in with any username/password, and change the language to English. +For a live demo go to [demo.emsesp.org](https://demo.emsesp.org). Pick a language from the sign on page and log in with any username or password. Note not all features are operational as it's based on static data. -## **Contributors ✨** +## **Contributors** -EMS-ESP is a project owned and maintained by [proddy](https://github.com/proddy) and [MichaelDvP](https://github.com/MichaelDvP). +EMS-ESP is a project created by [proddy](https://github.com/proddy) and owned and maintained by both [proddy](https://github.com/proddy) and [MichaelDvP](https://github.com/MichaelDvP) with support from [BBQKees Electronics](https://bbqkees-electronics.nl). ## **Libraries used** -- [esp8266-react](https://github.com/rjwats/esp8266-react) by @rjwats for the framework that provides the core of the Web UI -- [uuid-\*](https://github.com/nomis/mcu-uuid-console) from @nomis. The console, syslog, telnet and logging are based off these open source libraries -- [ArduinoJson](https://github.com/bblanchon/ArduinoJson) for all the JSON -- [espMqttClient](https://github.com/bertmelis/espMqttClient) for the MQTT client, with custom modifications from @MichaelDvP and @proddy +- [esp8266-react](https://github.com/rjwats/esp8266-react) by @rjwats for the core framework that provides the Web UI, which has been heavily modified +- [uuid-\*](https://github.com/nomis/mcu-uuid-console) from @nomis. The console, syslog, telnet and logging are based off these awesome open source libraries +- [ArduinoJson](https://github.com/bblanchon/ArduinoJson) for all the JSON processing +- [espMqttClient](https://github.com/bertmelis/espMqttClient) for the MQTT client - ESPAsyncWebServer and AsyncTCP for the Web server and TCP backends, with custom modifications for performance ## **License** diff --git a/cspell.json b/cspell.json index f617c827b..b5dc0b7ad 100644 --- a/cspell.json +++ b/cspell.json @@ -9,5 +9,5 @@ } ], "dictionaries": ["project-words"], - "ignorePaths": ["node_modules", "**/venv/**", "lib/eModbus", "lib/ESPAsyncWebServer", "lib/espMqttClient", "analyse.html", "dist", "**/*.csv", "locale_translations.h", "TZ.tsx", "**/*.txt","build/**", "**/i18n/**", "/project-words.txt"] + "ignorePaths": ["node_modules", "WWWData.h", "**/venv/**", "lib/eModbus", "lib/ESPAsyncWebServer", "lib/espMqttClient", "analyse.html", "dist", "**/*.csv", "locale_translations.h", "TZ.tsx", "**/*.txt","build/**", "**/i18n/**", "/project-words.txt"] } \ No newline at end of file diff --git a/interface/package.json b/interface/package.json index 18e2225dd..b8baf3b6d 100644 --- a/interface/package.json +++ b/interface/package.json @@ -31,7 +31,7 @@ "async-validator": "^4.2.5", "jwt-decode": "^4.0.0", "mime-types": "^2.1.35", - "preact": "^10.23.2", + "preact": "^10.24.0", "react": "^18.3.1", "react-dom": "^18.3.1", "react-icons": "^5.3.0", @@ -44,10 +44,10 @@ "@babel/core": "^7.25.2", "@eslint/js": "^9.10.0", "@preact/compat": "^18.3.1", - "@preact/preset-vite": "^2.9.0", + "@preact/preset-vite": "^2.9.1", "@trivago/prettier-plugin-sort-imports": "^4.3.0", "@types/formidable": "^3", - "@types/node": "^22.5.4", + "@types/node": "^22.5.5", "@types/react": "^18.3.5", "@types/react-dom": "^18.3.0", "@types/react-router-dom": "^5.3.3", @@ -59,9 +59,9 @@ "rollup-plugin-visualizer": "^5.12.0", "terser": "^5.32.0", "typescript-eslint": "8.5.0", - "vite": "^5.4.4", + "vite": "^5.4.5", "vite-plugin-imagemin": "^0.6.1", "vite-tsconfig-paths": "^5.0.1" }, - "packageManager": "yarn@4.4.1" + "packageManager": "yarn@4.5.0" } diff --git a/interface/src/api/app.ts b/interface/src/api/app.ts index 886c00236..1863a6893 100644 --- a/interface/src/api/app.ts +++ b/interface/src/api/app.ts @@ -6,7 +6,6 @@ import type { CoreData, DeviceData, DeviceEntity, - Devices, Entities, EntityItem, ModuleItem, @@ -53,11 +52,9 @@ export const readActivity = () => alovaInstance.Get('/rest/activity'); // API export const API = (apiCall: APIcall) => alovaInstance.Post('/api', apiCall); -// UploadFileForm -export const getSettings = () => alovaInstance.Get('/rest/getSettings'); -export const getCustomizations = () => alovaInstance.Get('/rest/getCustomizations'); -export const getEntities = () => alovaInstance.Get('/rest/getEntities'); -export const getSchedule = () => alovaInstance.Get('/rest/getSchedule'); +// DownloadUpload +export const exportData = (type: string) => + alovaInstance.Get('/rest/exportData', { params: { type } }); // SettingsCustomization export const readDeviceEntities = (id: number) => @@ -75,7 +72,6 @@ export const readDeviceEntities = (id: number) => })); } }); -export const readDevices = () => alovaInstance.Get('/rest/devices'); export const resetCustomizations = () => alovaInstance.Post('/rest/resetCustomizations'); export const writeCustomizationEntities = (data: { diff --git a/interface/src/api/system.ts b/interface/src/api/system.ts index 6585a0b85..b1d4298e0 100644 --- a/interface/src/api/system.ts +++ b/interface/src/api/system.ts @@ -1,12 +1,8 @@ -import type { HardwareStatus, LogSettings, SystemStatus } from 'types'; +import type { LogSettings, SystemStatus } from 'types'; import { alovaInstance, alovaInstanceGH } from './endpoints'; -// hardwareStatus - also used to ping in Restart monitor for pinging -export const readHardwareStatus = () => - alovaInstance.Get('/rest/hardwareStatus'); - -// SystemStatus +// systemStatus - also used to ping in Restart monitor for pinging export const readSystemStatus = () => alovaInstance.Get('/rest/systemStatus'); diff --git a/interface/src/app/main/Customizations.tsx b/interface/src/app/main/Customizations.tsx index 4fcbe15c6..24b105ec6 100644 --- a/interface/src/app/main/Customizations.tsx +++ b/interface/src/app/main/Customizations.tsx @@ -50,8 +50,8 @@ import { useI18nContext } from 'i18n/i18n-react'; import { API, + readCoreData, readDeviceEntities, - readDevices, resetCustomizations, writeCustomizationEntities, writeDeviceName @@ -60,7 +60,7 @@ import SettingsCustomizationsDialog from './CustomizationsDialog'; import EntityMaskToggle from './EntityMaskToggle'; import OptionIcon from './OptionIcon'; import { DeviceEntityMask } from './types'; -import type { APIcall, DeviceEntity, DeviceShort } from './types'; +import type { APIcall, Device, DeviceEntity } from './types'; export const APIURL = window.location.origin + '/api/'; @@ -81,8 +81,8 @@ const Customizations = () => { useLayoutTitle(LL.CUSTOMIZATIONS()); - // fetch devices first - const { data: devices, send: fetchDevices } = useRequest(readDevices); + // fetch devices first from coreData + const { data: devices, send: fetchCoreData } = useRequest(readCoreData); const { send: sendAPI } = useRequest((data: APIcall) => API(data), { immediate: false @@ -242,13 +242,13 @@ const Customizations = () => { useEffect(() => { if (devices && selectedDevice !== -1) { void sendDeviceEntities(selectedDevice); - const id = devices.devices.findIndex((d) => d.i === selectedDevice); - if (id === -1) { + const index = devices.devices.findIndex((d) => d.id === selectedDevice); + if (index === -1) { setSelectedDevice(-1); setSelectedDeviceTypeNameURL(''); } else { - setSelectedDeviceTypeNameURL(devices.devices[id].url || ''); - setSelectedDeviceName(devices.devices[id].s); + setSelectedDeviceTypeNameURL(devices.devices[index].url || ''); + setSelectedDeviceName(devices.devices[index].n); setNumChanges(0); setRestartNeeded(false); } @@ -414,7 +414,7 @@ const Customizations = () => { }) .finally(async () => { setRename(false); - await fetchDevices(); + await fetchCoreData(); }); }; @@ -449,9 +449,9 @@ const Customizations = () => { {LL.SELECT_DEVICE()}... - {devices.devices.map((device: DeviceShort) => ( - - {device.s} ({device.tn}) + {devices.devices.map((device: Device) => ( + + {device.n} ({device.tn}) ))} diff --git a/interface/src/app/main/types.ts b/interface/src/app/main/types.ts index faaa8757d..07e8beef0 100644 --- a/interface/src/app/main/types.ts +++ b/interface/src/app/main/types.ts @@ -71,6 +71,7 @@ export interface Device { p: number; // productid v: string; // version e: number; // entities + url?: string; // lowercase type name used in API URL } export interface TemperatureSensor { @@ -113,20 +114,6 @@ export interface CoreData { devices: Device[]; } -export interface DeviceShort { - i: number; // id - d?: number; // deviceid - p?: number; // productid - s: string; // shortname - t?: number; // device type id - tn?: string; // device type internal name (translated) - url?: string; // lowercase type name used in API URL -} - -export interface Devices { - devices: DeviceShort[]; -} - export interface DeviceValue { id: string; // index, contains mask+name v: unknown; // value, Number or String diff --git a/interface/src/app/settings/ApplicationSettings.tsx b/interface/src/app/settings/ApplicationSettings.tsx index 9daf45b74..946f295fd 100644 --- a/interface/src/app/settings/ApplicationSettings.tsx +++ b/interface/src/app/settings/ApplicationSettings.tsx @@ -16,7 +16,7 @@ import { } from '@mui/material'; import Grid from '@mui/material/Grid2'; -import { readHardwareStatus } from 'api/system'; +import { readSystemStatus } from 'api/system'; import { useRequest } from 'alova/client'; import RestartMonitor from 'app/status/RestartMonitor'; @@ -49,7 +49,7 @@ export function boardProfileSelectItems() { } const ApplicationSettings = () => { - const { data: hardwareData } = useRequest(readHardwareStatus); + const { data: hardwareData } = useRequest(readSystemStatus); const { loadData, diff --git a/interface/src/app/settings/DownloadUpload.tsx b/interface/src/app/settings/DownloadUpload.tsx index 11dc3f45a..c222c4901 100644 --- a/interface/src/app/settings/DownloadUpload.tsx +++ b/interface/src/app/settings/DownloadUpload.tsx @@ -18,13 +18,7 @@ import { import Grid from '@mui/material/Grid2'; import * as SystemApi from 'api/system'; -import { - API, - getCustomizations, - getEntities, - getSchedule, - getSettings -} from 'api/app'; +import { API, exportData } from 'api/app'; import { checkUpgrade, getDevVersion, @@ -52,48 +46,26 @@ const DownloadUpload = () => { const [useDev, setUseDev] = useState(false); const [upgradeAvailable, setUpgradeAvailable] = useState(false); - const { send: sendSettings } = useRequest(getSettings(), { - immediate: false - }).onSuccess((event) => { - saveFile(event.data, 'settings.json'); - }); - - const { send: sendCustomizations } = useRequest(getCustomizations(), { - immediate: false - }).onSuccess((event) => { - saveFile(event.data, 'customizations.json'); - }); - - const { send: sendEntities } = useRequest(getEntities(), { - immediate: false - }).onSuccess((event) => { - saveFile(event.data, 'custom_entities.json'); - }); - - const { send: sendSchedule } = useRequest(getSchedule(), { + const { send: sendExportData } = useRequest((type: string) => exportData(type), { immediate: false - }).onSuccess((event) => { - saveFile(event.data, 'schedule.json'); - }); + }) + .onSuccess((event) => { + saveFile(event.data, event.args[0]); + toast.info(LL.DOWNLOAD_SUCCESSFUL()); + }) + .onError((error) => { + toast.error(error.message); + }); const { send: sendAPI } = useRequest((data: APIcall) => API(data), { immediate: false }); - const { send: sendAPIandSave } = useRequest((data: APIcall) => API(data), { - immediate: false - }).onSuccess((event) => { - saveFile( - event.data, - String(event.args[0].device) + '_' + String(event.args[0].cmd) + '.txt' - ); - }); - const { data: data, send: loadData, error - } = useRequest(SystemApi.readHardwareStatus); + } = useRequest(SystemApi.readSystemStatus); const { send: sendUploadURL } = useRequest( (data: { url: string }) => uploadURL(data), @@ -123,6 +95,8 @@ const DownloadUpload = () => { // immediate: false, // initialData: '3.6.5' }); + + // called immediately to get the latest version, on page load, then check for upgrade const { data: latestDevVersion } = useRequest(getDevVersion, { // uncomment next 2 lines for testing, uses https://github.com/emsesp/EMS-ESP32/releases/download/latest/EMS-ESP-3_7_0-dev_31-ESP32-16MB+.bin // immediate: false, @@ -175,40 +149,9 @@ const DownloadUpload = () => { type: 'text/plain' }) ); - anchor.download = 'emsesp_' + filename; + anchor.download = 'emsesp_' + filename + '.json'; anchor.click(); URL.revokeObjectURL(anchor.href); - toast.info(LL.DOWNLOAD_SUCCESSFUL()); - }; - - const downloadSettings = async () => { - await sendSettings().catch((error: Error) => { - toast.error(error.message); - }); - }; - - const downloadCustomizations = async () => { - await sendCustomizations().catch((error: Error) => { - toast.error(error.message); - }); - }; - - const downloadEntities = async () => { - await sendEntities().catch((error: Error) => { - toast.error(error.message); - }); - }; - - const downloadSchedule = async () => { - await sendSchedule().catch((error: Error) => { - toast.error(error.message); - }); - }; - - const callAPIandSave = async (device: string, cmd: string) => { - await sendAPIandSave({ device, cmd, id: 0 }).catch((error: Error) => { - toast.error(error.message); - }); }; useLayoutTitle(LL.DOWNLOAD_UPLOAD()); @@ -301,7 +244,7 @@ const DownloadUpload = () => { startIcon={} variant="outlined" color="primary" - onClick={downloadSettings} + onClick={() => sendExportData('settings')} > {LL.DOWNLOAD(1)} {LL.SETTINGS_OF(LL.APPLICATION())} @@ -311,7 +254,7 @@ const DownloadUpload = () => { startIcon={} variant="outlined" color="primary" - onClick={downloadCustomizations} + onClick={() => sendExportData('customizations')} > {LL.DOWNLOAD(1)} {LL.CUSTOMIZATIONS()} @@ -320,7 +263,7 @@ const DownloadUpload = () => { startIcon={} variant="outlined" color="primary" - onClick={downloadEntities} + onClick={() => sendExportData('entities')} > {LL.DOWNLOAD(1)} {LL.CUSTOM_ENTITIES(0)} @@ -329,7 +272,7 @@ const DownloadUpload = () => { startIcon={} variant="outlined" color="primary" - onClick={downloadSchedule} + onClick={() => sendExportData('schedule')} > {LL.DOWNLOAD(1)} {LL.SCHEDULE(0)} diff --git a/interface/src/app/status/HardwareStatus.tsx b/interface/src/app/status/HardwareStatus.tsx index 16e3204c1..7637861cd 100644 --- a/interface/src/app/status/HardwareStatus.tsx +++ b/interface/src/app/status/HardwareStatus.tsx @@ -36,7 +36,7 @@ const HardwareStatus = () => { data: data, send: loadData, error - } = useAutoRequest(SystemApi.readHardwareStatus, { pollingTime: 2000 }); + } = useAutoRequest(SystemApi.readSystemStatus, { pollingTime: 2000 }); const content = () => { if (!data) { diff --git a/interface/src/app/status/RestartMonitor.tsx b/interface/src/app/status/RestartMonitor.tsx index 9e813eebe..855d597c9 100644 --- a/interface/src/app/status/RestartMonitor.tsx +++ b/interface/src/app/status/RestartMonitor.tsx @@ -8,7 +8,7 @@ import { Typography } from '@mui/material'; -import { readHardwareStatus } from 'api/system'; +import { readSystemStatus } from 'api/system'; import { dialogStyle } from 'CustomTheme'; import { useAutoRequest } from 'alova/client'; @@ -22,7 +22,7 @@ const RestartMonitor = () => { let count = 0; - const { data } = useAutoRequest(readHardwareStatus, { + const { data } = useAutoRequest(readSystemStatus, { pollingTime: 1000, force: true, initialData: { status: 'Getting ready...' }, @@ -38,7 +38,7 @@ const RestartMonitor = () => { document.location.href = '/'; } }) - .onError((error, _method) => { + .onError((error) => { setErrorMessage(error.message); }); diff --git a/interface/src/app/status/Status.tsx b/interface/src/app/status/Status.tsx index 6f274dd96..51241c04d 100644 --- a/interface/src/app/status/Status.tsx +++ b/interface/src/app/status/Status.tsx @@ -29,8 +29,8 @@ import { useTheme } from '@mui/material'; -import * as SystemApi from 'api/system'; import { API } from 'api/app'; +import { readSystemStatus } from 'api/system'; import { dialogStyle } from 'CustomTheme'; import { useAutoRequest, useRequest } from 'alova/client'; @@ -63,7 +63,7 @@ const SystemStatus = () => { data: data, send: loadData, error - } = useAutoRequest(SystemApi.readSystemStatus, { + } = useAutoRequest(readSystemStatus, { initialData: [], pollingTime: 5000, async middleware(_, next) { @@ -101,7 +101,7 @@ const SystemStatus = () => { const busStatus = () => { if (data) { - switch (data.status) { + switch (data.bus_status) { case busConnectionStatus.BUS_STATUS_CONNECTED: return ( 'EMS ' + @@ -120,7 +120,7 @@ const SystemStatus = () => { }; const busStatusHighlight = () => { - switch (data.status) { + switch (data.bus_status) { case busConnectionStatus.BUS_STATUS_TX_ERRORS: return theme.palette.warning.main; case busConnectionStatus.BUS_STATUS_CONNECTED: diff --git a/interface/src/app/status/SystemLog.tsx b/interface/src/app/status/SystemLog.tsx index 13c0235c6..7aaeea32c 100644 --- a/interface/src/app/status/SystemLog.tsx +++ b/interface/src/app/status/SystemLog.tsx @@ -8,7 +8,7 @@ import Grid from '@mui/material/Grid2'; import { fetchLogES, readLogSettings, updateLogSettings } from 'api/system'; -import { useRequest, useSSE } from 'alova/client'; +import { useSSE } from 'alova/client'; import { BlockFormControlLabel, BlockNavigation, diff --git a/interface/src/components/upload/DragNdrop.tsx b/interface/src/components/upload/DragNdrop.tsx index a659bd106..d9d06c585 100644 --- a/interface/src/components/upload/DragNdrop.tsx +++ b/interface/src/components/upload/DragNdrop.tsx @@ -16,7 +16,7 @@ const DragNdrop = ({ onFileSelected }) => { const { LL } = useI18nContext(); const checkFileExtension = (file: File) => { - const validExtensions = ['.json', '.txt', '.csv', '.bin', '.md5']; + const validExtensions = ['.json', '.bin', '.md5']; const fileName = file.name; const fileExtension = fileName.substring(fileName.lastIndexOf('.')); if (validExtensions.includes(fileExtension)) { diff --git a/interface/src/types/system.ts b/interface/src/types/system.ts index 768813dda..ca9d34555 100644 --- a/interface/src/types/system.ts +++ b/interface/src/types/system.ts @@ -2,8 +2,19 @@ import type { busConnectionStatus } from 'app/main/types'; import type { NetworkConnectionStatus } from './network'; -export interface HardwareStatus { +export interface SystemStatus { emsesp_version: string; + bus_status: busConnectionStatus; + uptime: number; + bus_uptime: number; + num_devices: number; + num_sensors: number; + num_analogs: number; + ntp_status: number; + mqtt_status: boolean; + ap_status: boolean; + network_status: NetworkConnectionStatus; + wifi_rssi: number; build_flags: string; esp_platform: string; max_alloc_heap: number; @@ -32,22 +43,6 @@ export interface HardwareStatus { status: string; } -export interface SystemStatus { - emsesp_version: string; - status: busConnectionStatus; - uptime: number; - bus_uptime: number; - num_devices: number; - num_sensors: number; - num_analogs: number; - free_heap: number; - ntp_status: number; - mqtt_status: boolean; - ap_status: boolean; - network_status: NetworkConnectionStatus; - wifi_rssi: number; -} - export enum LogLevel { ERROR = 3, WARNING = 4, diff --git a/interface/yarn.lock b/interface/yarn.lock index 7400933e9..f63b1f6ef 100644 --- a/interface/yarn.lock +++ b/interface/yarn.lock @@ -1054,9 +1054,9 @@ __metadata: languageName: node linkType: hard -"@preact/preset-vite@npm:^2.9.0": - version: 2.9.0 - resolution: "@preact/preset-vite@npm:2.9.0" +"@preact/preset-vite@npm:^2.9.1": + version: 2.9.1 + resolution: "@preact/preset-vite@npm:2.9.1" dependencies: "@babel/code-frame": "npm:^7.22.13" "@babel/plugin-transform-react-jsx": "npm:^7.22.15" @@ -1068,13 +1068,12 @@ __metadata: kolorist: "npm:^1.8.0" magic-string: "npm:0.30.5" node-html-parser: "npm:^6.1.10" - resolve: "npm:^1.22.8" source-map: "npm:^0.7.4" stack-trace: "npm:^1.0.0-pre2" peerDependencies: "@babel/core": 7.x vite: 2.x || 3.x || 4.x || 5.x - checksum: 10c0/658e3dc048d1f1d8ad7cb1fef4a3db0f933be4e00d3d6cdfbd29fe7ec02341b3a26747520a5b261992923b3d3f49800c23a4d77da849e708a5c1ad9a920343b2 + checksum: 10c0/6c2f2a7f06b08b2bd817d493101c4654891d6b86f661d48e2fb0b1388289bc4cb40b11a9ab30f9a12f818a28a1b48d60d97b24b8d3376c317a9d8abe06a68b1e languageName: node linkType: hard @@ -1417,7 +1416,7 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:^22.5.4": +"@types/node@npm:*": version: 22.5.4 resolution: "@types/node@npm:22.5.4" dependencies: @@ -1426,6 +1425,15 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:^22.5.5": + version: 22.5.5 + resolution: "@types/node@npm:22.5.5" + dependencies: + undici-types: "npm:~6.19.2" + checksum: 10c0/ead9495cfc6b1da5e7025856dcce2591e9bae635357410c0d2dd619fce797d2a1d402887580ca4b336cb78168b195224869967de370a23f61663cf1e4836121c + languageName: node + linkType: hard + "@types/parse-json@npm:^4.0.0": version: 4.0.2 resolution: "@types/parse-json@npm:4.0.2" @@ -1635,11 +1643,11 @@ __metadata: "@mui/icons-material": "npm:^6.1.0" "@mui/material": "npm:^6.1.0" "@preact/compat": "npm:^18.3.1" - "@preact/preset-vite": "npm:^2.9.0" + "@preact/preset-vite": "npm:^2.9.1" "@table-library/react-table-library": "npm:4.1.7" "@trivago/prettier-plugin-sort-imports": "npm:^4.3.0" "@types/formidable": "npm:^3" - "@types/node": "npm:^22.5.4" + "@types/node": "npm:^22.5.5" "@types/react": "npm:^18.3.5" "@types/react-dom": "npm:^18.3.0" "@types/react-router-dom": "npm:^5.3.3" @@ -1651,7 +1659,7 @@ __metadata: formidable: "npm:^3.5.1" jwt-decode: "npm:^4.0.0" mime-types: "npm:^2.1.35" - preact: "npm:^10.23.2" + preact: "npm:^10.24.0" prettier: "npm:^3.3.3" react: "npm:^18.3.1" react-dom: "npm:^18.3.1" @@ -1663,7 +1671,7 @@ __metadata: typesafe-i18n: "npm:^5.26.2" typescript: "npm:^5.6.2" typescript-eslint: "npm:8.5.0" - vite: "npm:^5.4.4" + vite: "npm:^5.4.5" vite-plugin-imagemin: "npm:^0.6.1" vite-tsconfig-paths: "npm:^5.0.1" languageName: unknown @@ -5568,10 +5576,10 @@ __metadata: languageName: node linkType: hard -"preact@npm:^10.23.2": - version: 10.23.2 - resolution: "preact@npm:10.23.2" - checksum: 10c0/6e0dc1b38ead7554c99ddec9a32162b456e8f622229413b136042a777445a12d115633cd49d6df83c30b64d721a0ad4d3c71bb468edc759c15799896e96fd9f2 +"preact@npm:^10.24.0": + version: 10.24.0 + resolution: "preact@npm:10.24.0" + checksum: 10c0/09d490d2326c511e205a96f81db0adf05f1b42dbe2a39be6fc494662c7476575494e96140252f351a0e3b3d15aee5b079bf963865bb01287f69c45c6755ed22e languageName: node linkType: hard @@ -5897,7 +5905,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.10.0, resolve@npm:^1.19.0, resolve@npm:^1.22.8": +"resolve@npm:^1.10.0, resolve@npm:^1.19.0": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: @@ -5910,7 +5918,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.8#optional!builtin": +"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" dependencies: @@ -6960,9 +6968,9 @@ __metadata: languageName: node linkType: hard -"vite@npm:^5.4.4": - version: 5.4.4 - resolution: "vite@npm:5.4.4" +"vite@npm:^5.4.5": + version: 5.4.5 + resolution: "vite@npm:5.4.5" dependencies: esbuild: "npm:^0.21.3" fsevents: "npm:~2.3.3" @@ -6999,7 +7007,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10c0/2752e7dd5584ea7cc057742e8f5cbf2f2bd3a2bceb8794fbd3d52f1e88d362b5ac7f1c70be7a3d01b3d768320c8a8ad0df287fd72f253bf040423c36c67a3e89 + checksum: 10c0/89c6459452fc238cdf8e99681b30996af171c9c557af476f96408a18a639fb5a0a6ee2d2257e005b21dc284edceb604595c34920cd4a007ad18f7ebafb654c76 languageName: node linkType: hard diff --git a/media/main-screen.png b/media/main-screen.png new file mode 100644 index 000000000..71cefdd5c Binary files /dev/null and b/media/main-screen.png differ diff --git a/mock-api/rest_server.ts b/mock-api/rest_server.ts index 13ebe958a..5b3b2476d 100644 --- a/mock-api/rest_server.ts +++ b/mock-api/rest_server.ts @@ -307,11 +307,10 @@ const mqtt_status = { }; // STATUS -const SYSTEM_STATUS_ENDPOINT = REST_ENDPOINT_ROOT + 'systemStatus'; const ACTIVITY_ENDPOINT = REST_ENDPOINT_ROOT + 'activity'; // SETTINGS -const HARDWARE_STATUS_ENDPOINT = REST_ENDPOINT_ROOT + 'hardwareStatus'; +const SYSTEM_STATUS_ENDPOINT = REST_ENDPOINT_ROOT + 'systemStatus'; const SECURITY_SETTINGS_ENDPOINT = REST_ENDPOINT_ROOT + 'securitySettings'; // SYSTEM SIGNIN @@ -322,8 +321,23 @@ const GENERATE_TOKEN_ENDPOINT = REST_ENDPOINT_ROOT + 'generateToken'; const VERSION = '3.7.0-dev.0'; // const VERSION = '3.6.4'; -let hardware_status = { +let system_status = { emsesp_version: VERSION, + bus_status: 0, + // status: 2, + uptime: 77186, + bus_uptime: 77121, + num_devices: 2, + num_sensors: 1, + num_analogs: 1, + free_heap: 143, + ntp_status: 2, + mqtt_status: true, + ap_status: false, + network_status: 3, // wifi connected + // network_status: 10, // ethernet connected + // network_status: 6, // wifi disconnected + wifi_rssi: -41, esp_platform: 'ESP32S3', build_flags: 'DEMO', cpu_type: 'ESP32-S3', @@ -331,7 +345,6 @@ let hardware_status = { cpu_cores: 2, cpu_freq_mhz: 240, max_alloc_heap: 191, - free_heap: 211, arduino_version: 'ESP32 Arduino v2.0.17', sdk_version: 'v4.4.7-dirty', partition: 'app0', @@ -347,30 +360,11 @@ let hardware_status = { psram_size: 8189, free_psram: 8166, has_loader: true, - // model: '' - model: 'BBQKees Electronics EMS Gateway E32 V2 (E32 V2.0 P3/2024011)', + model: '', + // model: 'BBQKees Electronics EMS Gateway E32 V2 (E32 V2.0 P3/2024011)', status: 'downloading' }; -const system_status = { - emsesp_version: VERSION, - status: 0, - // status: 2, - uptime: 77186, - bus_uptime: 77121, - num_devices: 2, - num_sensors: 1, - num_analogs: 1, - free_heap: 143, - ntp_status: 2, - mqtt_status: true, - ap_status: false, - network_status: 3, // wifi connected - // network_status: 10, // ethernet connected - // network_status: 6, // wifi disconnected - wifi_rssi: -41 -}; - let security_settings = { jwt_secret: 'naughty!', users: [ @@ -402,7 +396,6 @@ const generate_token = { token: '1234' }; const EMSESP_SETTINGS_ENDPOINT = REST_ENDPOINT_ROOT + 'settings'; const EMSESP_CORE_DATA_ENDPOINT = REST_ENDPOINT_ROOT + 'coreData'; const EMSESP_SENSOR_DATA_ENDPOINT = REST_ENDPOINT_ROOT + 'sensorData'; -const EMSESP_DEVICES_ENDPOINT = REST_ENDPOINT_ROOT + 'devices'; const EMSESP_DEVICEDATA_ENDPOINT1 = REST_ENDPOINT_ROOT + 'deviceData'; const EMSESP_DEVICEDATA_ENDPOINT2 = REST_ENDPOINT_ROOT + 'deviceData/:id?'; @@ -423,13 +416,9 @@ const EMSESP_RESET_CUSTOMIZATIONS_ENDPOINT = const EMSESP_SCHEDULE_ENDPOINT = REST_ENDPOINT_ROOT + 'schedule'; const EMSESP_CUSTOMENTITIES_ENDPOINT = REST_ENDPOINT_ROOT + 'customEntities'; const EMSESP_MODULES_ENDPOINT = REST_ENDPOINT_ROOT + 'modules'; +const EMSESP_EXPORT_DATA_ENDPOINT = REST_ENDPOINT_ROOT + 'exportData'; // these are used in the API calls only -const EMSESP_GET_SETTINGS_ENDPOINT = REST_ENDPOINT_ROOT + 'getSettings'; -const EMSESP_GET_CUSTOMIZATIONS_ENDPOINT = REST_ENDPOINT_ROOT + 'getCustomizations'; -const EMSESP_GET_ENTITIES_ENDPOINT = REST_ENDPOINT_ROOT + 'getEntities'; -const EMSESP_GET_SCHEDULE_ENDPOINT = REST_ENDPOINT_ROOT + 'getSchedule'; - const EMSESP_SYSTEM_INFO_ENDPOINT = API_ENDPOINT_ROOT + 'system/info'; const emsesp_info = { @@ -634,74 +623,6 @@ let settings = { modbus_timeout: 10000 }; -const emsesp_devices = { - devices: [ - { - i: 2, - s: 'RC20', - t: 5, - tn: 'Thermostat', - url: 'thermostat' - }, - { - i: 3, - s: 'Buderus GB125', - t: 5, - tn: 'Boiler', - url: 'boiler' - }, - { - i: 4, - s: 'Moduline 1000', - t: 5, - tn: 'Thermostat', - url: 'thermostat' - }, - { - i: 5, - s: 'MM10', - t: 7, - tn: 'Mixer Module', - url: 'mixer' - }, - { - i: 6, - s: 'SM10', - t: 8, - tn: 'Solar Module', - url: 'solar' - }, - { - i: 7, - s: 'Trendline HRC30/Generic Heatronic 3', - t: 4, - tn: 'Boiler', - url: 'boiler' - }, - { - i: 8, - s: 'Bosch Compress 7000i AW Heat Pump', - t: 5, - tn: 'Boiler/HP', - url: 'boiler' - }, - { - i: 9, - s: 'RC100H', - t: 6, - tn: 'Thermostat', - url: 'thermostat' - }, - { - i: 10, - s: 'RC310', - t: 6, - tn: 'Thermostat', - url: 'thermostat' - } - ] -}; - const emsesp_coredata = { connected: true, // connected: false, @@ -716,7 +637,8 @@ const emsesp_coredata = { d: 8, p: 123, v: '06.01', - e: 69 + e: 69, + url: 'boiler' }, { id: 3, @@ -727,7 +649,8 @@ const emsesp_coredata = { d: 8, p: 123, v: '06.01', - e: 73 + e: 73, + url: 'boiler' }, { id: 1, @@ -738,7 +661,8 @@ const emsesp_coredata = { d: 24, p: 86, v: '04.01', - e: 57 + e: 57, + url: 'thermostat' }, { id: 2, @@ -749,7 +673,8 @@ const emsesp_coredata = { d: 23, p: 77, v: '03.03', - e: 6 + e: 6, + url: 'thermostat' }, { id: 4, @@ -760,7 +685,8 @@ const emsesp_coredata = { d: 16, p: 165, v: '04.01', - e: 3 + e: 3, + url: 'thermostat' }, { id: 5, @@ -782,7 +708,8 @@ const emsesp_coredata = { d: 48, p: 73, v: '01.02', - e: 22 + e: 22, + url: 'solar' }, { id: 8, @@ -793,7 +720,8 @@ const emsesp_coredata = { d: 8, p: 172, v: '01.20', - e: 152 + e: 152, + url: 'boiler' }, { id: 9, @@ -804,7 +732,8 @@ const emsesp_coredata = { d: 56, p: 200, v: '40.07', - e: 4 + e: 4, + url: 'thermostat' }, { id: 10, @@ -815,7 +744,8 @@ const emsesp_coredata = { d: 16, p: 158, v: '73.03', - e: 63 + e: 63, + url: 'thermostat' } ] }; @@ -3871,10 +3801,26 @@ let emsesp_modules = { }; // CUSTOMIZATION -const emsesp_deviceentities_1 = [ - { v: 'dummy value', n: 'dummy name', id: 'dummy', m: 0, w: false } +const dummy_deviceentities = [ + { + v: 'unknown', + n: 'no entities for this device', + id: 'unknown', + m: 0, + w: false + } ]; +// no data for these +const emsesp_deviceentities_1 = dummy_deviceentities; +const emsesp_deviceentities_3 = dummy_deviceentities; +const emsesp_deviceentities_5 = dummy_deviceentities; +const emsesp_deviceentities_6 = dummy_deviceentities; +const emsesp_deviceentities_8 = dummy_deviceentities; +const emsesp_deviceentities_9 = dummy_deviceentities; +const emsesp_deviceentities_10 = dummy_deviceentities; +const emsesp_deviceentities_none = dummy_deviceentities; + const emsesp_deviceentities_2 = [ { v: '(0)', @@ -3916,10 +3862,6 @@ const emsesp_deviceentities_2 = [ } ]; -const emsesp_deviceentities_3 = [ - { v: 'dummy value', n: 'dummy name', id: 'dummy', m: 0, w: false } -]; - const emsesp_deviceentities_4 = [ { v: 16, @@ -3943,13 +3885,6 @@ const emsesp_deviceentities_4 = [ w: true } ]; -const emsesp_deviceentities_5 = [ - { v: 'dummy value', n: 'dummy name', id: 'dummy', m: 0, w: false } -]; - -const emsesp_deviceentities_6 = [ - { v: 'dummy value', n: 'dummy name', id: 'dummy', m: 0, w: false } -]; const emsesp_deviceentities_7 = [ { u: 0, n: '!reset', id: 'reset', m: 8, w: false }, @@ -4076,22 +4011,6 @@ const emsesp_deviceentities_7 = [ { v: 102151, n: 'dhw active time', id: 'dhw/workm', m: 0, w: false } ]; -const emsesp_deviceentities_8 = [ - { v: 'dummy value', n: 'dummy name', id: 'dummy', m: 0, w: false } -]; - -const emsesp_deviceentities_9 = [ - { v: 'dummy value', n: 'dummy name', id: 'dummy', m: 0, w: false } -]; - -const emsesp_deviceentities_10 = [ - { v: 'dummy value', n: 'dummy name', id: 'dummy', m: 0, w: false } -]; - -const emsesp_deviceentities_none = [ - { v: 'dummy value', n: 'dummy name', id: 'dummy', m: 0, w: false } -]; - // END DATA // LOG @@ -4160,22 +4079,21 @@ router // SYSTEM and SETTINGS router - .get(SYSTEM_STATUS_ENDPOINT, () => system_status) .get(ACTIVITY_ENDPOINT, () => activity) - .get(HARDWARE_STATUS_ENDPOINT, () => { + .get(SYSTEM_STATUS_ENDPOINT, () => { if (countHardwarePoll === 0) { console.log('Resetting hardware count...'); } if (countHardwarePoll >= 2) { countHardwarePoll = 0; - hardware_status.status = 'ready'; + system_status.status = 'ready'; } console.log('Hardware count ' + countHardwarePoll + ' of 2'); countHardwarePoll++; - return hardware_status; + return system_status; }) .get(SECURITY_SETTINGS_ENDPOINT, () => security_settings) .post(SECURITY_SETTINGS_ENDPOINT, async (request: any) => { @@ -4289,11 +4207,6 @@ router emsesp_sensordata.ts[2].t = Math.floor(Math.random() * 100); return emsesp_sensordata; }) - .get(EMSESP_DEVICES_ENDPOINT, () => { - // sort by type - const sorted_devices = emsesp_devices.devices.sort((a, b) => a.t - b.t); - return { devices: sorted_devices }; - }) .get(EMSESP_DEVICEDATA_ENDPOINT1, (request) => request.query.id ? deviceData(Number(request.query.id)) : status(404) ) @@ -4501,11 +4414,11 @@ router }) // Settings - board profile - .post(EMSESP_BOARDPROFILE_ENDPOINT, async (request: any) => { - const content = await request.json(); - const board_profile = content.code; + .get(EMSESP_BOARDPROFILE_ENDPOINT, (request) => { + const board_profile = request.query.boardProfile; const data = { + board_profile: settings.board_profile, led_gpio: settings.led_gpio, dallas_gpio: settings.dallas_gpio, rx_gpio: settings.rx_gpio, @@ -4629,15 +4542,32 @@ router data.eth_clock_mode = 0; } - console.log('board profile saved', data); + data.board_profile = + typeof board_profile === 'string' ? board_profile : settings.board_profile; + + console.log('board profile for ' + board_profile + ' fetched: ', data); return data; }) // Download Settings - .get(EMSESP_GET_SETTINGS_ENDPOINT, () => emsesp_info) - .get(EMSESP_GET_CUSTOMIZATIONS_ENDPOINT, () => emsesp_deviceentities_1) - .get(EMSESP_GET_ENTITIES_ENDPOINT, () => emsesp_customentities) - .get(EMSESP_GET_SCHEDULE_ENDPOINT, () => emsesp_schedule) + .get(EMSESP_EXPORT_DATA_ENDPOINT, (request) => { + const type = request.query.type; + console.log('exporting ' + type + ' data'); + switch (type) { + case 'settings': + return emsesp_info; + case 'customizations': + return emsesp_deviceentities_2; // fixed for one device + case 'entities': + return emsesp_customentities; + case 'schedule': + return emsesp_schedule; + case 'modules': + return emsesp_modules; + default: + return status(404); + } + }) // upload URL .post('/rest/uploadURL', () => { @@ -4673,7 +4603,7 @@ router } if (cmd === 'restart') { console.log('restarting...'); - hardware_status.status = 'restarting'; + system_status.status = 'restarting'; countHardwarePoll = 0; return status(200); } diff --git a/project-words.txt b/project-words.txt index c941c8e0c..d1ea72cb8 100644 --- a/project-words.txt +++ b/project-words.txt @@ -464,7 +464,7 @@ GPOC Greenstar Grokhotkov haclimate -hardwarestatus +systemstatus Harwerth headersize headertemp @@ -1344,4 +1344,5 @@ zuluftgebläse zulufttemp zyxwvutsrqponmlkjihgfedcba Omea -Bolv \ No newline at end of file +Bolv +hardwarestatus \ No newline at end of file diff --git a/scripts/upload.py b/scripts/upload.py index 3becb20f4..69d27d7f3 100644 --- a/scripts/upload.py +++ b/scripts/upload.py @@ -34,17 +34,24 @@ from termcolor import cprint def print_success(x): return cprint(x, 'green') -def print_fail(x): return cprint(x, 'red') +def print_fail(x): return cprint('Error: '+x, 'red') def on_upload(source, target, env): + # make sure we have set the upload_protocol to custom + if env.get('UPLOAD_PROTOCOL') != 'custom': + print_fail("Please set upload_protocol = custom in your pio_local.ini file when using upload.py") + return + # first check authentication try: username = env.GetProjectOption('custom_username') password = env.GetProjectOption('custom_password') + emsesp_ip = env.GetProjectOption('custom_emsesp_ip') except: - print('No authentication settings specified. Please, add these to your pio_local.ini file: \n\ncustom_username=username\ncustom_password=password\n') + print_fail('Missing settings. Add these to your pio_local.ini file: \n\ncustom_username=username\ncustom_password=password\ncustom_emsesp_ip=ems-esp.local\n') return + emsesp_url = "http://" + env.GetProjectOption('custom_emsesp_ip') parsed_url = urlparse(emsesp_url) @@ -71,10 +78,10 @@ def on_upload(source, target, env): response = requests.post(signon_url, json=username_password, headers=signon_headers) if response.status_code != 200: - print_fail("Authentication failed (code " + str(response.status_code) + ")") + print_fail("Authentication with EMS-ESP failed (code " + str(response.status_code) + ")") return - print_success("Authentication successful") + print_success("Authentication with EMS-ESP successful") access_token = response.json().get('access_token') # start the upload diff --git a/src/console.cpp b/src/console.cpp index cd3dccbbd..786ac9f8e 100644 --- a/src/console.cpp +++ b/src/console.cpp @@ -76,6 +76,9 @@ static void setup_commands(std::shared_ptr & commands) { // // Show commands // + commands->add_command(ShellContext::MAIN, CommandFlags::USER, {F_(show)}, [=](Shell & shell, const std::vector & arguments) { + to_app(shell).system_.show_system(shell); + }); commands->add_command(ShellContext::MAIN, CommandFlags::USER, string_vector{F_(show), F_(system)}, @@ -125,7 +128,7 @@ static void setup_commands(std::shared_ptr & commands) { // create commands test commands->add_command(ShellContext::MAIN, CommandFlags::USER, - string_vector{"test"}, + {"test"}, string_vector{F_(name_optional), F_(data_optional), F_(id_optional)}, [=](Shell & shell, const std::vector & arguments) { if (arguments.empty()) { @@ -138,12 +141,12 @@ static void setup_commands(std::shared_ptr & commands) { Test::run_test(shell, arguments[0].c_str(), arguments[1].c_str(), arguments[2].c_str()); } }); - commands->add_command(ShellContext::MAIN, CommandFlags::USER, string_vector{"t"}, [=](Shell & shell, const std::vector & arguments) { + commands->add_command(ShellContext::MAIN, CommandFlags::USER, {"t"}, [=](Shell & shell, const std::vector & arguments) { Test::run_test(shell, "default"); }); #endif - commands->add_command(ShellContext::MAIN, CommandFlags::USER, string_vector{F_(su)}, [=](Shell & shell, const std::vector & arguments) { + commands->add_command(ShellContext::MAIN, CommandFlags::USER, {F_(su)}, [=](Shell & shell, const std::vector & arguments) { auto become_admin = [](Shell & shell) { shell.logger().log(LogLevel::NOTICE, LogFacility::AUTH, F("Admin session opened on console %s"), to_shell(shell).console_name().c_str()); shell.add_flags(CommandFlags::ADMIN); @@ -176,7 +179,7 @@ static void setup_commands(std::shared_ptr & commands) { } }); - commands->add_command(ShellContext::MAIN, CommandFlags::ADMIN, string_vector{F_(passwd)}, [](Shell & shell, const std::vector & arguments) { + commands->add_command(ShellContext::MAIN, CommandFlags::ADMIN, {F_(passwd)}, [](Shell & shell, const std::vector & arguments) { shell.enter_password(F_(new_password_prompt1), [](Shell & shell, bool completed, const std::string & password1) { if (completed) { shell.enter_password(F_(new_password_prompt2), [password1](Shell & shell, bool completed, const std::string & password2) { @@ -198,8 +201,8 @@ static void setup_commands(std::shared_ptr & commands) { commands->add_command(ShellContext::MAIN, CommandFlags::ADMIN, - string_vector{F_(restart)}, - string_vector{F_(partitionname_optional)}, + {F_(restart)}, + {F_(partitionname_optional)}, [](Shell & shell, const std::vector & arguments) { if (arguments.size()) { to_app(shell).system_.system_restart(arguments.front().c_str()); @@ -244,7 +247,7 @@ static void setup_commands(std::shared_ptr & commands) { commands->add_command(ShellContext::MAIN, CommandFlags::ADMIN, string_vector{F_(set), F_(hostname)}, - string_vector{F_(name_mandatory)}, + {F_(name_mandatory)}, [](Shell & shell, const std::vector & arguments) { shell.println("The network connection will be reset..."); Shell::loop_all(); @@ -258,7 +261,7 @@ static void setup_commands(std::shared_ptr & commands) { commands->add_command(ShellContext::MAIN, CommandFlags::ADMIN, string_vector{F_(set), F_(wifi), F_(ssid)}, - string_vector{F_(name_mandatory)}, + {F_(name_mandatory)}, [](Shell & shell, const std::vector & arguments) { to_app(shell).esp8266React.getNetworkSettingsService()->updateWithoutPropagation([&](NetworkSettings & networkSettings) { networkSettings.ssid = arguments.front().c_str(); @@ -273,7 +276,7 @@ static void setup_commands(std::shared_ptr & commands) { ShellContext::MAIN, CommandFlags::ADMIN, string_vector{F_(set), F_(board_profile)}, - string_vector{F_(name_mandatory)}, + {F_(name_mandatory)}, [](Shell & shell, const std::vector & arguments) { std::vector data; // led, dallas, rx, tx, button, phy_type, eth_power, eth_phy_addr, eth_clock_mode std::string board_profile = Helpers::toUpper(arguments.front()); @@ -303,7 +306,7 @@ static void setup_commands(std::shared_ptr & commands) { ShellContext::MAIN, CommandFlags::ADMIN, string_vector{F_(set), F_(bus_id)}, - string_vector{F_(deviceid_mandatory)}, + {F_(deviceid_mandatory)}, [](Shell & shell, const std::vector & arguments) { uint8_t device_id = Helpers::hextoint(arguments.front().c_str()); if ((device_id == 0x0B) || (device_id == 0x0D) || (device_id == 0x0A) || (device_id == 0x0F) || (device_id == 0x12)) { @@ -323,7 +326,7 @@ static void setup_commands(std::shared_ptr & commands) { commands->add_command(ShellContext::MAIN, CommandFlags::ADMIN, string_vector{F_(set), F_(tx_mode)}, - string_vector{F_(n_mandatory)}, + {F_(n_mandatory)}, [](Shell & shell, const std::vector & arguments) { uint8_t tx_mode = std::strtol(arguments[0].c_str(), nullptr, 10); // save the tx_mode @@ -371,30 +374,25 @@ static void setup_commands(std::shared_ptr & commands) { // EMS device commands // - commands->add_command(ShellContext::MAIN, - CommandFlags::ADMIN, - string_vector{F_(scan)}, - string_vector{F_(deep_optional)}, - [](Shell & shell, const std::vector & arguments) { - if (arguments.size() == 0) { - to_app(shell).scan_devices(); - } else { - shell.printfln("Performing a deep scan..."); - to_app(shell).clear_all_devices(); - // device IDs taken from device_library.h - // send the read command with Version command - const std::vector Device_Ids = {0x02, 0x08, 0x09, 0x10, 0x11, 0x12, 0x15, 0x17, 0x18, 0x19, 0x1A, - 0x1B, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, - 0x2A, 0x30, 0x38, 0x40, 0x41, 0x48, 0x50, 0x51, 0x60}; - for (const uint8_t device_id : Device_Ids) { - to_app(shell).send_read_request(EMSdevice::EMS_TYPE_VERSION, device_id); - } - } - }); + commands->add_command(ShellContext::MAIN, CommandFlags::ADMIN, {F_(scan)}, {F_(deep_optional)}, [](Shell & shell, const std::vector & arguments) { + if (arguments.size() == 0) { + to_app(shell).scan_devices(); + } else { + shell.printfln("Performing a deep scan..."); + to_app(shell).clear_all_devices(); + // device IDs taken from device_library.h + // send the read command with Version command + const std::vector Device_Ids = {0x02, 0x08, 0x09, 0x10, 0x11, 0x12, 0x15, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x20, 0x21, 0x22, 0x23, + 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x30, 0x38, 0x40, 0x41, 0x48, 0x50, 0x51, 0x60}; + for (const uint8_t device_id : Device_Ids) { + to_app(shell).send_read_request(EMSdevice::EMS_TYPE_VERSION, device_id); + } + } + }); commands->add_command(ShellContext::MAIN, CommandFlags::USER, - string_vector{F_(read)}, + {F_(read)}, string_vector{F_(deviceid_mandatory), F_(typeid_mandatory), F_(offset_optional), F_(length_optional)}, [=](Shell & shell, const std::vector & arguments) { uint8_t device_id = Helpers::hextoint(arguments.front().c_str()); @@ -420,7 +418,7 @@ static void setup_commands(std::shared_ptr & commands) { commands->add_command(ShellContext::MAIN, CommandFlags::USER, - string_vector{F_(watch)}, + {F_(watch)}, string_vector{F_(watch_format_optional), F_(watchid_optional)}, [](Shell & shell, const std::vector & arguments) { uint16_t watch_id = WATCH_ID_NONE; @@ -490,7 +488,7 @@ static void setup_commands(std::shared_ptr & commands) { commands->add_command( ShellContext::MAIN, CommandFlags::ADMIN, - string_vector{F_(call)}, + {F_(call)}, string_vector{F_(device_type_optional), F_(cmd_optional), F_(data_optional), F_(id_optional)}, [&](Shell & shell, const std::vector & arguments) { if (arguments.empty()) { diff --git a/src/emsdevice.cpp b/src/emsdevice.cpp index cc674b7b8..fdfef14ac 100644 --- a/src/emsdevice.cpp +++ b/src/emsdevice.cpp @@ -578,7 +578,7 @@ void EMSdevice::add_device_value(int8_t tag, // to b snprintf(entity, sizeof(entity), "%s/%s", tag_to_mqtt(tag), short_name); } - for (std::string entity_id : entityCustomization.entity_ids) { + for (const std::string & entity_id : entityCustomization.entity_ids) { // if there is an appended custom name, strip it to get the true entity name // and extract the new custom name auto custom_name_pos = entity_id.find('|'); @@ -1112,7 +1112,7 @@ void EMSdevice::generate_values_web_customization(JsonArray output) { EMSESP::webCustomizationService.read([&](WebCustomization & settings) { for (EntityCustomization entityCustomization : settings.entityCustomizations) { if (entityCustomization.device_id == device_id()) { - for (std::string entity_id : entityCustomization.entity_ids) { + for (const std::string & entity_id : entityCustomization.entity_ids) { uint8_t mask = Helpers::hextoint(entity_id.substr(0, 2).c_str()); if (mask & 0x80) { JsonObject obj = output.add(); diff --git a/src/emsdevicevalue.cpp b/src/emsdevicevalue.cpp index 40f398c62..d17b364de 100644 --- a/src/emsdevicevalue.cpp +++ b/src/emsdevicevalue.cpp @@ -369,7 +369,7 @@ std::string DeviceValue::get_fullname() const { return customname; } -std::string DeviceValue::get_name(std::string & entity) { +std::string DeviceValue::get_name(const std::string & entity) { auto pos = entity.find('|'); if (pos != std::string::npos) { return entity.substr(2, pos - 2); diff --git a/src/emsdevicevalue.h b/src/emsdevicevalue.h index 48b8dcf24..46810dacf 100644 --- a/src/emsdevicevalue.h +++ b/src/emsdevicevalue.h @@ -189,7 +189,7 @@ class DeviceValue { bool get_custom_max(uint32_t & val); std::string get_custom_fullname() const; std::string get_fullname() const; - static std::string get_name(std::string & entity); + static std::string get_name(const std::string & entity); // dv state flags void add_state(uint8_t s) { diff --git a/src/emsesp.cpp b/src/emsesp.cpp index 96b547dba..dafce0aae 100644 --- a/src/emsesp.cpp +++ b/src/emsesp.cpp @@ -1579,12 +1579,10 @@ void EMSESP::start() { esp8266React.begin(); #ifndef EMSESP_STANDALONE - LOG_INFO("Booting EMS-ESP version %s from %s/%s partition", - EMSESP_APP_VERSION, - esp_ota_get_boot_partition()->label, + LOG_INFO("EMS-ESP version %s (%s partition)", EMSESP_APP_VERSION, esp_ota_get_running_partition()->label); // welcome message #else - LOG_INFO("Booting EMS-ESP version %s", EMSESP_APP_VERSION); // welcome message + LOG_INFO("EMS-ESP version %s", EMSESP_APP_VERSION); // welcome message #endif LOG_DEBUG("System is running in Debug mode"); LOG_INFO("Last system reset reason Core0: %s, Core1: %s", system_.reset_reason(0).c_str(), system_.reset_reason(1).c_str()); diff --git a/src/locale_translations.h b/src/locale_translations.h index bca2fd02a..97136db65 100644 --- a/src/locale_translations.h +++ b/src/locale_translations.h @@ -43,7 +43,7 @@ MAKE_WORD_TRANSLATION(heatpump_device, "Heat Pump", "Wärmepumpe", "Warmtepomp", MAKE_WORD_TRANSLATION(solar_device, "Solar Module", "Solarmodul", "Solar Module", "Solmodul", "Moduł solarny", "Solmodul", "", "Güneş Enerjisi Cihazı", "Modulo Solare", "Solárny modul") // TODO translate MAKE_WORD_TRANSLATION(connect_device, "Connect Module", "Verbindungsmodul", "Connect Module", "Uppkopplingsmodul", "Moduł przyłączeń", "Sammenkoblingsmodul", "", "Güneş Enerjisi Cihazı", "Modulo connessione", "Pripojte modul") // TODO translate MAKE_WORD_TRANSLATION(mixer_device, "Mixer Module", "Mischermodul", "Mixer Module", "Blandningsmodul", "Moduł mieszacza", "Miksermodul", "", "Karışım Cihazı", "Modulo Miscela", "Modul mixera") // TODO translate -MAKE_WORD_TRANSLATION(controller_device, "Controller Module", "Kontrollmodul", "Controller Module", "Styrmodul", "Moduł sterujący", "Styremodul", "", "Kontrol Ünitesi", "Modulo Controllo", "Modul ovládača") // TODO translate +MAKE_WORD_TRANSLATION(controller_device, "Controller Module", "Regelmodul", "Controller Module", "Styrmodul", "Moduł sterujący", "Styremodul", "", "Kontrol Ünitesi", "Modulo Controllo", "Modul ovládača") // TODO translate MAKE_WORD_TRANSLATION(switch_device, "Switch Module", "Schaltmodul", "Switch Module", "Relämodul", "Moduł przełączający", "Switch modul", "", "Anahtar", "Modulo Switch", "Spínací modul") // TODO translate MAKE_WORD_TRANSLATION(gateway_device, "Gateway Module", "Gateway-Modul", "Gateway Module", "Gateway", "Moduł IP", "Gateway", "", "Ağ Geçidi", "Modulo Gateway", "Modul brány") // TODO translate MAKE_WORD_TRANSLATION(alert_device, "Alert Module", "Alarmmodul", "Alert Module", "Larmmodul", "Moduł alarmowy", "Alarmmodul", "", "Alarm Cihazı", "Module Avviso", "Modul upozornení") // TODO translate @@ -54,7 +54,7 @@ MAKE_WORD_TRANSLATION(sensors_device, "Sensors", "Sensoren", "Sensoren", "Sensor MAKE_WORD_TRANSLATION(unknown_device, "Unknown", "Unbekannt", "Onbekend", "Okänt", "Nieznane urządzenie", "Ukjent", "Inconnu", "Bilinmeyen", "Sconosciuto", "Neznámy") MAKE_WORD_TRANSLATION(custom_device, "Custom", "Nutzerdefiniert", "Aangepast", "", "Niestandardowe", "", "", "Özel", "Personalizzato", "Vlastné") // TODO translate MAKE_WORD_TRANSLATION(custom_device_name, "Custom Entities", "Nutzer deklarierte Entitäten", "Gebruiker gedefineerd", "", "Encje zdefiniowane przez użytkownika", "", "", "Kullanıcı tarafından tanımlanmış varlıklar", "Entità definita da utente", "Používateľom definované entity") // TODO translate -MAKE_WORD_TRANSLATION(ventilation_device, "Ventilation", "Lüftung", "Ventilatie", "", "Wentylacja", "", "", "Havalandırma", "Ventilazione", "Vetranie") // TODO translate +MAKE_WORD_TRANSLATION(ventilation_device, "Ventilation", "Belüftung", "Ventilatie", "", "Wentylacja", "", "", "Havalandırma", "Ventilazione", "Vetranie") // TODO translate MAKE_WORD_TRANSLATION(water_device, "Water Module", "Wassermodul", "", "", "Moduł wodny", "", "", "", "", "Modul vody") // TODO translate MAKE_WORD_TRANSLATION(pool_device, "Pool Module", "Poolmodul", "", "", "Moduł basenu", "", "", "", "", "Modul bazéna") // TODO translate @@ -63,18 +63,18 @@ MAKE_WORD_TRANSLATION(info_cmd, "list all values (verbose)", "Liste aller Werte" MAKE_WORD_TRANSLATION(commands_cmd, "list all commands", "Liste aller Kommandos", "lijst van alle commando's", "", "wyświetl wszystkie komendy", "Viser alle kommandoer", "", "Tüm komutları listele", "elencaa tutti i comandi", "zobraziť všetky príkazy") // TODO translate MAKE_WORD_TRANSLATION(entities_cmd, "list all entities", "Liste aller Entitäten", "lijst van alle entiteiten", "", "wyświetl wszsytkie encje", "Viser alle enheter", "", "Tüm varlıkları listele", "elenca tutte le entità", "zobraziť všetky entity") // TODO translate MAKE_WORD_TRANSLATION(send_cmd, "send a telegram", "Sende EMS-Telegramm", "stuur een telegram", "", "wyślij telegram", "send et telegram", "", "Bir telegram gönder", "invia un telegramma", "poslať telegram") // TODO translate -MAKE_WORD_TRANSLATION(setiovalue_cmd, "set io value", "Setze Wertevorgabe", "instellen standaardwaarde", "", "ustaw wartość", "sett en io verdi", "", "Giriş/Çıkış değerlerini ayarla", "imposta valore io", "nastaviť hodnotu io") // TODO translate -MAKE_WORD_TRANSLATION(changeloglevel_cmd, "change log level", "Ändere Sysloglevel", "aanpassen log niveau", "", "zmień poziom log-u", "endre loggnivå", "", "Kayıt seviyesini değiştir", "cambia livello registrazione", "zmeniť úroveň protokolu") // TODO translate -MAKE_WORD_TRANSLATION(fetch_cmd, "refresh all EMS values", "Lese alle EMS-Werte neu", "Verversen alle EMS waardes", "", "odśwież wszystkie wartości EMS", "oppfrisk alle EMS verdier", "", "Bütün EMS değerlerini yenile", "aggiornare tutti i valori EMS", "obnoviť všetky hodnoty EMS") // TODO translate +MAKE_WORD_TRANSLATION(setiovalue_cmd, "set io value", "Setze Werte E/A", "instellen standaardwaarde", "", "ustaw wartość", "sett en io verdi", "", "Giriş/Çıkış değerlerini ayarla", "imposta valore io", "nastaviť hodnotu io") // TODO translate +MAKE_WORD_TRANSLATION(changeloglevel_cmd, "change log level", "Ändere Protokollebene", "aanpassen log niveau", "", "zmień poziom log-u", "endre loggnivå", "", "Kayıt seviyesini değiştir", "cambia livello registrazione", "zmeniť úroveň protokolu") // TODO translate +MAKE_WORD_TRANSLATION(fetch_cmd, "refresh all EMS values", "Aktualisiere alle EMS-Werte", "Verversen alle EMS waardes", "", "odśwież wszystkie wartości EMS", "oppfrisk alle EMS verdier", "", "Bütün EMS değerlerini yenile", "aggiornare tutti i valori EMS", "obnoviť všetky hodnoty EMS") // TODO translate MAKE_WORD_TRANSLATION(restart_cmd, "restart EMS-ESP", "Neustart", "opnieuw opstarten", "", "uruchom ponownie EMS-ESP", "restart EMS-ESP", "redémarrer EMS-ESP", "EMS-ESPyi yeniden başlat", "riavvia EMS-ESP", "reštart EMS-ESP") // TODO translate MAKE_WORD_TRANSLATION(format_cmd, "factory reset EMS-ESP", "EMS-ESP auf Werkseinstellungen zurücksetzen", "", "", "", "", "", "", "", "továrenske nastavenie EMS-ESP") // TODO translate MAKE_WORD_TRANSLATION(watch_cmd, "watch incoming telegrams", "Beobachte eingehende Telegramme", "inkomende telegrammen bekijken", "", "obserwuj przyczodzące telegramy", "se innkommende telegrammer", "", "Gelen telegramları", "guardare i telegrammi in arrivo", "sledovať prichádzajúce telegramy") // TODO translate MAKE_WORD_TRANSLATION(publish_cmd, "publish all to MQTT", "Publiziere MQTT", "publiceer alles naar MQTT", "", "opublikuj wszystko na MQTT", "Publiser alt til MQTT", "", "Hepsini MQTTye gönder", "pubblica tutto su MQTT", "zverejniť všetko na MQTT") // TODO translate -MAKE_WORD_TRANSLATION(system_info_cmd, "show system info", "Zeige System-Status", "toon systeemstatus", "", "pokaż status systemu", "vis system status", "", "Sistem Durumunu Göster", "visualizza stati di sistema", "zobraziť stav systému") // TODO translate -MAKE_WORD_TRANSLATION(schedule_cmd, "enable schedule item", "Aktiviere Zeitplan", "activeer tijdschema item", "", "aktywuj wybrany harmonogram", "", "", "program öğesini etkinleştir", "abilitare l'elemento programmato", "povoliť položku plánovania") // TODO translate +MAKE_WORD_TRANSLATION(system_info_cmd, "show system info", "Zeige Systeminformationen", "toon systeemstatus", "", "pokaż status systemu", "vis system status", "", "Sistem Durumunu Göster", "visualizza stati di sistema", "zobraziť stav systému") // TODO translate +MAKE_WORD_TRANSLATION(schedule_cmd, "enable schedule item", "Aktiviere Zeitplanelemente", "activeer tijdschema item", "", "aktywuj wybrany harmonogram", "", "", "program öğesini etkinleştir", "abilitare l'elemento programmato", "povoliť položku plánovania") // TODO translate MAKE_WORD_TRANSLATION(entity_cmd, "set custom value on ems", "Sende eigene Entitäten zu EMS", "verstuur custom waarde naar EMS", "", "wyślij własną wartość na EMS", "", "", "emp üzerinde özel değer ayarla", "imposta valori personalizzati su EMS", "nastaviť vlastnú hodnotu na ems") // TODO translate MAKE_WORD_TRANSLATION(commands_response, "get response", "Hole Antwort", "Verzoek om antwoord", "", "uzyskaj odpowiedź", "", "", "gelen cevap", "", "získať odpoveď") // TODO translate -MAKE_WORD_TRANSLATION(coldshot_cmd, "send a cold shot of water", "Schicke einen kalten Schuss Wasser", "", "", "uruchom tryśnięcie zimnej wody", "", "", "soğuk su gönder", "", "pošlite studenú dávku vody") // TODO translate +MAKE_WORD_TRANSLATION(coldshot_cmd, "send a cold shot of water", "Zugabe einer Menge kalten Wassers", "", "", "uruchom tryśnięcie zimnej wody", "", "", "soğuk su gönder", "", "pošlite studenú dávku vody") // TODO translate MAKE_WORD_TRANSLATION(allvalues_cmd, "output all values in system", "Alle Werte im System ausgeben", "", "", "wyświetl wszystkie wartości", "", "", "", "", "vypísať všetky hodnoty") // TODO translate MAKE_WORD_TRANSLATION(message_cmd, "send a message", "Eine Nachricht senden", "", "", "", "", "", "", "", "poslať správu") // TODO translate MAKE_WORD_TRANSLATION(values_cmd, "list all values", "Liste alle Werte auf", "", "", "", "", "", "", "", "vypísať všetky hodnoty") // TODO translate @@ -117,7 +117,6 @@ MAKE_WORD_TRANSLATION(tag_hs14, "hs14", "hs14", "hs14", "VK14", "ŹC14", "hs14", MAKE_WORD_TRANSLATION(tag_hs15, "hs15", "hs15", "hs15", "VK15", "ŹC15", "hs15", "hs15", "hs15", "hs15", "hs15") MAKE_WORD_TRANSLATION(tag_hs16, "hs16", "hs16", "hs16", "VK16", "ŹC16", "hs16", "hs16", "hs16", "hs16", "hs16") - // General MAKE_WORD_TRANSLATION(on, "on", "an", "aan", "på", "włączono", "på", "on", "açık", "on", "zap") MAKE_WORD_TRANSLATION(off, "off", "aus", "uit", "av", "wyłączono", "av", "off", "kapalı", "off", "vyp") @@ -126,10 +125,10 @@ MAKE_WORD_TRANSLATION(OFF, "OFF", "AUS", "UIT", "AV", "wył.", "AV", "OFF", "KAP // Unit Of Measurement mapping - maps to DeviceValueUOM_s in emsdevice.cpp // uom - also used with HA see https://github.com/home-assistant/core/blob/d7ac4bd65379e11461c7ce0893d3533d8d8b8cbf/homeassistant/const.py#L384 +MAKE_WORD_TRANSLATION(seconds, "seconds", "Sekunden", "Seconden", "Sekunder", "sekund", "Sekunder", "secondes", "saniye", "Secondi", "sekundy") MAKE_WORD_TRANSLATION(minutes, "minutes", "Minuten", "Minuten", "Minuter", "minut", "Minutter", "minutes", "dakika", "Minuti", "minúty") MAKE_WORD_TRANSLATION(hours, "hours", "Stunden", "Uren", "Timmar", "godzin", "Timer", "heures", "saat", "ore", "hodiny") MAKE_WORD_TRANSLATION(days, "days", "Tage", "Dagen", "Dagar", "dni", "Dager", "jours", "gün", "giorni", "dni") -MAKE_WORD_TRANSLATION(seconds, "seconds", "Sekunden", "Seconden", "Sekunder", "sekund", "Sekunder", "secondes", "saniye", "Secondi", "sekundy") // Enum translations // general @@ -149,7 +148,7 @@ MAKE_WORD_TRANSLATION(seniors, "seniors", "Senioren", "senioren", "Seniorer", "s MAKE_WORD_TRANSLATION(no, "no", "nein", "nee", "nej", "nie", "nei", "non", "hayır", "no", "nie") MAKE_WORD_TRANSLATION(new, "new", "Neu", "Nieuw", "Ny", "nowy", "ny", "nouveau", "yeni", "nuovo", "nové") MAKE_WORD_TRANSLATION(own_2, "own 2", "Eigen 2", "Eigen 2", "Egen 2", "własny 2", "egen 2", "propre 2", "kendi 2", "proprio 2", "vlastné 2") -MAKE_WORD_TRANSLATION(singles, "singles", "Singles", "singles", "Singlar", "osoba samotna", "single", "seuls", "tekliler", "singoli", "slobodní") +MAKE_WORD_TRANSLATION(singles, "singles", "Einzeln", "singles", "Singlar", "osoba samotna", "single", "seuls", "tekliler", "singoli", "slobodní") MAKE_WORD_TRANSLATION(am, "am", "Vormittag", "ochtend", "Förmiddag", "do południa", "formiddag", "matin", "sabah", "mattina", "doobeda") MAKE_WORD_TRANSLATION(pm, "pm", "Nachmittag", "namiddag", "Eftermiddag", "po południu", "ettermiddag", "après-midi", "akşam", "pomeriggio", "poobede") MAKE_WORD_TRANSLATION(midday, "midday", "Mittag", "middag", "Middag", "południe", "middag", "midi", "öğlen", "mezzogiorno", "poludnie") @@ -159,7 +158,7 @@ MAKE_WORD_TRANSLATION(vacuum, "vacuum", "Vakuum", "vacuum", "Vakuum", "próżnia MAKE_WORD_TRANSLATION(co2_optimized, "co2 optimized", "CO2 optimiert", "CO2 geoptimaliseerd", "CO2-optimerad", "optymalizacja CO2", "co2 optimalisert", "optimisé en CO2", "CO2 verimli", "CO2 ottimizzato", "co2 optimalizované") MAKE_WORD_TRANSLATION(cost_optimized, "cost optimized", "kostenoptimiert", "kosten geoptimaliseerd", "kostnadsoptimerad", "optymalizacja kosztów", "kostnadsoptimalisert", "optimisé en coût", "maliyet odaklı", "costo ottimizzato", "nákladovo optimalizované") MAKE_WORD_TRANSLATION(outside_temp_switched, "outside temp switched", "Außentemp. gesteuert", "buitentemp. gestuurd", "Utomhustemp korrigerad", "temperatura zewn. przeł.", "utetemp optimalisert", "contrôle par temp. ext.", "dış hava sıcaklığına bağlı", "temperatura esterna cambiata", "prepnuta vonkajsia teplota") -MAKE_WORD_TRANSLATION(co2_cost_mix, "co2 cost mix", "Kostenmix", "kostenmix", "Kostnadsmix", "mieszany koszt CO2", "", "coût mixte CO2", "karışık maliyet", "co2 cost mix", "co2 náklady mix") // TODO translate +MAKE_WORD_TRANSLATION(co2_cost_mix, "co2 cost mix", "CO2-Kostenmix", "CO2-kostenmix", "CO2-Kostnadsmix", "mieszany koszt CO2", "", "coût mixte CO2", "karışık maliyet", "co2 cost mix", "co2 náklady mix") // TODO translate MAKE_WORD_TRANSLATION(analog, "analog", "analog", "analoog", "analog", "analogowy", "analog", "analogique", "analog", "analogico", "analógový") MAKE_WORD_TRANSLATION(normal, "normal", "normal", "normaal", "normal", "normalny", "normal", "normal", "normal", "normale", "normálny") MAKE_WORD_TRANSLATION(blocking, "blocking", "Blockierung", "blokkering", "Blockering", "blokowanie", "blokkering", "bloquant", "engelleme", "bloccaggio", "blokovanie") @@ -330,7 +329,7 @@ MAKE_TRANSLATION(flameCurr, "flamecurr", "flame current", "Flammenstrom", "Vlamm MAKE_TRANSLATION(heatingPump, "heatingpump", "heating pump", "Heizungspumpe", "Verwarmingspomp", "Värmepump", "pompa ciepła", "varmepumpe", "pompe à chaleur", "ısı pompası", "pompa di calore", "tepelné čerpadlo") MAKE_TRANSLATION(fanWork, "fanwork", "fan", "Gebläse", "Ventilator", "Fläkt", "wentylator", "vifte", "ventilateur", "fan", "Ventilatore", "ventilátor") MAKE_TRANSLATION(ignWork, "ignwork", "ignition", "Zündung", "Ontsteking", "Tändning", "zapłon", "tenning", "ignition", "ateşleme", "accensione", "zapálenie") -MAKE_TRANSLATION(heatingActivated, "heatingactivated", "heating activated", "Heizen aktiviert", "Verwarmen geactiveerd", "Uppvärmning aktiv", "system c.o.", "oppvarming aktivert", "chauffage activé", "ısıtma başladı", "riscaldamento attivato", "kúrenie aktivované") +MAKE_TRANSLATION(heatingActivated, "heatingactivated", "heating activated", "Heizbetrieb aktiviert", "Verwarmen geactiveerd", "Uppvärmning aktiv", "system c.o.", "oppvarming aktivert", "chauffage activé", "ısıtma başladı", "riscaldamento attivato", "kúrenie aktivované") MAKE_TRANSLATION(heatingTemp, "heatingtemp", "heating temperature", "Heizungstemperatur", "Verwarmingstemperatuur", "Uppvärmningstemperatur", "temperatura grzania", "oppvarmingstemperatur", "température de chauffage", "ısıtma sıcaklığı", "temperatura riscaldamento", "teplota vykurovania") MAKE_TRANSLATION(pumpModMax, "pumpmodmax", "boiler pump max power", "Maximale Kesselpumpenleistung", "Ketelpomp max vermogen", "Värmepannepump max effekt", "maksymalna moc pompy zasobnika", "varmepumpe maks effekt", "puissance max pompe à chaleur", "boyler pompası maksimum güç", "max potenza pompa caldaia", "maximálny výkon čerpadla kotla") MAKE_TRANSLATION(pumpModMin, "pumpmodmin", "boiler pump min power", "Minimale Kesselpumpenleistung", "Ketelpomp min vermogen", "Värmepannepump min effekt", "minimalna moc pompy zasobnika", "varmepumpe min effekt", "puissance min pompe à chaleur", "boyler pompası minimum güç", "min potenza pompa caldaia", "min. výkon čerpadla kotla") @@ -349,7 +348,7 @@ MAKE_TRANSLATION(burnStarts, "burnstarts", "burner starts", "Brennerstarts", "Aa MAKE_TRANSLATION(burnWorkMin, "burnworkmin", "total burner operating time", "Brennerlaufzeit", "Totale branderlooptijd", "Värmepanna aktiva timmar", "łączny czas pracy palnika", "brennersteg tid i min", "durée de fonctionnement totale du brûleur", "toplam kazan çalışma süresi", "tempo totale di funzionamento del bruciatore", "celkový prevádzkový čas horáka") MAKE_TRANSLATION(burn2WorkMin, "burn2workmin", "burner stage 2 operating time", "Brennerlaufzeit Stufe 2", "Totale looptijd brander fase 2", "Värmepanna steg 2 aktiva timmar", "łączny czas pracy palnika 2 stopnia", "brennersteg2 tid i min", "durée de fonctionnement totale du brûleur état 2", "2. seviye toplam kazan çalışma süresi", "tempo di funzionamento del bruciatore 2° stadio", "doba prevádzky 2. stupňa horáka") MAKE_TRANSLATION(heatWorkMin, "heatworkmin", "total heat operating time", "Heizungslaufzeit", "Totale looptijd verwarming", "Uppvärmning aktiva timmar", "łączny czas grzania", "varmetid i min", "durée de fonctionnement du chauffage", "toplam ısıtma çalışma süresi", "tempo totale di funzionamento in riscaldamento", "celkový prevádzkový čas kúrenia") -MAKE_TRANSLATION(heatStarts, "heatstarts", "burner starts heating", "Brennerstarts: Heizung", "Aantal brander starts verwarming", "Uppvärmning antal starter", "liczba uruchomień palnika na ogrzewanie", "antall oppvarmninger", "démarrages du chauffage", "kazan ısıtmaya başlıyor", "preriscaldamento bruciatore", "štarty horáka na kúrenie") +MAKE_TRANSLATION(heatStarts, "heatstarts", "burner starts heating", "Brennerstarts Heizung", "Aantal brander starts verwarming", "Uppvärmning antal starter", "liczba uruchomień palnika na ogrzewanie", "antall oppvarmninger", "démarrages du chauffage", "kazan ısıtmaya başlıyor", "preriscaldamento bruciatore", "štarty horáka na kúrenie") MAKE_TRANSLATION(UBAuptime, "ubauptime", "total UBA operating time", "Anlagengesamtlaufzeit", "totale looptijd branderautomaat (UBA)", "Total Tid", "łączny czas pracy układu sterowania", "totaltid", "durée de fonctionnement totale de l'appareil (UBA)", "kazanın toplam işletme süresi", "Tempo di funzionamento totale del sistema", "Celkový čas chodu systému") MAKE_TRANSLATION(lastCode, "lastcode", "last error code", "Letzter Fehler", "Laatste foutcode", "Senaste Felkod", "ostatni błąd", "siste feilkode", "dernier code d'erreur", "son hata kodu", "ultimo codice errore", "posledný chybový kód") MAKE_TRANSLATION(serviceCode, "servicecode", "service code", "Statusmeldung", "Statuscode", "Servicekod", "kod serwisowy", "servicekode", "code de service", "servis kodu", "codice messaggio di stato", "servisný kód") @@ -370,31 +369,31 @@ MAKE_TRANSLATION(curveBase, "curvebase", "heatingcurve base", "Heizkurve Basis", MAKE_TRANSLATION(curveEnd, "curveend", "heatingcurve end", "Heizkurve Ende", "", "", "", "", "", "", "", "koniec vykurovacej krivky") // TODO translate // heatpump/compress specific -MAKE_TRANSLATION(upTimeTotal, "uptimetotal", "heatpump total uptime", "Gesamtbetriebszeit: Wärmepumpe", "", "", "łączny czas pracy pompy ciepła", "", "", "", "", "celková doba prevádzky tepelného čerpadla") // TODO translate -MAKE_TRANSLATION(upTimeControl, "uptimecontrol", "total operating time heat", "Gesamtbetriebszeit: Heizen", "Totale bedrijfstijd", "Total tid uppvärmning", "łączny czas generowania ciepła", "total driftstid", "durée totale de fonctionnement chauffage", "ısınma toplam işletme süresi", "Tempo di funzionamento totale riscaldamento", "celkový prevádzkový čas tepla") -MAKE_TRANSLATION(upTimeCompHeating, "uptimecompheating", "operating time compressor heating", "Betriebszeit: Kompressor heizen", "Bedrijfstijd compressor verwarmingsbedrijf", "Total tid kompressor uppvärmning", "łączny czas ogrzewania (sprężarka)", "totaltid kompressor", "durée de fonctionnement compresseur chauffage", "ısı pompası ısınma işletme süresi", "tempo di funzionamento del compressore riscaldamento", "prevádzková doba vykurovania kompresora") -MAKE_TRANSLATION(upTimeCompCooling, "uptimecompcooling", "operating time compressor cooling", "Betriebszeit: Kompressor kühlen", "Bedrijfstijd compressor koelbedrijf", "Total tid kompressor kyla", "łączny czas chłodzenia (sprężarka)", "Total tid kompressor kjøling", "durée de fonctionnement compresseur refroidissement", "ısı pompası soğuma işletme süresi", "tempo di funzionamento del compressore raffreddamento", "doba prevádzky chladenia kompresora") -MAKE_TRANSLATION(upTimeCompWw, "uptimecomp", "operating time compressor", "Betriebszeit: Kompressor", "Bedrijfstijd compressor", "Total tid kompressor", "łączny czas grzania c.w.u. (sprężarka)", "Total tid kompressor", "durée de fonctionnement compresseur", "ısı pompası sıcak kullanım suyu işletme süresi", "tempo di funzionamento del compressore", "prevádzková doba kompresora") -MAKE_TRANSLATION(upTimeCompPool, "uptimecomppool", "operating time compressor pool", "Betriebszeit: Kompressor Pool", "Bedrijfstijd compressor voor zwembadbedrijf", "Total tid kompressor pool", "łączny czas podgrzewania basenu (sprężarka)", "Total tid kompressor basseng", "durée de fonctionnement compresseur piscine", "ısı pompası havuz işletme süresi", "tempo di funzionamento del compressore piscina", "prevádzková doba kompresorového bazéna") +MAKE_TRANSLATION(upTimeTotal, "uptimetotal", "heatpump total uptime", "Gesamtbetriebszeit Wärmepumpe", "", "", "łączny czas pracy pompy ciepła", "", "", "", "", "celková doba prevádzky tepelného čerpadla") // TODO translate +MAKE_TRANSLATION(upTimeControl, "uptimecontrol", "total operating time heat", "Gesamtbetriebszeit Heizen", "Totale bedrijfstijd", "Total tid uppvärmning", "łączny czas generowania ciepła", "total driftstid", "durée totale de fonctionnement chauffage", "ısınma toplam işletme süresi", "Tempo di funzionamento totale riscaldamento", "celkový prevádzkový čas tepla") +MAKE_TRANSLATION(upTimeCompHeating, "uptimecompheating", "operating time compressor heating", "Betriebszeit Kompressor heizen", "Bedrijfstijd compressor verwarmingsbedrijf", "Total tid kompressor uppvärmning", "łączny czas ogrzewania (sprężarka)", "totaltid kompressor", "durée de fonctionnement compresseur chauffage", "ısı pompası ısınma işletme süresi", "tempo di funzionamento del compressore riscaldamento", "prevádzková doba vykurovania kompresora") +MAKE_TRANSLATION(upTimeCompCooling, "uptimecompcooling", "operating time compressor cooling", "Betriebszeit Kompressor kühlen", "Bedrijfstijd compressor koelbedrijf", "Total tid kompressor kyla", "łączny czas chłodzenia (sprężarka)", "Total tid kompressor kjøling", "durée de fonctionnement compresseur refroidissement", "ısı pompası soğuma işletme süresi", "tempo di funzionamento del compressore raffreddamento", "doba prevádzky chladenia kompresora") +MAKE_TRANSLATION(upTimeCompWw, "uptimecomp", "operating time compressor", "Betriebszeit Kompressor", "Bedrijfstijd compressor", "Total tid kompressor", "łączny czas grzania c.w.u. (sprężarka)", "Total tid kompressor", "durée de fonctionnement compresseur", "ısı pompası sıcak kullanım suyu işletme süresi", "tempo di funzionamento del compressore", "prevádzková doba kompresora") +MAKE_TRANSLATION(upTimeCompPool, "uptimecomppool", "operating time compressor pool", "Betriebszeit Kompressor Pool", "Bedrijfstijd compressor voor zwembadbedrijf", "Total tid kompressor pool", "łączny czas podgrzewania basenu (sprężarka)", "Total tid kompressor basseng", "durée de fonctionnement compresseur piscine", "ısı pompası havuz işletme süresi", "tempo di funzionamento del compressore piscina", "prevádzková doba kompresorového bazéna") MAKE_TRANSLATION(totalCompStarts, "totalcompstarts", "total compressor control starts", "Gesamtkompressorstarts ", "Totaal compressorstarts", "Kompressorstarter Totalt", "liczba załączeń sprężarki", "kompressorstarter totalt", "nombre démarrages total contrôle compresseur", "ısı pompası kontrolü toplam başlatma", "avvii totali del compressore", "spustí sa celkové riadenie kompresora") MAKE_TRANSLATION(heatingStarts, "heatingstarts", "heating control starts", "Heizungsregelungstarts", "Starts verwarmingsbedrijf", "Kompressorstarter Uppvärmning", "liczba załączeń ogrzewania", "kompressorstarter oppvarming", "démarrages contrôle chauffage", "ısıtma kontrolü toplam başlatma", "avvii riscaldamento", "ovládanie vykurovania sa spustí") MAKE_TRANSLATION(coolingStarts, "coolingstarts", "cooling control starts", "Kühlregelungstarts", "Starts koelbedrijf", "Kompressorstarter Kyla", "liczba załączeń chłodzenia", "kompressorstarter kjøling", "démarrages contrôle refroidissement", "soğutma kontrolü toplam başlatma", "avvii raffreddamento", "ovládanie chladenia sa spustí") MAKE_TRANSLATION(poolStarts, "poolstarts", "pool control starts", "Poolsteuerungstarts", "Starts zwembadbedrijf", "Kompressorstarter Pool", "liczba załączeń podgrzewania basenu", "kompressorstarter basseng", "démarrages contrôle piscine", "havuz kontrolü toplam başlatma", "avvio controllato piscina", "riadenie bazéna sa spustí") MAKE_TRANSLATION(nrgConsTotal, "nrgconstotal", "total energy consumption", "Gesamtenergieverbrauch", "Energieverbrauch gesamt", "Energiförbrukning totalt", "energia pobrana (sumarycznie)", "energiforbruk totalt", "consommation totale énergie", "toplam enerji tüketimi", "totale energia consumata", "celková spotreba energie") -MAKE_TRANSLATION(nrgConsCompTotal, "nrgconscomptotal", "total energy consumption compressor", "Gesamtenergieverbrauch: Kompressor", "Energieverbruik compressor totaal", "Energiförbrukning kompressor", "energia pobrana przez sprężarkę", "energiforbruk kompressor", "consommation totale énergie compresseur", "ısı pompası toplam enerji tüketimi", "totale energia consumata compressore", "kompresor s celkovou spotrebou energie") -MAKE_TRANSLATION(nrgConsCompHeating, "nrgconscompheating", "energy consumption compressor heating", "Energieverbrauch: Kompressor heizen", "Energieverbruik compressor verwarmingsbedrijf", "Energiförbrukning uppvärmning", "energia pobrana przez sprężarkę na ogrzewanie", "energiforbruk oppvarming", "consommation énergie compresseur chauffage", "ısı pompası ısıtma toplam enerji tüketimi", "consumo energia compressore riscaldamento", "spotreba energie vykurovanie kompresorom") -MAKE_TRANSLATION(nrgConsCompWw, "nrgconscomp", "energy consumption compressor", "Energieverbrauch: Kompressor", "Energieverbruik compressor", "Energiförbrukning", "energia pobrana przez sprężarkę na c.w.u.", "energiforbruk", "consommation énergie compresseur", "ısı pompası sıcak kullanım suyu toplam enerji tüketimi", "consumo energia compressore", "kompresor spotreby energie") -MAKE_TRANSLATION(nrgConsCompCooling, "nrgconscompcooling", "energy consumption compressor cooling", "Energieverbrauch: Kompressor kühlen", "Energieverbruik compressor koelbedrijf", "Energiförbrukning kyla", "energia pobrana przez sprężarkę na chłodzenie", "energiforbruk kjøling", "consommation énergie compresseur refroidissement", "ısı pompası soğutma toplam enerji tüketimi", "consumo energia compressore raffreddamento", "spotreba energie kompresorové chladenie") -MAKE_TRANSLATION(nrgConsCompPool, "nrgconscomppool", "energy consumption compressor pool", "Energieverbrauch: Kompressor Pool", "Energiebedrijf compressor zwembadbedrijf", "Energiförbrukning pool", "energia pobrana przez sprężarkę na podgrzewanie basenu", "energiforbruk basseng", "consommation énergie compresseur piscine", "ısı pompası havuz toplam enerji tüketimi", "consumo energia compressore piscina", "spotreba energie kompresorový bazén") +MAKE_TRANSLATION(nrgConsCompTotal, "nrgconscomptotal", "total energy consumption compressor", "Gesamtenergieverbrauch Kompressor", "Energieverbruik compressor totaal", "Energiförbrukning kompressor", "energia pobrana przez sprężarkę", "energiforbruk kompressor", "consommation totale énergie compresseur", "ısı pompası toplam enerji tüketimi", "totale energia consumata compressore", "kompresor s celkovou spotrebou energie") +MAKE_TRANSLATION(nrgConsCompHeating, "nrgconscompheating", "energy consumption compressor heating", "Energieverbrauch Kompressor heizen", "Energieverbruik compressor verwarmingsbedrijf", "Energiförbrukning uppvärmning", "energia pobrana przez sprężarkę na ogrzewanie", "energiforbruk oppvarming", "consommation énergie compresseur chauffage", "ısı pompası ısıtma toplam enerji tüketimi", "consumo energia compressore riscaldamento", "spotreba energie vykurovanie kompresorom") +MAKE_TRANSLATION(nrgConsCompWw, "nrgconscomp", "energy consumption compressor", "Energieverbrauch Kompressor", "Energieverbruik compressor", "Energiförbrukning", "energia pobrana przez sprężarkę na c.w.u.", "energiforbruk", "consommation énergie compresseur", "ısı pompası sıcak kullanım suyu toplam enerji tüketimi", "consumo energia compressore", "kompresor spotreby energie") +MAKE_TRANSLATION(nrgConsCompCooling, "nrgconscompcooling", "energy consumption compressor cooling", "Energieverbrauch Kompressor kühlen", "Energieverbruik compressor koelbedrijf", "Energiförbrukning kyla", "energia pobrana przez sprężarkę na chłodzenie", "energiforbruk kjøling", "consommation énergie compresseur refroidissement", "ısı pompası soğutma toplam enerji tüketimi", "consumo energia compressore raffreddamento", "spotreba energie kompresorové chladenie") +MAKE_TRANSLATION(nrgConsCompPool, "nrgconscomppool", "energy consumption compressor pool", "Energieverbrauch Kompressor Pool", "Energiebedrijf compressor zwembadbedrijf", "Energiförbrukning pool", "energia pobrana przez sprężarkę na podgrzewanie basenu", "energiforbruk basseng", "consommation énergie compresseur piscine", "ısı pompası havuz toplam enerji tüketimi", "consumo energia compressore piscina", "spotreba energie kompresorový bazén") MAKE_TRANSLATION(nrgSuppTotal, "nrgsupptotal", "total energy supplied", "gesamte Energieabgabe", "Totaal opgewekte energie", "Genererad energi", "energia oddana (sumarycznie)", "tilført energi", "énergie totale fournie", "sağlanan toplam enerji", "totale energia fornita", "celková dodaná energia") MAKE_TRANSLATION(nrgSuppHeating, "nrgsuppheating", "total energy supplied heating", "gesamte Energieabgabe heizen", "Opgewekte energie verwarmingsbedrijf", "Genererad energi Uppvärmning", "energia oddana na ogrzewanie", "tilført energi oppvarming", "énergie totale fournie chauffage", "ısıtma sağlanan toplam enerji", "energia totale fornita - riscaldamento", "celková dodaná energia na vykurovanie") MAKE_TRANSLATION(nrgSuppWw, "nrgsupp", "total energy warm supplied", "gesamte Energieabgabe Wärme", "Opgewekte energie", "Genererad energi", "energia oddana na c.w.u.", "tilført energi", "énergie chaude totale fournie", "sıcak kullanım suyu sağlanan toplam enerji", "totale energia calorica fornita", "celková dodaná teplá energia") MAKE_TRANSLATION(nrgSuppCooling, "nrgsuppcooling", "total energy supplied cooling", "gesamte Energieabgabe kühlen", "Opgewekte energie koelbedrijf", "Genererad energi Kyla", "energia oddana na chłodzenie", "Tillført energi kjøling", "énergie totale fournie refroidissement", "soğutma sağlanan toplam enerji", "energia totale fornita - raffreddamento", "chladenie s celkovou dodanou energiou") MAKE_TRANSLATION(nrgSuppPool, "nrgsupppool", "total energy supplied pool", "gesamte Energieabgabe Pool", "Opgewekte energie zwembadbedrijf", "Genererad energi Pool", "energia oddana na podgrzewanie basenu", "tilført energi basseng", "énergie totale fournie piscine", "havuz sağlanan toplam enerji", "totale di energia fornita- piscina", "celkový bazén dodanej energie") -MAKE_TRANSLATION(auxElecHeatNrgConsTotal, "auxelecheatnrgconstotal", "total aux elec. heater energy consumption", "Energieverbrauch: el. Zusatzheizung", "Totaal energieverbruik electrisch verwarmingselement", "Energiförbrukning Eltillkott", "energia pobrana przez grzałki", "energiforbruk varmekolbe", "consommation totale énergie electrique auxiliaire chauffage", "ilave elektrikli ısıtıcı toplam enerji tüketimi", "consumo energetico riscaldamento elettrico supplementare", "celková spotreba energie prídavného elektrického ohrievača") -MAKE_TRANSLATION(auxElecHeatNrgConsHeating, "auxelecheatnrgconsheating", "aux elec. heater energy consumption heating", "Energieverbrauch: el. Zusatzheizung Heizen", "Energieverbruik electrisch verwarmingselement voor verwarmingsbedrijf", "Energiförbrukning Eltillskott Uppvärmning", "energia pobrana przez grzałki na ogrzewanie", "energiforbruk varmekolbe oppvarming", "consommation énergie electrique auxiliaire chauffage", "ilave elektrikli ısıtıcı ısınma toplam enerji tüketimi", "consumo di energia riscaldamento elettrico ausiliario", "pomocný elektrický ohrievač spotreba energie vykurovanie") -MAKE_TRANSLATION(auxElecHeatNrgConsWw, "auxelecheatnrgcons", "aux elec. heater energy consumption", "Energieverbrauch: el. Zusatzheizung", "Energieverbruik electrisch verwarmingselement voor", "Energiförbrukning Eltillskott", "energia pobrana przez grzałki na c.w.u.", "energiförbruk varmekolbe", "consommation énergie electrique auxiliaire chauffage", "ilave elektrikli ısıtıcı sıcak kullanım suyu toplam enerji tüketimi", "consumo di energia riscaldamento elettrico ausiliario", "spotreba energie pomocného elektrického ohrievača") -MAKE_TRANSLATION(auxElecHeatNrgConsPool, "auxelecheatnrgconspool", "aux elec. heater energy consumption pool", "Energieverbrauch: el. Zusatzheizung Pool", "Energieverbruik electrisch verwarmingselement voor zwembadbedrijf", "Energiförbrukning Eltillskott Pool", "energia pobrana przez grzałki na podgrzewanie basenu", "energiforbruk el. tilleggsvarme basseng", "consommation énergie electrique auxiliaire chauffage piscine", "ilave elektrikli ısıtıcı havuz toplam enerji tüketimi", "consumo di energia riscaldamento elettrico ausiliario piscina", "bazén spotreby energie pomocného elektrického ohrievača") +MAKE_TRANSLATION(auxElecHeatNrgConsTotal, "auxelecheatnrgconstotal", "total aux elec. heater energy consumption", "Energieverbrauch el. Zusatzheizung", "Totaal energieverbruik electrisch verwarmingselement", "Energiförbrukning Eltillkott", "energia pobrana przez grzałki", "energiforbruk varmekolbe", "consommation totale énergie electrique auxiliaire chauffage", "ilave elektrikli ısıtıcı toplam enerji tüketimi", "consumo energetico riscaldamento elettrico supplementare", "celková spotreba energie prídavného elektrického ohrievača") +MAKE_TRANSLATION(auxElecHeatNrgConsHeating, "auxelecheatnrgconsheating", "aux elec. heater energy consumption heating", "Energieverbrauch el. Zusatzheizung Heizen", "Energieverbruik electrisch verwarmingselement voor verwarmingsbedrijf", "Energiförbrukning Eltillskott Uppvärmning", "energia pobrana przez grzałki na ogrzewanie", "energiforbruk varmekolbe oppvarming", "consommation énergie electrique auxiliaire chauffage", "ilave elektrikli ısıtıcı ısınma toplam enerji tüketimi", "consumo di energia riscaldamento elettrico ausiliario", "pomocný elektrický ohrievač spotreba energie vykurovanie") +MAKE_TRANSLATION(auxElecHeatNrgConsWw, "auxelecheatnrgcons", "aux elec. heater energy consumption", "Energieverbrauch el. Zusatzheizung", "Energieverbruik electrisch verwarmingselement voor", "Energiförbrukning Eltillskott", "energia pobrana przez grzałki na c.w.u.", "energiförbruk varmekolbe", "consommation énergie electrique auxiliaire chauffage", "ilave elektrikli ısıtıcı sıcak kullanım suyu toplam enerji tüketimi", "consumo di energia riscaldamento elettrico ausiliario", "spotreba energie pomocného elektrického ohrievača") +MAKE_TRANSLATION(auxElecHeatNrgConsPool, "auxelecheatnrgconspool", "aux elec. heater energy consumption pool", "Energieverbrauch el. Zusatzheizung Pool", "Energieverbruik electrisch verwarmingselement voor zwembadbedrijf", "Energiförbrukning Eltillskott Pool", "energia pobrana przez grzałki na podgrzewanie basenu", "energiforbruk el. tilleggsvarme basseng", "consommation énergie electrique auxiliaire chauffage piscine", "ilave elektrikli ısıtıcı havuz toplam enerji tüketimi", "consumo di energia riscaldamento elettrico ausiliario piscina", "bazén spotreby energie pomocného elektrického ohrievača") MAKE_TRANSLATION(hpCompOn, "hpcompon", "hp compressor", "WP Kompressor", "WP compressor", "VP Kompressor", "sprężarka pompy ciepła", "vp kompressor", "compresseur pompe à chaleur", "hp ısı pompası", "compressore pompa calore", "hp kompresor") MAKE_TRANSLATION(coolingOn, "coolingon", "cooling on", "Kühlung an", "koelbedrijf", "Kyla", "chłodzenie włączone", "kjøling", "refroidissement", "soğutma", "", "chladenie") // TODO translate @@ -427,17 +426,17 @@ MAKE_TRANSLATION(hpPh1, "hpph1", "high pressure side temperature (PH1)", "Hochdr MAKE_TRANSLATION(hpTa4, "hpta4", "drain pan temp (TA4)", "Kondensatorwanne (TA4)", "Temperatuur condensorafvoerbak (TA4)", " (TA4)", "temperatura ociekacza (TA4)", "kondens temperatur (TA4)", " (TA4)", "tahliye sıcaklığı (TA4)", "temperatura condensatore (TA4)", "teplota vypúšťacej misky (TA4)") // TODO translate MAKE_TRANSLATION(hpTw1, "hptw1", "reservoir temp (TW1)", "DHW Reservoir (TW1)", "(TW1)", "(TW1)", "temperatura zbiornika (TW1)", "(TW1)", "(TW1)", "(TW1)", "(TW1)", "teplota zásobníka (TW1)") // TODO translate -MAKE_TRANSLATION(hpInput1, "hpin1", "input 1 state", "Status: Eingang 1", "Status input 1", "Status Ingång 1", "stan wejścia 1", "status inggang 1", "état entrée 1", "giriş 1 durumu", "stato ingresso 1", "stav vstupu 1") -MAKE_TRANSLATION(hpInput2, "hpin2", "input 2 state", "Status: Eingang 2", "Status input 2", "Status Ingång 2", "stan wejścia 2", "status inggang 2", "état entrée 2", "giriş 2 durumu", "stato ingresso 2", "stav vstupu 2") -MAKE_TRANSLATION(hpInput3, "hpin3", "input 3 state", "Status: Eingang 3", "Status input 3", "Status Ingång 3", "stan wejścia 3", "status inggang 3", "état entrée 3", "giriş 3 durumu", "stato ingresso 3", "stav vstupu 3") -MAKE_TRANSLATION(hpInput4, "hpin4", "input 4 state", "Status: Eingang 4", "Status input 4", "Status Ingång 4", "stan wejścia 4", "status inggang 4", "état entrée 4", "giriş 4 durumu", "stato ingresso 4", "stav vstupu 4") -MAKE_TRANSLATION(hpIn1Opt, "hpin1opt", "input 1 options", "Einstellung: Eingang 1", "Instelling input 1", "Inställningar Ingång 1", "opcje wejścia 1", "innstillinger inngang 1", "options entrée 1", "giriş 1 seçenekleri", "impostazioni ingresso 1", "možnosti vstupu 1") -MAKE_TRANSLATION(hpIn2Opt, "hpin2opt", "input 2 options", "Einstellung: Eingang 2", "Instelling input 2", "Inställningar Ingång 2", "opcje wejścia 2", "innstillinger inngang 2", "options entrée 2", "giriş 2 seçenekleri", "impostazioni ingresso 2", "možnosti vstupu 2") -MAKE_TRANSLATION(hpIn3Opt, "hpin3opt", "input 3 options", "Einstellung: Eingang 3", "Instelling input 3", "Inställningar Ingång 3", "opcje wejścia 3", "innstillinger inngang 3", "options entrée 3", "giriş 3 seçenekleri", "impostazioni ingresso 3", "možnosti vstupu 3") -MAKE_TRANSLATION(hpIn4Opt, "hpin4opt", "input 4 options", "Einstellung: Eingang 4", "Instelling input 4", "Inställningar Ingång 4", "opcje wejścia 4", "innstillinger inngang 4", "options entrée 4", "giriş 4 seçenekleri", "impostazioni ingresso 4", "možnosti vstupu 4") -MAKE_TRANSLATION(maxHeatComp, "maxheatcomp", "heat limit compressor", "Heizstab: Limit mit Kompressor", "heat limit compressor", "heat limit compressor", "ograniczenie mocy sprężarki", "max varmegrense kompressor", "limite chaleur compresseur", "ısı pompası ısıtma sınırı", "limite riscaldamento compressore", "tepelný limit kompresora") -MAKE_TRANSLATION(maxHeatHeat, "maxheatheat", "heat limit heating", "Heizstab: Limit Leistung", "heat limit heating", "heat limit heating", "ograniczenie mocy w trybie ogrzewania", "maks varmegrense oppvarming", "limite chaleur chauffage", "ısınma ısıtma sınırı", "limite calore riscaldamento", "vyhrievanie limitu tepla") -MAKE_TRANSLATION(maxHeatDhw, "maxheat", "heat limit", "Heizstab: Limit für WW", "heat limit", "heat limit", "ograniczenie mocy w trybie c.w.u.", "varmegrense", "limite chaleur", "sıcak kullanım suyu ısınma sınırı", "limite calore", "tepelný limit") +MAKE_TRANSLATION(hpInput1, "hpin1", "input 1 state", "Status Eingang 1", "Status input 1", "Status Ingång 1", "stan wejścia 1", "status inggang 1", "état entrée 1", "giriş 1 durumu", "stato ingresso 1", "stav vstupu 1") +MAKE_TRANSLATION(hpInput2, "hpin2", "input 2 state", "Status Eingang 2", "Status input 2", "Status Ingång 2", "stan wejścia 2", "status inggang 2", "état entrée 2", "giriş 2 durumu", "stato ingresso 2", "stav vstupu 2") +MAKE_TRANSLATION(hpInput3, "hpin3", "input 3 state", "Status Eingang 3", "Status input 3", "Status Ingång 3", "stan wejścia 3", "status inggang 3", "état entrée 3", "giriş 3 durumu", "stato ingresso 3", "stav vstupu 3") +MAKE_TRANSLATION(hpInput4, "hpin4", "input 4 state", "Status Eingang 4", "Status input 4", "Status Ingång 4", "stan wejścia 4", "status inggang 4", "état entrée 4", "giriş 4 durumu", "stato ingresso 4", "stav vstupu 4") +MAKE_TRANSLATION(hpIn1Opt, "hpin1opt", "input 1 options", "Einstellung Eingang 1", "Instelling input 1", "Inställningar Ingång 1", "opcje wejścia 1", "innstillinger inngang 1", "options entrée 1", "giriş 1 seçenekleri", "impostazioni ingresso 1", "možnosti vstupu 1") +MAKE_TRANSLATION(hpIn2Opt, "hpin2opt", "input 2 options", "Einstellung Eingang 2", "Instelling input 2", "Inställningar Ingång 2", "opcje wejścia 2", "innstillinger inngang 2", "options entrée 2", "giriş 2 seçenekleri", "impostazioni ingresso 2", "možnosti vstupu 2") +MAKE_TRANSLATION(hpIn3Opt, "hpin3opt", "input 3 options", "Einstellung Eingang 3", "Instelling input 3", "Inställningar Ingång 3", "opcje wejścia 3", "innstillinger inngang 3", "options entrée 3", "giriş 3 seçenekleri", "impostazioni ingresso 3", "možnosti vstupu 3") +MAKE_TRANSLATION(hpIn4Opt, "hpin4opt", "input 4 options", "Einstellung Eingang 4", "Instelling input 4", "Inställningar Ingång 4", "opcje wejścia 4", "innstillinger inngang 4", "options entrée 4", "giriş 4 seçenekleri", "impostazioni ingresso 4", "možnosti vstupu 4") +MAKE_TRANSLATION(maxHeatComp, "maxheatcomp", "heat limit compressor", "Heizstab Limit mit Kompressor", "heat limit compressor", "heat limit compressor", "ograniczenie mocy sprężarki", "max varmegrense kompressor", "limite chaleur compresseur", "ısı pompası ısıtma sınırı", "limite riscaldamento compressore", "tepelný limit kompresora") +MAKE_TRANSLATION(maxHeatHeat, "maxheatheat", "heat limit heating", "Heizstab Limit Leistung", "heat limit heating", "heat limit heating", "ograniczenie mocy w trybie ogrzewania", "maks varmegrense oppvarming", "limite chaleur chauffage", "ısınma ısıtma sınırı", "limite calore riscaldamento", "vyhrievanie limitu tepla") +MAKE_TRANSLATION(maxHeatDhw, "maxheat", "heat limit", "Heizstab Limit für WW", "heat limit", "heat limit", "ograniczenie mocy w trybie c.w.u.", "varmegrense", "limite chaleur", "sıcak kullanım suyu ısınma sınırı", "limite calore", "tepelný limit") MAKE_TRANSLATION(auxHeaterOff, "auxheateroff", "disable aux heater", "Zusatzheizer deaktivieren", "Bijverwarming uitsc", "Blockera eltillskott", "wyłącz dogrzewacz", "deaktiver tilleggsvarme", "Désactiver chauff. d'app", "ilave ısıtıcıyı kapat", "disattivare i riscaldatori addizionali", "vypnúť pomocný ohrievač") MAKE_TRANSLATION(auxHeaterStatus, "auxheaterstatus", "aux heater status", "Zusatzheizerstatus", "Bijverwarming", "Eltillskott Status", "status dogrzewacza", "status el. tillegsvarme", "Chauffage auxiliaire", "ilave ısıtıcı durumu", "stato riscaldatori addizionali", "stav pomocného ohrievača") @@ -445,11 +444,11 @@ MAKE_TRANSLATION(auxHeaterOnly, "auxheateronly", "aux heater only", "nur Zusatzh MAKE_TRANSLATION(auxHeaterDelay, "auxheaterdelay", "aux heater on delay", "Zusatzheizer verzögert ein", "Bijverw. vertraagd aan", "Eltillskottfördröjning på", "opóźnienie włączenia dogrzewacza", "Tilleggsvarmer forsinket på", "Chauff app tempo marche", "ilave ısıtıcı beklemede", "ritardo riscaldatori addizionali", "oneskorenie prídavného ohrievača") MAKE_TRANSLATION(silentMode, "silentmode", "silent mode", "Silentmodus", "Stiller gebruik", "Tyst läge", "tryb cichy", "stille modus", "Fct silencieux", "sessiz mod", "modalità silenziosa", "tichý režim") MAKE_TRANSLATION(minTempSilent, "mintempsilent", "min outside temp for silent mode", "Minimale Außentemperatur Silentmodus", "Stiller gebruik min. buitentemp", "Tyst läge min temp", "minimalna temperatura zewnętrzna dla trybu cichego", "atille modus min temp", "Fct silencieux: Temp. extérieure min.", "sessiz mod için min. dış ortam sıcaklığı", "modalità silenziosa temperatura esterna minima", "min. vonkajšia teplota pre tichý režim") -MAKE_TRANSLATION(tempParMode, "tempparmode", "outside temp parallel mode", "Heizstab: Parallelbetrieb", "Buitentemp. parallelbedr", "Parallelläge Utomhustemp.", "maksymalna temperatura zewnętrzna dla dogrzewacza", "", "Temp. ext. fct parallèle", "paralel mod dış ortam sıcaklığı", "modalità parallela temperatura esterna", "paralelný režim mimo teploty") // TODO translate +MAKE_TRANSLATION(tempParMode, "tempparmode", "outside temp parallel mode", "Heizstab Parallelbetrieb", "Buitentemp. parallelbedr", "Parallelläge Utomhustemp.", "maksymalna temperatura zewnętrzna dla dogrzewacza", "", "Temp. ext. fct parallèle", "paralel mod dış ortam sıcaklığı", "modalità parallela temperatura esterna", "paralelný režim mimo teploty") // TODO translate MAKE_TRANSLATION(auxHeatMixValve, "auxheatmix", "aux heater mixing valve", "Mischventil Zusatzheizer", "Bijverwarming menger", "Eltilskott Blandarventil", "mieszacz dogrzewacza", "eltilskudd blandeventil", "Chauffage auxiliaire mélangeur", "ilave ısıtıcı karışım vanası", "miscela riscaldatori addizionali", "zmiešavací ventil pomocného ohrievača") -MAKE_TRANSLATION(hpHystHeat, "hphystheat", "on/off hyst heat", "Schalthysterese: Heizen", "Aan/uit-hysteresis in verw. bedrijf", "Hstereses Uppvärm.", "histereza wł./wył. ogrzewania", "På/av hysterese Oppvar.", "Hystérésis Marche en mode chauffage", "ısıtma gecikmesi", "isteresi di commutazione riscaldamento", "zapnutie/vypnutie hyst ohrevu") -MAKE_TRANSLATION(hpHystCool, "hphystcool", "on/off hyst cool", "Schalthysterese: Kühlen", "Aan/uit-hysteresis in koelbedrijf", "Hystereses Kyla", "histereza wł./wył. chłodzenia", "hystrese kjøling", "Hystérésis Marche en mode refroidissement", "soğutma gecikmesi", "isteresi di commutazione raffreddamento", "zapnutie/vypnutie hyst chladenia") -MAKE_TRANSLATION(hpHystPool, "hphystpool", "on/off hyst pool", "Schalthysterese: Pool", "an/uit-hysteresis in zwembadbedri", "Hystereses Pool", "histereza wł./wył. podgrzewania basenu", "hystrese basseng", "Hystérésis Marche en mode piscine", "havuz gecikmesi", "isteresi di commutazione piscina", "zapnutie/vypnutie hyst bazénu") +MAKE_TRANSLATION(hpHystHeat, "hphystheat", "on/off hyst heat", "Schalthysterese Heizen", "Aan/uit-hysteresis in verw. bedrijf", "Hstereses Uppvärm.", "histereza wł./wył. ogrzewania", "På/av hysterese Oppvar.", "Hystérésis Marche en mode chauffage", "ısıtma gecikmesi", "isteresi di commutazione riscaldamento", "zapnutie/vypnutie hyst ohrevu") +MAKE_TRANSLATION(hpHystCool, "hphystcool", "on/off hyst cool", "Schalthysterese Kühlen", "Aan/uit-hysteresis in koelbedrijf", "Hystereses Kyla", "histereza wł./wył. chłodzenia", "hystrese kjøling", "Hystérésis Marche en mode refroidissement", "soğutma gecikmesi", "isteresi di commutazione raffreddamento", "zapnutie/vypnutie hyst chladenia") +MAKE_TRANSLATION(hpHystPool, "hphystpool", "on/off hyst pool", "Schalthysterese Pool", "an/uit-hysteresis in zwembadbedri", "Hystereses Pool", "histereza wł./wył. podgrzewania basenu", "hystrese basseng", "Hystérésis Marche en mode piscine", "havuz gecikmesi", "isteresi di commutazione piscina", "zapnutie/vypnutie hyst bazénu") MAKE_TRANSLATION(tempDiffHeat, "tempdiffheat", "temp diff TC3/TC0 heat", "Temp.diff. TC3/TC0 Heizen", "Temp.vers. TC3/TC0 verw", "Delta(T) TC3/TC0 Uppvärm.", "różnica temperatur TC3/TC0 w trakcie ogrzewania", "temp. diff. TC3/TC0 oppvarm", "Delta T TC3/TC0 Chauff", "TC3-TC0 ısıtma sıcaklık farkı", "Delta T riscaldamento TC3/TC0", "teplotný rozdiel TC3/TC0 tepla") MAKE_TRANSLATION(tempDiffCool, "tempdiffcool", "temp diff TC3/TC0 cool", "Temp.diff. TC3/TC0 Kühlen", "Temp.vers. TC3/TC0 koel.", "Delta(T) TC3/TC0 Kyla", "różnica temperatur TC3/TC0 w trakcie chłodzenia", "temp. diff. TC3/TC0 kjøling", "Delta T TC3/TC0 Refroid.", "TC3-TC0 soğutma sıcaklık farkı", "Delta T raffreddamento TC3/TC0", "teplotný rozdiel TC3/TC0 chladenie") MAKE_TRANSLATION(silentFrom, "silentfrom", "silent mode from", "Silentmodus Start", "Start stille modus", "", "początek trybu cichego", "stillemodus starter", "", "sessiz mod başlangıcı", "avvio della modalità silenziosa", "tichý režim od") // TODO translate @@ -488,8 +487,8 @@ MAKE_TRANSLATION(boost, "boost", "boost mode", "Boost-Modus", "", "", "tryb wzmo MAKE_TRANSLATION(boosttime, "boosttime", "boost time", "Boost-Dauer", "", "", "czas trwania wzmocnienia", "", "", "", "", "čas trvania posilnenia") // TODO translate MAKE_TRANSLATION(hpPumpMode, "hppumpmode", "primary heatpump mode", "primärer Wärmepumpenmodus", "", "", "tryb pracy głównej pompy ciepła", "", "", "", "", "režim primárneho tepelného čerpadla") // TODO translate MAKE_TRANSLATION(instantstart, "instantstart", "instant start", "Sofortstart", "", "", "natychmiastowy start", "", "", "", "", "okamžité spustenie") // TODO translate -MAKE_TRANSLATION(heatondelay, "heatondelay", "heat-on delay", "Heizeinschaltverzögerung", "", "", "opóźnienie włączania ogrzewania", "", "", "", "", "Oneskorenie zapnutia kúreni") // TODO translate -MAKE_TRANSLATION(heatoffdelay, "heatoffdelay", "heat-off delay", "Heizausschaltverzögerung", "", "", "opóźnienie włączania ogrzewania", "", "", "", "", "Oneskorenie vypnutia kúrenia") // TODO translate +MAKE_TRANSLATION(heatondelay, "heatondelay", "heat-on delay", "Einschaltverzögerung Heizen", "", "", "opóźnienie włączania ogrzewania", "", "", "", "", "Oneskorenie zapnutia kúreni") // TODO translate +MAKE_TRANSLATION(heatoffdelay, "heatoffdelay", "heat-off delay", "Ausschaltverzögerung Heizen", "", "", "opóźnienie włączania ogrzewania", "", "", "", "", "Oneskorenie vypnutia kúrenia") // TODO translate MAKE_TRANSLATION(hpSetDiffPress, "hpsetdiffpress", "set differental pressure", "Pumpensolldruck", "", "", "różnica ciśnień", "", "", "", "", "nastaviť diferenčný tlak") // TODO translate MAKE_TRANSLATION(hpFan, "fan", "fan", "Lüfter", "", "", "wentylator", "", "", "", "", "ventilátor") // TODO translate MAKE_TRANSLATION(hpShutdown, "shutdown", "shutdown", "Abschalten", "", "", "wyłączenie", "", "", "", "", "vypnutie") // TODO translate @@ -502,21 +501,21 @@ MAKE_TRANSLATION(pc1Rate, "pc1rate", "PC1 rate", "PC1 Rate", "", "", "", "", "", MAKE_TRANSLATION(hybridStrategy, "hybridstrategy", "hybrid control strategy", "Hybrid-Steuerungsstrategie", "Hybride strategie", "Hybrid kontrollstrategi", "strategia sterowania hybrydowego", "hybrid kontrollstrategi", "stratégie contrôle hybride", "hibrit kontrol stratejisi", "strategia comtrollo ibrido", "hybridná stratégia riadenia") MAKE_TRANSLATION(switchOverTemp, "switchovertemp", "outside switchover temperature", "Außentemperatur für Umschaltung", "Schakeltemperatuur buitentemperatuur", "Utomhus Omställningstemperatur", "zewnętrzna temperatura przełączania", "utendørstemp styring", "basculement par température extérieure", "geçiş için dış sıcaklık", "temperatura esterna per commutazione", "vonkajšia prepínacia teplota") MAKE_TRANSLATION(energyCostRatio, "energycostratio", "energy cost ratio", "Energie-/Kostenverhältnis", "Energiekostenratio", "Energi/Kostnads-förhållande", "współczynnik energia/koszt", "energi/kostnads forhold", "ratio coût énergie", "enerji maliyet oranı", "rapporto energia/costo", "pomer nákladov na energiu") -MAKE_TRANSLATION(fossileFactor, "fossilefactor", "fossile energy factor", "Energiefaktor: Fossil", "Energiefactor fossiele brandstof", "Energifaktor fossilenergi", "udział energii z paliw kopalnych", "energifaktor fossilenergi", "facteur énergie fossile", "fosil yakıt faktörü", "fattore energia fossile", "faktor fosílnej energie") -MAKE_TRANSLATION(electricFactor, "electricfactor", "electric energy factor", "Energiefaktor: elektrisch", "Energiefactor electrisch", "Elektrisk energifaktor", "udział energii elektrycznej", "elektrisk energifaktor", "facteur énergie électrique", "elektrik enerjisi faktörü", "fattore energia elettrica", "faktor elektrickej energie") +MAKE_TRANSLATION(fossileFactor, "fossilefactor", "fossile energy factor", "Energiefaktor Fossil", "Energiefactor fossiele brandstof", "Energifaktor fossilenergi", "udział energii z paliw kopalnych", "energifaktor fossilenergi", "facteur énergie fossile", "fosil yakıt faktörü", "fattore energia fossile", "faktor fosílnej energie") +MAKE_TRANSLATION(electricFactor, "electricfactor", "electric energy factor", "Energiefaktor elektrisch", "Energiefactor electrisch", "Elektrisk energifaktor", "udział energii elektrycznej", "elektrisk energifaktor", "facteur énergie électrique", "elektrik enerjisi faktörü", "fattore energia elettrica", "faktor elektrickej energie") MAKE_TRANSLATION(delayBoiler, "delayboiler", "delay boiler support", "Verzögerungsoption", "Vertragingsoptie", "Fördröjningsoption", "opcja opóźnienia", "Fördörjningsoption", "option retardement chaudière", "kazan desteğini ötele", "opzione ritardo caldaia","oneskorená podpora kotla") MAKE_TRANSLATION(tempDiffBoiler, "tempdiffboiler", "temp diff boiler support", "Temperaturdifferenzoption", "Verschiltemperatuuroptie", "Temperaturskillnadsoption", "opcja różnicy temperatur", "temperatursforskjell kjele", "option différence température", "sıcaklık farkı kazan desteği", "opzione differenza temperatura", "možnosť rozdielu teplôt") MAKE_TRANSLATION(lowNoiseMode, "lownoisemode", "low noise mode", "Geräuscharmer Betrieb", "Stil bedrijf", "Tyst läge", "tryb cichy", "stillemodus", "mode faible bruit", "düşük ses modu", "modalità a basso rumore", "režim nízkej hlučnosti") MAKE_TRANSLATION(lowNoiseStart, "lownoisestart", "low noise starttime", "Start geräuscharmer Betrieb", "Start stil bedrijf", "Tyst läge starttid", "początek trybu cichego", "stille modu starttid", "heure démarrage faible bruit", "düşük ses başlangıç", "ora di avvio a basso rumore", "nízka hlučnosť spustenia") MAKE_TRANSLATION(lowNoiseStop, "lownoisestop", "low noise stoptime", "Stopp geräuscharmer Betrieb", "Stop stil bedrijf", "Tyst läge stopptid", "koniec trybu cichego", "stille modus stopptid", "heure arrêt faible bruit", "düşük ses bitiş", "ora di arresto funzionamento silenzioso", "doba zastavenia s nízkou hlučnosťou") -MAKE_TRANSLATION(energyPriceGas, "energypricegas", "energy price gas", "Energiepreis: Gas", "Energieprijs gas", "Gaspris", "cena energii z gazu", "energipris gass", "prix énergie gaz", "gaz enerjisi fiyatı", "prezzo energia gas", "cena energie plyn") -MAKE_TRANSLATION(energyPriceEl, "energypriceel", "energy price electric", "Energiepreis: Eletrizität", "energieprijs electriciteit", "Elpris", "cena energii elektrycznej", "strømpris", "prix énergie électrique", "elektrik enerjisi fiyatı", "prezzo energia elettrica", "cena elektrickej energie") +MAKE_TRANSLATION(energyPriceGas, "energypricegas", "energy price gas", "Energiepreis Gas", "Energieprijs gas", "Gaspris", "cena energii z gazu", "energipris gass", "prix énergie gaz", "gaz enerjisi fiyatı", "prezzo energia gas", "cena energie plyn") +MAKE_TRANSLATION(energyPriceEl, "energypriceel", "energy price electric", "Energiepreis Eletrizität", "energieprijs electriciteit", "Elpris", "cena energii elektrycznej", "strømpris", "prix énergie électrique", "elektrik enerjisi fiyatı", "prezzo energia elettrica", "cena elektrickej energie") MAKE_TRANSLATION(energyPricePV, "energyfeedpv", "feed in PV", "PV-Einspeisevergütung", "PV teruglevertarief", "PV Energi", "cena energii PV", "strømpris PV", "alimentation PV", "giren güneş enerjisi", "energia fotovoltaico", "Výkupná cena FV") MAKE_TRANSLATION(hybridDHW, "hybriddhw", "hybrid DHW", "Hybrid-Warmwasser", "Hybride ww", "Hybridläge varmvatten", "hybrydowa c.w.u.", "hybridmodus varmtvann", "ecs hybride", "hibrit SKS", "ACS ibrida", "hybridná TÚV") MAKE_TRANSLATION(airPurgeMode, "airpurgemode", "air purge mode", "Luftspülung", "Luchtzuivering", "Luftreningsläge", "tryb oczyszczania powietrza", "luftsrensningsmodus", "mode purge air", "hava temizleme modu", "modalita spurgo aria", "režim čistenia vzduchu") MAKE_TRANSLATION(heatPumpOutput, "heatpumpoutput", "heatpump output", "WP-Leistung", "WP output", "Värmepumpseffekt", "moc wyjściowa pompy ciepła", "varmepumpeeffekt", "sortie pompe à chaleur", "ısı pompası çıkışı", "prestazione pompa calore", "Výkon tepelného čerpadla") MAKE_TRANSLATION(coolingCircuit, "coolingcircuit", "cooling circuit", "Kühlkreislauf", "Koelcircuit", "Kylkrets", "obwód chłodzący", "kjølekrets", "circuit refroidissement", "soğutma devresi", "circuito raffreddante", "chladiaci okruh") -MAKE_TRANSLATION(compStartMod, "compstartmod", "compressor start modulation", "Kompressorstartleistung", "Beginvermogen compressor", "Kompressor startmodulering", "początkowa modulacja sprężarki", "kompressor startmodulering", "modulation démarrage compresseur", "kazan başlangıç modülasyonu", "avvio modulazione compressore", "modulácia štartu kompresora") +MAKE_TRANSLATION(compStartMod, "compstartmod", "compressor start modulation", "Kompressorstartmodulation", "Beginvermogen compressor", "Kompressor startmodulering", "początkowa modulacja sprężarki", "kompressor startmodulering", "modulation démarrage compresseur", "kazan başlangıç modülasyonu", "avvio modulazione compressore", "modulácia štartu kompresora") MAKE_TRANSLATION(heatDrainPan, "heatdrainpan", "heat drain pan", "Wärmeausgleichsgefäß", "Vereffeningsvat", "Uppvärm. dränering", "zbiornik wyrównawczy ciepła", "oppvarming drenering", "bac récupération chaleur", "ısı tahliye tablası", "serbatoio scarico condensa", "odkvapkávacia nádoba na teplo") MAKE_TRANSLATION(heatCable, "heatcable", "heating cable", "Heizband", "heating cable", "värmekabel", "przewód grzejny", "varmekabel", "câble chauffant", "ısıtma kablosu", "cavo riscaldante", "vykurovací kábel") @@ -558,19 +557,19 @@ MAKE_TRANSLATION(releaseWait, "releasewait", "boiler release wait time", "Wartez // energy MAKE_TRANSLATION(nrgTotal, "nrgtotal", "total energy", "Gesamtenergie", "", "", "całkowita energia", "", "", "", "", "celková energia") // TODO translate -MAKE_TRANSLATION(nrgHeat, "nrgheat", "energy heating", "Energie: Heizen", "", "", "energia na ogrzewanie", "", "", "ısıtma enerjisi", "energia vykurovania", "energetické vykurovanie") // TODO translate -MAKE_TRANSLATION(nrgCool, "nrgcool", "energy cooling", "Energie: Kühlen", "", "", "", "", "", "", "", "energia chladenia") // TODO translate +MAKE_TRANSLATION(nrgHeat, "nrgheat", "energy heating", "Energie Heizen", "", "", "energia na ogrzewanie", "", "", "ısıtma enerjisi", "energia vykurovania", "energetické vykurovanie") // TODO translate +MAKE_TRANSLATION(nrgCool, "nrgcool", "energy cooling", "Energie Kühlen", "", "", "", "", "", "", "", "energia chladenia") // TODO translate MAKE_TRANSLATION(nrgWw, "nrg", "energy", "Energie", "", "", "energia", "", "", "sıcak kullanım suyu enerjisi", "", "energia") // TODO translate -MAKE_TRANSLATION(nrgHeat2, "nrgheat2", "energy heating 2", "Energie: Heizen 2", "", "", "energia na ogrzewanie 2", "", "", "ısıtma enerjisi 2", "", "energia vykurovania 2") // TODO translate +MAKE_TRANSLATION(nrgHeat2, "nrgheat2", "energy heating 2", "Energie Heizen 2", "", "", "energia na ogrzewanie 2", "", "", "ısıtma enerjisi 2", "", "energia vykurovania 2") // TODO translate MAKE_TRANSLATION(nrgWw2, "nrg2", "energy 2", "Energie 2", "", "", "energia 2", "", "", "sıcak kullanım suyu enerjisi 2", "", "energia 2") // TODO translate MAKE_TRANSLATION(nomPower, "nompower", "nominal Power", "Brennerleistung", "", "", "moc nominalna", "", "", "nominal güç", "", "nominálny výkon") // TODO translate MAKE_TRANSLATION(meterTotal, "metertotal", "meter total", "Gesamtmessung", "", "", "licznik całkowity", "", "", "", "", "počítadlo celkom") // TODO translate -MAKE_TRANSLATION(meterComp, "metercomp", "meter compressor", "Messung: Kompressor", "", "", "licznik sprężarki", "", "", "", "", "počítadlo kompresor") // TODO translate -MAKE_TRANSLATION(meterEHeat, "metereheat", "meter e-heater", "Messung: E-Heizer", "", "", "licznik dogrzewacza", "", "", "", "", "počítadlo e-ohrievača") // TODO translate -MAKE_TRANSLATION(meterHeat, "meterheat", "meter heating", "Messung: Heizen", "", "", "licznik ogrzewania", "", "", "", "", "počítadlo kúrenia") // TODO translate -MAKE_TRANSLATION(meterCool, "metercool", "meter cooling", "Messung: Kühlen", "", "", "", "", "", "", "", "počítadlo chladenia") // TODO translate +MAKE_TRANSLATION(meterComp, "metercomp", "meter compressor", "Messung Kompressor", "", "", "licznik sprężarki", "", "", "", "", "počítadlo kompresor") // TODO translate +MAKE_TRANSLATION(meterEHeat, "metereheat", "meter e-heater", "Messung E-Heizer", "", "", "licznik dogrzewacza", "", "", "", "", "počítadlo e-ohrievača") // TODO translate +MAKE_TRANSLATION(meterHeat, "meterheat", "meter heating", "Messung Heizen", "", "", "licznik ogrzewania", "", "", "", "", "počítadlo kúrenia") // TODO translate +MAKE_TRANSLATION(meterCool, "metercool", "meter cooling", "Messung Kühlen", "", "", "", "", "", "", "", "počítadlo chladenia") // TODO translate MAKE_TRANSLATION(meterWw, "meter", "meter", "Messung", "", "", "licznik", "", "", "", "", "počítadlo") // TODO translate -MAKE_TRANSLATION(gasMeterHeat, "gasmeterheat", "gas meter heating", "Gaszähler: Heizen", "", "", "licznik gazu na ogrzewanie", "", "", "", "", "počítadlo plynu kúrenia") // TODO translate +MAKE_TRANSLATION(gasMeterHeat, "gasmeterheat", "gas meter heating", "Gaszähler Heizen", "", "", "licznik gazu na ogrzewanie", "", "", "", "", "počítadlo plynu kúrenia") // TODO translate MAKE_TRANSLATION(gasMeterWw, "gasmeter", "gas meter", "Gaszähler", "", "", "licznik gazu", "", "", "", "", "počítadlo plynu") // TODO translate MAKE_TRANSLATION(hpCurrPower, "hpcurrpower", "compressor current power", "akt. Kompressorleistung", "", "", "", "", "", "", "", "") // TODO translate MAKE_TRANSLATION(hpPowerLimit, "hppowerlimit", "power limit", "Leistungsgrenze", "", "", "", "", "", "", "", "") // TODO translate @@ -593,7 +592,7 @@ MAKE_TRANSLATION(wwSetTemp, "settemp", "set temperature", "Solltemperatur", "Str MAKE_TRANSLATION(wwType, "type", "type", "Typ", "type", "Typ", "typ", "type", "type", "tip", "tipo", "typ") MAKE_TRANSLATION(wwComfort, "comfort", "comfort", "Komfort", "Comfort", "Komfort", "komfort", "komfort", "confort", "konfor", "Comfort", "komfort") MAKE_TRANSLATION(wwComfort1, "comfort1", "comfort mode", "Komfort-Modus", "Comfort modus", "Komfortläge", "tryb komfortu", "komfort modus", "mode confort", "konfor modu", "modalità comfort", "komfortný režim") -MAKE_TRANSLATION(wwFlowTempOffset, "flowtempoffset", "flow temperature offset", "Vorlauftemperaturanhebung", "Aanvoertemperatuur offset", "Flödestemperatur förskjutning", "korekta temperatury wypływu", "turtemperaturforskyvning", "offset température flux", "akış sıcaklığı artışı", "aumento della temperatura di ritorno", "Posun teploty prívodu") +MAKE_TRANSLATION(wwFlowTempOffset, "flowtempoffset", "flow temperature offset", "Anhebung Vorlauftemperatur", "Aanvoertemperatuur offset", "Flödestemperatur förskjutning", "korekta temperatury wypływu", "turtemperaturforskyvning", "offset température flux", "akış sıcaklığı artışı", "aumento della temperatura di ritorno", "Posun teploty prívodu") MAKE_TRANSLATION(wwMaxPower, "maxpower", "max power", "max. Leistung", "Maximaal vermogen", "Max. Effekt", "moc. maksymalna", "maks. effekt", "puissance max.", "maksimum güç", "potenza massima", "maximálny výkon") MAKE_TRANSLATION(wwCircPump, "circpump", "circulation pump available", "Zirkulationspumpe vorhanden", "Circulatiepomp aanwezig", "Cirkulationspump tillgänglig", "pompa cyrkulacji zainstalowana", "sirkulasjonspumpe tilgjengelig", "pompe circulation disponible", "sikülasyon pompası müsait", "pompa circolazione disponibile", "dostupné obehové čerpadlo") MAKE_TRANSLATION(wwChargeType, "chargetype", "charging type", "Speicherladungstyp", "Buffer laadtype", "Laddningstyp", "sposób grzania zasobnika", "varmetype", "type chargement", "şarj tipi", "tipo caricamento", "typ nabíjania") @@ -624,14 +623,14 @@ MAKE_TRANSLATION(wwProgMode, "progmode", "program", "Programmmodus", "Programma" MAKE_TRANSLATION(wwCircProg, "circprog", "circulation program", "Zirkulationsprogramm", "Circulatieprogramma", "Cirkulationsprogram", "program cyrkulacji c.w.u.", "sirkulationsprogram", "programme circulation", "sirkülasyon programı", "programma circolazione", "obehový program") MAKE_TRANSLATION(wwMaxTemp, "maxtemp", "maximum temperature", "maximale Temperatur", "maximale temperatuur", "maximal Temperatur", "temperatura maksymalna", "maksimal temperatur", "température max", "maksimum sıcaklık", "temperatura massima", "maximálna teplota") MAKE_TRANSLATION(wwOneTimeKey, "onetimekey", "one time key function", "Einmalladungstaste", "Knop voor eenmalig laden buffer", "Engångsfunktion", "przycisk jednorazowego ogrzania", "engangsknapp varme", "fonction touche unique", "tek seferlik doldurma fonksiyonu", "pulsante funzione singola", "jednorazová kľúčová funkcia") -MAKE_TRANSLATION(wwSolarTemp, "solartemp", "solar boiler temperature", "Solarboilertemperatur", "Zonneboiler temperatuur", "Solpanel Temp", "temperatura zasobnika solarnego", "solpaneltemp", "température chaudière solaire", "güneş enerjisi kazan sıcaklığı", "temperatura pannello solare", "teplota solárneho kotla") +MAKE_TRANSLATION(wwSolarTemp, "solartemp", "solar boiler temperature", "Solarkesseltemperatur", "Zonneboiler temperatuur", "Solpanel Temp", "temperatura zasobnika solarnego", "solpaneltemp", "température chaudière solaire", "güneş enerjisi kazan sıcaklığı", "temperatura pannello solare", "teplota solárneho kotla") // mqtt values / commands MAKE_TRANSLATION(switchtime, "switchtime", "program switchtime", "Programmschaltzeit", "Programma schakeltijd", "Program Bytestid", "program czasowy", "programbyttetid", "heure commutation programme", "program değiştirme süresi", "ora commutazione programmata", "čas prepnutia programu") MAKE_TRANSLATION(switchtime1, "switchtime1", "own1 program switchtime", "Programmschaltzeit 1", "Schakeltijd programma 1", "Program 1 Bytestid", "program przełączania 1", "byttetidprogram 1", "heure de commutation programme 1", "program1 değiştirme süresi", "ora commutazione programma 1", "vlastný 1 program prepnutia") MAKE_TRANSLATION(switchtime2, "switchtime2", "own2 program switchtime", "Programmschaltzeit 2", "Schakeltijd programma 2", "Program 2 Bytestid", "program przełączania 2", "byttetid program 2", "heure de changement programme 2", "program1 değiştirme süresi", "ora commutazione programma 2", "vlastný 2 program prepnutia") -MAKE_TRANSLATION(wwswitchtime, "switchtimeWW", "program switchtime warm water", "Programmschaltzeit: Warmwasser", "Warm water programma schakeltijd", "Varmvattenprogram Bytestid", "program czasowy", "byttetid varmtvannsprogram", "heure commutation programme", "sıcak kullanıom suyu program değiştirme süresi", "Tempo di commutazione del programma", "čas prepnutia programu") -MAKE_TRANSLATION(wwcircswitchtime, "circswitchtime", "circulation program switchtime", "Zirculationsprogramm: Schaltzeit", "Schakeltijd circulatieprogramma", "Cirkulationsprogram Bytestid", "program cyrkulacji", "byttetid sirkulasjonsprogram", "heure commutation programme circulation", "sirkülasyon program değiştirme süresi", "ora commutazione programma circolazione", "čas prepnutia cirkulačného programu") +MAKE_TRANSLATION(wwswitchtime, "switchtimeWW", "program switchtime warm water", "Programmschaltzeit Warmwasser", "Warm water programma schakeltijd", "Varmvattenprogram Bytestid", "program czasowy", "byttetid varmtvannsprogram", "heure commutation programme", "sıcak kullanıom suyu program değiştirme süresi", "Tempo di commutazione del programma", "čas prepnutia programu") +MAKE_TRANSLATION(wwcircswitchtime, "circswitchtime", "circulation program switchtime", "Zirculationsprogramm Schaltzeit", "Schakeltijd circulatieprogramma", "Cirkulationsprogram Bytestid", "program cyrkulacji", "byttetid sirkulasjonsprogram", "heure commutation programme circulation", "sirkülasyon program değiştirme süresi", "ora commutazione programma circolazione", "čas prepnutia cirkulačného programu") MAKE_TRANSLATION(dateTime, "datetime", "date/time", "Datum/Zeit", "Datum/Tijd", "Datum/Tid", "data i godzina", "dato/tid", "date/heure", "zaman/saat", "Data/Ora", "dátum/čas") MAKE_TRANSLATION(errorCode, "errorcode", "error code", "Fehlercode", "Foutmeldingscode", "Felkod", "kod błędu", "feikode", "code erreur", "hata kodu", "codice errore", "error kód") MAKE_TRANSLATION(ibaMainDisplay, "display", "display", "Anzeige", "Display", "Display", "wyświetlacz", "skjerm", "affichage", "ekran", "Display", "display") @@ -653,11 +652,12 @@ MAKE_TRANSLATION(autodst, "autodst", "automatic change daylight saving time", "A MAKE_TRANSLATION(preheating, "preheating", "preheating in the clock program", "Vorheizen im Zeitprogramm", "Voorverwarming in het klokprogramma", "Förvärmning i tidsprogram", "podgrzewanie w programie czasowym", "forvarming i tidsprogram", "préchauffage dans programme horloge", "saat programında ön ısıtma", "preriscaldamento nel programma orologio", "predohrev v programe hodín") MAKE_TRANSLATION(offtemp, "offtemp", "temperature when mode is off", "Temperatur bei AUS", "Temperatuur bij UIT", "Temperatur Avslagen", "temperatura w trybie \"wył.\"", "temperatur avslått", "température lorsque mode désactivé", "mod kapalı iken sıcaklık", "temperatura quando la modalità è disattivata", "teplota, keď je režim vypnutý") MAKE_TRANSLATION(mixingvalves, "mixingvalves", "mixing valves", "Mischventile", "Mengkleppen", "Blandningsventiler", "zawory mieszające", "blandeventiler", "vannes mélange", "karışım vanaları", "valvole miscela", "zmiešavacie ventily") -MAKE_TRANSLATION(pvEnableWw, "pvenabledhw", "enable raise dhw", "aktiviere Anhebung WW", "Verhoging WW activeren", "", "podwyższenie c.w.u. z PV", "aktivere hevet temperatur bereder", "", "sıcak kullanım suyu yükseltmeyi etkinleştir", "abilitare aumento ACS", "povoliť zvýšenie TÚV") // TODO translate +MAKE_TRANSLATION(pvEnableWw, "pvenabledhw", "enable raise dhw", "aktiviere WW-Anhebung", "Verhoging WW activeren", "", "podwyższenie c.w.u. z PV", "aktivere hevet temperatur bereder", "", "sıcak kullanım suyu yükseltmeyi etkinleştir", "abilitare aumento ACS", "povoliť zvýšenie TÚV") // TODO translate MAKE_TRANSLATION(pvRaiseHeat, "pvraiseheat", "raise heating with PV", "Anhebung Heizen mit PV", "Verwarmen met PV activeren", "", "podwyższenie grzania z PV", "heve varmen med solpanel", "", "ısıtmayı G.E. İle yükselt", "Aumentare il riscaldamento con il solare", "zvýšiť kúrenie s FV") // TODO translate -MAKE_TRANSLATION(pvLowerCool, "pvlowercool", "lower cooling with PV", "Kühlabsenkung mit PV", "Verlagen koeling met PV activeren", "", "obniżenie chłodzenia z PV", "nedre kjøling solpanel", "", "soğutmayı G.E. İle düşür", "Riduzione del raffreddamento con il solare", "nižšie chladenie s PV") // TODO translate +MAKE_TRANSLATION(pvLowerCool, "pvlowercool", "lower cooling with PV", "Absenkung Kühlen mit PV", "Verlagen koeling met PV activeren", "", "obniżenie chłodzenia z PV", "nedre kjøling solpanel", "", "soğutmayı G.E. İle düşür", "Riduzione del raffreddamento con il solare", "nižšie chladenie s PV") // TODO translate + // thermostat dhw -MAKE_TRANSLATION(wwMode, "mode", "mode", "Modus", "Modus", "Läge", "tryb pracy", "modus", "mode", "mod", "modalità", "režim") +MAKE_TRANSLATION(wwMode, "mode", "operating mode", "Betriebsart", "Modus", "Läge", "tryb pracy", "modus", "mode", "mod", "modalità", "režim") MAKE_TRANSLATION(wwSetTempLow, "settemplow", "set low temperature", "untere Solltemperatur", "Onderste streeftemperatuur", "Nedre Börvärde", "zadana temperatura obniżona", "nedre settverdi", "réglage température basse", "hedef düşük sıcaklık", "imposta bassa temperatura", "nastaviť nízku teplotu") MAKE_TRANSLATION(wwWhenModeOff, "whenmodeoff", "when thermostat mode off", "bei Thermostatmodus AUS", "Als Thermostaat op UIT", "när Termostatläge är AV", "gdy wyłączono na termostacie", "når modus er av", "lorsque mode thermostat off", "termostat modu kapalı olduğunda", "quando termostato modalita OFF", "keď je režim termostatu vypnutý") MAKE_TRANSLATION(wwExtra, "extra", "extra", "Extra", "extra", "Extra", "obieg", "ekstra", "extra", "ekstra", "extra", "extra") @@ -673,7 +673,7 @@ MAKE_TRANSLATION(wwDailyHeatTime, "dailyheattime", "daily heating time", "tägli // thermostat hc MAKE_TRANSLATION(selRoomTemp, "seltemp", "selected room temperature", "gewählte Raumtemperatur", "Streeftemperatuur kamer", "Vald Rumstemperatur", "zadana temperatura w pomieszczeniu", "valgt rumstemperatur", "température ambiante sélectionnée", "seçili oda sıcaklığı", "temperatura ambiente selezionata", "zvolená izbová teplota") MAKE_TRANSLATION(roomTemp, "currtemp", "current room temperature", "aktuelle Raumtemperatur", "Huidige kamertemperatuur", "Aktuell Rumstemperatur", "temperatura w pomieszczeniu", "gjeldende romstemperatur", "température ambiante actuelle", "güncel oda sıcaklığı", "temperatura ambiente attuale", "aktuálna izbová teplota") -MAKE_TRANSLATION(mode, "mode", "mode", "Modus", "Modus", "Läge", "sposób sterowania", "modus", "mode", "mod", "modalità", "režim") +MAKE_TRANSLATION(mode, "mode", "operating mode", "Betriebsart", "Modus", "Läge", "sposób sterowania", "modus", "mode", "mod", "modalità", "režim") MAKE_TRANSLATION(modetype, "modetype", "mode type", "Modustyp", "Type modus", "Typ av läge", "aktualny tryb pracy", "modusrype", "type mode", "mod tipi", "tipo di modalita", "typ režimu") MAKE_TRANSLATION(fastheatup, "fastheatup", "fast heatup", "schnelles Aufheizen", "Snel opwarmen", "Snabb Uppvärmning", "szybkie nagrzewanie", "rask oppvarming", "chauffage rapide", "hızlı ısıtma", "riscaldamento rapido", "rýchle zahriatie") MAKE_TRANSLATION(heatup, "heatup", "heatup", "Aufheizen", "opwarmen", "Uppvärmning", "nagrzewanie", "oppvarming", "chauffage", "hızlı", "riscaldamento", "rýchle zahriatie") @@ -712,7 +712,7 @@ MAKE_TRANSLATION(party, "party", "party time", "Partyzeit", "Partytijd", "Partyt MAKE_TRANSLATION(holidaytemp, "holidaytemp", "holiday temperature", "Urlaubstemperatur", "Vakantietemperatuur", "Helgtemperatur", "temperatura w trybie urlopowym", "ferietemperatur", "température vacances", "tatil sıcaklığı", "temperatura festiva", "prázdninová teplota") MAKE_TRANSLATION(summermode, "summermode", "summer mode", "Sommerbetrieb", "Zomerbedrijf", "Sommarläge", "aktualny tryb lato/zima", "sommermodus", "mode été", "yaz modu", "funzionamento estivo", "letný režim") MAKE_TRANSLATION(holidaymode, "holidaymode", "holiday mode", "Urlaubsbetrieb", "Vakantiebedrijf", "Helgläge", "tryb urlopowy", "feriemodus", "mode vacances", "tatil modu", "modalita vacanze", "dovolenkový režim") -MAKE_TRANSLATION(flowtempoffset, "flowtempoffset", "flow temperature offset for mixer", "Vorlauftemperaturanhebung", "Mixer aanvoertemperatuur offset", "Temperaturkorrigering Flödestemp. Blandningsventil", "korekta temperatury przepływu dla miksera", "temperaturkorrigering av blandingsventil", "décalage température de bascule pour mélangeur", "karıştırıcı için akış sıcaklığı farkı", "aumento della temperatura di ritorno", "Posun teploty prívodu pre zmiešavač") +MAKE_TRANSLATION(flowtempoffset, "flowtempoffset", "flow temperature offset for mixer", "Anhebung Vorlauftemperatur", "Mixer aanvoertemperatuur offset", "Temperaturkorrigering Flödestemp. Blandningsventil", "korekta temperatury przepływu dla miksera", "temperaturkorrigering av blandingsventil", "décalage température de bascule pour mélangeur", "karıştırıcı için akış sıcaklığı farkı", "aumento della temperatura di ritorno", "Posun teploty prívodu pre zmiešavač") MAKE_TRANSLATION(reducemode, "reducemode", "reduce mode", "Absenkmodus", "Gereduceerde modus", "Reducerat Läge", "tryb zredukowany/obniżony", "redusert modus", "mode réduction", "düşürme modu", "modalità assente", "znížený režim") MAKE_TRANSLATION(noreducetemp, "noreducetemp", "no reduce below temperature", "Durchheizen unter", "Reduceermodus onderbreken onder", "Inaktivera reducering under", "bez redukcji poniżej temperatury", "inaktiver redusert nedre temp", "pas de réduction en dessous température", "bu sıcaklığın altına düşürme", "non ridurre temperatura sotto", "žiadne zníženie teploty pod teplotu") MAKE_TRANSLATION(reducetemp, "reducetemp", "off/reduce switch temperature", "Absenkmodus unter", "Onderste afschakeltemperatuur", "Avslag/Reducera under", "tryb zredukowany poniżej temperatury", "nedre avstengningstemperatur", "arrêt/réduction température bascule", "sıcaklık kapama/düşürme modu", "interruttore riduzione temperatura", "vypnúť/znížiť teplotu spínača") @@ -753,6 +753,7 @@ MAKE_TRANSLATION(switchProgMode, "switchprogmode", "switch program mode", "Schal MAKE_TRANSLATION(airHumidity, "airhumidity", "relative air humidity", "relative Luftfeuchte", "Relatieve luchtvochtigheid", "Relativ Luftfuktighet", "wilgotność względna w pomieszczeniu", "luftfuktighet", "humidité relative air", "havadaki bağıl nem", "umidità relativa aria", "relatívna vlhkosť vzduchu") MAKE_TRANSLATION(dewTemperature, "dewtemperature", "dew point temperature", "Taupunkttemperatur", "Dauwpunttemperatuur", "Daggpunkt", "punkt rosy w pomieszczeniu", "duggtemperatur", "température point rosée", "çiğ noktası sıcaklığı", "temperatura del punto di rugiada", "teplota rosného bodu") MAKE_TRANSLATION(battery, "battery", "battery", "Batterie", "", "", "bateria", "", "", "", "", "batéria") // TODO translate + // mixer MAKE_TRANSLATION(flowSetTemp, "flowsettemp", "setpoint flow temperature", "Sollwert Vorlauftemperatur", "Streefwaarde aanvoertemperatuur", "Vald flödestemperatur", "zadana temperatura zasilania", "valgt turtemperatur", "consigne température flux", "akış sıcaklığı ayarı", "Setpoint temperatura di mandata", "požadovaná hodnota výstupnej teploty") MAKE_TRANSLATION(flowTempHc, "flowtemphc", "flow temperature (TC1)", "Vorlauftemperatur HK (TC1)", "Aanvoertemperatuut circuit (TC1)", "Flödestemperatur (TC1)", "temperatura zasilania (TC1)", "turtemperatur (TC1)", "température flux (TC1)", "akış sıcaklığı (TC1)", "temperatura di mandata (TC1)", "teplota prívodu (TC1)") @@ -760,6 +761,7 @@ MAKE_TRANSLATION(pumpStatus, "pumpstatus", "pump status (PC1)", "Pumpenstatus HK MAKE_TRANSLATION(mixerStatus, "valvestatus", "mixing valve actuator (VC1)", "Mischerventilposition (VC1)", "positie mixerklep (VC1)", "Shuntventil Status (VC1)", "siłownik zaworu mieszającego (VC1)", "shuntventil status (VC1)", "actionnement vanne mélangeur (VC1)", "karışım vanası aktüatörü (VC1)", "posizione valvola miscela (VC1)", "pohon zmiešavacieho ventilu (VC1)") MAKE_TRANSLATION(flowTempVf, "flowtempvf", "flow temperature in header (T0/Vf)", "Vorlauftemperatur am Verteiler (T0/Vf)", "aanvoertemperatuur verdeler (T0/Vf)", "Flödestemperatur Fördelare (T0/Vf)", "temperatura zasilania na rozdzielaczu (T0/Vf)", "turtemperatur ved fordeleren (T0/Vf)", "température départ collecteur (T0/Vf)", "başlıkta akış sıcaklığı", "Temperatura di mandata al distributore (T0/Vf)", "teplota prívodu v zberači (T0/Vf)") MAKE_TRANSLATION(mixerSetTime, "valvesettime", "time to set valve", "Zeit zum einstellen des Ventils", "Inschakeltijd mengklep", "Inställningstid Ventil", "czas na ustawienie zaworu", "instillningstid ventil", "délai activation vanne", "vana ayar zamanı", "ritardo attivazione valvola", "čas na nastavenie ventilu") + // mixer pool MAKE_TRANSLATION(poolSetTemp, "poolsettemp", "pool set temperature", "Sollwert Pooltemperatur", "Streeftemperatuur zwembad", "Pool Temperatur Börvärde", "zadana temperatura basenu", "valgt temp basseng", "température consigne piscine", "hedef havuz sıcaklığı", "temperatura nominale piscina", "nastavená teplota bazéna") MAKE_TRANSLATION(poolTemp, "pooltemp", "pool temperature", "Pooltemperatur", "Zwembadtemperatuur", "Pooltemperatur", "temperatura basenu", "bassengtemperatur", "température piscine", "havuz sıcaklığı", "temperatura piscina", "teplota bazéna") @@ -769,8 +771,8 @@ MAKE_TRANSLATION(hydrTemp, "hydrTemp", "hydraulic header temperature", "Verteile // solar MAKE_TRANSLATION(cylMiddleTemp, "cylmiddletemp", "cylinder middle temperature (TS3)", "Speichertemperatur Mitte (TS3)", "Zonneboilertemperatuur midden (TS3)", "Cylindertemperatur Mitten (TS3)", "temperatura w środku zasobnika (TS3)", "beredertemperatur i midten (TS3)", "température moyenne cylindre (TS3)", "orta depolama sıcaklığı (TS3)", "temperatura di conservazione media accumulo (TS3)", "stredná teplota valca (TS3)") -MAKE_TRANSLATION(retHeatAssist, "retheatassist", "return temperature heat assistance (TS4)", "Rücklaufanhebungstemp. (TS4)", "Retourtemperatuur verwarmingsassistentie (TS4)", "Returtemperatur värmestöd (TS4)", "temperatura powrotu wspomagania grzania (TS4)", "returtemperatur varmestøtte (TS4)", "température retour de assistance thermique (TS4)", "geri dönüş sıcaklığı artışı (TS4)", "temperatura ritorno scambiatore (TS4)", "pomoc pri teplote spiatočky (TS4)") -MAKE_TRANSLATION(ts8, "ts8", "return temperature heat assistance (TS8)", "Rücklaufanhebungstemp. (TS8)", "Retourtemperatuur verwarmingsassistentie (TS8)", "Returtemperatur värmestöd (TS8)", "temperatura powrotu wspomagania grzania (TS8)", "returtemperatur varmestøtte (TS8)", "température retour de assistance thermique (TS8)", "geri dönüş sıcaklığı artışı (TS8)", "temperatura ritorno scambiatore (TS8)", "pomoc pri teplote spiatočky (TS8)") +MAKE_TRANSLATION(retHeatAssist, "retheatassist", "return temperature heat assistance (TS4)", "Anhebung Rücklauftemp. (TS4)", "Retourtemperatuur verwarmingsassistentie (TS4)", "Returtemperatur värmestöd (TS4)", "temperatura powrotu wspomagania grzania (TS4)", "returtemperatur varmestøtte (TS4)", "température retour de assistance thermique (TS4)", "geri dönüş sıcaklığı artışı (TS4)", "temperatura ritorno scambiatore (TS4)", "pomoc pri teplote spiatočky (TS4)") +MAKE_TRANSLATION(ts8, "ts8", "return temperature heat assistance (TS8)", "Anhebung Rücklauftemp. (TS8)", "Retourtemperatuur verwarmingsassistentie (TS8)", "Returtemperatur värmestöd (TS8)", "temperatura powrotu wspomagania grzania (TS8)", "returtemperatur varmestøtte (TS8)", "température retour de assistance thermique (TS8)", "geri dönüş sıcaklığı artışı (TS8)", "temperatura ritorno scambiatore (TS8)", "pomoc pri teplote spiatočky (TS8)") MAKE_TRANSLATION(m1Valve, "heatassistvalve", "heat assistance valve (M1)", "Ventil Heizungsunterstützung (M1)", "Klep verwarmingsassistentie (M1)", "Uppvärmningsstöd Ventil (M1)", "zawór wspomagania grzania (M1)", "varmehjelpsventil (M1)", "vanne assistance thermique (M1)", "ısıtma yardım vanası (M1)", "valvola scambiatore (M1)", "tepelný asistenčný ventil (M1)") MAKE_TRANSLATION(m1Power, "heatassistpower", "heat assistance valve power (M1)", "Ventilleistung Heizungsunterstützung (M1)", "Vermogen klep verwarmingsassistentie (M1)", "Uppvärmningsstöd Ventil Effekt (M1)", "moc zaworu wspomagania grzania (M1)", "varmehjelpsventileffekt (M1)", "puissance vanne assistance thermique (M1)", "ısıtma yardım vanası gücü (M1)", "potenza valvola scambiatore (M1)", "výkon ventilu tepelného asistenta (M1)") MAKE_TRANSLATION(pumpMinMod, "pumpminmod", "minimum pump modulation", "minimale Pumpenmodulation", "Minimale pompmodulatie", "Min Pumpmodulering", "minimalna modulacja pompy", "minimum pumpmodulering", "modulation minimale pompe", "minimum pompa modülasyonu", "modulazione minima pompa", "minimálna modulácia čerpadla") @@ -804,7 +806,7 @@ MAKE_TRANSLATION(pump2WorkTime, "pump2worktime", "pump 2 working time", "Laufzei MAKE_TRANSLATION(m1WorkTime, "m1worktime", "differential control working time", "Differenzregelung Arbeitszeit", "Verschilregeling arbeidstijd", "Differentialreglering Drifttid", "czas pracy regulacji różnicowej", "differentialreguleringssrifttid", "durée fonctionnement contrôle différentiel", "çalışma saatlerinin farklı düzenlenmesi", "controllo differenziale durata funzionamento", "pracovný čas diferenciálnej kontroly") MAKE_TRANSLATION(energyLastHour, "energylasthour", "energy last hour", "Energie letzte Std", "Energie laatste uur", "Energi Senaste Timmen", "energia w ciągu ostatniej godziny", "energi siste time", "énergie dernière heure", "son saat enerji", "Eenergia ultima ora", "energia za poslednú hodinu") MAKE_TRANSLATION(energyTotal, "energytotal", "total energy", "Gesamtenergie", "Totale energie", "Total Energi", "energia całkowita", "total energi", "énergie totale", "toplam enerji", "energia totale", "celková energia") -MAKE_TRANSLATION(energyToday, "energytoday", "total energy today", "Energie: heute", "Energie vandaag", "Total Energi Idag", "energia całkowita dzisiaj", "total energi i dag", "énergie totale aujourd'hui", "bugün toplam enerji", "totale energia giornaliera", "celková energia dnes") +MAKE_TRANSLATION(energyToday, "energytoday", "total energy today", "Energie heute", "Energie vandaag", "Total Energi Idag", "energia całkowita dzisiaj", "total energi i dag", "énergie totale aujourd'hui", "bugün toplam enerji", "totale energia giornaliera", "celková energia dnes") // solar dhw MAKE_TRANSLATION(wwColdTemp, "coldtemp", "cold water", "Kaltwasser", "", "", "zimna woda", "", "", "", "", "studená voda") // TODO translate @@ -815,6 +817,7 @@ MAKE_TRANSLATION(wwPump, "pump", "pump", "Pumpe", "Pomp", "Pump", "pompa", "pump MAKE_TRANSLATION(wwCircTc, "circtc", "circulation time controled", "zeitgesteuerte Zirkulation", "", "", "", "", "", "", "", "riadená doba cirkulácie") // TODO translate MAKE_TRANSLATION(errorDisp, "errordisp", "error display", "Fehleranzeige", "", "", "wyświetlanie błędów", "", "", "", "", "zobrazenie chyby") // TODO translate MAKE_TRANSLATION(deltaTRet, "deltatret", "temp. diff. return valve", "Temperaturdifferenz Rücklaufventil", "", "", "różnica temp. zaworu powrotnego", "", "", "", "", "rozdiel teplôt spätného ventilu") // TODO translate + // solar dhw and mixer dhw MAKE_TRANSLATION(wwMinTemp, "mintemp", "minimum temperature", "minimale Temperatur", "Minimale temperatuur", "Min. Temperatur", "temperatura minimalna", "min. temperatur", "température min.", "minimum sıcaklık", "temperatura minima", "minimálna teplota") MAKE_TRANSLATION(wwRedTemp, "redtemp", "reduced temperature", "reduzierte Temperatur", "Gereduceerde temperatuur", "Reducerad Temperatur", "temperatura zredukowana", "reducert temperatur", "température réduite", "düşürülmüş sıcaklık", "temperatura ridotta", "znížená teplota") @@ -825,6 +828,7 @@ MAKE_TRANSLATION(wwStatus2, "status2", "status 2", "Status 2", "Status 2", "Stat MAKE_TRANSLATION(wwPumpMod, "pumpmod", "pump modulation", "Pumpenmodulation", "Pompmodulatie", "Pumpmodulering", "modulacja pompy", "pumpemodulering", "modulation de pompe", "pompa modülasyonu", "modulazione pompa", "modulácia čerpadla") MAKE_TRANSLATION(wwFlow, "flow", "flow rate", "Volumenstrom", "Doorstroomsnelheid", "Flöde", "przepływ", "strømningshastighet", "débit", "akış hızı", "portata flusso", "prietok") // MAKE_TRANSLATION(wwRetValve, "retvalve", "return valve", "Rücklauf Ventil", "", "", "", "", "", "", "", "") + // extra mixer dhw MAKE_TRANSLATION(wwRequiredTemp, "requiredtemp", "required temperature", "benötigte Temperatur", "Benodigde temperatuur", "Nödvändig Temperatur", "temperatura wymagana", "nødvendig temperatur", "température requise", "gerekli sıcaklık", "temperatura richiesta", "požadovaná teplota") MAKE_TRANSLATION(wwDiffTemp, "difftemp", "start differential temperature", "Start Differenztemperatur", "Start differentiele temperatuur", "Start Differentialtemperatur", "start temperatury różnicowej", "start differensialtemperatur", "température différentielle de départ", "diferansiyel sıcaklık", "avvia temperatura differenziale", "začiatok diferenciálnej teploty") @@ -858,9 +862,9 @@ MAKE_TRANSLATION(collector2Area, "collector2area", "collector 2 area", "Kollekto MAKE_TRANSLATION(collector2Type, "collector2type", "collector 2 type", "Kollektortyp 2", "Type collector 2", "Kollektor 2 Typ", "typ kolektora 2", "kollektor 2 type", "type collecteur 2", "kollektör 2 tip", "tipo collettore 2", "kolektor 2 typ") // telegram 0x0363 heatCounter -MAKE_TRANSLATION(heatCntFlowTemp, "heatcntflowtemp", "heat counter flow temperature", "Wärmezähler: Vorlauftemperatur", "Aanvoertemperatuur warmteenergiemeter", "Värmeräknare Flödestemperatur", "temperatura zasilania ciepłomierza", "varmeenergimåler turtemperatur", "température flux compteur chaleur", "ısı sayacı akış sıcaklığı", "Temperatura di mandata del contatore di calore", "teplota prúdu počítadla tepla") -MAKE_TRANSLATION(heatCntRetTemp, "heatcntrettemp", "heat counter return temperature", "Wärmezähler: Rücklauftemperatur", "Retourtemperatuur warmteenergiemeter", "Värmeräknare Returtemperatur", "temperatura powrotu ciepłomierza", "varmeenergimåler returtemperatur", "température retour compteur chaleur", "ısı sayacı dönüş sıcaklığı", "Temperatura di ritorno del contatore di calore", "teplota spiatočky počítadla tepla") -MAKE_TRANSLATION(heatCnt, "heatcnt", "heat counter impulses", "Wärmezähler: Impulse", "Warmteenergiemeter pulsen", "Värmeräknare Impuls", "liczba impulsów ciepłomierza", "varmemåler impuls", "impulsions compteur chaleur", "ısı sayacı atış adedi", "contacalore a impulsi", "Impulzy počítadla tepla") +MAKE_TRANSLATION(heatCntFlowTemp, "heatcntflowtemp", "heat counter flow temperature", "Wärmezähler Vorlauftemperatur", "Aanvoertemperatuur warmteenergiemeter", "Värmeräknare Flödestemperatur", "temperatura zasilania ciepłomierza", "varmeenergimåler turtemperatur", "température flux compteur chaleur", "ısı sayacı akış sıcaklığı", "Temperatura di mandata del contatore di calore", "teplota prúdu počítadla tepla") +MAKE_TRANSLATION(heatCntRetTemp, "heatcntrettemp", "heat counter return temperature", "Wärmezähler Rücklauftemperatur", "Retourtemperatuur warmteenergiemeter", "Värmeräknare Returtemperatur", "temperatura powrotu ciepłomierza", "varmeenergimåler returtemperatur", "température retour compteur chaleur", "ısı sayacı dönüş sıcaklığı", "Temperatura di ritorno del contatore di calore", "teplota spiatočky počítadla tepla") +MAKE_TRANSLATION(heatCnt, "heatcnt", "heat counter impulses", "Wärmezähler Impulse", "Warmteenergiemeter pulsen", "Värmeräknare Impuls", "liczba impulsów ciepłomierza", "varmemåler impuls", "impulsions compteur chaleur", "ısı sayacı atış adedi", "contacalore a impulsi", "Impulzy počítadla tepla") MAKE_TRANSLATION(swapFlowTemp, "swapflowtemp", "swap flow temperature (TS14)", "Austausch Vorlauftemperatur (TS14)", "Aanvoertemperatuur verwisselaar (TS14)", "Växlingstemperatur Flöde (TS14)", "temperatura zasilania wymiennika", "veksler turledningstemperatur (TS14)", "température flux échangeur (TS14)", "değişim akış sıcaklığı(TS14)", "Scambiare la temperatura di mandata (TS14)", "swap flow temperature (TS14)") MAKE_TRANSLATION(swapRetTemp, "swaprettemp", "swap return temperature (TS15)", "Austausch Rücklauftemperatur (TS15)", "Retourtemperatuur verwisselaar (TS15)", "Växlingstemperatur Returflöde (TS15)", "temperatura powrotu wymiennika", "veksler returledningstemperatur (TS15)", "température retour échangeur (TS15)", "değişim dönüş sıcaklığı(TS15)", "Scambiare la temperatura di ritorno (TS15)", "výmena teploty spiatočky (TS15)") @@ -904,4 +908,4 @@ MAKE_TRANSLATION(setting3, "setting3", "unknown setting 3", "", "", "", "nieznan MAKE_TRANSLATION(setting4, "setting4", "unknown setting 4", "", "", "", "nieznane ustawienie 4", "", "", "", "", "neznáme dátové pole 4") */ -// clang-format on +// clang-format on \ No newline at end of file diff --git a/src/system.cpp b/src/system.cpp index 1c646fff0..b051981d9 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -337,6 +337,12 @@ void System::system_restart(const char * partitionname) { Shell::loop_all(); // flush log to output delay(1000); // wait 1 second ESP.restart(); +#else + if (partitionname != nullptr) { + LOG_INFO("Restarting EMS-ESP from %s partition", partitionname); + } else { + LOG_INFO("Restarting EMS-ESP..."); + } #endif } @@ -999,7 +1005,7 @@ void System::show_system(uuid::console::Shell & shell) { #ifndef EMSESP_STANDALONE shell.printfln(" Platform: %s (%s)", EMSESP_PLATFORM, ESP.getChipModel()); shell.printfln(" Model: %s", getBBQKeesGatewayDetails().c_str()); - shell.printfln(" Partition boot/running: %s/%s", esp_ota_get_boot_partition()->label, esp_ota_get_running_partition()->label); + shell.printfln(" Partition: %s", esp_ota_get_running_partition()->label); #endif shell.printfln(" Language: %s", locale().c_str()); shell.printfln(" Board profile: %s", board_profile().c_str()); @@ -1128,8 +1134,6 @@ bool System::check_restore() { bool reboot_required = false; #ifndef EMSESP_STANDALONE - // see if we have a temp file, if so try and read it - // TODO find a nicer way to see if a file exists without reporting an error, like using lfs_stat. exists() uses open so same problem. File new_file = LittleFS.open(TEMP_FILENAME_PATH); if (new_file) { JsonDocument jsonDocument; @@ -1444,17 +1448,16 @@ bool System::command_info(const char * value, const int8_t id, JsonObject output node["uptime"] = uuid::log::format_timestamp_ms(uuid::get_uptime_ms(), 3); node["uptimeSec"] = uuid::get_uptime_sec(); #ifndef EMSESP_STANDALONE - node["platform"] = EMSESP_PLATFORM; - node["cpuType"] = ESP.getChipModel(); - node["arduino"] = ARDUINO_VERSION; - node["sdk"] = ESP.getSdkVersion(); - node["freeMem"] = getHeapMem(); - node["maxAlloc"] = getMaxAllocMem(); - node["freeCaps"] = heap_caps_get_free_size(MALLOC_CAP_8BIT) / 1024; // includes heap and psram - node["usedApp"] = EMSESP::system_.appUsed(); // kilobytes - node["freeApp"] = EMSESP::system_.appFree(); // kilobytes - node["partitionBootRunning"] = std::string(esp_ota_get_boot_partition()->label) + "/" - + esp_ota_get_running_partition()->label; // will sycle app0/app0 - app1/app1 after OTA. boot/factory is on first install. + node["platform"] = EMSESP_PLATFORM; + node["cpuType"] = ESP.getChipModel(); + node["arduino"] = ARDUINO_VERSION; + node["sdk"] = ESP.getSdkVersion(); + node["freeMem"] = getHeapMem(); + node["maxAlloc"] = getMaxAllocMem(); + node["freeCaps"] = heap_caps_get_free_size(MALLOC_CAP_8BIT) / 1024; // includes heap and psram + node["usedApp"] = EMSESP::system_.appUsed(); // kilobytes + node["freeApp"] = EMSESP::system_.appFree(); // kilobytes + node["partition"] = esp_ota_get_running_partition()->label; // active partition #endif node["resetReason"] = EMSESP::system_.reset_reason(0) + " / " + EMSESP::system_.reset_reason(1); #ifndef EMSESP_STANDALONE diff --git a/src/system.h b/src/system.h index 23b223acf..2e980a22b 100644 --- a/src/system.h +++ b/src/system.h @@ -201,7 +201,7 @@ class System { return hostname_; } - void hostname(std::string hostname) { + void hostname(const std::string hostname) { hostname_ = hostname; } diff --git a/src/version.h b/src/version.h index 2c0569424..68f176080 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define EMSESP_APP_VERSION "3.7.0-dev.36" +#define EMSESP_APP_VERSION "3.7.0-dev.37" diff --git a/src/web/WebCustomEntityService.cpp b/src/web/WebCustomEntityService.cpp index 62bd12e29..aa86fde16 100644 --- a/src/web/WebCustomEntityService.cpp +++ b/src/web/WebCustomEntityService.cpp @@ -29,9 +29,6 @@ WebCustomEntityService::WebCustomEntityService(AsyncWebServer * server, FS * fs, securityManager, AuthenticationPredicates::IS_AUTHENTICATED) , _fsPersistence(WebCustomEntity::read, WebCustomEntity::update, this, fs, EMSESP_CUSTOMENTITY_FILE) { - server->on(EMSESP_GET_ENTITIES_PATH, - HTTP_GET, - securityManager->wrapRequest([this](AsyncWebServerRequest * request) { getEntities(request); }, AuthenticationPredicates::IS_ADMIN)); } // load the settings when the service starts @@ -711,17 +708,4 @@ void WebCustomEntityService::test() { } #endif -// return entities as a json object -void WebCustomEntityService::getEntities(AsyncWebServerRequest * request) { - auto * response = new AsyncJsonResponse(false); - JsonObject root = response->getRoot(); - - root["type"] = "entities"; - - System::extractSettings(EMSESP_CUSTOMENTITY_FILE, "Entities", root); - - response->setLength(); - request->send(response); -} - } // namespace emsesp diff --git a/src/web/WebCustomEntityService.h b/src/web/WebCustomEntityService.h index 1d77cc097..16d6a96d8 100644 --- a/src/web/WebCustomEntityService.h +++ b/src/web/WebCustomEntityService.h @@ -22,7 +22,6 @@ #define EMSESP_CUSTOMENTITY_FILE "/config/emsespEntity.json" #define EMSESP_CUSTOMENTITY_SERVICE_PATH "/rest/customEntities" // GET and POST -#define EMSESP_GET_ENTITIES_PATH "/rest/getEntities" namespace emsesp { diff --git a/src/web/WebCustomizationService.cpp b/src/web/WebCustomizationService.cpp index 861c6bb1b..8e77de4fc 100644 --- a/src/web/WebCustomizationService.cpp +++ b/src/web/WebCustomizationService.cpp @@ -28,13 +28,6 @@ WebCustomizationService::WebCustomizationService(AsyncWebServer * server, FS * f server->on(EMSESP_DEVICE_ENTITIES_PATH, HTTP_GET, securityManager->wrapRequest([this](AsyncWebServerRequest * request) { device_entities(request); }, AuthenticationPredicates::IS_AUTHENTICATED)); - server->on(EMSESP_DEVICES_SERVICE_PATH, - HTTP_GET, - securityManager->wrapRequest([this](AsyncWebServerRequest * request) { devices(request); }, AuthenticationPredicates::IS_AUTHENTICATED)); - server->on(EMSESP_GET_CUSTOMIZATIONS_PATH, - HTTP_GET, - securityManager->wrapRequest([this](AsyncWebServerRequest * request) { getCustomizations(request); }, AuthenticationPredicates::IS_ADMIN)); - // POST server->on(EMSESP_RESET_CUSTOMIZATION_SERVICE_PATH, @@ -82,7 +75,7 @@ void WebCustomization::read(WebCustomization & customizations, JsonObject root) // entries are in the form [optional customname] e.g "08heatingactive|heating is on" JsonArray masked_entityJson = entityJson["entity_ids"].to(); - for (std::string entity_id : entityCustomization.entity_ids) { + for (const std::string & entity_id : entityCustomization.entity_ids) { masked_entityJson.add(entity_id); } } @@ -166,29 +159,6 @@ void WebCustomizationService::reset_customization(AsyncWebServerRequest * reques #endif } -// send back a list of devices used in the customization web page -void WebCustomizationService::devices(AsyncWebServerRequest * request) { - auto * response = new AsyncJsonResponse(false); - JsonObject root = response->getRoot(); - - // list is already sorted by device type - // controller is ignored since it doesn't have any associated entities - JsonArray devices = root["devices"].to(); - for (const auto & emsdevice : EMSESP::emsdevices) { - if (emsdevice->has_entities()) { - JsonObject obj = devices.add(); - obj["i"] = emsdevice->unique_id(); // its unique id - obj["s"] = emsdevice->name(); // custom name - obj["t"] = emsdevice->device_type(); // internal device type ID - obj["tn"] = std::string(emsdevice->device_type_2_device_name_translated()); // translated device type name - obj["url"] = emsdevice->device_type_name(); // non-translated, lower-case, used for API URL - } - } - - response->setLength(); - request->send(response); -} - // send back list of device entities void WebCustomizationService::device_entities(AsyncWebServerRequest * request) { uint8_t id; @@ -307,7 +277,7 @@ void WebCustomizationService::customization_entities(AsyncWebServerRequest * req read([&](WebCustomization & settings) { for (EntityCustomization entityCustomization : settings.entityCustomizations) { if (entityCustomization.device_id == device_id) { - for (std::string entity_id : entityCustomization.entity_ids) { + for (const std::string & entity_id : entityCustomization.entity_ids) { uint8_t mask = Helpers::hextoint(entity_id.substr(0, 2).c_str()); std::string name = DeviceValue::get_name(entity_id); if (mask & 0x80) { @@ -425,17 +395,4 @@ void WebCustomizationService::test() { } #endif -// return all customizations in a json object -void WebCustomizationService::getCustomizations(AsyncWebServerRequest * request) { - auto * response = new AsyncJsonResponse(false); - JsonObject root = response->getRoot(); - - root["type"] = "customizations"; - - System::extractSettings(EMSESP_CUSTOMIZATION_FILE, "Customizations", root); - - response->setLength(); - request->send(response); -} - } // namespace emsesp diff --git a/src/web/WebCustomizationService.h b/src/web/WebCustomizationService.h index 2955e792e..7762b032d 100644 --- a/src/web/WebCustomizationService.h +++ b/src/web/WebCustomizationService.h @@ -22,9 +22,7 @@ #define EMSESP_CUSTOMIZATION_FILE "/config/emsespCustomization.json" // GET -#define EMSESP_DEVICES_SERVICE_PATH "/rest/devices" #define EMSESP_DEVICE_ENTITIES_PATH "/rest/deviceEntities" -#define EMSESP_GET_CUSTOMIZATIONS_PATH "/rest/getCustomizations" // POST #define EMSESP_CUSTOMIZATION_ENTITIES_PATH "/rest/customizationEntities" @@ -98,9 +96,7 @@ class WebCustomizationService : public StatefulService { FSPersistence _fsPersistence; // GET - void devices(AsyncWebServerRequest * request); void device_entities(AsyncWebServerRequest * request); - void getCustomizations(AsyncWebServerRequest * request); // POST void customization_entities(AsyncWebServerRequest * request, JsonVariant json); diff --git a/src/web/WebDataService.cpp b/src/web/WebDataService.cpp index 841df8d08..f1470df8f 100644 --- a/src/web/WebDataService.cpp +++ b/src/web/WebDataService.cpp @@ -66,6 +66,7 @@ void WebDataService::core_data(AsyncWebServerRequest * request) { obj["p"] = emsdevice->product_id(); // productid obj["v"] = emsdevice->version(); // version obj["e"] = emsdevice->count_entities(); // number of entities + obj["url"] = emsdevice->device_type_name(); // non-translated, lower-case, used for API URL in customization page } } diff --git a/src/web/WebLogService.h b/src/web/WebLogService.h index a222f6d88..55886c324 100644 --- a/src/web/WebLogService.h +++ b/src/web/WebLogService.h @@ -65,7 +65,6 @@ class WebLogService : public uuid::log::Handler { char * messagetime(char * out, const uint64_t t, const size_t bufsize); - uint64_t last_transmit_ = 0; // Last transmit time size_t maximum_log_messages_ = MAX_LOG_MESSAGES; // Maximum number of log messages to buffer before they are output size_t limit_log_messages_ = 1; // dynamic limit unsigned long log_message_id_ = 0; // The next identifier to use for queued log messages diff --git a/src/web/WebSchedulerService.cpp b/src/web/WebSchedulerService.cpp index 6dabfed49..fef71c7f5 100644 --- a/src/web/WebSchedulerService.cpp +++ b/src/web/WebSchedulerService.cpp @@ -25,9 +25,6 @@ namespace emsesp { WebSchedulerService::WebSchedulerService(AsyncWebServer * server, FS * fs, SecurityManager * securityManager) : _httpEndpoint(WebScheduler::read, WebScheduler::update, this, server, EMSESP_SCHEDULER_SERVICE_PATH, securityManager, AuthenticationPredicates::IS_AUTHENTICATED) , _fsPersistence(WebScheduler::read, WebScheduler::update, this, fs, EMSESP_SCHEDULER_FILE) { - server->on(EMSESP_GET_SCHEDULE_PATH, - HTTP_GET, - securityManager->wrapRequest([this](AsyncWebServerRequest * request) { getSchedule(request); }, AuthenticationPredicates::IS_ADMIN)); } // load the settings when the service starts @@ -613,17 +610,4 @@ void WebSchedulerService::test() { } #endif -// return schedule entries in a json object -void WebSchedulerService::getSchedule(AsyncWebServerRequest * request) { - auto * response = new AsyncJsonResponse(false); - JsonObject root = response->getRoot(); - - root["type"] = "schedule"; - - System::extractSettings(EMSESP_SCHEDULER_FILE, "Schedule", root); - - response->setLength(); - request->send(response); -} - } // namespace emsesp diff --git a/src/web/WebSchedulerService.h b/src/web/WebSchedulerService.h index a0e806f77..6f208ddf5 100644 --- a/src/web/WebSchedulerService.h +++ b/src/web/WebSchedulerService.h @@ -21,7 +21,6 @@ #define EMSESP_SCHEDULER_FILE "/config/emsespScheduler.json" #define EMSESP_SCHEDULER_SERVICE_PATH "/rest/schedule" // GET and POST -#define EMSESP_GET_SCHEDULE_PATH "/rest/getSchedule" // bit flags for the schedule items. Matches those in interface/src/app/main/SchedulerDialog.tsx // 0-127 (0->0x7F) is day schedule @@ -91,8 +90,6 @@ class WebSchedulerService : public StatefulService { HttpEndpoint _httpEndpoint; FSPersistence _fsPersistence; - void getSchedule(AsyncWebServerRequest * request); - std::list * scheduleItems_; // pointer to the list of schedule events bool ha_registered_ = false; std::deque cmd_changed_; diff --git a/src/web/WebSettingsService.cpp b/src/web/WebSettingsService.cpp index 16983ab47..23c964cf3 100644 --- a/src/web/WebSettingsService.cpp +++ b/src/web/WebSettingsService.cpp @@ -28,9 +28,6 @@ WebSettingsService::WebSettingsService(AsyncWebServer * server, FS * fs, Securit server->on(EMSESP_BOARD_PROFILE_SERVICE_PATH, HTTP_GET, securityManager->wrapRequest([this](AsyncWebServerRequest * request) { board_profile(request); }, AuthenticationPredicates::IS_AUTHENTICATED)); - server->on(EMSESP_GET_SETTINGS_PATH, - HTTP_GET, - securityManager->wrapRequest([this](AsyncWebServerRequest * request) { getSettings(request); }, AuthenticationPredicates::IS_ADMIN)); addUpdateHandler([this] { onUpdate(); }, false); } @@ -463,25 +460,4 @@ void WebSettingsService::board_profile(AsyncWebServerRequest * request) { request->send(response); } -// returns json with all system settings -void WebSettingsService::getSettings(AsyncWebServerRequest * request) { - auto * response = new AsyncJsonResponse(false); - JsonObject root = response->getRoot(); - - root["type"] = "settings"; - - JsonObject node = root["System"].to(); - node["version"] = EMSESP_APP_VERSION; - - System::extractSettings(NETWORK_SETTINGS_FILE, "Network", root); - System::extractSettings(AP_SETTINGS_FILE, "AP", root); - System::extractSettings(MQTT_SETTINGS_FILE, "MQTT", root); - System::extractSettings(NTP_SETTINGS_FILE, "NTP", root); - System::extractSettings(SECURITY_SETTINGS_FILE, "Security", root); - System::extractSettings(EMSESP_SETTINGS_FILE, "Settings", root); - - response->setLength(); - request->send(response); -} - } // namespace emsesp diff --git a/src/web/WebSettingsService.h b/src/web/WebSettingsService.h index 6b7b2ec0c..ed20485b3 100644 --- a/src/web/WebSettingsService.h +++ b/src/web/WebSettingsService.h @@ -25,7 +25,6 @@ #define EMSESP_SETTINGS_SERVICE_PATH "/rest/settings" #define EMSESP_BOARD_PROFILE_SERVICE_PATH "/rest/boardProfile" -#define EMSESP_GET_SETTINGS_PATH "/rest/getSettings" namespace emsesp { @@ -136,7 +135,6 @@ class WebSettingsService : public StatefulService { FSPersistence _fsPersistence; void board_profile(AsyncWebServerRequest * request); - void getSettings(AsyncWebServerRequest * request); void onUpdate(); }; diff --git a/src/web/WebStatusService.cpp b/src/web/WebStatusService.cpp index c9939a7da..96777a91e 100644 --- a/src/web/WebStatusService.cpp +++ b/src/web/WebStatusService.cpp @@ -26,13 +26,16 @@ namespace emsesp { WebStatusService::WebStatusService(AsyncWebServer * server, SecurityManager * securityManager) { // GET - server->on(EMSESP_HARDWARE_STATUS_SERVICE_PATH, HTTP_GET, [this](AsyncWebServerRequest * request) { hardwareStatus(request); }); server->on(EMSESP_SYSTEM_STATUS_SERVICE_PATH, HTTP_GET, [this](AsyncWebServerRequest * request) { systemStatus(request); }); + server->on(EMSESP_EXPORT_DATA_SERVICE_PATH, HTTP_GET, [this](AsyncWebServerRequest * request) { exportData(request); }); + // POST server->on(EMSESP_CHECK_UPGRADE_PATH, [this](AsyncWebServerRequest * request, JsonVariant json) { checkUpgrade(request, json); }); } // /rest/systemStatus +// This contains both system & hardware Status to avoid having multiple costly endpoints +// This is also used for polling during the RestartMonitor to see if EMS-ESP is alive void WebStatusService::systemStatus(AsyncWebServerRequest * request) { EMSESP::system_.refreshHeapMem(); // refresh free heap and max alloc heap @@ -40,7 +43,12 @@ void WebStatusService::systemStatus(AsyncWebServerRequest * request) { JsonObject root = response->getRoot(); root["emsesp_version"] = EMSESP_APP_VERSION; - root["status"] = EMSESP::bus_status(); // 0, 1 or 2 + + // + // System Status + // + root["emsesp_version"] = EMSESP_APP_VERSION; + root["bus_status"] = EMSESP::bus_status(); // 0, 1 or 2 root["bus_uptime"] = EMSbus::bus_uptime(); root["num_devices"] = EMSESP::count_devices(); root["num_sensors"] = EMSESP::temperaturesensor_.no_sensors(); @@ -74,20 +82,6 @@ void WebStatusService::systemStatus(AsyncWebServerRequest * request) { #endif } - response->setLength(); - request->send(response); -} - -// /rest/hardwareStatus -// This is also used for polling during the RestartMonitor to see if EMS-ESP is alive -void WebStatusService::hardwareStatus(AsyncWebServerRequest * request) { - EMSESP::system_.refreshHeapMem(); // refresh free heap and max alloc heap - - auto * response = new AsyncJsonResponse(false); - JsonObject root = response->getRoot(); - - root["emsesp_version"] = EMSESP_APP_VERSION; - #ifdef EMSESP_DEBUG #ifdef EMSESP_TEST root["build_flags"] = "DEBUG,TEST"; @@ -98,15 +92,16 @@ void WebStatusService::hardwareStatus(AsyncWebServerRequest * request) { root["build_flags"] = "TEST"; #endif + // + // Hardware Status + // root["esp_platform"] = EMSESP_PLATFORM; - #ifndef EMSESP_STANDALONE root["cpu_type"] = ESP.getChipModel(); root["cpu_rev"] = ESP.getChipRevision(); root["cpu_cores"] = ESP.getChipCores(); root["cpu_freq_mhz"] = ESP.getCpuFreqMHz(); root["max_alloc_heap"] = EMSESP::system_.getMaxAllocMem(); - root["free_heap"] = EMSESP::system_.getHeapMem(); root["arduino_version"] = ARDUINO_VERSION; root["sdk_version"] = ESP.getSdkVersion(); root["partition"] = esp_ota_get_running_partition()->label; // active partition @@ -157,7 +152,7 @@ void WebStatusService::checkUpgrade(AsyncWebServerRequest * request, JsonVariant JsonObject root = response->getRoot(); version::Semver200_version settings_version(EMSESP_APP_VERSION); - std::string latest_version = json["version"] | EMSESP_APP_VERSION; + const std::string latest_version = json["version"] | EMSESP_APP_VERSION; version::Semver200_version this_version(latest_version); #ifdef EMSESP_DEBUG @@ -170,4 +165,36 @@ void WebStatusService::checkUpgrade(AsyncWebServerRequest * request, JsonVariant request->send(response); } +// returns data for a specific feature/settings as a json object +void WebStatusService::exportData(AsyncWebServerRequest * request) { + auto * response = new AsyncJsonResponse(); + JsonObject root = response->getRoot(); + + String type = request->getParam("type")->value(); + root["type"] = type; + + if (type == "settings") { + JsonObject node = root["System"].to(); + node["version"] = EMSESP_APP_VERSION; + System::extractSettings(NETWORK_SETTINGS_FILE, "Network", root); + System::extractSettings(AP_SETTINGS_FILE, "AP", root); + System::extractSettings(MQTT_SETTINGS_FILE, "MQTT", root); + System::extractSettings(NTP_SETTINGS_FILE, "NTP", root); + System::extractSettings(SECURITY_SETTINGS_FILE, "Security", root); + System::extractSettings(EMSESP_SETTINGS_FILE, "Settings", root); + } else if (type == "schedule") { + System::extractSettings(EMSESP_SCHEDULER_FILE, "Schedule", root); + } else if (type == "customizations") { + System::extractSettings(EMSESP_CUSTOMIZATION_FILE, "Customizations", root); + } else if (type == "entities") { + System::extractSettings(EMSESP_CUSTOMENTITY_FILE, "Entities", root); + } else { + request->send(400); + return; + } + + response->setLength(); + request->send(response); +} + } // namespace emsesp diff --git a/src/web/WebStatusService.h b/src/web/WebStatusService.h index 0eb3cbe2f..d4c4806b7 100644 --- a/src/web/WebStatusService.h +++ b/src/web/WebStatusService.h @@ -1,11 +1,11 @@ #ifndef WebStatusService_h #define WebStatusService_h -#define EMSESP_HARDWARE_STATUS_SERVICE_PATH "/rest/hardwareStatus" #define EMSESP_SYSTEM_STATUS_SERVICE_PATH "/rest/systemStatus" #define EMSESP_CHECK_UPGRADE_PATH "/rest/checkUpgrade" +#define EMSESP_EXPORT_DATA_SERVICE_PATH "/rest/exportData" -#include +#include // for version checking namespace emsesp { @@ -15,8 +15,8 @@ class WebStatusService { private: void systemStatus(AsyncWebServerRequest * request); - void hardwareStatus(AsyncWebServerRequest * request); void checkUpgrade(AsyncWebServerRequest * request, JsonVariant json); + void exportData(AsyncWebServerRequest * request); }; } // namespace emsesp