bereits im Zielsystem bestehende WFC-Items werden NICHT überschrieben, // 1=> existierende Objekte werden überschrieben (default) // Copy-Parameter (1: Objekte werden im Zielsystem installiert; 0: Objekte werden nicht installiert) +++++++++++++++++ $VarProfile = 1; // 1: überschreibt vorhandene Profile im Zielsystem, 0: installiert nur neue Profile # !!! die folgende Option mit äußerster Vorsicht nutzen (Default-Wert 0)!!! # $existsScriptsoverwrite = 0; // 1: im Zielsystem existierende Scripte (=benamste Scriptfiles) werden überschrieben ############################### Main Area ############################################################################ ##### Project Exporter Comment: Projekt-Export Rasenmäher (Quell-ID: 42020) vom 14.12.2014 15:53 ##### // IPS Version detektieren $IPS_VERSION = IPS_GetKernelVersion(); // Inventorys laden $MessageProkoll = array(); $Inv = ObjectInventory(); $VProfInv = VarProfileInventory(); if(function_exists('loadFileExportInventory')) { $ExpFileInv = loadFileExportInventory(); if($ExpFileInv[0] != NULL) createExportFiles($ExpFileInv); } // Parameters-Array erzeugen $Parameters = array('VarProfile'=>$VarProfile, 'ScrOverwrite'=>$existsScriptsoverwrite, 'WFCItems'=>$WFC_existItemoverwrite, 'Update'=>0); // letztes Logfile finden & Updatemodus setzen $lastLog_ID = findlastLogfile(); if($lastLog_ID > 0) { $Parameters['Update'] = 1; include $lastLog_ID.'.ips.php'; // last Inventory laden $lastInv = ObjectInventoryProtocol(); // Meldungsausgabe if(isset($lastInv[0])) { $MessageProkoll['Info'][] = "#1004 letztes Inventory aus Protokollfile geladen"; } // Last Inventory initialisieren $InvData = explode(';', substr(preg_replace("/\r|\n/s", "", $lastInv[1]),0, -1)); $InvObjID = (int)explode(',', $InvData[0])[1]; $lastInvObj = createlastInventoryObjects($InvObjID); // Meldungsausgabe if(IPS_ObjectExists((int)$lastInvObj[0]['newObjectID'])) { $MessageProkoll['Info'][] = "#1005 bestehendes Zielprojekt für Update gefunden: ".$lastInvObj[0]['ObjectName']." ID#".$lastInvObj[0]['newObjectID'].""; } else { $MessageProkoll['Failure'][] = "#1025 Fehler: kein bestehendes Zielprojekt gefunden"; exit("Scriptabbruch: kein bestehendes Zielprojekt gefunden! Nur Neu-Installation möglich,\nbitte alle Child-Files unterhalb dieses Scripts löschen!"); } } $MessageProkoll['InstallParameters'] = $Parameters; // Funktionsaufrufe // Variablenprofile aus Profile-Inventory holen und Profil-Baum generieren $VarProfile = createVarProfileInventory(); // Variablenprofile anlegen (abhängig von Parameters) createVarProfile($VarProfile); // Projekt Root-Element aus Inventory generieren und anlegen $ObjectTree = createInventoryObjects(); // Child-Objekte vom Root aus Inventory generieren und anlegen $ObjInstallTree = createObjectsTree($ObjectTree); // Funktion zum Verlinken aller neu instalierten Elemente linknewObjects($ObjInstallTree); // Funktion zum Installieren der WFC-Items installWFC_Items($WFC_TargetID); // Install-Script ins Config-Verzeichnis verschieben moveInstallScripttoConfig(); // Installationsprotokoll erzeugen $InstProtocol = createObjInventoryProtocol($ObjInstallTree); // Script self-renaming IPS_SetName($_IPS['SELF'], 'Rasenmäher (Quell-ID: 42020) 2014_12_14-15_53'.', Ziel-ID: '.$ObjInstallTree[0]['newObjectID']); // Installationsprotokoll schreiben CreateProtocolFile($InstProtocol); // ++++++++++++++ Script-Core +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // prüft, ob Logfiles unterhalb des Export-Scripts hängen und gibt die ID des letzten Logfiles aus +++++++++++++++++ function findlastLogfile() { $Childs = IPS_GetChildrenIDs($_IPS['SELF']); $ScrTS = 0; if(isset($Childs[0])) { $ScrTS = 0; $ScrID = 0; for($i=0;$i 0) && ($Object['isConfigTree'] == 0)) { $Cat_ID = (int)$Object['newObjectID']; // prüfen, ob Kategorie tats. noch existiert (wenn nicht: anlegen) if(!IPS_ObjectExists($Cat_ID)) $Cat_ID = IPS_CreateCategory(); IPS_SetName($Cat_ID, $Object['ObjectName']); IPS_SetHidden($Cat_ID, (bool)$Object['ObjectIsHidden']); IPS_SetPosition($Cat_ID, (int)$Object['ObjectPosition']); IPS_SetInfo($Cat_ID, $Object['ObjectInfo']); IPS_SetIcon($Cat_ID, $Object['ObjectIcon']); if(isset($Cat_ID, $Object['newParentID'])) IPS_SetParent($Cat_ID, (int)$Object['newParentID']); if($Cat_ID > 0) $MessageProkoll['Install']['OK'][] = "#3023 Kategorie-Objekt ".$Object['ObjectName'].", ID #".$Cat_ID." existiert (Update ein)"; $MessageProkoll['Install']['OK'][] = "#3025 Kategorie-Objekt ".$Object['ObjectName'].", ID #".$Cat_ID." neu konfiguriert"; } elseif((@$Object['isConfigTree'] == 0) || (@$Object['newObjectID'] == 0) || (!IPS_ObjectExists((int)$Object['newObjectID']))) { $Cat_ID = IPS_CreateCategory(); $Object['newObjectID'] = $Cat_ID; if($Cat_ID > 0) $MessageProkoll['Install']['OK'][] = "#3022 Kategorie-Objekt ".$Object['ObjectName'].", neuID #".$Cat_ID." angelegt"; IPS_SetName($Cat_ID, $Object['ObjectName']); IPS_SetHidden($Cat_ID, (bool)$Object['ObjectIsHidden']); IPS_SetPosition($Cat_ID, (int)$Object['ObjectPosition']); IPS_SetInfo($Cat_ID, $Object['ObjectInfo']); IPS_SetIcon($Cat_ID, $Object['ObjectIcon']); if(isset($Cat_ID, $Object['newParentID'])) IPS_SetParent($Cat_ID, (int)$Object['newParentID']); $MessageProkoll['Install']['OK'][] = "#3025 Kategorie-Objekt ".$Object['ObjectName'].", ID #".$Cat_ID." neu konfiguriert"; if($Cat_ID == 0) $MessageProkoll['Install']['Failure'][] = "#3021 Kategorie-Objekt ".$Object['ObjectName'].", , altID #".$Object['ObjectID']." Neuanlage fehlgeschlagen"; } else { $MessageProkoll['Install']['OK'][] = "#3024 Kategorie-Objekt ".$Object['ObjectName']." nicht neu konfiguriert (Objekt im Config-Bereich)"; } return $Object; break; case 1: // Instanzen if((@$Object['newObjectID'] > 0) && ($Object['isConfigTree'] == 0)) { $Inst_ID = (int)$Object['newObjectID']; // prüfen, ob Kategorie tats. noch existiert (wenn nicht: anlegen) if(!IPS_ObjectExists($Inst_ID)) $Inst_ID = IPS_CreateInstance($Object['ModuleID']); if($Inst_ID > 0) $MessageProkoll['Install']['OK'][] = "#3033 Kategorie-Objekt ".$Object['ObjectName'].", ID #".$Inst_ID." bereits vorhanden (Update ein)"; } elseif(($Object['isConfigTree'] == 0) || (@$Object['newObjectID'] == 0) || (!IPS_ObjectExists((int)$Object['newObjectID']))) { $Inst_ID = IPS_CreateInstance($Object['ModuleID']); if($Inst_ID > 0) $MessageProkoll['Install']['OK'][] = "#3032 Instanz-Objekt ".$Object['ObjectName'].", neuID #".$Inst_ID." angelegt"; if($Inst_ID == 0) $MessageProkoll['Install']['Failure'][] = "#3031 Instanz-Objekt ".$Object['ObjectName'].", , altID #".$Object['ObjectID']." Neuanlage fehlgeschlagen"; } else { $MessageProkoll['Install']['OK'][] = "#3034 Instanz-Objekt ".$Object['ObjectName']." nicht neu konfiguriert (Objekt im Config-Bereich)"; } IPS_SetName($Inst_ID, $Object['ObjectName']); if(isset($Inst_ID, $Object['newParentID'])) IPS_SetParent($Inst_ID, (int)$Object['newParentID']); IPS_SetHidden($Inst_ID, (bool)$Object['ObjectIsHidden']); IPS_SetPosition($Inst_ID, (int)$Object['ObjectPosition']); IPS_SetInfo($Inst_ID, $Object['ObjectInfo']); IPS_SetIcon($Inst_ID, $Object['ObjectIcon']); IPS_ApplyChanges($Inst_ID); $Object['newObjectID'] = $Inst_ID; if($Inst_ID > 0) $MessageProkoll['Install']['OK'][] = "#3035 Instanz-Objekt ".$Object['ObjectName'].", neuID #".$Inst_ID." neu konfiguriert"; return $Object; break; case 2: // Variablen, nur anlegen, wenn sie nicht mit einer Instanz verküpft sind ($Object['ObjectIsReadOnly'] == 0) if((int)$Object['ObjectIsReadOnly'] == 0) { $ah_ID = IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}')[0]; // Archive Handler if((@$Object['newObjectID'] > 0) && ($Object['isConfigTree'] == 0)) { $Var_ID = (int)$Object['newObjectID']; // prüfen, ob Var tats. noch existiert (wenn nicht: anlegen) if(!IPS_ObjectExists($Var_ID)) $Var_ID = IPS_CreateVariable((int)$Object['ValueType']); if($Var_ID > 0) $MessageProkoll['Install']['OK'][] = "#3043 Variablen-Objekt ".$Object['ObjectName'].", ID #".$Var_ID." bereits vorhanden (Update ein)"; } elseif((@$Object['isConfigTree'] == 0) || (@$Object['newObjectID'] == 0)|| (!IPS_ObjectExists((int)$Object['newObjectID']))) { $Var_ID = IPS_CreateVariable((int)$Object['ValueType']); if($Var_ID > 0) $MessageProkoll['Install']['OK'][] = "#3042 Variablen-Objekt ".$Object['ObjectName'].", neuID #".$Var_ID." angelegt"; if($Var_ID == 0) $MessageProkoll['Install']['Failure'][] = "#3041 Variablen-Objekt ".$Object['ObjectName'].", , altID #".$Object['ObjectID']." Neuanlage fehlgeschlagen"; } else { $MessageProkoll['Install']['OK'][] = "#3044 Variablen-Objekt ".$Object['ObjectName']." nicht neu konfiguriert (Objekt im Config-Bereich)"; } //echo "Variablen-Konfiguration für Var ID $Var_ID startet:\n"; IPS_SetName($Var_ID, $Object['ObjectName']); if(isset($Var_ID, $Object['newParentID'])) IPS_SetParent($Var_ID, (int)$Object['newParentID']); IPS_SetHidden($Var_ID, (bool)$Object['ObjectIsHidden']); IPS_SetPosition($Var_ID, (int)$Object['ObjectPosition']); IPS_SetInfo($Var_ID, $Object['ObjectInfo']); IPS_SetIcon($Var_ID, $Object['ObjectIcon']); //if($Object['VariableCustomAction'] > 0) //IPS_SetVariableCustomAction($Var_ID, $Object['VariableCustomAction']); IPS_SetVariableCustomProfile($Var_ID, $Object['VariableCustomProfile']); AC_SetLoggingStatus($ah_ID, $Var_ID, (bool)$Object['LoggingStatus']); AC_SetAggregationType($ah_ID, $Var_ID, (int)$Object['AggregationType']); // Variablenwert schreiben (nur bei Neuinstallation) if($Parameters['Update'] = 0) { switch ((int)$Object['ValueType']) { // Variablenwert je nach Variablentyp schreiben (0= Boolean, 1= Integer, 2= Float; 3= String) case 0: SetValue($Var_ID, (bool)$Object['ValueBoolean']); break; case 1: SetValue($Var_ID, (int)$Object['ValueInteger']); break; case 2: SetValue($Var_ID, (float)$Object['ValueFloat']); break; case 3: SetValue($Var_ID, $Object['ValueString']); break; } } // Ab IPS V 3.0: if(IPS_GetKernelVersion() > 2.9) { AC_SetGraphStatus($ah_ID, $Var_ID, (bool)$Object['GraphStatus']); } IPS_ApplyChanges($ah_ID); $Object['newObjectID'] = $Var_ID; if($Var_ID > 0) $MessageProkoll['Install']['OK'][] = "#3045 Variablen-Objekt ".$Object['ObjectName'].", neuID #".$Var_ID." neu konfiguriert"; } else { $MessageProkoll['Install']['User'][] = "#3044 Variablen-Objekt ".$Object['ObjectName'].", altID #".$Object['ObjectID']." nicht angelegt (wird automatisch durch IPS-Modul angelegt)"; } return $Object; break; case 3: // Scripte // bei ScriptOverwrite = 0: Prüfen, ob manuell benanntes Scriptfile im System vorhanden (Scriptabbuch, wenn ja) if(($Parameters['Update'] == 0) && ($Parameters['ScrOverwrite'] == 0)) { if(explode('.', $Object['ScriptFile'])[0] != $Object['ScriptID']) { $FileCheck = file_exists(IPS_GetKernelDir()."scripts\\".$Object['ScriptFile']); if($FileCheck) exit('#3058 Scriptabbruch: Script '.$Object['ScriptFile'].' bereits im Script-Ordner vorhanden, bereits installierte Zielprojekt-Objekte müssen manuell gelöscht werden'); } } $Scr_Name = $Object['ObjectName']; $Scr_oldID = @IPS_GetScriptIDByFile($Object['ScriptFile']); $ScrFunctionName = preg_replace('/[^a-zA-Z]/', '',$Scr_Name).$Object['ObjectID']; $Scr_Content = $ScrFunctionName(); $Scr_Content = stripslashes($ScrFunctionName()); $Scr_Content = str_replace('§\'', "'", $Scr_Content); $Scr_Content = str_replace("@§@", "\\",$Scr_Content); // Vorabcheck Script exist if(isset($Object['newObjectID']) && (@$Object['newObjectID'] >0)) { $ScrExist = true; $Scr_ID = (int)$Object['newObjectID']; if(!IPS_ObjectExists((int)$Object['newObjectID'])) { $ScrExist = false; $Scr_ID = NULL; } } else { $ScrExist = false; } // Script-Neuanlage if(($ScrExist == false)) { $Scr_ID = IPS_CreateScript(0); IPS_SetName($Scr_ID, $Scr_Name); if(isset($Scr_ID, $Object['newParentID'])) IPS_SetParent($Scr_ID, (int)$Object['newParentID']); $fh = fopen(IPS_GetKernelDir()."scripts\\".$Scr_ID.'.ips.php', 'w') or die ("can't open file"); fwrite($fh, $Scr_Content); fclose($fh); IPS_SetScriptFile($Scr_ID, $Scr_ID.'.ips.php'); IPS_SetHidden($Scr_ID, (bool)$Object['ObjectIsHidden']); IPS_SetPosition($Scr_ID, (int)$Object['ObjectPosition']); IPS_SetInfo($Scr_ID, $Object['ObjectInfo']); IPS_SetIcon($Scr_ID, $Object['ObjectIcon']); $Scr_IPS_ID = (int)explode('.',$Object['ScriptFile'])[0]; $Object['newObjectID'] = $Scr_ID; //Scriptfile umbenenen, wenn anderer Name als IPS-ID vergeben $ScrFilePrefix = explode('.', $Object['ScriptFile'])[0]; if($ScrFilePrefix != $Object['ObjectID']) { rename($Scr_ID.".ips.php", $Object['ScriptFile']); $result = IPS_SetScriptFile($Scr_ID, $Object['ScriptFile']); if($result) $MessageProkoll['Install']['OK'][] = "#3053 Script-Objekt ".$Object['ObjectName'].", File in ".$Object['ScriptFile']." neu angelegt und umbenannt"; } else { if($Scr_ID > 0) $MessageProkoll['Install']['OK'][] = "#3052 Script-Objekt ".$Object['ObjectName'].", neuID #".$Scr_ID." neu angelegt"; } } elseif(($ScrExist == true) && ($Object['isConfigTree'] != 1)) { // bei ScriptOverwrite = 0: Prüfen, ob Scriptfile im System vorhanden (Scriptabbuch, wenn ja) if(($Parameters['Update'] == 1) && ($Parameters['ScrOverwrite'] == 0)) { if(explode('.', $Object['ScriptFile'])[0] != $Object['ScriptID']) { $FileCheck = file_exists(IPS_GetKernelDir()."scripts\\".$Object['ScriptFile']); if($FileCheck) exit('#3059 Scriptabbruch: Script '.$Object['ScriptFile'].' bereits im Script-Ordner vorhanden, bereits installierte Zielprojekt-Objekte müssen manuell gelöscht werden'); } } // Update (nur, wenn ConfigKategorie-Flag nicht gesetzt) if($ScrExist) { // Filename mit ID oder individuell benannt $ScrFilePrefix = explode('.', $Object['ScriptFile'])[0]; if($ScrFilePrefix == $Object['ObjectID']) { $ScrFileName = $Object['newObjectID'].'.ips.php'; $ScrOverwrite = 1; } else { $ScrFileName = $Object['ScriptFile']; if($Parameters['ScrOverwrite'] == 1) {$ScrOverwrite = 1;}else{$ScrOverwrite = 0;} } } else { $ScrFileName = $Object['ScriptFile']; $ScrOverwrite = 1; } // Script-File löschen (wenn vorhanden und ScriptOverwrite = 1) und neu schreiben $scrReturn = 0; if($ScrExist && $ScrOverwrite) { unlink(IPS_GetKernelDir()."scripts\\".$ScrFileName); $fh = fopen(IPS_GetKernelDir()."scripts\\".$ScrFileName, 'w') or die ("can't open file"); $MessageProkoll['Install']['OK'][] = "#3055 Script-File ".$Object['ObjectName'].", ".$ScrFileName.", gelöscht"; $scrReturn = fwrite($fh, $Scr_Content); fclose($fh); IPS_SetHidden($Scr_ID, (bool)$Object['ObjectIsHidden']); IPS_SetPosition($Scr_ID, (int)$Object['ObjectPosition']); IPS_SetInfo($Scr_ID, $Object['ObjectInfo']); IPS_SetIcon($Scr_ID, $Object['ObjectIcon']); } // Meldungen für Inst-Protokoll if($scrReturn) { $MessageProkoll['Install']['OK'][] = "#3051 Script-File ".$Object['ObjectName'].", neu geschrieben"; } elseif($ScrOverwrite == 0) { $MessageProkoll['Install']['OK'][] = "#3054 Script-File ".$Object['ObjectName'].', nicht überschrieben (Option $existsScriptsoverwrite deaktiviert)'; } else { $MessageProkoll['Install']['Failure'][] = "#3055 Script-File ".$Object['ObjectName'].", neu schreiben fehlgeschlagen"; } } return $Object; break; case 4: // Events $Evnt_Name = $Object['ObjectName']; if((@$Object['newObjectID'] > 0) && ($Object['isConfigTree'] == 0)) { $Evnt_ID = (int)$Object['newObjectID']; // prüfen, ob Var tats. noch existiert (wenn nicht: anlegen) if(!IPS_ObjectExists($Evnt_ID)) $Evnt_ID = IPS_CreateEvent((int)$Object['EventType']); if($Evnt_ID > 0) $MessageProkoll['Install']['OK'][] = "#3063 Event-Objekt ".$Object['ObjectName'].", ID #".$Evnt_ID." bereits vorhanden (Update ein)"; } elseif((@$Object['isConfigTree'] == 0) || (@$Object['newObjectID'] == 0)|| (!IPS_ObjectExists((int)$Object['newObjectID']))) { $Evnt_ID = IPS_CreateEvent((int)$Object['EventType']); if($Evnt_ID > 0) $MessageProkoll['Install']['OK'][] = "#3062 Event-Objekt ".$Object['ObjectName'].", neuID #".$Evnt_ID." angelegt"; if($Evnt_ID == 0) $MessageProkoll['Install']['Failure'][] = "#3061 Event-Objekt ".$Object['ObjectName'].", , altID #".$Object['ObjectID']." Neuanlage fehlgeschlagen"; } else { $MessageProkoll['Install']['OK'][] = "#3064 Event-Objekt ".$Object['ObjectName']." nicht neu konfiguriert (Objekt im Config-Bereich)"; } if(isset($Evnt_ID, $Object['newParentID'])) IPS_SetParent($Evnt_ID, (int)$Object['newParentID']); IPS_SetName($Evnt_ID, $Evnt_Name); IPS_SetPosition($Evnt_ID, (int)$Object['ObjectPosition']); IPS_SetHidden($Evnt_ID, (bool)$Object['ObjectIsHidden']); IPS_SetPosition($Evnt_ID, (int)$Object['ObjectPosition']); IPS_SetInfo($Evnt_ID, $Object['ObjectInfo']); IPS_SetIcon($Evnt_ID, $Object['ObjectIcon']); IPS_SetEventLimit($Evnt_ID, (int)$Object['EventLimit']); // getriggertes Element if((int)$Object['EventType'] == 0) { //!!! (int)$Oject['TriggerVariableID'] Auslöser ID derzeit nur ParentObject, da newTarget noch nicht bekannt. // Konfiguration von IPS_SetEventTrigger wird erst mit Neuverlinkung abgeschlossen !! @IPS_SetEventTrigger($Evnt_ID, (int)$Object['TriggerType'], 0); if((int)$Object['TriggerType'] == 4) IPS_SetEventTriggerValue($Evnt_ID, $Object['TriggerValue']); IPS_SetEventTriggerSubsequentExecution($Evnt_ID, (bool)$Object['TriggerSubsequentExecution']); IPS_SetEventActive($Evnt_ID, true); // Ereignis nach Installation immer aktiv $MessageProkoll['Install']['OK'][] = "#3065 Event-Objekt ".$Object['ObjectName'].", neuID #".$Evnt_ID." neu konfiguriert und aktiviert"; } else { // zyklisches Element IPS_SetEventCyclic($Evnt_ID, (int)$Object['CyclicDateType'], (int)$Object['CyclicDateValue'], (int)$Object['CyclicDateDay'], (int)$Object['CyclicDateDayValue'], (int)$Object['CyclicTimeType'], (int)$Object['CyclicTimeValue']); // Prüfung IPS-Version (ab 3.1 wurden die SetEventCyclic-Befehle geändert) if($IPS_VERSION < 3.1) { // Wenn Zielsystem-Version < 3.1 ist IPS_SetEventCyclicDateBounds($Evnt_ID, (float)$Object['CyclicDateFrom'], (float)$Object['CyclicDateTo']); //if((int)$Object['CyclicTimeType'] == 1) IPS_SetEventCyclicTimeBounds($Evnt_ID, (float)$Object['CyclicTimeFrom'], (float)$Object['CyclicTimeTo']); } else { // Wenn Zielsystem >= 3.1 ist if($Object['CyclicDateFrom'] > 0) { IPS_SetEventCyclicDateFrom($Evnt_ID, (int)date("d", $Object['CyclicDateFrom']), (int)date("m", $Object['CyclicDateFrom']), (int)date("Y", $Object['CyclicDateFrom'])); } else { IPS_SetEventCyclicDateFrom($Evnt_ID, 0, 0, 0); } if($Object['CyclicDateTo'] > 0) { IPS_SetEventCyclicDateTo($Evnt_ID, (int)date("d", $Object['CyclicDateTo']), (int)date("m", $Object['CyclicDateTo']), (int)date("Y", $Object['CyclicDateTo'])); } else { IPS_SetEventCyclicDateTo($Evnt_ID, 0, 0, 0); } IPS_SetEventCyclicTimeFrom($Evnt_ID, (int)date("H", $Object['CyclicTimeFrom']), (int)date("i", $Object['CyclicTimeFrom']), (int)date("s", $Object['CyclicTimeFrom'])); IPS_SetEventCyclicTimeTo($Evnt_ID, (int)date("H", $Object['CyclicTimeTo']), (int)date("i", $Object['CyclicTimeTo']), (int)date("s", $Object['CyclicTimeTo'])); } IPS_SetEventActive($Evnt_ID, false); // Ereignis nach Installation immer inaktiv $MessageProkoll['Install']['User'][] = "#3066 Event-Objekt ".$Object['ObjectName'].", neuID #".$Evnt_ID." neu konfiguriert, NICHT aktiviert"; } // PHP-Code einschleusen, wenn vorhanden $FuncName = 'Event'.$Object['ObjectID']; if(function_exists($FuncName)) { $FuncContent = $FuncName(); IPS_SetEventScript($Evnt_ID, $FuncContent); $MessageProkoll['Install']['OK'][] = "#3067 Event-Objekt ".$Object['ObjectName'].", neuID #".$Evnt_ID." PHP-Code eingebaut"; } $Object['newObjectID'] = $Evnt_ID; return $Object; break; case 5: // Media-Objekte $MessageProkoll['Install']['Failure'][] = "#3061 Media-Objekt ".$Object['ObjectName'].", altID #".$Object['ObjectID']." nicht angelegt (Option nicht implementiert)"; return 0; //return $Object; break; case 6: // Links $Lnk_Name = $Object['ObjectName']; if((@$Object['newObjectID'] > 0) && ($Object['isConfigTree'] == 0)) { $Lnk_ID = (int)$Object['newObjectID']; // prüfen, ob Lnk tats. noch existiert (wenn nicht: anlegen) if(!IPS_ObjectExists($Lnk_ID)) $Lnk_ID = IPS_CreateLink(); if($Lnk_ID > 0) $MessageProkoll['Install']['OK'][] = "#3063 Link-Objekt ".$Object['ObjectName'].", ID #".$Lnk_ID." bereits vorhanden (Update ein)"; } elseif((@$Object['isConfigTree'] == 0) || (@$Object['newObjectID'] == 0)|| (!IPS_ObjectExists((int)$Object['newObjectID']))) { $Lnk_ID = IPS_CreateLink(); if($Lnk_ID > 0) $MessageProkoll['Install']['OK'][] = "#3072 Link-Objekt ".$Object['ObjectName'].", neuID #".$Lnk_ID." angelegt"; if($Lnk_ID == 0) $MessageProkoll['Install']['Failure'][] = "#3071 Link-Objekt ".$Object['ObjectName'].", , altID #".$Object['ObjectID']." Neuanlage fehlgeschlagen"; } else { $MessageProkoll['Install']['OK'][] = "#3074 Link-Objekt ".$Object['ObjectName']." nicht neu konfiguriert (Objekt im Config-Bereich)"; } if(isset($Object['newParentID'])) IPS_SetParent($Lnk_ID, (int)$Object['newParentID']); IPS_SetName($Lnk_ID, $Lnk_Name); IPS_SetPosition($Lnk_ID, (int)$Object['ObjectPosition']); IPS_SetHidden($Lnk_ID, (bool)$Object['ObjectIsHidden']); IPS_SetPosition($Lnk_ID, (int)$Object['ObjectPosition']); IPS_SetInfo($Lnk_ID, $Object['ObjectInfo']); IPS_SetIcon($Lnk_ID, $Object['ObjectIcon']); //IPS_SetLinkChildID($LinkID, 12345 /*[Objekt #12345 existiert nicht]*/); //IPS_SetLinkTargetID($LinkID, 12345 /*[Objekt #12345 existiert nicht]*/); $MessageProkoll['Install']['OK'][] = "#3071 Link-Objekt ".$Object['ObjectName'].", neuID #".$Lnk_ID." neu konfiguriert"; $Object['newObjectID'] = $Lnk_ID; return $Object; break; } } // nachträgliche Verlinkung aller neu installierten Objekte function linknewObjects($ObjLinkTree) { global $ObjInstallTree; global $newTgtID; global $newObjID; global $MessageProkoll; for($i=0;$i0)) // Scripts nach austauschbaren IDs durchsuchen { // neue Target-ID (Action-Script) für Variable finden $newTargetID = findNewTargetID($ObjInstallTree, $ObjLinkTree[$i]['VariableCustomAction']); IPS_SetVariableCustomAction((int)$ObjLinkTree[$i]['newObjectID'], (int)$newTargetID); if($newTargetID >0) $MessageProkoll['Link']['OK'][] = "#4011 Variablen-Objekt ".$ObjLinkTree[$i]['ObjectName'].", ID #".$ObjLinkTree[$i]['newObjectID'].", neues Actionscript ID $newTargetID zugewiesen"; if($newTargetID == 0) $MessageProkoll['Link']['Failure'][] = "#4010 Variablen-Objekt ".$ObjLinkTree[$i]['ObjectName'].", ID #".$ObjLinkTree[$i]['newObjectID'].", kein neues Actionscript zugewiesen (keine ID gefunden)"; } elseif($ObjLinkTree[$i]['ObjectType'] == 3) // Scripts nach austauschbaren IDs durchsuchen { // aktuellen Scriptnamen finden $newObjID = 0; $Scr = IPS_GetScript((int)$ObjLinkTree[$i]['newObjectID'])['ScriptFile']; changeObjectIDs_inScript($ObjInstallTree, $Scr); $MessageProkoll['Link']['OK'][] = "#4021 Script-Objekt ".$ObjLinkTree[$i]['ObjectName'].", ID #".$ObjLinkTree[$i]['newObjectID'].", durchsuche Script nach ID's"; } elseif(($ObjLinkTree[$i]['ObjectType'] == 4) && ($ObjLinkTree[$i]['EventType'] == 0)) // Neuverlinkung nur für nichtzyklische Events { $newTgtID =0; $newTargetID = findNewTargetID($ObjInstallTree, $ObjLinkTree[$i]['TriggerVariableID']); // neue Verlinkung setzen if($newTgtID !=0) { IPS_SetEventTrigger((int)$ObjLinkTree[$i]['newObjectID'], (int)$ObjLinkTree[$i]['TriggerType'], $newTgtID); $MessageProkoll['Link']['OK'][] = "#4031 Event-Objekt ".$ObjLinkTree[$i]['ObjectName'].", ID #".$ObjLinkTree[$i]['newObjectID'].", neu verlinkt - Ziel-ID #$newTgtID"; } else { $MessageProkoll['Link']['User'][] = "#4030 Event-Objekt ".$ObjLinkTree[$i]['ObjectName'].", neue ID #".$ObjLinkTree[$i]['newObjectID'].", NICHT verlinkt, keine gültige TargetID oder kein Target innerhalb des Zielprojektes gefunden"; } } elseif($ObjLinkTree[$i]['ObjectType'] == 6) { $newTgtID =0; $newTgtID = findNewTargetID($ObjInstallTree, $ObjLinkTree[$i]['LinkChildID']); if($newTgtID !=0) { IPS_SetLinkTargetID((int)$ObjLinkTree[$i]['newObjectID'], (int)$newTgtID); $MessageProkoll['Link']['OK'][] = "#4041 Link-Objekt ".$ObjLinkTree[$i]['ObjectName'].", ID #".$ObjLinkTree[$i]['newObjectID'].", neu verlinkt (Ziel-ID $newTgtID)"; } else { $MessageProkoll['Link']['User'][] = "#4040 Link-Objekt ".$ObjLinkTree[$i]['ObjectName'].", ID #".$ObjLinkTree[$i]['newObjectID'].", NICHT verlinkt, kein Target innerhalb des Zielprojektes gefunden"; } } // Objekt-Childs durchsuchen if(isset($ObjLinkTree[$i]['ChildrenIDs'])) { $newLnkTree = $ObjLinkTree[$i]['ChildrenIDs']; linknewObjects($newLnkTree); } } unset($ObjLinkTree); } // sucht neue Target-ID für verlinkte Objekte function findNewTargetID($ObjLinkTree, $oldTargetID) { global $newTgtID; for($i=0;$i0)) { $z = str_replace($oldID, $newObjectID, $z); $MessageProkoll['Script']['OK'][] = "#5011 Script ID#$Scr: Inhalt verändert: Zeile ".($counter + 1).", alte Target-ID #$oldID gegen neue ID #$newObjectID getauscht"; } else { $MessageProkoll['Script']['User'][] = "#5010 Script ID#$Scr: Inhalt NICHT verändert: Zeile ".($counter + 1).", alte Target-ID #$oldID nicht innerhalb des Projektes"; } } fwrite($file, $z); $counter ++; } unset($ScrContent); unset($ObjLinkTree); fclose($file); return; } // sucht neue Object-ID für Script-Variablen function findNewObjectID($ObjTree, $oldObjID) { global $newObjID; for($i=0;$i 0) { IPS_SetParent($_IPS['SELF'], $SrchResult); $MessageProkoll['Info'][] = "#1011 Install-Script: Install-Script und -Protokoll in Config-Ordner verschoben"; } else { $MessageProkoll['Info'][] = "#1010 Install-Script: Install-Script und -Protokoll NICHT verschoben (kein Config-Ordner im Zielprojekt gefunden)"; } return; } // Funktion zum rekursiven Durchsuchen des Obj-Inventorys nach Config-Dir function searchConfigDir($Array) { global $SrchResult; $search = 'Config'; $Cnt = count($Array); for($i=0;$i<$Cnt;$i++) { if($Array[$i]['ObjectName'] == $search) { $SrchResult = (int)$Array[$i]['newObjectID']; } if((isset($Array[0]['ChildrenIDs'])) && (!isset($SrchResult))) { $newArray = $Array[0]['ChildrenIDs']; searchConfigDir($newArray); } } unset($Array); unset($newArray); return $SrchResult; } // Protokoll ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ function InstallProtocoll() { global $MessageProkoll; // +++ Installations-Parameter +++++++++++++++++++++++++ $ps ='// +++ Installationsprotokoll vom '.date("d.m.Y, H:i:s", time()).' ++++++++++++++++++++++++++++++++++++++++++++'."\r\n\r\n"; $ps .="/** +++++++++++++++++ Installationsparameter +++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n"; $ps .=" Update: ".$MessageProkoll['InstallParameters']['Update']."\r\n"; $ps .=" Variablenprofile installieren: ".$MessageProkoll['InstallParameters']['VarProfile']."\r\n"; $ps .=" benamste Scripte überschreiben: ".$MessageProkoll['InstallParameters']['ScrOverwrite']."\r\n"; $ps .=" WFC-Items überschreiben: ".$MessageProkoll['InstallParameters']['WFCItems']."\r\n"; $ps .="+++++++++++++++++++++ Installationsparameter Ende ++++++++++++++++++++++++++++++++++++++++++++++++++\r\n\r\n"; // +++ Infos ++++++++++++++++++++++++++++++++++++++ $ps .="+++++++++++++++++++++ Installations-Infos ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\r\n"; for($i=0;$i 0) { $str = $Home; $IPS_VALUE = 1; // IPSLogger_Inf(c_LogId,"Automower Regen Trigger HOME"); } else { $str = $Auto; $IPS_VALUE = 0; //IPSLogger_Inf(c_LogId,"Automower Regen Trigger AUTO"); } @CSCK_SendText(49324 /*[Test Area\Automower\Register Variable]*/ , $str ); @SetValue(50058 /*[Funktionen\Rasenmäher\Automower01 hinten \Modus]*/, $IPS_VALUE); // Variable in Webfront umschalten } ?> '; } // Script "Steuerung Aktuell" ------------------------------------------------------------------------------------------------------ function SteuerungAktuell20237() { return ' '; } // Script "Timer" ------------------------------------------------------------------------------------------------------ function Timer22783() { return ' $ID) { $IPS_Timer_Info = IPS_GetEvent ($ID); $Unix_Zeit_in_sekunden = $IPS_Timer_Info[§\'CyclicTimeFrom§\']; $Zeit_Array[$Stunden_Index[$key]] = date("H",$Unix_Zeit_in_sekunden); $Zeit_Array[$Minuten_Index[$key]] = date("i",$Unix_Zeit_in_sekunden); } $Header = chr(0x0F).chr(0xca); $Footer = chr(0x00); $Timer_Automower_adressen = [chr(0x38),chr(0x39),chr(0x3a),chr(0x3b),chr(0x40),chr(0x41),chr(0x42),chr(0x43), chr(0x3c),chr(0x3d),chr(0x3e),chr(0x3f),chr(0x44),chr(0x45),chr(0x46),chr(0x47)]; foreach ($Timer_Automower_adressen as $key => $adresse) { Csck_sendtext(24124/*[Automower]*/,$Header.$adresse.chr($Zeit_Array[$key]).$Footer); /* Client Socket ID eintragen */ } sleep(1); IPS_Runscript(35524 /*[Objekt #35524 existiert nicht]*/); /* ID des Abfragescripts eintragen um die Anzeige der Timer im WF zu aktualisieren */ ?> '; } // Script "Modus in Lutzvariable" ------------------------------------------------------------------------------------------------------ function ModusinLutzvariable25408() { return ' '; } // Script "Abfrage" ------------------------------------------------------------------------------------------------------ function Abfrage35112() { return ' '; } // Script "Automower01 Hinten Modus anzeigen/zuweisen" ------------------------------------------------------------------------------------------------------ function AutomowerHintenModusanzeigenzuweisen38518() { return ' 0) { $str = $Home; $IPS_VALUE = 1; } else { $str = $Auto; $IPS_VALUE = 0; } @CSCK_SendText(49324 /*[Test Area\Automower\Register Variable]*/ , $str ); @SetValue(50058 /*[Funktionen\Rasenmäher\Automower01 hinten \Modus]*/, $IPS_VALUE); // Variable in Webfront umschalten } ?> '; } // Script "Timer auslesen" ------------------------------------------------------------------------------------------------------ function Timerauslesen49098() { return ' '; } // Script "test" ------------------------------------------------------------------------------------------------------ function test50370() { return ' '; } // Script "Uhrzeit Einstellen" ------------------------------------------------------------------------------------------------------ function UhrzeitEinstellen51966() { return ' '; } // Script "letztes mal gesehen " ------------------------------------------------------------------------------------------------------ function letztesmalgesehen55139() { return ' '; } // Script "Timer auslesen" ------------------------------------------------------------------------------------------------------ function Timerauslesen52766() { return ' $ID) { $IPS_Timer_Info = IPS_GetEvent ($ID); $Unix_Zeit_in_sekunden = $IPS_Timer_Info[§\'CyclicTimeFrom§\']; $Zeit_Array[$Stunden_Index[$key]] = date("H",$Unix_Zeit_in_sekunden); $Zeit_Array[$Minuten_Index[$key]] = date("i",$Unix_Zeit_in_sekunden); } $Header = chr(0x0F).chr(0xca); $Footer = chr(0x00); $Timer_Automower_adressen = [chr(0x38),chr(0x39),chr(0x3a),chr(0x3b),chr(0x40),chr(0x41),chr(0x42),chr(0x43), chr(0x3c),chr(0x3d),chr(0x3e),chr(0x3f),chr(0x44),chr(0x45),chr(0x46),chr(0x47)]; foreach ($Timer_Automower_adressen as $key => $adresse) { Csck_sendtext(48872 /*[Client Socket Automower01]*/,$Header.$adresse.chr($Zeit_Array[$key]).$Footer); /* Client Socket ID eintragen */ } sleep(1); // IPS_Runscript(35524 /*[Objekt #35524 existiert nicht]*/); /* ID des Abfragescripts eintragen um die Anzeige der Timer im WF zu aktualisieren */ ?> '; } // Script "Modus Control" ------------------------------------------------------------------------------------------------------ function ModusControl14139() { return ' 0) { $str = $Home; $IPS_VALUE = 1; // IPSLogger_Inf(c_LogId,"Automower Regen Trigger HOME"); } else { $str = $Auto; $IPS_VALUE = 0; //IPSLogger_Inf(c_LogId,"Automower Regen Trigger AUTO"); } @CSCK_SendText(57529 /*[Client Socket Automower02]*/ , $str ); @SetValue(31019 /*[Funktionen\Rasenmäher\Automower02 vorne\Modus]*/, $IPS_VALUE); // Variable in Webfront umschalten } ?> '; } // Script "Timer auslesen" ------------------------------------------------------------------------------------------------------ function Timerauslesen25383() { return ' $ID) { $IPS_Timer_Info = IPS_GetEvent ($ID); $Unix_Zeit_in_sekunden = $IPS_Timer_Info[§\'CyclicTimeFrom§\']; $Zeit_Array[$Stunden_Index[$key]] = date("H",$Unix_Zeit_in_sekunden); $Zeit_Array[$Minuten_Index[$key]] = date("i",$Unix_Zeit_in_sekunden); } $Header = chr(0x0F).chr(0xca); $Footer = chr(0x00); $Timer_Automower_adressen = [chr(0x38),chr(0x39),chr(0x3a),chr(0x3b),chr(0x40),chr(0x41),chr(0x42),chr(0x43), chr(0x3c),chr(0x3d),chr(0x3e),chr(0x3f),chr(0x44),chr(0x45),chr(0x46),chr(0x47)]; foreach ($Timer_Automower_adressen as $key => $adresse) { Csck_sendtext(57529 /*[Client Socket Automower02]*/,$Header.$adresse.chr($Zeit_Array[$key]).$Footer); /* Client Socket ID eintragen */ } sleep(1); // IPS_Runscript(35524 /*[Objekt #35524 existiert nicht]*/); /* ID des Abfragescripts eintragen um die Anzeige der Timer im WF zu aktualisieren */ ?> '; } // Script "Timer" ------------------------------------------------------------------------------------------------------ function Timer23493() { return ' $ID) { $IPS_Timer_Info = IPS_GetEvent ($ID); $Unix_Zeit_in_sekunden = $IPS_Timer_Info[§\'CyclicTimeFrom§\']; $Zeit_Array[$Stunden_Index[$key]] = date("H",$Unix_Zeit_in_sekunden); $Zeit_Array[$Minuten_Index[$key]] = date("i",$Unix_Zeit_in_sekunden); } $Header = chr(0x0F).chr(0xca); $Footer = chr(0x00); $Timer_Automower_adressen = [chr(0x38),chr(0x39),chr(0x3a),chr(0x3b),chr(0x40),chr(0x41),chr(0x42),chr(0x43), chr(0x3c),chr(0x3d),chr(0x3e),chr(0x3f),chr(0x44),chr(0x45),chr(0x46),chr(0x47)]; foreach ($Timer_Automower_adressen as $key => $adresse) { Csck_sendtext(24124/*[Automower]*/,$Header.$adresse.chr($Zeit_Array[$key]).$Footer); /* Client Socket ID eintragen */ } sleep(1); IPS_Runscript(35524 /*[Objekt #35524 existiert nicht]*/); /* ID des Abfragescripts eintragen um die Anzeige der Timer im WF zu aktualisieren */ ?> '; } // Script "Uhrzeit Einstellen" ------------------------------------------------------------------------------------------------------ function UhrzeitEinstellen34982() { return ' '; } // Script "letztes mal gesehen " ------------------------------------------------------------------------------------------------------ function letztesmalgesehen37627() { return ' '; } // Script "Steuerung Aktuell" ------------------------------------------------------------------------------------------------------ function SteuerungAktuell37904() { return ' '; } // Script "Timer auslesen" ------------------------------------------------------------------------------------------------------ function Timerauslesen39807() { return ' '; } // Script "test" ------------------------------------------------------------------------------------------------------ function test41551() { return ' '; } // Script "Abfrage" ------------------------------------------------------------------------------------------------------ function Abfrage44973() { return ' '; } // Script "Automower02 Vorne Modus anzeigen/zuweisen" ------------------------------------------------------------------------------------------------------ function AutomowerVorneModusanzeigenzuweisen46391() { return ' 0) { $str = $Home; $IPS_VALUE = 1; } else { $str = $Auto; $IPS_VALUE = 0; } @CSCK_SendText(49324 /*[Test Area\Automower\Register Variable]*/ , $str ); @SetValue(31019 /*[Funktionen\Rasenmäher\Automower02 vorne\Modus]*/, $IPS_VALUE); // Variable in Webfront umschalten } ?> '; } // Script "Modus in Lutz Variable " ------------------------------------------------------------------------------------------------------ function ModusinLutzVariable48381() { return ' '; } ?>