Scriptstart verhindern

hab die Doku rauf und runter durchsucht. Wurde nicht fündig. Kann ich einen Scriptstart verhindern mit einem Befehl. Brauche es für folgendes:

Die alles aus Taste wird gedrückt, beim Treppen runter laufen startet der Bewegungsmelder das „Überwachungsscript“ und schaltet den Monitor wieder ein, welcher bei „alles aus“ ausgeschaltet wird.

…na dann setz doch mit der alles Austaste eine Variable auf true. Im Script dann abfragen. if($allesAus) return;

Fertig.

SetValueBoolean(51134 /*[Bewegungsmelder\Bewegung Tag\Status]*/, true);

gibt folgende Fehlermeldung:

Warning: Variable wurde als „Nur-Lesen“ markiert und kann nicht verändert werden in [Test\Testscript] on line 3

:confused:

Was willst Du mit der Statusvariable deines Bewegungsmelders :confused:

Leg dir doch einfach eine Boolvariable an, so schwer kann es doch nicht sein.

wenn die Statusvariable des Bewegungsmelder auf true geht, schaltet sich der Monitor ein, und genau dies will ich verhindern bei „alles aus“.

dann agier doch auf die Variable. if($allesAus) && ($bewegung)) return;

Den Status des Bewegungsmelders zu verändern ist noch wirklich korrekt oder? Es bewegst sich ja keiner, nur weil du die Variable verändern würdest. :smiley:

Erstell doch lieber eine Variable für „Nachtmodus“, die du dann im Skript, der die Monitorsteuerung übernimmt, entsprechend auswertest :slight_smile:

paresy

Zur Not, könntest Du auch auf analog Technik umsteigen und bittest deine Frau, bevor Du die Treppe runter kommst einen Lappen über den Bewegungsmelder zuhängen. :D;):slight_smile:

seit ein paar Monaten beschäftige ich mich nun mit IPS - sofern die Zeit es zulässt. Leider hab ich auch nicht die Zeit, mein Buch „PHP für Dummies“ täglich 3 mal durchzulesen, damit ich möglichst schnell der Programmier-Hirsch bin.

Als absoluter Neueinsteiger bietet IPS Zuckerbrot und Peitsche in Hülle und Fülle.

Mann will’s verstehen und gebrauchen, mann tüfftelt und kommt nicht weiter. Nicht nur mir ist’s manchmal peinlich, gewisse Fragen zu stellen, aber irgendwann kommt der Moment, wo man nicht mehr weiter kommt.

Und dann kommen Antworten wie

Zur Not, könntest Du auch auf analog Technik umsteigen und bittest deine Frau, bevor Du die Treppe runter kommst einen Lappen über den Bewegungsmelder zuhängen.
.

Macht nicht gerade Mut, eine nächste „dumme“ Frage zu stellen.

Schon wieder dieses Gejammer :wink:

Du bekommst doch laufend Hilfe, und ein bischen Spass schadet niemandem. Also, Augen „auf“ und durch. Du schaffst es. :smiley:

Ach so, was oben gemeint ist: Led Dir eine neue Bool-Variable an. Diese wird über den Schalter gesteuert. Auswertung der Variable im Script über die if-Bedingung.

Gruß
Bruno

Hier muss niemandem etwas peinlich sein. RWN hat doch auch allerlei Tipps gegeben. Und wie schon gesagt… ich hoffe, dass wir auch ein wenig Spaß haben dürfen. Wir beantworten auch gerne deine nächste Frage.

Poste doch mal dein Skript, dass auf den Bewegungsmelder reagiert. Dann schauen wir mal, wie wir das if reinfummeln :slight_smile:

paresy

ich versteh die Logik hinter diesen Tipps nicht. Wenn ich mir eine zusätzliche Bool anlege, macht die ja das gleiche wie die „richtige“. Die kann ich zwar schreiben, aber der Bewegungsmelder stellt sie ja danach wieder um.

<?

$bewegung = GetValueBoolean(51134 /*[Bewegungsmelder\Bewegung Tag\Status]*/);

	if ($bewegung>0)
{
SetValueBoolean(16884 /*[Bewegungsmelder\Bewegung Tag\Ausweichvariable]*/, true);
}

	else
{
SetValueBoolean(16884 /*[Bewegungsmelder\Bewegung Tag\Ausweichvariable]*/, false);
}
	
?>

Okey. Dein Problem ist, glaube ich, weniger das PHP Skript, als die Idee, was du überhaupt benötigst :slight_smile:

Die alles aus Taste wird gedrückt, beim Treppen runter laufen startet der Bewegungsmelder das „Überwachungsscript“ und schaltet den Monitor wieder ein, welcher bei „alles aus“ ausgeschaltet wird.

