diff --git a/README.md b/README.md index ae30ecf5..dfe874a6 100644 --- a/README.md +++ b/README.md @@ -52,8 +52,14 @@ When the adapter crashes or another Code error happens, this error message that ## Changelog -### **WORK IN PROGRESS** +### 2.9.7 (2023-12-12) +* (simatec) URL Update +* (simatec) Fix redis Password + +### 2.9.6 (2023-12-10) +* (simatec) Gotify Notication added * (simatec) dependencies updated +* (simatec) Copypath check added ### 2.9.5 (2023-11-29) * (simatec) dependencies updated diff --git a/admin/i18n/de/translations.json b/admin/i18n/de/translations.json index 47646d1a..7f955b76 100644 --- a/admin/i18n/de/translations.json +++ b/admin/i18n/de/translations.json @@ -1,307 +1,309 @@ { - " *** Open InfluxDB Documentation ***": "*** InfluxDB - Dokumentation öffnen ***", - " *** Open Readme ***": " *** Liesmich öffnen ***", - ", and copied / moved via FTP to %h%d": ", und nach %h%d via FTP kopiert/verschoben", - ", and stored in dropbox": ", und in der Dropbox gespeichert", - ", and stored in google drive": ", und in Google Drive gespeichert", - ", and stored in onedrive": " und in Onedrive gespeichert", - ", and stored in webdav": ", wird in WebDAV gespeichert", - ", and stored under %h%d": ", und unter %h%d gespeichert", - "

1. Confirm with \"OK\" and the download begins. Please wait until the download is finished!

2. After download ioBroker will be restarted during restore.": "

1. Bestätigen Sie mit \"OK\" und der Download beginnt. Bitte warten Sie, bis der Download abgeschlossen ist!

2. Nach dem Download wird ioBroker gestoppt und während der Wiederherstellung neu gestartet.", - "

1. Confirm with \"OK\" and the download begins. Please wait until the download is finished!

2. After the download, the restore begins without restarting ioBroker.": "

1. Bestätigen Sie mit \"OK\" und der Download beginnt. Bitte warten Sie bis der Download abgeschlossen ist!

2. Nach dem Download beginnt die Wiederherstellung, ohne ioBroker neu zu starten", - "


On the host only %s MB free space is available! Local backups are currently not possible.

Please check your system!": "


Auf dem Host stehen nur %s MB freier Speicherplatz zur Verfügung! Lokale Backups sind derzeit nicht möglich.

Bitte überprüfen Sie Ihr System!", - "


On the host only %s MB free space is available! Please check your system!": "


Auf dem Host stehen nur %s MB freier Speicherplatz zur Verfügung! Bitte überprüfen Sie Ihr System!", - "


After confirmation, a new tab opens with the Restore Log.
If the tab does not open, please deactivate your popup blocker.": "


Nach der Bestätigung öffnet sich nach kurzer Zeit ein neuer Tab mit dem Restore-Log.
Sollte sich der Tab nicht öffnen, deaktivieren Sie bitte Ihren Popup-Blocker.", - "

According to the Backitup settings, backups are currently stored in the same local file system that is the source of the backup can be accessed more.

It is recommended to use an external storage space as a backup target.": "

Laut den Einstellungen von Backitup, werden Backups aktuell im gleichen lokalen Dateisystem gespeichert, welches auch die Quelle der Sicherung ist.

Im Fall eines Dateisystem-Fehlers oder eines Systemausfalls, kann auf die Backups dann nicht mehr zugegriffen werden.

Es wird empfohlen, einen externen Speicherplatz als Backup-Ziel zu nutzen.", - "

The JavaScript Adapter scripts are already saved in the ioBroker backup.

This option is just an additional option to be able to restore the scripts individually if necessary.": "

Die Skripte des JavaScript-Adapter sind bereits im ioBroker-Backup gespeichert.

Diese Option ist nur eine zusätzliche Option, um die Skripte bei Bedarf einzeln wiederherstellen zu können.", - "

ioBroker will be restarted during restore.

Confirm with \"OK\".": "

ioBroker wird während der Wiederherstellung neu gestartet.

Bestätigen Sie mit \"OK\".", - "

ioBroker will not be restarted for this restore.

Confirm with \"OK\".": "

ioBroker wird für diese Wiederherstellung nicht neu gestartet.

