Variable kopieren

Hallo,

ich fände es sehr hilfreich wenn man Variablen kopieren könnte.
Also ich möchte eine fertige Variabe (Name, Profil, Logging usw. eingestellt) kopieren und wieder einfügen (mit einer neuen ObjektID).
Wäre sehr hilfreich wenn man viele Variablen vom selben Typ anlegen muss.

Was haltet Ihr davon?

Gruß Erwoolf

fehlt mir auch gerade

Kann man sich einfach selber bauen :slight_smile:

Sent from my iPad using Tapatalk HD

Die Kopierfunktion verschiedenster Sachen ist ein seit Jahren gewünschtes Feature. :wink:

Evtl. geht es mit dem Projekt-Exporter von Raketenschnecke.

Gruß
Bruno

Kann man sich einfach selber bauen

z.B. …?

Gruß
Erwoolf

Auf die schnelle (meine Prios sind gerade nicht bei IP Symcon :frowning: ) schau Dir mal die folgenden Befehle an :

print_r(IPS_GetVariable(40770));

/* liefert z.B.:
Array
(
[VariableChanged] => 1246039629
[VariableCustomAction] => 0
[VariableCustomProfile] => BoolProfile
[VariableID] => 40770
[VariableIsBinary] =>
[VariableIsLocked] =>
[VariableProfile] => ~Switch
[VariableUpdated] => 1246039629
[VariableValue] => Array
(
[ValueArray] => Array
(
)

    [ValueBoolean] => 1
    [ValueFloat] => 0
    [ValueIndex] => Array
    (
        [IndexInt] => 0
        [IndexStr] =>
        [IndexType] => 0
    )

    [ValueInteger] => 0
    [ValueString] =>
    [ValueType] => 0
)

)
*/

integer IPS_CreateVariable ( integer $VariablenTyp )

http://www.ip-symcon.de/service/dokumentation/befehlsreferenz/variablenverwaltung/variablenprofile/

Schaut Dir doch mal den Baukasten an… es ist alles da nur Mut :slight_smile:

Hallo!

Ja das funktioniert schon so, aber anders wäre es noch komfortabler…

Ein Beispiel:

Ich lese von 4 Tankstellen den Dieselpreis aus und für jede brauche ich 9 Variablen.
Preis_aktuell, Min_Tag, Max_Tag, Min_Woche, Max_Woche, Min_Monat, Max_Monat, Min_Jahr und Max_Jahr

Das ganze hab ich für eine Tankstelle angelegt, jetzt wäre es einfach die 9 Variablen zu kopieren und unter den anderen 3 Tankstellen wieder eizufügen.
Ohne das man den Namen oder sonst was daran ändern müsste…

Gruß
Erwoolf

Versuch doch mal Dein Problem hiermit zu lösen : http://www.ip-symcon.de/forum/threads/20529-Script-(Klasse)-um-dauerhaft-Variablen-bzw-Arrays-zu-speichern

Ich brauch die Werte in einer Variablen.
Will sie im Dashboard u. WebFront darstellen!

Hier muss man nicht immer extra Variablen anlegen für Variablen / Zustände die nicht direkt in IPS verwendet werden sollen (WebFront etc).

Hallo Erwoolf,
vielleicht hilft Dir das folgende Script weiter. Damit kannst Du Objekte unter einem vorgegebenen Knoten ($sourceRoot) unter einen anderen Knoten ($targetRoot) kopieren. Schon vorhandene Objekte unter dem TargetRoot werden ausgelassen.
Das Script ist noch nicht vollständig und etwas quick and dirty (Events klappen auch noch nicht), aber vielleicht kannst Du es ja auch an Deine Belange anpassen.

$sourceRoot=56541 /*[04 Installationen\WC\Raumheizung\RTR]*/;
$targetRoot=52078 /*[04 Installationen\Wohnzimmer\Raumheizung\RTR]*/;
CopyTree($sourceRoot,$targetRoot);

