Fensterzustand anzeigen

Hallo an alle,

hab wahrscheinlich gerade eine ziemlich dumme Anfängerfrage :confused: duckundweg
Aber sind grad meine ersten Schritte mit IP-Symcon

Hab alles so gemacht wie von wgreipl beschrieben das Skript liefert mir auch Events aber ich seh keine Änderungen im WebFront nach aktualisierung oder neustart.

Hallo Mutzi,

wo steht denn die Variable „Fenstergriffe“ in der Struktur (unter IP-Symcon bzw. im Hauptverzeichnis) ? Ist sie vielleicht versteckt?

Gruß

Bruno

wer sehen will wann das Fenster, die Tür zuletzt geöffnet, geschlossen oder gekippt wurde, hab ich das Datum und die Zeit noch mit eingebaut.

<?
$bordercolor = "#505050"; // Rahmenfarbe anpassen

$str = "<table width='100%' cellspacing='0'>";
//$str .= "<tr><td width='100px'><b>&nbsp&nbspRaum</b></td><td width='380px' align='left'><b>Objekt</b></td><td align='center' width='90px'><b>Status</b></td></tr>";
foreach(IPS_GetInstanceListByModuleID("{EE4A81C6-5C90-4DB7-AD2F-F6BBD521412E}") as $id)
{
   if(IPS_StatusVariableExists($id, "STATE"))
    {
        $var = IPS_GetStatusVariable($id, "STATE");
        // Integer Variable
        if($var['VariableType'] == 1)
        {
             if(@IPS_GetEventIDByName("Event".$var['VariableID'], $IPS_SELF) === false)
            {
                  $ereignis = IPS_CreateEvent(0);
                  IPS_SetEventTrigger($ereignis, 1, $var['VariableID']);
                  IPS_SetParent($ereignis, $IPS_SELF);
                  IPS_SetName($ereignis, "Event".$var['VariableID']);
                  IPS_SetEventActive($ereignis, true);
            }
            switch(GetValue($var['VariableID']))
            {
               case 0:
               $changedID = IPS_GetVariable($var['VariableID']);
               $time = "<td style='border:1px solid $bordercolor;' align='center' bgcolor='#27292B'>".date('d.m.y H:i:s', ($changedID['VariableChanged']))."</td>";
               $value = "<td style='border:1px solid $bordercolor;' width='16%' align='center' bgcolor=#004000>geschlossen</td>";
               break;
               case 1:
               $changedID = IPS_GetVariable($var['VariableID']);
               $time = "<td style='border:1px solid $bordercolor;' align='center' bgcolor='#27292B'>".date('d.m.y H:i:s', ($changedID['VariableChanged']))."</td>";
               $value = "<td style='border:1px solid $bordercolor;' width='16%' align='center' bgcolor='#C08800'>gekippt</td>";
               break;
               case 2:
               $changedID = IPS_GetVariable($var['VariableID']);
               $time = "<td style='border:1px solid $bordercolor;' align='center' bgcolor='#27292B'>".date('d.m.y H:i:s', ($changedID['VariableChanged']))."</td>";
               $value = "<td style='border:1px solid $bordercolor;' width='16%' align='center' bgcolor=#800000>geöffnet</td>";
               break;
            }
            $name = IPS_GetObject($var['VariableID']);
            $str .= "<tr height='38px'><td style='border:1px solid $bordercolor;' bgcolor=#27292B width='71%'>  ".IPS_GetName(IPS_GetParent($name['ParentID']))." ".IPS_GetName($name['ParentID'])."</td>".$time.$value."</tr>";
        }
    }
}
$str .= "</table>";
SetValue(29445 /*[Homematic\Sensoren\Content]*/, $str);

?>

DANKE ANKE !! ähhhhhhhh Rainer…:smiley:

Immer wieder super Deine Codestrecken hier zu entdecken und umgehend zum Einsatz zu bringen…

Gruss & happy coding

B71

Danke Rainer. Läuft perfekt.

Hast Du auch noch die Module-ID für die TFKs in Petto? Dann könnte man die auch noch mit in die Statusanzeige rein nehmen.

Grüsse.

TFKs
FS20? oder verstehe ich was falsch.

oder meinst das hier. Dann musst einfach erweitern.

Sorry - die Macht der Gewohnheit. Ich meine den HM-Sec-SC.

Sieh meine Link oben drüber. Du musst nur die Boolabfrage mit einbauen. Die ModulInstanz ist das selbe.

Hallo rainer,

kannst Du Dir die führenden Sonderzeichen auf dem Bild erklären ?

Habe das Script ganz normal rüberkopiert…eigentlich ja ein No-Brainer…aber die Anzeige ist „drollig“.

Gruss
Bernd

Capture.JPG

@Kronos

Du musst nur den Variablentyp von 1 auf 0 ändern dann werden alle Boolean Variablen vom Typ STATE angezeigt.

