Zeiten einer Variable erstellen und addieren.

Servus.

Ich habe an einer HM- Funk Steckdose einen Entfeuchter hängen.
Ich würde jetzt gerne die „on“ Zeiten der Steckdose pro Tag/Woche anzeigen lassen.
Meine Idee:

<?

$t1 = time();
$t2 = IPS_GetVariable(55797  /*[Homematic\Funksteckdose 3\STATE]*/);
$t2 = $t2['VariableChanged'];
$t3 = $t1 - $t2;
 "TimeStamp:".$t3;
echo date("H:i",$t3);

?>

Daraus bekomme ich eine Zeit in dem Format z.B. 02:15.
Nun stehe ich auf dem Schlauch.
Das Script würde ich starten, wenn die Steckdose geschaltet wird. Dann ist aber das Ergebnis 01:00.
(Die eine Stunde kommt wohl durch die Zeitzone).
Hat einer von Euch eine Idee?

PS: Habe auch schon im Forum gesucht aber leider nichts ähnliches gefunden.

Servus.

Wie das manchmal so ist, kaum hat man gepostet findet man doch die Lösung!

http://www.ip-symcon.de/forum/threads/8636-Betriebsstundenz%C3%A4hler-und-mehr

Hört sich super an, mehr als ich wollte.

Werde es morgen testen.

EDIT:
Leider habe ich mich zu früh gefreut. Das Script läuft leider nicht mehr.
Gibt es nicht so etwas für die aktuelle Version von IPS?

Hallo Sascha,

ich weiss nicht, ob bb sein PG geändert hat.

Ich nutzte folgendes Universalscript, das gleichzeitig den Stromverbrauch festhält.
In der Geräte-Instanz müssen dazu 3 Float-Variablen mit festen Namen angelegt werden.
„Leistung“, Profil Watt, Wattzahl des Gerätes einmalig einstellen
„letzte Änderung“
„Stromverbrauch“, Profil KWh
Dann ein Ereignis auf die Statusvariable des Geräts bei Variablenänderung auf das Script setzen
Du kannst ja statt des Verbrauchs, die Zeit addieren.

Gruß, Peter


 // Zeit berechnen, wie lange ein Gerät eingeschaltet war
 // und dann den Stromverbrauch berechnen
 // Geräte = "FS20" oder "HomeMatic Device"
 //
 // folgende Variablen je Gerät (Instanz) einrichten:
 // - Leistung       	float    ~Watt.3680
 // - Stromverbrauch 	float    ~Electricity   loggen als Zähler
 // - letzte Änderung   float
 
 
 $EreignisInfo = IPS_GetEvent($_IPS['EVENT']);
 $id_var = $EreignisInfo['TriggerVariableID'];
 $id_geraet = IPS_GetParent($id_var);
 $modul = IPS_GetInstance($id_geraet)['ModuleInfo']['ModuleName'];
 IF($modul == "FS20")
   $id_status = IPS_GetObjectIDByName("Status",$id_geraet);
 ELSE
 	$id_status = IPS_GetObjectIDByName("STATE",$id_geraet);

 $id_zuletzt = IPS_GetObjectIDByName("letzte Änderung",$id_geraet);
 $id_kwh = IPS_GetObjectIDByName("Stromverbrauch",$id_geraet);
 $id_kw = IPS_GetObjectIDByName("Leistung",$id_geraet);
 $kw = GetValueFloat($id_kw)/1000/3600;                     // Watt/1000=kw/3600=pro Sekunde
 
 $status = GetValueBoolean($id_status);
 $letzte = GetValueFloat($id_zuletzt);
 $var    = IPS_GetVariable($id_status);
 $akt		= $var['VariableUpdated'];

 IF ($status == false)     // Gerät wurde ausgeschaltet
   {
	 $zeit   = $akt - $letzte;
	 $verbrauch = $kw * $zeit + GetValueFloat($id_kwh);
	 SetValueFloat($id_kwh, $verbrauch);
	}

 SetValueFloat($id_zuletzt, $akt);



Servus Peter.

Kam erst heute dazu, deinen Vorschlag zu Testen.
Klappt super.
Habe es für meine Zwecke noch ein wenig angepasst.

Danke.

<?

 // Zeit berechnen, wie lange ein Gerät eingeschaltet war
 // und dann den Stromverbrauch berechnen
 // Geräte = "FS20" oder "HomeMatic Device"
 //
 // folgende Variablen je Gerät (Instanz) einrichten:
 // - Leistung           float    ~Watt.3680
 // - Stromverbrauch     float    ~Electricity   loggen als Zähler
 // - letzte Änderung   float
 // - Dauer                string

 $EreignisInfo = IPS_GetEvent($_IPS['EVENT']);
 $id_var = $EreignisInfo['TriggerVariableID'];
 $id_geraet = IPS_GetParent($id_var);
 $modul = IPS_GetInstance($id_geraet)['ModuleInfo']['ModuleName'];
 IF($modul == "FS20")
   $id_status = IPS_GetObjectIDByName("Status",$id_geraet);
 ELSE
     $id_status = IPS_GetObjectIDByName("STATE",$id_geraet);

 $id_zuletzt = IPS_GetObjectIDByName("letzte Änderung",$id_geraet);
 $id_kwh = IPS_GetObjectIDByName("Stromverbrauch",$id_geraet);
 $id_kw = IPS_GetObjectIDByName("Leistung",$id_geraet);
 $id_dauer = IPS_GetObjectIDByName("Dauer",$id_geraet);
 $kw = GetValueFloat($id_kw)/1000/3600;                     // Watt/1000=kw/3600=pro Sekunde

 $status = GetValueBoolean($id_status);
 $letzte = GetValueFloat($id_zuletzt);
 $var    = IPS_GetVariable($id_status);
 $akt        = $var['VariableUpdated'];

 IF ($status == false)     // Gerät wurde ausgeschaltet
   {
     $zeit   = $akt - $letzte;
     $verbrauch = $kw * $zeit + GetValueFloat($id_kwh);
     $dauerges = $zeit / 60 + GetValueString($id_dauer);
     SetValueFloat($id_kwh, $verbrauch);
     SetValueString($id_dauer, $dauerges);
    }

 SetValueFloat($id_zuletzt, $akt);

?>

Hallo Sascha,
freut mich, dass ich dir helfen konnte.
Überlege noch, ob ich die Einschaltzeit auch irgendwo brauchen kann.

Gruß, Peter