Neues Modul: ElectricityCalculator

Begonnen von Sailor, 26 August 2016, 21:05:35

Vorheriges Thema - Nächstes Thema

Sailor

Hallo boehm

Zitat von: boehm am 08 September 2016, 18:15:44
sehe ich weiterhin bei set und get die Readings vom ersten Zähler.

Ich habe dies als Fehler in all meinen von mir geschriebenen Modulen identifiziert.
Die get/set Liste ist Modul-Global.

Dass heißt in deinem Fall, sobald du mehrere Wärmezähler-Devices mit dem ElectricityCalculator-Modul anlegst, werden die set/get Listen nacheinander überschrieben und die vom Letzten im Alphabet (Powermeter) bleibt hängen.

Ich arbeite daran.

Gruß
    Sailor

******************************
Man wird immer besser...

BillyPbg

Guten Morgen SAILOR,

vorweg Vielen Dank für das tolle Modul.

Vielen Dank auch für die schnelle Reaktion auf mein Bug-Email bez. der 'Set'-/'Get'-Listen.

Auf Deine Umsetzung einer Zweizähler-Variante bin ich schon sehr gespannt.
Hätte da mehrere Einsatzmöglichkeiten: z.B. Solar, BHKW und Strombilanz...

Leider noch eine 'Warning'-Meldung, die bereits seit dem letzten Update ( Stand: jetzt) beim Restart im LogFile verzeichnet wird (3x S0-Zähler):

2016.09.14 09:03:11.098 1: PERL WARNING: Use of uninitialized value in string eq at ./FHEM/73_ElectricityCalculator.pm line 101, <$fh> line 370.
2016.09.14 09:03:11.098 1: PERL WARNING: Use of uninitialized value in string eq at ./FHEM/73_ElectricityCalculator.pm line 102, <$fh> line 370.
2016.09.14 09:03:11.098 1: PERL WARNING: Use of uninitialized value in string eq at ./FHEM/73_ElectricityCalculator.pm line 103, <$fh> line 370.
2016.09.14 09:03:11.099 1: PERL WARNING: Use of uninitialized value in string eq at ./FHEM/73_ElectricityCalculator.pm line 104, <$fh> line 370.
2016.09.14 09:03:11.119 1: PERL WARNING: Use of uninitialized value in string eq at ./FHEM/73_ElectricityCalculator.pm line 101, <$fh> line 410.
2016.09.14 09:03:11.119 1: PERL WARNING: Use of uninitialized value in string eq at ./FHEM/73_ElectricityCalculator.pm line 102, <$fh> line 410.
2016.09.14 09:03:11.119 1: PERL WARNING: Use of uninitialized value in string eq at ./FHEM/73_ElectricityCalculator.pm line 103, <$fh> line 410.
2016.09.14 09:03:11.120 1: PERL WARNING: Use of uninitialized value in string eq at ./FHEM/73_ElectricityCalculator.pm line 104, <$fh> line 410.
2016.09.14 09:03:11.130 1: PERL WARNING: Use of uninitialized value in string eq at ./FHEM/73_ElectricityCalculator.pm line 101, <$fh> line 433.
2016.09.14 09:03:11.131 1: PERL WARNING: Use of uninitialized value in string eq at ./FHEM/73_ElectricityCalculator.pm line 102, <$fh> line 433.
2016.09.14 09:03:11.131 1: PERL WARNING: Use of uninitialized value in string eq at ./FHEM/73_ElectricityCalculator.pm line 103, <$fh> line 433.
2016.09.14 09:03:11.131 1: PERL WARNING: Use of uninitialized value in string eq at ./FHEM/73_ElectricityCalculator.pm line 104, <$fh> line 433.

Mit freundlichen Grüßen aus BAYERN
BillyPbg

.

Sailor

Moin zusammen

Ich meine das Problem mit verschiedenen get/set Listen geloest zu haben.

Bitte morgen mal ein Update machen und berichten.

Danke!

Gruss
    Sailor
******************************
Man wird immer besser...

BillyPbg

Guten Morgen SAILOR,

erste 'Wasserstandsmeldung'....

2016.09.15 08:12:38.308 1: PERL WARNING: defined(%hash) is deprecated at ./FHEM/73_ElectricityCalculator.pm line 250, <$fh> line 370.
2016.09.15 08:12:38.308 1: PERL WARNING: (Maybe you should just omit the defined()?)
2016.09.15 08:12:38.310 1: PERL WARNING: defined(%hash) is deprecated at ./FHEM/73_ElectricityCalculator.pm line 291, <$fh> line 370.
(...nach Restart)

Im CounterDevice keine zusätzlichen Listeneinträge (keinerlei Änderung zur Norm).
Im CalculatorDevice - trotz Destination "CounterDevice" - Listeneinträge, die bei 'Set' Einträge NUR im CounterDevice modifizieren.

