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 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;
?>
[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.
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.
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.
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.
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.
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…