Status Fenster/Tür auf/zu in einer Variablen darstellen

Guten Morgen,

ich habe eine, aus meiner Sicht, recht einfache Anforderung - bin aber zu doof für die Umsetzung :smiley:

Ich möchte auf meiner WebFront „Gesamtübersicht“ eine Variabel haben, die mir beim Verlassen des Hauses auf einen Blick anzeigt ob alle Fenster und Türen geschlossen sind.

Grundsätzlich funktioniert das ganze mit einem Fenster / einer Türe auch, allerdings stimmt die Anzeige nicht mehr, sobald ich mehrere Fenster und Türen mit einbinde, da immer nur die letzte Statusaktualisierung angezeigt wird.

Beispiel:
Fenster 1 - offen
Fenster 2 - gekippt
Fenster 3 - zu
Anzeige Variable WebFront: Fenster geöffnet
→ bis hierhin korrekt

schließe ich nun Fenster 2, so wird die Variable im WebFront auf „geschlossen“ gesetzt → Anzeige nicht korrekt, da Fenster 1 nach wie vor offen ist.

IST:
Auszug Testsystem der Tür/Fensterkontakte:

Variable im Gesamtüberblick:

Schließe ich jetzt z.B. „Fenster Ankleide“, so geht die Variable im Gesamtüberblick auf „geschlossen“.

Ich würde also, bei verlassen des Hauses davon ausgehen, dass alle Fenster und Türen ordnungsgemäß geschlossen sind.

Die Umsetzung der Variablen im Gesamtüberblick habe ich mit Ereignissen umgesetzt (und ich denke hier ist der Fehler zu suchen), da sich die Ereignisse gegenseitig überschreiben?
immer wenn eines der Fenster / der Türen geöffnet oder geschlossen wird löse ich ein Ereignis aus und aktualisiere die Variable im Gesamtüberblick


Wie bekomme ich es nun hin, dass der Status von „offen“ auf „geschlossen“ erst geändert wird, wenn tatsächlich alle Fenster/Türen zu sind?

Über die Forensuche habe ich zwar verschiedene Ansätze gefunden, aber irgendwie nichts was zu meinem Wunsch passen würde.

Grüße
Simon

Du kannst doch in den erweiterten Bedingungen die anderen Fenster hinterlegen, diese müssen auch den Status geschlossen haben.

Loerdy

Danke für die Rückmeldung!
muss ich dann bei jedem Ereignis alle Fenster hinterlegen, oder reicht es aus, wenn ich das in einem Ereignis mache?
derzeit habe ich 48 Ereignisse, dass wäre dann schon ne üble Fleißarbeit, wenn ich es in jedem Ereignis machen müsste :smiley:

In jedem Event…

Peter Chrisben hatte mal ein Script hier veröffentlicht. Damit mache ich das:

<?php

 # Fensterstatus abfragen
 # Ersteller: PeterChrisben
 # Version: 1.0
 #
 # Dummy-Instanz erstellen. Name ist egal. Darunter folgene Variablen anlegen.
 # -- String-Variable. Name: FENSTER LISTE
 # -- Integer-Variable. Name: FENSTER OFFEN
 # -- Boolean-Variable. Name: FENSTERSTATUS
 #
 # Dem Skript nur noch Ereignisse der Fensterkontakte ( bei änderung ) hinzufügen .
 # Die Ereignisse benennen ( Schlafzimmer, Bad, etc. ), weil dieser
 # Name / diese Namen in die String-Variable geschrieben werden. Fertig.
 # Sollten die Namen der Variablen geändert werden, müssen diese auch
 # im Skript geändert werden. (ca. Zeile 20 => $int, $string, $status).



 $parentID = IPS_GetParent($_IPS['SELF']);
 $int = IPS_GetVariableIDByName('FENSTER OFFEN',$parentID);
 $string = IPS_GetVariableIDByName('FENSTER LISTE',$parentID);
 $status = IPS_GetVariableIDByName('FENSTERSTATUS',$parentID);

 $events = IPS_GetChildrenIDs( $_IPS['SELF']);
 $i = 0;

 foreach($events as $ID)
 {
     $FKevent = IPS_GetEvent($ID);
     $FKstatus = GetValue($FKevent['TriggerVariableID']);
     $name = IPS_GetName($ID);
     if($FKstatus == true)
        {
            $i++;
            $names[] = $name;
        }
 }

 @$count = count($names);
 if ($count >= 1){
     SetValue($status,true);
     $result = implode(",", $names);}
 else{
     SetValue($status,false);
     $result = "Alle Fenster geschlossen.";}

 SetValue($int, $i);
 SetValue($string, $result);

Loerdy

1 „Gefällt mir“

Danke für das Skript - läuft auf Anhieb perfekt :slight_smile:

Danke lieber @PeterChrisben , ich habs ja auch nur gemopst :smiley:

Loerdy

Alternativ könntest du das ganze auch mit der Aktivliste aus dem Module Store umsetzen. Die macht ziemlich genau das, was du hier beschreibst.

Hallo zusammen, ich nutze das oben genannte Skript schon lange Zeit. Nur seit dem letzten Update läuft das ganze nicht mehr. Es wird folgender Fehler ausgegeben:

Fehler:

Fatal error: Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable|array, null given in /var/lib/symcon/scripts/32382.ips.php:39
Stack trace:
#0 {main}
thrown in /var/lib/symcon/scripts/32382.ips.php on line 39

Das kommt mir bekannt vor, hatten wir imho schon mal im Forum für dieses Script.
Lösung ist die Variable $names am Anfang als Array zu deklarieren.
Also noch vor dem foreach das einfügen:

$names = [];

Michael

1 „Gefällt mir“

Das hat geholfen. Vielen Dank!