if ($bm3 and $value==false and $bm2 and $value==false and $bm1 and $value==false)
{
$wert=0;
$jsontemp="PWM,15,$wert,1000";
mqttsenden($remoteabo,$jsontemp);
}
Nur eine geht aus macht dann aus die Beleuchtung. Möchte das wenn alles auf false steht, dann
erst wird ein Befehl gesendet.
Einschalten geht:
if ($bm3 and $value==false and $bm2 and $value==false and $bm1 and $value==false)
{
$wert=0;
$jsontemp="PWM,15,$wert,1000";
mqttsenden($remoteabo,$jsontemp);
}
if ($bm3 and $value==true or $bm2 and $value==true or $bm1 and $value==true)
{
$wert=510;
$jsontemp="PWM,15,$wert,1000";
mqttsenden($remoteabo,$jsontemp);
IPS_SetScriptTimer(_IPS['SELF'],30); // Sekunden
}
Was übersehe ich da? Danke schon mal für nen Tipp.
was soll das denn sein? $bm3 ist doch die ID eines Bewegungsmelders und die fragst du auf „true“ ab? genauso die anderen, da liegt irgendwo ein Denkfehler vor. Was sollte die Zeile denn bewirken?
Möchte ja nur das was drunter steht erst augefürt wird wenn alle 3 auf false stehen:
if ($bm3 and $value==false and $bm2 and $value==false and $bm1 and $value==false)
{
$wert=0;
$jsontemp="PWM,15,$wert,1000";
mqttsenden($remoteabo,$jsontemp);
}
mit (or) dazwischen ging es ja. Mit else oder elseif, wird trotzdem ausgeführt wenn auch nur
einer auf false geht.
Ich kann ja nur grob vermuten was Du machen willst, Du willst ja den Wert eines Geräts vergleichen. Dazu musst Du aber auch den Wert abholen mit GetValue
Der obere Teil muss also lauten:
$bm1=GetValue(16412 /*[Erdgeschoß\Treppenhaus\PIR am Eingangstür]*/);
$bm2=GetValue(19212 /*[Erdgeschoß\Treppenhaus\PIR Oben Treppenhaus]*/);
$bm3=GetValue(34904 /*[Erdgeschoß\Treppenhaus\PIR unten am Bad]*/);
dann hast Du den Wert der Variable, mit diesem Wert kannst Du jetzt auch arbeiten oder vergleichen.
Hier gilt das Gleiche
if (Getvalue(33461 /*[Location\Ist es Tag]*/))
{
$wert=0;
$jsontemp="PWM,15,$wert,1000";
mqttsenden($remoteabo,$jsontemp);
}
Wenn der Inhalt der Varibale mit der Objekt ID 33461 true ist dann mache …
Das Gleiche dann hier:
if (($bm1 === true or $bm2 === true or $bm3 === true) and (GetValue(33461 /*[Location\Ist es Tag]*/))
{
$wert=500;
$jsontemp="PWM,15,$wert,1000";
mqttsenden($remoteabo,$jsontemp);
IPS_SetScriptTimer(_IPS['SELF'],30); // Sekunden
}
wenn Bewegungsmelder 1, 2, oder 3 den Wert true haben und gleichzeitig der Inhalt der Varibale 33461 true ist, es ist also Tag, dann mache …
ausprobieren konnte ich nicht er meckert: (beim ersten if)
Es ist Tag sollte auf false stehen, dann erst alles erlauben. Da Licht am Tag wäre nicht so sinnvoll.
Parse error: syntax error, unexpected ';' in /var/lib/symcon/scripts/34747.ips.php on line 14
<?
$bm1=GetValue(24711 /*[Erdgeschoß\Treppenhaus\PIR am Eingangstür\Status]*/);
$bm1=GetValue(43814 /*[Erdgeschoß\Treppenhaus\PIR Oben Treppenhaus\Status]*/);
$bm1=GetValue(40604 /*[Erdgeschoß\Treppenhaus\PIR unten am Bad\Status]*/);
if (($bm1 === true or $bm2 === true or $bm3 === true) and (GetValue(33461 /*[Location\Ist es Tag]*/))
{
$wert=500;
$jsontemp="PWM,15,$wert,1000";
mqttsenden($remoteabo,$jsontemp);
IPS_SetScriptTimer(_IPS['SELF'],30); // Sekunden
}
if ( (getvalue($bm3) == false) && (getvalue($bm2) == false) && (getvalue( $bm1) == false))
{
$wert=0;
$jsontemp="PWM,15,$wert,1000";
mqttsenden($remoteabo,$jsontemp);
}
?>
Tipp wenn Du im Skript Editor auf eine Klammer drückst wird diese blau markiert und gleichzeitig auch die zweite Klammer die zu dieser Klammer gehört, sollte da keine Markierung sein, hast Du wohl eine Klammer vergessen.
Vielleicht hilft es ja für den Anfang sich das auf PHP <-> „Deutsch“ selber vor zu lesen dann stolpert man auch eher über Fehler, die man dann nicht mehr macht. So was wie „hole Wert aus 33461 ist false“, da war doch was. :eek: Eine böse Klammer vergessen. Und nicht vergessen die Klammer zu markieren dann wird diese blau, dann siehst Du wo die Klammer zu geht bzw. wo etwas vergessen wurde, wenn Du zwei Klammern auf machst müssen diese auch wieder mit zwei Klammern geschlossen werden.
(GetValue(33461 /*[Location\Ist es Tag]*/) === false)
Das kommt ja drauf an was da genau funktionieren soll bzw. was Du machen willst.
So wie das da steht wird ein Timer gesetzt der dann alle 10 Sekunden ausgeführt wird, ist es das was Du willst?
Siehe auch IPS_SetScriptTimer
Wenn Du irgendwas an und dann wieder ausschalten willst dann geht das so.
P.S.: PHP Code solltest Du im Forum in den PHP Tag setzten, dann ist dieser besser lesbar.
Ah danke werde weiter Deine Tipps gleich anschauen.
Eigentlich wollte ich das nach letztem PIR 10sec vergehen bevor 0 geschrieben wird,
wenn ich den 10 Sec erneut ausgelöst wird dann eben laufen die 10 Sec von neu ab.