Fensterkontakt und Regensensor

Ich habe drei Dachflächenfenster. Diese werden für den Raumtemperaturregler „überwacht“. In Verbindung mit einem Regensensor möchte ich nun eine optoakustische Warnmeldung realisieren.
Hierzu habe ich ein „Watchdog“-Script gebaut. Dies überwacht alle 5 Sekunden den Regensensor UND die Fensterstellung. Frei nach dem Motto: WENN Regen=1 UND WENN (Fenster1 ODER Fenster2 ODER Fenster3 == 1) DANN …
In meinem Fall soll dann ein Audiofile abgespielt und die Philips HUE Lampe alamieren. Um die Audioausgabe später weiterverarbeiten zu können möchte ich ein Flag setzen. Das ganze sieht bis jetzt so aus:

<?

$Regen = GetValue(10088 /*[Sonoff\Regensensor\Regen]*/);
$F1 = GetValueBoolean(53926 /*[Homematic Aktoren\DG Fensterkontakt Badezimmer\STATE]*/);
$F2 = GetValueBoolean(27609 /*[Homematic Aktoren\DG Fensterkontakt Nord\STATE]*/); 
$F3 = GetValueBoolean(38047 /*[Homematic Aktoren\DG Fensterkontakt Süd\STATE]*/);

echo "Dachflächenfenster Badezimmer geöffnet = $F1 
";
echo "Dachflächenfenster Wohn Nord geöffnet = $F2 
";
echo "Dachflächenfenster Wohn Süd geöffnet = $F3 
";

$WebFront = 48959 /*[WebFront]*/;
$Mediafile1 = 10098 /*[Regen.mp3]*/;
$Mediafile2 = 31335 /*[Regen_Dachfenster.mp3]*/;

if ($Regen == true)
	{
		if($F1 or $F2 or $F3 == true)
		{
		IPS_RunScript(10104 /*[Scripte\Alarme\HUE_Alarm_Regen]*/);
		SetValueBoolean(30879 /*[Sonoff\Regensensor\Regen\Regendurchsage]*/,true);
		//IPS_SetEventActive(32287 /*[Scripte\Alarme\HUE_Alarm_Regen\Verzögerung\ScriptTimer]*/, true);
		WFC_AudioNotification($WebFront, "WARNUNG", $Mediafile2);
		}
		
		if($F1 and $F2 and $F3 = NULL)
		{
			SetValueBoolean(30879 /*[Sonoff\Regensensor\Regen\Regendurchsage]*/,false);
			//IPS_SetEventActive(32287 /*[Scripte\Alarme\HUE_Alarm_Regen\Verzögerung\ScriptTimer]*/, false);
			//WFC_AudioNotification($WebFront, "WARNUNG", $Mediafile1);
		}
	}
					
?>

Die Fensterkontakte (Homematic) liefern 1/true, wenn die Fenster geöffnet sind, aber leider garnichts, wenn sie geschlossen sind. Daher habe ich es mit NULL versucht.
Was geht, was nicht? Ich kann das Flag setzen, aber es setzt sich nicht zurück, wenn die Fenster geschlossen wurden.
Hat jemand eine zielführende Idee hierzu?

Hallo,

also mein Fensterkontakt von HomeMatic im Bad gibt true und false zurück. :confused:

Grüße,
Kai

Wie war das nochmal mit dem korrekten Vergleichen in PHP.

PHP: Vergleichs-Operatoren - Manual


Gesendet von iPhone mit Tapatalk

Danke für den Hinweis. Ich habe die Kontakte aus dem Raumregler heraus „angezapft“. Ich habe jetzt mal umgestellt aus die Fensterkontakte selbst. Eine Ausgabe bringt:

Dachflächenfenster Badezimmer geöffnet =
Dachflächenfenster Wohn Nord geöffnet =
Dachflächenfenster Wohn Süd geöffnet =

Wenn eines geöffnet ist, dann kommt

Dachflächenfenster Badezimmer geöffnet = 1
Dachflächenfenster Wohn Nord geöffnet =
Dachflächenfenster Wohn Süd geöffnet =

Hatte ich auch gefunden … geht trotzdem nicht.

Mit NULL bestimmt nicht.

Gesendet von iPhone mit Tapatalk

Bool Variablen mit Echo ausgeben führt zu einer Konvertierung von bool zu String.
Im Falle von True wird das zu eine „1“.
Bei False zu einem leeren String „“.
Echo ist bei Debugausgaben von Variablen nicht zu gebrauchen.

Var_dump($var) gibt sowohl den Datentyp, als auch die Daten lesbar aus.

Beim Vergleich ist dann das Thema das = eine Zuweisung ist und kein Vergleich!
Das ist mit == möglich.
Ein Vergleich auf == True ist aber auch Unfug.
Es reicht ($var1 && $var2) zu schreiben, da immer auf true geprüft wird.
Vorausgesetzt es werden wirklich nur Bool-Typen verglichen.
Michael

ok, das bringt mich ein wenig weiter. Nun ist klar, warum ich eine „falsche“ Ausgabe mit echo habe. :banghead:
Ein „$var1 && $var2“ bringt bei mir jedoch garnichts. Ich möchte eine Ausgabe haben, wenn $F1 ODER $F2 ODER $F3 true sind.

Dann mach or oder || :wink:
Hast du ja schon benutzt.

Zurück setzen ist dann ja wenn alle Fenster zu/ false sind.
Also:
if(($F1 or $F2 or $F3) == false)
Sobald ein Fenster offen ist, also true, liefert der Vergleich mit false wieder false.
Sind alle Fenster zu, also alles false, so liefert der Vergleich mit false ein true zurück :slight_smile:
Michael