Bestätigen Sie mit \"OK\".", - "A local backup is currently not possible. Please check your System!": "Eine lokale Sicherung ist derzeit nicht möglich. Bitte überprüfen Sie Ihr System!", - "AOF activated": "AOF aktiviert", - "Access token": "Zugangstoken", - "Access token:": "Zugangstoken:", - "Access token: ": "Zugangstoken: ", - "Additional setting": "Zusätzliche Einstellungen", - "All": "Alle", - "All Receiver": "Alle Empfänger", - "All backup settings can be changed in the adapter configuration of Backitup.": "Alle Sicherungs Einstellungen können in der Adapterkonfiguration von Backitup geändert werden.", - "Allow only signed certificates": "Nur signierte Zertifikate zulassen", - "Are you sure?": "Wirklich sicher?", - "Authorize this app by visiting this url:": "Diese App mit dem Besuch der dieser URL autorisieren:", - "Authorize this app by visiting this url: ": "Autorisieren Sie diese App, indem Sie diese URL aufrufen:", - "BEGIN instruction before backup": "BEGIN-Anweisung vor der Sicherung", - "Backitup Information!": "Backitup-Informationen!", - "Backitup Warning!": "Backitup Warnung!", - "Backitup execution": "Backitup-Ausführung", - "Backup Download": "Backup-Download", - "Backup Upload": "Backup Upload", - "Backup error on:": "Sicherungsfehler bei:", - "Backup history": "Backup Verlauf", - "Backup of all scripts from Javascript adapter": "Backup aller Skripte des JavaScript-Adapters", - "Backup of all stored data of the history adapter": "Sicherung aller gespeicherten Daten des History Adapters", - "Backup of several Systems": "Sicherung mehrerer Systeme", - "Backup start time in hh: mm": "Startzeit der Sicherung in hh:mm", - "Backup started": "Die Sicherung wurde gestartet", - "Backup will run every X days": "Sicherung alle X Tage ausführen", - "Backup your System …": "System sichern…", - "Backupinformations": "Backup Informationen", - "Backups could not be determined!": "Backups konnten nicht ermittelt werden!", - "CCU Backup": "CCU", - "CIFS": "NAS / Kopieren", - "CIFS-Mount: Yes": "NFS / CIFS-Mount: Ja", - "Cancel": "Abbrechen", - "Close": "Schließen", - "Config taken from %s": "Die Konfiguration wurde von %s übernommen", - "Configuration was successfully loaded": "Konfiguration wurde erfolgreich geladen", - "Configuring remote connections. For detailed information please read the documentation of InfluxDB!": "Remoteverbindungen konfigurieren. Für detaillierte Informationen bitte die Dokumentation von InfluxDB lesen!", - "Database Version": "Datenbankversion", - "Default Dropbox-API App for Backitup": "Standard-Dropbox-API-App für Backup", - "Delete old Dropbox-Backups": "Löschen alter Dropbox-Sicherungen", - "Delete old FTP-Backups": "Löschen alter FTP-Backups", - "Delete old Google Drive-Backups": "Löschen alter Google Drive-Sicherungen", - "Delete old NAS / Copy-Backups": "Löschen alter NAS / Kopieren-Sicherungen", - "Delete old Onedrive-Backups": "Alte Onedrive-Backups löschen", - "Delete old WebDAV-Backups": "Löschen alter WebDAV-Sicherungen", - "Discord instance": "Discord-Instanz", - "Discord receiver": "Discord-Empfänger", - "Domainname (optional)": "Domainname (optional)", - "Download Backup File": "Backupdatei herunterladen", - "Download Backup file": "Download Backup Datei", - "Download completed successfully. The popup will close automatically": "Download erfolgreich abgeschlossen. Das Popup-Fenster wird automatisch geschlossen.", - "Download is in progress ...": "Download ist gestartet…", - "Dropbox": "Dropbox", - "Dropbox Path for CCU backup": "Dropbox-Pfad für CCU-Sicherungen", - "Dropbox Path for complete backup": "Dropbox-Pfad für Komplett-Sicherungen", - "Dropbox Path for iobroker backup": "Dropbox-Pfad für die ioBroker Sicherungen", - "Dropbox path": "Dropbox-Pfad", - "Dropbox refresh token": "Dropbox-Aktualisierungstoken", - "Dropbox refresh token: ": "Dropbox-Aktualisierungstoken: ", - "Dropbox-API Type": "Dropbox-API Typ", - "Dropbox: Yes": "Dropbox: Ja", - "E-Mail": "E-Mail", - "ESPHome": "ESPHome", - "Enable / disable log": "Log aktivieren / deaktivieren", - "Enable Notifications": "Benachrichtigungen aktivieren", - "Enable debug": "Debug aktivieren", - "Enabled": "Aktiviert", - "Enter the code from that page here": "Hier den Code von dieser Seite eingeben und danach speichern", - "Extensions Enabled (Mysql / Redis)": "Erweiterungen mit sichern (z.B. MySQL / Redis)", - "Extra path for backup types": "Extrapfade für alle Sicherungstypen", - "Extra-Settings": "Extra-Einstellungen", - "FTP": "FTP", - "FTP-Backup: Yes": "FTP-Sicherung: Ja", - "Full path": "Vollständiger Pfad", - "Get Dropbox Access": "Holen Sie sich Dropbox-Zugriff", - "Get Google Drive Access": "Google Drive Zugriff holen", - "Get Onedrive Access": "Zugriff auf Onedrive", - "Get list": "Sicherungen abrufen", - "Google Drive": "Google Drive", - "Google Drive Path for CCU backup": "Google Drive Pfad für die CCU-Sicherung", - "Google Drive Path for complete backup": "Google Drive Pfad für eine vollständige Sicherung", - "Google Drive Path for iobroker backup": "Google Drive Pfad für ioBroker Sicherung", - "Google Drive path": "Google Drive Pfad", - "Google Drive: Yes": "Google Drive: Ja", - "Grafana API-Key or Service Token": "Grafana API-Key oder Service Token", - "Grafana Backup": "Grafana", - "Grafana Hostname": "Grafana Hostname / IP", - "Grafana password": "Grafana Passwort", - "Grafana port": "Grafana Port", - "Grafana username": "Grafana Benutzername", - "History Data Backup": "History Daten", - "History data path": "History Daten Pfad", - "Homematic CCU backup": "Homematic CCU", - "Homematic start backup": "Homematic Backup starten", - "Host": "Server", - "Host Type": "Hosttyp", - "IP address": "IP-Adresse", - "IP adress or hostname": "IP-Adresse oder Hostname", - "IP of the CCU": "IP-Adresse der CCU", - "InfluxDB Backup": "InfluxDB", - "InfluxDB Hostname (leave blank to save locally only)": "InfluxDB-Hostname (leer lassen, um nur lokal zu speichern)", - "InfluxDB database Token": "InfluxDB-Datenbank-Token", - "InfluxDB database name": "Name der InfluxDB-Datenbank", - "InfluxDB port (default: 8088)": "InfluxDB-Port (Standardport: 8088)", - "Invalid JSON file": "Ungültige JSON-Datei", - "Jarvis Backup": "Jarvis", - "Javascripts Backup": "Javascript", - "Javascripts File path": "Javascript Dateipfad", - "Last CCU Backup: ": "Letztes CCU Backup: ", - "Last iobroker Backup: ": "Letzte ioBroker Sicherung: ", - "Local": "Lokal", - "Local hard disk space Limit value for error message (MB)": "lokaler Festplattenspeicher Grenzwert für Fehlermeldung (MB)", - "Local hard disk space Limit value for warning message (MB)": "lokaler Festplattenspeicher Grenzwert für Warnmeldung (MB)", - "Long Notifications": "Lange Benachrichtigungen", - "MAC address": "MAC-Adresse", - "Matrix": "Matrix", - "Matrix instance": "Matrix-Instanz", - "Minimal": "Minimal", - "Mount as root": "Als root-Benutzer mounten (sudo)", - "Multihost settings": "Multihost-Einstellungen", - "MySQL Hostname": "MySQL Hostname", - "MySQL database name": "MySQL Datenbankname", - "MySQL port": "MySQL Port", - "MySql Backup": "MySQL", - "MySql password": "MySQL Passwort", - "MySql username": "MySQL Benutzername", - "NAS / Copy": "NAS / Kopieren", - "NAS settings": "NAS Einstellungen", - "Name suffix": "Namenszusatz", - "New %e Backup created on %t": "Eine neue %e Sicherung wurde am %t erstellt", - "Next CCU Backup: ": "Nächste CCU Sicherung: ", - "Next iobroker Backup: ": "Nächste ioBroker Sicherung: ", - "No %s Instance found on this host. Please check your System": "Auf diesem Host wurde keine %s-Instanz gefunden. Bitte überprüfen Sie Ihr System", - "No %s Instance found. Please check your System": "Keine %s Instanz gefunden. Bitte überprüfen Sie Ihr System", - "No Config found from %s": "Keine Konfiguration von %s gefunden", - "No Userdata entered": "Keine Benutzerdaten eingegeben", - "No answer": "Keine Antwort", - "No backups yet": "Noch keine Sicherung erstellt", - "No code entered": "Kein Code eingegeben", - "No config found": "Keine Konfiguration gefunden", - "No config found. Please check the settings in the Javascript adapter": "Keine Konfiguration gefunden. Bitte die Einstellungen im JavaScript-Adapter überprüfen", - "Node-Red Backup": "Node-Red", - "Not present": "Nicht vorhanden", - "Note: It is not possible to save files larger than 150 MB in the current Dopbox-Api V2!": "Hinweis: Das Speichern von Dateien größer als 150 MB ist in der aktuellen Dopbox-Api V2 nicht möglich!", - "Notification Style": "Benachrichtigungsstil", - "Notification only on errors": "Benachrichtigung nur bei Fehlern", - "Notifications": "Benachrichtigungen", - "Notifications by telegram": "Benachrichtigungen per Telegram", - "Number of history entries": "Anzahl der History Einträge", - "Old CCU backups delete after X days": "Löschen alter CCU-Sicherungen bis auf die letzten X Sicherungen", - "Onedrive": "Onedrive", - "Onedrive Path for CCU backup": "Onedrive Pfad für CCU-Backup", - "Onedrive Path for iobroker backup": "Onedrive Pfad für iobroker Backup", - "Onedrive path": "Onedrive Pfad", - "Onedrive refresh token: ": "Onedrive Aktualisierungstoken: ", - "Only stored locally": "Nur lokal gesichert", - "Password": "Passwort", - "Password of the CCU": "Passwort der CCU", - "Path for CCU backup": "Pfad für CCU-Sicherung", - "Path for complete backup": "Pfad für Komplett-Sicherung", - "Path for iobroker backup": "Pfad für ioBroker Sicherung", - "Path with filename to influxd executable (leave empty to use default)": "Pfad mit dem Dateinamen zum influxd Programm (leer lassen um den Standardwert zu verwenden)", - "Path with filename to mysqldump executable (leave empty to use default)": "Pfad mit dem Dateinamen zum mysqldump Programm (leer lassen um den Standardwert zu verwenden)", - "Path with filename to postgresql executable (leave empty to use default)": "Pfad mit Dateiname zum postgresql Programm (leer lassen, um die Standardeinstellung zu verwenden)", - "Path with filename to sqlite3 executable (leave empty to use default)": "Pfad mit Dateinamen zum SQLite3 Programm (leer lassen um den Standardwert zu verwenden)", - "Please enter here the code from the address line of the opened page (code=)": "Bitte geben Sie hier den Code aus der Adresszeile der geöffneten Seite ein (code=)", - "Please select a backup from the list!": "Bitte wählen Sie ein Backup aus der Liste aus!", - "Port": "Port", - "Postgresql Backup": "PostgreSQL", - "Postgresql Hostname": "PostgreSQL Hostname", - "Postgresql database name": "Name der PostgreSQL-Datenbank", - "Postgresql password": "PostgreSQL Passwort", - "Postgresql port": "PostgreSQL Port", - "Postgresql username": "PostgreSQL Benutzername", - "Present": "Vorhanden", - "Protocol": "Protokoll", - "Pushover": "Pushover", - "Pushover instance": "Pushover-Instanz", - "Ready": "bereit", - "Redis Backup": "Redis", - "Redis Backup by iobroker": "Redis Sicherung bei ioBroker Sicherung", - "Redis Hostname": "Redis-Hostname", - "Redis file path": "Redis-Dateipfad", - "Redis password": "Redis-Passwort", - "Redis username": "Redis-Benutzername", - "Remote": "Remote", - "Renew Dropbox Access": "Dropbox-Zugriff erneuern", - "Renew Google Drive Access": "Google Drive Zugriff erneuern", - "Renew Onedrive Access": "Onedrive-Zugriff erneuern", - "Restore": "Wiederherstellen", - "Restore Backup File": "Backupdatei wiederherstellen", - "Restore started": "Wiederherstellung gestartet", - "Retrieve tables row by row": "Tabellen zeilenweise abrufen", - "Save History Data": "History Daten", - "Save Redis state": "Redis", - "Save Zigbee database": "Zigbee Datenbank", - "Save the configuration first": "Konfiguration zuerst speichern", - "Secure FTP connection (explicit TLS)": "Sichere FTP-Verbindung (explizites TLS)", - "Short Notifications": "Kurze Benachrichtigungen", - "Show restore tab": "Wiederherstellen-Tab anzeigen", - "Signal instance": "Signal Instanz", - "Silent Notice": "Stille Benachrichtigung", - "Slave Instances stopping after backup": "Slave-Instanzen nach dem Backup stoppen", - "Slave Name suffix": "Slave-Namenszusatz", - "Some features of Backitup require additional adapters and tools. For detailed information please read the documentation of Backitup!": "Für einige Funktionen von Backitup sind zusätzliche Adapter und Tools erforderlich. Für detaillierte Informationen bitte die Dokumentation von Backitup lesen!", - "Started...": "Gestartet...", - "Stop ioBroker at backup": "ioBroker stoppen während einer Sicherung", - "Storage location": "Speicherorte", - "Submit": "Einreichen", - "System backup": "Systemsicherung", - "Telegram": "Telegram", - "Telegram Receiver": "Telegram-Empfänger", - "Telegram instance": "Telegram Instanz", - "Test connection": "Verbindung testen", - "The Upload could not be started. The popup will close automaticall": "Der Upload konnte nicht gestartet werden. Der Popup schließt automatischall", - "The connection to the WebDAV server was established successfully.": "Die Verbindung zum WebDAV-Server wurde erfolgreich hergestellt.", - "The download could not be started. The popup will close automatically": "Der Download konnte nicht gestartet werden. Das Popup-Fenster wird automatisch geschlossen", - "Token": "Token", - "Token (only for v2.x)": "Token (nur für v2.x)", - "Type": "Art", - "Upload Backup File": "Upload Backup Datei", - "Upload completed successfully. The popup will close automatically": "Upload erfolgreich abgeschlossen. Der Popup wird automatisch geschlossen", - "Upload from Backup File": "Upload von Backup Datei", - "Username": "Benutzername", - "Username of the CCU": "Benutzername der CCU", - "Version": "Version", - "WOL wait time in seconds": "WOL Wartezeit in Sekunden", - "Waiting for the send (seconds)": "Warten vor dem Senden (Sekunden)", - "Wake on LAN": "Wake on LAN", - "Wake on LAN Advanced Settings": "Wake on LAN Erweiterte Einstellungen", - "WebDAV": "WebDAV", - "WebDAV URL": "WebDAV-URL", - "WebDAV: Yes": "WebDAV: Ja", - "What to back up": "Was soll gesichert werden?", - "WhatsApp": "Whatsapp", - "WhatsApp instance": "WhatsApp-Instanz", - "Yahka (Homekit) Backup": "Yahka (Homekit)", - "Your backup was not completely created. Please check the errors!": "Die Sicherung wurde nicht vollständig erstellt. Bitte die Fehlermeldungen überprüfen!", - "Zigbee2MQTT": "Zigbee2MQTT", - "Zigbee2MQTT file path": "Zigbee2MQTT Dateipfad", - "activated backupoptions": "aktive Backup-Optionen", - "activated storageoptions": "aktive Speicher-Optionen", - "automatically delete old Influx-database before restore": "alte Influx-Datenbank vor dem Restore automatisch löschen", - "backup now": "Jetzt sichern", - "backup time": "Sicherungszeit", - "close on ready": "Schließen wenn fertig", - "connection type": "Verbindungstyp", - "custom app with long-lived tokens": "benutzerdefinierte App mit langlebigen Token", - "database name": "Name der Datenbank", - "days": "Tage", - "detect config": "Ermitteln der Konfiguration", - "device ID (optional)": "Geräte-ID (optional)", - "email instance": "E-Mail-Instanz", - "email receiver": "E-Mail-Empfänger", - "email sender": "E-Mail-Absender", - "filesize": "Dateigröße", - "from the Storage": "aus dem Speicherort", - "ignore Backup Errors": "Backupfehler ignorieren", - "ioBroker will not be restarted for this restore.": "ioBroker wird für diese Wiederherstellung nicht neu gestartet.", - "iobroker backup": "ioBroker", - "iobroker start backup": "iobroker Backup starten", - "main settings": "Haupteinstellungen", - "mount with option \"Cache Loose\"": "Mount mit Option \"Cache Loose\"", - "mount with option \"noserverino\"": "Mount mit Option \"noserverino\"", - "mysql Backup by iobroker": "MySQL-Sicherung mit Standard-Sicherung", - "name": "Name", - "notifications type": "Benachrichtigungstyp", - "old MySQL backups delete after X days": "Löschen alter MySQL Sicherungen bis auf die letzten X Sicherungen", - "old complete backups delete after X days": "Löschen alter Komplett-Sicherungen bis auf die letzten X Sicherungen", - "old iobroker backups delete after X-days": "Löschen alter ioBroker Sicherungen mit Ausnahme der letzten X Sicherungen", - "otherConfig": "Konfiguration von anderem Adapter %s", - "password": "Passwort", - "path": "Pfad", - "piece": "Stück", - "port": "Port", - "restore Backitup settings": "Backitup-Einstellungen wiederherstellen", - "restore type": "Wiederherstellungstyp", - "save Backitup settings": "Backitup-Einstellungen sichern", - "seconds": "Sekunden", - "send analysis data": "Analysedaten senden", - "slave instances": "Slave-Instanzen", - "smb type": "SMB-Typ", - "source type": "Sicherungsquelle", - "sqlite3 Backup": "SQLite3", - "sqlite3 file path": "SQLite3 Dateipfad", - "start all adapter after restore": "Alle Adapter nach der Wiederherstellung starten", - "use https": "https verwenden" -} \ No newline at end of file + " *** Open InfluxDB Documentation ***": "*** InfluxDB - Dokumentation öffnen ***", + " *** Open Readme ***": " *** Liesmich öffnen ***", + ", and copied / moved via FTP to %h%d": ", und nach %h%d via FTP kopiert/verschoben", + ", and stored in dropbox": ", und in der Dropbox gespeichert", + ", and stored in google drive": ", und in Google Drive gespeichert", + ", and stored in onedrive": " und in Onedrive gespeichert", + ", and stored in webdav": ", wird in WebDAV gespeichert", + ", and stored under %h%d": ", und unter %h%d gespeichert", + "

