[Modul] Sync für Dropbox

Jetzt im Beta-Kanal mit zwei neuen Variablen:

  • Übertragene Daten in Megabyte
  • Letztes abgeschlossenes Backup

paresy

PS: Kann gut mit dem Watchdog kombiniert werden.

Ich frage bzw. würde nochmal gerne den Wunsch nach einer Verschlüsselung äußern.
Eine Passwort encryptions wäre ja schon super. Ich denke mal es gibt vlt crypt php module die man nutzen könnte?

Daran habe ich leider kein Interesse bzw. auch keine Zeit dafür. Falls aber jemand dort was passendes entwickelt, nehme ich gerne PRs entgegen.

Problem, welches nämlich gelöst werden muss: Du musst ein Pendant bauen, welches im Problemfall die Entschlüsselung übernimmt. Aktuell kannst du den Inhalt vom Backup Ordner zippen und in die SymBox o.ä. wieder hochladen -> Fertig. Mit Verschlüsselung musst du jede Datei entschlüsseln, da wir auch jede Datei einzeln synchronisieren.

paresy

Ok, Danke für die Begründung [emoji1360]
Ist verständlich, was da Eure Gedanken zu sind.

Ich nutze BOXCRYPTOR um Backups in der Cloud zu verschlüsseln. Aber ein paar Code Schnipsel hätte ich auch fürs selber machen

Hier der Code um Daten zu verschlüsseln :

<?php

$secret_key = openssl_random_pseudo_bytes (36);


$plaintext = serialize($access_data);
$cipher = "aes-128-gcm";
if (in_array($cipher, openssl_get_cipher_methods()))
{
    $ivlen = openssl_cipher_iv_length($cipher);
    $iv = openssl_random_pseudo_bytes($ivlen);
    $ciphertext = openssl_encrypt($plaintext, $cipher, $secret_key, $options=0, $iv, $tag);
}


$keyring['secret_key'] = bin2hex($secret_key);
$keyring['cipher'] = $cipher;
$keyring['ivlen'] = $ivlen;
$keyring['iv'] = bin2hex($iv);
$keyring['tag'] = bin2hex($tag);

print_r($keyring);

//Speichere die Schlüssel
SetValueString(53985,serialize($keyring));

// Speichere die Daten
SetValueString(23585,$ciphertext);

 

und hier der Code um zu entschlüsseln :

<?php

$ciphertext = GetValueString(23585);
$keyring_hex = @unserialize(@GetValueString(53985));

$keyring['secret_key'] = hex2bin($keyring_hex['secret_key']);
$keyring['iv'] = hex2bin($keyring_hex['iv']);
$keyring['tag'] = hex2bin($keyring_hex['tag']);
$original_plaintext = openssl_decrypt($ciphertext, $keyring_hex['cipher'], $keyring['secret_key'], $options=0, $keyring['iv'],$keyring['tag']);
$access_data = @unserialize($original_plaintext);


//print_r($keyring_hex);
print_r($access_data);

Vielleicht hilft das ja

Danke paresy für die Ergänzung der Variablen. Wäre es eventuell noch möglich eine Variable hinzu zufügen wie groß das gesamt Backup ist? Dann hätte man direkt alles in einem Blick.

Hallo Paresy,

vielen Dank das hilft schon mal ein ganzes Stück weiter!:loveips:

Joachim

@paresy: Kannst du den Pfad-Filter mir mal erklären? ich habe „/var/lib/symcon/cams“ eingetragen, weil ich die Kamera-Bilder nicht wollte, aber er synchronisiert sie immer wieder…

bei mir funktioniert es mit

cam;db;sounds/cache;backup/IPSLibrary_Load

Nimm mal nur den Verzeichnis-Namen nach Symcon/, also: cams.
Dann dürfte es klappen. Falls du mehrer Verzeichnisse ausklammern willst, dann mit „;“ trennen.

bumaas wahr schneller.

OK, so gehts. Danke. Sollte in die Doku.

Hallo paresy,

ich hatte die ganze Zeit die Stable ohne Fehler laufen. Seit dem Wechsel auf die Beta heute läuft zwar das Backup durch, aber es erscheint eine Fehlermeldung:

14.06.2020, 18:53:42 | TimerPool            | Sync (Dropbox) (Upload): <br />
<b>Notice</b>:  Undefined offset: 0 in <b>C:\ProgramData\Symcon\modules\.store\de.paresy.sync.dropbox\SyncDropbox\module.php</b> on line <b>629</b><br />

IPS 5.4 auf Win 10.

Kannst du damit etwas anfangen?

VG Alex

Jupp. Und ein Fix ist ab sofort online. Danke!

paresy

Super, hat geklappt.
Allerdings erst beim zweiten Versuch. Ich musste erst die Instanz einmal deaktivieren und wieder aktivieren, danach hat es wunderbar funktioniert.
Beim ersten Versuch kam:

14.06.2020, 23:39:20 | TimerPool            | Sync (Dropbox) (Sync): <br />
<b>Fatal error</b>:  Maximum execution time of 90 seconds exceeded in <b>C:\ProgramData\Symcon\modules\.store\de.paresy.sync.dropbox\libs\vendor\lukebaird\dropbox-v2-php-sdk\sdk\Dropbox.php</b> on line <b>48</b><br />
Abort Processing during Fatal-Error: Maximum execution time of 90 seconds exceeded
   Error in Script C:\ProgramData\Symcon\modules\.store\de.paresy.sync.dropbox\libs\vendor\lukebaird\dropbox-v2-php-sdk\sdk\Dropbox.php on Line 48

In den PHP-Informationen war der Aufruf rot markiert und eingefrohren bis die 90 Sek. vorbei waren. Das passierte noch vor dem scannen vom Verzeichnis.

Aber jetzt funktioniert es und das ist die Hauptsache.

Vielen Dank. Ein echt klasse Modul.

VG Alex

Die Tage habe ich das wieder beobachtet. Das Syncen klappt nach dem manuellen erstmaligem ausführen ein paar Tage und dann ist wieder Schluss. Bin ich der einzige mit dem Phänomen?

Neuste Symcon Version auf Win 10.

Hallo Leute,

heute morgen war wieder Schluss, dank der neuen Statusvariablen konnte ich mir aber eine Benachrichtigung zusenden und es jetzt wieder manuell starten.

Ich vermute mal: Ende war gegen 02:06 Uhr, könnte es sein, dass es mit der Zwangstrennung zusammenfällt? Wenn also der Prozess dann unterbrochen wird, dass dieses nicht abgefangen wird?

Joachim

Hallo,
bei mir war es das letzte Mal am 13.07.2020 um 14:41 Uhr.

…wenn nicht mit der Zwangstrennung, könnte das mit einem Internetausfall in Verbindung stehen?

Hatte keinen Internet Ausfall zumindest nicht laut Unifi Controller. Ich glaube auch nicht das es damit was zu tun hat. Ich weiß jetzt nicht die genauen Tage, aber würde mal sagen das es ca. 3 Tage funktioniert und dann auf einmal nicht mehr. Vielleicht liegt es an Dropbox selber, aber dann müssten ja mehrere User Probleme haben damit. Ich führe jetzt mal den manuellen Start aus und dann notiere ich mir das mal.

Bleibt denn im Fehlerfall der „Sync“ Thread in den PHP Informationen hängen?

paresy