Fenster und Türkontakte letzte Änderung VariableUpdated

Hallo aus Magdeburg,

ich habe folgendes Problem .
Ich setzte 25 Fenster und Türkontakte ein und würde mir gerne anzeigen lassen wann das Fenster das letzte mal seinen Status geändert hat.

Ich bin dazu folgendermaßen vorgegangen , alle Kontakte sind ein einer Kategorie untergebracht.

hier mein bisheriges Script:


<?
 foreach(IPS_GetChildrenIDs(52462 /*[Funktionen\Kontakte]*/) as $id) {
   	//echo $id . PHP_EOL;
   	//echo IPS_GetName($id). PHP_EOL;
   	//print_r(IPS_GetObject($id)). PHP_EOL;
    foreach(IPS_GetChildrenIDs($id) as $id_child) {

		$wert = IPS_GetObject($id_child);
   	if ($wert['ObjectIdent'] == "STATE"){

	   	   echo $id_child . PHP_EOL;
	   	   echo IPS_GetName($id). PHP_EOL;
	   	   $temp=IPS_GetName($id);
	   	   $data = IPS_GetVariable($id_child);
	   	   $last_up = ($data['VariableUpdated']);
	   	   //echo $last_up ;
				$unixtime_to_date = date('j.n. H:i',$last_up);
				echo "
";
				echo "am $unixtime_to_date Uhr";
				echo "
";

}

	   	// $id = IPS_CreateVariable(3);
	   	 //IPS_SetName($id,$temp);
	   	   //print_r(IPS_GetVariable($id));
           // $wert = IPS_GetVariable($id);
            //echo $wert['VariableAction']. PHP_EOL;
				//if ($wert['VariableAction']== 0){
			 	// echo $wert['VariableCustomAction']. PHP_EOL;
		//		if ($wert['VariableAction'] > 0 && $wert['VariableCustomAction'] != 1){
	   //	   	  echo "Name: ".IPS_GetName($instance). PHP_EOL;
	   //	   	  echo "ID: ".$id . PHP_EOL;

		}
	}
	}

return;



nun möchte ich die Ausgabe dazu im jeweiligen Kontakt in eine Variable schreiben lassen und genau da hört es gerade auf.Angefangen hat es mal damit das ich es für einen einzigen Alarm gemacht habe , bei 25 Kontakten müsste ich aber von Hand 25 Scripte und 25 Variablen anlegen. und ich finde die Info wann das Fenster das letzte mal geöffnet oder geschlossen wurde sehr interessant . Daher gehört das wahrscheinlich hier unter nützliche Scripts.

vielleicht habt ihr die zündende Idee

Du solltest ein Script nehmen, dass durch den jeweiligen Kontakt ausgelöst wird (Ereignis). Dann kannst du im Script über die Systemvariablen den Ablauf steuern.

Ich habe kein Beispiel hier, aber eventuell hilft dir

oder

Hallo Ralf,

wäre ne Idee dann muss ich aber echt 25 variablen anlegen, ok das ist schnell gemacht .
Dann wäre aber die Frage wie ich einen Bezug zu der Variable bekomme die in der Instanz zu finden ist , sagen wir mal die würde „Zeit“ heißen.

du meinst also so


if($_IPS['SENDER'] == "Execute")
{
$wert = IPS_GetObject($_IPS['VALUE']);
}


hmmm , da bin ich nicht fit genug .

So vielleicht?


<?
// Zeitstempel in Variable schreiben
	$TriggerID = $_IPS['VARIABLE'];
	$ParentID = IPS_GetParent(IntVal($TriggerID));
	$TimeStampID = IPS_GetObjectIDByName("Zeit", $ParentID);
	$TimeStamp = date("j.m.y - H:i:s", time());
	SetValue ($TimeStampID, $TimeStamp);
?>

Dann einen Trigger für das Skript auf die Statusvariable derFensterdrehgriffe/Türkontakte legen.

Wenn Du zu faul bist die Variablen von Hand anzulegen kannst Du auch im Skript prüfen ob Sie vorhanden sind und ebenfalls über das Sript anlegen falls nicht.

Hi Kronos,

das hatte echt was mit Faulheit zu tun oder besser mit dem Gedanken , das es einfacher gehen muss. Ich hatte mich dann schon mit IPS_CreateVariable versucht durch zu fummeln.
Das ging auch , bloß das er eben immer neue anlegte anstatt zu prüfen ob Sie schon da wären, ich hab dann die suche bemüht aber die ist ja hier nicht ganz so gut.

Na, so schlecht ist die Suche nun wirlich nicht: klick.

aber dann

:eek:

25 Ereignisse zu einem Script anlegen ist in 2 Minuten erledigt ;).

Tolle Scripte bauen dauert länger.

Der Code für die Funktion zum Variablen anlagen isr auch in meinem ersten Link enthalten.

Nabend ihr beiden ,

ich dachte einfach das haben schon viele im Einsatz , denn ich dachte es interessiert wann welches Fenster oder Tür zum letzten mal geöffnet wurde. Ich hab mich jetzt ran gesetzt und 25 Variablen gemacht und dann das Script von Kronos (aller herzlichsten dafür) mit dem Ereignis versehen .

Das Ergebnis ist das was ich gern wollte ,vielen Dank für die Hilfe .

schönen Abend noch

Hatte gerade ähnliches gesucht und daher hier das Skript bissel aufgebohrt:

Nur Trigger erstellen auf Variablen änderung und es werden bei Triggerung automatisch 2 Variablen für letzte Öffnung und Schliessung unter der Trigger-Variablen angelegt.


 <?
// Zeitstempel in Variable schreiben
    $TriggerID = $_IPS['VARIABLE'];
    $ParentID = IPS_GetParent(IntVal($TriggerID));

    switch ($_IPS['VALUE'])
    {
      case true:
         $TimeStampID = @IPS_GetObjectIDByName("Zeit Auf", $ParentID);
         if ($TimeStampID === false)
// Falls Variable nicht vorhanden wird sie erstellt.
         $TimeStampID = IPS_CreateVariable(3);
         IPS_SetName($TimeStampID,"Zeit Auf");
         IPS_SetParent($TimeStampID, $ParentID);
      	$TimeStamp = date("d.m.y - H:i:s", time());
    		SetValue ($TimeStampID, $TimeStamp);
    		break;
    		
	  case false:
	      $TimeStampID = @IPS_GetObjectIDByName("Zeit Zu", $ParentID);
         if ($TimeStampID === false)
// Falls Variable nicht vorhanden wird sie erstellt.
         $TimeStampID = IPS_CreateVariable(3);
         IPS_SetName($TimeStampID,"Zeit Zu");
         IPS_SetParent($TimeStampID, $ParentID);
	  		$TimeStamp = date("d.m.y - H:i:s", time());
    		SetValue ($TimeStampID, $TimeStamp);
    		break;
	  }
	  
?>

Danke und Gruß,
Peter

Da fehlt mal wieder der „gefällt mir“ Button.

Sehr schöne und kompakte Lösung :).

Hammer !!! Vielen Dank Peter .

Klasse. Vielen Dank…

das nehme ich - mit Anpassung - nun als Zeitstempel für meine Zwave Batteriebetriebenen Sensoren… :slight_smile: