Q&A IPS RS Project Exporter

hier bitte Fragen, Diskussionen, Troubleshooting zum http://www.ip-symcon.de/forum/f53/ip-symcon-rs-project-exporter-19529/

Hallo RS nur zur Info

der obige Link funkt nicht

ok, danke. habs korrigiert

Wahrscheinlich liegt es an mir, aber wenn ich auf den obigen Link http://www.ip-symcon.de/forum/f52/ip-symcon-rs-project-exporter-19527/#post175312klicke sagt mir das System das der Link ungültig ist.

PS. Der Link im Posting von Raketenschnecke funktioniert… Ich habe den Link von WiBo versucht…der muss ja auch nicht funktionieren

Spannend, Raketenschnecke das ist eine wirklich interessante Arbeit; herzlichen Dank.

Ich habe das ganze gerade auf meinen Rechner geladen und werde über das Wochenende mal spielen.

Da ich gerade eine Methode entwickelt habe Links auf Objekte in Kategorie Bäumen abzulegen um über eine rekursives Programm (ähnlich wie das was Du in Deinem Skript gemacht hast) diese Objekte auszuwerten und dann anzusteuern könnte ich diese Funktionalität gut gebrauchen da jetzt ein großer Teil meiner Logik in der IPS Baum Struktur liegt und nicht mehr im Script.

in der tat: eine solche Logik in den Projektscripts wäre eine super Kombination mit dem Exporter. Dann wäre das Verteilen von Projekten wirklich easy

Erst mal einen riesen Dank Andreas für das geniale Skript. Durfte ja bereits an den Vortests teilnehmen. :slight_smile:

Es erspart viel Arbeit wenn es darum geht im eigenen System Projekte zu duplizieren, von einem Testsystem ins Wirksystem zu kopieren und auch Skripte und Projekte weiterzugeben.

Auch wenn nach einiges per Hand nachgearbeitet werden muss, z.B. ID´s in Skripten und Events, so ist allein die Erstellung der Struktur, der Skripte sowie der Variablen nebst Profilen, eine riesige Erleichterung.

Bin gespannt was da noch so alles reinwächst.

Weiter so. :smiley:

habe eben die Version 0.2 online gestellt (Link über den Projekt-Thread).

Changelog:
2012-09-29 V0.2Features
* Installer-Script legt nach Ausführung Protokollscript an (Voraussetzungen für spätere Updates)
* Verlinkung der innerhalb des Zielprojekts angelegten Objekte untereinander (Ausnahme: von
IPS-Modulen automatisch generierte Objekte können derzeit nicht verlinkt werden)

