Statusüberprüfung mit "wenn dann"

Hallo zusammen,

Ich hab leider nicht genug wissen über PHP und bräuchte jemanden der mir eben einen Code Schnipsel mit an die Hand gibt.

Zur Erklärung: Wenn ich die Wohnung verlasse drücke ich einen Schalter der alles ausschaltet was noch an ist. In dem Script was dadurch aufgerufen wird wollte ich integrieren das auch überprüft wird ob alle Fenster geschlossen sind, was ja anhand der entsprechenden Variablen „Fenster geöffnet“ in der FHT geprüft werden kann. Falls ein oder mehrere Fenster auf sind, soll ein anderes Script getriggert werden (welches eine bestimmte Lampe 5x an/aus schaltet). Falls alle Fenster zu sind, soll nicht passieren.

Könnte mir wer da weiterhelfen und mir eine"If than else" Schleife posten?

Ich vermute das ich den Rest alleine raus finde…

Danke schon mal.

Hallo Schronk,

ich habe sowas ähnliches gerade etwas anders gelöst:

ein dummy-modul angelegt und darin die Bool-Variablen der zu überwachenden Geräte als Links eingtragen. Eine Variable (String, ~Textbox) anlegen, in der die eingeschalteten Geräte aufgelistet werden
Dann ein kleines PGM, was das alles auswertet:

