[Modul] Sync für Dropbox

Ich denke noch ein Problem gefunden zu haben, warum es stecken bleiben konnte. Version 1.7 ist ab sofort über den Beta Kanal verfügbar. :slight_smile:

paresy

Mahlzeit,

ich habe es auch gerade nochmal getestet, aber leider auch ohne Erfolg.
Das Fehlerprotokoll habe ich mal angehängt, vielleicht hilft das ja?!

Schönen 2. Advent
Der BEM

Die Dropbox wird nicht synchronisiert. Ich habe den folgenden Fehler.

Hallo,

bei mir wird auch bei jedem Sync Versuch der folgende Fehler geworfen:

18.12.2023, 12:11:33 | TimerPool            | Sync (Dropbox) (Upload): 
Fatal error: Uncaught Exception: path/malformed_path/. in /var/lib/symcon/modules/.store/de.paresy.sync.dropbox/libs/Dropbox.php:43
Stack trace:
#0 /var/lib/symcon/modules/.store/de.paresy.sync.dropbox/libs/Dropbox.php(133): Dropbox\Dropbox::postRequest('https://content...', Array, '<?php\r\n\r\n# ToDo...')
#1 /var/lib/symcon/modules/.store/de.paresy.sync.dropbox/SyncDropbox/module.php(738): Dropbox\Files->upload('/xxxxxxxx@web...', '/var/lib/symcon...')
#2 /var/lib/symcon/scripts/__generated.inc.php(79): SyncDropbox->Upload()
#3 /-(1): SDB_Upload(22463)
#4 {main}
  thrown in /var/lib/symcon/modules/.store/de.paresy.sync.dropbox/libs/Dropbox.php on line 43

GIbt es eine Idee, woran es liegt ?

@zman0801 @brdiver677 Noch nicht. Ist das erst seit dem neuen Update? Könntest du mal im Debug vom Modul nachsehen, welche Datei er synchronisieren will und nicht kann? Ich vermute, dass ich diese ausschließen muss.

@bem Du müsstest bei dir entweder die maximale Dateigröße senken (ich vermute du hast die von den 20MB verstellt?) oder in der php.ini manuell das „memory_limit“ erhöhen auf z.B. 64M.

paresy

@paresy Ich glaube ich habe eine Ursache gefunden …

Wenn der Dateiname eines Skriptes z.B.
18.12.2023, 16:06:18 | Upload | Adding file... scripts/🟢_Beschattungsnotwendigkeit_pruefen_27112.ips.php. Size 1.98 kB
lautet. Geht es nicht.
Ich habe auf dem letzten Symcon-Event gesehen, dass jemand seine Instanzen mit GRÜN/ORANGE/ROT gekennzeichnet hatte und fand das echt super.

Anscheinend ist das der Show-Stopper.

Ich habe den Namen geändert und jetzt ist er weitergelaufen, bis zum nächsten Dateinamen, der so ein Zeichen enthält.

Vielleicht lässt es sich ja verifizieren.

Ich hab es manuell versucht und Dropbox lässt mich nicht. D.h. wir können da nichts gegen tun. :frowning:

Warum muss das Icon im Dateinamen sein? Im normalen Namen im Objektbaum dürfte es ja sein.

paresy

Hallo,

es muss nicht im Dateinamen sein…
Ich habe mir nur ein Skript geschrieben, dass regelmäßig meine Skripte in Name und ObjektID umbenennt. Das mache ich, damit ich meine Skripte im Skript-Ordner besser finden kann. (z.B. mit VisualStudio Code)
Ich werde diese wieder umbenennen und mein Skript modifizieren.

Das war reiner Zufall und nicht beabsichtigt. Evtl. haben andere auch „seltsame“ Zeichen im Dateinamen.

Im Objektbaum reicht mir ja der farbige Punkt.
Danke.

1 „Gefällt mir“

Trotzdem echt spannend dass die solche Dateinamen nicht erlauben. Ich hatte versucht die Dokumentation zu wälzen um herauszufinden was nicht erlaubt bist, aber war nicht wirklich fündig. Sonst hätte ich direkt einen Filter vorschalten können.

paresy

Scheint zu laufen…
Habs die Dateinamen ändern lassen.
Ist anstandslos durchgelaufen.

1 „Gefällt mir“

Moin,
kann mir einer sagen, was ich jetzt machen muss, damit es wieder läuft?
Ich habe eine Symbox und weis leider nicht, wie ich dort etwas an den Dateinamen ändern kann. Vor allem dauerhaft.

Der BEM

Wurde doch schon weiter oben beschrieben. Hast du das gemacht ? Deine Fehlermeldung ist ja eine andere und hat was mit der Dateigröße zu tun, nicht mit dem Namen.

Grüße
Björn

Ah okay… dann hab ich da etwas durcheinandergebracht.
Ich hab mal die Dateigröße von 2000 wieder runter auf 20MB gestellt :woozy_face:

Mal gucken ob er jetzt durchläuft.

Das hat leider noch nicht geklappt.

Ist bei mir bei der Desktop.ini stehengeblieben. Ich habe sie gelöschte jetzt läuft es erstmal wieder. Na mal schauen.

Das ist mein letzter Stand.

Schau mal bitte im Debug nach welche Datei das Problem macht.

paresy

Da die Console gewohnterweise immer mal wieder abbricht, habe ich hier nur die letzten Einträge, aber genau an der Position hängt er auch jetzt seit fast 10 Minute.