1. Confirm with \"OK\" and the download begins. Please wait until the download is finished!

2. After download ioBroker will be restarted during restore.": "

1. Bestätigen Sie mit \"OK\" und der Download beginnt. Bitte warten Sie, bis der Download abgeschlossen ist!

2. Nach dem Download wird ioBroker gestoppt und während der Wiederherstellung neu gestartet.", + "

1. Confirm with \"OK\" and the download begins. Please wait until the download is finished!

2. After the download, the restore begins without restarting ioBroker.": "

1. Bestätigen Sie mit \"OK\" und der Download beginnt. Bitte warten Sie bis der Download abgeschlossen ist!

2. Nach dem Download beginnt die Wiederherstellung, ohne ioBroker neu zu starten", + "


On the host only %s MB free space is available! Local backups are currently not possible.

Please check your system!": "


Auf dem Host stehen nur %s MB freier Speicherplatz zur Verfügung! Lokale Backups sind derzeit nicht möglich.

Bitte überprüfen Sie Ihr System!", + "


On the host only %s MB free space is available! Please check your system!": "


Auf dem Host stehen nur %s MB freier Speicherplatz zur Verfügung! Bitte überprüfen Sie Ihr System!", + "


After confirmation, a new tab opens with the Restore Log.
If the tab does not open, please deactivate your popup blocker.": "


Nach der Bestätigung öffnet sich nach kurzer Zeit ein neuer Tab mit dem Restore-Log.
Sollte sich der Tab nicht öffnen, deaktivieren Sie bitte Ihren Popup-Blocker.", + "

According to the Backitup settings, backups are currently stored in the same local file system that is the source of the backup can be accessed more.

It is recommended to use an external storage space as a backup target.": "

Laut den Einstellungen von Backitup, werden Backups aktuell im gleichen lokalen Dateisystem gespeichert, welches auch die Quelle der Sicherung ist.

Im Fall eines Dateisystem-Fehlers oder eines Systemausfalls, kann auf die Backups dann nicht mehr zugegriffen werden.

Es wird empfohlen, einen externen Speicherplatz als Backup-Ziel zu nutzen.", + "

The JavaScript Adapter scripts are already saved in the ioBroker backup.

This option is just an additional option to be able to restore the scripts individually if necessary.": "

Die Skripte des JavaScript-Adapter sind bereits im ioBroker-Backup gespeichert.

Diese Option ist nur eine zusätzliche Option, um die Skripte bei Bedarf einzeln wiederherstellen zu können.", + "

ioBroker will be restarted during restore.

Confirm with \"OK\".": "

ioBroker wird während der Wiederherstellung neu gestartet.

Bestätigen Sie mit \"OK\".", + "

ioBroker will not be restarted for this restore.

Confirm with \"OK\".": "

ioBroker wird für diese Wiederherstellung nicht neu gestartet.