Ich habe ein zusätzliches separates Script hierfür angelegt mit einer separierten Variablen.

Gruss
B71

Hallo Bernd,

dein Browser mag wohl &nbsp nicht. Tausch es aus.

$str .= "<tr height='38px'><td style='border:1px solid $bordercolor;' bgcolor=#27292B width='71%'>".IPS_GetName(IPS_GetParent($name['ParentID']))." ".IPS_GetName($name['ParentID'])."</td>".$time.$value."</tr>";

Hmmm…ist Firefox 3.6.12…

Edit: Nach der Änderung läuft es.

Danke
bernd

Hmm, Seltsam. Bei mir läuft 4.07b. Sollte eigentlich keinen Unterschied machen.

Den Effekt hatte ich auch - allerdings nur mir 3.6.12 getestet. Ich habe die Steuerzeichen einfach rausgeworfen - seit dem zeigt er es korrekt an. Wollte der Sache auf den Grund gehen wenn er die TFKs (Sorry Rainer) korrekt erfasst.

@Bernardo71
Den Variablentyp wo ändern?

$var = IPS_GetStatusVariable($id, "STATE");
        // Integer Variable
        if($var['VariableType'] == 0)

im oberen Bereich des Scriptes anstelle von „1“

B71

Nachteil: Aktoren und Rauchmelder kommen dann auch „hoch“. Hier habe ich den Status auch noch auf Aktiv/Auf und Inaktiv/Zu geändert damit die 2 Stati vernünfig angezeigt werden.

@ Kronos, das andere habe ich im andern Thread angepasst, sollte also funktionieren.

Da hatte ich das Problem, dass er mir auch andere Aktoren mit Boolean-Statusvariablen angezeigt hat. Z.b. Zwischenstecker, 1-fach Unterputzaktoren usw. Sogar die Keymatic. Deswegen hatte ich ja Rainer heute nachmittag genervt.

@Rainer.
Das hatte ich noch nicht gesehen. Danke für den Hinweis.

Sieht dann final so für Türen aus:

<?
$bordercolor = "#505050"; // Rahmenfarbe anpassen

$str = "<table width='100%' cellspacing='0'>";
//$str .= "<tr><td width='100px'><b>&nbsp&nbspRaum</b></td><td width='380px' align='left'><b>Objekt</b></td><td align='center' width='90px'><b>Status</b></td></tr>";
foreach(IPS_GetInstanceListByModuleID("{EE4A81C6-5C90-4DB7-AD2F-F6BBD521412E}") as $id)
{
   if(IPS_StatusVariableExists($id, "STATE"))
    {
        $var = IPS_GetStatusVariable($id, "STATE");
        // Integer Variable
        if($var['VariableType'] == 0)
        {
             if(@IPS_GetEventIDByName("Event".$var['VariableID'], $IPS_SELF) === false)
            {
                  $ereignis = IPS_CreateEvent(0);
                  IPS_SetEventTrigger($ereignis, 1, $var['VariableID']);
                  IPS_SetParent($ereignis, $IPS_SELF);
                  IPS_SetName($ereignis, "Event".$var['VariableID']);
                  IPS_SetEventActive($ereignis, true);
            }
            switch(GetValue($var['VariableID']))
            {
               case 0:
               $changedID = IPS_GetVariable($var['VariableID']);
               $time = "<td style='border:1px solid $bordercolor;' align='center' bgcolor='#27292B'>".date('d.m.y H:i:s', ($changedID['VariableChanged']))."</td>";
               $value = "<td style='border:1px solid $bordercolor;' width='16%' align='center' bgcolor=#004000>geschlossen</td>";
               break;
               case 1:
               $changedID = IPS_GetVariable($var['VariableID']);
               $time = "<td style='border:1px solid $bordercolor;' align='center' bgcolor='#27292B'>".date('d.m.y H:i:s', ($changedID['VariableChanged']))."</td>";
               $value = "<td style='border:1px solid $bordercolor;' width='16%' align='center' bgcolor='#C08800'>geöffnet</td>";
               break;
                           }
            $name = IPS_GetObject($var['VariableID']);
            $str .= "<tr height='38px'><td style='border:1px solid $bordercolor;' bgcolor=#27292B width='71%'>".IPS_GetName(IPS_GetParent($name['ParentID']))." ".IPS_GetName($name['ParentID'])."</td>".$time.$value."</tr>";
        }
    }
}
$str .= "</table>";
SetValue(46305 /*[Fenster\Türkontakte]*/ , $str);

?>

Solltest Du Aktoren und Rauchmelder haben musst Du die Case 0 und Case 1 Stati noch Deinen Wünschen entsprechend anpassen.

Gruss
B71

guten abend…
zum &nbsp - Problem
sollte das geschützte Leerzeichen nicht so aussehen ? also mit ; am ende.

jo, sollte es.