Mit freundlichen Grüßen aus Bayern
BillyPbg

BillyPbg

...zusätzliche Ergänzung nach Neuanlage ( Destination-Wechsel: 'CalculatorDevice' zu 'CounterDevice'):

2016.09.15 08:27:11.072 1: PERL WARNING: Use of uninitialized value $ElectricityCountReadingValuePrevious in concatenation (.) or string at ./FHEM/73_ElectricityCalculator.pm line 514.
2016.09.15 08:27:36.346 3: ECALC_BHKW : ElectricityCalculator - Reading for the first daily value was not available and therfore reading and statistics have been written
2016.09.15 08:27:36.359 3: ECALC_BHKW : ElectricityCalculator - Reading for the first monthly value was not available and therfore reading has been written
2016.09.15 08:27:36.371 3: ECALC_BHKW : ElectricityCalculator - Reading for the first value of Electricity meter year was not available and therfore reading has been written
2016.09.15 08:27:36.383 3: ECALC_BHKW : ElectricityCalculator - Reading for the first yearly value was not available and therfore reading has been written

VG BillyPbg

BillyPbg

Sorry, Korrektur von #48:
...
Im CalculatorDevice - trotz Destination "CounterDevice" - Listeneinträge, die bei 'Set' Einträge NUR im
Calculator
Device modifizieren.

raspklaus

Kann ich das Modul auch mit einem OWL Energiemesser verwenden ?

Hier das List:

Internals:
   DEF        /dev/ttyUSB0
   DeviceName /dev/ttyUSB0
   FD         14
   MODE       live data
   NAME       CM160
   NR         90
   PARTIAL
   PORTSTATE  open
   STATE      A: 5.32 A, W: 101.08 W, C: 0.0303 €/h, CO2: 0.0596 kg/h
   TYPE       CM160
   Readings:
     2016-09-17 11:38:39   A               5.32 A
     2016-09-17 11:38:39   C               0.0303 €/h
     2016-09-17 11:38:39   CO2             0.0596 kg/h
     2016-09-17 11:38:39   W               101.08 W
     2016-09-17 11:38:39   cumDay          1.0943 kWh
     2016-09-17 11:38:39   cumHour         0.1080 kWh
     2016-09-17 11:38:39   cumMonth        36.8607 kWh
     2016-09-17 11:38:39   cumYear         420.8087 kWh
     2016-09-17 11:38:39   state           A: 5.32 A, W: 101.08 W, C: 0.0303 €/h, CO2: 0.0596 kg/h
Attributes:
   alias      OWL Energiemesser
   co2Factor  0.59
   costPerKwh 0.30
   currency   €
   loglevel   6
   room       Energie,Haus
   verbose    0
   voltage    19

Sailor

Zitat von: raspklaus am 17 September 2016, 11:39:20
Kann ich das Modul auch mit einem OWL Energiemesser verwenden ?

Welches Reading liefert den aktuellen Zählerstand?

Gruß
   Sailor
******************************
Man wird immer besser...

raspklaus

Müsste eigentlich cumYear sein, denn das sind die Summen.

Wie müsste ich dann die Definition anlegen ?

tupol

Berücksichtigt das Modul auch Doppeltarifzähler? Also verschiedene Preise in Abhängigkeit von der Zeit?


Sailor

Hallo Billy

Zitat von: BillyPbg am 16 September 2016, 08:09:56
Im CalculatorDevice - trotz Destination "CounterDevice" - Listeneinträge, die bei 'Set' Einträge NUR im
Calculator
Device modifizieren.

Das ist korrekt. Ich kann im Set eines Devices nur die Readings des eigenen Devices ändern.

Die Werte des Counter-Device kannst Du nur Counter Device ändern.
Unter Umständen auch nur manuell.

Gruss
    Sailor
******************************
Man wird immer besser...

Sailor

#57
Hallo Klaus

Zitat von: raspklaus am 18 September 2016, 09:47:34
Müsste eigentlich cumYear sein, denn das sind die Summen.

Also ich habe mir mal den Code des Moduls angeschaut und kriege das P in den Augen!  :o

a) Da werden Begriffe verwendet (Cumulated Data) die absolut nicht zu der folgenden Berechnung passt. Wir wollen schließlich keinen Kumulierter Energieaufwand oder Kumulierter Energieverbrauch oder Wählerstimmen berechnen: Kumulieren sondern die elektrische Gesamtenergieumsetzung (Volksmund: Energieverbrauch) ermitteln.

b) Im Modul ist keine CommandRef enthalten, sondern diese existiert nur in einer extra - Datei http://www.meintechblog.de/wordpress/wp-content/uploads/2013/10/CM160.zip

