Stromverbrauch über die Laufzeit ermitteln?

Begonnen von Mark, 10 Juni 2013, 15:04:44

Vorheriges Thema - Nächstes Thema

MisterEltako

#in Fhem.cfg
#Verbrauch(<Einschaltdevice>,<KWatt des Verbrauchers>)
#Verbrauch in EUR/Jahr wird in den Readings des <Einschaltdevice> angezeigt!!!!

#========================================
define Schalter_fuer_Pumpe dummy
attr Schalter_fuer_Pumpe webCmd on:off
define n_Pumpe notify Schalter_fuer_Pumpe {\
  Log 3, "Schalter ".Value("Schalter_fuer_Pumpe");;\
  Verbrauch($NAME, 0.5);;\
}
#========================================


#in 99_Utils.pm
#==========================================================================
sub Verbrauch($$)
{
my $Device = shift;
my $kWatt = shift;
my $Startzeit = "";
my $Endzeit = 0;
my $LaufzeitStunden = 0;
my $Verbrauch = 0;

if (Value($Device) eq "on") {
    $Startzeit = time();
}
elsif (Value($Device) eq "off") {
    $Startzeit = ReadingsVal($Device, "Startzeit", "n.a.");
    $Endzeit = time();
    $LaufzeitStunden = Zeitdifferenz($Startzeit, $Endzeit);
    Log 3, "Laufzeit: $LaufzeitStunden";
    $Verbrauch = sprintf "%.2f", (Verbrauchberechnen($LaufzeitStunden, $kWatt));

}else {return "Fehler - keine Start-Endzeit ermittelt";}

Eintrag($Device, "Startzeit", $Startzeit);
Eintrag($Device, "Endzeit", $Endzeit);
Eintrag($Device, "Laufzeit_in_Stunden", $LaufzeitStunden);
Eintrag($Device, "Verbrauch_in_EUR_pro_Jahr", $Verbrauch);
}
#==========================================================================

sub Zeitdifferenz($$){
my $time1 = shift;
my $time2 = shift;

my $difference = $time2 - $time1;
my $difference_in_hours = sprintf "%.2f",(($difference / 60) /60);
Log 3, "Laufzeit in Stunden: $difference_in_hours";
return $difference_in_hours;
}

#==========================================================================
sub Verbrauchberechnen($$)
{
#Stundenverbrauch (KWatt) x Nutzungstunden pro Tag x 365,25 x KWh-Preis
# 500Watt x Laufzeit/Tag x 365.25 x 0,21
#in h/Tag

my $Dauer = shift;
my $kWatt = shift;
my $Laufzeit = sprintf "%.2f",($Dauer / 12);

# in EUR/kWh
my $PreisproStunde = 0.21;

my $Verbrauch = ($kWatt * $Laufzeit * 365.25 * $PreisproStunde);
Log 3, "$kWatt mal $Laufzeit mal 365,25 mal $PreisproStunde ist $Verbrauch";
return "$Verbrauch";
}
#==========================================================================

sub Eintrag($$$)
{
my $Device = shift;
my $ReadingsName = shift;
my $ReadingsWert = shift;
readingsBeginUpdate($main::defs{$Device});
    readingsBulkUpdate($main::defs{$Device}, $ReadingsName, $ReadingsWert);
    readingsBulkUpdate($main::defs{$Device}, $ReadingsName, $ReadingsWert);
readingsEndUpdate($main::defs{$Device}, 1);
}

#=========================================================================


MfG, MisterEltako
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

Markus

Schaut gut aus und dein Beispiel Funktioniert!
aber wie baue ich es jetzt am besten in meine Aktoren ein?
Ich kann ja nicht für alles einen dummy anlegen :-(

Gruß Markus
Raspberry Pi2 als FHEM-Plattform
HM, FS20, 1-Wire, PanStamp,LW12,Intertechno,ESPEasy,Alexa

Puschel74

Hallo,

dann bau dir doch das

Zitatdefine Schalter_fuer_Pumpe dummy
attr Schalter_fuer_Pumpe webCmd on:off
define n_Pumpe notify Schalter_fuer_Pumpe {\
  Log 3, "Schalter ".Value("Schalter_fuer_Pumpe");;\
  Verbrauch($NAME, 0.5);;\
}

für deine Aktoren um.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

fhainz

Danke Danke!!!! Genau das brauch ich für mein Grundgerüst. Ich werde versuchen es noch zu erweitern und meinen Bedürfnissen anzupassen. Dann poste ich das fertige Script nochmal hier!
Nochmal vielen Dank für deine mühe!!

Mark