Fensterzustand anzeigen

Danke. :stuck_out_tongue:

So, Geschenke sind verteilt, meine Tochter singt noch, das Baby hat gleich Hunger und Papa checkt noch schnell die Heizung über IPS.
Das war heute echt eng mit dem Baum.

Ok, evtl finde ich die Tage dann doch Zeit, um das Script zu erweitern. Muss erst noch überlegen, wie ich das umsetzen möchte.

Guten Morgen… hab da mal was gebastelt für die Meldung wenn ein Fenster zu lange offen steht:

im ‚case 2:‘ wo $value mit dem geöffneten Status gefüllt wird hab ich folgendes hinzugefügt:
(Angepasst gehört noch die Script-ID welches ausgeführt werden soll (bei mir ‚58898 /[Zentrale\Fenster zu lange offen]/‘) und eventuell die Zeit!)


// Holt die ID des Events das zu der Variable gehört
$warn_id = @IPS_GetEventIDByName("Warn".$var['VariableID'], 58898 /*[Zentrale\Fenster zu lange offen]*/);
// Fragt ab, ob es schon besteht, wenn nein, dann erstellen wir eines
if($warn_id === false) {
	$warn_event = IPS_CreateEvent(1);  //  Zyklisches Element erstellen
	IPS_SetEventCyclic($warn_event, 0,0,0,0,2,15); // Alle 15 Minuten -> Hier stellt man die Zeit ein, wann eine Meldung erfolgen soll.
	IPS_SetEventCyclicTimeBounds($warn_event,mktime(),0); // Startzeit jetzt
	IPS_SetParent($warn_event, 58898 /*[Zentrale\Fenster zu lange offen]*/); // ParentID des Scriptes was nach der Zeit ausgeführt werden soll
	IPS_SetName($warn_event, "Warn".$var['VariableID']); // Ein Name für das Event
	IPS_SetEventActive($warn_event, true); // Event aktivieren
}

im ‚case 0:‘ kommt folgendes dazu:


$warn_id = @IPS_GetEventIDByName("Warn".$var['VariableID'], 58898 /*[Zentrale\Fenster zu lange offen]*/);
	if($warn_id) {
	IPS_DeleteEvent($warn_id);
}

im Script, lautet bei mir „Zentrale\Fenster zu lange offen“ mit der ID 58898 steht bei mir folgendes:
(Angepasst gehört in dem Script noch die ID des Webfront Configurators!)


if($IPS_EVENT) {
	$name = IPS_GetName($IPS_EVENT);
	$var_id = substr(IPS_GetName($IPS_EVENT), 4);
	$name = IPS_GetObject((int)$var_id);
}
WFC_SendNotification(29424 /*[WebFront Configurator]*/, "Warnung", date("d.m.Y H:i", time())."<br>".IPS_GetName(IPS_GetParent($name['ParentID']))." ".IPS_GetName($name['ParentID'])." steht zu lange offen!",'Warning', 0);
IPS_SetEventActive($IPS_EVENT, false);

Bei mir erscheint da momentan nur eine Notification nach 15 Minuten und das Event wird deaktiviert, damit es nicht mehrfach ausgeführt wird.

bei mir haut´s so ganz gut hin :slight_smile:

lg, Christian

Ja ist denn schon Weihnachten? :smiley:

Na dann werde ich das mal einbauen und berichten. Vielen Dank für die Mühe.

Muß aber erst noch mit der Tochter in den Weihnachtszirkus.

angeblich war gestern Bescherung :smiley:

ich habs gestern Abend gebastelt wie mein Sohnemann im Bett war… wegen der Ruhe wärs g

So, eingebaut und für gut befunden. Ich lasse das mit der Einblendung. Die schaut sie sich ja doch nicht an. Ich nutze den Media Player mit: „Who let the dogs out“. :D:D:D
TTS bockt leider bei mir und bleibt stumm.

Danke Dir.

Hallo,

ich habe drei neue Icons für die Drehgriffe im klassischen iPS Design erstellt für offen, gekippt und geschlossen.

Für die die ein einheitliches Look and Feel wollen.

Ihr müsst nur die Namen leicht anpassen.

Fenster-Icons-iPS-Design.zip (9.09 KB)

