Abruf und Berechnung von geloggten Daten aus der Datenbank

Hallo Zusammen,

ich möchte gerne eine detailierte, aber nicht auf den Cent genaue Übersicht der Stromkosten haben.

Viele meiner Verbraucher sind in IPS schaltbar und zustandsüberwacht.
Da der Stromverbrauch z.B. der Beleuchtung relativ konstant ist, würde es mir reichen, einen Wert für ein Leuchtmittel vorzugeben und mir aus diesem Wert und der Einschaltdauer über einen bestimmten Zeitpunkt den Stromverbrauch errechnen zu lassen.

Leider sind alle Scripte, die ich gefunden habe bezogen auf Stromzähler, wo nur ein Wert vom anderen abgezogen wird.
Da meine Variablen ja keine Zähler sind, nützt mir das nichts.

Ich habe gelesen, dass dies schon von Hause aus mit IPS Light und IPS Power Control gehen soll.
Daher habe ich beides installiert und probiert, komme hier aber nicht weiter, da ich nichts gefunden habe, wo ich ansetzten könnte.

Hat dies jemand realisiert ?

Vielen herzlichen Dank im Voraus

bastelfrosch

Hi,

ich habe das für FS20 und HM so gelöst, dass ich je Instanz drei Variable (siehe Script) angelegt habe und das Script über Veränderung der Status-Variablen trigger.

// 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);

gruß, Peter

Hallo pitty,

herzlichen Dank für Deine Antwort.
Verstehe ich Dein Script richtig, dass Du nicht auf die bereits geloggten Daten zugreifst, sondern diese mit den entsprechenden Variablen zusätzlich erstellst?

Ich war der Meinung, dass eigentlich alle nötigen Informationen bereits in der Datenbank vorliegen würden.
Also vom logischen Ablauf her :
1, Daten lesen, Zeitspanne festlegen
2. Ermitteln wie lange in der Zeitspanne das Gerät eingeschaltet war
3. ermittelte Zeitdauer in Std x Leistung des Gerätes

Also praktisch aus einem Standard-Logging eine Zähler mit Zeitbereich machen und dann auswerten.
Ich hoffe ich habe mich verständlich ausgedrückt.

Liebe Grüße
bastelfrosch

Hallo Bastelfrosch,

ja das hast du richtig verstanden.
Wenn ein Gerät eingeschaltet wird, merke ich mir den Zeitstempel (Var. „letzte Änderung“) und subtrahiere ihn mit dem Zeitstempel beim ausschalten. Mit der nun errechneten Einschaltzeit errechne ich den Verbrauch und addiere diesen auf den Gesamtverbrauch. Der Gesamtverbrauch wird geloggt als Zähler und man kann nun den Verbrauch nach den Zeitkriterien als Grafik anzeigen. Man könnte zusätzlich den Verbrauch noch mit dem Strompreis multiplizieren.

Für meine Ansprüche genügen die Ergebnisse und das Script ist nicht zu kompliziert.
Weiterhin wird das Ergebnis immer beim Ausschalten des Geräts aktualisiert.

Das Auslesen der geloggten Daten geht sicherlich auch, ist aber sicherlich schwerer zu realisieren.

Gruß, Peter

Hat denn niemand einen Ansatz für mich, wie ich die ohnehin vorhandenen Daten sinnvoll für so eine Anwendung nutzen kann ?
Ist diese Frage so ungewöhnlich, dass nicht schon mehrere Leute so etwas umgesetzt haben ?

Dieser Punkt reizt mich auch schon die längste Zeit. Ich logge zum Beispiel mit, wann der Störkontakt meiner Entkalkungsanlage ausgelassen hat, weil ich dann Salz wechseln muß. Wie frage ich aus der Datenbank aber nun ab wann dies das letzte Mal geschehen ist (einfache Bollean Variable)? Möchte mir dann berechnen, wie lange ich mit so einer Salzfüllung auskomme…