Rollo bei Ankunft auf vorherige Position fahren

Hallo zusammen,

ich habe mir eine Rollo Steuerung programmiert. Wenn keiner Zuhause ist werden alle Rollos runtergefahren und die Automatik ausgestellt. Wenn Jemand nach Hause kommt werden die Rollos auf die Position vor dem Verlassen des Hauses gefahren und die Automatik wieder angestellt. Dazu speichere ich momentan die ID’s mit der Position der Rollos beim Verlassen in eine .txt und lese sie bei Ankunft wieder aus. Das funktioniert eigentlich auch solange keine Skriptfehler vorhanden sind, trotzdem gefällt mir die Lösung nicht so richtig.

Wie würdet ihr das machen? Zwei Lösungsansätze dir mir einfallen würden:

  1. Archiv Control:
    Dazu müsste ich allerdings alle Positions und Automatik Variablen dauerhaft loggen (zuviel Daten?).
    Ich habe eine boolean Variable Anwesenheit (true=jemand zuhause, false=keine zuhause). Da könnte ich die Zeit vom verlassen des Hauses herausfinden, aber wie bekomme ich dann mit AC_GetAggregatedValues an den letzten Wert vor dem verlassen des Hauses? Ich kann ja irgendwie nur Zeiten angeben.

  2. Statt in eine .txt das ganze in in JSCON kodiertes String Array und dann in eine IPS String Variable packen.

Ich freue mich über eure Ratschläge.

Gruß Basti

//EDIT: Hier mal meine bisherigen Methoden um in die .txt zu schreibund und aus ihr zu lesen:


function HP_devicesAutoOnToFile($shutters, $filepath, $HP_shutterTechnikraum) {
	//In Array speichern
	$autoArray = array();
	foreach ($shutters as $device) { //Für jedes Gerät
		$devicePosId = IPS_GetObjectIDByIdent("position", $device);
		$devicePos = GetValueInteger($devicePosId);
		$deviceAutoId = IPS_GetObjectIDByIdent("auto", $device);
		$deviceAuto = GetValueBoolean($deviceAutoId);
		$deviceTimeId = IPS_GetObjectIDByIdent("time", $device);
		$deviceTime = GetValueBoolean($deviceTimeId);

		$bright = lightOutside();
		if ($bright === false && $devicePos === 100) {
			if ($device === $HP_shutterTechnikraum) { // Technikraum geschlossen lassen
			   $devicePos = 100;
			} else { // Alle sonstigen Rollos hochfahren
			   $devicePos = 0;
			}
		}

		if ($deviceAuto && $deviceTime) {
			$autoArray[] = $device . "|" . $devicePos;
		}
	}

	//In Datei speichern
	$fp = fopen($filepath, "w");

	foreach ($autoArray as $val) {
		fwrite($fp, $val . PHP_EOL);
	}
	fclose($fp);
}


function HP_devicesAutoOnFromFile($filepath) {
	//Aus Datei auslesen
	$autoArray = file($filepath);
	$autoArray = array_map("trim", $autoArray); //Entferne Zeilenumbrüche
	foreach ($autoArray as $arrVal) {
		list($key, $value) = explode("|", $arrVal);
		$result[$key] = $value;
	}

	return $result;
}