function CopyTree($sourceId,$targetId) {
	$children=IPS_GetChildrenIDs ($sourceId);
	$childrenTarget=IPS_GetChildrenIDs ($targetId);
	foreach ($children as $id) {
		$obj=IPS_GetObject($id);
		$name=IPS_GetName($id);
		$id2=@IPS_GetObjectIDByName($name,$targetId);
		if ($id2==0) {
			$type=$obj['ObjectType'];
			$newId=0;
			switch ($type) {
			   case 0:
			      $newId=IPS_CreateCategory ( );
			      Break;
			   case 2:
			      $var=IPS_GetVariable($id);
			      $newId=IPS_CreateVariable($var['VariableValue']['ValueType']);
		  	      Break;
			   case 3:
			      $var=IPS_GetScript($id);
			      $newId=IPS_CreateScript(0);
		  	      Break;
//			   case 4:
//		      $var=IPS_GetEvent($id);
//			      if ($var['EventType']==0) {
//			      	$newId=IPS_CreateEvent(0);
//					}
//		  	      Break;
			   case 6:
			      $var=IPS_GetLink($id);
		      	$newId=IPS_CreateLink();
		  	      Break;
				default:
					$newId=0;
				   Break;
			}
			if ($newId) {
			   IPS_SetName($newId,$obj['ObjectName']);
			   IPS_SetParent($newId,$targetId);
			   IPS_SetPosition($newId,$obj['ObjectPosition']);
			   if ($type==2) {
		      	IPS_SetVariableCustomProfile($newId,$var['VariableCustomProfile']);
				}
				if ($type==3) {
				    IPS_SetScriptContent($newId, IPS_GetScriptContent($id));
				}
//				if ($type==4) {
//				    IPS_SetEventActive($newId,false);
//				}
				if ($type==6) {
				    IPS_SetLinkTargetID($newId,$var['LinkChildID']);
				}
			   CopyTree($id,$newId);
				print_r ("Object created:".IPS_GetName($newId)." Type=".$type."
");
			} 
		} else {
			   print_r("Object exists:".IPS_GetName($id2)."
");
			   if ($obj['ObjectType']<>1) {
			   	CopyTree($id,$id2);
				}
		}
	}
}

Viel Erfolg BONOX

Danke Bonox für dein Script.
Trotzdem fände ich es mit Rechtsklick…kopieren…einfügen besser!

Und anscheinend ist es nicht nur von mir gewünscht!

Die Kopierfunktion verschiedenster Sachen ist ein seit Jahren gewünschtes Feature.

Vielleicht sollten einfach mal ein weinig mehr auf die Wünsche der zahlenden User eingegangen werden! :cool:

Gruß
Erwoolf

Macht kopieren von irgendetwas keinen Sinn. Mehrfachverwendung geht über Links, für mehrfach verendete Strukturen solte man Skripten schreiben, die dies erledigen. Die Doku dazu ist umfassend. Ich wende das in 3.1 nur noch an, nur noch selten, nur zum Test, lege ich Objekte noch direkt an.

Gruß
Bernd aschendorf

Hallo,

Ich denke das sehen viele ganz anders, wenn man mal eine oder zwei Variablen benötige schreibt man sich doch kein Skript dafür.

Wenn man eine Instanz/Variable, oder was auch immer mit ähnlichen Parametern benötigt ist das Kopieren eines bestehenden Elementes mit den passenden Eigenschaften doch viel einfacher. Dann einfach die Parameter des neuen Elementes an zu passen ist doch viel einfacher als das ganze neu an zu legen.

Gruß

Frank

Macht kopieren von irgendetwas keinen Sinn. Mehrfachverwendung geht über Links

Das macht natürlich keinen Sinn!

Wie ich es anfangs beschrieben habe sollen natürlich die eingefügten Objekte eine neue ID bekommen!

Also ich möchte eine fertige Variabe (Name, Profil, Logging usw. eingestellt) kopieren und wieder einfügen (mit einer neuen ObjektID).

Ich bin ganz Deiner Meinung. Es wäre schon schön wenn IPS wenigstens einen kleinen ersten Schritt geht und das Kopieren einer Variablen (natürlich mit deren Profil und Archivierungseinstellungen) ermöglicht, selbstredend neue ID. Wenn die USER dies dann „annehmen“ könnte man an anderen Kopierfiunktionen (Dummy-Module), Scripte, Ereignisse … weiterüberlegen…

Ciao Herbert