<?

 // eingeschaltete Geräte aus dummy-Modul ermitteln
 
 $dummy = 25894 /*[Zentrale Steuerungen\Prüfung eingeschaltete Geräte\Geräteliste]*/;
 $pruefliste = IPS_GetChildrenIDs($dummy);
 $anzahl = count($pruefliste);
 $fehler = false;
 $meldung = "";
 
 FOR ($count = 0; $count < $anzahl; $count++)
 	{
 	   $id = ($pruefliste[$count]);     				// das ist die Link-ID
 	   $idorg = IPS_GetLink($id)['LinkChildID'];    // das ist die Variablen-ID
		$test = GetValueBoolean($idorg);
		IF ($test == true)                           //
		   {
		      $fehler = true;
		      $meldung = $meldung.IPS_GetName($id)."
";
		   }
	}

	IF ($fehler == true)
	   {
			// hier deine Aktionen eintragen	   }
	ELSE
	   {
	      $meldung = "Alle überwachten Geräte sind ausgeschaltet!";
	   }
	   
 SetValueString(19295 /*[Zentrale Steuerungen\Prüfung eingeschaltete Geräte\eingeschaltete Geräte]*/, $meldung);
 //echo $meldung;
 
?>

Gruß, Peter

Hallo Peter,

Danke schon mal im Voraus - am Wochenende werde mal damit rumbasteln :wink:

Schronk

Hallo Peter,

Kannst du mir den Teil mit dem Dummy-Modul etwas genauer erklären?

Da steige ich irgendwie nicht hinter…

Gruß
Schronk

Hi Schronk,

was fehlt? wie man eine Dummy-Instanz anlegt?

versuch mal:

[ul][li]im IPS-Objektbaum rechte Maustaste -> Kontext-Menü „neue Instanz“ anwählen (Fenster geht auf)[]rechte Fensterseite „Sonstige“ anwählen -> linke Fensterseite "Dummy[]-> ok klicken, IPS legt neue Dummy-Instanz an (Konfig-Seite geht nun auf, einfach gleich wieder schließen)[*]fertich
[/li][/ul]

was ist passiert?

im Objektbaum siehst Du eine neue Instanz, ohne Variablen. Stell Dir die als normale Instanz vor (wie z.B. für ein HM-Gerät), nur das sich diese Instanz auf kein Gerät oder Modul bezieht: es ist ein reiner Platzhalter mit dessen Hilfe man seinen Objektbaum ziemlich gut strukturieren kann. Darunter kannst Du beliebige Objekte anlegen, im Beispiel von Peter eben eine String-Variable.

Hat Das deine Frage beantwortet?

:wink:

Hallo Schronk,

wie das dummy-Modul angelegt wird, hat dir ja unser Erklär-Bär genau beschrieben.
Die dummy-ID dann in meinem Programm änden.
In diesem Dummy dann die Links zu den überwachenden Statusvariablen eintragen. Mein PGM sucht sich dann über die Verlinkung die Original-Variable und prüft auf true.
Durch diese Vorgehensweise braucht man das PGM nicht mehr zu ändern, man fügt einfach einen Link hinzu oder löscht ihn wieder.

Gruß, Peter

Hallo (und schonmal Danke…),

Was genau muss ich denn hier eintragen:

$idorg = IPS_GetLink($id)[‚LinkChildID‘];

Ich bekomme jedes Mal einen Fehler in der Line. Evtl hab ich aber auch den Dummy Aufbau falsch…ich hab ihn mal angehängt.

Schronk

2012-03-01_153342.jpg

Hallo Schronk,

an der Stelle ist nichts zu ändern.

Hast du im PGM den Befehl wie folgt geändert:
alt $dummy = 25894
neu $dummy = 45409

Wenn ja, erweitere doch bitte deinen Screenshot auf die gesamte Seitenbreite, dass man die Spalten Typ und Wert noch sehen kann.

Gruß, Peter

Ja, den Wert der Dummy Instanz hab ich mit meiner ersetzt.

Ich hab mal die ganze Zeilen angehängt.

Du versuchst aber nicht gerade auf die Dummy-Instanz zu schalten?
Dann hast du die Erläuterung mit den Dummy-Instanzen vom „Erklär-Bär“ doch etwas missverstanden oder überlesen…

es ist ein reiner Platzhalter mit dessen Hilfe man seinen Objektbaum ziemlich gut strukturieren kann.

Aktionen führst du nachwievor über die „echte (Geräte)-Instanz“ durch.

Genau, wenn ichs richtig verstanden habe ist der Dummy nur zum auslesen.

Nicht wirklich. Schau dir mal den Anhang an, da ist eins mit Dummy und eins ohne. Dann siehst Du den unterschied.

Bezogen auf mein Beispiel.

Immerhin werden da die Fenster nur überwacht und nicht „geschaltet“…evtl werden die Fenster in zig Jahren bei mir dadurch auch geschlossen aber erst mal will ich nur wissen ob sie auf sind, wenn ich einen Taster betätige.

Hallo Schronk,

also bis jetzt scheint alles richtig zu sein.
Kannst du mir nochmal die Definition der Variablen 30175 bzw. 23695 zeigen?
Dies sollten die Original-Statusvariablen der zu überwachenden Geräte sein.

Gruß, Peter

Hallo Peter,

Im Anhang die Ausschnitte aus den beiden FHTs

Gruß

So,

Ich hab mich gestern ein wenig mit PHP beschäftigt und das ganze jetzt ‚manuell‘ gelöst. Das ist zwar nicht so flexibel aber es funktioniert. Eine interessante Erkenntnis war dass die Fenster im System mit true/false arbeiten obwohl sie mit geöffnet/geschlossen angezeigt werden. Das hat mir etwas Kopfzerbrechen verursacht bevor ich dahinter gekommen bin…

Dir Peter auf jeden Fall ein großes Danke denn auch wenn ich dein Script nun nicht verwende wäre ich ohne es nicht zur Lösung gekommen…

Hier nun meine Lösung:


<?

$FenWZ = GetValueBoolean(30175 /*[Wohnzimmer\Heizung\Fenster geöffnet]*/);
$FenSZ = GetValueBoolean(23695 /*[Schlafzimmer\Heizung\Fenster geöffnet]*/);

if($FenWZ==true OR $FenSZ==true)
   {
   include '16316.ips.php'; /* Leisten Alarm */

   }
?>

Hallo Schronk,

eigene Lösungen sind meistens die besseren, weil man versteht was passiert und bei Bedarf Fehler selber findet.

Warum mein PGM bei dir nicht funktioniert hat, hätte bestimmt noch einiges an Analysearbeit gebraucht.

gruß, Peter