Welche Schleife muss ich nutzen und wie????

Hallo zusammen,

ich möchte gern folgendes realisieren, aber mir fehlt die nötige php-Erfahrung:

Ich habe 5 Türen (HM-Türkontakte).
Nun möchte ich bei einem Ereignis das mir eine push Nachricht gesendet wird, welche Türen alle offen sind.

Überlegt habe ich mir, das wenn das Skript ausgelöst wird, das jede Tür die STATE „true“ führt, eine Variable $XY füllt. z.B.:
Tür 1 und 3 sind offen, dann soll in
$XY = ‚Garagentor und Kellertür‘ stehen.
Wenn keine Tür offen steht soll in
$XY = ‚keine‘ stehen
und wenn nur Tür 1 offen steht soll in
$XY = ‚Garagentor‘ stehen.
Diese Variable kann ich dann in meine funktionierende Prowl - Funktion packen.

ABER wie programmiere ich eine „Schleife???“ Die meine 5 Eingangsvariablen $T1, $T2, $T3, $T4 und $T5 auf true auswertet und dann die Variable $XY entsprechend füllt.

Mit eine if-Schleife gehts ja glaube ich nicht, da ja auch mehrere Türen offen stehen können und dann steht immer der „letzte“ Texte in $XY.

Kann mir da einer helfen??


$tueren = Array();
if(GetValue($var_id1))
  $tueren[] = "Keller";
if(GetValue($var_id2))
  $tueren[] = "Garage";

....

if(sizeof($tueren) == 0)
  $text = "keine";
else
  $text = implode(" und ", $tueren);

Schnell mal als Idee getippt… Müsste soweit laufen :slight_smile:

paresy

PS: Für „if-Schleife“ würde dich ein Informatiker ein klein wenig hauen müssen. Bitte nie wieder sagen :smiley:

Hallo, danke für die Antwort.

Ich habe das mal wie folgt abgetippt:

<?
$var_id1 = GetValueBoolean(48136 /*[Geräte\Sensoren\Türschalter\Sen_Tor_Garage\STATE]*/);
$var_id2 = GetValueBoolean(28320 /*[Geräte\Sensoren\Türschalter\Sen_Tür_Garage\STATE]*/);
$var_id3 = GetValueBoolean(50609 /*[Geräte\Sensoren\Türschalter\Sen_Tür_Garten\STATE]*/);
$var_id4 = GetValueBoolean(32321 /*[Geräte\Sensoren\Türschalter\Sen_Tür_Keller\STATE]*/);
$var_id5 = GetValueBoolean(56097 /*[Geräte\Sensoren\Türschalter\Sen_Tür_Wohnung\STATE]*/);

$tueren = Array();
if(GetValue($var_id1))
  $tueren[] = "Garagentor";
if(GetValue($var_id2))
  $tueren[] = "Garagentür";
if(GetValue($var_id3))
  $tueren[] = "Gartentür";
if(GetValue($var_id4))
  $tueren[] = "Kellertür";
if(GetValue($var_id5))
  $tueren[] = "Wohnungstür";

if(sizeof($tueren) == 0)
  $text = "keine";
else
  $text = implode(" und ", $tueren);

echo $text;


?>

leider kommt folgende Fehlermeldung mit der ich erstmal nichts anfangen kann:

IPS-Err-PHP 2013-11-05 19:29:43.469 Warning: Variable #0 existiert nicht Error in Script C:\IP-Symcon\scripts\16898.ips.php on Line 9 133 in IPSLibrary\app\core\IPSLogger\IPSLogger.inc.php (call IPSLogger_Out) 37 in IPSLibrary\app\core\IPSLogger\IPSLogger_PhpErrorHandler.inc.php (call IPSLogger_Err) in IPSLogger_PhpErrorHandler 9 in 16898.ips.php (call GetValue)

Warning: Variable #0 existiert nicht in C:\IP-Symcon\scripts\16898.ips.php on line 9
IPS-Err-PHP 2013-11-05 19:29:43.481 Warning: Variable #0 existiert nicht Error in Script C:\IP-Symcon\scripts\16898.ips.php on Line 11 133 in IPSLibrary\app\core\IPSLogger\IPSLogger.inc.php (call IPSLogger_Out) 37 in IPSLibrary\app\core\IPSLogger\IPSLogger_PhpErrorHandler.inc.php (call IPSLogger_Err) in IPSLogger_PhpErrorHandler 11 in 16898.ips.php (call GetValue)

Warning: Variable #0 existiert nicht in C:\IP-Symcon\scripts\16898.ips.php on line 11

PS. Sorry für die if- … => das hätte ich zumindest wissen sollen! :wink:

Ahhhh, schon selbst gemerkt,
die oberen Zeilen sind doppelt gemoppelt…

so macht es Sinn:

$var_id1 = (48136 /*[Geräte\Sensoren\Türschalter\Sen_Tor_Garage\STATE]*/);
$var_id2 = (28320 /*[Geräte\Sensoren\Türschalter\Sen_Tür_Garage\STATE]*/);
$var_id3 = (50609 /*[Geräte\Sensoren\Türschalter\Sen_Tür_Garten\STATE]*/);
$var_id4 = (32321 /*[Geräte\Sensoren\Türschalter\Sen_Tür_Keller\STATE]*/);
$var_id5 = (56097 /*[Geräte\Sensoren\Türschalter\Sen_Tür_Wohnung\STATE]*/);

Erlaube mir aber noch eine Frage:

Was macht dieser Befehlsblock (für Unwissende in klartext):

$tueren = Array();
if(GetValue($var_id1))
  $tueren[] = "Garagentor";

Leeres Array anlegen;

Wenn Wert von variablen wahr ist

Dann

die Zeichenkette "..." als Element dem Array hinzufügen;

Gruß

Burkhard

Hallo zusammen,

ich stehe grade vor einem ähnlichen Problem. Ich frage bei meinen Fenstern zwei Stellungen bzw. drei
Stellungen ab. 0= geschlossen 1= Kippstellung 2= geöffnet

Zur Zeit sieht die Auswertung so aus

if (sizeof($Fenster) == 1)
  $text = implode(" und ", $Fenster);
else
  $text = implode(" und ", $Fenster);
  
if (sizeof($Fenster) == 2)
  $text = implode(" und ", $Fenster);

.
Da ich kein php experte bin habe ich keine Idee für einen Lösungsansatz wie man eine Unterscheidung hinbekommen kann das Angezeigt wird welche Fenster auf Kippe oder geöffnet ist . Hintergrund ist ich möchte eine Meldung erzeugen die mir bei Verlassen des Hauses angezeigt welches Fenster offen bzw. welches auf Kippe steht.

Also erst mal machst Du im IF und im ELSE Zweig das gleiche, das ist irgendwie unsinnig …

Aber entweder habe ich es falsch verstanden oder mangels Zeit in pseudo ungetestetem Code sollte das ganze für ein einzelnes Fenster


switch (sizeof($fenster)) {
    case 0:
        $text = $Fenster . " geschlossen"; 
        break;
    case 1:
        $text = $Fenster . " Kipp"; 
        break;
    case 2:
        $text = $Fenster . " geöffnet"; 
        break;
}


helfen …

Warum auch immer sizeof($fenster) und nicht der Inhalt der Variable selbst …

Nein Das ist für 15 Fenster

<?

 //Ablauf beim Verlassen


 // Zustände Fenster EG Einlesen