Ich habe auf der rechten Seite gearbeitet und diese Standardrechteckgeschichte ersetzt.

Ampel.zip (5.74 KB)

Habe die Liste etwas abgeändert, da mir die Farben und die Darstellung nicht ganz gefallen haben.
Hier das Ergebnis.
Umrandung ist jetzt in der Standard IPS Farbe und nur 1px und nicht zum Teil doppelt dick.
Geschlossen habe ich in der Hintergrundfarbe dargestellt, dadurch ist das ganze nicht so ganz farbig.

<?
	// Dim Array
	$Arr = array();

	//	Per Hand die eine oder andere Variable einfügen
	//$id = 29410 /*[Funk Devices\EG\Flur\Hauseingangstür (TF-Kontakt )]*/; $Arr[$id] = GetVariableArray($id);
	//$id = 46238 /*[Funk Devices\EG\Wohnzimmer\Balkontür (TF-Kontakt)]*/; $Arr[$id] = GetVariableArray($id);

	$Varname = "STATE";
	// Alles ins Array packen
	foreach(IPS_GetInstanceListByModuleID("{EE4A81C6-5C90-4DB7-AD2F-F6BBD521412E}") as $InstanceId)
	{
		if(IPS_StatusVariableExists($InstanceId, $Varname))
		{
			$var = IPS_GetStatusVariable($InstanceId, $Varname);

			// Integer Variable
        if($var['VariableType'] == 1)
        {
				$V = GetVariableArray($var['VariableID']);
				$Arr[$InstanceId] = $V;

				CreateEvent( $var['VariableID']);
        }
		}
	}
	// sortiere Array nach Location
	usort($Arr, "cmp");

	// Daten in die Content Variable schreiben
	$str = WriteToHTML($Arr);
	$IdParent = IPS_GetParent($IPS_SELF);
	$IdContent = CreateVariableByName($IdParent, "Content", 3, "~HTMLBox");
	SetValue($IdContent, $str);

return;

	function CreateEvent($id)
	{
		global $IPS_SELF;

		if(@IPS_GetEventIDByName("Event".$id, $IPS_SELF) === false)
      {
            $ereignis = IPS_CreateEvent(0);
            IPS_SetEventTrigger($ereignis, 1, $id);
            IPS_SetParent($ereignis, $IPS_SELF);
            IPS_SetName($ereignis, "Event".$id);
            IPS_SetEventActive($ereignis, true);
      }
	}


	function cmp($a, $b)
	{
		return	    ($a['Location'] > $b['Location']);
	}

	Function GetVariableArray($varId)
	{
		$ArrValues["Location"] = IPS_GetLocation(IPS_GetParent($varId));
		$ArrValues["Location"] = str_replace("Funk Devices\\", "",$ArrValues["Location"]);
		$ArrValues["Location"] = trim($ArrValues["Location"], "_ \\");

		$var = IPS_GetVariable($varId);
		$ArrValues["Value"] = GetValue($varId);
		$ArrValues["ValueFormatted"] = GetValueFormatted($varId);
		$ArrValues["Changed"] = date('d.m.y H:i', ($var['VariableChanged']));
		$ArrValues["Updated"] = date('d.m.y H:i', ($var['VariableUpdated']));

		return $ArrValues;
	}

