Wochenplan abspeichern in eine Datei

Hallo zusammen

Ist es möglich die Einstellungen die ich in einem Wochenplan erstellt habe abzuspeichern.
Es geht darum wenn etwas schief geht das ich die Einstellungen wieder zurück holen kann.

Danke euch im voraus

GrafvonSocke

Je nachdem wie fit du mit PHP bist. In der Doku sind alle API Befehle zum Konfigurieren des Plans drin. Abspeichern sollte auch eher leicht sein. Wieder einspielen erfordert ein paar mehr Zeilen Quellcode. Versuch es doch mal :slight_smile:

paresy

Ich hätte da auch Interesse, wenn es ein fertiges Script gibt.

Hallo,
hab mal ein Function „SaveWeekplanToFile“ zum abspeichern gebaut

<?
//Einzelnen Wochenplan sichern
$ID = 12345;
SaveWeekplanToFile($ID);


//ALLE WOCHENPLAENE SICHERN ...
foreach(IPS_GetEventList() as $EventList)
  {
   if (IPS_GetEvent($EventList)['EventType'] == 2)
      {
       SaveWeekplanToFile($EventList);
       
       //oder wenn EIGENER NAME gewunscht bzw. unter ID=0 anordnen
       //SaveWeekplanToFile($EventList,"TEST_".$EventList,0);
      }
  }



/****************************************************************************
SaveWeekplanToFile,
  schreibt ein Backupfile und Scriptreference fuer einen Wochenplan

  SaveWeekplanToFile(WochenplanID,[BackupName],[ParentID])

  [BackupName] = NULL
                 ==> somit wird "WeekplanSave_" + ID + UHRZEIT genommen
  [ParentID]   = NULL
                 ==> $_IPS['SELF'] genommen und der Script unterhalb
                     des Aufrufscripts angelegt

Example: SaveWeekplanToFile(1234);
         oder
         SaveWeekplanToFile(1234,"TEST",2245)

ReleaseNotes:
13.05.2016 tgusi74
 + Function erstellt und geprüft

*****************************************************************************/

function SaveWeekplanToFile($ID, $BackupName=NULL, $ParentID=NULL)
 {
  $FileContent  = "<?" . "
";

  $e = IPS_GetEvent($ID);
  if ($e['EventType'] != 2)
     {
      echo ("Bei der ID= " . $ID . " handelt es sich um keinen Wochenplan !! ==> ABBRUCH !!" . "
");
      return;
     }


  $FileContent .= "//WeekplanBackup ------------------------------------" . "
";
  $FileContent .= "//BackupDate   = " . date("d.m.Y H:i:s") . "
";
  $FileContent .= "//WeekplanID   = " . $ID . "
";
  $FileContent .= "//WeekplanName = '" . IPS_GetName($ID) . "'" . "
";
  $FileContent .= "//---------------------------------------------------" . "
";
  $FileContent .= "
";
  $FileContent .= "$"."ID=" . $ID . ";" . "
";
  $FileContent .= "
";

  $FileContent .= "//Delete all Groups ... "."
";

  for($i=0;$i<=6;$i++)
     {
      $FileContent .= "@IPS_SetEventScheduleGroup(" . "$" ."ID"
                                                    . ","
                                                    . $i
                                                    . ","
                                                    . "0"
                                                    . ")" . ";" . "
";
     }

  $FileContent .= "for(" . "$" . "i=0;" . "$". "i<=100;". "$" ."i++)" . "
";
  $FileContent .= "   {" . "
";
  $FileContent .= "    @IPS_SetEventScheduleAction(" . "$" ."ID"
                                                     . ","
                                                     . "$" ."i"
                                                     . ","
                                                     . chr(39) . chr(39)
                                                     . ","
                                                     . -1
                                                     . ","
                                                     . chr(39) . chr(39)
                                                     . ")" . ";" . "
";

  $FileContent .= "   }" . "
";
  $FileContent .= "
";

  $FileContent .= "//RESTORE ACTIONS + + + + + + + + + + + + + + + + + + + + + + + +" . "
";

  foreach($e['ScheduleActions'] as $a)
    {
     $FileContent .= "IPS_SetEventScheduleAction(" . "$" ."ID"
                                                   . ","
                                                   . $a['ID']
                                                   . ","
                                                   . chr(39) . $a['Name'] . chr(39)
                                                   . ","
                                                   . $a['Color']
                                                   . ","
                                                   . chr(39) . $a['ScriptText'] . chr(39)
                                                   . ")" . ";" . "
";
    }


  $FileContent .= "
";
  $FileContent .= "//RESTORE ScheduleGroups + + + + + + + + + + + + + + + + + + + + + + + +"."
";

  //Durch alle Gruppen gehen
  foreach($e['ScheduleGroups'] as $g)
    {
     $FileContent .= "
";
     $FileContent .= "//Group " . $g['ID'] . "
";
     $FileContent .= "IPS_SetEventScheduleGroup(" . "$" ."ID"
                                                  . ","
                                                  . $g['ID']
                                                  . ","
                                                  . $g['Days']
                                                  . ")" . ";" . "
";
     $FileContent .= "
";


     foreach($g['Points'] as $p)
       {
        $FileContent .= "IPS_SetEventScheduleGroupPoint(" . "$" ."ID"
                                                          . ","
                                                          . $g['ID']
                                                          . ","
                                                          . $p['ID']
                                                          . ","
                                                          . $p['Start']['Hour']
                                                          . ","
                                                          . $p['Start']['Minute']
                                                          . ","
                                                          . $p['Start']['Second']
                                                          . ","
                                                          . $p['ActionID']
                                                          . ")" . ";" . "
";
                                                                                  
       }

    }


  $FileContent .= "
";
  $FileContent .= "?>";

  if ($BackupName != NULL)
     {
      $ScriptName = $BackupName;
     }
  else
     {
      $ScriptName = "WeekplanSave_" . $ID . "_" . date("YmdHis"); 
     }
        
  $ScriptID = IPS_CreateScript(0);
  $Script = IPS_GetScript($ScriptID);
  rename(IPS_GetKernelDir() . '/scripts/' . $Script['ScriptFile'], IPS_GetKernelDir() . '/scripts/' . $ScriptName . ".PHP" );
  IPS_SetScriptFile($ScriptID, $ScriptName . ".PHP");
  IPS_SetName($ScriptID, $ScriptName);

  if (($ParentID !== NULL) && ($ParentID >= 0) && (IPS_ObjectExists($ParentID) == True) )
     {
      IPS_SetParent($ScriptID,$ParentID);
     }
  else
     {
      IPS_SetParent($ScriptID,$_IPS['SELF']);
     }

  IPS_SetScriptContent($ScriptID, $FileContent);
 }
      
?>

… das zurücklesen (RESTORE) passiert dann in dem man eben das Backupfile ausführt ==> Testet aber erstmals mit einer TESTINSTANZ !!! (kann fuer nichts garantieren ob sich alle Konstellation ruecksichern lassen, speziell wenn man Code direkt in den Actions hat)

Frage,
was sollte man noch mitabspeichern ?? (eventuell Zustand AKTIV / INAKTIV)

Viel Spass,
tgusi74

Hallo tgusi74,

vielen Dank für das Skript :slight_smile:

Ich bin gerade dabei Sicherungsskripte zu schreiben, die bei einer Übertragung von IPS vom Test- auf das Produktivsystem ein erneutes Eingeben gespeicherter Werte, wie z. B. serialisierte Daten für Homematic Heizungsgruppen usw. verhindern sollen, kam mir dieses Skript für die Wochenpläne sehr gelegen :wink:

Gruß
Hans