$Fenster_1 = (29677 /*[KNX\Fenster\Skripte\Wohnzimmerfenster 1\Wohnzimmerfenster 1]*/);
$Fenster_2 = (33535 /*[KNX\Fenster\Skripte\Wohnzimmerfenster 2\Wohnzimmerfenster 2]*/);
$Fenster_3 = (32354 /*[KNX\Fenster\Skripte\Wohnzimmerfenster 3\Wohnzimmerfenster 3]*/);
$Fenster_5 = (42044 /*[KNX\Fenster\Skripte\Küchenfenster 1 (Garten)\Küchenfenster 1]*/);
$Fenster_6 = (12622 /*[KNX\Fenster\Skripte\Küchenfenster 2 (Strasse)\Küchenfenster 2]*/);
$Fenster_7 = (13041 /*[KNX\Fenster\Skripte\Bürofenster\Bürofenster]*/);
$Fenster_8 = (38403 /*[KNX\Fenster\Skripte\Gäste WC\Fenster Gäste WC]*/);
$Fenster_9 = (21816 /*[KNX\Fenster\Skripte\Fenster HWR\Fenster HWR]*/);
$Fenster_4 = (27253 /*[KNX\Fenster\Kippstellung\Wohnzimmer Schiebetür\Value]*/);
$Fenster_EG_alle = (33718 /*[Sonstiges\Makros\Fenstermeldung EG\Status der Fenster im EG]*/);

// Zustände Fenster OG Einlesen
$Fenster_10 = (39319 /*[KNX\Fenster\Skripte\Fenster Badezimmer gross\Fenster Badezimmer gross]*/);
$Fenster_11 = (43635 /*[KNX\Fenster\Skripte\Zimmerfenster Luisa\Zimmerfenster Luisa]*/);
$Fenster_12 = (13049 /*[KNX\Fenster\Skripte\Schlafzimmerfenster  links\Schlafzimmerfenster links]*/);
$Fenster_13 = (37588 /*[KNX\Fenster\Skripte\Schlafzimmerfenster rechts\Schlafzimmerfenster rechts]*/);
$Fenster_14 = (12245 /*[KNX\Fenster\Skripte\Zimmerfenster Lucas\Zimmerfenster Lucas]*/);
$Fenster_15 = (13716 /*[KNX\Fenster\Skripte\Zimmerfenster Noah\Zimmerfenster Noah]*/);
$Fenster_OG_alle = (34900 /*[Sonstiges\Makros\Fenstermeldung OG\Status der Fenster im OG]*/);


$Fenster = array();

if(GetValue($Fenster_1))
  $Fenster[] = "Wohnzimmerfenster 1";
if(GetValue($Fenster_2))
  $Fenster[] = "Wohnzimmerfenster 2";
if(GetValue($Fenster_3))
  $Fenster[] = "Wohnzimmerfenster 3";
//if(GetValue($Fenster_4))
//  $Fenster[] = "Schiebetür";
if(GetValue($Fenster_5))
  $Fenster[] = "Küchenfenster zum Garten";
if(GetValue($Fenster_6))
  $Fenster[] = "Küchenfenster zur Straße";
if(GetValue($Fenster_7))
  $Fenster[] = "Fenster Büro";
if(GetValue($Fenster_8))
  $Fenster[] = "Fenster Gäste WC";
if(GetValue($Fenster_9))
  $Fenster[] = "Fenster HWR";
if(GetValue($Fenster_10))
  $Fenster[] = "Fenster Badezimmer";
if(GetValue($Fenster_11))
  $Fenster[] = "Fenster Luisa";
if(GetValue($Fenster_12))
  $Fenster[] = "Fenster Schlafzimmer links";
if(GetValue($Fenster_13))
  $Fenster[] = "Fenster Schlafzimmer rechts";
if(GetValue($Fenster_14))
  $Fenster[] = "Fenster Lucas";
if(GetValue($Fenster_15))
  $Fenster[] = "Fenster Noah";

if (sizeof($Fenster) == 1)
  $text = implode(" und ", $Fenster);
else
  $text = "keins";
  
if (sizeof($Fenster) == 2)
  $text2 = implode(" und ", $Fenster);
else
  $text2 = "keins";

echo "Auf kippe $text und geöffnet $text2" ;




?>