From d9ddf5ad60eb2d4b5fe8d1854df2c55211bc57c8 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Tue, 18 Aug 2026 11:40:32 +0200 Subject: [PATCH] text improvements --- evcharger-app/i18n/qml_da.ts | 159 ++++++++++++------ evcharger-app/i18n/qml_de.ts | 153 ++++++++++++----- evcharger-app/i18n/qml_fi.ts | 159 ++++++++++++------ evcharger-app/i18n/qml_nb.ts | 159 ++++++++++++------ evcharger-app/i18n/qml_sv.ts | 159 ++++++++++++------ evcharger-app/i18n/qml_tr.ts | 159 ++++++++++++------ evcharger-app/qml/ApiStatusRow.qml | 6 +- evcharger-app/qml/AppSettingsPage.qml | 8 + evcharger-app/qml/ConnectionPage.qml | 4 + evcharger-app/qml/ControllerTabPage.qml | 92 +++++++++- evcharger-app/qml/InformationsTabPage.qml | 130 -------------- evcharger-app/qml/LanguageSelector.qml | 7 + evcharger-app/qml/NamePage.qml | 43 +++++ .../qml/SensorsConfigurationPage.qml | 6 +- 14 files changed, 824 insertions(+), 420 deletions(-) diff --git a/evcharger-app/i18n/qml_da.ts b/evcharger-app/i18n/qml_da.ts index 68e84e5..572ee40 100644 --- a/evcharger-app/i18n/qml_da.ts +++ b/evcharger-app/i18n/qml_da.ts @@ -184,29 +184,34 @@ Antal app-forekomster: - + + Swipe left or right with three fingers to switch between app instances. + Stryg til venstre eller højre med tre fingre for at skifte mellem appinstanser. + + + solalaweb key: solalaweb nøgle: - - + + Select... Vælg... - - + + Replace... Erstat... - + solalaweb cert: solalaweb certifikat: - + Show solalaweb: Vis solalaweb: @@ -979,20 +984,40 @@ Sky - + + Remote access, connection status and cloud server settings + Fjernadgang, forbindelsesstatus og indstillinger for cloudserver + + + OCPP OCPP - + + Connect the device to a charging management backend + Forbind enheden til et system til administration af opladning + + + MQTT MQTT - + + Publish status and control the device through an MQTT broker + Publicér status, og styr enheden via en MQTT-broker + + + API Settings API-indstillinger + + + Configure local, cloud, grid and legacy API access + Konfigurer adgang til lokalt API, cloud-API, elnet-API og ældre API + ControllerPage @@ -1005,14 +1030,33 @@ ControllerTabPage - + + Category %1 + Kategori %1 + + + Connected Forbundet - + + %1 W + %1 W + + + + Category powers — last 30 seconds + Kategorieffekter — seneste 30 sekunder + + + + Power (W) + Effekt (W) + + %0W - %0W + %0W @@ -1147,7 +1191,7 @@ Current sensors - + Strømsensorer @@ -2423,57 +2467,56 @@ InformationsTabPage - Category %1 - Kategori %1 + Kategori %1 - + Informations Information - + Idle Inaktiv - + HEADERS_RECEIVED HEADERS_RECEIVED - + LOADING INDLÆSER - + %1 images %1 billeder - + %1 charts %1 diagrammer - + Loaded %1 Indlæst %1 - + No information data received Ingen informationsdata modtaget - + Request started... Forespørgsel startet... - + Download informations Download informationer @@ -2545,6 +2588,11 @@ Numbers, dates, and times continue to use your system settings. Tal, datoer og klokkeslæt fortsætter med at bruge dine systemindstillinger. + + + Tip: Swipe left or right with two fingers anywhere in the app to cycle through languages. + Tip: Stryg til venstre eller højre med to fingre hvor som helst i appen for at skifte sprog. + LedPage @@ -2709,10 +2757,25 @@ NamePage - + Name Navn + + + Change the name used to identify this device in the app and on the network. + Skift det navn, der bruges til at identificere enheden i appen og på netværket. + + + + Reset the name to the device default. + Nulstil navnet til enhedens standardnavn. + + + + Reset name + Nulstil navn + NotificationsPage @@ -3239,7 +3302,7 @@ Energy categories - + Energikategorier @@ -3502,57 +3565,57 @@ Sensors and categories - + Sensorer og kategorier Measurement - + Måling Measurement service enabled - + Måletjeneste aktiveret - Continuous raw measurement can reduce controller performance. - + Temporarily disabling measurements can sometimes help with stability problems. + Midlertidig deaktivering af målingerne kan nogle gange hjælpe ved stabilitetsproblemer. - Measurement update rate - + Refresh rate + Opdateringsfrekvens - + Voltage sensors - + Spændingssensorer - + Live voltages, phase assignment and calibration - + Spændinger i realtid, fasetildeling og kalibrering - + Current sensors - + Strømsensorer - + Live current, power, phase, direction and CT ratio - + Strøm og effekt i realtid, fase, retning og strømtransformatorens omsætningsforhold - + Energy categories - + Energikategorier - + Power, energy counters and sensor factors - + Effekt, energitællere og sensorfaktorer @@ -3805,7 +3868,7 @@ Voltage sensors - + Spændingssensorer diff --git a/evcharger-app/i18n/qml_de.ts b/evcharger-app/i18n/qml_de.ts index 89c3400..290f004 100644 --- a/evcharger-app/i18n/qml_de.ts +++ b/evcharger-app/i18n/qml_de.ts @@ -196,29 +196,34 @@ Anzahl an App Instanzen: - + + Swipe left or right with three fingers to switch between app instances. + Mit drei Fingern nach links oder rechts wischen, um zwischen App-Instanzen zu wechseln. + + + solalaweb key: solalaweb key: - - + + Select... Auswählen... - - + + Replace... Ersetzen... - + solalaweb cert: solalaweb cert: - + Show solalaweb: Zeige solalaweb: @@ -1041,23 +1046,28 @@ Join and manage wireless networks - + WLAN-Netzwerke verbinden und verwalten Configure the device's Wi-Fi access point - + WLAN-Zugangspunkt des Geräts konfigurieren Wired network and IP settings - + Kabelgebundenes Netzwerk und IP-Einstellungen Cellular Mobilfunk + + + Configure local, cloud, grid and legacy API access + Lokalen, Cloud-, Grid- und Legacy-API-Zugriff konfigurieren + Hotspot @@ -1071,10 +1081,15 @@ SIM, APN and mobile network settings - + SIM-, APN- und Mobilfunkeinstellungen - + + Remote access, connection status and cloud server settings + Fernzugriff, Verbindungsstatus und Cloud-Server-Einstellungen + + + OCPP OCPP @@ -1084,12 +1099,22 @@ Cloud - + + Connect the device to a charging management backend + Gerät mit einem Lademanagement-Backend verbinden + + + MQTT MQTT - + + Publish status and control the device through an MQTT broker + Status veröffentlichen und das Gerät über einen MQTT-Broker steuern + + + API Settings API Einstellungen @@ -1109,14 +1134,33 @@ Geräte - + + Category %1 + Kategorie %1 + + + Connected Verbunden - + + %1 W + %1 W + + + + Category powers — last 30 seconds + Kategorieleistungen — letzte 30 Sekunden + + + + Power (W) + Leistung (W) + + %0W - %0W + %0W Category @@ -2602,57 +2646,52 @@ InformationsTabPage - - Category %1 - - - - + Informations Informationen - + Idle Inaktiv - + HEADERS_RECEIVED - + LOADING - + %1 images - + %1 charts - + Loaded %1 - + No information data received - + Request started... - + Download informations Informationen herunterladen @@ -2724,6 +2763,11 @@ Numbers, dates, and times continue to use your system settings. Zahlen, Datumsangaben und Uhrzeiten verwenden weiterhin die Systemeinstellungen. + + + Tip: Swipe left or right with two fingers anywhere in the app to cycle through languages. + Tipp: Mit zwei Fingern an einer beliebigen Stelle in der App nach links oder rechts wischen, um durch die Sprachen zu wechseln. + LedPage @@ -2947,10 +2991,25 @@ NamePage - + Name Name + + + Change the name used to identify this device in the app and on the network. + Den Namen ändern, mit dem dieses Gerät in der App und im Netzwerk identifiziert wird. + + + + Reset the name to the device default. + Den Namen auf den Gerätestandard zurücksetzen. + + + + Reset name + Name zurücksetzen + NavigationPage @@ -3795,42 +3854,50 @@ Messdienst aktiviert - Continuous raw measurement can reduce controller performance. - Die kontinuierliche Rohdatenmessung kann die Controllerleistung verringern. + Die kontinuierliche Rohdatenmessung kann die Controllerleistung verringern. + + + Measurement update rate + Messaktualisierungsrate + + + + Temporarily disabling measurements can sometimes help with stability problems. + Bei Stabilitätsproblemen kann es manchmal helfen, die Messungen vorübergehend zu deaktivieren. - Measurement update rate - Messaktualisierungsrate + Refresh rate + Messrate - + Voltage sensors Spannungssensoren - + Live voltages, phase assignment and calibration Live-Spannungen, Phasenzuordnung und Kalibrierung - + Current sensors Stromsensoren - + Live current, power, phase, direction and CT ratio Live-Strom und -Leistung, Phase, Messrichtung und Stromwandlerverhältnis - + Energy categories Energiekategorien - + Power, energy counters and sensor factors Leistung, Energiezähler und Sensorfaktoren diff --git a/evcharger-app/i18n/qml_fi.ts b/evcharger-app/i18n/qml_fi.ts index a7be92d..96603b3 100644 --- a/evcharger-app/i18n/qml_fi.ts +++ b/evcharger-app/i18n/qml_fi.ts @@ -184,29 +184,34 @@ Sovellusesiintymien määrä: - + + Swipe left or right with three fingers to switch between app instances. + Vaihda sovellusinstanssien välillä pyyhkäisemällä vasemmalle tai oikealle kolmella sormella. + + + solalaweb key: solalaweb avain: - - + + Select... Valitse... - - + + Replace... Korvaa... - + solalaweb cert: solalaweb-sertifikaatti: - + Show solalaweb: Näytä solalaweb: @@ -979,20 +984,40 @@ Pilvi - + + Remote access, connection status and cloud server settings + Etäkäyttö, yhteyden tila ja pilvipalvelimen asetukset + + + OCPP OCPP - + + Connect the device to a charging management backend + Yhdistä laite latauksenhallintajärjestelmään + + + MQTT MQTT - + + Publish status and control the device through an MQTT broker + Julkaise tilatiedot ja ohjaa laitetta MQTT-välittäjän kautta + + + API Settings API-asetukset + + + Configure local, cloud, grid and legacy API access + Määritä paikallisen, pilvi-, sähköverkko- ja vanhan API:n käyttöoikeudet + ControllerPage @@ -1005,14 +1030,33 @@ ControllerTabPage - + + Category %1 + Luokka %1 + + + Connected Yhdistetty - + + %1 W + %1 W + + + + Category powers — last 30 seconds + Luokkien tehot — viimeiset 30 sekuntia + + + + Power (W) + Teho (W) + + %0W - %0W + %0W @@ -1147,7 +1191,7 @@ Current sensors - + Virta-anturit @@ -2423,57 +2467,56 @@ InformationsTabPage - Category %1 - Luokka %1 + Luokka %1 - + Informations Tiedot - + Idle Valmiustilassa - + HEADERS_RECEIVED HEADERS_RECEIVED - + LOADING LADATAAN - + %1 images %1 kuvia - + %1 charts %1-kaaviot - + Loaded %1 Ladattu %1 - + No information data received Tietoa ei ole vastaanotettu - + Request started... Pyyntö alkanut... - + Download informations Lataa tiedot @@ -2545,6 +2588,11 @@ Numbers, dates, and times continue to use your system settings. Numerot, päivämäärät ja kellonajat käyttävät edelleen järjestelmäasetuksiasi. + + + Tip: Swipe left or right with two fingers anywhere in the app to cycle through languages. + Vinkki: Vaihda kieltä pyyhkäisemällä kahdella sormella vasemmalle tai oikealle missä tahansa sovelluksessa. + LedPage @@ -2709,10 +2757,25 @@ NamePage - + Name Nimi + + + Change the name used to identify this device in the app and on the network. + Muuta nimeä, jolla laite tunnistetaan sovelluksessa ja verkossa. + + + + Reset the name to the device default. + Palauta nimi laitteen oletusnimeksi. + + + + Reset name + Palauta nimi + NotificationsPage @@ -3239,7 +3302,7 @@ Energy categories - + Energialuokat @@ -3502,57 +3565,57 @@ Sensors and categories - + Anturit ja luokat Measurement - + Mittaus Measurement service enabled - + Mittauspalvelu käytössä - Continuous raw measurement can reduce controller performance. - + Temporarily disabling measurements can sometimes help with stability problems. + Mittausten poistaminen tilapäisesti käytöstä voi joskus auttaa vakausongelmissa. - Measurement update rate - + Refresh rate + Päivitystaajuus - + Voltage sensors - + Jänniteanturit - + Live voltages, phase assignment and calibration - + Reaaliaikaiset jännitteet, vaiheiden määritys ja kalibrointi - + Current sensors - + Virta-anturit - + Live current, power, phase, direction and CT ratio - + Reaaliaikainen virta ja teho, vaihe, suunta ja virtamuuntajan muuntosuhde - + Energy categories - + Energialuokat - + Power, energy counters and sensor factors - + Teho, energialaskurit ja anturikertoimet @@ -3805,7 +3868,7 @@ Voltage sensors - + Jänniteanturit diff --git a/evcharger-app/i18n/qml_nb.ts b/evcharger-app/i18n/qml_nb.ts index 4486923..c8c9ddc 100644 --- a/evcharger-app/i18n/qml_nb.ts +++ b/evcharger-app/i18n/qml_nb.ts @@ -184,29 +184,34 @@ Antall appforekomster: - + + Swipe left or right with three fingers to switch between app instances. + Sveip mot venstre eller høyre med tre fingre for å bytte mellom appinstanser. + + + solalaweb key: solalaweb nøkkel: - - + + Select... Velg... - - + + Replace... Bytt ut... - + solalaweb cert: solalaweb sertifikat: - + Show solalaweb: Vis solalaweb: @@ -979,20 +984,40 @@ Sky - + + Remote access, connection status and cloud server settings + Fjerntilgang, tilkoblingsstatus og innstillinger for skyserver + + + OCPP OCPP - + + Connect the device to a charging management backend + Koble enheten til et system for ladeadministrasjon + + + MQTT MQTT - + + Publish status and control the device through an MQTT broker + Publiser status og styr enheten via en MQTT-broker + + + API Settings API-innstillinger + + + Configure local, cloud, grid and legacy API access + Konfigurer tilgang til lokalt API, sky-API, strømnett-API og eldre API + ControllerPage @@ -1005,14 +1030,33 @@ ControllerTabPage - + + Category %1 + Kategori %1 + + + Connected Tilkoblet - + + %1 W + %1 W + + + + Category powers — last 30 seconds + Kategorieffekter — siste 30 sekunder + + + + Power (W) + Effekt (W) + + %0W - %0W + %0W @@ -1147,7 +1191,7 @@ Current sensors - + Strømsensorer @@ -2423,57 +2467,56 @@ InformationsTabPage - Category %1 - Kategori %1 + Kategori %1 - + Informations Informasjon - + Idle Inaktiv - + HEADERS_RECEIVED HEADERS_RECEIVED - + LOADING LASTER INN - + %1 images %1 bilder - + %1 charts %1-diagrammer - + Loaded %1 Lastet inn %1 - + No information data received Ingen informasjonsdata mottatt - + Request started... Forespørsel startet... - + Download informations Last ned informasjon @@ -2545,6 +2588,11 @@ Numbers, dates, and times continue to use your system settings. Tall, datoer og klokkeslett fortsetter å bruke systeminnstillingene dine. + + + Tip: Swipe left or right with two fingers anywhere in the app to cycle through languages. + Tips: Sveip mot venstre eller høyre med to fingre hvor som helst i appen for å bytte språk. + LedPage @@ -2709,10 +2757,25 @@ NamePage - + Name Navn + + + Change the name used to identify this device in the app and on the network. + Endre navnet som brukes til å identifisere enheten i appen og på nettverket. + + + + Reset the name to the device default. + Tilbakestill navnet til enhetens standardnavn. + + + + Reset name + Tilbakestill navn + NotificationsPage @@ -3239,7 +3302,7 @@ Energy categories - + Energikategorier @@ -3502,57 +3565,57 @@ Sensors and categories - + Sensorer og kategorier Measurement - + Måling Measurement service enabled - + Måletjeneste aktivert - Continuous raw measurement can reduce controller performance. - + Temporarily disabling measurements can sometimes help with stability problems. + Midlertidig deaktivering av målingene kan noen ganger hjelpe ved stabilitetsproblemer. - Measurement update rate - + Refresh rate + Oppdateringsfrekvens - + Voltage sensors - + Spenningssensorer - + Live voltages, phase assignment and calibration - + Spenninger i sanntid, fasetildeling og kalibrering - + Current sensors - + Strømsensorer - + Live current, power, phase, direction and CT ratio - + Strøm og effekt i sanntid, fase, retning og strømtransformatorens omsetningsforhold - + Energy categories - + Energikategorier - + Power, energy counters and sensor factors - + Effekt, energimålere og sensorfaktorer @@ -3805,7 +3868,7 @@ Voltage sensors - + Spenningssensorer diff --git a/evcharger-app/i18n/qml_sv.ts b/evcharger-app/i18n/qml_sv.ts index c8546d7..83c9274 100644 --- a/evcharger-app/i18n/qml_sv.ts +++ b/evcharger-app/i18n/qml_sv.ts @@ -184,29 +184,34 @@ Antal appinstanser: - + + Swipe left or right with three fingers to switch between app instances. + Svep åt vänster eller höger med tre fingrar för att växla mellan appinstanser. + + + solalaweb key: solalaweb nyckel: - - + + Select... Välj... - - + + Replace... Ersätt... - + solalaweb cert: solalaweb certifikat: - + Show solalaweb: Visa solalaweb: @@ -979,20 +984,40 @@ Moln - + + Remote access, connection status and cloud server settings + Fjärråtkomst, anslutningsstatus och inställningar för molnserver + + + OCPP OCPP - + + Connect the device to a charging management backend + Anslut enheten till ett system för laddhantering + + + MQTT MQTT - + + Publish status and control the device through an MQTT broker + Publicera status och styr enheten via en MQTT-broker + + + API Settings API-inställningar + + + Configure local, cloud, grid and legacy API access + Konfigurera åtkomst till lokalt API, moln-API, elnäts-API och äldre API + ControllerPage @@ -1005,14 +1030,33 @@ ControllerTabPage - + + Category %1 + Kategori %1 + + + Connected Ansluten - + + %1 W + %1 W + + + + Category powers — last 30 seconds + Kategorieffekter — senaste 30 sekunderna + + + + Power (W) + Effekt (W) + + %0W - %0W + %0W @@ -1147,7 +1191,7 @@ Current sensors - + Strömsensorer @@ -2423,57 +2467,56 @@ InformationsTabPage - Category %1 - Kategori %1 + Kategori %1 - + Informations Information - + Idle Inaktiv - + HEADERS_RECEIVED HEADERS_RECEIVED - + LOADING LÄSER IN - + %1 images %1 bilder - + %1 charts %1-diagram - + Loaded %1 Laddade %1 - + No information data received Ingen information mottagen - + Request started... Begäran startade... - + Download informations Ladda ner information @@ -2545,6 +2588,11 @@ Numbers, dates, and times continue to use your system settings. Siffror, datum och tider fortsätter att använda dina systeminställningar. + + + Tip: Swipe left or right with two fingers anywhere in the app to cycle through languages. + Tips: Svep åt vänster eller höger med två fingrar var som helst i appen för att växla mellan språken. + LedPage @@ -2709,10 +2757,25 @@ NamePage - + Name Namn + + + Change the name used to identify this device in the app and on the network. + Ändra namnet som används för att identifiera enheten i appen och nätverket. + + + + Reset the name to the device default. + Återställ namnet till enhetens standardnamn. + + + + Reset name + Återställ namn + NotificationsPage @@ -3239,7 +3302,7 @@ Energy categories - + Energikategorier @@ -3502,57 +3565,57 @@ Sensors and categories - + Sensorer och kategorier Measurement - + Mätning Measurement service enabled - + Mättjänst aktiverad - Continuous raw measurement can reduce controller performance. - + Temporarily disabling measurements can sometimes help with stability problems. + Att tillfälligt inaktivera mätningarna kan ibland hjälpa vid stabilitetsproblem. - Measurement update rate - + Refresh rate + Uppdateringsfrekvens - + Voltage sensors - + Spänningssensorer - + Live voltages, phase assignment and calibration - + Spänningar i realtid, fastilldelning och kalibrering - + Current sensors - + Strömsensorer - + Live current, power, phase, direction and CT ratio - + Ström och effekt i realtid, fas, riktning och strömtransformatorns omsättningsförhållande - + Energy categories - + Energikategorier - + Power, energy counters and sensor factors - + Effekt, energiräknare och sensorfaktorer @@ -3805,7 +3868,7 @@ Voltage sensors - + Spänningssensorer diff --git a/evcharger-app/i18n/qml_tr.ts b/evcharger-app/i18n/qml_tr.ts index 2624beb..def3155 100644 --- a/evcharger-app/i18n/qml_tr.ts +++ b/evcharger-app/i18n/qml_tr.ts @@ -184,29 +184,34 @@ Uygulama örneklerinin sayısı: - + + Swipe left or right with three fingers to switch between app instances. + Uygulama örnekleri arasında geçiş yapmak için üç parmağınızla sola veya sağa kaydırın. + + + solalaweb key: solalaweb anahtarı: - - + + Select... Seç... - - + + Replace... Değiştir... - + solalaweb cert: solalaweb sertifikası: - + Show solalaweb: Solalaweb'i göster: @@ -979,20 +984,40 @@ Bulut - + + Remote access, connection status and cloud server settings + Uzaktan erişim, bağlantı durumu ve bulut sunucusu ayarları + + + OCPP OCPP - + + Connect the device to a charging management backend + Cihazı bir şarj yönetim sistemine bağlayın + + + MQTT MQTT - + + Publish status and control the device through an MQTT broker + Durumu yayınlayın ve cihazı bir MQTT aracısı üzerinden kontrol edin + + + API Settings API Ayarları + + + Configure local, cloud, grid and legacy API access + Yerel, bulut, şebeke ve eski API erişimini yapılandırın + ControllerPage @@ -1005,14 +1030,33 @@ ControllerTabPage - + + Category %1 + Kategori %1 + + + Connected Bağlı - + + %1 W + %1 W + + + + Category powers — last 30 seconds + Kategori güçleri — son 30 saniye + + + + Power (W) + Güç (W) + + %0W - %0W + %0W @@ -1147,7 +1191,7 @@ Current sensors - + Akım sensörleri @@ -2423,57 +2467,56 @@ InformationsTabPage - Category %1 - Kategori %1 + Kategori %1 - + Informations Bilgiler - + Idle Boşta - + HEADERS_RECEIVED HEADERS_RECEIVED - + LOADING YÜKLENİYOR - + %1 images %1 görselleri - + %1 charts %1 çizelgeleri - + Loaded %1 %1 yüklendi - + No information data received Hiçbir bilgi verisi alınmadı - + Request started... Talep başlatıldı... - + Download informations Bilgileri indir @@ -2545,6 +2588,11 @@ Numbers, dates, and times continue to use your system settings. Sayılar, tarihler ve saatler sistem ayarlarınızı kullanmaya devam eder. + + + Tip: Swipe left or right with two fingers anywhere in the app to cycle through languages. + İpucu: Diller arasında geçiş yapmak için uygulamanın herhangi bir yerinde iki parmağınızla sola veya sağa kaydırın. + LedPage @@ -2709,10 +2757,25 @@ NamePage - + Name İsim + + + Change the name used to identify this device in the app and on the network. + Cihazı uygulamada ve ağda tanımlamak için kullanılan adı değiştirin. + + + + Reset the name to the device default. + Adı cihazın varsayılan adına sıfırlayın. + + + + Reset name + Adı sıfırla + NotificationsPage @@ -3239,7 +3302,7 @@ Energy categories - + Enerji kategorileri @@ -3502,57 +3565,57 @@ Sensors and categories - + Sensörler ve kategoriler Measurement - + Ölçüm Measurement service enabled - + Ölçüm hizmeti etkin - Continuous raw measurement can reduce controller performance. - + Temporarily disabling measurements can sometimes help with stability problems. + Ölçümleri geçici olarak devre dışı bırakmak bazen kararlılık sorunlarına yardımcı olabilir. - Measurement update rate - + Refresh rate + Yenileme hızı - + Voltage sensors - + Gerilim sensörleri - + Live voltages, phase assignment and calibration - + Anlık gerilimler, faz ataması ve kalibrasyon - + Current sensors - + Akım sensörleri - + Live current, power, phase, direction and CT ratio - + Anlık akım ve güç, faz, yön ve akım trafosu oranı - + Energy categories - + Enerji kategorileri - + Power, energy counters and sensor factors - + Güç, enerji sayaçları ve sensör faktörleri @@ -3805,7 +3868,7 @@ Voltage sensors - + Gerilim sensörleri diff --git a/evcharger-app/qml/ApiStatusRow.qml b/evcharger-app/qml/ApiStatusRow.qml index 6da79dd..dafe41b 100644 --- a/evcharger-app/qml/ApiStatusRow.qml +++ b/evcharger-app/qml/ApiStatusRow.qml @@ -9,6 +9,8 @@ RowLayout { required property string apiKey required property string label property var valueFormatter: null + property real labelMaximumWidth: 125 + property real labelWidthRatio: 0.42 property alias value: apiValue.value property alias exists: apiValue.exists @@ -29,8 +31,8 @@ RowLayout { } SettingsLabel { - Layout.preferredWidth: Math.min(125, row.width * 0.42) - Layout.maximumWidth: Math.min(125, row.width * 0.42) + Layout.preferredWidth: Math.min(row.labelMaximumWidth, row.width * row.labelWidthRatio) + Layout.maximumWidth: Math.min(row.labelMaximumWidth, row.width * row.labelWidthRatio) text: row.label } diff --git a/evcharger-app/qml/AppSettingsPage.qml b/evcharger-app/qml/AppSettingsPage.qml index 510385f..9ebc3ff 100644 --- a/evcharger-app/qml/AppSettingsPage.qml +++ b/evcharger-app/qml/AppSettingsPage.qml @@ -36,6 +36,14 @@ NavigationPage { onValueModified: theSettings.numberOfAppInstances = value from: 1 } + + Text { + Layout.columnSpan: 2 + Layout.fillWidth: true + text: qsTr("Swipe left or right with three fingers to switch between app instances.") + color: "gray" + wrapMode: Text.Wrap + } } } diff --git a/evcharger-app/qml/ConnectionPage.qml b/evcharger-app/qml/ConnectionPage.qml index 604b4c0..d62c92f 100644 --- a/evcharger-app/qml/ConnectionPage.qml +++ b/evcharger-app/qml/ConnectionPage.qml @@ -53,6 +53,7 @@ NavigationPage { NavigationItem { iconName: "cloud" title: qsTr("Cloud") + description: qsTr("Remote access, connection status and cloud server settings") component: Component { CloudPage { } @@ -63,6 +64,7 @@ NavigationPage { NavigationItem { iconName: "account_tree" title: qsTr("OCPP") + description: qsTr("Connect the device to a charging management backend") component: Component { OcppPage { } @@ -73,6 +75,7 @@ NavigationPage { NavigationItem { iconName: "device_hub" title: qsTr("MQTT") + description: qsTr("Publish status and control the device through an MQTT broker") component: Component { MqttPage { } @@ -83,6 +86,7 @@ NavigationPage { NavigationItem { iconName: "api" title: qsTr("API Settings") + description: qsTr("Configure local, cloud, grid and legacy API access") component: Component { ApiSettingsPage { } diff --git a/evcharger-app/qml/ControllerTabPage.qml b/evcharger-app/qml/ControllerTabPage.qml index 0df6505..8dcdcee 100644 --- a/evcharger-app/qml/ControllerTabPage.qml +++ b/evcharger-app/qml/ControllerTabPage.qml @@ -1,6 +1,7 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts +import QtCharts import EVChargerApp AnimatedStackView { @@ -25,9 +26,61 @@ AnimatedStackView { } ScrollableTabPage { + id: controllerPage + Layout.fillWidth: true Layout.fillHeight: true + function categoryName(index) { + const names = categoryNames.value + return names && names.length > index && names[index] + ? names[index] : qsTr("Category %1").arg(index + 1) + } + + function appendValue(series, value, now) { + if (value !== null && value !== undefined && isFinite(Number(value))) + series.append(now, Number(value)) + + const cutoff = now.getTime() - 30000 + let removeCount = 0 + while (removeCount < series.count && series.at(removeCount).x < cutoff) + ++removeCount + if (removeCount > 0) + series.removePoints(0, removeCount) + series.visible = series.count > 0 + } + + function appendCategoryValues(values) { + if (!values || values.length === undefined) + return + + const now = new Date() + const series = [category0, category1, category2, category3, category4, category5] + for (let i = 0; i < series.length; ++i) + appendValue(series[i], i < values.length ? values[i] : null, now) + + categoryAxisX.min = new Date(now.getTime() - 30000) + categoryAxisX.max = now + + let minY = Number.POSITIVE_INFINITY + let maxY = Number.NEGATIVE_INFINITY + for (let i = 0; i < series.length; ++i) { + for (let j = 0; j < series[i].count; ++j) { + const y = series[i].at(j).y + if (y < minY) minY = y + if (y > maxY) maxY = y + } + } + + if (!isFinite(minY)) { + minY = 0 + maxY = 1 + } + const padding = Math.max(0.5, (maxY - minY) * 0.1) + categoryAxisY.min = minY - padding + categoryAxisY.max = maxY + padding + } + RowLayout { Layout.fillWidth: true @@ -75,14 +128,19 @@ AnimatedStackView { id: categoryPowers deviceConnection: theDeviceConnection apiKey: "ccp" + onValueChanged: Qt.callLater(function() { + controllerPage.appendCategoryValues(categoryPowers.value) + }) } Repeater { model: categoryNames.value Pane { - property var power: categoryPowers.value[index] - visible: power !== null + property var power: categoryPowers.value + && categoryPowers.value.length > index + ? categoryPowers.value[index] : null + visible: power !== null && power !== undefined Layout.fillWidth: true Layout.preferredWidth: gridLayout.width / 3 @@ -104,7 +162,8 @@ AnimatedStackView { Text { Layout.fillWidth: true - text: power !== null ? qsTr("%0W").arg(power) : "" + text: power !== null && power !== undefined + ? qsTr("%1 W").arg(Qt.locale().toString(Number(power), "f", 2)) : "" } } } @@ -112,6 +171,33 @@ AnimatedStackView { } } + ChartView { + visible: categoryPowers.exists + title: qsTr("Category powers — last 30 seconds") + Layout.fillWidth: true + Layout.preferredHeight: 300 + antialiasing: true + + DateTimeAxis { + id: categoryAxisX + format: "hh:mm:ss" + tickCount: 5 + } + + ValueAxis { + id: categoryAxisY + titleText: qsTr("Power (W)") + tickCount: 6 + } + + LineSeries { id: category0; name: controllerPage.categoryName(0); axisX: categoryAxisX; axisY: categoryAxisY; visible: false } + LineSeries { id: category1; name: controllerPage.categoryName(1); axisX: categoryAxisX; axisY: categoryAxisY; visible: false } + LineSeries { id: category2; name: controllerPage.categoryName(2); axisX: categoryAxisX; axisY: categoryAxisY; visible: false } + LineSeries { id: category3; name: controllerPage.categoryName(3); axisX: categoryAxisX; axisY: categoryAxisY; visible: false } + LineSeries { id: category4; name: controllerPage.categoryName(4); axisX: categoryAxisX; axisY: categoryAxisY; visible: false } + LineSeries { id: category5; name: controllerPage.categoryName(5); axisX: categoryAxisX; axisY: categoryAxisY; visible: false } + } + Text { Layout.fillWidth: true diff --git a/evcharger-app/qml/InformationsTabPage.qml b/evcharger-app/qml/InformationsTabPage.qml index bcbf2aa..ae45fdb 100644 --- a/evcharger-app/qml/InformationsTabPage.qml +++ b/evcharger-app/qml/InformationsTabPage.qml @@ -1,7 +1,6 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts -import QtCharts import EVChargerApp ScrollableTabPage { @@ -9,12 +8,6 @@ ScrollableTabPage { property real chartCurrentTime: 0 - function categoryName(index) { - const names = categoryNames.value - return names && names.length > index && names[index] - ? names[index] : qsTr("Category %1").arg(index + 1) - } - function extractChartPanels(chartData) { const result = [] if (!chartData || !chartData.panels || typeof chartData.panels !== "object") @@ -37,129 +30,6 @@ ScrollableTabPage { text: qsTr("Informations") } - ChartView { - visible: categoryPowers.exists - - ApiKeyValueHelper { - id: categoryNames - deviceConnection: theDeviceConnection - apiKey: "ccn" - } - - ApiKeyValueHelper { - id: categoryPowers - deviceConnection: theDeviceConnection - apiKey: "ccp" - onValueChanged: { - if (!value || value.length === undefined) - return - - const t = new Date(); - - const doit = function(category, value) { - category.append(t, value) - if (value) - category.visible = true - }; - - doit(category0, value.length > 0 ? value[0] : 0) - doit(category1, value.length > 1 ? value[1] : 0) - doit(category2, value.length > 2 ? value[2] : 0) - doit(category3, value.length > 3 ? value[3] : 0) - doit(category4, value.length > 4 ? value[4] : 0) - - // --- X axis range (last 30 seconds) --- - const now = new Date() // current time as Date - axisX.min = new Date(now.getTime() - 30*1000) // 30 sec ago - axisX.max = now - - // --- Y axis auto-range --- - let minY = Number.POSITIVE_INFINITY - let maxY = Number.NEGATIVE_INFINITY - - for (let s of [category0, category1, category2, category3, category4]) { - if (!s.visible) - continue - const c = s.count - if (c === 0) continue - - for (let i = 0; i < c; ++i) { - const y = s.at(i).y - if (y < minY) minY = y - if (y > maxY) maxY = y - } - } - - // fallback if no data - if (!isFinite(minY)) { - minY = 0 - maxY = 1 - } - - // add 10% padding - const d = Math.max(0.5, (maxY - minY) * 0.1) - axisY.min = minY - d - axisY.max = maxY + d - } - } - - title: "Category Powers 30sec" - Layout.fillWidth: true - Layout.preferredHeight: 300 - antialiasing: true - - DateTimeAxis { - id: axisX - format: "hh:mm:ss" - tickCount: 5 - } - - ValueAxis { - id: axisY - tickCount: 6 - } - - LineSeries { - id: category0 - name: page.categoryName(0) - axisX: axisX - axisY: axisY - visible: false - } - - LineSeries { - id: category1 - name: page.categoryName(1) - axisX: axisX - axisY: axisY - visible: false - } - - LineSeries { - id: category2 - name: page.categoryName(2) - axisX: axisX - axisY: axisY - visible: false - } - - LineSeries { - id: category3 - name: page.categoryName(3) - axisX: axisX - axisY: axisY - visible: false - } - - LineSeries { - id: category4 - name: page.categoryName(4) - axisX: axisX - axisY: axisY - visible: false - } - } - Text { id: statusText text: qsTr("Idle") diff --git a/evcharger-app/qml/LanguageSelector.qml b/evcharger-app/qml/LanguageSelector.qml index dfb936e..8faab1c 100644 --- a/evcharger-app/qml/LanguageSelector.qml +++ b/evcharger-app/qml/LanguageSelector.qml @@ -130,4 +130,11 @@ SettingsCard { color: App.AppTheme.sectionLabelColor wrapMode: Text.Wrap } + + Text { + Layout.fillWidth: true + text: qsTr("Tip: Swipe left or right with two fingers anywhere in the app to cycle through languages.") + color: App.AppTheme.sectionLabelColor + wrapMode: Text.Wrap + } } diff --git a/evcharger-app/qml/NamePage.qml b/evcharger-app/qml/NamePage.qml index 2b31546..5dc9cf0 100644 --- a/evcharger-app/qml/NamePage.qml +++ b/evcharger-app/qml/NamePage.qml @@ -5,7 +5,15 @@ import QtQuick.Layouts NavigationPage { title: qsTr("Name") + Text { + Layout.fillWidth: true + text: qsTr("Change the name used to identify this device in the app and on the network.") + color: "gray" + wrapMode: Text.Wrap + } + EditValueItem { + id: nameEditor text: qsTr("Name") apiKey: "fna" fullWidth: true @@ -14,4 +22,39 @@ NavigationPage { property alias value: textField.text } } + + SettingsCard { + visible: nameEditor.exists + + SetValueHelper { + id: nameResetter + deviceConnection: theDeviceConnection + apiKey: "fna" + } + + Text { + Layout.fillWidth: true + text: qsTr("Reset the name to the device default.") + color: "gray" + wrapMode: Text.Wrap + } + + RowLayout { + Layout.fillWidth: true + + Button { + text: qsTr("Reset name") + enabled: !nameResetter.pending + onClicked: nameResetter.setValue(null) + } + + BusyIndicator { + visible: nameResetter.pending + } + + RequestStatusText { + request: nameResetter + } + } + } } diff --git a/evcharger-app/qml/SensorsConfigurationPage.qml b/evcharger-app/qml/SensorsConfigurationPage.qml index 34a6938..9948275 100644 --- a/evcharger-app/qml/SensorsConfigurationPage.qml +++ b/evcharger-app/qml/SensorsConfigurationPage.qml @@ -51,7 +51,7 @@ NavigationPage { Text { Layout.fillWidth: true visible: measurementService.exists - text: qsTr("Continuous raw measurement can reduce controller performance.") + text: qsTr("Temporarily disabling measurements can sometimes help with stability problems.") color: "gray" wrapMode: Text.Wrap } @@ -62,7 +62,9 @@ NavigationPage { ApiStatusRow { id: updateRate apiKey: "mur" - label: qsTr("Measurement update rate") + label: qsTr("Refresh rate") + labelMaximumWidth: 90 + labelWidthRatio: 0.32 } }