Fs20 Piri II

Schaltet der PIRI bei Dir etwas oder ist er nur zur Bewegungserkennung gedacht?

Zur Bewegungserkennung und Script schaltet bei True Licht an.

Und warum nicht direkt? Hab ich bei mir so gemacht, so geht es auch wenn IPS mal Offline ist. So wüßten wir auch gleich ob die 30s auch stimmen.:wink:

Hast ja recht muss mal schauen.

Ich muss jjetzzt erstmal mein ISDN Modul ans laufen bringen.

Wenn ich es richtig überblicke ist es das letzte was mir fehlt um auf Version 2.0 umzustellen. Alles andere scheint jetzt weitesgehends zu laufen :rolleyes:

Habe die ganze Zeit mit auszusendeten TRUE und FALSE Befehlen der PIRIs gearbeitet. Leider wurde oft zu früh ausgeschaltet(nach 20sekunden statt 5 Minuten). Jetzt bin ich auf diesen Thread hier gestoßen und habe erstmal meine PIRIs auf den Wert 11 gestellt.

Das Script wird durch Statusänderung von einer beider PIRIS angestoßen (in der Fachsprache glaube ich nennt man das triggern?)

Ich möchte das später das Licht für jeweils 5 Minuten angeschaltet und dementsprechend für weitere 5 Minuten verlängert wird, wenn ein TRUE von einen der beiden PIRIS kommt.

Nun, bei meinem Script geht alle 5 Minuten das Licht an. Unabhängig vom Status der PIRIs. Also auch wenn beide auf „False“ sind. Aus war das Lciht dafür noch nicht.

Weiß jemand wo der Fehler liegt? Für hilfe bin ich echt dankbar. Sitze schon die ganze Nacht hier dran.


<?

$id1 = 12537 /*[Bad\FS20 Bewegungsmelder Bad\Status]*/; 
$id2 = 51095 /*[Bad\FS20 Bewegungsmelder Dusche\Status]*/; 

If (($id1== true) or ($id2== true)) //Wenn PIRI Bad oder Dusche "True" sendet, dann Licht ein.
{
	IPS_SetScriptTimer(52494 /*[Bad\Entrance_Dim_Bad]*/, 300); //Klappt nur nicht. Schaltet Licht andauernd ein. Auch wenn beide PIRIs auf Status false stehen.
}


else //Wenn beide PIRI nach 5 Minuten keine erneutes "True" gesendet haben, dann Licht ausschalten. Licht geht nicht aus.
//klappt auch nicht. Licht bleibt immer an.
{
	FS20_SetIntensity(19627 /*[Bad\FS20 Empfänger]*/, 0, 10);
	FS20_SwitchMode(19627 /*[Bad\FS20 Empfänger]*/, False);
	IPS_SetScriptTimer(52494 /*[Bad\Entrance_Dim_Bad]*/, 0);
}
?>

Hallo,

Du hättest vielleicht mal den Wert der Variablen auslesen sollen ;).

<?
$id1 = 12537 /*[Bad\FS20 Bewegungsmelder Bad\Status]*/; 
$id2 = 51095 /*[Bad\FS20 Bewegungsmelder Dusche\Status]*/; 

If (GetValueBoolean($id1) || GetValueBoolean($id2)) //Wenn PIRI Bad oder Dusche "True" sendet, dann Licht ein.
{
    IPS_SetScriptTimer(52494 /*[Bad\Entrance_Dim_Bad]*/, 300); //Klappt nur nicht. Schaltet Licht andauernd ein. Auch wenn beide PIRIs auf Status false stehen.
}


else //Wenn beide PIRI nach 5 Minuten keine erneutes "True" gesendet haben, dann Licht ausschalten. Licht geht nicht aus.
//klappt auch nicht. Licht bleibt immer an.
{
    FS20_SetIntensity(19627 /*[Bad\FS20 Empfänger]*/, 0, 10);
    FS20_SwitchMode(19627 /*[Bad\FS20 Empfänger]*/, False);
    IPS_SetScriptTimer(52494 /*[Bad\Entrance_Dim_Bad]*/, 0);
}
?>

Horst

