Statusspeicherung: Wie ein Flag setzen?

Hallo,

wie realisiert Ihr es, daß nach einer Aktion gespeichert wird, ob diese schon ausgeführt wurde?

Beispiel:
Ein Skript wird einmal pro Minute ausgeführt und meldet ein offenes Fenster bei Regen im Anmarsch. Es soll jedoch nur einmal per TTS die Meldung ausgeben.

Setzt Ihr ein Flag? Wenn ja wie? (Habt Ihr eine Datenbank oder schreibt ihr eine Textdatei (if exist) als Flag?)

Ich bin auf Eure Lösungen gespannt!:wink:

Es gibt da etwas in IP-Symcon, das ist für solche Zwecke schnell, einfach und unkompliziert: Die gute alte Variable ;).

Oft lassen sich solche Dinge sogar ohne Hilfsvariable, einfach durch den Vergleich von Timestampinformationen und Status der Variablen lösen.
D.h. Wenn Dein Script jede Minute gestartet wird und die Variable des Fensters von false auf true geht kannst Du den Timestamp mit dem letzten Scriptaufruf vergleichen und die TTS auslösen. Ist die Zeitdifferenz größer als 1min nicht mehr. Ist dann etwas komplexer, aber ohne Variable. Das funktioniert aber nur wenn die Statusvariable des Fensters nicht ständig im Interval true meldet.

… ich bin immer wieder erstaunt, was mit IP-Symcon alles möglich ist:
Ein Flag in Form einer Variablen setzen und sogar ohne … :rolleyes:
Hier meine schnelle Lösung:


// Trigger: OnUpdate > Regensensor
// "Es ist regnerrisch" wird nach xx Minuten False nach dem letzen Tropfen
$regen = GetValue(56524 /*[5 Wetter\Regensensor\es regnet]*/);
$id_sound = 35352 /*[8 Audio Video IR\Media Player Teufel]*/;

if(($IPS_SENDER == "Variable") and ($regen == True)) {
   IPS_SetScriptTimer($IPS_SELF, 15*60);     // xx Minuten
	if(GetValue(14846 /*[5 Wetter\Es ist regnerrisch]*/) == False){
		WAC_PlayFile($id_sound , IPS_GetKernelDir()."sounds\\hinweis.wav");
   	IPS_Sleep(2000);
   	WAC_PlayFile($id_sound , IPS_GetKernelDir()."sounds\\regen_beginn.wav");
		SetValue(14846 /*[5 Wetter\Es ist regnerrisch]*/, True);
	 	SetValue(39680 /*[5 Wetter\Regen Bericht]*/, "Es ist beginnt zu regnen");
	}else{
	   SetValue(39680 /*[5 Wetter\Regen Bericht]*/, "Es ist regnerisch");
	}
}

if(($IPS_SENDER == "TimerEvent") and ($regen == False)) {
   IPS_SetScriptTimer($IPS_SELF, 0);
   WAC_PlayFile($id_sound , IPS_GetKernelDir()."sounds\\hinweis.wav");
   IPS_Sleep(2000);
   WAC_PlayFile($id_sound , IPS_GetKernelDir()."sounds\\regen_ende.wav");
  	SetValue(14846 /*[5 Wetter\Es ist regnerrisch]*/, False);
 	SetValue(39680 /*[5 Wetter\Regen Bericht]*/, "Es ist trocken");
}

MST

sounds.zip (67.9 KB)

Danke für Eure Hilfe!:slight_smile: