Eine Meldung für mehrere Aktoren mit Hinweis

Hallo zusammen,

ich habe mehrere Fenster kontakte und möchte gerne das im Webfront mir angezeigt wird wen irgendeins von denen Geöffnet wurde und darunter hätte ich gerne eine StringVariabel die mir dann zeigt wo oder welcher Fenster Kontakt es ist.
Das selbe möchte ich auch gerne bei meinen Feuermeldern, den warum sollte ich im Webfront 6 Räume anzeigen lassen, wen es auch einfach gehen könnte.

Hat vieleicht jemand so ein Script zu Hand? Wäre sehr schön…

Hallo Kalikola,

ich habs mit Hilfe dieses Codes realisiert:

Schau mal hier rein: http://www.ip-symcon.de/forum/threads/11821-Fensterzustand-anzeigen

Das kann man so bauen, dass für alle Fenster der aktuelle Status angezeigt wird oder so, dass nur die angezeigt werden, die nicht geschlossen sind.

Ich hab das bei mir zusätzlich noch so gemacht, dass eine Sprachmeldung ausgegeben wird, wenn ich auf Abwesend schalte wie viele Fenster geöffnet und wie viele gekippt sind.

WAF 100% :slight_smile:

Ok, danke schon mal dafür aber das ist glaube ich nicht das was ich suche - oder ich versteh es einfach nicht :wink:

gehen war mal davon aus das ich 15 Rauchmelder habe, diese möchte ich in Webfront nicht alle einzeln angezeigt haben, würde den Optischen Rahmen Sprengen. Deshalb einfach nur ein Hinweiß ob Feueralarm ist oder alles in Ordnung ist, sollte einer meiner 15 Rauchmelder anspringen, springt natürlich der Button auf Feueralarm aber ich weiß dann nicht welcher das ist und deshalb möchte ich gerne darunter eine String Variable haben die mir dann Schriftlich Zeigt welcher Rauchmelder Alarm geschlagen hat.

Ungefähr so sollte das aussehen:
Unbenannt.JPG

Bei der Lösung, die ich vorgeschlagen habe würde das so aussehen, dass nur der Alarm gebende Sensor angezeigt wird und wenn der richtig beschriftet ist siehst Du sofort welcher es ist, ohne die zusätzliche Zeile.

Sieht dann ungefähr so aus: Unbenannt.png

Das ist kein Button sondern eine HTML Textbox.

Die Scripte und Lösungen habe ich jetzt soweit alle ausprobiert und immer mit dem ergebnis das mir wieder alle zusammen angezeigt werden - genau das was ich nicht möchte…

Scheint doch um einiges schwerer zu sein als erwartet - keiner wirklich ne Idee oder nen Script dazu?

Irgendeins, oder alle die offen sind?
Für alle momentan geöffneten könnte das auch so aussehen (als Textbox mal was für dich gebastelt):
Das Script muss durch die Kontakt-Variablen getriggert werden!
Wenn du es per Hand anstößt bekommst du Fehlermeldungen.

<?
// Stringvariable anlegen mit Profil ~Textbox
$string = 33333; // ID der Stringvariable


// IDs der Fensterkontakte und Bezeichnungen der Fenster, die das Script auf Änderung triggern
// Bisschen Tipparbeit notwendig...
if ($_IPS['VARIABLE'] == 12341) $trigger = "Links";
if ($_IPS['VARIABLE'] == 12342) $trigger = "Rechts";
if ($_IPS['VARIABLE'] == 12343) $trigger = "Süd";
if ($_IPS['VARIABLE'] == 12344) $trigger = "West";


// Script
$textalt = GetValueString($string);

if ($_IPS['VALUE'])
   {
   IPS_SetName($string, "Fenster offen:");
       	if ($textalt == "")
   	{
		$text = "$trigger
";
   	SetValueString($string, $text);
		}
   	else
   	{
		$text.= "$trigger
$textalt";
   	SetValueString($string, $text);
		}
   }