Da ist was dran. Also an geht mein Licht jetzt, aber leider nicht mehr aus.
Ich habe dazu mal eine grundsätzliche verständnis Frage
Was bedeutet eigentlich:

If (GetValueBoolean($id1) || GetValueBoolean($id2)) 
{ 
schalte Licht an
}
//Wo steht hier das nachfolgende Zeile nur ausgeführt werden, wenn der Status ID1 oder ID2= "true" ist.
//Ich sehe in der Zeile nur, das zwei Statusse von Variablen des Typs Boolean hier ausgelesen werden, aber nix das eine davon auch "true" sein muss???

Und so siehts jetzt bei mir aus. Wie gesagt. IPS schaltet meine Lampe nicht aus

<?
$id1 = 12537 /*[Bad\FS20 Bewegungsmelder Bad\Status]*/;
$id2 = 51095 /*[Bad\FS20 Bewegungsmelder Dusche\Status]*/;

If (GetValueBoolean($id1) || GetValueBoolean($id2)) //Wenn PIRI Bad oder Dusche "True" sendet, dann Licht ein.
{
    IPS_RunScript(52494);
	 IPS_SetScriptTimer(52494 /*[Bad\Entrance_Dim_Bad]*/, 300); //Jedesmal wenn ein neues "True" gesendet wird, soll um 5 Minuten verlängert
}
else //Wenn beide PIRI nach 5 Minuten keine erneutes "True" gesendet haben, dann Licht ausschalten. Licht bleibt leider aber immer an.
{
    FS20_SetIntensity(19627 /*[Bad\FS20 Empfänger]*/, 0, 10);
    FS20_SwitchMode(19627 /*[Bad\FS20 Empfänger]*/, False);
    IPS_SetScriptTimer(52494 /*[Bad\Entrance_Dim_Bad]*/, 0);
}
?>

Hallo,

habe mich nur dem Fehler beim Einschalten gewidmet.

Booleans muss man in den meisten Programmiersprachen nicht mit == auf true oder false prüfen, machen eigentlich nur Anfänger ;). Ein if(true) wird immer ausgeführt und ein if(false) nie. Kurzschreibweise für if($bla == true) ist if($bla), für if($bla == false) ist es if(!$bla). Das ! sorgt für die Verneinung. Ist auch auf ganze Klammerkonstrukte übertragbar: if($a && !($b && $c)).

Als Lösung für das Ausschalteproblem empfehle ich mal ungetestet folgendes:

<?
$id1 = 12537 /*[Bad\FS20 Bewegungsmelder Bad\Status]*/; 
$id2 = 51095 /*[Bad\FS20 Bewegungsmelder Dusche\Status]*/; 

If(GetValueBoolean($id1) || GetValueBoolean($id2))
{
    FS20_SwitchMode(19627 /*[Bad\FS20 Empfänger]*/, True);
    FS20_SetIntensity(19627 /*[Bad\FS20 Empfänger]*/, 10, -1);
    IPS_SetScriptTimer(52494 /*[Bad\Entrance_Dim_Bad]*/, 300);
}
?>

und in Script 52494 packst Du dann:

<?
$id1 = 12537 /*[Bad\FS20 Bewegungsmelder Bad\Status]*/; 
$id2 = 51095 /*[Bad\FS20 Bewegungsmelder Dusche\Status]*/; 

If(!GetValueBoolean($id1) && !GetValueBoolean($id2))
{
    FS20_SetIntensity(19627 /*[Bad\FS20 Empfänger]*/, 0, 10);
    FS20_SwitchMode(19627 /*[Bad\FS20 Empfänger]*/, False);
    IPS_SetScriptTimer(52494 /*[Bad\Entrance_Dim_Bad]*/, 0);
}
?>

Horst

Danke für die kleine Einführung. Jetzt sehe ich endlich klarer.

Lampe geht leider immer noch nicht aus. Nur wenn ich per Hand beide PIRIS auf „false“ stelle

Welchen DATA Wert haben Deine PIRI?
Also wenn Sie 26 haben ist das schon mal ok, nach Deinem Screen oben ist der Timer bei einem Bewegungsmelder auf 896 eingestellt, das würde dann ca. 15min bedeuten, soll das Licht erst nach 15min aus gehen?

