IPS Variable zurücksetzen/initialisieren

Hallo,

gibt es die Möglichkeite eine IPS Variable komplett zurückzusetzen, so als wäre die Variable „nie“ aktualisiert worden. Also genau in den Zustand („noch nie aktualisiert“) wenn eine IPS Variable neu erstell wurde.

SetValueFloat(12345, ???)

Ich möchte damit bestimmte Variablen z.B. zum Tages/Monats/Jahres- Anfang zurücksetzen. Da Null-Werte in meinem Fall auch gültige Werte für die Variable wären ist dies leider keine gute Alternative.

Wie können IPS Variablen initialisiert werden???
Danke!

Hallo,

was ist damit, die Variable auf -1 zu setzen? Ist das auch ein gültiger Wert?

Ansonsten kannst Du Sie einfach löschen per

IPS_DeleteVariable ( integer $VariablenID ) 

(IPS_DeleteVariable: IP-Symcon :: Automatisierungssoftware) und wieder neu anlegen

IPS_CreateVariable ( integer $VariablenTyp )

(IPS_DeleteVariable: IP-Symcon :: Automatisierungssoftware). Dann ist Sie nie aktualisiert …

Danach musst Du Sie eventuell noch das VariablenProfil und die CustomAction zuweisen und Sie im Baum in die richtige Kategorie verschieben.

Eigentlich sollte das dein Problem lösen.

Der folgende Code ist etwas aus dem Zusammenhang gerissen, aber macht genau das innerhalb einer Schleife, die den Heizplan für den heutigen Tag neu erstellt. Erst werden alle alten Variablen in der Kategorie des heutigen Tages gelöscht und dann neu erstellt (für alle Räume und alle Zeiten) und initialisiert.

		// alte Variablen der vergangenen Woche lschen
		$childrenIDsToday = IPS_GetChildrenIDs($todayRootNode);
		$this->configObject->showEnvironmentDebugMessage("Heizplan vorheriger ". date("l") .":","heizungssteuerung_createHeizplan.class[initialzing]",9);
		for ($i = 0; $i < count($childrenIDsToday); $i++) {
			$actualVariableID = $childrenIDsToday[$i];
			$actualVariableName = IPS_GetName($actualVariableID);
			$this->configObject->showEnvironmentDebugMessage("   ". $actualVariableName ,"heizungssteuerung_createHeizplan.class[initialzing]",9);

			// Variable lschen
			$result = IPS_DeleteVariable($actualVariableID);
			$this->checkResult($result,"die by deleting Variable ". $actualVariableID ."(". $actualVariableName .")",$SCRIPT_ID_NAME);
			$this->configObject->showEnvironmentDebugMessage(
				 "Variable ". $actualVariableID . " (". $actualVariableName .") erfolgreich gelscht","heizungssteuerung_createHeizplan.class[initialzing]",8);
		}
		
		// neu anzulegende Variablen erstellen:
		$zeitProfile = $this->configObject->getZeitProfile();
		foreach ($zeitProfile as $raumName => $raumValue) {
			// echo "   ". $keyI . "<br>
";
			foreach ($raumValue as $zeit) {
				// Variable erstellen:
				$variableID = IPS_CreateVariable($configConstantsArray['IPSCreateVariableBoolean']);
				$this->configObject->showEnvironmentDebugMessage(
					 "Variable ". $variableID . " wurde erstellt","heizungssteuerung_createHeizplan.class[initialzing]",7);

				$variableName = $raumName . " - ". $zeit;
				$result = IPS_SetName($variableID,$variableName);
				$this->checkResult ($result,"die by setting Name to DynamicVariable ". $variableName ,$SCRIPT_ID_NAME);
				$this->configObject->showEnvironmentDebugMessage(
					 "Variable ". $variableID . " umbenannt in: ". $variableName,"heizungssteuerung_createHeizplan.class[initialzing]",7);

				//CustomProfile setzen:
				$result = IPS_SetVariableCustomProfile($variableID,$configConstantsArray['WebFrontVariableProfileName']);
				$this->checkResult ($result,"die by setting CustomProfile ". $variableID ." to DynamicVariable ". $configConstantsArray['WebFrontVariableProfileName'],$SCRIPT_ID_NAME);
				$this->configObject->showEnvironmentDebugMessage(
					 "Variable ". $variableID . ' CustomProfil : "'. $configConstantsArray['WebFrontVariableProfileName']  .'" zugewiesen',"heizungssteuerung_createHeizplan.class[initialzing]",7);

				// CustomAktion setzen:
				$result = IPS_SetVariableCustomAction($variableID,$configConstantsArray['WebFrontChangeBooleanScriptObjectID']);
				$this->checkResult ($result,"die by setting CustomAction ". $variableID ." to DynamicVariable ". $configConstantsArray['WebFrontChangeBooleanScriptObjectID'],$SCRIPT_ID_NAME);
				$this->configObject->showEnvironmentDebugMessage(
					 "Variable ". $variableID . ' CustomAction : "'. $configConstantsArray['WebFrontChangeBooleanScriptObjectID'] .'" zugewiesen',"heizungssteuerung_createHeizplan.class[initialzing]",7);

				// Variable im Logischen Baum einordnen:
				$result = IPS_SetParent($variableID,$todayRootNode);
				$this->checkResult($result,"die by moving ". $variableID ." to RootNode (". $todayRootNode .")",$SCRIPT_ID_NAME);
				$this->configObject->showEnvironmentDebugMessage(
					"Variable ". $variableID . ' im Baum unter '. $todayRootNode .' ("'. IPS_GetName($todayRootNode) .'") eingeordnet',"heizungssteuerung_createHeizplan.class[initialzing]",7);
					
				// Variable initialisieren:
				$initialValue = $this->configObject->getInitialAnwesendValue($raumName,$zeit,$actualWeekDay);
				$result = SetValueBoolean($variableID,$initialValue);
				$this->checkResult($result,"die by setting ". $variableID ." to ". $initialValue,$SCRIPT_ID_NAME);
				$this->configObject->showEnvironmentDebugMessage(
					"Set Variable ". $variableID . ' to '. $initialValue,"heizungssteuerung_createHeizplan.class[initialzing]",7);


			} // foreach ($raumValue as $zeit)

Gruß,

ernie

Echt zu initialisieren, also so, als wären die Vars gerade neu angelegt worden, geht m.W. nicht.

Einzig löschen und wiederanlegen geht, was aber die Systematik der Object-ID’s und dem Nichtexistieren anderer zuverlässiger und einfacher Zugriffe auf Objekte nicht als realistische Variante erscheinen lässt.

Du wirst Dir also irgendeinen „Nix-Wert“ (im Sinne vono NULL) überlegen müssen.

Alternativ könntest Du das Infofeld beschreiben und zusätzlich auswerten. Mache ich bei anderen Themen teilweise mangels Abbildung in IPS.

jwka

Stimmt! Das habe ich nicht bedacht bzw. ich benötige die Variablen Object-IDs selbst nicht in meinem Script. Ich gehe einfach alle Variablen durch, die unter der jeweiligen Kategorie abgelegt sind, dadurch sind mir die ObjectIDs der eigentlichen Varibalen egal …

Die Kategorie selbst lösche ich nie.

Gruß,

ernie