c) In der externen CommandRef - Datei werden die Readings nicht beschrieben.

d) Wieso wird die Leistung P mit kWh und die Arbeit W mit W angegeben? Wieso werden die Kosten in EUR gefixt wenn ich im Attribut doch ein anderes Währungszeichen einsetzen kann?
$hash->{READINGS}{$cumKey}{VAL} = 'W: 0 W, P: 0.00 kWh, C: 0.00 EUR, CO2: 0.00 kg'

e) Das Gerät liefert nur den gemessenen Strom in Ampere. Die Spannung wird per Attribut gefixt ist aber im realen Leben nicht konstant sondern schwankt im Laufe des Tages etwa um den Wert +/-10% (Basierend auf 400V). Daher muss immer zeitgleich eine Doppelmessung von Strom und Spannung erfolgen.

f) Darüber hinaus  ist die Berechnung
my $va = $voltage * $amps;
mitnichten korrekt, da hier die Scheinleistung ermittelt wird und nicht den cos(φ) (Leistungsfaktor) in die Berechnung mit einbezieht um die benötigte Wirkleistung zu ermitteln.

g) Die berechneten Kosten sind mitnichten auf die umgesetzte Arbeit bezogen da sie bei der Berechnung nirgendwo den Zeitraum der Berechnung mit einbeziehen:
'C' => sprintf('%.4f %s/h', (($va > 0) ? ($costPerKwh / (1000/$va)) : 0), $currency)
Wie in der Formel zu erkennen ist, wird die augenblickliche Scheinleistung (Das alleine ist schon absoluter Blödsinn) mit den Kosten pro Arbeit multipliziert.
Bei der Formel kommt demnach € pro Stunde [€/h] heraus und nicht €.


Abschließend kann ich nur sagen, dass das Modul grobe, gar nachlässige Fehler enthält und inständig hoffe, dass es in der derzeitigen Form nicht seinen Weg ins offizielle Repository findet.

ACHTUNG Ich kann mir kein Urteil daüber erlauben, ob die Hardware an sich überhaupt in der Lage ist eine entsprechend richtige Messung durchzuführen, da ich mir die Details des Gerätes nicht angeschaut habe. Es geht mir hier nur um das fhem-Modul!

Da laut Code auch keine fortlaufende Messung der umgesetzten (verbrauchten) Energie möglich ist, ist es mit meinem Modul GasCalculator nicht zu verwenden.

Gruß
    Sailor
******************************
Man wird immer besser...

raspklaus

Das ist ja das Problem. Das Modul wurde irgendwann mal entwickelt und nicht mehr gepflegt obwohl die dafür benutzte Hardware eigentlich für den Preis genial ist.

Das Modul setzt anscheinend auf die mit dem OWL erhältliche Auswertungssoftware auf bei der die Parameter auch gesetzt werden können:

# OWL Energiemesser
define CM160 CM160 /dev/ttyUSB0
attr CM160 alias OWL Energiemesser
attr CM160 co2Factor 0.59
attr CM160 costPerKwh 0.30
attr CM160 currency €
attr CM160 loglevel 6
attr CM160 room Energie,Haus
attr CM160 verbose 0
attr CM160 voltage 19


Irgendwo hatte ich dann mal noch etwas für die Auswertung gefunden damit der aktuelle Verbrauch grafisch dargestellt werden kann:

# Aktueller Verbrauch
define AktuellerVerbrauch dummy
attr AktuellerVerbrauch event-on-change-reading state
attr AktuellerVerbrauch room Energie
define WattUsageAnDummy at +*00:00:05 { my $d= ReadingsVal("CM160","W",0);; fhem("set AktuellerVerbrauch $d")}
define FileLog_AktuellerVerbrauch FileLog ./log/AktuellerVerbrauch-%Y-%m.log AktuellerVerbrauch
attr FileLog_AktuellerVerbrauch logtype text
attr FileLog_AktuellerVerbrauch nrarchive 0
attr FileLog_AktuellerVerbrauch room Logs
define SVG_FileLog_AktuellerVerbrauch_1 SVG FileLog_AktuellerVerbrauch:SVG_FileLog_AktuellerVerbrauch_1:CURRENT
attr SVG_FileLog_AktuellerVerbrauch_1 room Energie



Sailor

Hallo Klaus

Zitat von: raspklaus am 19 September 2016, 10:25:50
Das ist ja das Problem. Das Modul wurde irgendwann mal entwickelt und nicht mehr gepflegt obwohl die dafür benutzte Hardware eigentlich für den Preis genial ist.

Da hilft nur eins: Hardware-Spezifikationen raussuchen und Modul neu schreiben.

Gruß
    Sailor
******************************
Man wird immer besser...