Also ich habe jetzt 60 Sekunden für die Einschaltdauer am PIRI eingestellt.
In IPS wird für Timer aber „0“ angezeigt.
Aber wieso ist das wichtig.?Ich dachte der PIRI sindet im Modus 11 nur noch „True“ und IPS schaltet aus wenn nach einer bestimmten Zeit keiner mehr ankommt?

Setze jetzt den Haken bei Status von externen Geräten empfangen und von externem Timer emulieren. Und probiere es neu.

Die Haken waren bereits gesetzt

Also wenn der Data Wert Deines Bewegungsmelders 26 ist und Du beide Haken gesetzt hast, darf der Timerwert nicht null sein, weil IPS den Wert des PIRI Timers empfängt und diesen dann emuliert - sprich erst nach diesem Wert wird der PIRI auf false gesetzt, wenn der Wert bei Dir 0 ist, ist das falsch.

Also wenn ich meinen Sendebefehl am PIRI auf 34 festlege, kommt der Status: 26 sowie Timer:60 bei IPS an. Wenn ich auf 11 gehe wie oben beschrieben, dann bekomm ich Status: 17 und Timer:0.

Ich dachte ich brauchte den Befehl 11, damit nicht der PIRI sondern IPS ausschaltet?
Auf welchen Befehl soll ich den PIRI einstellen?

Es gibt zwei Möglichkeiten:

  1. Einzeladresse des zu schaltenden Gerätes ist gleich mit der des Bewegungsmelders, hier schaltet der Bewegungsmelder auch bei Ausfall von IPS. Ist der DATA Wert 26, so geht das zu schaltenden Gerät an und nach dem internen Timerwert des PIRI wieder aus.

Diese Variante ist empfohlen. Weil autark.

  1. Einzeladresse des zu schaltenden Gerätes ist ungleich mit der des Bewegungsmelders, hier schaltet der Bewegungsmelder nur über IPS. Ist der DATA Wert 26, so geht das zu schaltenden Gerät an und nach dem internen Timerwert des PIRI, der an IPS gesendet wurde, wieder aus.

Der DATA Wert 11 würde nur an bedeuten, also nicht zu gebrauchen.

@paresy
Bitte mal in der Doku vermerken: Der Wert 26 entspricht der 34 des PIRI.

Also Ferengi-Master irgendwie haben wir dann die ganze Zeit aneinander vorbei geredet. Ich möchte gerne alles über IPS laufen lassen. Unabhängig bin ich da ich einen Lichtschalter habe der die gleiche Adresse meines Empfängers hat und bei Serverausfall meine Lampe noch schaltet. Im Einsatz hatte ich die ganze Zeit, deine Variante 2. Die funzte auch. Leider wurden ab und zu von meinen PIRIS „FALSE“-Befehle viel zu früh gesendet (statt nach 5minuten nach 20Sekunden). Deswegen fande ich PARESYs Vorschlag der auch im WIKI steht als sinnvoll:

Wie übertrage ich das jetzt auf mein Script?

Hallo grossermanitu,

ich bitte Dich hiermit noch einmal Deine Screenshots nicht im Text unterzubringen, sondern die dafür vorgesehene Funktion „Anhänge verwalten“ zu verwenden wie das auch alle anderen tun. Die Bilder können dann in Originalgröße angezeigt werden und man muss sich nicht die Augen verrenken.

Gruß
HJH

Bitteschön
http://home.arcor.de/gardenofhouse/dateien/ScreenShot8.png

Ehrlich gesagt, verliere ich langsam ein wenig die Geduld:rolleyes:.

  1. Bitte keine Wiki Einträge aus der V1 benutzen, denn Statusvariablen nach Ablauf eines Timers zu setzen gibt es nicht mehr und ist auch nicht erlaubt.
  2. Wir haben nicht aneinander vorbei geredet, ich habe Dir zwei Varianten gezeigt, eine davon für Deinen Anspruch.
  3. Ich wüßte nicht warum mit meiner Variante und dem DATA Wert 26 nicht genau das gemacht werden soll was Du willst.
    Also - PIRI meldet an IPS: „Hallo hier bin ich und ich bewege mich und ich will das in XX Timerzeit die Lampe wieder aus geht“.

Bei mir funktioniert das immer. Und so sollte es auch sein.