Zur besten Antwort gewählt
Okt 09, 2018 - 18:16
Wie dies auf einer CCU funktioniert hat zdenko33 schon auf Timestamp letzte Änderung verwiesen, dazu muss also eine Systemvariable auf der CCU beschrieben werden. Die Systemvariable kann dann über das NEO Homematic Plugin in NEO dargestellt werden.
Zweiter Weg wäre bei der Ansteuerung von Homematic über das NEO Plugin IP-Symcon.
Hier werden zwei zusätzliche Variablen vom Typ String unterhalb des Geräts angelegt.
dann braucht man noch ein Skript, damit der Variablenstatus auch aktualisiert wird.
Skript Letzte Änderung
<?
// Zeitstempel in Variable schreiben
$TriggerID = $_IPS['VARIABLE'];
$lastchange = IPS_GetVariable($TriggerID)["VariableChanged"];
$ParentID = IPS_GetParent(IntVal($TriggerID));
$TimeStampID = IPS_GetObjectIDByIdent("VariableChanged", $ParentID);
$TimeStamp = date("j.m.y - H:i:s", $lastchange);
SetValue ($TimeStampID, $TimeStamp);
?>
Auf das Skript wird ein Ereigniss gelegt bei Variablenänderung der Variable Zustand (STATE).
Ein zweites Skript prüft sekündlich mit einem Intervaltimer die Zeit, die seit der letzten Variablenänderung vergangen ist, und aktualisiert dies in der Variable Änderung seit
Skript Zeit seit letzter Änderung
<?
$current_time = time(); // aktuelle Zeit in Sekunden
$id = 47686 /*[Geräte\Homematic\Räume\Wohnzimmer\Balkontür Öffnungszustand\Zustand]*/;
$time_varchange = IPS_GetVariable($id)['VariableChanged'];
$timediff = $current_time - $time_varchange;
$Ausgabe = timeconversion($timediff);
$days = $Ausgabe['tag'];
$hours = $Ausgabe['std'];
$minutes = $Ausgabe['min'];
$seconds = $Ausgabe['sek'];
if($days == 0)
{
$days = "";
}
else
{
$days = $days . " Tage, ";
}
if($hours == 0 && $days == 0)
{
$hours = "";
}
else
{
$hours = $hours . "h, ";
}
if($minutes == 0 && $hours == 0)
{
$minutes = "";
}
else
{
$minutes = $minutes . "min, ";
}
SetValue(53002 /*[Geräte\Homematic\Räume\Wohnzimmer\Balkontür Öffnungszustand\Änderung seit]*/, $days.$hours.$minutes.$seconds." s");
function timeconversion($sekunden){
$tag = floor($sekunden / (3600*24));
$std = floor($sekunden / 3600 % 24);
$min = floor($sekunden / 60 % 60);
$sek = floor($sekunden % 60);
return array("sek"=>$sek,"min"=>$min,"std"=>$std,"tag"=>$tag);
}
?>
In NEO selber stehen diese Werte dann unterhalb des Geräts zur Auswahl wenn man ein Textfeld in NEO anlegt
In der Visualisierung sieht das dann so aus
Neuen Kommentar hinzufügen