diff --git a/interface/package.json b/interface/package.json
index 781ed6cc1..049a87929 100644
--- a/interface/package.json
+++ b/interface/package.json
@@ -20,7 +20,7 @@
"lint": "eslint . --cache --fix"
},
"dependencies": {
- "@alova/adapter-xhr": "^1.0.1",
+ "@alova/adapter-xhr": "^1.0.2",
"@babel/core": "^7.23.6",
"@emotion/react": "^11.11.1",
"@emotion/styled": "^11.11.0",
@@ -30,10 +30,10 @@
"@types/imagemin": "^8.0.5",
"@types/lodash-es": "^4.17.12",
"@types/node": "^20.10.4",
- "@types/react": "^18.2.43",
- "@types/react-dom": "^18.2.17",
+ "@types/react": "^18.2.45",
+ "@types/react-dom": "^18.2.18",
"@types/react-router-dom": "^5.3.3",
- "alova": "^2.16.0",
+ "alova": "^2.16.1",
"async-validator": "^4.2.5",
"history": "^5.3.0",
"jwt-decode": "^4.0.0",
@@ -43,7 +43,7 @@
"react-dom": "latest",
"react-dropzone": "^14.2.3",
"react-icons": "^4.12.0",
- "react-router-dom": "^6.20.1",
+ "react-router-dom": "^6.21.0",
"react-toastify": "^9.1.3",
"sockette": "^2.0.6",
"typesafe-i18n": "^5.26.2",
@@ -55,13 +55,13 @@
"@typescript-eslint/eslint-plugin": "^6.14.0",
"@typescript-eslint/parser": "^6.14.0",
"concurrently": "^8.2.2",
- "eslint": "^8.55.0",
+ "eslint": "^8.56.0",
"eslint-config-airbnb": "^19.0.4",
"eslint-config-airbnb-typescript": "^17.1.0",
"eslint-config-prettier": "^9.1.0",
"eslint-import-resolver-typescript": "^3.6.1",
"eslint-plugin-autofix": "^1.1.0",
- "eslint-plugin-import": "^2.29.0",
+ "eslint-plugin-import": "^2.29.1",
"eslint-plugin-jsx-a11y": "^6.8.0",
"eslint-plugin-prettier": "alpha",
"eslint-plugin-react": "^7.33.2",
@@ -70,7 +70,7 @@
"prettier": "^3.1.1",
"rollup-plugin-visualizer": "^5.11.0",
"terser": "^5.26.0",
- "vite": "^5.0.8",
+ "vite": "^5.0.10",
"vite-plugin-imagemin": "^0.6.1",
"vite-tsconfig-paths": "^4.2.2"
},
diff --git a/interface/src/SignIn.tsx b/interface/src/SignIn.tsx
index 116c1b1eb..b5b3260ac 100644
--- a/interface/src/SignIn.tsx
+++ b/interface/src/SignIn.tsx
@@ -1,6 +1,7 @@
import ForwardIcon from '@mui/icons-material/Forward';
import { Box, Paper, Typography, MenuItem, TextField, Button } from '@mui/material';
import { useRequest } from 'alova';
+import SKflag from 'i18n/SK.svg';
import { useContext, useState } from 'react';
import { toast } from 'react-toastify';
import { FeaturesContext } from './contexts/features';
@@ -150,6 +151,10 @@ const SignIn: FC = () => {
TR
+
diff --git a/interface/src/components/layout/LayoutAuthMenu.tsx b/interface/src/components/layout/LayoutAuthMenu.tsx
index e9bbdaf6f..47fd4099f 100644
--- a/interface/src/components/layout/LayoutAuthMenu.tsx
+++ b/interface/src/components/layout/LayoutAuthMenu.tsx
@@ -12,13 +12,12 @@ import {
MenuItem,
TextField
} from '@mui/material';
+import SKflag from 'i18n/SK.svg';
import { useState, useContext } from 'react';
import type { TypographyProps } from '@mui/material';
-
import type { Locales } from 'i18n/i18n-types';
import type { FC, ChangeEventHandler } from 'react';
import { AuthenticatedContext } from 'contexts/authentication';
-
import DEflag from 'i18n/DE.svg';
import FRflag from 'i18n/FR.svg';
import GBflag from 'i18n/GB.svg';
@@ -28,6 +27,7 @@ import NOflag from 'i18n/NO.svg';
import PLflag from 'i18n/PL.svg';
import SVflag from 'i18n/SV.svg';
import TRflag from 'i18n/TR.svg';
+
import { I18nContext } from 'i18n/i18n-react';
import { loadLocaleAsync } from 'i18n/i18n-util.async';
@@ -110,6 +110,10 @@ const LayoutAuthMenu: FC = () => {
TR
+
diff --git a/interface/src/i18n/sk/index.ts b/interface/src/i18n/sk/index.ts
new file mode 100644
index 000000000..64cf7de94
--- /dev/null
+++ b/interface/src/i18n/sk/index.ts
@@ -0,0 +1,337 @@
+import type { Translation } from '../i18n-types';
+/* prettier-ignore */
+/* eslint-disable */
+
+const sk: Translation = {
+ LANGUAGE: 'Språk',
+ RETRY: 'Försök igen',
+ LOADING: 'Laddar',
+ IS_REQUIRED: '{0} Krävs',
+ SIGN_IN: 'Logga In',
+ SIGN_OUT: 'Logga Ut',
+ USERNAME: 'Användarnamn',
+ PASSWORD: 'Lösenord',
+ SU_PASSWORD: 'su Lösenord',
+ DASHBOARD: 'Kontrollpanel',
+ SETTINGS_OF: '{0} Inställningar',
+ HELP_OF: '{0} Hjälp',
+ LOGGED_IN: 'Inloggad som {name}',
+ PLEASE_SIGNIN: 'Vänligen logga in för att fortsätta',
+ UPLOAD_SUCCESSFUL: 'Uppladdning lyckades',
+ DOWNLOAD_SUCCESSFUL: 'Nedladdning lyckades',
+ INVALID_LOGIN: 'Ogiltig login',
+ NETWORK: 'Nätverk',
+ SECURITY: 'Säkerhet',
+ ONOFF_CAP: 'PÅ/AV',
+ ONOFF: 'på/av',
+ TYPE: 'Typ',
+ DESCRIPTION: 'Beskrivning',
+ ENTITIES: 'Entiteter',
+ REFRESH: 'Uppdatera',
+ EXPORT: 'Exportera',
+ DEVICE_DETAILS: 'Enhetsdetaljer',
+ ID_OF: '{0}-ID',
+ DEVICE: 'Enhets',
+ PRODUCT: 'Produkt',
+ VERSION: 'Version',
+ BRAND: 'Fabrikat',
+ ENTITY_NAME: 'Entitetsnamn',
+ VALUE: '{{Värde|värde}}',
+ DEVICE_DATA: 'Enhets data',
+ SENSOR_DATA: 'Sensor data',
+ DEVICES: 'Enheter',
+ SENSORS: 'Sensorer',
+ RUN_COMMAND: 'Kör Kommando',
+ CHANGE_VALUE: 'Ändra Värde',
+ CANCEL: 'Avbryt',
+ RESET: 'Nollställ',
+ APPLY_CHANGES: 'Apply Changes ({0})', // TODO translate
+ UPDATE: 'Update', // TODO translate
+ EXECUTE: 'Execute', // TODO translate
+ REMOVE: 'Ta bort',
+ PROBLEM_UPDATING: 'Problem vid uppdatering',
+ PROBLEM_LOADING: 'Problem vid hämtning',
+ ANALOG_SENSOR: 'Analog Sensor',
+ ANALOG_SENSORS: 'Analoga Sensorer',
+ SETTINGS: 'Inställningar',
+ UPDATED_OF: '{0} Uppdaterad',
+ UPDATE_OF: '{0} Uppdatera',
+ REMOVED_OF: '{0} Raderad',
+ DELETION_OF: '{0} Radering',
+ OFFSET: 'Kompensering',
+ FACTOR: 'Faktor',
+ FREQ: 'Frekvens',
+ DUTY_CYCLE: 'Duty Cycle',
+ UNIT: 'UoM',
+ STARTVALUE: 'Startvärde',
+ WARN_GPIO: 'Varning: Var försiktig vid aktivering av GPIO!',
+ EDIT: 'Ändra',
+ SENSOR: 'Sensor',
+ TEMP_SENSOR: 'Temperatursensor',
+ TEMP_SENSORS: 'Temperatursensorer',
+ WRITE_CMD_SENT: 'Skrivkommandon skickade',
+ EMS_BUS_WARNING: 'EMS-buss nedkopplad. Om denna varning kvarstår efter några sekunder, kontrollera inställningar och enhets-profil.',
+ EMS_BUS_SCANNING: 'Söker efter EMS-enheter...',
+ CONNECTED: 'Ansluten',
+ TX_ISSUES: 'Sändfel - Prova ett annat TX-läge',
+ DISCONNECTED: 'Nedkopplad',
+ EMS_SCAN: 'Är du säker att du vill initiera en full genomsökning av EMS-bussen?',
+ EMS_BUS_STATUS: 'Status',
+ ACTIVE_DEVICES: 'Aktiva Enheter',
+ EMS_DEVICE: 'EMS Enhet',
+ SUCCESS: 'Lyckades',
+ FAIL: 'Misslyckades',
+ QUALITY: 'Kvalitet',
+ SCAN_DEVICES: 'Sök efter nya enheter',
+ EMS_BUS_STATUS_TITLE: 'EMS-buss & aktivitetsstatus',
+ SCAN: 'Sök',
+ STATUS_NAMES: [
+ 'EMS-telegram (Rx)',
+ 'EMS-läsningar (Tx)',
+ 'EMS-skrivningar (Tx)',
+ 'Temperatursensor-läsningar',
+ 'Analog Sensor-läsningar',
+ 'MQTT-publiceringar',
+ 'API-anrop',
+ 'Syslog-meddelanden'
+ ],
+ NUM_DEVICES: '{num} Enhet{{er}}',
+ NUM_TEMP_SENSORS: '{num} Temperatur-sensor{{er}}',
+ NUM_ANALOG_SENSORS: '{num} Analoga Sensor{{er}}',
+ NUM_DAYS: '{num} dag{{ar}}',
+ NUM_SECONDS: '{num} sekund{{er}}',
+ NUM_HOURS: '{num} timmar',
+ NUM_MINUTES: '{num} minut{{er}}',
+ APPLICATION_SETTINGS: 'Inställningar',
+ CUSTOMIZATIONS: 'Anpassningr',
+ APPLICATION_RESTARTING: 'EMS-ESP startar om',
+ INTERFACE_BOARD_PROFILE: 'Interface Hårdvaruprofil',
+ BOARD_PROFILE_TEXT: 'Välj en förkonfigurerad hårdvaruprofil från listan nedan eller välj Anpassad för att konfigurera dina egna hårdvaruinställningar',
+ BOARD_PROFILE: 'Hårdvarutyp',
+ CUSTOM: 'Anpassa',
+ GPIO_OF: '{0} GPIO',
+ BUTTON: 'Knapp',
+ TEMPERATURE: 'Temperatur',
+ PHY_TYPE: 'Eth PHY-typ',
+ DISABLED: 'inaktiverad',
+ TX_MODE: 'Tx-läge',
+ HARDWARE: 'Hårdvara',
+ EMS_BUS: '{{BUSS|EMS-BUSS}}',
+ GENERAL_OPTIONS: 'Allmänna Inställningar',
+ LANGUAGE_ENTITIES: 'Språk (för entiteter)',
+ HIDE_LED: 'Inaktivera LED',
+ ENABLE_TELNET: 'Aktivera Telnet',
+ ENABLE_ANALOG: 'Aktivera Analoga Sensorer',
+ CONVERT_FAHRENHEIT: 'Konvertera temperaturer till Fahrenheit',
+ BYPASS_TOKEN: 'Inaktivera Token-autensiering för API-anrop',
+ READONLY: 'Aktivera read-only (blockerar alla utgående skrivkommandon mot EMS-bussen)',
+ UNDERCLOCK_CPU: 'Nedklocka Processorhastighet',
+ HEATINGOFF: 'Start boiler with forced heating off', // TODO translate
+ ENABLE_SHOWER_TIMER: 'Aktivera Dusch-timer',
+ ENABLE_SHOWER_ALERT: 'Aktivera Dusch-varning',
+ TRIGGER_TIME: 'Aktiveringstid',
+ COLD_SHOT_DURATION: 'Längd på kalldusch',
+ FORMATTING_OPTIONS: 'Formatteringsalternativ',
+ BOOLEAN_FORMAT_DASHBOARD: 'Bool-format Kontrollpanel',
+ BOOLEAN_FORMAT_API: 'Bool-format API/MQTT',
+ ENUM_FORMAT: 'Enum-format API/MQTT',
+ INDEX: 'Index',
+ ENABLE_PARASITE: 'Aktivera parasitström',
+ LOGGING: 'Loggning',
+ LOG_HEX: 'Logga EMS-telegram i hexadecimal',
+ ENABLE_SYSLOG: 'Aktivera Syslog',
+ LOG_LEVEL: 'Loggnivå',
+ MARK_INTERVAL: 'Markerings-interval',
+ SECONDS: 'sekunder',
+ MINUTES: 'minuter',
+ HOURS: 'timmar',
+ RESTART: 'Starta om',
+ RESTART_TEXT: 'EMS-ESP kräver en omstart för att applicera förändrade systeminställningar',
+ RESTART_CONFIRM: 'Är du säker på att du vill starta om EMS-ESP?',
+ COMMAND: 'Kommando',
+ CUSTOMIZATIONS_RESTART: 'Alla anpassningr har raderats. Startar om...',
+ CUSTOMIZATIONS_FULL: 'Antal valda enheter för högt. Vänligen spara i mindre antal åt gången.',
+ CUSTOMIZATIONS_SAVED: 'Anpassningar sparade',
+ CUSTOMIZATIONS_HELP_1: 'Välj en enhet och anpassa underenheter med hjälp av alternativen',
+ CUSTOMIZATIONS_HELP_2: 'Favorit',
+ CUSTOMIZATIONS_HELP_3: 'Inaktivera skrivningar',
+ CUSTOMIZATIONS_HELP_4: 'Exkludera från MQTT & API',
+ CUSTOMIZATIONS_HELP_5: 'Göm från Kontrollpanel',
+ CUSTOMIZATIONS_HELP_6: 'remove from memory', // TODO translate
+ SELECT_DEVICE: 'Välj en enhet',
+ SET_ALL: 'ställ in alla',
+ OPTIONS: 'Alternativ',
+ NAME: 'Namn',
+ CUSTOMIZATIONS_RESET: 'Är du säker på att du vill ta bort alla anpassningar inklusive inställningar för Temperatur och Analoga sensorer?',
+ DEVICE_ENTITIES: 'Enhets-entiteter',
+ SUPPORT_INFORMATION: 'Supportinformation',
+ CLICK_HERE: 'Klicka Här',
+ HELP_INFORMATION_1: 'Besök Wikin för instruktioner för hur du kan konfigurera EMS-ESP',
+ HELP_INFORMATION_2: 'För community-support besök vår Discord-server',
+ HELP_INFORMATION_3: 'Önska en ny funktion eller rapportera en bugg',
+ HELP_INFORMATION_4: 'Bifoga din systeminformation för snabbare hantering när du rapporterar ett problem',
+ HELP_INFORMATION_5: 'EMS-ESP är gratis och är öppen källkod. Bidra till utvecklingen genom att ge oss en stjärna på GitHub!',
+ UPLOAD: 'Uppladdning',
+ DOWNLOAD: '{{N|n|n}}edladdning',
+ ABORTED: 'Avbruten',
+ FAILED: 'Misslyckades',
+ SUCCESSFUL: 'Lyckades',
+ SYSTEM: 'System',
+ LOG_OF: '{0} Logg',
+ STATUS_OF: '{0} Status',
+ UPLOAD_DOWNLOAD: 'Upp/Nedladdning',
+ VERSION_ON: 'You are currently on', // TODO translate
+ SYSTEM_APPLY_FIRMWARE: 'för att aktivera ny firmware',
+ CLOSE: 'Stäng',
+ USE: 'Använd',
+ FACTORY_RESET: 'Fabriksåterställning',
+ SYSTEM_FACTORY_TEXT: 'Enheten har blivit fabriksåterställd och startar nu om',
+ SYSTEM_FACTORY_TEXT_DIALOG: 'Är du säker att du vill fabriksåterställa enheten?',
+ VERSION_CHECK: 'Senaste versioner',
+ THE_LATEST: 'Den senaste',
+ OFFICIAL: 'officiell',
+ DEVELOPMENT: 'utveckling',
+ RELEASE_IS: 'release är', // TODO translate
+ RELEASE_NOTES: 'release-logg',
+ EMS_ESP_VER: 'EMS-ESP Version',
+ PLATFORM: 'Enhet (Plattform / SDK)',
+ UPTIME: 'Systemets Upptid',
+ CPU_FREQ: 'CPU-frekvens',
+ HEAP: 'Heap (Ledigt / Max allokerat)',
+ PSRAM: 'PSRAM (Storlek / Ledigt)',
+ FLASH: 'Flashminne (Storlek / Hastighet)',
+ APPSIZE: 'Applikationer (Använt / Ledigt)',
+ FILESYSTEM: 'Filsystem (Använt / Ledigt)',
+ BUFFER_SIZE: 'Max Bufferstorlek',
+ COMPACT: 'Komprimera',
+ ENABLE_OTA: 'Aktivera OTA-uppdateringar',
+ DOWNLOAD_CUSTOMIZATION_TEXT: 'Ladda ner entitetsanpassningar',
+ DOWNLOAD_SCHEDULE_TEXT: 'Download Scheduler Events', // TODO translate
+ DOWNLOAD_SETTINGS_TEXT: 'Ladda ner applikationsinställningar. Var försiktig om du delar dina iställlningar då de innehåller lösenord och annan känslig systeminformation',
+ UPLOAD_TEXT: 'Ladda upp ett nytt firmware (.bin), inställningar eller anpassningar (.json) nedan',
+ UPLOADING: 'Laddar upp',
+ UPLOAD_DROP_TEXT: 'Släpp fil eller klicka här',
+ ERROR: 'Okänt Fel, var god försök igen',
+ TIME_SET: 'Ställ in tid',
+ MANAGE_USERS: 'Användare',
+ IS_ADMIN: 'Admin',
+ USER_WARNING: 'Du måste ha minst en admin konfigurerad',
+ ADD: 'Lägg till',
+ ACCESS_TOKEN_FOR: 'Access Token för',
+ ACCESS_TOKEN_TEXT: 'Nedan Token används med REST API-anrop som kräver auktorisering. Den kan skickas med antingen som en Bearer token i Authorization-headern eller i access_token URL query-parametern.',
+ GENERATING_TOKEN: 'Genererar token',
+ USER: 'Användare',
+ MODIFY: 'Ändra',
+ SU_TEXT: 'SU-användarens (super user) lösenord används för att signera autensierings-tokens samt för att aktivera administratörsprivilegier i Console-läge',
+ NOT_ENABLED: 'Ej aktiv',
+ ERRORS_OF: '{0} fel',
+ DISCONNECT_REASON: 'Anledning till nedkoppling',
+ ENABLE_MQTT: 'Aktivera MQTT',
+ BROKER: 'Broker',
+ CLIENT: 'Client',
+ BASE_TOPIC: 'Base',
+ OPTIONAL: 'valfritt',
+ FORMATTING: 'Formatering',
+ MQTT_FORMAT: 'Topic/Payload Format',
+ MQTT_NEST_1: 'Nestlat i en topic.',
+ MQTT_NEST_2: 'Som individuella topics',
+ MQTT_RESPONSE: 'Publish-kommando som ett `response` topic',
+ MQTT_PUBLISH_TEXT_1: 'Publicera single value topics vid värdeförändring',
+ MQTT_PUBLISH_TEXT_2: 'Publicera till kommando-topics (ioBroker)',
+ MQTT_PUBLISH_TEXT_3: 'Aktivera MQTT Discovery',
+ MQTT_PUBLISH_TEXT_4: 'Prefix för Discovery topics',
+ MQTT_PUBLISH_TEXT_5: 'Discovery type', // TODO translate
+ MQTT_PUBLISH_INTERVALS: 'Publiceringsintervall',
+ MQTT_INT_BOILER: 'Värmepump/panna',
+ MQTT_INT_THERMOSTATS: 'Termostater',
+ MQTT_INT_SOLAR: 'Solpaneler',
+ MQTT_INT_MIXER: 'Blandningsventiler',
+ MQTT_QUEUE: 'MQTT-kö',
+ DEFAULT: 'Standard',
+ MQTT_ENTITY_FORMAT: 'Entitets-ID format',
+ MQTT_ENTITY_FORMAT_0: 'Singel-instans, långt namn(v3.4)',
+ MQTT_ENTITY_FORMAT_1: 'Singel-instans, kort name',
+ MQTT_ENTITY_FORMAT_2: 'Multi-instans, kort name',
+ MQTT_CLEAN_SESSION: 'Använd "Clean Session"-flaggan',
+ MQTT_RETAIN_FLAG: 'Använd "Always Retain"-flaggan',
+ INACTIVE: 'Inaktiv',
+ ACTIVE: 'Aktiv',
+ UNKNOWN: 'Okänt',
+ SET_TIME: 'Ställ in klockan',
+ SET_TIME_TEXT: 'Ange lokal datum och tid nedan för att ställa in klockan',
+ LOCAL_TIME: 'Tid (lokal)',
+ UTC_TIME: 'Tid (UTC)',
+ ENABLE_NTP: 'Aktivera NTP',
+ NTP_SERVER: 'NTP-server',
+ TIME_ZONE: 'Tidszon',
+ ACCESS_POINT: 'Accesspunkt',
+ AP_PROVIDE: 'Aktivera Accesspunkt',
+ AP_PROVIDE_TEXT_1: 'alltid',
+ AP_PROVIDE_TEXT_2: 'när WiFi är nedkopplat',
+ AP_PROVIDE_TEXT_3: 'aldrig',
+ AP_PREFERRED_CHANNEL: 'Kanal',
+ AP_HIDE_SSID: 'Göm SSID',
+ AP_CLIENTS: 'AP-klienter',
+ AP_MAX_CLIENTS: 'Max Klienter',
+ AP_LOCAL_IP: 'Lokalt IP',
+ NETWORK_SCAN: 'Sök efter WiFi-nätverk',
+ IDLE: 'Vilande',
+ LOST: 'Förlorad',
+ SCANNING: 'Söker',
+ SCAN_AGAIN: 'Sök igen',
+ NETWORK_SCANNER: 'Hittade nätverk',
+ NETWORK_NO_WIFI: 'Inga WiFi-nätverk hittades',
+ NETWORK_BLANK_SSID: 'lämna blankt för att inaktivera WiFi', // and enable ETH // TODO translate
+ NETWORK_BLANK_BSSID: 'leave blank to use only SSID', // TODO translate
+ TX_POWER: 'Tx Effekt',
+ HOSTNAME: 'Värdnamn',
+ NETWORK_DISABLE_SLEEP: 'Inaktivera sömnläge',
+ NETWORK_LOW_BAND: 'Använd lägre bandbredd',
+ NETWORK_USE_DNS: 'Aktivera mDNS-tjänsten',
+ NETWORK_ENABLE_CORS: 'Aktivera CORS',
+ NETWORK_CORS_ORIGIN: 'CORS origin',
+ NETWORK_ENABLE_IPV6: 'Aktivera IPv6-support',
+ NETWORK_FIXED_IP: 'Använd statiskt IP',
+ NETWORK_GATEWAY: 'Gateway',
+ NETWORK_SUBNET: 'Subnätmask',
+ NETWORK_DNS: 'DNS-Server',
+ ADDRESS_OF: '{0} Adress',
+ ADMIN: 'Admin',
+ GUEST: 'Gäst',
+ NEW: 'Ny',
+ NEW_NAME_OF: 'Byt namn {0}',
+ ENTITY: 'Entitet',
+ MIN: 'min',
+ MAX: 'max',
+ BLOCK_NAVIGATE_1: 'You have unsaved changes', // TODO translate
+ BLOCK_NAVIGATE_2: 'If you navigate to a different page, your unsaved changes will be lost. Are you sure you want to leave this page?', // TODO translate
+ STAY: 'Stay', // TODO translate
+ LEAVE: 'Leave', // TODO translate
+ SCHEDULER: 'Scheduler', // TODO translate
+ SCHEDULER_HELP_1: 'Automate commands by adding scheduled events below. Set a unique Name to enable/disable activation via API/MQTT.', // TODO translate
+ SCHEDULER_HELP_2: 'Use 00:00 to trigger once on start-up', // TODO translate
+ SCHEDULE: 'Schedule', // TODO translate
+ TIME: 'Time', // TODO translate
+ TIMER: 'Timer', // TODO translate
+ SCHEDULE_UPDATED: 'Schedule updated', // TODO translate
+ SCHEDULE_TIMER_1: 'on startup', // TODO translate
+ SCHEDULE_TIMER_2: 'every minute', // TODO translate
+ SCHEDULE_TIMER_3: 'every hour', // TODO translate
+ CUSTOM_ENTITIES: 'Custom Entities', // TODO translate
+ ENTITIES_HELP_1: 'Fetch custom entities from the EMS bus', // TODO translate
+ ENTITIES_UPDATED: 'Entities Updated', // TODO translate
+ WRITEABLE: 'Writeable', // TODO translate
+ SHOWING: 'Showing', // TODO translate
+ SEARCH: 'Search', // TODO translate
+ CERT: 'TLS root certificate (leave blank for insecure)', // TODO translate
+ ENABLE_TLS: 'Aktivera TLS',
+ ON: 'On', // TODO translate
+ OFF: 'Off', // TODO translate
+ POLARITY: 'Polarity', // TODO translate
+ ACTIVEHIGH: 'Active High', // TODO translate
+ ACTIVELOW: 'Active Low', // TODO translate
+ UNCHANGED: 'Unchanged', // TODO translate
+ ALWAYS: 'Always' // TODO translate
+};
+
+export default sv;
diff --git a/interface/src/project/SettingsApplication.tsx b/interface/src/project/SettingsApplication.tsx
index 1f145af17..94912b32b 100644
--- a/interface/src/project/SettingsApplication.tsx
+++ b/interface/src/project/SettingsApplication.tsx
@@ -386,6 +386,7 @@ const SettingsApplication: FC = () => {
+
{data.led_gpio !== 0 && (
diff --git a/interface/yarn.lock b/interface/yarn.lock
index 398cbaeda..206c629b8 100644
--- a/interface/yarn.lock
+++ b/interface/yarn.lock
@@ -12,10 +12,10 @@ __metadata:
languageName: node
linkType: hard
-"@alova/adapter-xhr@npm:^1.0.1":
- version: 1.0.1
- resolution: "@alova/adapter-xhr@npm:1.0.1"
- checksum: 10fb023fd30408bf47433491679057458c599194040077d30c8427531b6ee4a6549bf468a7132d8ae91e99c8bdcea27dc4706b5b982033ac820f779a5016be7d
+"@alova/adapter-xhr@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "@alova/adapter-xhr@npm:1.0.2"
+ checksum: a57d178e89e3b655191bebccbc34d22760813b97b430e16f77b6ad561e3bb4ad8a34948aa2d724f5833d675f21a337ab769a3e5f73878430c3139374c6afb6ea
languageName: node
linkType: hard
@@ -821,10 +821,10 @@ __metadata:
languageName: node
linkType: hard
-"@eslint/js@npm:8.55.0":
- version: 8.55.0
- resolution: "@eslint/js@npm:8.55.0"
- checksum: 34b001a95b16501fd64f525b1de3ab0e4c252e5820b74069004934cb13977fc04ba4522a3e8f8074bd6af49da10d3444cd49fa711819f425ad73d6bf46eea82d
+"@eslint/js@npm:8.56.0":
+ version: 8.56.0
+ resolution: "@eslint/js@npm:8.56.0"
+ checksum: 97a4b5ccf7e24f4d205a1fb0f21cdcd610348ecf685f6798a48dd41ba443f2c1eedd3050ff5a0b8f30b8cf6501ab512aa9b76e531db15e59c9ebaa41f3162e37
languageName: node
linkType: hard
@@ -1262,10 +1262,10 @@ __metadata:
languageName: node
linkType: hard
-"@remix-run/router@npm:1.13.1":
- version: 1.13.1
- resolution: "@remix-run/router@npm:1.13.1"
- checksum: bf1ff266744352e71fc414f983a9f7772c10ec55cf4b978d851026e6c12b39c0084f99e4e45de706b800a71889ef09f652b8e7c43e21800351cc14c5ada8c834
+"@remix-run/router@npm:1.14.0":
+ version: 1.14.0
+ resolution: "@remix-run/router@npm:1.14.0"
+ checksum: cc46150f087695ba9da9aa905bcbe1d53d7e3ae4de37645c206b4bcb57a4605ebf3bdc87b9eff299562e7d68ddf80d412ac64cc60ecd2116d4aeb39cf8a0e358
languageName: node
linkType: hard
@@ -1583,12 +1583,12 @@ __metadata:
languageName: node
linkType: hard
-"@types/react-dom@npm:^18.2.17":
- version: 18.2.17
- resolution: "@types/react-dom@npm:18.2.17"
+"@types/react-dom@npm:^18.2.18":
+ version: 18.2.18
+ resolution: "@types/react-dom@npm:18.2.18"
dependencies:
"@types/react": "npm:*"
- checksum: fe0dbb3224b48515da8fe25559e3777d756a27c3f22903f0b1b020de8d68bd57eb1f0af62b52ee65d9632637950afed8cbad24d158c4f3d910d083d49bd73fba
+ checksum: 4ef7725b4cebd4a32e049097ddfdfd855a178e63ead97ab6d3084872e7d6c1acd71aa923488123cd1015f0e0b11489d2b44f674a1df8fe82d7827eabbec6dbf1
languageName: node
linkType: hard
@@ -1633,14 +1633,14 @@ __metadata:
languageName: node
linkType: hard
-"@types/react@npm:^18.2.43":
- version: 18.2.43
- resolution: "@types/react@npm:18.2.43"
+"@types/react@npm:^18.2.45":
+ version: 18.2.45
+ resolution: "@types/react@npm:18.2.45"
dependencies:
"@types/prop-types": "npm:*"
"@types/scheduler": "npm:*"
csstype: "npm:^3.0.2"
- checksum: a9d90a93380bb67623f27eba83e2d05b548109f7eb6fd591f5c4a3716bc257cc7cb078455db7ea4308d5f2ff6b4fe48d9a4a560145d9384069a2b5121bc93937
+ checksum: bd27fd8a959fa776965997af89cb04e43e7868416850fdff421b5539f389efa35acae3d55915c9f32d7b00fb388550302bf8a7f06010abf9ad431e5bf58cb774
languageName: node
linkType: hard
@@ -1809,7 +1809,7 @@ __metadata:
version: 0.0.0-use.local
resolution: "EMS-ESP@workspace:."
dependencies:
- "@alova/adapter-xhr": "npm:^1.0.1"
+ "@alova/adapter-xhr": "npm:^1.0.2"
"@babel/core": "npm:^7.23.6"
"@emotion/react": "npm:^11.11.1"
"@emotion/styled": "npm:^11.11.0"
@@ -1821,21 +1821,21 @@ __metadata:
"@types/imagemin": "npm:^8.0.5"
"@types/lodash-es": "npm:^4.17.12"
"@types/node": "npm:^20.10.4"
- "@types/react": "npm:^18.2.43"
- "@types/react-dom": "npm:^18.2.17"
+ "@types/react": "npm:^18.2.45"
+ "@types/react-dom": "npm:^18.2.18"
"@types/react-router-dom": "npm:^5.3.3"
"@typescript-eslint/eslint-plugin": "npm:^6.14.0"
"@typescript-eslint/parser": "npm:^6.14.0"
- alova: "npm:^2.16.0"
+ alova: "npm:^2.16.1"
async-validator: "npm:^4.2.5"
concurrently: "npm:^8.2.2"
- eslint: "npm:^8.55.0"
+ eslint: "npm:^8.56.0"
eslint-config-airbnb: "npm:^19.0.4"
eslint-config-airbnb-typescript: "npm:^17.1.0"
eslint-config-prettier: "npm:^9.1.0"
eslint-import-resolver-typescript: "npm:^3.6.1"
eslint-plugin-autofix: "npm:^1.1.0"
- eslint-plugin-import: "npm:^2.29.0"
+ eslint-plugin-import: "npm:^2.29.1"
eslint-plugin-jsx-a11y: "npm:^6.8.0"
eslint-plugin-prettier: "npm:alpha"
eslint-plugin-react: "npm:^7.33.2"
@@ -1850,14 +1850,14 @@ __metadata:
react-dom: "npm:latest"
react-dropzone: "npm:^14.2.3"
react-icons: "npm:^4.12.0"
- react-router-dom: "npm:^6.20.1"
+ react-router-dom: "npm:^6.21.0"
react-toastify: "npm:^9.1.3"
rollup-plugin-visualizer: "npm:^5.11.0"
sockette: "npm:^2.0.6"
terser: "npm:^5.26.0"
typesafe-i18n: "npm:^5.26.2"
typescript: "npm:^5.3.3"
- vite: "npm:^5.0.8"
+ vite: "npm:^5.0.10"
vite-plugin-imagemin: "npm:^0.6.1"
vite-tsconfig-paths: "npm:^4.2.2"
languageName: unknown
@@ -1928,10 +1928,10 @@ __metadata:
languageName: node
linkType: hard
-"alova@npm:^2.16.0":
- version: 2.16.0
- resolution: "alova@npm:2.16.0"
- checksum: 476aaf451c6760f46822f0e8bf834c86700ccd6e8f28b28f0381afa43a4d2bc361fa1414fe30e8494e6a5a5a49a6f744b9a59ec7f0ad179f4cf5b985a0a638ed
+"alova@npm:^2.16.1":
+ version: 2.16.1
+ resolution: "alova@npm:2.16.1"
+ checksum: 88f0a175ed433606ff5f564151fc92e2d16e04a04f87362cbe76c1f0c33382e49719ce48f081fe03f707c28b78200c50b933155051d9a82be1d4bfcb73f1d0f9
languageName: node
linkType: hard
@@ -3814,9 +3814,9 @@ __metadata:
languageName: node
linkType: hard
-"eslint-plugin-import@npm:^2.29.0":
- version: 2.29.0
- resolution: "eslint-plugin-import@npm:2.29.0"
+"eslint-plugin-import@npm:^2.29.1":
+ version: 2.29.1
+ resolution: "eslint-plugin-import@npm:2.29.1"
dependencies:
array-includes: "npm:^3.1.7"
array.prototype.findlastindex: "npm:^1.2.3"
@@ -3834,10 +3834,10 @@ __metadata:
object.groupby: "npm:^1.0.1"
object.values: "npm:^1.1.7"
semver: "npm:^6.3.1"
- tsconfig-paths: "npm:^3.14.2"
+ tsconfig-paths: "npm:^3.15.0"
peerDependencies:
eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8
- checksum: d6e8d016f38369892c85b866f762c03dee2b337d4f12031756e30d7490879261d1192a3c2f682fd7c4d2b923465f7a1e3d22cfdad5da1b1391c3bd39ea87af1a
+ checksum: 5865f05c38552145423c535326ec9a7113ab2305c7614c8b896ff905cfabc859c8805cac21e979c9f6f742afa333e6f62f812eabf891a7e8f5f0b853a32593c1
languageName: node
linkType: hard
@@ -3945,14 +3945,14 @@ __metadata:
languageName: node
linkType: hard
-"eslint@npm:^8.55.0":
- version: 8.55.0
- resolution: "eslint@npm:8.55.0"
+"eslint@npm:^8.56.0":
+ version: 8.56.0
+ resolution: "eslint@npm:8.56.0"
dependencies:
"@eslint-community/eslint-utils": "npm:^4.2.0"
"@eslint-community/regexpp": "npm:^4.6.1"
"@eslint/eslintrc": "npm:^2.1.4"
- "@eslint/js": "npm:8.55.0"
+ "@eslint/js": "npm:8.56.0"
"@humanwhocodes/config-array": "npm:^0.11.13"
"@humanwhocodes/module-importer": "npm:^1.0.1"
"@nodelib/fs.walk": "npm:^1.2.8"
@@ -3989,7 +3989,7 @@ __metadata:
text-table: "npm:^0.2.0"
bin:
eslint: bin/eslint.js
- checksum: afd016cfbe9e9d667b3f98c14c681a7e518808f6c30856e56cbb02248900eac5bf6dc5e577a7eaec259539486db48ef7d16ef58fb14b1585ba7c84b35490c53c
+ checksum: ef6193c6e4cef20774b985a5cc2fd4bf6d3c4decd423117cbc4a0196617861745db291217ad3c537bc3a160650cca965bc818f55e1f3e446af1fcb293f9940a5
languageName: node
linkType: hard
@@ -7130,27 +7130,27 @@ __metadata:
languageName: node
linkType: hard
-"react-router-dom@npm:^6.20.1":
- version: 6.20.1
- resolution: "react-router-dom@npm:6.20.1"
+"react-router-dom@npm:^6.21.0":
+ version: 6.21.0
+ resolution: "react-router-dom@npm:6.21.0"
dependencies:
- "@remix-run/router": "npm:1.13.1"
- react-router: "npm:6.20.1"
+ "@remix-run/router": "npm:1.14.0"
+ react-router: "npm:6.21.0"
peerDependencies:
react: ">=16.8"
react-dom: ">=16.8"
- checksum: 27efb05af0025bdcd7ecc85d2df2f53ca90bbf4db1dd4319002714b5be4e23c9434f95932d79f14a42d7c347ca882e9a0bba74a4d6331de8f7fb527c21f3f069
+ checksum: 7448674817971c8138a96cef05331fb45cb6ef1f71450db9da87e3e0d0586bb55ba85fd3ca741ed7a22a40b6b6e544c11cff9e2fe3fa5957faf7b8ab74a0dcf3
languageName: node
linkType: hard
-"react-router@npm:6.20.1":
- version: 6.20.1
- resolution: "react-router@npm:6.20.1"
+"react-router@npm:6.21.0":
+ version: 6.21.0
+ resolution: "react-router@npm:6.21.0"
dependencies:
- "@remix-run/router": "npm:1.13.1"
+ "@remix-run/router": "npm:1.14.0"
peerDependencies:
react: ">=16.8"
- checksum: 96c25c8ca782dfa5b501540b9a491d8dca67c829a90fda237238a22881c695226fd5bbe14fcb2793bd5877aec2514d932c3293bf1f2463606fb3f2326628d766
+ checksum: 10c58589d804b823caf3fd46403662769375618ae39ebae99f8df167c43440bb8ebf853548ba2bf96f21027c72c234d4fc37042643c91c9920f1cdfda5e03fab
languageName: node
linkType: hard
@@ -8363,15 +8363,15 @@ __metadata:
languageName: node
linkType: hard
-"tsconfig-paths@npm:^3.14.2":
- version: 3.14.2
- resolution: "tsconfig-paths@npm:3.14.2"
+"tsconfig-paths@npm:^3.15.0":
+ version: 3.15.0
+ resolution: "tsconfig-paths@npm:3.15.0"
dependencies:
"@types/json5": "npm:^0.0.29"
json5: "npm:^1.0.2"
minimist: "npm:^1.2.6"
strip-bom: "npm:^3.0.0"
- checksum: 17f23e98612a60cf23b80dc1d3b7b840879e41fcf603868fc3618a30f061ac7b463ef98cad8c28b68733b9bfe0cc40ffa2bcf29e94cf0d26e4f6addf7ac8527d
+ checksum: 2041beaedc6c271fc3bedd12e0da0cc553e65d030d4ff26044b771fac5752d0460944c0b5e680f670c2868c95c664a256cec960ae528888db6ded83524e33a14
languageName: node
linkType: hard
@@ -8676,9 +8676,9 @@ __metadata:
languageName: node
linkType: hard
-"vite@npm:^5.0.8":
- version: 5.0.8
- resolution: "vite@npm:5.0.8"
+"vite@npm:^5.0.10":
+ version: 5.0.10
+ resolution: "vite@npm:5.0.10"
dependencies:
esbuild: "npm:^0.19.3"
fsevents: "npm:~2.3.3"
@@ -8712,7 +8712,7 @@ __metadata:
optional: true
bin:
vite: bin/vite.js
- checksum: ea36e34fa45401d8e29317c3355f4d7081df09b412578bd7b6a26d44bccace9d130625f7f317a3cbc20ad2aadc5881d01d1508e8d9e36060ae44d974f505dd7e
+ checksum: 5421e9c7f8cf3152eace9a8b528269141635f367e5dc63c5f1fe2712a766d9757f8197733cf3f28be590afdd520130d38de90c955e6dba6edfa6f9056c1e5ea7
languageName: node
linkType: hard