Anhand von Variabeln entscheiden

Hallo zusammen

Gestern habe ich meine IPSymcon-Hard und Software erhalten und bin eifrig am Pröblen. Einiges habe ich zwischenzeitlich hingekriegt und an anderen Dingen scheitere ich derzeit noch.

Nun wollte ich mein erstes PHP-Skript machen:

if ("Dusche_Piri" == True)
   {
   IPS_RunScript("Wohnzimmer_Steckdose_ON");
   }
   
if ("Dusche_Piri" == False)
   {
   IPS_RunScript("Wohnzimmer_Steckdose_OFF");
   }


Ziel:

Wenn der Piri in der Dusche eine Bewegung wahrgenommen hat (dann sollte dieser ja auf True stehen), soll die Wohnzimmer Steckdose angeschaltet werden.

Leider klappt das Skript einfach nicht wirklich. Wenn ich den Piri-Status manuell auf False ändere, wird die Steckdose auch beim manuellen Ausführen des Skripts nichts.

Wenn ich die beiden Skript „ON“ bzw. „OFF“ einzeln öffne und ausführe, wird der Schalter aber ohne Probleme an bzw. abgeschaltet.

Kann mir jemand auf die Sprünge helfen, wo ich da den Denkfehler mache?

Generell: Sowas würde man normalerweise mit einem Timer machen, der das Skipt im Minutentakt ausführt, oder liege ich da falsch?

Vielen Dank für eure Hilfe!!

Gruss

Dani

Du musst eine IP-Symcon Variable mit den GetValue* Funktionen aus dem Systen ins PHP Script holen.

hier z.b. GetValueBoolean(„Dusche_Piri“)

Dann sollte es klappen, wie du möchtest :slight_smile:

Mit einem Timer wird man das Ausschalten lösen. Such mal hier im Forum… gibt so Sachen wie IPS_SetScriptTimer… $IPS_SENDER…

Edit: Habe mal einen Beitrag rausgesucht…

Du darfst auch nicht vergessen unter Event -> OnUpdate die Variable einzutragen. Sonst wird das Script nicht gestartet.

paresy

Dani_CH,

Piri… meinst du einen FS20 Piri? Wenn ja: die melden immer nur ‚true‘. Der Trick ist die Zeit wann die Variable ‚True‘ melden - verbinde deine Piri-Variable durch das Event ‚OnUpdate‘ mit deinem speziellen Skript - das Skript wird dann aufgerufen sobald eine Bewegung vom Piri erkannt wurde.

Sobald das Skript gestartet wird gibt es eine ‚aktuelle‘ Bewegung und du kannst z.b. eine Lampe einschalten. Wenn du dann nach einer gewissen Zeit wieder etwas abschalten möchtest musst du mit den IPS-Skripttimern arbeiten.

Gruss,
Olli

Danke für die Info & den Tipp! Aber wie läuft das nun genau ab?

Ich möchte mit der Piri schauen, ob jemand da ist und wenn ja, wird eine Steckdose aktiviert und es gibt Licht.

Gemäss Olli muss ich dann das Abschalten mit einem Timer machen. Wenn ich diesen aber einfach auf „Stecker_AUS“ programmiere, dann schaltet dieser ja kurzfristig aus und dann wegen der Bewegung wieder ein. Macht nicht viel Sinn. Oder mache ich einen Denkfehler?

Sorry für die dumme Frage… :wink:

Der PIRI ist ein Bewegungsmelder. Bewegt sich nichts, obwohl jemand da ist, kommt auch kein Signal.

Was Olli meint ist das Schaltsignal. Vom PIRI kommt bei Bewegung immer nur true. Ein Abschalten durch den PIRI gibt es nicht. Daher sollte man die Status-Variable als OnUpdate-Trigger für das Script verwenden. Und im Script wird dann ein ScriptTimer gesetzt. (Besser ist ein Trigger auf die DATA-Variable.)

IPS_SetScriptTimer("Scriptname",300);

Wobei der Wert die Zeit in Sekunden ist.

Läuft die Zeit ab, ohne das eine erneute Bewegung gemeldet wird, startet das Script nach der Zeit selbständig.
Ob es der Timer oder der PIRI war kann man mit

if ($IPS_SENDER == "TimerEvent")

abfragen. Wenn es der Timer war, schaltet man die Steckdose wieder aus und setzt sinnvollerweise die PIRI Statusvariable wieder auf false.

Gute Nacht
Fabian

Juhuu, klappt nun bestens!! Vielen Dank für eure Hilfe!!

Salü zusammen

Hmmm, irgendwie klappt es nun doch nicht mehr. Sehr komisch. Ich nutze folgendes Skript:


$bewegung = GetValueBoolean("Dusche_Piri");

if ($bewegung == True)
   {
   IPS_SetScriptTimer("Dusche_Piri_OFF", 60);

   $winamplaeuft = GetValueBoolean("Dusche_Winamp_Runs");
   if ($winamplaeuft == False)
      {
      $id = 31848;
      WAC_Play($id);
      SetValueBoolean("Dusche_Winamp_Runs", True);
      }

   }

if ($bewegung == False)
   {
   IPS_RunScript("Dusche_Winamp_Stop");
   SetValueBoolean("Dusche_Winamp_Runs", False);
   }


<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : Dusche_Piri_OFF.ips.php
Trigger  : 
Interval : 
*/

SetValueBoolean("Dusche_Piri", False);

$id = 31848;
WAC_Stop($id);
SetValueBoolean("Dusche_Winamp_Runs", False);
?>

Das obere Skript wird „ONUpdate“ ausgeführt und mittels Timer 1x pro Minute. Warum schaltet die Musik dann nicht ab nach 1 Minute?

Irgendwo habe ich da einfach einen Denkfehler drin…ich hoffe, ihr könnte mir auf die Sprünge helfen!!!

Ich nehme mal an weil du die Funktionsweise des Bewegungsmelders falsch interprätierst.

GetValueBoolean(„Dusche_Piri“) wird true wenn Bewegung erkannt wurde und bleibt true. Es bleibt auf ewig true. Das Gerät erkennt Bewegungen nicht das Fehlen dergleichen! Du musst „Dusche_Piri“ von Hand wieder auf False setzten. Wenn wieder Bewegung erkannt wird wieder auf true gesetzt und das spiel beginnt von vorn.

Was du tun musst ist, Deine Musik bei Bewegung einzuschalten und nach fest eingestellten, sagen wir 5 Minuten, wieder auszuschalten. Die Dusche_Piri-Variable setzt du wieder auf false. Wenn innerhalb dieser 5 Minuten wieder Bewegung erkannt wird lösscht du den Timer, der die Musik ausschalten soll und setzt ihn neu. So beginnen deine 5 Minuten wieder von forn bis 5 Minuten lang keine Bewegung mehr erkannt wurde. Dann ist das Bad also vermutlich leer.

Toni