Du möchtest die Ausführung vom Überwachungsskript blockieren. Die Frage ist
a) Wann?
b) Für wie lange?

Die Antwort für a) hast du uns gegeben. Und zwar, wenn das „Alles aus“ Skript gestartet wurde. b) fehlt noch.

IP-Symcon hat keine Befehl wie „Skript darf jetzt für X minuten nicht gestartet werden“. Du kannst aber, in deinem „Alles aus“ Skript eine Variable z.B. BlockiereBewegungmelder (Boolean) auf TRUE setzen, die signalisiert, dass der Bewegungsmelder blockiert werden soll.

In deinem „Überwachungsskript“ musst du dann prüfen, ob eine Blockierung vorhanden ist, und wenn ja, das Skript beenden. Das kann so aussehen:


if(GetValue(12345 /* [Haus/BlockiereBewegungmelder] */))
{
 return; //sofort beenden.
}

paresy

PS: Für alle anderen noch eine weitere Idee: Die letzte Startzeit vom AllesAus Skript, oder der Variable die das AllesAus Skript startet im Überwachungsskiprt auswerten und mit time() und der Blockierzeit vergleichen.

blockieren soll es für 5 Minuten.

if(GetValue(12345 /* [Haus/BlockiereBewegungmelder] */)) 
{ 
 return; //sofort beenden. 
}  


ist damit die effektive Variable gemeint?

Mach es wie Paresy im zweiten Ansatz meint:

PS: Für alle anderen noch eine weitere Idee: Die letzte Startzeit vom AllesAus Skript, oder der Variable die das AllesAus Skript startet im Überwachungsskiprt auswerten und mit time() und der Blockierzeit vergleichen.

Frage in Deinem Überwachungsskript ab wie lange es her ist, dass das Alles-Aus-Skript abgefragt wurde. Das ist der eleganterer Weg ohne zusätzliche Variablen usw.

Hallo Jürg,

um die Verwirrung komplett zu machen … :wink:

Die „alles aus“ Taste startet einen Script-Timer, der eine Bool-Variable xxx z.B. 5 min. auf true stellt und danach wieder auf false schaltet.

Bool-Variable anlegen … im Script 12345 mit ID ersetzen. Script wird mit Eriegnis „Aktualisierung“ Variable des Tasters.


if($IPS_SENDER == "TimerEvent")
 {
  //Aus Befehl
  SetValueBoolean(12345 /*[Zentral_Skripte\Timer_5_min\Variable_ein]*/, false);
  //Timer ausschalten
  IPS_SetScriptTimer($IPS_SELF, 0);
 }
 else
 {
  //An Befehl
  SetValueBoolean(12345 /*[Zentral_Skripte\Timer_5_min\Variable_ein]*/, true);
  //Timer anschalten
  IPS_SetScriptTimer($IPS_SELF, 5*60);
 }

Im Bew.melder-Script muss die Auswertung : wenn bew.melder ein und Variable xxx = true, dann nicht schalten (siehe Rainer gestern 21.49).

Gruß
Bruno

nachdem ich jetzt wahrscheinlich 100 mal die Treppe runter und hoch gelaufen bin zum testen hab ich keine Kraft mehr zum denken.

Mein Bewegungsmelder stösst folgendes Script an

<?


$bewegung = GetValueBoolean(51134 /*[Bewegungsmelder\Bewegung Tag\Status]*/);
$fake = GetValueBoolean(16884 /*[Bewegungsmelder\Bewegung Tag\Ausweichvariable]*/);

if(($bewegung) && ($fake = true))
{
 return; //sofort beenden.
}
else
{
IPS_ExecuteEx("C:/IP-symcon/nircmd.exe", "sendkeypress ctrl+alt+F1", false, false, 0);

WFC_SwitchPage(36649 /*[WebFront Wohnen]*/, "item8943");

$id_sound = 19919 /*[Hinweise\Media Player]*/;
WAC_SetVolume($id_sound, 0);
WAC_PlayFile($id_sound, "C:\Ansagen\DingDong.wav");
}

?>

51134 ist die Variable des Bewegungsmelders, 16884 die „Ausweichvariable“ für alles aus. Wo hab ich den Wurm drin?

Manuell starten läuft das Script so durch wie es muss, beim Treppensteigen nicht, dabei wird aber nur die 51134 auf true gestellt.

Wenn, dann so.

if(($bewegung) && ($fake == true))

es reicht aber auch einfach.

if(($bewegung) && ($fake))

So, Fitnessprogramm = beendet. Danke :wink:

woher weiss das Script dann, dass die Variablen auf True sind?