Hallo,
hier dein Scriptteil:
$var = IPS_GetObjectIDByName("STATE", $id);
$profil = IPS_GetVariable($var['VariableID']);
IPS_GetObjectIDByName hat als Rückgabewert die ID und kein Array,
also müsste hier deine 2. Zeile so aussehen:
$profil = IPS_GetVariable($var);
Wie gesagt, bei mir liefert die foreach-Schleife keine Fehler.
Gruß,
Christian.
Hallo Christian,
habe Teilerfolge erzielt, danke
Momentan hapert es noch bei einem Skript
if(@IPS_GetObjectIDByName("STATE", $id))
{
$var = @IPS_GetObjectIDByName("STATE", $id);
$profil = IPS_GetVariable($var);
// Integer Variable
if(($var['VariableType'] == 1) && ($profil['VariableCustomProfile'] == ""))
Die Auswertung geht nur wenn ich den VariablenTyp auf 0 setze (wobei dann wahrscheinlich nix ausgewertet wird). Irgendwie wird da mit „IPS_GetStatusVariable“ mehr übertragen wie mit den Ersatzbefehlen. Habe die Anleitungen mehrfach studiert und probiert, komme aber zu keinem Ergebnis.
Gruß
Bruno
RWN
10. Dezember 2011 um 19:04
123
<?
$bordercolor = "#505050"; // Rahmenfarbe anpassen
$str = "<table style='border-bottom:1px solid $bordercolor' width='100%' cellspacing='0'>";
foreach(IPS_GetInstanceListByModuleID("{EE4A81C6-5C90-4DB7-AD2F-F6BBD521412E}") as $ids)
{
$id = IPS_GetInstance($ids);
$ident = @IPS_GetObjectIDByIdent("STATE", $id['InstanceID']);
if($ident !== false)
{
$var = IPS_GetVariable($ident);
// Integer Variable
if(($var['VariableValue']['ValueType'] == 1) && ($var['VariableCustomProfile'] == "~Window.HM")) // Profil eintragen
{
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:
$img = "<td style='border-width:1px 0 0 1px; border-style:solid; border-color:$bordercolor;' align='center' bgcolor='#202020' width='50px'><img src='user\\icons\\fixed\\FensterGeschlossen.png'></td>";
$changedID = IPS_GetVariable($var['VariableID']);
$time = "<td style='border-width:1px 0 0 1px; border-style:solid; border-color:$bordercolor;' align='center' bgcolor='#202020'>".date('d.m.y H:i:s', ($changedID['VariableChanged']))."</td>";
$value = "<td style='border-width:1px 1px 0 1px; border-style:solid; border-color:$bordercolor;' width='16%' align='center' bgcolor=#004000>geschlossen</td>";
break;
case 1:
$img = "<td style='border-width:1px 0 0 1px; border-style:solid; border-color:$bordercolor;' align='center' bgcolor='#202020' width='38px'><img src='user\\icons\\fixed\\Fenster1_Gekippt32.png'></td>";
$changedID = IPS_GetVariable($var['VariableID']);
$time = "<td style='border-width:1px 0 0 1px; border-style:solid; border-color:$bordercolor;' align='center' bgcolor='#202020'>".date('d.m.y H:i:s', ($changedID['VariableChanged']))."</td>";
$value = "<td style='border-width:1px 1px 0 1px; border-style:solid; border-color:$bordercolor;' width='16%' align='center' bgcolor='#C08800'>gekippt</td>";
break;
case 2:
$img = "<td style='border-width:1px 0 0 1px; border-style:solid; border-color:$bordercolor;' align='center' bgcolor='#202020' width='38px'><img src='user\\icons\\fixed\\Fenster1_Offen32.png'></td>";
$changedID = IPS_GetVariable($var['VariableID']);
$time = "<td style='border-width:1px 0 0 1px; border-style:solid; border-color:$bordercolor;' align='center' bgcolor='#202020'>".date('d.m.y H:i:s', ($changedID['VariableChanged']))."</td>";
$value = "<td style='border-width:1px 1px 0 1px; border-style:solid; border-color:$bordercolor;' width='16%' align='center' bgcolor=#800000>geöffnet</td>";
break;
}
$name = IPS_GetObject($var['VariableID']);
$str .= "<tr height='38px'>$img<td style='border-top:1px solid $bordercolor' bgcolor='#202020' width='67%'> ".IPS_GetName(IPS_GetParent($name['ParentID']))." ".IPS_GetName($name['ParentID'])."</td>".$time.$value."</tr>";
}
// bool Variable
if(($var['VariableValue']['ValueType'] == 0) && ($var['VariableCustomProfile'] == "~Window.HM")) // Profil eintragen
{
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:
$img = "<td style='border-width:1px 0 0 1px; border-style:solid; border-color:$bordercolor;' align='center' bgcolor='#202020' width='38px'><img src='user\\icons\\fixed\\Tuer.png'></td>";
$changedID = IPS_GetVariable($var['VariableID']);
$time = "<td style='border-width:1px 0 0 1px; border-style:solid; border-color:$bordercolor;' align='center' bgcolor='#202020'>".date('d.m.y H:i:s', ($changedID['VariableChanged']))."</td>";
$value = "<td style='border-width:1px 1px 0 1px; border-style:solid; border-color:$bordercolor;' width='16%' align='center' bgcolor=#004000>geschlossen</td>";
break;
case 1:
$img = "<td style='border-width:1px 0 0 1px; border-style:solid; border-color:$bordercolor;' align='center' bgcolor='#202020' width='38px'><img src='user\\icons\\fixed\\TuerOffen.png'></td>";
$changedID = IPS_GetVariable($var['VariableID']);
$time = "<td style='border-width:1px 0 0 1px; border-style:solid; border-color:$bordercolor;' align='center' bgcolor='#202020'>".date('d.m.y H:i:s', ($changedID['VariableChanged']))."</td>";
$value = "<td style='border-width:1px 1px 0 1px; border-style:solid; border-color:$bordercolor;' width='16%' align='center' bgcolor='#800000'>geöffnet</td>";
break;
}
$name = IPS_GetObject($var['VariableID']);
$str .= "<tr height='38px'>$img<td style='border-top:1px solid $bordercolor' bgcolor='#202020' width='67%'> ".IPS_GetName(IPS_GetParent($name['ParentID']))." ".IPS_GetName($name['ParentID'])."</td>".$time.$value."</tr>";
}
}
}
$str .= "</table>";
SetValue(29445 /*[Homematic allgemein\Sensoren\Content]*/, $str);
?>
Hallo,
Ja, so einfach gehts auch
Danke
Rainer ist doch sowohl für kurze und knappe Anwtorten wie auch effizientes Scripting bekannt ?!?#:D:D:D
echt irre…
Er hat uns wohl nimmer zuschauen können
konny
12. Dezember 2011 um 17:56
128
Hallo,
mit dem Script
<?
$bordercolor = "#505050"; // Rahmenfarbe anpassen
$str = "<table width='100%' cellspacing='0'>";
//$str .= "<tr><td width='100px'><b>  Raum</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(16592 /*[HomeMatic\Tuerenstatus]*/ , $str);
?>
sehe ich den Status der Türen, allerdings auch den Status der Steckdosenschalter.
Wie bekomme ich das weg?
Gruß Konny
RWN
12. Dezember 2011 um 18:00
129
indem Du das Profil abfragst oder auf 2.5 updatetest und ein Ident vergibst welcher dann eindeutig ist oder das Script ein paar Seiten weiter vorne nimmst.
fredz
7. März 2012 um 10:11
130
Ich hatte gerne ein nettes Datei gemacht, wo Ich genau und übersichtlich sehen kann wenn ein Tür (mit HomeMatic Türkontakt) geöffnet und wieder geschlössen würde. Also kein Graph, aber ein richtiges Logbestand. Kann jemand mir helfen?
zB
HAUSTÜR
07/03/2012 07:00 Offen
07/03/2012 07:01 Geschlossen
07/03/2012 07:05 Offen
usw
Vielleicht gefällt Dir das.
Eventuelle Anpassung an die V2.5 bitte selbst durchführen.
Hallo,
ich habe das modifizierte Script von khc, Seite 7, kopiert und für 2 TK testweise zum laufen gebracht. Mir waren die Zeiten wichtig.
Auch reagiert es auf Änderungen, ich bin stolz das ich das hinbekommen habe… obwohl das alles nicht von mir ist…
Dank an das Super Forum, ich habe es bis jetzt nicht bereut IPS gekauft zu haben!
Leider wird bei der Variablenbezeichung der komplette Pfad angezeigt, ich weiß nicht ob man das ändern kann?
Screenshot anbei.
Wo liegt mein Fehler?
Kann mir jemand helfen?
Gruß
Jürgen
dapor
20. April 2012 um 07:48
133
die Zeile :
$ArrValues["Location"] = IPS_GetLocation(IPS_GetParent($varId));
tut das…kann man in
$ArrValues["Location"] = IPS_GetName(IPS_GetParent($varId));
ändern
Ohne Gewähr da aus dem Kopf aber damit solltest du klar kommen
Hallo dapor, das war die Lösung!
Danke.
Gruss Jürgen
dapor
20. April 2012 um 08:28
135
…gerne.
Man kann auch die Sinnhaftigkeit von „Aus“ für ein geschlossenes Fenster anmerken.
Ich finde „geschlossen“ besser
Gebe ich dir vollkommen Recht! werde ich ändern.
Hallo!
ich habe dieses Script im Einsatz nur leider wird kein Status mehr angezeigt seit dem Update auf IPSymcon 4.0
Ist das erklärbar?
lg
Christian
siehe Anpassungen weiter oben!
Ansonsten mal eine genaue Fehlermeldung posten.
Hallo Werner,
nachdem ich das Update auf 4.0. gemacht habe sehe ich die Fensterabfrage im Handy und IPad
kannst du mir da helfen da diese Funktion echt genial ist
Danke
lg
CHristian
hallo
hier noch die Fehlermeldung