Zwei Zeitstempel subtrahieren

Begonnen von Tuppertasse, 06 September 2013, 11:18:12

Vorheriges Thema - Nächstes Thema

Tuppertasse

Hallo,

ich möchte mir für bestimmte Komponenten, die ich mit Aktoren durch verschiedene Bedingungen schalte, mir die Laufzeit errechnen und daraus einen Verbrauch in kwH errechnen.
Die Ein- und Ausschaltzeit habe ich bereits bekommen, nur wird dies ja leider in eine Zahl umgewandelt, so daß der Delta auch einer Zahl entspricht; ich möchte aber die Zahl in Stunden und Minuten evtl dann auch in Jahren und Monaten angezeiogt bekommen damit ich den Verbrauch auch ausrechnen kann.
Momentan hab ich es:

Log_Zeit_1 = 1378457593.09869

Log_Zeit_2 = 1378456659.59764

Log_Zeit_Delta = 15.558350833257

betateilchen

sub dhms
{
my $s = shift;

my $d = int($s/86400);
$s -= $d*86400;
my $h = int($s/3600);
$s -= $h*3600;
my $m = int($s/60);
$s -= $m*60;

return ($d,$h,$m,$s);
}

printf "%d %02d:%02d:%02d\n",dhms(129600);
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

jody

Hallo Tuppertasse,

ich kann dir zwar nicht mit deinem Problem zur Subtraktion zweier Zeitstempel helfen, jedoch kann ich dir beim ermitteln der Leistungsaufnahme von Geräten helfen.

Ich habe mir selbst einen kleinen Stromzähler gebastelt.

Hier der Code:

define PcNotify notify Pc {\
  if("%" eq "present") {\
   $data{einschaltzeit} = time();;\
  } elsif("%" eq "absent") {\
   my $device = "Pc";;\
   my $watt = 57;;\
   \
   my $gesamtkosten = ReadingsVal("$device","Gesamtkosten[€]","on");;\
   my $gesamtverbrauch = ReadingsVal("$device","Gesamtverbrauch[kWh]","on");;\
   $data{dauer} = time()-$data{einschaltzeit};;\
   $data{letzte_Kosten} = sprintf ("%%.2f", (time()-$data{einschaltzeit})/3600*$watt/1000*0.24);;\
   $data{letzter_Verbrauch} = sprintf ("%%.2f", (time()-$data{einschaltzeit})/3600*$watt/1000);;\
   $data{Gesamtkosten} = $gesamtkosten + $data{letzte_Kosten};;\
   $data{Gesamtverbrauch} = $gesamtverbrauch + $data{letzter_Verbrauch};;\
   \
   readingsBeginUpdate($main::defs{$device});;\
   readingsBulkUpdate($main::defs{$device},"letzte_Kosten[€]","$data{letzte_Kosten}");;\
   readingsBulkUpdate($main::defs{$device},"Gesamtkosten[€]","$data{Gesamtkosten}");;\
   readingsBulkUpdate($main::defs{$device},"letzter_Verbrauch[kWh]","$data{letzter_Verbrauch}");;\
   readingsBulkUpdate($main::defs{$device},"Gesamtverbrauch[kWh]","$data{Gesamtverbrauch}");;\
   readingsEndUpdate($main::defs{$device},1);;\
  }\
 }
 
define Pc_log FileLog ./log/Pc-%Y-%m.log Pc


Wenn du hilfe brauchst wie mein Stromzähler zu verwenden ist, melde dich einfach nochmal.


(siehe Anhang / see attachement)


Cubietruck
CUL SlowRF
CUL Homematic
ZWave

Tuppertasse

Guten Morgen,

vielen dank für den Tip.
Zusammen mit einem Kollegen haben wir nun was ähnliches aufgebaut, wie du es gemacht hast.
Nach langem suchen sind wir über die Funktion time_str2num gestolpert und haben diese mitgenutzt; insgesamt sieht es nun so aus und funktioniert soweit auch gut - ich bin dabei über den notify on/off des Aktors gegangen:

# Ventilator_Switch Notify.on
define Ventilator_Switch_On notify Ventilator_Switch:on.* {\
  {fhem "set Ventilator_Switch_State on";;}\
  my $Zeit1 = (ReadingsTimestamp("Ventilator_Switch","state",""));;\
  {fhem "set Log_Zeit_1 $Zeit1";;}\
}

# Ventilator_Switch Notify.off
define Ventilator_Switch_Off notify Ventilator_Switch:off.* {\
  if ((Value("Ventilator_Switch_State") eq "on")){\
    {fhem "set Ventilator_Switch_State off";;}\
    my $delta = 0;;\
    my $Zeit1 = (ReadingsVal("Log_Zeit_1","state",""));;\
    my $Zeit2 = (ReadingsTimestamp("Ventilator_Switch","state",""));;\
    {fhem "set Log_Zeit_2 $Zeit2";;}\
    my $delta = (time_str2num($Zeit2)-time_str2num($Zeit1));;\
    {fhem "set Log_Zeit_Delta $delta";;}\  
    my $total = (ReadingsVal("Log_Zeit_Total","state","")) + $delta;;\
    {fhem "set Log_Zeit_Total $total";;}\  
    my $money = (ReadingsVal("Log_Zeit_Total","state","")) / 3600 * 0.2 * 0.05;;\
    {fhem "set Log_Zeit_Betrag $money";;}\  
  }\
}

bugster_de

Hi,

hatte ein ähnliches Thema und deshalb sind bei mir in diesem Zusammenhang einige Funktionen entstanden.

siehe hier: Link