Bugfix
* Warnmeldung bei nicht vorhandenen Child-Strukturen im Exporter-Script beseitigt
* Workaround für "IPS-Bug": [Profil-Assoziationen mit leerem "Name" UND "Icon" werfen Fehlermeldungen.](http://www.ip-symcon.de/forum/project.php?issueid=1300)
     In einem solchen Fall wird im Installer-Script ein Leerzeichen bei "Name" eingefügt. 

Nachtrag: fast vergessen: IPS Versionen <2.6 #2519 werfen einen Fehler im Zusammenhang mit IPS_SetParent(). Ab #2519 ist der Fehler behoben

ich hab heute noch ein wenig gespielt, nachdem mich Werner mit einem Feature-Wunsch bedrängt hat.
Soeben ist die Version 0.3 online gegangen (Link zur Projektseite wie gehabt hier: http://www.ip-symcon.de/forum/f53/ip-symcon-rs-project-exporter-19529/)

Changelog-Auszug:
2012-09-30 V0.3
Features

  • Austausch von Objekt-IDs in Scripts, wenn neue Objekt-ID’s innerhalb des Projektes gefunden werden

heisst konkret und ausführlich:
wenn Scripte kopiert werden, werden diese automatisch auf im Script eingetragene ID’s gescannt (Ihr wisst schon: diese nervigen ID-Zuweisungen zu Variablen :smiley: ).
jede im Script gefundene (alte) ID wird auf eine neue, im Zielprojekt vorhandene Objekt-ID geprüft. Wird eine neue ID gefunden, so wird die alte ID im Script gegen die neue ausgetauscht.

Hier mal ein Screenshot, oberes Fenster beinhaltet die Installationsmeldungen (ausgetauschte und nicht ausgetauschte IDs) , Das Script im Hintergrund ist das grad bearbeitete Script mit den alten und neuen Variablen-IDs. Die alten ID’s existieren im Testsystem nicht, weil nicht Betsandteil des Copy-Jobs und wurden daher nicht getauscht)

Das ist eine sehr Sinnvolle Erweiterung, herzlichen Dank. Das Feature war auf meiner Wunschliste

Sent from my iPad using Tapatalk HD

ich hab heute noch ein wenig gespielt, nachdem mich Werner mit einem Feature-Wunsch bedrängt hat.

Und ich wollte ihn doch nur beschäftigen :smiley:

Das ist eine sehr Sinnvolle Erweiterung, herzlichen Dank. Das Feature war auf meiner Wunschliste

Finde ich auch, deshalb ist sie mir auch eingefallen.

Zum Glück bin ich da auch nicht alleine. Bin vom Programmierer schon komisch angesprochen worden :wink:

Danke Andreas für die Umsetzung, ich wußte Du kannst das.:slight_smile:

ich wusste das nicht :smiley:

Aber Du lernst schnell :rolleyes:

Hi

Ich hab mir das Ding grad mal angesehen und versuchsweise dein Beispiel zur logging.db ausprobiert, - diesmal das richtige-:wink: -

Hmm, ich finde die automatische Wiederherstellung von VarId ist evtl. etwas kritisch.
Bin mir nicht sicher ob das mehr verwirrt als nützt.

  • oder das Install Monitoring muß noch etwas verfeinert werden, ich weiß nicht.

Schau mal unten den Install log.
Ich interpretiere es mal so er zwei ID nicht wiederherstellen konnte da bereits vergeben. OK, geht klar.

Mit dem Rest kann ich jetzt mal nix anfangen.
Auch wenn ich mir die Installation so ansehe kann ich eigentlich keine Referenz zu den Meldungen sehen.

Wäre es nicht evtl. besser auf die VarIds zu verzichten und die Scripte so zu bauen das keine hardgecodeten IDs drin sein dürfen ?
Ich mein das Beispiel ist ja nur ein sehr kleines Projekt, und trotzdem krachts.

// ### InstallationsProtokoll vom 30.09.2012, 21:00:21 #############################


// Function Object Inventory Install-Protocol
function ObjectInventoryProtocol()
{
$raw = '
CopyParameters,;Cat,1;Inst,1;Var,1;Scr,1;Evnt,1;Lnk,1;Med,0;VarProfile,1;ScrOverwrite,0;
ObjectID,20257 /*[Webfront\Desktop\Aquarium\Stromkosten\Plots]*/;ObjectID,20257 /*[Webfront\Desktop\Aquarium\Stromkosten\Plots]*/;HasChildren,1;ObjectIcon,;ObjectIdent,;ObjectInfo,;ObjectIsHidden,;ObjectIsReadOnly,;ObjectName,Logging.DB Monitoring;ObjectPosition,-100;ObjectSummary,;ObjectType,0;ParentID,0;newObjectID,43910 /*[Logging.DB Monitoring]*/;
ObjectID,50540 /*[Aquarium\Temperatur\Heizungspumpe\]*/;ObjectID,50540 /*[Aquarium\Temperatur\Heizungspumpe\]*/;HasChildren,1;ObjectIcon,;ObjectIdent,;ObjectInfo,;ObjectIsHidden,;ObjectIsReadOnly,;ObjectName,logging.db überwachen;ObjectPosition,0;ObjectSummary,;ObjectType,3;ParentID,20257 /*[Webfront\Desktop\Aquarium\Stromkosten\Plots]*/;IsBroken,;LastExecute,1348956000;ScriptFile,50540.ips.php;ScriptID,50540 /*[Aquarium\Temperatur\Heizungspumpe\]*/;ScriptType,0;newParentID,43910 /*[Logging.DB Monitoring]*/;newObjectID,27378 /*[Logging.DB Monitoring\logging.db überwachen]*/;
ObjectID,21500 /*[Objekt #21500 existiert nicht]*/;ObjectID,21500 /*[Objekt #21500 existiert nicht]*/;HasChildren,;ObjectIcon,;ObjectIdent,;ObjectInfo,;ObjectIsHidden,;ObjectIsReadOnly,;ObjectName,DB Status;ObjectPosition,0;ObjectSummary,;ObjectType,2;ParentID,50540 /*[Aquarium\Temperatur\Heizungspumpe\]*/;VariableAction,0;VariableChanged,0;VariableCustomAction,0;VariableCustomProfile,RS.TestprofilDBLogging;VariableID,21500 /*[Objekt #21500 existiert nicht]*/;VariableIsBinary,;VariableIsLocked,;VariableProfile,;VariableUpdated,0;ValueBoolean,;ValueFloat,0;ValueInteger,0;ValueString,;ValueType,0;ValueVariant,;LoggingStatus,;AggregationType,0;newParentID,27378 /*[Logging.DB Monitoring\logging.db überwachen]*/;newObjectID,27468 /*[Logging.DB Monitoring\logging.db überwachen\DB Status]*/;
ObjectID,43618 /*[Objekt #43618 existiert nicht]*/;ObjectID,43618 /*[Objekt #43618 existiert nicht]*/;HasChildren,;ObjectIcon,;ObjectIdent,;ObjectInfo,;ObjectIsHidden,;ObjectIsReadOnly,;ObjectName,Unbenanntes Objekt (ID: 37728);ObjectPosition,0;ObjectSummary,;ObjectType,4;ParentID,50540 /*[Aquarium\Temperatur\Heizungspumpe\]*/;CyclicDateDay,0;CyclicDateDayValue,0;CyclicDateFrom,1320098400;CyclicDateTo,0;CyclicDateType,2;CyclicDateValue,1;CyclicTimeFrom,1348956083;CyclicTimeTo,0;CyclicTimeType,2;CyclicTimeValue,1;EventActive,;EventID,43618 /*[Objekt #43618 existiert nicht]*/;EventLimit,0;EventType,1;LastRun,0;NextRun,0;TriggerSubsequentExecution,1;TriggerType,0;TriggerValue,;TriggerVariableID,0;newParentID,27378 /*[Logging.DB Monitoring\logging.db überwachen]*/;newObjectID,13923 /*[Logging.DB Monitoring\logging.db überwachen\]*/;
ObjectID,52306 /*[Objekt #52306 existiert nicht]*/;ObjectID,52306 /*[Objekt #52306 existiert nicht]*/;HasChildren,;ObjectIcon,;ObjectIdent,;ObjectInfo,;ObjectIsHidden,;ObjectIsReadOnly,;ObjectName,letzter Schreibvorgang vor;ObjectPosition,0;ObjectSummary,;ObjectType,2;ParentID,50540 /*[Aquarium\Temperatur\Heizungspumpe\]*/;VariableAction,0;VariableChanged,0;VariableCustomAction,0;VariableCustomProfile,DB.Alter;VariableID,52306 /*[Objekt #52306 existiert nicht]*/;VariableIsBinary,;VariableIsLocked,;VariableProfile,;VariableUpdated,0;ValueBoolean,;ValueFloat,0;ValueInteger,0;ValueString,;ValueType,1;ValueVariant,;LoggingStatus,;AggregationType,0;newParentID,27378 /*[Logging.DB Monitoring\logging.db überwachen]*/;newObjectID,49843 /*[Logging.DB Monitoring\logging.db überwachen\letzter Schreibvorgang vor]*/;
ObjectID,54329 /*[Objekt #54329 existiert nicht]*/;ObjectID,54329 /*[Objekt #54329 existiert nicht]*/;HasChildren,1;ObjectIcon,;ObjectIdent,;ObjectInfo,;ObjectIsHidden,;ObjectIsReadOnly,;ObjectName,WFE-Links;ObjectPosition,0;ObjectSummary,;ObjectType,1;ParentID,20257 /*[Webfront\Desktop\Aquarium\Stromkosten\Plots]*/;ConnectionID,0;InstanceID,54329 /*[Objekt #54329 existiert nicht]*/;InstanceStatus,102;LastChange,0;ModuleID,{485D0419-BE97-4548-AA9C-C083EB82E61E};ModuleName,Dummy Module;ModuleType,3;newParentID,43910 /*[Logging.DB Monitoring]*/;newObjectID,28797 /*[Logging.DB Monitoring\WFE-Links]*/;
ObjectID,12378 /*[Objekt #12378 existiert nicht]*/;ObjectID,12378 /*[Objekt #12378 existiert nicht]*/;HasChildren,;ObjectIcon,;ObjectIdent,;ObjectInfo,;ObjectIsHidden,;ObjectIsReadOnly,;ObjectName,letzter Schreibvorgang vor;ObjectPosition,0;ObjectSummary,;ObjectType,6;ParentID,54329 /*[Objekt #54329 existiert nicht]*/;LinkChildID,52306 /*[Objekt #52306 existiert nicht]*/;LinkID,12378 /*[Objekt #12378 existiert nicht]*/;TargetID,52306 /*[Objekt #52306 existiert nicht]*/;newParentID,28797 /*[Logging.DB Monitoring\WFE-Links]*/;newObjectID,35404 /*[Logging.DB Monitoring\WFE-Links\letzter Schreibvorgang vor]*/;
ObjectID,29249 /*[Objekt #29249 existiert nicht]*/;ObjectID,29249 /*[Objekt #29249 existiert nicht]*/;HasChildren,;ObjectIcon,;ObjectIdent,;ObjectInfo,;ObjectIsHidden,;ObjectIsReadOnly,;ObjectName,DB Status;ObjectPosition,0;ObjectSummary,;ObjectType,6;ParentID,54329 /*[Objekt #54329 existiert nicht]*/;LinkChildID,21500 /*[Objekt #21500 existiert nicht]*/;LinkID,29249 /*[Objekt #29249 existiert nicht]*/;TargetID,21500 /*[Objekt #21500 existiert nicht]*/;newParentID,28797 /*[Logging.DB Monitoring\WFE-Links]*/;newObjectID,21599 /*[Logging.DB Monitoring\WFE-Links\DB Status]*/;
';
$Inv	= explode("
",substr(substr($raw, 1), 1, -1)); // ersten und letzten Zeilenumbruch entfernen
return $ObjInstProtocol;
}

gruß
bb

Hi bb, kann sein, dass ich dich noch nicht komplett verstanden habe :wink: das Install-Log hat aktuell noch keine Funktion ,allerdings sind dort die Daten drin, die ich später mal bräuchte, falls ich eine Update-Funktion einbaue. Ob und wie das geschen wird muss bei mir noch reifen :smiley: Ich schätze, ich bin da bei 20%.
Das Protokoll im Script ist nichts anderes als ein Inventory der installierten Objekte, mit Änderungen in Scripten hat das nix zu tun.

Ist denn in deinem Objektbaum alles korrekt angelegt worden?

vielleicht noch ein Nachtrag (war grad etwas abgelenkt):

Mit dem Rest kann ich jetzt mal nix anfangen.
Auch wenn ich mir die Installation so ansehe kann ich eigentlich keine Referenz zu den Meldungen sehen.

das ist korrekt, die gibt es auch (noch) nicht. Vielleicht ist der Name „InstallProtocol“ irreführend. Noch. Das wird sich aber ändern.
Für das Installationsergebnis ist im Moment nur entscheidend, was im Script-Meldefenster steht

Ah soooo,
ich hab das als logging und Hinweis wie "… bei diesen Objekten muß noch händisch nachgearbeitet werden… verstanden.

Angelegt wurde alles richtig soweit ichs halt beurteilen kann.

greez

nee, ganz und gar nicht, sorry…relevant ist dafür nur das Meldefenster;) Ich werde aber eine nOK/OK-Liste mit einbauen, die in das Install-Protokoll reinkommt. Die OKs sind nur zur Info, die nOKs sind dann zum händischen nacharbeiten (oder der Projektautor hat gleich eine Installationsroutine mit an Bord, die das bewerkstelligt).

Danke für die Rückmeldung

bevor Werner wieder mit irgendwelchem Genörgel bezgl. Features kommt :D, hab ich mal eine neue Version online gestellt (Datei wie immer über den Projektthread)

in Version 0.4 hinzugekommen

2012-10-02 V0.4
Features
* Kopieren von beliebigen (Teil-)Bäumen des WFE incl. Neuverlinkung der WFC-Items

Bugfixes
* Benennung (Scriptname) des Install-Protokolls unmittelbar nach dem ersten Scriptlauf fehlerhaft

hier mal ein Beispielprojekt, welches ich eben aus dem Quellsystem auf ein Testsystem kopiert habe (1. Bild Quellsystem, 2, Bild: Zielsysten):

ich habe lediglich 2 Actionscripts zu einer Variable manuell verlinken müssen (das wird in der nächsten Version eingebaut), ansonsten hat hier nur der Projekt-Exporter gewütet.

ein paar Rahmenbedingungen zur WFE-Copy Funktion:

[ul]
[li]Voraussetzung: ‚roottp‘-Item muss im Ziel-WFC existieren (ansonsten wird auf Ebene 0 installiert, das Ergebnis muss dann manuell im WFC dem gewünschten Teilbaum zugeordnet werden)[/li][li]Es wird eine Kopie im Ziel-WFC angelegt: alle Original-ItemID’s erhalten im Zielprojekt ein „Cpy“-Präfix[/li][li]Damit sind Kopien von Kopien möglich[/li][li]Wenn ungültige ZIEL-WFC-ID angegeben wird, erfolgt keine Installation[/li][li]Wenn Item im Ziel-Inventory vorhanden (Einzelrüfung), wird dies nicht installiert[/li][/ul]

Und noch zwei Screenshots vom Quell- und Ziel-WFC:

Hallo Raketenschnecke

Echt super das Teil! Vielen Dank, mit dem Script lässt sich vieles vereinfachen! Ich wollte aktuell vor allem dein Logging-DB-Check Script so bei mir importieren. Die Installation / Der Import - und das ist ja das wichtigste läuft einwandfrei. Im Betrieb gibt es noch zwei Dinge die man anpassen muss und noch nicht so richtig daher kommen:

Im Script logging.db Zeile 23/24 waren die Variablen ID’s nach der Installation/Import vertauscht. Richtig ist (bei mir mit lokalen ID’s)
$DB_Timestamp = 28262 /[Logging.DB Monitoring\logging.db überwachen\letzter Schreibvorgang vor]/ ;
$Warnstatus = 33247 /[Logging.DB Monitoring\logging.db überwachen\DB Status]/ ;

Erstellt wurde
$DB_Timestamp = 33247 /[Logging.DB Monitoring\logging.db überwachen\letzter Schreibvorgang vor]/ ;
$Warnstatus = 28262 /[Logging.DB Monitoring\logging.db überwachen\DB Status]/ ;

Das erstellte Profil für die Variable „letzter Schreibvorgang vor“ muss ergänzt werden damit überhaupt Werte in IPS+WF angezeigt werden. Bei den drei Assoziationen muss %d unter Text erfasst werden.

Dann klappt die Sache einwandfrei und die Werte werden in Sekunden angezeigt. Wirklich super! Der Schwellenwert mit 120s passt absolut.

Spitze! Ich werde das Script sicher auch mal verwenden/testen um Webfrontinhalte zu kopieren. Ist ja neu damit auch möglich.