diff --git a/include/WebApi_network.h b/include/WebApi_network.h
index 179fa4920..bd720c74e 100644
--- a/include/WebApi_network.h
+++ b/include/WebApi_network.h
@@ -6,10 +6,14 @@
class WebApiNetworkClass {
public:
+ WebApiNetworkClass();
void init(AsyncWebServer& server, Scheduler& scheduler);
private:
void onNetworkStatus(AsyncWebServerRequest* request);
void onNetworkAdminGet(AsyncWebServerRequest* request);
void onNetworkAdminPost(AsyncWebServerRequest* request);
+
+ Task _applyDataTask;
+ void applyDataTaskCb();
};
diff --git a/lang/el.lang.json b/lang/el.lang.json
new file mode 100644
index 000000000..5c5ef7cc9
--- /dev/null
+++ b/lang/el.lang.json
@@ -0,0 +1,701 @@
+{
+ "meta": {
+ "name": "Ελληνικά",
+ "code": "el"
+ },
+ "display": {
+ "date_format": "%d/%m/%Y %H:%M",
+ "offline": "εκτός σύνδεση",
+ "power_w": "%.0f W",
+ "power_kw": "%.1f kW",
+ "yield_today_wh": "Hoy: %4.0f Wh",
+ "yield_today_kwh": "Hoy: %.1f kWh",
+ "yield_total_kwh": "Total: %.1f kWh",
+ "yield_total_mwh": "Total: %.0f kWh"
+ },
+ "webapp": {
+ "menu": {
+ "LiveView": "Προβολή Τηλεμετρίας",
+ "Settings": "Ρυθμίσεις",
+ "NetworkSettings": "Ρυθμίσεις Δικτύου",
+ "NTPSettings": "NTP Ρυθμίσεις",
+ "MQTTSettings": "MQTT Ρυθμίσεις",
+ "InverterSettings": "Ρυθμίσεις Μετατροπέα",
+ "SecuritySettings": "Ρυθμίσεις Ασφάλειας",
+ "DTUSettings": "DTU Ρυθμίσεις",
+ "DeviceManager": "Διαχείριση Συσκευών",
+ "ConfigManagement": "Διαχείριση διαμόρφωσης",
+ "FirmwareUpgrade": "Αναβάθμιση υλικολογισμικού",
+ "DeviceReboot": "Επανεκκίνηση συσκευής",
+ "Info": "Πληροφορίες",
+ "System": "Σύστημα",
+ "Network": "Δίκτυο",
+ "NTP": "NTP",
+ "MQTT": "MQTT",
+ "Console": "Κονσόλα",
+ "About": "Σχετικά με",
+ "Logout": "Αποσύνδεση",
+ "Login": "Σύνδεση"
+ },
+ "base": {
+ "Loading": "Φόρτωση...",
+ "Reload": "Επαναφόρτωση",
+ "Cancel": "Ματαίωση",
+ "Save": "Σώζω",
+ "Refreshing": "Ανανέωση",
+ "Pull": "Τραβήξτε προς τα κάτω για ανανέωση",
+ "Release": "Ανακοινώνω",
+ "Close": "Κλείνω",
+ "Yes": "Yes",
+ "No": "No"
+ },
+ "wait": {
+ "NotReady": "Το OpenDTU δεν είναι έτοιμο ακόμα",
+ "PleaseWait": "Παρακαλώ περιμένετε. Θα ανακατευθυνθείτε αυτόματα στην αρχική σελίδα."
+ },
+ "Error": {
+ "Oops": "Όπα!!!"
+ },
+ "localeswitcher": {
+ "Dark": "Σκούρο",
+ "Light": "Φωτεινό",
+ "Auto": "Αυτόματο"
+ },
+ "apiresponse": {
+ "1001": "Οι ρυθμίσεις αποθηκεύτηκαν!",
+ "1002": "Δεν βρέθηκαν τιμές!",
+ "1003": "Τα δεδομένα είναι πολύ μεγάλα!",
+ "1004": "Η ανάλυση των δεδομένων απέτυχε!",
+ "1005": "Λείπουν οι αξίες!",
+ "1006": "Αποτυχία εγγραφής!",
+ "2001": "Ο σειριακός αριθμός δεν μπορεί να είναι μηδέν!",
+ "2002": "Ο Χρόνος δειγματοληψίας πρέπει να είναι μεγαλύτερος από μηδέν!",
+ "2003": "Μη έγκυρη ρύθμιση επιπέδου ισχύος!",
+ "2004": "Η συχνότητα πρέπει να οριστεί μεταξύ {min} και {max} kHz και πρέπει να είναι πολλαπλάσιο των 250 kHz!",
+ "2005": "Μη έγκυρη επιλογή χώρας!",
+ "3001": "Τίποτα δεν καταργήθηκε",
+ "3002": "Επαναφορά διαμόρφωσης και Επανεκκίνηση...",
+ "3003": "Το αρχείο διαγράφηκε με επιτυχία. Κάντε επανεκκίνηση για να εφαρμόσετε της αλλαγές!",
+ "4001": "@:apiresponse.2001",
+ "4002": "Το όνομα πρέπει να αποτελείται από 1 έως {max} χαρακτήρες!",
+ "4003": "Υποστηρίζονται μόνο {max} μετατροπείς!",
+ "4004": "Ο μετατροπέας δημιουργήθηκε!",
+ "4005": "Καθορίστηκε μη έγκυρο αναγνωριστικό! ID",
+ "4006": "Δόθηκε μη έγκυρος αριθμός, μέγιστης ρύθμισης καναλιού!",
+ "4007": "Ο μετατροπέας άλλαξε!",
+ "4008": "Ο μετατροπέας διαγράφηκε!",
+ "4009": "Η παραγγελία μετατροπέα αποθηκεύτηκε!",
+ "5001": "@:apiresponse.2001",
+ "5002": "Το όριο πρέπει να είναι μεταξύ 1 και {max}!",
+ "5003": "Καθορίστηκε μη έγκυρος τύπος!",
+ "5004": "Καθορίστηκε μη έγκυρος μετατροπέας!",
+ "6001": "Ενεργοποιήθηκε η επανεκκίνηση!",
+ "6002": "Η επανεκκίνηση ακυρώθηκε!",
+ "7001": "Ο διακομιστής MQTT πρέπει να αποτελείται από 1 έως {max} χαρακτήρες!",
+ "7002": "Το όνομα χρήστη δεν πρέπει να υπερβαίνει τους {max} χαρακτήρες!",
+ "7003": "Ο κωδικός πρόσβασης δεν πρέπει να υπερβαίνει τους {max} χαρακτήρες!",
+ "7004": "Το θέμα δεν πρέπει να υπερβαίνει τους {max} χαρακτήρες!",
+ "7005": "Το θέμα δεν πρέπει να περιέχει χαρακτήρες διαστήματος!",
+ "7006": "Το θέμα πρέπει να τελειώνει με κάθετο (/)!",
+ "7007": "Η θύρα πρέπει να είναι ένας αριθμός μεταξύ 1 και 65535!",
+ "7008": "Το πιστοποιητικό δεν πρέπει να υπερβαίνει τους {max} χαρακτήρες!",
+ "7009": "Το θέμα LWT δεν πρέπει να υπερβαίνει τους {max} χαρακτήρες!",
+ "7010": "Το θέμα LWT δεν πρέπει να περιέχει χαρακτήρες διαστήματος!",
+ "7011": "Η online τιμή LWT δεν πρέπει να υπερβαίνει τους {max} χαρακτήρες!",
+ "7012": "Η τιμή εκτός σύνδεσης LWT δεν πρέπει να υπερβαίνει τους {max} χαρακτήρες!",
+ "7013": "Το διάστημα δημοσίευσης πρέπει να είναι ένας αριθμός μεταξύ {min} και {max}!",
+ "7014": "Το θέμα Hass δεν πρέπει να υπερβαίνει τους {max} χαρακτήρες!",
+ "7015": "Το θέμα Hass δεν πρέπει να περιέχει χαρακτήρες διαστήματος!",
+ "7016": "Το LWT QOS δεν πρέπει να είναι μεγαλύτερο από το {max}!",
+ "7017": "Το αναγνωριστικό πελάτη δεν πρέπει να υπερβαίνει τους {max} χαρακτήρες!",
+ "8001": "Η διεύθυνση IP δεν είναι έγκυρη!",
+ "8002": "Η μάσκα δικτύου δεν είναι έγκυρη!",
+ "8003": "Η πύλη δεν είναι έγκυρη!",
+ "8004": "Η πρώτη IP του διακομιστή DNS δεν είναι έγκυρη!",
+ "8005": "Η δεύτερη IP του διακομιστή DNS δεν είναι έγκυρη!",
+ "8006": "Η τιμή λήξης χρονικού ορίου πρόσβασης διαχείρισης δεν είναι έγκυρη",
+ "9001": "Ο διακομιστής NTP πρέπει να αποτελείται από 1 έως {max} χαρακτήρες!",
+ "9002": "Η ζώνη ώρας πρέπει να αποτελείται από 1 έως {max} χαρακτήρες!",
+ "9003": "Η περιγραφή της ζώνης ώρας πρέπει να αποτελείται από 1 έως {max} χαρακτήρες!",
+ "9004": "Το έτος πρέπει να είναι ένας αριθμός μεταξύ {min} και {max}!",
+ "9005": "Ο μήνας πρέπει να είναι ένας αριθμός μεταξύ {min} και {max}!",
+ "9006": "Η ημέρα πρέπει να είναι ένας αριθμός μεταξύ {min} και {max}!",
+ "9007": "Η ώρα πρέπει να είναι ένας αριθμός μεταξύ {min} και {max}!",
+ "9008": "Το λεπτό πρέπει να είναι ένας αριθμός μεταξύ {min} και {max}!",
+ "9009": "Το δεύτερο πρέπει να είναι ένας αριθμός μεταξύ {min} και {max}!",
+ "9010": "Ενημερώθηκε η ώρα!",
+ "10001": "Ο κωδικός πρόσβασης πρέπει να αποτελείται από 8 έως {max} χαρακτήρες!",
+ "10002": "Επιτυχής έλεγχος ταυτότητας!",
+ "11001": "¡@:apiresponse.2001",
+ "11002": "¡@:apiresponse:5004",
+ "12001": "Το προφίλ πρέπει να αποτελείται από 1 έως {max} χαρακτήρες!"
+ },
+ "home": {
+ "LiveData": "Τηλεμετρία",
+ "SerialNumber": "Σειριακός Αριθμός: ",
+ "CurrentLimit": "Τρέχον Όριο: ",
+ "DataAge": "Τελευταία ενημέρωση πρίν από: ",
+ "Seconds": "{val} δευτερόλεπτα",
+ "ShowSetInverterLimit": "Εμφάνιση/Ρύθμιση ορίου μετατροπέα",
+ "TurnOnOff": "Ενεργοποίηση/απενεργοποίηση του μετατροπέα",
+ "ShowInverterInfo": "Εμφάνιση πληροφοριών του μετατροπέα",
+ "ShowEventlog": "Εμφάνιση αρχείου καταγραφής συμβάντων",
+ "UnreadMessages": "Μη αναγνωσμένα μηνύματα",
+ "Loading": "@:base.Φόρτωση",
+ "EventLog": "Μητρώο συμβάντων",
+ "InverterInfo": "Πληροφορίες μετατροπέα",
+ "LimitSettings": "Ρυθμίσεις ορίων",
+ "LastLimitSetStatus": "Κατάσταση τελευταίας ρύθμισης ορίου:",
+ "SetLimit": "Ορίστε το όριο:",
+ "Relative": "Σχετικό (%)",
+ "Absolute": "Απόλυτο (W)",
+ "LimitHint": "Συμβουλή: Εάν ορίσετε το όριο ως απόλυτη τιμή, η εμφάνιση της τρέχουσας τιμής θα ενημερωθεί μόνο μετά από ~4 λεπτά.",
+ "SetPersistent": "Ορίστε μόνιμο το όριο",
+ "SetNonPersistent": "Ορίστε μη μόνιμο το όριο",
+ "PowerSettings": "Ρυθμίσεις ενέργειας",
+ "LastPowerSetStatus": "Κατάσταση τελευταίας ρύθμισης ισχύος:",
+ "TurnOn": "Ενεργοποίηση",
+ "TurnOff": "Απενεργοποίηση",
+ "Restart": "Επανεκκίνηση",
+ "Failure": "Αποτυχία",
+ "Pending": "Σε εκκρεμότητα",
+ "Ok": "Ολα καλά",
+ "Unknown": "Άγνωστο",
+ "ShowGridProfile": "Εμφάνιση Προφίλ Πλέγματος",
+ "GridProfile": "Perfil de la Red",
+ "LoadingInverter": "Αναμονή για δεδομένα... (μπορεί να διαρκέσει έως και 10 δευτερόλεπτα)",
+ "RadioStats": "Στατιστικά Ραδιοφώνου",
+ "TxRequest": "Συνολικά αιτήματα TX",
+ "RxSuccess": "Επιτυχία RX",
+ "RxFailNothing": "Αποτυχημένα RX: Δεν λαμβάνετε τίποτα",
+ "RxFailPartial": "Αποτυχημένα RX: Μερική λήψη",
+ "RxFailCorrupt": "Αποτυχημένα RX: Λήψη κατεστραμμένου",
+ "TxReRequest": "TX Επαναίτηση Fragment",
+ "StatsReset": "Επαναφορά Στατιστικών",
+ "StatsResetting": "Επαναφορά...",
+ "Rssi": "RSSI του τελευταίου ληφθέντος πακέτου",
+ "RssiHint": "Οι μετατροπείς HM υποστηρίζουν μόνο τιμές RSSI < -64 dBm και > -64 dBm. Σε αυτήν την περίπτωση, εμφανίζονται -80 dbm και -30 dbm.",
+ "dBm": "{dbm} dBm"
+ },
+ "eventlog": {
+ "Start": "Εκκίνηση",
+ "Stop": "Παύση",
+ "Id": "ID",
+ "Message": "Μήνυμα"
+ },
+ "devinfo": {
+ "NoInfo": "Δεν υπάρχουν διαθέσιμες πληροφορίες",
+ "NoInfoLong": "Μέχρι στιγμής δεν έλαβε έγκυρα δεδομένα από τον μετατροπέα. Ακόμα προσπαθεί...",
+ "UnknownModel": "Άγνωστο μοντέλο! Αναφέρετε τον \"Αριθμό εξαρτήματος υλικού\" και το μοντέλο (π.χ. HM-350) ως πρόβλημα aquí.",
+ "Serial": "Σειριακός αριθμός",
+ "ProdYear": "Έτος Παραγωγής",
+ "ProdWeek": "Εβδομάδα Παραγωγής",
+ "Model": "Μοντέλο",
+ "DetectedMaxPower": "Ανιχνεύθηκε μέγ. Ισχύς",
+ "BootloaderVersion": "Έκδοση πρόγραμματος εκκίνησης",
+ "FirmwareVersion": "Έκδοση υλικολογισμικού",
+ "FirmwareBuildDate": "Ημερομηνία δημιουργίας υλικολογισμικού",
+ "HardwarePartNumber": "Αριθμός εξαρτήματος υλικού",
+ "HardwareVersion": "Έκδοση υλικού",
+ "SupportsPowerDistributionLogic": "'Power Distribution Logic' supported",
+ "Yes": "@:base.Yes",
+ "No": "@:base.No"
+ },
+ "gridprofile": {
+ "NoInfo": "@:devinfo.NoInfo",
+ "NoInfoLong": "@:devinfo.NoInfoLong",
+ "Name": "Ονομα",
+ "Version": "Έκδοση",
+ "Enabled": "@:wifistationinfo.Enabled",
+ "Disabled": "@:wifistationinfo.Disabled",
+ "GridprofileSupport": "Υποστηρίξτε την ανάπτυξη",
+ "GridprofileSupportLong": "Παρακαλώ δείτε εδώ για περισσότερες πληροφορίες."
+ },
+ "systeminfo": {
+ "SystemInfo": "Πληροφορίες συστήματος",
+ "VersionError": "Σφάλμα κατά την ανάκτηση πληροφοριών έκδοσης",
+ "VersionNew": "Νέα έκδοση διαθέσιμη! Εμφάνιση αλλαγών!",
+ "VersionOk": "Ενημερώθηκε!"
+ },
+ "firmwareinfo": {
+ "FirmwareInformation": "Πληροφορίες υλικολογισμικού",
+ "Hostname": "Όνομα κεντρικού υπολογιστή",
+ "SdkVersion": "Έκδοση SDK",
+ "ConfigVersion": "Έκδοση διαμόρφωσης",
+ "FirmwareVersion": "Έκδοση υλικολογισμικού / Git Hash",
+ "PioEnv": "Περιβάλλον PIO",
+ "FirmwareVersionHint": "Κάντε κλικ εδώ για να εμφανίσετε πληροφορίες σχετικά με την τρέχουσα έκδοση",
+ "FirmwareUpdate": "Ενημέρωση υλικολογισμικού",
+ "FirmwareUpdateHint": "Κάντε κλικ εδώ για να δείτε τις αλλαγές μεταξύ της έκδοσης σας και της πιο πρόσφατης έκδοσης",
+ "FrmwareUpdateAllow": "Ενεργοποιώντας τον έλεγχο ενημέρωσης, αποστέλλεται ένα αίτημα στο GitHub.com κάθε φορά που καλείται η σελίδα για την ανάκτηση της τρέχουσας διαθέσιμης έκδοσης. Εάν δεν συμφωνείτε με αυτό, αφήστε αυτή τη λειτουργία απενεργοποιημένη.",
+ "ResetReason0": "Επαναφορά CPU 0",
+ "ResetReason1": "Επαναφορά CPU 1",
+ "ConfigSaveCount": "Config save count",
+ "Uptime": "Χρόνος λειτουργίας",
+ "UptimeValue": "Σήμερα {time} | 1 ημέρα {time} | {count} ημέρες {time}"
+ },
+ "hardwareinfo": {
+ "HardwareInformation": "Πληροφορίες για το Υλικό",
+ "ChipModel": "Μοντέλο Ολοκληρωμένου",
+ "ChipRevision": "Αναθεώρηση Ολοκληρωμένου",
+ "ChipCores": "Πυρήνες Ολοκληρωμένου",
+ "CpuFrequency": "Συχνότητα επεξεργαστή",
+ "Mhz": "MHz",
+ "CpuTemperature": "Θερμοκρασία επεξεργαστή",
+ "FlashSize": "Μέγεθος μνήμης Flash"
+ },
+ "memoryinfo": {
+ "MemoryInformation": "Πληροφορίες Μνήμης",
+ "Type": "Τύπος",
+ "Usage": "Χρήση",
+ "Free": "Ελεύθερη",
+ "Used": "Χρησιμοποιείται",
+ "Size": "Μέγεθος",
+ "Heap": "Δυναμική μνήμη",
+ "PsRam": "PSRAM",
+ "LittleFs": "LittleFs",
+ "Sketch": "Σκίτσο"
+ },
+ "heapdetails": {
+ "HeapDetails": "Λεπτομέρειες Δυναμική μνήμης",
+ "TotalFree": "Συνολικά ελεύθερη",
+ "LargestFreeBlock": "Το μεγαλύτερο συνεχόμενο ελεύθερο μπλοκ",
+ "MaxUsage": "Μέγιστη χρήση από το ξεκίνημα",
+ "Fragmentation": "Βαθμός κατακερματισμού"
+ },
+ "taskdetails": {
+ "TaskDetails": "Λεπτομέρειες εργασίας",
+ "Name": "Ονομα",
+ "StackFree": "Stack Free",
+ "Priority": "Προτεραιότητα",
+ "Task_idle0": "Αδράνεια (CPU Core 0)",
+ "Task_idle1": "Αδράνεια (CPU Core 1)",
+ "Task_wifi": "Wi-Fi",
+ "Task_tit": "TCP/IP",
+ "Task_looptask": "Κύριος βρόχος Arduino",
+ "Task_asynctcp": "Ασυγχρονισμός TCP",
+ "Task_mqttclient": "Πελάτης MQTT",
+ "Task_huaweican0": "Φορτιστής AC CAN",
+ "Task_pmsdm": "Μετρητής ενέργειας (SDM)",
+ "Task_pmhttpjson": "Μετρητής ενέργειας (HTTP+JSON)",
+ "Task_pmsml": "Μετρητής ενέργειας (Serial SML)",
+ "Task_pmhttpsml": "Μετρητής ενέργειας (HTTP+SML)"
+ },
+ "radioinfo": {
+ "RadioInformation": "Πληροφορίες Ραδιοφώνου",
+ "Status": "Κατάσταση {module}",
+ "ChipStatus": "Κατάσταση Ολοκληρωμένου {module}",
+ "ChipType": "Τύπος Ολοκληρωμένου {module}",
+ "Connected": "Συνδεδεμένο",
+ "NotConnected": "Δεν συνδέεται",
+ "Configured": "Διαμορφώθηκε",
+ "NotConfigured": "δεν έχει διαμορφωθεί",
+ "Unknown": "Άγνωστο"
+ },
+ "networkinfo": {
+ "NetworkInformation": "Πληροφορίες για το δίκτυο"
+ },
+ "wifistationinfo": {
+ "WifiStationInfo": "Πληροφορίες Wi-Fi (Πελάτης)",
+ "Status": "Κατάσταση",
+ "Enabled": "Ενεργοποιήθηκε",
+ "Disabled": "Απενεργοποίηθηκε",
+ "Ssid": "SSID",
+ "Bssid": "BSSID",
+ "Quality": "Ποιότητα",
+ "Rssi": "RSSI"
+ },
+ "wifiapinfo": {
+ "WifiApInfo": "Πληροφορίες Wi-Fi (Σημείο πρόσβασης)",
+ "Status": "@:wifistationinfo.Status",
+ "Enabled": "@:wifistationinfo.Enabled",
+ "Disabled": "@:wifistationinfo.Disabled",
+ "Ssid": "@:wifistationinfo.Ssid",
+ "Stations": "# Σταθμοί"
+ },
+ "interfacenetworkinfo": {
+ "NetworkInterface": "Διασύνδεση δικτύου ({iface})",
+ "Hostname": "@:firmwareinfo.Hostname",
+ "IpAddress": "Διεύθυνση IP",
+ "Netmask": "Μάσκα δικτύου",
+ "DefaultGateway": "Προεπιλεγμένη θύρα",
+ "Dns": "DNS {num}",
+ "MacAddress": "Διεύθυνση MAC"
+ },
+ "interfaceapinfo": {
+ "NetworkInterface": "Διεπαφή δικτύου (Σημείο πρόσβασης)",
+ "IpAddress": "@:interfacenetworkinfo.IpAddress",
+ "MacAddress": "@:interfacenetworkinfo.MacAddress"
+ },
+ "ntpinfo": {
+ "NtpInformation": "Πληροφορίες NTP",
+ "ConfigurationSummary": "Περίληψη Διαμόρφωσης",
+ "Server": "Διακομιστής",
+ "Timezone": "Ζώνη ώρας",
+ "TimezoneDescription": "Περιγραφή ζώνης ώρας",
+ "CurrentTime": "Τρέχουσα ώρα",
+ "Status": "Κατάσταση",
+ "Synced": "συγχρονισμένη",
+ "NotSynced": "ασυγχρόνιστη",
+ "LocalTime": "Τοπική ώρα",
+ "Sunrise": "Ανατολή ηλίου",
+ "Sunset": "Δύση ηλίου",
+ "NotAvailable": "Δεν είναι διαθέσιμο",
+ "Mode": "Περίοδος λειτουργίας",
+ "Day": "Ημέρα",
+ "Night": "Νύχτα"
+ },
+ "mqttinfo": {
+ "MqttInformation": "Πληροφορίες MQTT",
+ "ConfigurationSummary": "@:ntpinfo.ConfigurationSummary",
+ "Status": "@:ntpinfo.Status",
+ "Enabled": "Ενεργοποιήθηκε",
+ "Disabled": "Απενεργοποιημένος",
+ "Server": "@:ntpinfo.Server",
+ "Port": "Θύρα",
+ "ClientId": "Αναγνωριστικό πελάτη ID",
+ "Username": "Όνομα χρήστη",
+ "BaseTopic": "Βασικό Θέμα",
+ "PublishInterval": "Χρονικό διάστημα δημοσίευσης",
+ "Seconds": "{sec} δευτερόλεπτα",
+ "CleanSession": "Σημαία CleanSession",
+ "Retain": "Διατηρώ",
+ "Tls": "TLS",
+ "RootCertifcateInfo": "Πληροφορίες πιστοποιητικού CA ρίζας",
+ "TlsCertLogin": "Συνδεθείτε με πιστοποιητικό TLS",
+ "ClientCertifcateInfo": "Πληροφορίες πιστοποιητικού πελάτη",
+ "HassSummary": "Σύνοψη διαμόρφωσης Home Assistant MQTT Αυτόματη Ανακάλυψη",
+ "Expire": "Λήξη",
+ "IndividualPanels": "Ατομικά πάνελ",
+ "RuntimeSummary": "Σύνοψη χρόνου εκτέλεσης",
+ "ConnectionStatus": "Estado de Conexión",
+ "Connected": "συνδεδεμένο",
+ "Disconnected": "αποσυνδεδεμένο"
+ },
+ "console": {
+ "Console": "Κονσόλα",
+ "VirtualDebugConsole": "Εικονική κονσόλα εντοπισμού σφαλμάτων",
+ "EnableAutoScroll": "Ενεργοποίηση αυτόματης κύλισης",
+ "ClearConsole": "Εκκαθάριση κονσόλας",
+ "CopyToClipboard": "Αντιγραφή στο πρόχειρο"
+ },
+ "inverterchannelinfo": {
+ "String": "Είσοδος {num}",
+ "Phase": "Παροχή {num}",
+ "General": "Γενικά"
+ },
+ "invertertotalinfo": {
+ "TotalYieldTotal": "Συνολική Απόδοση",
+ "TotalYieldDay": "Συνολική Απόδοση Ημέρας",
+ "TotalPower": "Τρέχον ισχύς"
+ },
+ "inverterchannelproperty": {
+ "Power": "Ισχύς",
+ "Voltage": "Τάση",
+ "Current": "Ένταση",
+ "Power DC": "Ισχύ DC",
+ "YieldDay": "Ημέρησια απόδοση",
+ "YieldTotal": "Σύνολο απόδοσης",
+ "Frequency": "Συχνότητα",
+ "Temperature": "Θερμοκρασία",
+ "PowerFactor": "Συντελεστής ισχύος",
+ "ReactivePower": "Αέργου Ισχύς",
+ "Efficiency": "Αποδοτικότητα",
+ "Irradiation": "Ακτινοβόληση"
+ },
+ "maintenancereboot": {
+ "DeviceReboot": "Επανεκκίνηση συσκευής",
+ "PerformReboot": "Εκτελέστε επανεκκίνηση",
+ "Reboot": "Επανεκκίνηση!",
+ "Cancel": "@:base.Cancel",
+ "RebootOpenDTU": "Επανεκκινήστε το OpenDTU",
+ "RebootQuestion": "Θέλετε πραγματικά να κάνετε επανεκκίνηση της συσκευής;",
+ "RebootHint": "Σημείωση: Δεν χρειάζεται κανονικά να εκτελείται χειροκίνητη επανεκκίνηση. Το OpenDTU εκτελεί αυτόματα οποιαδήποτε απαιτούμενη επανεκκίνηση (π.χ. μετά από ενημέρωση υλικολογισμικού). Οι ρυθμίσεις υιοθετούνται επίσης χωρίς επανεκκίνηση. Εάν χρειάζεται να κάνετε επανεκκίνηση λόγω σφάλματος, εξετάστε το ενδεχόμενο να το αναφέρετε στη διεύθυνση https://github.com/tbnobody/OpenDTU/issues."
+ },
+ "dtuadmin": {
+ "DtuSettings": "Ρυθμίσεις DTU",
+ "DtuConfiguration": "Διαμόρφωση DTU",
+ "Serial": "Σειριακός αριθμός",
+ "SerialHint": "Τόσο ο μετατροπέας όσο και η DTU έχουν σειριακό αριθμό. Ο σειριακός αριθμός DTU δημιουργείται τυχαία κατά την πρώτη εκκίνηση και κανονικά δεν χρειάζεται να αλλάξει.",
+ "PollInterval": "Χρόνος δειγματοληψίας",
+ "Seconds": "Δευτερόλεπτα",
+ "NrfPaLevel": "NRF24 Ισχύς μετάδοσης",
+ "CmtPaLevel": "CMT2300A Ισχύς μετάδοσης",
+ "NrfPaLevelHint": "Χρησιμοποιείται για HM-Inverters. Βεβαιωθείτε ότι το τροφοδοτικό σας είναι αρκετά σταθερό πριν αυξήσετε την ισχύ εκπομπής.",
+ "CmtPaLevelHint": "Χρησιμοποιείται για μετατροπείς HMS/HMT. Βεβαιωθείτε ότι το τροφοδοτικό σας είναι αρκετά σταθερό πριν αυξήσετε την ισχύ εκπομπής.",
+ "CmtCountry": "CMT2300A Περιοχή/Χώρα",
+ "CmtCountryHint": "Κάθε χώρα έχει διαφορετική κατανομή συχνοτήτων.",
+ "country_0": "Ευρώπη ({min}MHz - {max}MHz)",
+ "country_1": "Βόρεια Αμερική ({min}MHz - {max}MHz)",
+ "country_2": "Βραζιλία ({min}MHz - {max}MHz)",
+ "CmtFrequency": "Συχνότητα CMT2300A",
+ "CmtFrequencyHint": "Βεβαιωθείτε ότι χρησιμοποιείτε μόνο συχνότητες που επιτρέπονται στην αντίστοιχη χώρα! Μετά από μια αλλαγή συχνότητας, μπορεί να χρειαστούν έως και 15 λεπτά μέχρι να δημιουργηθεί μια σύνδεση.",
+ "CmtFrequencyWarning": "Η επιλεγμένη συχνότητα είναι εκτός του επιτρεπόμενου εύρους στην επιλεγμένη περιοχή/χώρα. Βεβαιωθείτε ότι αυτή η επιλογή δεν παραβιάζει τοπικούς κανονισμούς.",
+ "MHz": "{mhz} MHz",
+ "dBm": "{dbm} dBm",
+ "Min": "Ελάχιστο όριο ({db} dBm)",
+ "Low": "Ελάχιστο ({db} dBm)",
+ "High": "Υψηλό ({db} dBm)",
+ "Max": "Μέγιστο όριο ({db} dBm)"
+ },
+ "securityadmin": {
+ "SecuritySettings": "Ρυθμίσεις ασφαλείας",
+ "AdminPassword": "Κωδικός πρόσβασης διαχειριστή",
+ "Password": "Κωδικός πρόσβασης",
+ "RepeatPassword": "Επαναλάβετε τον κωδικό πρόσβασης",
+ "PasswordHint": "Συμβουλή: Ο κωδικός πρόσβασης διαχειριστή χρησιμοποιείται για πρόσβαση σε αυτήν τη διεπαφή ιστού (χρήστης 'διαχειριστής'), αλλά και για σύνδεση με τη συσκευή όταν βρίσκεται σε λειτουργία AP. Πρέπει να είναι 8..64 χαρακτήρες.",
+ "Permissions": "Δικαιώματα",
+ "ReadOnly": "Να επιτρέπεται η πρόσβαση μόνο για ανάγνωση στη διεπαφή ιστού χωρίς κωδικό πρόσβασης"
+ },
+ "ntpadmin": {
+ "NtpSettings": "Ρυθμίσεις NTP",
+ "NtpConfiguration": "Διαμόρφωση NTP",
+ "TimeServer": "Διακομιστής",
+ "TimeServerHint": "Ο προεπιλεγμένος Διακομιστής είναι εντάξει εφόσον το OpenDTU έχει άμεση πρόσβαση στο διαδίκτυο.",
+ "Timezone": "Ζώνη ώρας",
+ "TimezoneConfig": "Διαμόρφωση ζώνης ώρας",
+ "LocationConfiguration": "Διαμόρφωση τοποθεσίας",
+ "Longitude": "Γεωγραφικό μήκος",
+ "Latitude": "Γεωγραφικό πλάτος",
+ "SunSetType": "Κατηγορία λυκαυγούς.",
+ "SunSetTypeHint": "Επηρεάζει τον υπολογισμό ημέρας/νύχτας. Μπορεί να χρειαστεί έως και ένα λεπτό μέχρι να εφαρμοστεί ο νέος τύπος.",
+ "OFFICIAL": "Τυπικό λυκαυγές (90,8°)",
+ "NAUTICAL": "Ναυτικό λυκαυγές (102°)",
+ "CIVIL": "Πολιτικό λυκαυγές (96°)",
+ "ASTONOMICAL": "Αστρονομικό λυκαυγές (108°)",
+ "ManualTimeSynchronization": "Χειροκίνητος συγχρονισμός χρόνου",
+ "CurrentOpenDtuTime": "Τρέχουσα ώρα OpenDTU",
+ "CurrentLocalTime": "Τρέχουσα τοπική ώρα",
+ "SynchronizeTime": "Συγχρονισμός ώρας",
+ "SynchronizeTimeHint": "Συμβουλή: Μπορείτε να χρησιμοποιήσετε τον μη αυτόματο συγχρονισμό ώρας για να ορίσετε την τρέχουσα ώρα του OpenDTU εάν δεν υπάρχει διαθέσιμος διακομιστής NTP. Αλλά να γνωρίζετε ότι σε περίπτωση κύκλου ισχύος ο χρόνος χάνεται. Σημειώστε επίσης ότι η ακρίβεια της ώρας θα παραμορφωθεί πολύ, καθώς δεν μπορεί να επανασυγχρονιστεί τακτικά και ο μικροελεγκτής ESP32 δεν διαθέτει ρολόι πραγματικού χρόνου."
+ },
+ "networkadmin": {
+ "NetworkSettings": "Ρυθμίσεις δικτύου",
+ "WifiConfiguration": "Διαμόρφωση Wi-Fi",
+ "WifiSsid": "SSID για Wi-Fi",
+ "WifiPassword": "Κωδικός πρόσβασης Wi-Fi",
+ "Hostname": "Όνομα κεντρικού υπολογιστή",
+ "HostnameHint": "Συμβουλή: Το κείμενο %06X θα αντικατασταθεί με τα τελευταία 6 ψηφία του Ολοκληρωμένου ESP σε δεκαεξαδική μορφή.",
+ "EnableDhcp": "Ενεργοποίηση DHCP",
+ "StaticIpConfiguration": "Στατική Διαμόρφωση IP",
+ "IpAddress": "Διεύθυνση IP",
+ "Netmask": "Μάσκα δικτύου",
+ "DefaultGateway": "Προεπιλεγμένη πύλη",
+ "Dns": "Διακομιστής DNS {num}",
+ "AdminAp": "Διαμόρφωση Wi-Fi (Σημείο Πρόσβασης Διαχειριστή)",
+ "ApTimeout": "Χρονικό όριο σημείου πρόσβασης",
+ "ApTimeoutHint": "Χρόνος που το σημείου πρόσβασης παραμένει ανοιχτό. Η τιμή του 0 σημαίνει άπειρο.",
+ "Minutes": "λεπτά",
+ "EnableMdns": "Ενεργοποίηση mDNS",
+ "MdnsSettings": "Ρυθμίσεις mDNS"
+ },
+ "mqttadmin": {
+ "MqttSettings": "Ρυθμίσεις MQTT",
+ "MqttConfiguration": "Ρύθμιση παραμέτρων MQTT",
+ "EnableMqtt": "Ενεργοποίηση MQTT",
+ "EnableHass": "Ενεργοποίηση για αυτόματη ανακάλυψη στο Home Assistant",
+ "MqttBrokerParameter": "Παράμετρος μεσολαβητή MQTT",
+ "Hostname": "Όνομα κεντρικού υπολογιστή",
+ "HostnameHint": "Όνομα κεντρικού υπολογιστή ή διεύθυνση IP",
+ "Port": "θύρα",
+ "ClientId": "Αναγνωριστικό πελάτη",
+ "Username": "Όνομα χρήστη",
+ "UsernameHint": "Όνομα χρήστη, αφήστε κενό για ανώνυμη σύνδεση",
+ "Password": "Κωδικός πρόσβασης",
+ "PasswordHint": "Κωδικός πρόσβασης, αφήστε κενό για ανώνυμη σύνδεση",
+ "BaseTopic": "Βασικό Θέμα",
+ "BaseTopicHint": "Το βασικό θέμα, θα προσαρτηθεί σε όλα τα δημοσιευμένα θέματα (π.χ. μετατροπέας/)",
+ "PublishInterval": "Χρονικό διάστημα δημοσίευσης",
+ "Seconds": "Δευτερόλεπτα",
+ "CleanSession": "Ενεργοποίηση επισήμανσης CleanSession",
+ "EnableRetain": "Ενεργοποίηση διατήρησης σημαίας",
+ "EnableTls": "Ενεργοποίηση TLS",
+ "RootCa": "Πιστοποιητικό ρίζας CA (προεπιλογή Letsencrypt)",
+ "TlsCertLoginEnable": "Ενεργοποίηση σύνδεσης πιστοποιητικού TLS",
+ "ClientCert": "Πιστοποιητικό πελάτη TLS",
+ "ClientKey": "Κλειδί πελάτη TLS",
+ "LwtParameters": "Παράμετροι LWT",
+ "LwtTopic": "Θέμα για LWT",
+ "LwtTopicHint": "Για θέμα LWT, θα προσαρτηθεί το βασικό θέμα",
+ "LwtOnline": "Ηλεκτρονικό μήνυμα LWT στο διαδίκτυο",
+ "LwtOnlineHint": "Μήνυμα που θα δημοσιευτεί στο θέμα LWT όταν είναι συνδεδεμένο",
+ "LwtOffline": "Μήνυμα LWT εκτός σύνδεσης",
+ "LwtOfflineHint": "Μήνυμα που πρέπει να αναρτηθεί στο θέμα LWT όταν είστε εκτός σύνδεσης",
+ "LwtQos": "(Ποιότητα υπηρεσίας) QoS",
+ "QOS0": "0 (Το πολύ μια φορά)",
+ "QOS1": "1 (Τουλάχιστον μια φορά)",
+ "QOS2": "2 (Ακριβώς μια φορά)",
+ "HassParameters": "Παράμετροι αυτόματης ανακάλυψης MQTT για Home Assistant",
+ "HassPrefixTopic": "Θέμα προθέματος",
+ "HassPrefixTopicHint": "Το πρόθεμα για το θέμα της ανακάλυψης",
+ "HassRetain": "Ενεργοποίηση διατήρησης σημαίας",
+ "HassExpire": "Ενεργοποιήστε τη Λήξη",
+ "HassIndividual": "Επιμέρους Πίνακες"
+ },
+ "inverteradmin": {
+ "InverterSettings": "Ρυθμίσεις μετατροπέα",
+ "AddInverter": "Προσθέστε έναν νέο μετατροπέα",
+ "Serial": "Σειριακός αριθμός",
+ "Name": "Ονομα",
+ "Add": "Προσθήκη",
+ "AddHint": "Συμβουλή: Μπορείτε να ορίσετε πρόσθετες παραμέτρους αφού δημιουργήσετε τον μετατροπέα. Χρησιμοποιήστε το εικονίδιο στυλό στη λίστα μετατροπέων.",
+ "InverterList": "Λίστα Μετατροπέων",
+ "Status": "Κατάσταση",
+ "Send": "Αποστολή",
+ "Receive": "Λαμβάνω",
+ "StatusHint": "Συμβουλή: Ο μετατροπέας τροφοδοτείται από την είσοδο DC. Εάν δεν υπάρχει ήλιος, ο μετατροπέας είναι απενεργοποιημένος. Τα αιτήματα μπορούν ακόμα να σταλούν.",
+ "Type": "Τύπος",
+ "Action": "Δράση",
+ "SaveOrder": "Αποθήκευση εντολής",
+ "DeleteInverter": "Διαγραφή μετατροπέα",
+ "EditInverter": "Ρυθμίσεις μετατροπέα",
+ "General": "Γενικά",
+ "String": "Είσοδοι φωτοβολταϊκών πλαισίων",
+ "Advanced": "Για προχωρημένους",
+ "InverterSerial": "Σειριακός αριθμός μετατροπέα:",
+ "InverterName": "Όνομα μετατροπέα:",
+ "InverterNameHint": "Εδώ μπορείτε να καθορίσετε ένα προσαρμοσμένο όνομα για τον μετατροπέα σας.",
+ "InverterStatus": "Λήψη / Αποστολή",
+ "PollEnable": "Δεδομένα μετατροπέα δημοσκόπησης",
+ "PollEnableNight": "Δεδομένα μετατροπέα δημοσκόπησης τη νύχτα",
+ "CommandEnable": "Αποστολή εντολών",
+ "CommandEnableNight": "Αποστολή εντολών τη νύχτα",
+ "StringName": "Όνομα θέσης εισόδου {num}:",
+ "StringNameHint": "Εδώ μπορείτε να καθορίσετε ένα προσαρμοσμένο όνομα για την αντίστοιχη θύρα του μετατροπέα σας.",
+ "StringMaxPower": "Τιμή μέγιστης ισχύος {num}:",
+ "StringMaxPowerHint": "Εισαγάγετε τη μέγιστη ισχύ των συνδεδεμένων ηλιακών συλλεκτών.",
+ "StringYtOffset": "Μετατόπιση συνολικής απόδοσης {num}:",
+ "StringYtOffsetHint": "Esta compensación se aplica al valor total de rendimiento leído del inversor. Esto se puede usar para ajustar el rendimiento total del inversor a cero si se utiliza un inversor usado. Pero aún puede intentar sondear datos.",
+ "InverterHint": "*) Εισαγάγετε το Wp του καναλιού για να υπολογίσετε την ακτινοβολία.",
+ "ReachableThreshold": "Όριο προσβασιμότητας",
+ "ReachableThresholdHint": " alcanzable.",
+ "ZeroRuntime": "Δεδομένα μηδενικού χρόνου",
+ "ZeroRuntimeHint": "Καθορίζει πόσα αιτήματα επιτρέπεται να αποτύχουν έως ότου ο μετατροπέας δεν είναι προσβάσιμος.",
+ "ZeroDay": "Μηδενική ημερήσια απόδοση τα μεσάνυχτα",
+ "ZeroDayHint": "Αυτό λειτουργεί μόνο εάν ο μετατροπέας δεν είναι προσβάσιμος. Εάν τα δεδομένα διαβάζονται από τον μετατροπέα, θα χρησιμοποιηθούν οι τιμές τους. (Η επαναφορά πραγματοποιείται μόνο στον κύκλο ισχύος)",
+ "ClearEventlog": "Καθαρίστε το Μητρώο συμβάντων τα μεσάνυχτα",
+ "Cancel": "@:base.Cancel",
+ "Save": "@:base.Save",
+ "DeleteMsg": "Είστε βέβαιοι ότι θέλετε να διαγράψετε τον μετατροπέα \"{name}\" με σειριακό αριθμό {serial}?",
+ "Delete": "Διαγράφω",
+ "YieldDayCorrection": "Ημερήσια διόρθωση απόδοσης",
+ "YieldDayCorrectionHint": "Προσθέστε ημερήσια απόδοση ακόμα κι αν επανεκκινηθεί ο μετατροπέας. Η τιμή θα επαναφερθεί τα μεσάνυχτα"
+ },
+ "fileadmin": {
+ "ConfigManagement": "Διαχείριση διαμόρφωσης",
+ "BackupHeader": "Δημιουργία αντιγράφων ασφαλείας: Δημιουργία αντιγράφων ασφαλείας αρχείου διαμόρφωσης",
+ "Restore": "Επαναφέρω",
+ "NoFileSelected": "Δεν έχει επιλεγεί αρχείο",
+ "RestoreHeader": "Επαναφορά αρχείον διαμόρφωσης",
+ "Back": "Πίσω",
+ "UploadSuccess": "Επιτυχής Φόρτωση",
+ "RestoreHint": "Σημείωση: Αυτή η λειτουργία αντικαθιστά το αρχείο διαμόρφωσης με την επαναφερόμενη διαμόρφωση και επανεκκινεί το OpenDTU για να εφαρμόσει όλες τις διαμορφώσεις.",
+ "ResetHeader": "Εκκίνηση: Εκτελέστε επαναφορά εργοστασιακών ρυθμίσεων",
+ "FactoryResetButton": "Επαναφορά εργοστασιακών προεπιλεγμένων ρυθμίσεων",
+ "ResetHint": "Σημείωση: Κάντε κλικ στην Επαναφορά εργοστασιακών προεπιλογών για επαναφορά και προετοιμασία των προεπιλεγμένων εργοστασιακών ρυθμίσεων και επανεκκίνηση.",
+ "FactoryReset": "Επαναφορά εργοστασιακών ρυθμίσεων",
+ "ResetMsg": "Είστε βέβαιοι ότι θέλετε να διαγράψετε τις τρέχουσες ρυθμίσεις και να επαναφέρετε όλες τις ρυθμίσεις στις εργοστασιακές προεπιλογές;",
+ "ResetConfirm": "Επαναφορά εργοστασιακών ρυθμίσεων",
+ "Download": "Λήψη",
+ "Delete": "Διαγράφη",
+ "DeleteMsg": "Είστε βέβαιοι ότι θέλετε να διαγράψετε το αρχείο: '{name}'; Πρέπει να κάνετε χειροκίνητη επανεκκίνηση της συσκευής για να εφαρμόσετε αλλαγές στις ρυθμίσεις παραμέτρων!",
+ "Name": "Ονομα",
+ "Size": "Μέγεθος",
+ "Action": "Ενέργεια",
+ "Cancel": "@:base.Cancel",
+ "InvalidJson": "Το αρχείο JSON δεν έχει μορφοποιηθεί σωστά.",
+ "InvalidJsonContent": "Το αρχείο JSON έχει λάθος περιεχόμενο."
+ },
+ "login": {
+ "Login": "Σύνδεση",
+ "SystemLogin": "Είσοδος συστήματος",
+ "Username": "Όνομα χρήστη",
+ "UsernameRequired": "Απαιτείται όνομα χρήστη",
+ "Password": "Κωδικός πρόσβασης",
+ "PasswordRequired": "Απαιτείται κωδικός πρόσβασης",
+ "LoginButton": "Είσοδος"
+ },
+ "firmwareupgrade": {
+ "FirmwareUpgrade": "Αναβάθμιση υλικολογισμικού",
+ "Loading": "@:base.Loading",
+ "OtaError": "Σφάλμα OTA",
+ "Back": "Πίσω",
+ "Retry": "Επανάληψη",
+ "OtaStatus": "Κατάσταση ΟΤΑ",
+ "OtaSuccess": "Η μεταφόρτωση υλικολογισμικού ήταν επιτυχής. Η συσκευή επανεκκινήθηκε αυτόματα. Όταν η συσκευή είναι ξανά προσβάσιμη, η διεπαφή επαναφορτώνεται αυτόματα.",
+ "FirmwareUpload": "Μεταφόρτωση υλικολογισμικού",
+ "UploadProgress": "Πρόοδος μεταφόρτωσης"
+ },
+ "about": {
+ "AboutOpendtu": "Σχετικά με το OpenDTU",
+ "Documentation": "Τεκμηρίωση",
+ "DocumentationBody": "Μπορείτε να βρείτε την τεκμηρίωση του υλικολογισμικού και του υλικού εδώ: https://www.opendtu.solar",
+ "ProjectOrigin": "Η προέλευση του Έργου",
+ "ProjectOriginBody1": "Αυτό το έργο ξεκίνησε απ' αυτήν τη συζήτηση. (Mikrocontroller.net)",
+ "ProjectOriginBody2": "Το πρωτόκολλο Hoymiles αποκρυπτογραφήθηκε μέσα από τις εθελοντικές προσπάθειες πολλών συμμετεχόντων. Το OpenDTU, μεταξύ άλλων, αναπτύχθηκε με βάση αυτό το έργο. Το έργο είναι υπό άδεια ανοιχτού κώδικα (GNU General Public License έκδοση 2 ).",
+ "ProjectOriginBody3": "Το λογισμικό αναπτύχθηκε σύμφωνα με τις γνώσεις και τις πεποιθήσεις μας. Ωστόσο, δεν φέρουμε καμία ευθύνη για δυσλειτουργία ή απώλεια της εγγύησης του μετατροπέα.",
+ "ProjectOriginBody4": "Το OpenDTU διατίθεται δωρεάν. Εάν πληρώσατε χρήματα για το λογισμικό, πιθανότατα σας απάτησαν.",
+ "NewsUpdates": "Νέα και ενημερώσεις",
+ "NewsUpdatesBody": "Μπορείτε να βρείτε νέες ενημερώσεις στο Github: https://github.com/tbnobody/OpenDTU",
+ "ErrorReporting": "Αναφορά σφαλμάτων",
+ "ErrorReportingBody": "Αναφέρετε προβλήματα χρησιμοποιώντας τη δυνατότητα που παρέχεται από το Github",
+ "Discussion": "Συζήτηση",
+ "DiscussionBody": "Συζητήστε μαζί μας στο Discord ή στο Github"
+ },
+ "hints": {
+ "RadioProblem": "Δεν ήταν δυνατή η σύνδεση σε μια διαμορφωμένη μονάδα ραδιοφώνου. Επαληθεύστε τη σύνδεση.",
+ "TimeSync": "Το ρολόι δεν έχει συγχρονιστεί ακόμα. Χωρίς σωστά ρυθμισμένο ρολόι, δεν υποβάλλονται αιτήματα στον επενδυτή. Αυτό είναι φυσιολογικό λίγο μετά την έναρξη. Ωστόσο, μετά από μεγαλύτερο χρόνο εκτέλεσης (>1 λεπτό), υποδεικνύει ότι ο διακομιστής NTP δεν είναι προσβάσιμος.",
+ "TimeSyncLink": "Ελέγξτε τις ρυθμίσεις ώρας.",
+ "DefaultPassword": "Χρησιμοποιείτε τον προεπιλεγμένο κωδικό πρόσβασης για τη διεπαφή ιστού και το σημείο πρόσβασης έκτακτης ανάγκης. Αυτό είναι δυνητικά μη ασφαλές.",
+ "DefaultPasswordLink": "Αλλάξτε τον κωδικό πρόσβασης.",
+ "PinMappingIssue": "You are using a generic firmware image, but have not yet uploaded a file with device profiles (pin_mapping.json
) or have not selected a profile defined there. Please refer to the documentation for details."
+ },
+ "deviceadmin": {
+ "DeviceManager": "Διαχείριση Συσκευών",
+ "ParseError": "Σφάλμα ανάλυσης στο 'pin_mapping.json': {error}",
+ "PinAssignment": "Ρυθμίσεις σύνδεσης",
+ "SelectedProfile": "Επιλεγμένο προφίλ",
+ "DefaultProfile": "(Προεπιλεγμένες ρυθμίσεις)",
+ "ProfileHint": "Η συσκευή σας μπορεί να σταματήσει να ανταποκρίνεται εάν επιλέξετε ένα μη συμβατό προφίλ. Σε αυτήν την περίπτωση, πρέπει να εκτελέσετε μια διαγραφή μέσω της σειριακής διεπαφής.",
+ "Display": "Οθόνη",
+ "PowerSafe": "Ενεργοποίηση Εξοικονόμησης Ενέργειας",
+ "PowerSafeHint": "Απενεργοποιήστε την οθόνη αν δεν παράγεται ενέργεια απο των μετατροπέα.",
+ "Screensaver": "Ενεργοποίηση προφύλαξης οθόνης",
+ "ScreensaverHint": "Μετακινήστε λίγο την οθόνη με κάθε ενημέρωση για να αποφύγετε το κάψιμο της οθόνης. (Ιδιαίτερα χρήσιμο για οθόνες OLED)",
+ "DiagramMode": "Λειτουργία διαγράμματος",
+ "off": "Απενεργοποιήστε",
+ "small": "Μικρό μέγεθος",
+ "fullscreen": "Πλήρης οθόνη",
+ "DiagramDuration": "Διάγραμμα Διάρκειας",
+ "DiagramDurationHint": "Η χρονική περίοδος που φαίνεται στο διάγραμμα.",
+ "Seconds": "Δευτερόλεπτα",
+ "Contrast": "Αντίθεση ({contrast})",
+ "Rotation": "Περιστροφή",
+ "rot0": "Χωρίς περιστροφή",
+ "rot90": "Περιστροφή 90 μοιρών",
+ "rot180": "Περιστροφή 180 μοιρών",
+ "rot270": "Περιστροφή 270 μοιρών",
+ "DisplayLanguage": "Γλώσσα οθόνης",
+ "en": "English",
+ "de": "Deutsch",
+ "fr": "Français",
+ "Leds": "LEDs",
+ "EqualBrightness": "Η ίδια φωτεινότητα",
+ "LedBrightness": "Φωτεινότητα LED {led} ({brightness})"
+ },
+ "pininfo": {
+ "Category": "Κατηγορία",
+ "Name": "Ονομα",
+ "Number": "Αριθμός",
+ "ValueSelected": "Επιλεγμένο",
+ "ValueActive": "Ενεργό"
+ },
+ "inputserial": {
+ "format_hoymiles": "Μορφή σειριακού αριθμού Hoymiles",
+ "format_converted": "Ο σειριακός αριθμός έχει ήδη μετατραπεί",
+ "format_herf_valid": "Μορφή E-Star HERF (θα αποθηκευτεί μετατρεπόμενη): {serial}",
+ "format_herf_invalid": "Μορφή E-Star HERF: Μη έγκυρο άθροισμα ελέγχου",
+ "format_unknown": "Άγνωστη μορφή"
+ }
+ }
+}
diff --git a/lang/es.lang.json b/lang/es.lang.json
index d28d9b67d..192c1345a 100644
--- a/lang/es.lang.json
+++ b/lang/es.lang.json
@@ -75,6 +75,7 @@
"2005": "Modelo desconocido! Por favor, informe el \"Modelo de pieza de hardware\" y el modelo (por ejemplo, HM-350) como un problema en aquí.",
"3001": "No se eliminó nada",
"3002": "Configuración borrada. Reinicio en curso...",
+ "3003": "File successful deleted. Restart to apply changes!",
"4001": "@:apiresponse.2001",
"4002": "El nombre debe tener entre 1 y {max} caracteres de longitud!",
"4003": "Solo se admiten {max} inversores!",
@@ -583,8 +584,6 @@
"fileadmin": {
"ConfigManagement": "Gestión de Configuración",
"BackupHeader": "Copia de seguridad: Copia de Seguridad del Archivo de Configuración",
- "BackupConfig": "Copia de seguridad del archivo de configuración",
- "Backup": "Copia de seguridad",
"Restore": "Restaurar",
"NoFileSelected": "Ningún archivo seleccionado",
"RestoreHeader": "Restaurar: Restaurar el Archivo de Configuración",
@@ -597,6 +596,12 @@
"FactoryReset": "Restablecimiento de Fábrica",
"ResetMsg": "¿Está seguro de que desea eliminar la configuración actual y restablecer todas las configuraciones a sus valores predeterminados de fábrica?",
"ResetConfirm": "Restablecimiento de Fábrica",
+ "Download": "Download",
+ "Delete": "Delete",
+ "DeleteMsg": "Are you sure you want to delete file: '{name}'? You have to manually reboot the device to apply config changes!",
+ "Name": "Name",
+ "Size": "Size",
+ "Action": "Action",
"Cancel": "@:base.Cancel",
"InvalidJson": "JSON file is formatted incorrectly.",
"InvalidJsonContent": "JSON file has the wrong content."
diff --git a/lang/it.lang.json b/lang/it.lang.json
index 5a670665d..cf8968477 100644
--- a/lang/it.lang.json
+++ b/lang/it.lang.json
@@ -75,6 +75,7 @@
"2005": "Invalid country selection!",
"3001": "Not deleted anything!",
"3002": "Configuration resettet. Rebooting now...",
+ "3003": "File successful deleted. Restart to apply changes!",
"4001": "@:apiresponse.2001",
"4002": "Name must between 1 and {max} characters long!",
"4003": "Only {max} inverters are supported!",
@@ -583,8 +584,6 @@
"fileadmin": {
"ConfigManagement": "Configurazione Gestione",
"BackupHeader": "Backup: Configurazione File Backup",
- "BackupConfig": "Esegui il backup del file",
- "Backup": "Backup",
"Restore": "Ripristina",
"NoFileSelected": "Nessun file selezionato",
"RestoreHeader": "Ripristina: Ripristina File Configurazione",
@@ -597,6 +596,12 @@
"FactoryReset": "Factory Reset",
"ResetMsg": "Sei sicuro di voler cancellare la configurazione attuale e applicare la configurazione di fabbrica?",
"ResetConfirm": "Factory Reset!",
+ "Download": "Download",
+ "Delete": "Delete",
+ "DeleteMsg": "Are you sure you want to delete file: '{name}'? You have to manually reboot the device to apply config changes!",
+ "Name": "Name",
+ "Size": "Size",
+ "Action": "Action",
"Cancel": "@:base.Cancel",
"InvalidJson": "JSON file is formatted incorrectly.",
"InvalidJsonContent": "JSON file has the wrong content."
diff --git a/lib/Hoymiles/src/inverters/HMS_4CH.cpp b/lib/Hoymiles/src/inverters/HMS_4CH.cpp
index 791259d28..7e96cf512 100644
--- a/lib/Hoymiles/src/inverters/HMS_4CH.cpp
+++ b/lib/Hoymiles/src/inverters/HMS_4CH.cpp
@@ -65,7 +65,7 @@ bool HMS_4CH::isValidSerial(const uint64_t serial)
{
// serial >= 0x116400000000 && serial <= 0x1164ffffffff
uint16_t preSerial = (serial >> 32) & 0xffff;
- return preSerial == 0x1164;
+ return preSerial == 0x1164 || preSerial == 0x1420;
}
String HMS_4CH::typeName() const
diff --git a/lib/Hoymiles/src/inverters/README.md b/lib/Hoymiles/src/inverters/README.md
index 93878b139..26ee43343 100644
--- a/lib/Hoymiles/src/inverters/README.md
+++ b/lib/Hoymiles/src/inverters/README.md
@@ -8,7 +8,7 @@
| HMS_1CH | HMS-300/350/400/450/500-1T | 1124 |
| HMS_1CHv2 | HMS-450/500-1T v2 | 1125, 1400 |
| HMS_2CH | HMS-600/700/800/900/1000-2T | 1143, 1144, 1410 |
-| HMS_4CH | HMS-1600/1800/2000-4T | 1164 |
+| HMS_4CH | HMS-1600/1800/2000-4T | 1164, 1420 |
| HMT_4CH | HMT-1600/1800/2000-4T | 1361 |
| HMT_6CH | HMT-1800/2250-6T | 1382 |
| HERF_1CH | HERF 300 | 2841 |
diff --git a/lib/Hoymiles/src/parser/SystemConfigParaParser.cpp b/lib/Hoymiles/src/parser/SystemConfigParaParser.cpp
index f01af7070..b6426dc2a 100644
--- a/lib/Hoymiles/src/parser/SystemConfigParaParser.cpp
+++ b/lib/Hoymiles/src/parser/SystemConfigParaParser.cpp
@@ -47,7 +47,11 @@ float SystemConfigParaParser::getLimitPercent() const
HOY_SEMAPHORE_TAKE();
const float ret = ((static_cast(_payload[2]) << 8) | _payload[3]) / 10.0;
HOY_SEMAPHORE_GIVE();
- return ret;
+
+ // don't pretend the inverter could produce more than its rated power,
+ // even though it does process, accept, and even save limit values beyond
+ // its rated power.
+ return min(100, ret);
}
void SystemConfigParaParser::setLimitPercent(const float value)
diff --git a/platformio.ini b/platformio.ini
index d2ff18714..d7f0390f4 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -19,7 +19,7 @@ extra_configs =
custom_ci_action = generic_esp32_4mb_no_ota,generic_esp32_8mb,generic_esp32s3,generic_esp32s3_usb
framework = arduino
-platform = espressif32@6.9.0
+platform = espressif32@6.10.0
platform_packages =
platformio/tool-mklittlefs
@@ -42,7 +42,7 @@ build_unflags =
-std=gnu++11
lib_deps =
- mathieucarbou/ESPAsyncWebServer @ 3.6.0
+ ESP32Async/ESPAsyncWebServer @ 3.6.2
bblanchon/ArduinoJson @ 7.3.0
https://github.com/bertmelis/espMqttClient.git#v1.7.0
nrf24/RF24 @ 1.4.11
diff --git a/src/WebApi_network.cpp b/src/WebApi_network.cpp
index 16a2f1815..1bc89f15c 100644
--- a/src/WebApi_network.cpp
+++ b/src/WebApi_network.cpp
@@ -10,6 +10,11 @@
#include "helper.h"
#include
+WebApiNetworkClass::WebApiNetworkClass()
+ : _applyDataTask(500 * TASK_MILLISECOND, TASK_ONCE, std::bind(&WebApiNetworkClass::applyDataTaskCb, this))
+{
+}
+
void WebApiNetworkClass::init(AsyncWebServer& server, Scheduler& scheduler)
{
using std::placeholders::_1;
@@ -17,6 +22,8 @@ void WebApiNetworkClass::init(AsyncWebServer& server, Scheduler& scheduler)
server.on("/api/network/status", HTTP_GET, std::bind(&WebApiNetworkClass::onNetworkStatus, this, _1));
server.on("/api/network/config", HTTP_GET, std::bind(&WebApiNetworkClass::onNetworkAdminGet, this, _1));
server.on("/api/network/config", HTTP_POST, std::bind(&WebApiNetworkClass::onNetworkAdminPost, this, _1));
+
+ scheduler.addTask(_applyDataTask);
}
void WebApiNetworkClass::onNetworkStatus(AsyncWebServerRequest* request)
@@ -228,6 +235,12 @@ void WebApiNetworkClass::onNetworkAdminPost(AsyncWebServerRequest* request)
WebApi.sendJsonResponse(request, response, __FUNCTION__, __LINE__);
+ _applyDataTask.enable();
+ _applyDataTask.restart();
+}
+
+void WebApiNetworkClass::applyDataTaskCb()
+{
NetworkSettings.enableAdminMode();
NetworkSettings.applyConfig();
}
diff --git a/webapp/package.json b/webapp/package.json
index d057a7f15..4cf57790d 100644
--- a/webapp/package.json
+++ b/webapp/package.json
@@ -20,21 +20,21 @@
"sortablejs": "^1.15.6",
"spark-md5": "^3.0.2",
"vue": "^3.5.13",
- "vue-i18n": "11.0.1",
+ "vue-i18n": "11.1.0",
"vue-router": "^4.5.0"
},
"devDependencies": {
"@intlify/unplugin-vue-i18n": "^6.0.3",
"@tsconfig/node22": "^22.0.0",
"@types/bootstrap": "^5.2.10",
- "@types/node": "^22.10.6",
+ "@types/node": "^22.13.0",
"@types/pulltorefreshjs": "^0.1.7",
"@types/sortablejs": "^1.15.8",
"@types/spark-md5": "^3.0.5",
"@vitejs/plugin-vue": "^5.2.1",
"@vue/eslint-config-typescript": "^14.3.0",
"@vue/tsconfig": "^0.7.0",
- "eslint": "^9.18.0",
+ "eslint": "^9.19.0",
"eslint-plugin-vue": "^9.32.0",
"npm-run-all": "^4.1.5",
"prettier": "^3.4.2",
@@ -42,7 +42,7 @@
"sass": "=1.77.6",
"terser": "^5.37.0",
"typescript": "~5.6.3",
- "vite": "^6.0.7",
+ "vite": "^6.0.11",
"vite-plugin-compression": "^0.5.1",
"vite-plugin-css-injected-by-js": "^3.5.2",
"vue-tsc": "^2.2.0"
diff --git a/webapp/yarn.lock b/webapp/yarn.lock
index 5bc7ebbec..b12efcd03 100644
--- a/webapp/yarn.lock
+++ b/webapp/yarn.lock
@@ -195,10 +195,10 @@
minimatch "^3.1.2"
strip-json-comments "^3.1.1"
-"@eslint/js@9.18.0":
- version "9.18.0"
- resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.18.0.tgz#3356f85d18ed3627ab107790b53caf7e1e3d1e84"
- integrity sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==
+"@eslint/js@9.19.0":
+ version "9.19.0"
+ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.19.0.tgz#51dbb140ed6b49d05adc0b171c41e1a8713b7789"
+ integrity sha512-rbq9/g38qjfqFLOVPvwjIvFFdNziEC5S65jmjPw5r6A//QH+W91akh9irMwjDN8zKUTak6W9EsAv4m/7Wnw0UQ==
"@eslint/object-schema@^2.1.5":
version "2.1.5"
@@ -264,13 +264,13 @@
"@intlify/message-compiler" "10.0.5"
"@intlify/shared" "10.0.5"
-"@intlify/core-base@11.0.1":
- version "11.0.1"
- resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-11.0.1.tgz#f84564a5bd313879b32cea70e6e3d2fe9e1f128b"
- integrity sha512-NAmhw1l/llM0HZRpagR/ChJTNymW4ll6/4EDSJML5c8L5Hl/+k6UyF8EIgE6DeHpfheQujkSRngauViHqq6jJQ==
+"@intlify/core-base@11.1.0":
+ version "11.1.0"
+ resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-11.1.0.tgz#bb8244042768ac96ec3536392f48278b2e3c7f61"
+ integrity sha512-5KFrnfgcv4cVWzA1RC4HqMHYEWSD/69GQU7wpKJ2l6mA6ggqEjb9NJN5VJNJvP2mU5y8MAGwXLAJXJo5sbIkMQ==
dependencies:
- "@intlify/message-compiler" "11.0.1"
- "@intlify/shared" "11.0.1"
+ "@intlify/message-compiler" "11.1.0"
+ "@intlify/shared" "11.1.0"
"@intlify/message-compiler@10.0.5":
version "10.0.5"
@@ -280,12 +280,12 @@
"@intlify/shared" "10.0.5"
source-map-js "^1.0.2"
-"@intlify/message-compiler@11.0.1":
- version "11.0.1"
- resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-11.0.1.tgz#7c159642e3a3c160dd25a15c17127c69d56b0561"
- integrity sha512-5RFH8x+Mn3mbjcHXnb6KCXGiczBdiQkWkv99iiA0JpKrNuTAQeW59Pjq/uObMB0eR0shnKYGTkIJxum+DbL3sw==
+"@intlify/message-compiler@11.1.0":
+ version "11.1.0"
+ resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-11.1.0.tgz#d2ceba2fa1ed1578fa791759f696b583d346d9fb"
+ integrity sha512-UuV1YwWPBNgL4uqtC1vZPHF2QtYYqVeCDIsbV6JC6Vv90UWmEiU77U7EZmNVVV7DepT83Ow5MaF1CiWI77b61w==
dependencies:
- "@intlify/shared" "11.0.1"
+ "@intlify/shared" "11.1.0"
source-map-js "^1.0.2"
"@intlify/message-compiler@next":
@@ -306,10 +306,10 @@
resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-11.0.0-beta.2.tgz#a442da6f6194a03c6987cd53aa410f0c827e5b56"
integrity sha512-N6ngJfFaVA0l2iLtx/SymgHOBW4wiS5Pyue7YmY/G+mrGjesi+S+U+u/Xlv6pZa/YIBfeM4QB07lI7rz1YqKLg==
-"@intlify/shared@11.0.1":
- version "11.0.1"
- resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-11.0.1.tgz#25ff7f038bbae903e2bc75bf862b2380fde07cc8"
- integrity sha512-lH164+aDDptHZ3dBDbIhRa1dOPQUp+83iugpc+1upTOWCnwyC1PVis6rSWNMMJ8VQxvtHQB9JMib48K55y0PvQ==
+"@intlify/shared@11.1.0":
+ version "11.1.0"
+ resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-11.1.0.tgz#0f9126d1be2a40642c7ac8a1eed5f23ce82d3fe4"
+ integrity sha512-DvpNSxiMrFqYMaGSRDDnQgO/L0MqNH4KWw9CUx8LRHHIdWp08En9DpmSRNpauUOxKpHAhyJJxx92BHZk9J84EQ==
"@intlify/unplugin-vue-i18n@^6.0.3":
version "6.0.3"
@@ -530,10 +530,10 @@
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841"
integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
-"@types/node@^22.10.6":
- version "22.10.6"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.6.tgz#5c6795e71635876039f853cbccd59f523d9e4239"
- integrity sha512-qNiuwC4ZDAUNcY47xgaSuS92cjf8JbSUoaKS77bmLG1rU7MlATVSiw/IlrjtIyyskXBZ8KkNfjK/P5na7rgXbQ==
+"@types/node@^22.13.0":
+ version "22.13.0"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.0.tgz#d376dd9a0ee2f9382d86c2d5d7beb4d198b4ea8c"
+ integrity sha512-ClIbNe36lawluuvq3+YYhnIN2CELi+6q8NpnM7PYp4hBn/TatfboPgVSm2rwKRfnV2M+Ty9GWDFI64KEe+kysA==
dependencies:
undici-types "~6.20.0"
@@ -1321,17 +1321,17 @@ eslint-visitor-keys@^4.2.0:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45"
integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==
-eslint@^9.18.0:
- version "9.18.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.18.0.tgz#c95b24de1183e865de19f607fda6518b54827850"
- integrity sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==
+eslint@^9.19.0:
+ version "9.19.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.19.0.tgz#ffa1d265fc4205e0f8464330d35f09e1d548b1bf"
+ integrity sha512-ug92j0LepKlbbEv6hD911THhoRHmbdXt2gX+VDABAW/Ir7D3nqKdv5Pf5vtlyY6HQMTEP2skXY43ueqTCWssEA==
dependencies:
"@eslint-community/eslint-utils" "^4.2.0"
"@eslint-community/regexpp" "^4.12.1"
"@eslint/config-array" "^0.19.0"
"@eslint/core" "^0.10.0"
"@eslint/eslintrc" "^3.2.0"
- "@eslint/js" "9.18.0"
+ "@eslint/js" "9.19.0"
"@eslint/plugin-kit" "^0.2.5"
"@humanfs/node" "^0.16.6"
"@humanwhocodes/module-importer" "^1.0.1"
@@ -2750,10 +2750,10 @@ vite-plugin-css-injected-by-js@^3.5.2:
resolved "https://registry.yarnpkg.com/vite-plugin-css-injected-by-js/-/vite-plugin-css-injected-by-js-3.5.2.tgz#1f75d16ad5c05b6b49bf18018099a189ec2e46ad"
integrity sha512-2MpU/Y+SCZyWUB6ua3HbJCrgnF0KACAsmzOQt1UvRVJCGF6S8xdA3ZUhWcWdM9ivG4I5az8PnQmwwrkC2CAQrQ==
-vite@^6.0.7:
- version "6.0.7"
- resolved "https://registry.yarnpkg.com/vite/-/vite-6.0.7.tgz#f0f8c120733b04af52b4a1e3e7cb54eb851a799b"
- integrity sha512-RDt8r/7qx9940f8FcOIAH9PTViRrghKaK2K1jY3RaAURrEUbm9Du1mJ72G+jlhtG3WwodnfzY8ORQZbBavZEAQ==
+vite@^6.0.11:
+ version "6.0.11"
+ resolved "https://registry.yarnpkg.com/vite/-/vite-6.0.11.tgz#224497e93e940b34c3357c9ebf2ec20803091ed8"
+ integrity sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg==
dependencies:
esbuild "^0.24.2"
postcss "^8.4.49"
@@ -2779,13 +2779,13 @@ vue-eslint-parser@^9.4.3:
lodash "^4.17.21"
semver "^7.3.6"
-vue-i18n@11.0.1:
- version "11.0.1"
- resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-11.0.1.tgz#aa4c20d6f7c127bc46028ae3325659be47dd338e"
- integrity sha512-pWAT8CusK8q9/EpN7V3oxwHwxWm6+Kp2PeTZmRGvdZTkUzMQDpbbmHp0TwQ8xw04XKm23cr6B4GL72y3W8Yekg==
+vue-i18n@11.1.0:
+ version "11.1.0"
+ resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-11.1.0.tgz#996095024da5cbb5148e602d7d88e0218ffe5fcc"
+ integrity sha512-UgtYUe99mLfo7ya5TJSsJcgJZaqIunwXjff5UA03xRry0VtgN4zIUbuoycK9/ZZQJg5Cmr6V6zq+u0H0P0hlNw==
dependencies:
- "@intlify/core-base" "11.0.1"
- "@intlify/shared" "11.0.1"
+ "@intlify/core-base" "11.1.0"
+ "@intlify/shared" "11.1.0"
"@vue/devtools-api" "^6.5.0"
vue-i18n@^10.0.0: