Stromverbrauch über die Laufzeit ermitteln?

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

Vorheriges Thema - Nächstes Thema

Mark

Hallo zusammen,

bei den Geräten, für die mir der Verbrauch bekannt ist (z.B. Lampen,
Umwälzpumpe, TV, etc.), würde ich gerne den täglichen Stromverbrauch
über die Laufzeit ermitteln und in eine Logdatei schreiben.

Hat hierzu schon jemand eine Lösung oder eine Idee wie man
dies umsetzen kann?

Danke

Gruß Mark

fritz

Idee ja:
Basislösung: UserAttribut "leistung_in_watt" definieren, on-Zeiten ermitteln, ausrechnen.
Komfortlösung: "leistung" irgendwie als Reading reinbekommen, so dass man den Verbrauch auch zeitabhängig einstellen kann, ... und dann auch wieder rechnen :-)

Lösung (Implementierung): nein - aber irgendwann geplant, weil elektrische Heizkörper ja ganz schön schlucken können :-)

Viele Grüße

<F>

Mark

Hi,

müsste so ähnlich sein wie bei average (98_average.pm).

Vielleicht findet sich ja bei Gelegenheit ein Speziallist,
der es auch gut findet und einen Ansatz hat.

Gruß Mark

fhainz

Hallo!

Ich hatte vorher eine XS1 und hatte mir selbst die Stromverbräuche aller Aktoren über PHP ausgerechnet. Leider bin ich bin PERL nicht so gut bewandert und schließ mich Mark's letzten Post direkt an ;)

Grüße

MisterEltako

Ich würde folgendes voschlagen:

In Fhem.cfg:

define Verbrauch dummy
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");;\
   if (Value("Schalter_fuer_Pumpe") eq "on" ) {\
       my $Startzeit = time();;\
       my $Endzeit = 0;;\
       Eintrag($Startzeit, $Endzeit);;\
   } elsif ( Value("Schalter_fuer_Pumpe") eq "off" ) {\
       my $Startzeit = ReadingsVal("Verbrauch", "Startzeit", "n.a.");;\
       my $Endzeit = time();;\
          Log 3, "$Endzeit minus $Startzeit";;\
       Eintrag($Startzeit, $Endzeit);;\
       my $Differenz = Zeitdifferenz($Startzeit, $Endzeit);;\
          Log 3, "Differenz: $Differenz";;\
       my $Ergebnis = Verbrauch($Differenz);;\
          Log 3, "Verbrauch: $Ergebnis";;\
   }\
}


In 99_Utils.pm:

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

my $difference = $time2 - $time1;
my $difference_in_hours = sprintf "%.2f",(($difference / 60) /60);
print "Laufzeit in Stunden: $difference_in_hours\n";

}

#================================================================
sub Eintrag($$)
{
my $Startzeit = shift;
my $Endzeit = shift;
readingsBeginUpdate($main::defs{Verbrauch});
    readingsBulkUpdate($main::defs{Verbrauch}, 'Startzeit', $Startzeit);
    readingsBulkUpdate($main::defs{Verbrauch}, 'Endzeit', $Endzeit);
readingsEndUpdate($main::defs{Verbrauch}, 1);
}
#================================================================

sub Verbrauch($) {

#in h/Tag
my $Dauer = shift;
$Dauer = $Dauer / 12;

# in kw/h
my $Watt = 0.5;

# in EUR/kWh
my $PreisproStunde = 0.21;

if ($Dauer eq "") {return "Error - keine Laufzeit eingegeben"};
my $Verbrauch = ($Watt * $Dauer * 365 * $PreisproStunde);

readingsBeginUpdate($main::defs{Verbrauch});
    readingsBulkUpdate($main::defs{Verbrauch}, 'Verbrauch im Jahr', $Verbrauch);
readingsEndUpdate($main::defs{Verbrauch}, 1);
fhem("set Verbrauch $Verbrauch");

return "$Verbrauch";
}
#==========================================================================


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

fhainz

Genau sowas hatte ich gesucht. Diese Variante würde jetzt aber nur für einen Aktor funktionieren oder?

MisterEltako

Das kann man anpassen wie man möchte. Was genau meinst hast du in deinem Fall vor?

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

fhainz

Ich würde gerne den Stromverbrauch von gewisse Aktoren mitloggen zB. Fernseher, Licht, usw. Am besten wäre natürlich wenn man direkt den Verbrauch als attribut angibt und einen FileLog erstellt. Daraus würd ich mir dann gerne den Verbrauch als Plot darstellen.
Das wäre das was mir im Kopf rumschwirrt ;)

Puschel74

Hallo,

ZitatFernseher, Licht, usw.

bedingt aber das jeder dieser Aktoren den Stromverbrauch auch loggt und an FHEM übermittelt.

Grüße

Edith: Alles anders ist nur schätzen - und das kann ich auch ;-)
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.

Markus

Aber wenn ich den verbrauch kenne kann fhem genauer schätzen als ich und zeigt mir auch noch ein Diagramm :-)

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

fhainz

Zitat von: Puschel74 schrieb am Mo, 17 Juni 2013 00:00Hallo,

ZitatFernseher, Licht, usw.

bedingt aber das jeder dieser Aktoren den Stromverbrauch auch loggt und an FHEM übermittelt.

Grüße

Edith: Alles anders ist nur schätzen - und das kann ich auch ;-)

Ich will nicht das mir der aktor alles mitloggt. Das wäre mir zu teuer. Deshalb über die laufzeit.  

MisterEltako

Dieser Code wäre meine Idee zum Einsatz mit verschiedenen Schalter/Aktoren.
Aufruf über Verbrauch(<Device>);
Eintrag des Verbrauches in den neuen Readings des <Device>, kann dann über ReadingsVal beliebig ausgelesen werden.

Achtung! Das ist zunächst der ungetestete Entwurf. Syntaxfehler sind noch möglich. Kann ich aber erst heute Abend prüfen!!!!!!


#In Fhem.cfg:

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);;\
}




#In 99_Utils.pm:

#==========================================================================
sub Verbrauch($)
{
my $Device = shift;

if (Value($Device) eq "on") {
   my $Startzeit = time();
   my $Endzeit = 0;
   my $LaufzeitStunden = 0;
   my $Verbrauch = 0;
}
elsif (Value($Device) eq "off") {
   my $Startzeit = ReadingsVal($Device, "Startzeit", "n.a.");
   my $Endzeit = time();
   my $LaufzeitStunden = Zeitdifferenz($Startzeit, $Endzeit);
   my $Verbrauch = Verbrauchberechnen($LaufzeitStunden);

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

Eintrag($Device, "Startzeit",$Startzeit);
Eintrag($Device, "Endzeit",$Endzeit);
Eintrag($Device, "Laufzeit in Stunden", $LaufzeitStunden);
Eintrag($Device, "Verbrauch", $Verbrauch);
}
#==========================================================================

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

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

#==========================================================================
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 $Laufzeit = shift;
$Laufzeit = $Dauer / 12;

# in kw/h
my $Watt = 0.5;

# in EUR/kWh
my $PreisproStunde = 0.21;

if ($Dauer eq "") {return "Error - keine Laufzeit ermittelt"};
my $Verbrauch = ($Watt * $Dauer * 365,25 * $PreisproStunde);

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

fhainz

Wow das sieht wirklich super aus!!
Gibts noch eine Möglichkeit jedem Aktor eine eigene Leistung zuzuweisen?

MisterEltako

Ok, das kann ich noch ändern. Im o.g. Code sind noch Fehler drin. Die habe ich heute beim ausprobieren korrigiert. Ich poste morgen den korrigierten und um Watt-Wahl ergänzten Code.
Heute ist es schon zu spät...

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

fhainz