function WriteToHTML($arr)
{
	global $IPS_SELF;
	//$bordercolor = "#505050"; // Rahmenfarbe anpassen
	$bordercolor = "#39384A"; // Rahmenfarbe anpassen so wie IPS Standard
	$FirstLine = " border-top:1px solid  $bordercolor;";

	$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($arr as $var)
	{

	   switch($var['Value'])
	   {
	      case 0:  // Geschlossen
	         $Color = "#27292B";  // = Hintergrundfarbe
	   	   break;
		   case 1:  // Gekippt
				$Color = "#C08800";  // Gelb - Ocker
	      	break;
	      case 2:  // Geöffnet
	         $Color = "#AD1C18";  //Rot
		      break;
	   }

		// Spalten
	   $str .= "<tr height='28px'>" ;
      $ColArr = array();
		$str .= "<td style='$FirstLine border-left:1px solid  $bordercolor; border-bottom:1px solid  $bordercolor; border-right:1px solid  $bordercolor;' bgcolor=#27292B >&nbsp ". $var['Location'] ."</td>";
		$str .= "<td style='$FirstLine border-bottom:1px solid  $bordercolor; border-right:1px solid  $bordercolor;' width='12%' align='center' bgcolor='#27292B'>". $var['Changed'] ."</td>";
		$str .= "<td style='$FirstLine border-bottom:1px solid  $bordercolor; border-right:1px solid  $bordercolor;' width='12%' align='center' bgcolor=".$Color.">". $var['ValueFormatted'] ."</td>";
		$str .= "</tr>";

		$FirstLine = "";
	}
	$str .= "</table>";
	return $str;
}
	function CreateVariableByName($parentId, $name, $type, $profile = "", $defaultValue = "", $webFront = false)
	{
	     global $IPS_SELF;
	     $vid = @IPS_GetVariableIDByName($name, $parentId);
	     if($vid === false)
	     {
	         $vid = IPS_CreateVariable($type);
	         IPS_SetParent($vid, $parentId);
	         IPS_SetName($vid, $name);
	         IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
				if ($defaultValue !== "" )	{ SetValue($vid,$defaultValue); }
	         if ($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
  				if ($webFront == true )	{ IPS_SetVariableCustomAction ($vid, 52620 /*[..Sys\SetVariableFromWebFront]*/); }
	     }
	     return $vid;
	}
?>

Hallo khc,

danke für den Script.

Wenn ich das richtige vestehe dann liest dein Script automatisch die Drehgriffkontakte (VariableType=1) und man kann die TF-Kontakte händisch angeben. Aber leider funktioniert das nicht bei mir. Habe folgende 2 Variablen händisch angegeben:

//    Per Hand die eine oder andere Variable einfügen
$id = 15869  /*[Fenster und Türen\EG/Fenster Bad]*/; $Arr[$id] = GetVariableArray($id);
$id = 54993  /*[Fenster und Türen\EG/Fenster Eingangsbereich]*/; $Arr[$id] = GetVariableArray($id);

Bekomme aber die Warnung das beide Variablen nicht vorhanden sind, hast einen Tip für mich?

Edit: Hat sich erledigt! :wink:

Hallo Rainer und alle anderen,

ein cooles Script und das mit den drei Farben habe ich schon lange gesucht. Ich habe es für mich etwas angepasst und es funktioniert super.

Hat jemand eine Idee wie man noch eine Sortierung reinbringen könnte?

Ich habe auch versucht den Positionswert der jeweiligen HM-Instanz zu ermitteln - ist mir noch nicht gelungen. Ich finde die passende ‚VariablePosition‘ leider nicht. Hat noch jemand einen Tipp?

<?
/* globale Funktionen einbinden */
include('34724.ips.php');

$bordercolor = '#505050'; // Rahmenfarbe
$bgcolor     = '#27292B'; // Hintergrundfarbe
$gelb        = '#FFA201'; // gekippt
$rot         = '#800000'; // offen
$gruen       = '#004000'; // geschlossen

$breite1 = '8%';
$breite2 = '47%';
$breite3 = '23%';
$breite4 = '22%';
$hoehe = '24px';

$out = "<table style='border-bottom:1px solid $bordercolor' width='100%' cellspacing='0' cellspacing='0'>";
foreach(IPS_GetInstanceListByModuleID("{EE4A81C6-5C90-4DB7-AD2F-F6BBD521412E}") as $id) {
	if(IPS_StatusVariableExists($id, "STATE")) {
		$var = IPS_GetStatusVariable($id, "STATE");
      $name      = IPS_GetObject($var['VariableID']);
      $changedID = IPS_GetVariable($var['VariableID']);
      $profil    = IPS_GetVariable($var['VariableID']);
		// Integer Variable
		if(($var['VariableType'] == 1) && ($profil['VariableCustomProfile'] == "Fenster")) {
			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: // geschlossen
               $img =   "<td style='border-width:1px 0   0 1px; border-style:solid; border-color:$bordercolor;' align='center' bgcolor=$bgcolor width=$breite1>";
					$img .=  "<img src='..\\webfront\\user\\icons\\fixed\\fenster_geschlossen.png' border='0' width='24' height='24'></td>";
               $time =  "<td style='border-width:1px 0   0 1px; border-style:solid; border-color:$bordercolor;' align='center' bgcolor=$bgcolor width=$breite3>".date('d.m. H:i', ($changedID['VariableChanged']))."</td>";
               $value = "<td style='border-width:1px 1px 0 1px; border-style:solid; border-color:$bordercolor;' align='center' bgcolor=$gruen   width=$breite4>geschlossen</td>";
               break;
            case 1: // gekippt
               $img =   "<td style='border-width:1px 0   0 1px; border-style:solid; border-color:$bordercolor;' align='center' bgcolor=$bgcolor width=$breite1>";
               $img .=  "<img src='..\\webfront\\user\\icons\\fixed\\fenster_gekippt.png' border='0' width='24' height='24'></td>";
               $time =  "<td style='border-width:1px 0   0 1px; border-style:solid; border-color:$bordercolor;' align='center' bgcolor=$bgcolor width=$breite3>".date('d.m. H:i', ($changedID['VariableChanged']))."</td>";
               $value = "<td style='border-width:1px 1px 0 1px; border-style:solid; border-color:$bordercolor;' align='center' bgcolor=$gelb    width=$breite4>gekippt</td>";
               break;
            case 2: // geöffnet
               $img =   "<td style='border-width:1px 0   0 1px; border-style:solid; border-color:$bordercolor;' align='center' bgcolor=$bgcolor width=$breite1>";
               $img .=  "<img src='..\\webfront\\user\\icons\\fixed\\fenster_offen.png' border='0' width='24' height='24'></td>";
               $time =  "<td style='border-width:1px 0   0 1px; border-style:solid; border-color:$bordercolor;' align='center' bgcolor=$bgcolor width=$breite3>".date('d.m. H:i', ($changedID['VariableChanged']))."</td>";
               $value = "<td style='border-width:1px 1px 0 1px; border-style:solid; border-color:$bordercolor;' align='center' bgcolor=$rot     width=$breite4>geöffnet</td>";
               break;
			}
			$out .= "<tr height=$hoehe>$img<td style='border-top:1px solid $bordercolor' bgcolor=$bgcolor width=$breite2> ".IPS_GetName($name['ParentID'])."</td>".$time.$value."</tr>";
		}
      // Boolean Variable
      if(($var['VariableType'] == 0) && ($profil['VariableCustomProfile'] == "Kontakte")) {
			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: // geschlossen
               $img =   "<td style='border-width:1px 0   0 1px; border-style:solid; border-color:$bordercolor;' align='center' bgcolor=$bgcolor width=$breite1>";
					$img .=  "<img src='..\\webfront\\user\\icons\\fixed\\fenster_geschlossen.png' border='0' width='24' height='24'></td>";
               $time =  "<td style='border-width:1px 0   0 1px; border-style:solid; border-color:$bordercolor;' align='center' bgcolor=$bgcolor width=$breite3>".date('d.m. H:i', ($changedID['VariableChanged']))."</td>";
               $value = "<td style='border-width:1px 1px 0 1px; border-style:solid; border-color:$bordercolor;' align='center' bgcolor=$gruen   width=$breite3>geschlossen</td>";
               break;
            case 1: // geöffnet
               $img =   "<td style='border-width:1px 0   0 1px; border-style:solid; border-color:$bordercolor;' align='center' bgcolor=$bgcolor width=$breite1>";
               $img .=  "<img src='..\\webfront\\user\\icons\\fixed\\fenster_offen.png' border='0' width='24' height='24'></td>";
               $time =  "<td style='border-width:1px 0   0 1px; border-style:solid; border-color:$bordercolor;' align='center' bgcolor=$bgcolor width=$breite3>".date('d.m. H:i', ($changedID['VariableChanged']))."</td>";
               $value = "<td style='border-width:1px 1px 0 1px; border-style:solid; border-color:$bordercolor;' align='center' bgcolor=$rot     width=$breite4>geöffnet</td>";
               break;
         }
			$out .= "<tr height=$hoehe>$img<td style='border-top:1px solid $bordercolor' bgcolor=$bgcolor width=$breite2> ".IPS_GetName($name['ParentID'])."</td>".$time.$value."</tr>";
		}
      // Boolean Variable
      if(($var['VariableType'] == 0) && ($profil['VariableCustomProfile'] == "Haustuer")) {
         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: // geschlossen
               $img =   "<td style='border-width:1px 0   0 1px; border-style:solid; border-color:$bordercolor;' align='center' bgcolor=$bgcolor width=$breite1>";
					$img .=  "<img src='..\\webfront\\user\\icons\\fixed\	uer.png' border='0' width='24' height='24'></td>";
               $time =  "<td style='border-width:1px 0   0 1px; border-style:solid; border-color:$bordercolor;' align='center' bgcolor=$bgcolor width=$breite3>".date('d.m. H:i', ($changedID['VariableChanged']))."</td>";
               $value = "<td style='border-width:1px 1px 0 1px; border-style:solid; border-color:$bordercolor;' align='center' bgcolor=$gruen   width=$breite4>geschlossen</td>";
               break;
            case 1: // geöffnet
               $img =   "<td style='border-width:1px 0   0 1px; border-style:solid; border-color:$bordercolor;' align='center' bgcolor=$bgcolor width=$breite1>";
               $img .=  "<img src='..\\webfront\\user\\icons\\fixed\	uer_offen.png' border='0' width='24' height='24'></td>";
               $time =  "<td style='border-width:1px 0   0 1px; border-style:solid; border-color:$bordercolor;' align='center' bgcolor=$bgcolor width=$breite3>".date('d.m. H:i', ($changedID['VariableChanged']))."</td>";
               $value = "<td style='border-width:1px 1px 0 1px; border-style:solid; border-color:$bordercolor;' align='center' bgcolor=$rot     width=$breite4>geöffnet</td>";
               break;
         }
			$out .= "<tr height=$hoehe>$img<td style='border-top:1px solid $bordercolor' bgcolor=$bgcolor width=$breite2> ".IPS_GetName($name['ParentID'])."</td>".$time.$value."</tr>";
		}
	}
}
$out .= "</table>";
SetValue(11611 /*[Zentral\Fenster & Türen]*/, $out);

