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?
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.
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?
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.
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.