Hilft dir das?

Könntest du das ggf. auch teilen, wäre auch für mich mal ganz interessant das so umzusetzen.
Danke und Grüße,
Doc

Hallo Doc,

kein Problem.
Anmerkung:

  • Mein Symcon läuft unter Linux
<?php
# (c) 25.03.2022 - brdiver677
#
# Benennt alle bzw. nur Skripte nach folgendem Muster "NAME_ObektID_ips.php" um
# Funtkioniert bei mir unter Linux
# 
# - Unregelmäßigkeiten bzgl. der Anzahl entdecken
# - bessere Lesbarkeit und externe Programmierung
# - einfacheres Auffinden von Dateien
#
#  1.)JSON Dateien (Ablaufpläne) überspringen -> tbd
#  2.)Probleme waren Umlaute und Klammern etc. das sonst der Dateiname mit '' <Hochkomma> eingeschlossen wurde, daher die beiden functions


# Modus: Testmodus =    true -> keine Änderungen nur Anzeige
#                       false -> Änderungen werden geschrieben

$testmodus = true;

# Pfad zum Skriptverzeichnis
$pfad = IPS_GetKernelDir()."scripts";

# PHP-Dateien zählen
$handle=opendir ($pfad);     
while ($datei = readdir ($handle))  
    { 
    if(strpos($datei,".ips.php")!==false)  
        { 
        $datei =explode(".",$datei); 
        $php_files[]=$datei[0];   
        } 
    } 
closedir($handle); 
$files_anz=count($php_files);


# JSON-Datein / Automationen Z#hlen
$handle=opendir ($pfad);     
while ($datei = readdir ($handle))  
    { 
    if(strpos($datei,".ips.json")!==false)  
        { 
        $datei =explode(".",$datei); 
        $json_files[]=$datei[0];   
        } 
    } 
closedir($handle); 
$automations=count($json_files);

# Anzahl der Skripte, die IP-Symcon kennt ermitteln
$scripts = IPS_GetScriptList(); 
$skripts_anz=count($scripts);

echo "Anzahl der Files mit Endung .ips.php  : \t".$files_anz."\n"; 
echo "Anzahl der Files mit Endung .ips.json  : \t".$automations."\n"; 
echo "Anzahl der Scripte gem. IPSymcon      : \t".$skripts_anz."\n"; 


if (($files_anz+$automations) == $skripts_anz)
{
echo "Keine Unregelmäßigkeiten bei der Anzahl der Skripte erkannt !\n"; 
}
else
{
echo "Unregelmäßigkeiten bei der Anzahl (".($skripts_anz- ($files_anz+$automations))." Skripte bzw. Ablaufpläne) der Skripte erkannt ! Unbedingt Prüfen (ggf. verwaiste Dateien im Verzeihnis!\n"; 
};
echo "\n\n";

# Umbennennung prüfen

if ($testmodus)
    {
    echo "\nUmbenennung prüfen (Es werden keine Änderungen durchgeführt)\n"; 
    }
else {
    echo "\nUmbenennung starten... (Es werden Änderungen durchgeführt. !!!)\n"; 
    }
echo "----------------------------------------------------------------------\n\n"; 


foreach ($scripts as $script)
{
$Dateiname=IPS_GetScriptFile($script);
$letze_3_Zeichen = substr ($Dateiname, -3);

    if ($letze_3_Zeichen=="php")
        {
        $Dateiname=IPS_GetScriptFile($script);
        $Neuer_Dateiname= IPS_GetName($script)."_".$script.".ips.php";
        $safe_names = safe_names($Neuer_Dateiname);
        $neuer_name = ersetze_umlaute($Neuer_Dateiname);
        # Probleme mit den speziellen Sonderzeichen müssen vorher geprüft werden und vorab im Objektbaum geändert werden, da sonst nach dem Umbennen DropBox Sync nicht mehr läuft
        if((strpos($neuer_name, '🟢') !== false) OR (strpos($neuer_name, '🟡') !== false) OR (strpos($neuer_name, '🟠') !== false))
            {
            echo "Sonderzeichen entfernen: ".$neuer_name."\n";
            };

            if ($Dateiname === $neuer_name)
            {
            #echo "Skipped: ".$Dateiname."\n"; 
            }
            else
            {
            echo  "Alter Name: ".$Dateiname." Neuer Dateiname: ".$neuer_name."\n";

            if ($testmodus)
                {
                echo "\n**** Keine Änderungen durchgeführt.\n"; 
                 }
            else {
            rename($Dateiname,$neuer_name);
            IPS_SetScriptFile($script, $neuer_name);; 
            echo "\n**** Umbenennung abgeschlosen."; 
                }
            }
        }
}

############ funktion BLOCK #################

function safe_names($filename) 
{ 
    $filename = htmlspecialchars($filename, ENT_QUOTES, 'UTF-8'); 
    return $filename; 
} 

function ersetze_umlaute($filename) 
{ 
 // Umlaute ersetzen
        $ers = array(

        ' ' => '_',
        'Ä' => 'Ae',
        'Ö' => 'Oe',
        'Ü' => 'Ue',
        'ä' => 'ae',
        'ö' => 'oe',
        'ü' => 'ue',
        'ß' => 'ss',
        '(' => '_',
        ')' => '_'
);
$fertig = strtr($filename,$ers);
    return $fertig; 
}