IPS_RunScript(57544 /*[Skripte\Fenster & Türen überprüfen]*/);

// Script-Zeit "last run" merken
SetValueString(27581 /*[Skripte\Fenster- & Tür-Status holen\last run]*/, GetAktTimestamp());
?>

Tolle Software - tolles Forum - danke an alle.

Viele Grüße aus dem Unterallgäu
Harry

Moin Harry,

sieh dir das mal an. IPS_GetObject: IP-Symcon :: Automatisierungssoftware, speziell dieses ObjectPosition.

Hallo Rainer,

das war der fehlende Link - vielen Dank für den Tipp, nun kann ich über die PositionsID bei STATE die Reihenfolge steuern. Die jeweilige Outputzeile wandert in ein Array dessen zweiter Wert die Position angibt. Array danach sortieren und schon passt die Ausgabe.


$name = IPS_GetObject($var['VariableID']);
$pos = $name['ObjectPosition'];


usort($output, 'vergleich');
for ($i=0;$i<count($output);$i++) { $out .= $output[$i][0]; }

Ergänzung:

Nun hole ich die Positon aus der eigentlichen HM-Instanz eine Ebene höher, ist irgendwie logischer als bei STATE.


$name = IPS_GetObject($var['VariableID']);
$name2 = IPS_GetObject($name['ParentID']);
$pos = $name2['ObjectPosition'];

Vielen Dank
Ein schönes Wochende
Harry

Hallo Rainer,
welche ID benötigt dein Script in der Zeile 79?

Gruß Tim

Hallo Tim,

in V2.4 wird dieses Script nicht mehr benötigt, geht jetzt alles mit Boardmitteln.

Hallo Rainer,
danke für die schnelle Antwort. Dann schau ich mal ob ich da was zu finde.

Gruß Tim

Hallo Tim,

da brauchst nichts suchen. Entweder Du nimmst das default Variablenprofil oder Du legst dir selber eines an. Farben und Icons hinterlegen, fertig. :slight_smile:

Hallo Rainer,
kann ich einer vorhanden Instanz eines Fensterkontaktes auch ein anderes Variabelenprofil zuweisen?

Gruß Tim

Ja, kannst Du.

Aber wie? :slight_smile:

Einfach der STATE-Variablen ein Profil zuweisen (Doppelklick auf die Variable und weiter klicken).