else
   {
   $textalt = str_replace($trigger."
", "", $textalt);
   	if ($textalt == "")
   	{
   	IPS_SetName($string, "Alle Fenster geschlossen");
   	SetValueString($string, $textalt);
   	}
   	else
   	{
   	SetValueString($string, $textalt);
   	}
   }
?>

Ich hab dazu eine boolean angelegt und ein Mini Script bei den einzelnen Sensoren für die variablen die sich ändern beim öffnen der Fenster beispielsweise. Wird irgendeiner der Fenster geöffnet, wird die boolsche variable pauschal auf true gesetzt. Andersrum fragt das Script die anderen variablen auf true ab und wenn keiner auf true steht, wird die Übersichtsvariable auf false gestellt. Bin leider unterwegs sonst könnte ich einen Screenshot und das Code schnipsel posten.

Wolgang mit deinem Script komme ich recht nahe an dem was ich mir wünsche - Danke, dies habe ich erstmal im Einsatz, würde mich aber freuen wen meine Vorstellung irgendwie umsetzbar wäre :wink:

Nancilla’s Probier Morgen mal aus, jetzt Qualmt mir der Kopf

Ich dachte du hast schon alles ausprobiert… :rolleyes:

Die Scripte und Lösungen habe ich jetzt soweit alle ausprobiert und immer mit dem ergebnis das mir wieder alle zusammen angezeigt werden - genau das was ich nicht möchte…

Hallo Kalikola,

bin wohl wieder etwas spät dran …

war gestern zu der Uhrzeit etwas kurz. Hier mal wie ich mir eine Übersichtsseite fürs WF gebastelt hab. Angezeigt wird nur was z.Z gerade wichtig, schlecht oder suboptimal ist.

Also, ich hab fürs WF im Objektbaum eine eigene Kategorie. Dort hab ich eine Kategorie Übersicht, in der sich verschiedene DummyModule befinden in denen ich das logisch (für uns) zusammenfasse was ich sehen möchte. Z.B. Zustand der Alarmanlage, offene Fenster, eingeschaltete Geräte …

Alle Links in den Dummymodulen die OK sind (z.B. Alarmanlage an, Geräte/Lichter aus, Fenster/Türen zu …) werden nicht angezeigt.

im 1. Screenshot die Übericht im WF.

im 2. Screenshot die Kategorie (exemplarisch schaltbare Geräte) und die Links darin die ich im WF darstelle wenn sie nicht ok sind. Um eine weitere Variable zu integireren einfach einen neuen Link in der Kategorie erstellen und das SchaltbareLinksHideIfOff-Script in Punkt 3 ein mal ausführen. Alles andere geht dann automatisch.

im 3. Screenshot die KategorienStruktur in unserer Basis-Kategorienestruktur die durch das SchaltbareLinksHideIfOff-Script automatisch angelegt wird.

Vorteile: flexibel und einfach erweiterbar und wie Du im 1. Screenshot siehst trotz ohne html platzsparend und ohne zusätzliche Variablen.

Hier noch mein Script SchaltbareLinksHideIfOff

<?

// http://www.ip-symcon.de/forum/threads/24577-Alle-Links-einer-Kategorie-auflisten

// Angepasst: Linkvalue abfrage von false auf 0 gesetzt, true und false vertauscht

//$OriginalScript = 17587 /*[WF-Übersicht\Elektrogeräte\SchaltbareLinksHideIfOff]*/ ;
$ScriptID = 17587 /*[WF-Übersicht\Elektrogeräte\SchaltbareLinksHideIfOff]*/;
//$Objects = IPS_GetChildrenIDs(IPS_GetParent($ScriptID)); // Wenn das Script in der selben Katogorie o. Dummy liegt
$Objects = IPS_GetChildrenIDs(37973 /*[WFs\wha\Übersicht\Elektrogeräte die geschaltet werden können]*/ );

foreach ($Objects as $CurrentObjectID) {
    $Object = IPS_GetObject($CurrentObjectID);
    if ($Object['ObjectType'] == 6){
       //Link sichtbar oder unsichtbar machen
        $Link = IPS_GetLink($CurrentObjectID);
        //$LinkType = IPS_GetObject($Link['ObjectType']);
        //print_r($Link);
        $LinkValue = GetValue($Link['LinkChildID']);
        if ($LinkValue==0){
           if ($Object['ObjectIsHidden'] == false){
              IPS_SetHidden($CurrentObjectID, true);
           }
        } else {
           if ($Object['ObjectIsHidden'] == true){
              IPS_SetHidden($CurrentObjectID, false);
           }
        }
        //Event anlegen falls noch nicht vorhanden
        $EventName = "LinkID: ".$CurrentObjectID." ObjectID: ".$Link['LinkChildID'];
        $EventID = @IPS_GetEventIDByName($EventName, $ScriptID);
        if ($EventID === false){
              $EventID = IPS_CreateEvent(0);
              IPS_SetName($EventID, $EventName);
              IPS_SetEventTrigger($EventID, 1, $Link['LinkChildID']);
              IPS_SetParent($EventID, $ScriptID);
              IPS_SetEventActive($EventID, true);
        }
    }
}

?>


Macht es dem Armen doch nicht so schwer, er will ja nur eine String:

Folgendes anlegen:

Die VariablenID in den ersten beiden Zeilen mußt natürlich an dein System anpassen.
Die String Variable an beliebiger Stelle im Webfront einhängen.


<?
$IDMessageVar = 14615; // ID  Message string variable
$IDStatusVars = array(28986, 49111, 36253);  // ID  window contact state variable

# This window contact configuration is assumed:
# False if window is close
# True if window is open

$Status = False;
foreach ($IDStatusVars as &$Id) {
if (GetValueBoolean($Id) == True) $Status = True;
}

If ($Status== True) {
	SetValueString($IDMessageVar,"Zumindest ein Fenster ist offen");
	}
else {
	SetValueString($IDMessageVar,"Alle Fenster sind geschlossen");
}
?>


viel Spass
bb

In der von mir vorgeschlagenen Lösung musst du doch nur den Code so anpassen, dass die Elemente, die nicht angezeigt werden sollen weiß sie OK sind einfach nicht in die Tabelle geschrieben werden.

Gesendet von meinem Nexus 5 mit Tapatalk

HiHi, wir überschlagen uns mal wieder.
Auswahl gibts an Scripten gibts ja jetzt genug.

greez
bb

ich sehe schon viele Wege führen nach Rom,

@Bernhard
dein Script, einfach und übersichtlich wen wir es jetzt noch hinbekommen das mir gesagt wird wo genau das Fenster geöffnet ist und das es sich ohne ein IPS_SetScriptTimer Aktualisiert wäre genau das mein Erfüllung :wink:

Hast Du Dir das verlinkte Skript mal angeschaut? Scheint nicht der Fall zu sein.

Achja, ok - logisch :wink: damit fällt der Timer schon mal weg.

Genau das macht auch das Script, was ich im Post 7 extra für dich getippt und auf Funktion getestet habe.
Ich habe es mit Absicht so einfach wie möglich, für dich zum Verständnis, gehalten. Ist jedoch noch ausbaufähig.
Aber du scheinst immer noch zu suchen, was es schon gibt… tststsss :confused:
Ich bin dann hier raus… :kopfschüttel:

Ne dein habe ich gerade in gebrauch - es war nur so, wen man viele hinweise bekommt und viel ausprobiert, raucht irgendwann der Kopf :wink:

@kalikola
Wenn du wissen willst welches Fenster Offen ist, so ist die Frage zu klären was passieren soll wenn mehrere Fenster offen sind ?
Den Ausgabestring entsprechend anpassen ist ja kein Problem, aber er kann dann ggfls. sehr lang werden.
d.h. es würfelt das WF Layout durcheinander.

Darum die neutrale Formulierung.
Als Kompromiss kannst ja auch noch einen Zähler reinmachen, dann heist es eben " zb: „Es sind noch 3 Fenster offen“

gruß
bb