Bestätigen Sie mit \"OK\".", + "A local backup is currently not possible. Please check your System!": "Eine lokale Sicherung ist derzeit nicht möglich. Bitte überprüfen Sie Ihr System!", + "AOF activated": "AOF aktiviert", + "Access token": "Zugangstoken", + "Access token:": "Zugangstoken:", + "Access token: ": "Zugangstoken: ", + "Additional setting": "Zusätzliche Einstellungen", + "All": "Alle", + "All Receiver": "Alle Empfänger", + "All backup settings can be changed in the adapter configuration of Backitup.": "Alle Sicherungs Einstellungen können in der Adapterkonfiguration von Backitup geändert werden.", + "Allow only signed certificates": "Nur signierte Zertifikate zulassen", + "Are you sure?": "Wirklich sicher?", + "Authorize this app by visiting this url:": "Diese App mit dem Besuch der dieser URL autorisieren:", + "Authorize this app by visiting this url: ": "Autorisieren Sie diese App, indem Sie diese URL aufrufen:", + "BEGIN instruction before backup": "BEGIN-Anweisung vor der Sicherung", + "Backitup Information!": "Backitup-Informationen!", + "Backitup Warning!": "Backitup Warnung!", + "Backitup execution": "Backitup-Ausführung", + "Backup Download": "Backup-Download", + "Backup Upload": "Backup Upload", + "Backup error on:": "Sicherungsfehler bei:", + "Backup history": "Backup Verlauf", + "Backup of all scripts from Javascript adapter": "Backup aller Skripte des JavaScript-Adapters", + "Backup of all stored data of the history adapter": "Sicherung aller gespeicherten Daten des History Adapters", + "Backup of several Systems": "Sicherung mehrerer Systeme", + "Backup start time in hh: mm": "Startzeit der Sicherung in hh:mm", + "Backup started": "Die Sicherung wurde gestartet", + "Backup will run every X days": "Sicherung alle X Tage ausführen", + "Backup your System …": "System sichern…", + "Backupinformations": "Backup Informationen", + "Backups could not be determined!": "Backups konnten nicht ermittelt werden!", + "CCU Backup": "CCU", + "CIFS": "NAS / Kopieren", + "CIFS-Mount: Yes": "NFS / CIFS-Mount: Ja", + "Cancel": "Abbrechen", + "Close": "Schließen", + "Config taken from %s": "Die Konfiguration wurde von %s übernommen", + "Configuration was successfully loaded": "Konfiguration wurde erfolgreich geladen", + "Configuring remote connections. For detailed information please read the documentation of InfluxDB!": "Remoteverbindungen konfigurieren. Für detaillierte Informationen bitte die Dokumentation von InfluxDB lesen!", + "Database Version": "Datenbankversion", + "Default Dropbox-API App for Backitup": "Standard-Dropbox-API-App für Backup", + "Delete old Dropbox-Backups": "Löschen alter Dropbox-Sicherungen", + "Delete old FTP-Backups": "Löschen alter FTP-Backups", + "Delete old Google Drive-Backups": "Löschen alter Google Drive-Sicherungen", + "Delete old NAS / Copy-Backups": "Löschen alter NAS / Kopieren-Sicherungen", + "Delete old Onedrive-Backups": "Alte Onedrive-Backups löschen", + "Delete old WebDAV-Backups": "Löschen alter WebDAV-Sicherungen", + "Discord instance": "Discord-Instanz", + "Discord receiver": "Discord-Empfänger", + "Domainname (optional)": "Domainname (optional)", + "Download Backup File": "Backupdatei herunterladen", + "Download Backup file": "Download Backup Datei", + "Download completed successfully. The popup will close automatically": "Download erfolgreich abgeschlossen. Das Popup-Fenster wird automatisch geschlossen.", + "Download is in progress ...": "Download ist gestartet…", + "Dropbox": "Dropbox", + "Dropbox Path for CCU backup": "Dropbox-Pfad für CCU-Sicherungen", + "Dropbox Path for complete backup": "Dropbox-Pfad für Komplett-Sicherungen", + "Dropbox Path for iobroker backup": "Dropbox-Pfad für die ioBroker Sicherungen", + "Dropbox path": "Dropbox-Pfad", + "Dropbox refresh token": "Dropbox-Aktualisierungstoken", + "Dropbox refresh token: ": "Dropbox-Aktualisierungstoken: ", + "Dropbox-API Type": "Dropbox-API Typ", + "Dropbox: Yes": "Dropbox: Ja", + "E-Mail": "E-Mail", + "ESPHome": "ESPHome", + "Enable / disable log": "Log aktivieren / deaktivieren", + "Enable Notifications": "Benachrichtigungen aktivieren", + "Enable debug": "Debug aktivieren", + "Enabled": "Aktiviert", + "Enter the code from that page here": "Hier den Code von dieser Seite eingeben und danach speichern", + "Extensions Enabled (Mysql / Redis)": "Erweiterungen mit sichern (z.B. MySQL / Redis)", + "Extra path for backup types": "Extrapfade für alle Sicherungstypen", + "Extra-Settings": "Extra-Einstellungen", + "FTP": "FTP", + "FTP-Backup: Yes": "FTP-Sicherung: Ja", + "Full path": "Vollständiger Pfad", + "Get Dropbox Access": "Holen Sie sich Dropbox-Zugriff", + "Get Google Drive Access": "Google Drive Zugriff holen", + "Get Onedrive Access": "Zugriff auf Onedrive", + "Get list": "Sicherungen abrufen", + "Google Drive": "Google Drive", + "Google Drive Path for CCU backup": "Google Drive Pfad für die CCU-Sicherung", + "Google Drive Path for complete backup": "Google Drive Pfad für eine vollständige Sicherung", + "Google Drive Path for iobroker backup": "Google Drive Pfad für ioBroker Sicherung", + "Google Drive path": "Google Drive Pfad", + "Google Drive: Yes": "Google Drive: Ja", + "Gotify": "Gotify", + "Gotify instance": "Gotify Instanz", + "Grafana API-Key or Service Token": "Grafana API-Key oder Service Token", + "Grafana Backup": "Grafana", + "Grafana Hostname": "Grafana Hostname / IP", + "Grafana password": "Grafana Passwort", + "Grafana port": "Grafana Port", + "Grafana username": "Grafana Benutzername", + "History Data Backup": "History Daten", + "History data path": "History Daten Pfad", + "Homematic CCU backup": "Homematic CCU", + "Homematic start backup": "Homematic Backup starten", + "Host": "Server", + "Host Type": "Hosttyp", + "IP address": "IP-Adresse", + "IP adress or hostname": "IP-Adresse oder Hostname", + "IP of the CCU": "IP-Adresse der CCU", + "InfluxDB Backup": "InfluxDB", + "InfluxDB Hostname (leave blank to save locally only)": "InfluxDB-Hostname (leer lassen, um nur lokal zu speichern)", + "InfluxDB database Token": "InfluxDB-Datenbank-Token", + "InfluxDB database name": "Name der InfluxDB-Datenbank", + "InfluxDB port (default: 8088)": "InfluxDB-Port (Standardport: 8088)", + "Invalid JSON file": "Ungültige JSON-Datei", + "Jarvis Backup": "Jarvis", + "Javascripts Backup": "Javascript", + "Javascripts File path": "Javascript Dateipfad", + "Last CCU Backup: ": "Letztes CCU Backup: ", + "Last iobroker Backup: ": "Letzte ioBroker Sicherung: ", + "Local": "Lokal", + "Local hard disk space Limit value for error message (MB)": "lokaler Festplattenspeicher Grenzwert für Fehlermeldung (MB)", + "Local hard disk space Limit value for warning message (MB)": "lokaler Festplattenspeicher Grenzwert für Warnmeldung (MB)", + "Long Notifications": "Lange Benachrichtigungen", + "MAC address": "MAC-Adresse", + "Matrix": "Matrix", + "Matrix instance": "Matrix-Instanz", + "Minimal": "Minimal", + "Mount as root": "Als root-Benutzer mounten (sudo)", + "Multihost settings": "Multihost-Einstellungen", + "MySQL Hostname": "MySQL Hostname", + "MySQL database name": "MySQL Datenbankname", + "MySQL port": "MySQL Port", + "MySql Backup": "MySQL", + "MySql password": "MySQL Passwort", + "MySql username": "MySQL Benutzername", + "NAS / Copy": "NAS / Kopieren", + "NAS settings": "NAS Einstellungen", + "Name suffix": "Namenszusatz", + "New %e Backup created on %t": "Eine neue %e Sicherung wurde am %t erstellt", + "Next CCU Backup: ": "Nächste CCU Sicherung: ", + "Next iobroker Backup: ": "Nächste ioBroker Sicherung: ", + "No %s Instance found on this host. Please check your System": "Auf diesem Host wurde keine %s-Instanz gefunden. Bitte überprüfen Sie Ihr System", + "No %s Instance found. Please check your System": "Keine %s Instanz gefunden. Bitte überprüfen Sie Ihr System", + "No Config found from %s": "Keine Konfiguration von %s gefunden", + "No Userdata entered": "Keine Benutzerdaten eingegeben", + "No answer": "Keine Antwort", + "No backups yet": "Noch keine Sicherung erstellt", + "No code entered": "Kein Code eingegeben", + "No config found": "Keine Konfiguration gefunden", + "No config found. Please check the settings in the Javascript adapter": "Keine Konfiguration gefunden. Bitte die Einstellungen im JavaScript-Adapter überprüfen", + "Node-Red Backup": "Node-Red", + "Not present": "Nicht vorhanden", + "Note: It is not possible to save files larger than 150 MB in the current Dopbox-Api V2!": "Hinweis: Das Speichern von Dateien größer als 150 MB ist in der aktuellen Dopbox-Api V2 nicht möglich!", + "Notification Style": "Benachrichtigungsstil", + "Notification only on errors": "Benachrichtigung nur bei Fehlern", + "Notifications": "Benachrichtigungen", + "Notifications by telegram": "Benachrichtigungen per Telegram", + "Number of history entries": "Anzahl der History Einträge", + "Old CCU backups delete after X days": "Löschen alter CCU-Sicherungen bis auf die letzten X Sicherungen", + "Onedrive": "Onedrive", + "Onedrive Path for CCU backup": "Onedrive Pfad für CCU-Backup", + "Onedrive Path for iobroker backup": "Onedrive Pfad für iobroker Backup", + "Onedrive path": "Onedrive Pfad", + "Onedrive refresh token: ": "Onedrive Aktualisierungstoken: ", + "Only stored locally": "Nur lokal gesichert", + "Password": "Passwort", + "Password of the CCU": "Passwort der CCU", + "Path for CCU backup": "Pfad für CCU-Sicherung", + "Path for complete backup": "Pfad für Komplett-Sicherung", + "Path for iobroker backup": "Pfad für ioBroker Sicherung", + "Path with filename to influxd executable (leave empty to use default)": "Pfad mit dem Dateinamen zum influxd Programm (leer lassen um den Standardwert zu verwenden)", + "Path with filename to mysqldump executable (leave empty to use default)": "Pfad mit dem Dateinamen zum mysqldump Programm (leer lassen um den Standardwert zu verwenden)", + "Path with filename to postgresql executable (leave empty to use default)": "Pfad mit Dateiname zum postgresql Programm (leer lassen, um die Standardeinstellung zu verwenden)", + "Path with filename to sqlite3 executable (leave empty to use default)": "Pfad mit Dateinamen zum SQLite3 Programm (leer lassen um den Standardwert zu verwenden)", + "Please enter here the code from the address line of the opened page (code=)": "Bitte geben Sie hier den Code aus der Adresszeile der geöffneten Seite ein (code=)", + "Please select a backup from the list!": "Bitte wählen Sie ein Backup aus der Liste aus!", + "Port": "Port", + "Postgresql Backup": "PostgreSQL", + "Postgresql Hostname": "PostgreSQL Hostname", + "Postgresql database name": "Name der PostgreSQL-Datenbank", + "Postgresql password": "PostgreSQL Passwort", + "Postgresql port": "PostgreSQL Port", + "Postgresql username": "PostgreSQL Benutzername", + "Present": "Vorhanden", + "Protocol": "Protokoll", + "Pushover": "Pushover", + "Pushover instance": "Pushover-Instanz", + "Ready": "bereit", + "Redis Backup": "Redis", + "Redis Backup by iobroker": "Redis Sicherung bei ioBroker Sicherung", + "Redis Hostname": "Redis-Hostname", + "Redis file path": "Redis-Dateipfad", + "Redis password": "Redis-Passwort", + "Redis username": "Redis-Benutzername", + "Remote": "Remote", + "Renew Dropbox Access": "Dropbox-Zugriff erneuern", + "Renew Google Drive Access": "Google Drive Zugriff erneuern", + "Renew Onedrive Access": "Onedrive-Zugriff erneuern", + "Restore": "Wiederherstellen", + "Restore Backup File": "Backupdatei wiederherstellen", + "Restore started": "Wiederherstellung gestartet", + "Retrieve tables row by row": "Tabellen zeilenweise abrufen", + "Save History Data": "History Daten", + "Save Redis state": "Redis", + "Save Zigbee database": "Zigbee Datenbank", + "Save the configuration first": "Konfiguration zuerst speichern", + "Secure FTP connection (explicit TLS)": "Sichere FTP-Verbindung (explizites TLS)", + "Short Notifications": "Kurze Benachrichtigungen", + "Show restore tab": "Wiederherstellen-Tab anzeigen", + "Signal instance": "Signal Instanz", + "Silent Notice": "Stille Benachrichtigung", + "Slave Instances stopping after backup": "Slave-Instanzen nach dem Backup stoppen", + "Slave Name suffix": "Slave-Namenszusatz", + "Some features of Backitup require additional adapters and tools. For detailed information please read the documentation of Backitup!": "Für einige Funktionen von Backitup sind zusätzliche Adapter und Tools erforderlich. Für detaillierte Informationen bitte die Dokumentation von Backitup lesen!", + "Started...": "Gestartet...", + "Stop ioBroker at backup": "ioBroker stoppen während einer Sicherung", + "Storage location": "Speicherorte", + "Submit": "Einreichen", + "System backup": "Systemsicherung", + "Telegram": "Telegram", + "Telegram Receiver": "Telegram-Empfänger", + "Telegram instance": "Telegram Instanz", + "Test connection": "Verbindung testen", + "The Upload could not be started. The popup will close automaticall": "Der Upload konnte nicht gestartet werden. Der Popup schließt automatischall", + "The connection to the WebDAV server was established successfully.": "Die Verbindung zum WebDAV-Server wurde erfolgreich hergestellt.", + "The download could not be started. The popup will close automatically": "Der Download konnte nicht gestartet werden. Das Popup-Fenster wird automatisch geschlossen", + "Token": "Token", + "Token (only for v2.x)": "Token (nur für v2.x)", + "Type": "Art", + "Upload Backup File": "Upload Backup Datei", + "Upload completed successfully. The popup will close automatically": "Upload erfolgreich abgeschlossen. Der Popup wird automatisch geschlossen", + "Upload from Backup File": "Upload von Backup Datei", + "Username": "Benutzername", + "Username of the CCU": "Benutzername der CCU", + "Version": "Version", + "WOL wait time in seconds": "WOL Wartezeit in Sekunden", + "Waiting for the send (seconds)": "Warten vor dem Senden (Sekunden)", + "Wake on LAN": "Wake on LAN", + "Wake on LAN Advanced Settings": "Wake on LAN Erweiterte Einstellungen", + "WebDAV": "WebDAV", + "WebDAV URL": "WebDAV-URL", + "WebDAV: Yes": "WebDAV: Ja", + "What to back up": "Was soll gesichert werden?", + "WhatsApp": "Whatsapp", + "WhatsApp instance": "WhatsApp-Instanz", + "Yahka (Homekit) Backup": "Yahka (Homekit)", + "Your backup was not completely created. Please check the errors!": "Die Sicherung wurde nicht vollständig erstellt. Bitte die Fehlermeldungen überprüfen!", + "Zigbee2MQTT": "Zigbee2MQTT", + "Zigbee2MQTT file path": "Zigbee2MQTT Dateipfad", + "activated backupoptions": "aktive Backup-Optionen", + "activated storageoptions": "aktive Speicher-Optionen", + "automatically delete old Influx-database before restore": "alte Influx-Datenbank vor dem Restore automatisch löschen", + "backup now": "Jetzt sichern", + "backup time": "Sicherungszeit", + "close on ready": "Schließen wenn fertig", + "connection type": "Verbindungstyp", + "custom app with long-lived tokens": "benutzerdefinierte App mit langlebigen Token", + "database name": "Name der Datenbank", + "days": "Tage", + "detect config": "Ermitteln der Konfiguration", + "device ID (optional)": "Geräte-ID (optional)", + "email instance": "E-Mail-Instanz", + "email receiver": "E-Mail-Empfänger", + "email sender": "E-Mail-Absender", + "filesize": "Dateigröße", + "from the Storage": "aus dem Speicherort", + "ignore Backup Errors": "Backupfehler ignorieren", + "ioBroker will not be restarted for this restore.": "ioBroker wird für diese Wiederherstellung nicht neu gestartet.", + "iobroker backup": "ioBroker", + "iobroker start backup": "iobroker Backup starten", + "main settings": "Haupteinstellungen", + "mount with option \"Cache Loose\"": "Mount mit Option \"Cache Loose\"", + "mount with option \"noserverino\"": "Mount mit Option \"noserverino\"", + "mysql Backup by iobroker": "MySQL-Sicherung mit Standard-Sicherung", + "name": "Name", + "notifications type": "Benachrichtigungstyp", + "old MySQL backups delete after X days": "Löschen alter MySQL Sicherungen bis auf die letzten X Sicherungen", + "old complete backups delete after X days": "Löschen alter Komplett-Sicherungen bis auf die letzten X Sicherungen", + "old iobroker backups delete after X-days": "Löschen alter ioBroker Sicherungen mit Ausnahme der letzten X Sicherungen", + "otherConfig": "Konfiguration von anderem Adapter %s", + "password": "Passwort", + "path": "Pfad", + "piece": "Stück", + "port": "Port", + "restore Backitup settings": "Backitup-Einstellungen wiederherstellen", + "restore type": "Wiederherstellungstyp", + "save Backitup settings": "Backitup-Einstellungen sichern", + "seconds": "Sekunden", + "send analysis data": "Analysedaten senden", + "slave instances": "Slave-Instanzen", + "smb type": "SMB-Typ", + "source type": "Sicherungsquelle", + "sqlite3 Backup": "SQLite3", + "sqlite3 file path": "SQLite3 Dateipfad", + "start all adapter after restore": "Alle Adapter nach der Wiederherstellung starten", + "use https": "https verwenden" +} diff --git a/admin/i18n/en/translations.json b/admin/i18n/en/translations.json index 4b5b6eaf..28598922 100644 --- a/admin/i18n/en/translations.json +++ b/admin/i18n/en/translations.json @@ -101,6 +101,8 @@ "Google Drive Path for iobroker backup": "Google Drive path for ioBroker backup", "Google Drive path": "Google Drive path", "Google Drive: Yes": "Google Drive: Yes", + "Gotify": "Gotify", + "Gotify instance": "Gotify instance", "Grafana API-Key or Service Token": "Grafana API-Key or Service Token", "Grafana Backup": "Grafana", "Grafana Hostname": "Grafana host name / IP", diff --git a/admin/i18n/es/translations.json b/admin/i18n/es/translations.json index 193c3371..e4912a15 100644 --- a/admin/i18n/es/translations.json +++ b/admin/i18n/es/translations.json @@ -101,6 +101,8 @@ "Google Drive Path for iobroker backup": "Ruta de Google Drive para copia de seguridad de iobroker", "Google Drive path": "Ruta de acceso de Google Drive", "Google Drive: Yes": "Google Drive: si", + "Gotify": "Gotify", + "Gotify instance": "Caso Gotify", "Grafana API-Key or Service Token": "Grafana API-Key o Token de servicio", "Grafana Backup": "Grafana", "Grafana Hostname": "Nombre de host / IP de Grafana", diff --git a/admin/i18n/fr/translations.json b/admin/i18n/fr/translations.json index 6f1bb44d..d052a568 100644 --- a/admin/i18n/fr/translations.json +++ b/admin/i18n/fr/translations.json @@ -101,6 +101,8 @@ "Google Drive Path for iobroker backup": "Google Drive Path pour la sauvegarde iobroker", "Google Drive path": "Chemin Google Drive", "Google Drive: Yes": "Google Drive: oui", + "Gotify": "Gotify", + "Gotify instance": "Gotify instance", "Grafana API-Key or Service Token": "Grafana API-Key ou jeton de service", "Grafana Backup": "Grafana", "Grafana Hostname": "Nom d'hôte / IP Grafana", diff --git a/admin/i18n/it/translations.json b/admin/i18n/it/translations.json index 5d323c62..a8761a2f 100644 --- a/admin/i18n/it/translations.json +++ b/admin/i18n/it/translations.json @@ -101,6 +101,8 @@ "Google Drive Path for iobroker backup": "Percorso di Google Drive per il backup di iobroker", "Google Drive path": "Percorso di Google Drive", "Google Drive: Yes": "Google Drive: sì", + "Gotify": "Gotify", + "Gotify instance": "Esempio di guadagno", "Grafana API-Key or Service Token": "Token API-Key o servizio Grafana", "Grafana Backup": "Grafana", "Grafana Hostname": "Nome host / IP Grafana", diff --git a/admin/i18n/nl/translations.json b/admin/i18n/nl/translations.json index 404a08c5..9afeec52 100644 --- a/admin/i18n/nl/translations.json +++ b/admin/i18n/nl/translations.json @@ -101,6 +101,8 @@ "Google Drive Path for iobroker backup": "Google Drive Path voor iobroker-back-up", "Google Drive path": "Google Drive-pad", "Google Drive: Yes": "Google Drive: ja", + "Gotify": "Gotify", + "Gotify instance": "Vertaling:", "Grafana API-Key or Service Token": "Grafana API-Key of Service Token", "Grafana Backup": "Grafana", "Grafana Hostname": "Grafana hostnaam / IP", diff --git a/admin/i18n/pl/translations.json b/admin/i18n/pl/translations.json index 4ad3b61b..ec2e4492 100644 --- a/admin/i18n/pl/translations.json +++ b/admin/i18n/pl/translations.json @@ -101,6 +101,8 @@ "Google Drive Path for iobroker backup": "Ścieżka do Dysku Google do tworzenia kopii zapasowych iobroker", "Google Drive path": "Ścieżka Dysku Google", "Google Drive: Yes": "Dysk Google: Tak", + "Gotify": "Gotify", + "Gotify instance": "Gotyfikować", "Grafana API-Key or Service Token": "Grafana API-Key or Service Token (ang.)", "Grafana Backup": "Grafana", "Grafana Hostname": "Nazwa / adres IP hosta Grafana", diff --git a/admin/i18n/pt/translations.json b/admin/i18n/pt/translations.json index 90791fed..7fce7952 100644 --- a/admin/i18n/pt/translations.json +++ b/admin/i18n/pt/translations.json @@ -101,6 +101,8 @@ "Google Drive Path for iobroker backup": "Caminho do Google Drive para backup do iobroker", "Google Drive path": "Caminho do Google Drive", "Google Drive: Yes": "Google Drive: sim", + "Gotify": "Gotify", + "Gotify instance": "Exemplo de identificação", "Grafana API-Key or Service Token": "Gráfico API-Key ou Token de Serviço", "Grafana Backup": "Grafana", "Grafana Hostname": "Nome / IP do host Grafana", diff --git a/admin/i18n/ru/translations.json b/admin/i18n/ru/translations.json index 377ce432..a7c3c882 100644 --- a/admin/i18n/ru/translations.json +++ b/admin/i18n/ru/translations.json @@ -101,6 +101,8 @@ "Google Drive Path for iobroker backup": "Путь для резервного копирования ioBroker", "Google Drive path": "Путь", "Google Drive: Yes": "Google Диск: Да", + "Gotify": "Gotify", + "Gotify instance": "Gotify пример", "Grafana API-Key or Service Token": "Grafana API-Key или сервисный токен", "Grafana Backup": "Grafana", "Grafana Hostname": "Имя хоста / IP", diff --git a/admin/i18n/uk/translations.json b/admin/i18n/uk/translations.json index 571f5dd2..0be98ee1 100644 --- a/admin/i18n/uk/translations.json +++ b/admin/i18n/uk/translations.json @@ -101,6 +101,8 @@ "Google Drive Path for iobroker backup": "Шлях Google Drive для резервного копіювання ioBroker", "Google Drive path": "Шлях Google Drive", "Google Drive: Yes": "Диск Google: так", + "Gotify": "Gotify", + "Gotify instance": "Зареєструватися", "Grafana API-Key or Service Token": "API-ключ або маркер служби Grafana", "Grafana Backup": "Графана", "Grafana Hostname": "Ім'я хосту Grafana / IP", diff --git a/admin/i18n/zh-cn/translations.json b/admin/i18n/zh-cn/translations.json index 0209f203..40df1d1f 100644 --- a/admin/i18n/zh-cn/translations.json +++ b/admin/i18n/zh-cn/translations.json @@ -101,6 +101,8 @@ "Google Drive Path for iobroker backup": "ioBroker 备份的 Google Drive 路径", "Google Drive path": "谷歌云端硬盘路径", "Google Drive: Yes": "谷歌驱动器:是的", + "Gotify": "Gotify", + "Gotify instance": "评 注", "Grafana API-Key or Service Token": "Grafana API 密钥或服务令牌", "Grafana Backup": "格拉法纳", "Grafana Hostname": "Grafana 主机名/IP", diff --git a/admin/index_m.html b/admin/index_m.html index d1773b69..fa9f5098 100644 --- a/admin/index_m.html +++ b/admin/index_m.html @@ -817,13 +817,14 @@
@@ -889,6 +890,32 @@
Notification only on errors + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
diff --git a/admin/index_m.js b/admin/index_m.js index 8cf50fdd..e0d3050d 100644 --- a/admin/index_m.js +++ b/admin/index_m.js @@ -1135,6 +1135,10 @@ function load(settings, onChange) { fillInstances('whatsappInstance', instances, settings['whatsappInstance'], 'whatsapp-cmb'); }); + getAdapterInstances('gotify', function (instances) { + fillInstances('gotifyInstance', instances, settings['gotifyInstance'], 'gotify'); + }); + getAdapterInstances('signal-cmb', function (instances) { fillInstances('signalInstance', instances, settings['signalInstance'], 'signal-cmb'); }); @@ -1583,6 +1587,7 @@ function showHideSettings(settings) { $('.email').hide(); $('.pushover').hide(); $('.whatsapp').hide(); + $('.gotify').hide(); $('.signal').hide(); $('.matrix').hide(); $('.discord').hide(); @@ -1591,6 +1596,7 @@ function showHideSettings(settings) { $('.telegram').hide(); $('.pushover').hide(); $('.whatsapp').hide(); + $('.gotify').hide(); $('.signal').hide(); $('.matrix').hide(); $('.discord').hide(); @@ -1599,6 +1605,7 @@ function showHideSettings(settings) { $('.telegram').hide(); $('.email').hide(); $('.whatsapp').hide(); + $('.gotify').hide(); $('.signal').hide(); $('.matrix').hide(); $('.discord').hide(); @@ -1606,6 +1613,7 @@ function showHideSettings(settings) { } else if ($(this).val() === 'WhatsApp') { $('.telegram').hide(); $('.email').hide(); + $('.gotify').hide(); $('.pushover').hide(); $('.signal').hide(); $('.matrix').hide(); @@ -1614,6 +1622,7 @@ function showHideSettings(settings) { } else if ($(this).val() === 'Signal') { $('.telegram').hide(); $('.email').hide(); + $('.gotify').hide(); $('.pushover').hide(); $('.whatsapp').hide(); $('.matrix').hide(); @@ -1622,6 +1631,7 @@ function showHideSettings(settings) { } else if ($(this).val() === 'Matrix') { $('.telegram').hide(); $('.email').hide(); + $('.gotify').hide(); $('.pushover').hide(); $('.whatsapp').hide(); $('.signal').hide(); @@ -1630,11 +1640,21 @@ function showHideSettings(settings) { } else if ($(this).val() === 'Discord') { $('.telegram').hide(); $('.email').hide(); + $('.gotify').hide(); $('.pushover').hide(); $('.whatsapp').hide(); $('.signal').hide(); $('.matrix').hide(); $('.discord').show(); + } else if ($(this).val() === 'Gotify') { + $('.telegram').hide(); + $('.email').hide(); + $('.discord').hide(); + $('.pushover').hide(); + $('.whatsapp').hide(); + $('.signal').hide(); + $('.matrix').hide(); + $('.gotify').show(); } }).trigger('change'); diff --git a/admin/words.js b/admin/words.js index ef43ebbd..b5ccb1a0 100644 --- a/admin/words.js +++ b/admin/words.js @@ -104,6 +104,8 @@ var _systemDictionary = { "Google Drive Path for iobroker backup": { "en": "Google Drive path for ioBroker backup", "de": "Google Drive Pfad für ioBroker Sicherung", "ru": "Путь для резервного копирования ioBroker", "pt": "Caminho do Google Drive para backup do iobroker", "nl": "Google Drive Path voor iobroker-back-up", "fr": "Google Drive Path pour la sauvegarde iobroker", "it": "Percorso di Google Drive per il backup di iobroker", "es": "Ruta de Google Drive para copia de seguridad de iobroker", "pl": "Ścieżka do Dysku Google do tworzenia kopii zapasowych iobroker", "uk": "Шлях Google Drive для резервного копіювання ioBroker", "zh-cn": "ioBroker 备份的 Google Drive 路径"}, "Google Drive path": { "en": "Google Drive path", "de": "Google Drive Pfad", "ru": "Путь", "pt": "Caminho do Google Drive", "nl": "Google Drive-pad", "fr": "Chemin Google Drive", "it": "Percorso di Google Drive", "es": "Ruta de acceso de Google Drive", "pl": "Ścieżka Dysku Google", "uk": "Шлях Google Drive", "zh-cn": "谷歌云端硬盘路径"}, "Google Drive: Yes": { "en": "Google Drive: Yes", "de": "Google Drive: Ja", "ru": "Google Диск: Да", "pt": "Google Drive: sim", "nl": "Google Drive: ja", "fr": "Google Drive: oui", "it": "Google Drive: sì", "es": "Google Drive: si", "pl": "Dysk Google: Tak", "uk": "Диск Google: так", "zh-cn": "谷歌驱动器:是的"}, + "Gotify": { "en": "Gotify", "de": "Gotify", "ru": "Gotify", "pt": "Gotify", "nl": "Gotify", "fr": "Gotify", "it": "Gotify", "es": "Gotify", "pl": "Gotify", "uk": "Gotify", "zh-cn": "Gotify"}, + "Gotify instance": { "en": "Gotify instance", "de": "Gotify Instanz", "ru": "Gotify пример", "pt": "Exemplo de identificação", "nl": "Vertaling:", "fr": "Gotify instance", "it": "Esempio di guadagno", "es": "Caso Gotify", "pl": "Gotyfikować", "uk": "Зареєструватися", "zh-cn": "评 注"}, "Grafana API-Key or Service Token": { "en": "Grafana API-Key or Service Token", "de": "Grafana API-Key oder Service Token", "ru": "Grafana API-Key или сервисный токен", "pt": "Gráfico API-Key ou Token de Serviço", "nl": "Grafana API-Key of Service Token", "fr": "Grafana API-Key ou jeton de service", "it": "Token API-Key o servizio Grafana", "es": "Grafana API-Key o Token de servicio", "pl": "Grafana API-Key or Service Token (ang.)", "uk": "API-ключ або маркер служби Grafana", "zh-cn": "Grafana API 密钥或服务令牌"}, "Grafana Backup": { "en": "Grafana", "de": "Grafana", "ru": "Grafana", "pt": "Grafana", "nl": "Grafana", "fr": "Grafana", "it": "Grafana", "es": "Grafana", "pl": "Grafana", "uk": "Графана", "zh-cn": "格拉法纳"}, "Grafana Hostname": { "en": "Grafana host name / IP", "de": "Grafana Hostname / IP", "ru": "Имя хоста / IP", "pt": "Nome / IP do host Grafana", "nl": "Grafana hostnaam / IP", "fr": "Nom d'hôte / IP Grafana", "it": "Nome host / IP Grafana", "es": "Nombre de host / IP de Grafana", "pl": "Nazwa / adres IP hosta Grafana", "uk": "Ім'я хосту Grafana / IP", "zh-cn": "Grafana 主机名/IP"}, diff --git a/io-package.json b/io-package.json index e025a076..407f916a 100644 --- a/io-package.json +++ b/io-package.json @@ -1,8 +1,34 @@ { "common": { "name": "backitup", - "version": "2.9.5", + "version": "2.9.7", "news": { + "2.9.7": { + "en": "URL Update\nFix redis Password", + "de": "URL aktualisieren\nRedis Passwort vergessen", + "ru": "URL Обновление\nFix редис Пароль", + "pt": "Atualização de URL\nCorrigir vermelho Senha", + "nl": "URL Update\nVertaling: Wachtwoord", + "fr": "URL Update\nCorrection redis Mot de passe", + "it": "Aggiornamento\nRipartizione Password", + "es": "Actualización de URL\nArreglar redis Contraseña", + "pl": "URL\nFix redis Password", + "uk": "Оновлення URL\nФіксований червоний Логін", + "zh-cn": "URL最新情况\nFix 重新定性 护照" + }, + "2.9.6": { + "en": "Gotify Notication added\ndependencies updated\nCopypath check added", + "de": "Gotify Notication hinzugefügt\naktualisierte abhängigkeiten\nCopypath Check hinzugefügt", + "ru": "Получить Notication добавлено\nзависимости обновлены\nПроверка Copypath добавлена", + "pt": "Gotify Notication adicionado\ndependências atualizadas\nVerificação de copypath adicionado", + "nl": "Vertaling:\nafhankelijkheid geüpdateerd\nBegrepen", + "fr": "Gotify Notication added\ndépendances mises à jour\nCopypath check added", + "it": "Gotify Notication aggiunto\ndipendenze aggiornate\nControllo Copypath aggiunto", + "es": "Gotify Notication added\ndependencias actualizadas\nChequeo de cómputo añadido", + "pl": "Gotify Notication (ang.)\naktualizacja\nKontrola Copypatha", + "uk": "Додана нотифікація\nоновлені залежності\nКопіювати чек додано", + "zh-cn": "提名\nb. 更新的依赖\n虫害检查" + }, "2.9.5": { "en": "dependencies updated\nFix redis Password", "de": "aktualisierte abhängigkeiten\nRedis Passwort vergessen", @@ -67,32 +93,6 @@ "pl": "ignorowanie Directory Build dla ESPHome dodały", "uk": "про нас Створіть каталог для ESPHome", "zh-cn": "忽视 ESPHome的布兰德名主任补充说" - }, - "2.9.0": { - "en": "mount option \"Cache Loose\" added\nESPHome Backup added\ndependencies updated", - "de": "mount Option \"Cache Loose\" hinzugefügt\nESPHome Backup hinzugefügt\naktualisierte abhängigkeiten", - "ru": "mount option \"Cache Loose\" добавлен\nESPHome Backup добавлен\nзависимости обновлены", - "pt": "opção de montagem \"Cache Loose\" adicionado\nESPHome Backup adicionado\ndependências atualizadas", - "nl": "mount optie \"Cache Loose\" toegevoegd\nVersterking toegevoegd\nafhankelijkheid geüpdateerd", - "fr": "option de montage \"Cache Loose\" ajouté\nESPHome Backup ajouté\ndépendances mises à jour", - "it": "opzione di montaggio \"Cache Loose\" aggiunto\nESPHome Backup aggiunto\ndipendenze aggiornate", - "es": "opción de montaje \"Cache Loose\" añadido\nESPHome Backup añadido\ndependencias actualizadas", - "pl": "\"Cache Loose\" dodał opcję \"Cache Loose\"\nESPHome Backup\naktualizacja", - "uk": "додано варіант кріплення \"Cache Loose\"\nESPHome Backup додано\nоновлені залежності", - "zh-cn": "增加的“每一”选择\nESPHome Back增加\nb. 更新的依赖" - }, - "2.8.7": { - "en": "fix restore in docker v9", - "de": "wiederherstellen in docker v9", - "ru": "исправить восстановление в docker v9", - "pt": "corrigir restauração no docker v9", - "nl": "herstellen in docker v9", - "fr": "restaurer dans docker v9", - "it": "fix ripristino in docker v9", - "es": "reparación de reparación en docker v9", - "pl": "odzyskanie odszkodowania v9", - "uk": "виправити відновлення в docker v9", - "zh-cn": "fix 复印机 v 9" } }, "title": "BackItUp", @@ -394,6 +394,10 @@ "whatsappNoticeType": "longWhatsappNotice", "whatsappOnlyError": false, "whatsappWaitToSend": 0, + "gotifyInstance": "gotify.0", + "gotifyNoticeType": "longGotifyNotice", + "gotifyOnlyError": false, + "gotifyWaitToSend": 0, "signalInstance": "signal-cmb.0", "signalNoticeType": "longSignalNotice", "signalOnlyError": false, diff --git a/lib/dropboxLib.js b/lib/dropboxLib.js index 16be7398..00ac6e1e 100644 --- a/lib/dropboxLib.js +++ b/lib/dropboxLib.js @@ -2,7 +2,7 @@ const axios = require('axios'); -const OAUTH_URL = 'http://dropboxauth.simateccloud.de/'; +const OAUTH_URL = 'https://dropboxauth.simateccloud.de/'; class dropbox { getAuthorizeUrl(log) { @@ -12,7 +12,7 @@ class dropbox { method: 'get', url: OAUTH_URL, headers: { - 'User-Agent': 'axios/0.21.1' + 'User-Agent': 'axios/1.6.2' }, responseType: 'json' }).catch(err => log.warn('getAuthorizeUrl Dropbox: ' + err)); @@ -89,7 +89,7 @@ class dropbox { method: 'get', url: OAUTH_URL, headers: { - 'User-Agent': 'axios/0.21.1' + 'User-Agent': 'axios/1.6.2' }, responseType: 'json' }).catch(err => log.warn('getClientID Dropbox: ' + err)); diff --git a/lib/execute.js b/lib/execute.js index 02a3c8e9..ee7b858c 100644 --- a/lib/execute.js +++ b/lib/execute.js @@ -238,6 +238,18 @@ function executeScripts(adapter, config, callback, scripts, code) { } break; + case 'gotify': + if (config[name] && config[name].enabled && config[name].notificationsType === 'Gotify') { + func = scripts[name]; + try { + options = JSON.parse(JSON.stringify(config)); + options[name].time = tools.getTimeString(options[name].systemLang); // provide date + } catch (e) { + callback('cannot parse config for gotify!!'); + } + } + break; + case 'signal': if (config[name] && config[name].enabled && config[name].notificationsType === 'Signal') { func = scripts[name]; @@ -311,6 +323,7 @@ function executeScripts(adapter, config, callback, scripts, code) { if (_options.pushover && !_options.pushover.enabled) delete _options.pushover; if (_options.email && !_options.email.enabled) delete _options.email; if (_options.whatsapp && !_options.whatsapp.enabled) delete _options.whatsapp; + if (_options.gotify && !_options.gotify.enabled) delete _options.gotify; if (_options.discord && !_options.discord.enabled) delete _options.discord; if (_options.dropbox && !_options.dropbox.enabled) delete _options.dropbox; if (_options.onedrive && !_options.onedrive.enabled) delete _options.onedrive; diff --git a/lib/oneDriveLib.js b/lib/oneDriveLib.js index 9ddb254d..df4e79b9 100644 --- a/lib/oneDriveLib.js +++ b/lib/oneDriveLib.js @@ -2,8 +2,7 @@ const axios = require('axios'); -const OAUTH_URL = 'http://onedriveauth.simateccloud.de/'; -//const redirect_uri = 'https://login.live.com/oauth20_desktop.srf'; +const OAUTH_URL = 'https://onedriveauth.simateccloud.de/'; const url = 'https://login.live.com/oauth20_token.srf'; const redirect_uri = 'https://login.microsoftonline.com/common/oauth2/nativeclient'; @@ -15,7 +14,7 @@ class onedrive { method: 'get', url: OAUTH_URL, headers: { - 'User-Agent': 'axios/1.2.6' + 'User-Agent': 'axios/1.6.2' }, responseType: 'json' }); @@ -40,7 +39,7 @@ class onedrive { method: 'get', url: OAUTH_URL, headers: { - 'User-Agent': 'axios/1.2.6' + 'User-Agent': 'axios/1.6.2' }, responseType: 'json' }); diff --git a/lib/scripts/32-redis.js b/lib/scripts/32-redis.js index e926f350..0625cecb 100644 --- a/lib/scripts/32-redis.js +++ b/lib/scripts/32-redis.js @@ -77,7 +77,6 @@ async function command(options, log, callback) { data = fs.readdirSync(pth); } catch (err) { callback && callback(err); - //callback = null; } } } @@ -97,7 +96,6 @@ async function command(options, log, callback) { err && log.error(err); if (callback) { callback(err); - //callback = null; } } else { compress({ @@ -113,7 +111,6 @@ async function command(options, log, callback) { stderr && log.error(stderr); if (callback) { callback(err, stderr); - //callback = null; } } else { log.debug(`Backup created: ${fileName}`); @@ -128,7 +125,6 @@ async function command(options, log, callback) { } catch (err) { log.debug(`redis tmp directory "${tmpDir}" cannot deleted ... ${err}`); callback && callback(err); - //callback = null; } if (callback) { callback(null, stdout); @@ -147,16 +143,9 @@ async function command(options, log, callback) { }); } else if (options.redisType == 'remote') { - if ((options.pass.startsWith(`"`) && options.pass.endsWith(`"`)) || (options.pass.startsWith(`'`) && options.pass.endsWith(`'`))) { - options.pass = options.pass; - } else if (options.pass != '') { - options.pass = `"${options.pass}"`; - } - const child_process = require('child_process'); try { - //child_process.exec(`redis-cli -u 'redis://${options.user}:${options.pass}@${options.host}:${options.port}' --rdb ${path.join(tmpDir, 'dump.rdb').replace(/\\/g, '/')}`, (error) => { child_process.exec(`redis-cli -u 'redis://${options.user != '' && options.pass != '' ? `${options.user}:${options.pass}@` : ''}${options.host}:${options.port}' --rdb ${path.join(tmpDir, 'dump.rdb').replace(/\\/g, '/')}`, (error) => { if (error) { clearInterval(timer); diff --git a/lib/scripts/60-cifs.js b/lib/scripts/60-cifs.js index da430807..26edd6e4 100644 --- a/lib/scripts/60-cifs.js +++ b/lib/scripts/60-cifs.js @@ -95,28 +95,29 @@ function command(options, log, callback) { } log.debug(`used copy path: ${dir}`); - //if (fs.existsSync(options.dir)) { - //copyFiles(options.dir, fileNames, log, options.context.errors, err => { if (fs.existsSync(dir)) { - copyFiles(dir, fileNames, log, options.context.errors, err => { - if (err) { - log.error(err); - options.context.errors.cifs = options.context.errors.cifs || err; - } - if (options.deleteOldBackup === true) { - if (cleanFiles(dir, options, options.context.types, options.deleteBackupAfter, log, options.context.errors)) { + if (dir == options.backupDir) { + callback && callback(`The storage path "${dir}" for copying is not configured correctly`); + } else { + copyFiles(dir, fileNames, log, options.context.errors, err => { + if (err) { + log.error(err); + options.context.errors.cifs = options.context.errors.cifs || err; + } + if (options.deleteOldBackup === true) { + if (cleanFiles(dir, options, options.context.types, options.deleteBackupAfter, log, options.context.errors)) { + !options.context.errors.cifs && options.context.done.push('cifs'); + } + } else { !options.context.errors.cifs && options.context.done.push('cifs'); } - } else { - !options.context.errors.cifs && options.context.done.push('cifs'); - } - if (callback) { - callback(err); - callback = null; - } - }); + if (callback) { + callback(err); + callback = null; + } + }); + } } else if (options.mountType === 'Copy') { - //callback(`Path "${options.dir}" not found`); callback && callback(`Path "${dir}" not found`); } else { callback && callback(); diff --git a/lib/scripts/90-gotify.js b/lib/scripts/90-gotify.js new file mode 100644 index 00000000..412caf16 --- /dev/null +++ b/lib/scripts/90-gotify.js @@ -0,0 +1,213 @@ +'use strict'; +const _ = require('../tools')._; + +function command(options, log, callback) { + + setTimeout(function () { + if (options.gotify.enabled && + options.adapter && + options.gotify.instance !== '' && + options.gotify.instance !== null && + options.gotify.instance !== undefined) { + + // Send Gotify Message + if (options.debugging) { + log.debug(`[${options.name}] used Gotify-Instance: ${options.gotify.instance}`); + } + + // analyse here the info from options.context.error and options.context.done + const errors = Object.keys(options.context.errors); + + if (!errors.length) { + let messageText = _('New %e Backup created on %t', options.gotify.systemLang); + messageText = messageText.replace('%t', options.gotify.time).replace('%e', `${options.name} ${options.name === 'iobroker' && options.gotify.hostName ? `(${options.gotify.hostName})` : ''}`); + if (options.ftp && options.ftp.enabled && options.gotify.NoticeType === 'longGotifyNotice') { + const m = _(', and copied / moved via FTP to %h%d', options.gotify.systemLang); + messageText += m.replace('%h', options.ftp.host).replace('%d', options.ftp.dir); + } + + if (options.cifs && options.cifs.enabled && options.gotify.NoticeType === 'longGotifyNotice') { + const m = _(', and stored under %h%d', options.gotify.systemLang); + messageText += m.replace('%h', options.cifs.mount).replace('%d', options.cifs.dir); + } + + if (options.dropbox && options.dropbox.enabled && options.gotify.NoticeType === 'longGotifyNotice') { + messageText += _(', and stored in dropbox', options.gotify.systemLang); + } + + if (options.onedrive && options.onedrive.enabled && options.gotify.NoticeType === 'longGotifyNotice') { + messageText += _(', and stored in onedrive', options.gotify.systemLang); + } + + if (options.googledrive && options.googledrive.enabled && options.gotify.NoticeType === 'longGotifyNotice') { + messageText += _(', and stored in google drive', options.gotify.systemLang); + } + + if (options.webdav && options.webdav.enabled && options.gotify.NoticeType === 'longGotifyNotice') { + messageText += _(', and stored in webdav', options.gotify.systemLang); + } + + messageText += '.'; + + if (options.gotify.onlyError === false || options.gotify.onlyError === 'false') { + options.adapter.sendTo(options.gotify.instance, 'send', { + priority: 4, + title: 'Backitup:', + contentType: 'text/plain', + message: messageText + }); + } + } else { + let errorMessage = _('Your backup was not completely created. Please check the errors!!', options.gotify.systemLang); + + errorMessage += '\n'; + + if (options.context.errors.iobroker) errorMessage += '\niobroker: ' + options.context.errors.iobroker; + if (options.context.errors.redis) errorMessage += '\nredis: ' + options.context.errors.redis; + if (options.context.errors.historyDB) errorMessage += '\nhistoryDB: ' + options.context.errors.historyDB; + if (options.context.errors.influxDB) errorMessage += '\ninfluxDB: ' + options.context.errors.influxDB; + if (options.context.errors.sqlite) errorMessage += '\nsqlite: ' + options.context.errors.sqlite; + if (options.context.errors.nodered) errorMessage += '\nnodered: ' + options.context.errors.nodered; + if (options.context.errors.yahka) errorMessage += '\nyahka: ' + options.context.errors.yahka; + if (options.context.errors.zigbee) errorMessage += '\nzigbee: ' + options.context.errors.zigbee; + if (options.context.errors.zigbee2mqtt) errorMessage += '\nzigbee2mqtt: ' + options.context.errors.zigbee2mqtt; + if (options.context.errors.javascripts) errorMessage += '\njavascripts: ' + options.context.errors.javascripts; + if (options.context.errors.jarvis) errorMessage += '\njarvis: ' + options.context.errors.jarvis; + if (options.context.errors.clean) errorMessage += '\nclean: ' + options.context.errors.clean; + + if (options.context.errors.mount) { + errorMessage += '\nmount: ' + options.context.errors.mount; + try { + const formatPass = options.cifs.pass.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + errorMessage = (options.cifs && formatPass ? errorMessage.replace(new RegExp(formatPass, 'g'), "****") : errorMessage); + } catch (e) { + // ignore + } + } + if (options.context.errors.mysql) { + errorMessage += '\nmysql: ' + options.context.errors.mysql; + try { + const formatPass = options.mysql.pass.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + errorMessage = (options.mysql && formatPass ? errorMessage.replace(new RegExp(formatPass, 'g'), "****") : errorMessage); + } catch (e) { + // ignore + } + } + if (options.context.errors.grafana) { + errorMessage += '\ngrafana: ' + options.context.errors.grafana; + try { + const formatPass = options.grafana.pass.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + errorMessage = (options.grafana && formatPass ? errorMessage.replace(new RegExp(formatPass, 'g'), "****") : errorMessage); + + const formatApiKey = options.grafana.apiKey.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + errorMessage = (options.grafana && formatApiKey ? errorMessage.replace(new RegExp(formatApiKey, 'g'), "****") : errorMessage); + } catch (e) { + // ignore + } + } + + if (options.context.errors.webdav) { + errorMessage += '\nwebdav: ' + options.context.errors.webdav; + try { + const formatPass = options.webdav.pass.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + errorMessage = (options.webdav && formatPass ? errorMessage.replace(new RegExp(formatPass, 'g'), "****") : errorMessage); + } catch (e) { + // ignore + } + } + if (options.context.errors.pgsql) { + errorMessage += '\npgsql: ' + options.context.errors.pgsql; + try { + const formatPass = options.pgsql.pass.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + errorMessage = (options.pgsql && formatPass ? errorMessage.replace(new RegExp(formatPass, 'g'), "****") : errorMessage); + } catch (e) { + // ignore + } + } + if (options.context.errors.ccu) { + errorMessage += '\nccu: ' + options.context.errors.ccu; + try { + const formatPass = options.ccu.pass.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + errorMessage = (options.ccu && formatPass ? errorMessage.replace(new RegExp(formatPass, 'g'), "****") : errorMessage); + } catch (e) { + // ignore + } + } + if (options.context.errors.ftp) { + errorMessage += '\nftp: ' + options.context.errors.ftp; + try { + const formatPass = options.ftp.pass.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + errorMessage = (options.ftp && formatPass ? errorMessage.replace(new RegExp(formatPass, 'g'), "****") : errorMessage); + } catch (e) { + // ignore + } + } + if (options.context.errors.dropbox) { + errorMessage += '\ndropbox: ' + options.context.errors.dropbox; + try { + const formatPass = options.dropbox.accessToken.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + errorMessage = (options.dropbox && formatPass ? errorMessage.replace(new RegExp(formatPass, 'g'), "****") : errorMessage); + } catch (e) { + // ignore + } + } + if (options.context.errors.onedrive) { + errorMessage += '\nonedrive: ' + options.context.errors.onedrive; + try { + const formatPass = options.onedrive.onedriveAccessJson.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + errorMessage = (options.onedrive && formatPass ? errorMessage.replace(new RegExp(formatPass, 'g'), "****") : errorMessage); + } catch (e) { + // ignore + } + } + if (options.context.errors.googledrive) { + errorMessage += '\ngoogledrive: ' + options.context.errors.googledrive; + try { + const formatPass = options.googledrive.accessJson.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + errorMessage = (options.googledrive && formatPass ? errorMessage.replace(new RegExp(formatPass, 'g'), "****") : errorMessage); + } catch (e) { + // ignore + } + + } + if (options.context.errors.cifs) { + errorMessage += '\ncifs: ' + options.context.errors.cifs; + try { + const formatPass = options.cifs.pass.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + errorMessage = (options.cifs && formatPass ? errorMessage.replace(new RegExp(formatPass, 'g'), "****") : errorMessage); + } catch (e) { + // ignore + } + } + if (options.context.errors.umount) { + errorMessage += '\numount: ' + options.context.errors.umount; + try { + const formatPass = options.cifs.pass.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + errorMessage = (options.cifs && formatPass ? errorMessage.replace(new RegExp(formatPass, 'g'), "****") : errorMessage); + } catch (e) { + // ignore + } + } + try { + errorMessage = errorMessage.replaceAll('undefined', ''); + } catch (e) { + // ignore + } + + options.adapter.sendTo(options.gotify.instance, 'send', { + priority: 4, + title: 'Backitup:', + contentType: 'text/plain', + message: errorMessage + }); + } + } + callback && callback(); + }, options.gotify.gotifyWaiting); +} + +module.exports = { + command, + ignoreErrors: true, + afterBackup: true +}; \ No newline at end of file diff --git a/main.js b/main.js index 493af5ea..066d666b 100644 --- a/main.js +++ b/main.js @@ -666,6 +666,19 @@ function initConfig(secret) { systemLang }; + const gotify = { + enabled: adapter.config.notificationEnabled, + notificationsType: adapter.config.notificationsType, + type: 'message', + instance: adapter.config.gotifyInstance, + NoticeType: adapter.config.gotifyNoticeType, + onlyError: adapter.config.gotifyOnlyError, + gotifyWaiting: adapter.config.gotifyWaitToSend * 1000, + hostName: adapter.config.minimalNameSuffix ? adapter.config.minimalNameSuffix.replace(/[.;, ]/g, '_') : '', + ignoreErrors: adapter.config.ignoreErrors, + systemLang + }; + const signal = { enabled: adapter.config.notificationEnabled, notificationsType: adapter.config.notificationsType, @@ -1139,6 +1152,7 @@ function initConfig(secret) { email, pushover, whatsapp, + gotify, signal, matrix, discord, @@ -1169,6 +1183,7 @@ function initConfig(secret) { email, pushover, whatsapp, + gotify, signal, matrix, discord, diff --git a/package-lock.json b/package-lock.json index 9aee368e..0df21360 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "iobroker.backitup", - "version": "2.9.5", + "version": "2.9.7", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "iobroker.backitup", - "version": "2.9.5", + "version": "2.9.7", "license": "MIT", "dependencies": { "@googleapis/drive": "^8.4.0", diff --git a/package.json b/package.json index 46db9d53..8ff4bcfe 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "iobroker.backitup", - "version": "2.9.5", + "version": "2.9.7", "engines": { "node": ">=16.0.0" },