# Variable zu früh gelöscht :(

**URL:** <https://community.symcon.de/t/variable-zu-frueh-geloescht/142999>\
**Category:** Skripte, PHP, SQL (Fragen)\
**Created:** [31. Januar 2026 um 19:55 UTC](https://community.symcon.de/t/variable-zu-frueh-geloescht/142999 "2026-01-31T19:55:43Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![Sascha](https://community.symcon.de/user_avatar/community.symcon.de/sascha/32/394_2.png) [@Sascha](https://community.symcon.de/u/Sascha)\
**Post date:** [31. Januar 2026 um 19:55 UTC](https://community.symcon.de/t/variable-zu-frueh-geloescht/142999/1 "2026-01-31T19:55:43Z")

</div>

Hallo Gemeinde,

ich habe meinen Homematic Temperaturfühler gegen einen Shelly Sensor getauscht. Leider habe ich zu früh meine alte Variable gelöscht bzw auch das ganze logging von 11 Jahren.

In einem Backup von letzter Woche habe ich die Variable noch in der Datenbank. Allerdings ist die Variablen ID gefühlt hundert mal in allen möglichen Ordnern eines jeden Jahrs (Ordnerstruktur der db)

Ich habe gerade versucht, uber die Suche nach meiner ID zu suchen und dann alle Treffer heraus zu kopieren. Aber leider heißen die Dateien fast alle gleich ☹

Habt ihr eine Idee, wie ich aus meiner backupd db (die physischen Ordner und dateien) meine Variable in die aktuelle db zurückspielen kann?

Liebe Grüße  
Sascha

---

<div class="post-metadata">

**Author:** ![NBA](https://community.symcon.de/letter_avatar_proxy/v4/letter/n/85f322/32.png) [@NBA](https://community.symcon.de/u/NBA)\
**Post date:** [1. Februar 2026 um 08:38 UTC](https://community.symcon.de/t/variable-zu-frueh-geloescht/142999/2 "2026-02-01T08:38:37Z")

</div>

… altes BackUp einspielen, neuen Shelly nochmal neu installieren ….

---

<div class="post-metadata">

**Author:** ![KaiS](https://community.symcon.de/user_avatar/community.symcon.de/kais/32/29625_2.png) [@KaiS](https://community.symcon.de/u/KaiS)\
**Post date:** [1. Februar 2026 um 08:50 UTC](https://community.symcon.de/t/variable-zu-frueh-geloescht/142999/3 "2026-02-01T08:50:46Z")

</div>

Man kann auch das Archiv von einer Variable zurückschieben.  
Ich glaube du musst die Dateien dann umbenennen. Genau weiß ich das gerade nicht mehr.

@paresy, reichte umbenennen der Dateien?

Grüße,  
Kai

---

<div class="post-metadata">

**Author:** ![Sascha](https://community.symcon.de/user_avatar/community.symcon.de/sascha/32/394_2.png) [@Sascha](https://community.symcon.de/u/Sascha)\
**Post date:** [3. Februar 2026 um 20:23 UTC](https://community.symcon.de/t/variable-zu-frueh-geloescht/142999/4 "2026-02-03T20:23:10Z")

</div>

Das mit dem Backup einspielen will ich umgehen, da ich jetzt eine Woche lang alle Homematic Devices gegen Shelly getauscht habe und es mir jetzt zum Schluß aufgefallen ist.  
Das würde für mich eine Woche Arbeit bedeuten.

Daher würde ich gerne noch auf @paresy seinen Vorschlag warten 🙂  
Vielleicht zaubert er (wie so oft) noch was aus seinem Hut ^^

Grüße,  
Sascha

---

<div class="post-metadata">

**Author:** ![KaiS](https://community.symcon.de/user_avatar/community.symcon.de/kais/32/29625_2.png) [@KaiS](https://community.symcon.de/u/KaiS)\
**Post date:** [3. Februar 2026 um 20:34 UTC](https://community.symcon.de/t/variable-zu-frueh-geloescht/142999/5 "2026-02-03T20:34:29Z")

</div>

Ich meine du kannst einfach nur die Dateien vom Archiv zurückspielen, wenn du noch weißt welche ID das war.  
Das könntest du sonst aus der alten Settings.json herausfinden.

Dann kannst du die Dateien soweit umbenennen, dass diese zur neuen ID passen. Das sollte meines Wissens nach funktionieren.

@Nall-chan weiß das bestimmt auch. 😃

Grüße,  
Kai

---

<div class="post-metadata">

**Author:** ![Nall-chan](https://community.symcon.de/user_avatar/community.symcon.de/nall-chan/32/18_2.png) [@Nall-chan](https://community.symcon.de/u/Nall-chan)\
**Post date:** [3. Februar 2026 um 20:46 UTC](https://community.symcon.de/t/variable-zu-frueh-geloescht/142999/6 "2026-02-03T20:46:39Z")

</div>

Ich hatte mir sogar irgendwo ein Skript zusammen gezimmert (wirklich nur rudimentär) was die Jahre und Monate durchgeht und die Dateien umbenennt. Muss ich morgen mal suchen ob ich das noch finde.

Obwohl das sollte z.b. Total Commander mit mehrfach umbenennen auch können.

Wichtig sind die Daten aus dem Ordnern mit Jahr und Monat.  
Steht auch hier genauere beschrieben:

> **[Datenformat IP-Symcon :: Automatisierungssoftware](https://www.symcon.de/de/service/dokumentation/modulreferenz/kern-instanzen/archive-control/datenformat/)**
>
> Automation Solution

Die Aggregationsdaten sind wurscht, die kann man im Archive Control neu erstellen lassen.

Edit: aber die ID der Variable muss man schon haben, sonst weiß man ja nicht welche Dateien aus einem Backup man braucht 😉

---

<div class="post-metadata">

**Author:** ![KaiS](https://community.symcon.de/user_avatar/community.symcon.de/kais/32/29625_2.png) [@KaiS](https://community.symcon.de/u/KaiS)\
**Post date:** [3. Februar 2026 um 20:47 UTC](https://community.symcon.de/t/variable-zu-frueh-geloescht/142999/7 "2026-02-03T20:47:18Z")

</div>

Genau, so meinte ich das auch.

Grüße,  
Kai

---

<div class="post-metadata">

**Author:** ![Dr.Niels](https://community.symcon.de/user_avatar/community.symcon.de/dr.niels/32/77368_2.png) [@Dr.Niels](https://community.symcon.de/u/Dr.Niels)\
**Post date:** [4. Februar 2026 um 07:55 UTC](https://community.symcon.de/t/variable-zu-frueh-geloescht/142999/8 "2026-02-04T07:55:52Z")

</div>

Mein Vorschlag wäre es auf einem Testsystem kurz das Backup einzuspielen. Dann per CSV Export die Daten der Variable extrahieren und die extrahierte Datei im Produktivsystem einspielen.

---

<div class="post-metadata">

**Author:** ![Sascha](https://community.symcon.de/user_avatar/community.symcon.de/sascha/32/394_2.png) [@Sascha](https://community.symcon.de/u/Sascha)\
**Post date:** [5. Februar 2026 um 16:36 UTC](https://community.symcon.de/t/variable-zu-frueh-geloescht/142999/9 "2026-02-05T16:36:25Z")

</div>

Hallo zusammen,

vielen Dank für eure Lösungsvorschläge.

Die ID weiß ich zum Glück noch ^^

@Nall-chan Wenn du den Code Schnipsel noch irgendwo hast, wäre das klasse 🙂

Ansonsten wäre dass das zurückspielen vom Backup auf ein Testsystem mein zweiter Weg.

Liebe Grüße

Sascha

---

<div class="post-metadata">

**Author:** ![Nall-chan](https://community.symcon.de/user_avatar/community.symcon.de/nall-chan/32/18_2.png) [@Nall-chan](https://community.symcon.de/u/Nall-chan)\
**Post date:** [5. Februar 2026 um 17:42 UTC](https://community.symcon.de/t/variable-zu-frueh-geloescht/142999/10 "2026-02-05T17:42:25Z")

</div>

Ich empfehle auch das vorgehen über ein Testsystem…

Das Skript war sehr mit der heißen Nadel gestrickt.  
Außerdem ist der Pfad zum lesen der Daten auch das Symcon DB Verzeichnis und kein externes Backup. Also entweder anpassen, oder die Dateien im db Ordner ablegen.

Auf eigene Gefahr:

```php
<?php

$DryRun = true; // true, nur Ausgabe ohne Aktionen, false => alles ausführen
$StartYear = 2012; // Start Jahr
$StartMonth = 1; // Start Monat im Start Jahr
$Factor = 1; // 1 für Dateien kopieren, Sonst Faktor zum Umrechnen von Werten (z.B. 1000 oder 0.001 .
$VarId = 51596; // VariablenID
$NewVarId = -1; // -1 VariablenID bleibt unverändert, sonst 5 stellige ID
$Backup = true;

######### Ab hier nicht ändern ####################
$DbPfad = IPS_GetKernelDir().'db'.DIRECTORY_SEPARATOR;
$M = $StartMonth;
$Y = $StartYear;
$NewVarId = ($NewVarId == -1 ? $VarId : $NewVarId);
do {
    do {
        $FileBackup = $DbPfad.$Y.DIRECTORY_SEPARATOR.sprintf('%02d',$M).DIRECTORY_SEPARATOR.$VarId.'.old';
        $FileRead = $DbPfad.$Y.DIRECTORY_SEPARATOR.sprintf('%02d',$M).DIRECTORY_SEPARATOR.$VarId.'.csv';
        $FileWrite = $DbPfad.$Y.DIRECTORY_SEPARATOR.sprintf('%02d',$M).DIRECTORY_SEPARATOR.$NewVarId.'.csv';
        if (file_exists($FileRead)) {
            if (!$DryRun) {
                rename($FileRead, $FileBackup); // Backup erstellen mit .old -> Das wird auch gelesen oder kopiert
            }
            if ($Factor == 1){
                echo 'Copy: '.$FileRead.' -> '.$FileWrite.PHP_EOL;
                if (!$DryRun) {
                    copy($FileBackup, $FileWrite);
                }
            } else {
                echo 'Transfrom: '.$FileRead.' -> '.$FileWrite.PHP_EOL;
                if (!$DryRun) {
                    if (($write = fopen($FileWrite, "w")) === FALSE) {
                        die('ERROR');
                    };
                    if (($read = fopen($FileBackup, "r")) !== FALSE) {
                        while (($data = fgetcsv($read, 1000, ",")) !== FALSE) {
                            $data[1] = $data[1]*$Factor;
                            fputcsv($write,$data);
                        }
                        fclose($read);
                    }
                    fclose($write);
                }
            }
            if (!$Backup){
                echo 'Delete Backup: '.$FileBackup.PHP_EOL;
                if (!$DryRun) {
                    unlink($FileBackup);
                }
            }
        }
        $M++;
    } while($M<=12);
    $M=1;
    $Y++;
} while($Y<=2025);
echo "----------------------\r\n";
echo "done";

```

---

<div class="post-metadata">

**Author:** ![KaiS](https://community.symcon.de/user_avatar/community.symcon.de/kais/32/29625_2.png) [@KaiS](https://community.symcon.de/u/KaiS)\
**Post date:** [5. Februar 2026 um 21:02 UTC](https://community.symcon.de/t/variable-zu-frueh-geloescht/142999/11 "2026-02-05T21:02:24Z")

</div>

Dafür könnte man echt ein Modul bauen. 😃  
Ach hätte ich mal mehr Zeit.

Grüße,  
Kai

---

<div class="post-metadata">

**Author:** ![Nall-chan](https://community.symcon.de/user_avatar/community.symcon.de/nall-chan/32/18_2.png) [@Nall-chan](https://community.symcon.de/u/Nall-chan)\
**Post date:** [5. Februar 2026 um 21:14 UTC](https://community.symcon.de/t/variable-zu-frueh-geloescht/142999/12 "2026-02-05T21:14:14Z")

</div>

Bloß nicht. 🤣  
Mal eben an der Datenbank rumschrauben sollte wirklich die Ausnahme sein.

---

<div class="post-metadata">

**Author:** ![KaiS](https://community.symcon.de/user_avatar/community.symcon.de/kais/32/29625_2.png) [@KaiS](https://community.symcon.de/u/KaiS)\
**Post date:** [5. Februar 2026 um 21:33 UTC](https://community.symcon.de/t/variable-zu-frueh-geloescht/142999/13 "2026-02-05T21:33:51Z")

</div>

Ist doch toll, wenn jeder sein System zerstören kann. 😃

Grüße,  
Kai

---

<div class="post-metadata">

**Author:** ![Sascha](https://community.symcon.de/user_avatar/community.symcon.de/sascha/32/394_2.png) [@Sascha](https://community.symcon.de/u/Sascha)\
**Post date:** [9. Februar 2026 um 18:04 UTC](https://community.symcon.de/t/variable-zu-frueh-geloescht/142999/14 "2026-02-09T18:04:30Z")

</div>

Vielen Dank für das Script 🙂  
Ja, ich setze mal ein Testsystem auf 🙂 Die Warnung war deutlich und ist angekommen 🙂

Ganz lieben Gruß  
Sascha
