diff --git a/fhem/FHEM/73_ElectricityCalculator.pm b/fhem/FHEM/73_ElectricityCalculator.pm index 664926111..8847bf16c 100644 --- a/fhem/FHEM/73_ElectricityCalculator.pm +++ b/fhem/FHEM/73_ElectricityCalculator.pm @@ -195,7 +195,7 @@ sub ElectricityCalculator_DbLog_splitFn($$) Log3 $name, 5, $name. " : ElectricityCalculator_DbLog_splitFn - Power-Reading detected : " . $argument[0]; ### Get values being changed from hash - $reading = $argument[0]; + $reading = $argument[0]; $value = $argument[1]; $unit = $attr{$hash}{SiPrefixPower}; } @@ -253,12 +253,12 @@ sub ElectricityCalculator_Get($@) if ( $reading ne "?") { - ### Create Log entries for debugging - Log3 $ElectricityCalcName, 5, $ElectricityCalcName. " : ElectricityCalculator - get " . $reading . " with value: " . $value; - ### Write current value $value = ReadingsVal($ElectricityCalcName, $reading, undef); + ### Create Log entries for debugging + Log3 $ElectricityCalcName, 5, $ElectricityCalcName. " : ElectricityCalculator - get " . $reading . " with value: " . $value; + ### Create ReturnMessage $ReturnMessage = $value; } @@ -502,8 +502,8 @@ sub ElectricityCalculator_Notify($$) } ### Restore previous Counter and if not available define it with "undef" - my $ElectricityCountReadingTimestampPrevious = ReadingsTimestamp($ElectricityCalcReadingDestinationDeviceName, $ElectricityCalcReadingPrefix . "_PrevRead", undef); - my $ElectricityCountReadingValuePrevious = ReadingsVal($ElectricityCalcReadingDestinationDeviceName, $ElectricityCalcReadingPrefix . "_PrevRead", undef); + my $ElectricityCountReadingTimestampPrevious = ReadingsTimestamp($ElectricityCalcReadingDestinationDeviceName, "." . $ElectricityCalcReadingPrefix . "_PrevRead", undef); + my $ElectricityCountReadingValuePrevious = ReadingsVal($ElectricityCalcReadingDestinationDeviceName, "." . $ElectricityCalcReadingPrefix . "_PrevRead", undef); ### Create Log entries for debugging Log3 $ElectricityCalcName, 5, $ElectricityCalcName. " : ElectricityCalculator - ElectricityCountReadingValuePrevious : " . $ElectricityCountReadingValuePrevious; @@ -513,7 +513,7 @@ sub ElectricityCalculator_Notify($$) if(defined($ElectricityCountReadingValuePrevious)) { ### Write current electric Energy as previous Electric Energy for future use in the ElectricityCalc-Device - readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix. "_PrevRead", sprintf('%.3f', ($ElectricityCountReadingValueCurrent)),1); + readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, "." . $ElectricityCalcReadingPrefix. "_PrevRead", sprintf('%.3f', ($ElectricityCountReadingValueCurrent)),1); ### Create Log entries for debugging Log3 $ElectricityCalcName, 5, $ElectricityCalcName. " : ElectricityCalculator - Previous value found. Continuing with calculations"; @@ -522,7 +522,7 @@ sub ElectricityCalculator_Notify($$) else { ### Write current electric Energy as previous Voulume for future use in the ElectricityCalc-Device - readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix. "_PrevRead", sprintf('%.3f', ($ElectricityCountReadingValueCurrent)),1); + readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, "." . $ElectricityCalcReadingPrefix. "_PrevRead", sprintf('%.3f', ($ElectricityCountReadingValueCurrent)),1); ### Create Log entries for debugging Log3 $ElectricityCalcName, 5, $ElectricityCalcName. " : ElectricityCalculator - Previous value NOT found. Skipping Loop"; @@ -536,12 +536,12 @@ sub ElectricityCalculator_Notify($$) if(!defined(ReadingsVal($ElectricityCalcReadingDestinationDeviceName, $ElectricityCalcReadingPrefix . "_CounterDay1st", undef))) { ### Save current electric Energy as first reading of day = first after midnight and reset min, max value, value counter and value sum - readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_CounterDay1st", $ElectricityCountReadingValueCurrent, 1); - readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_CounterDayLast", $ElectricityCountReadingValuePrevious, 1); - readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_PowerDaySum", 0, 1); - readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_PowerDayCount", 0, 1); - readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_PowerDayMin", 0, 1); - readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_PowerDayMax", 0, 1); + readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_CounterDay1st", $ElectricityCountReadingValueCurrent, 1); + readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_CounterDayLast", $ElectricityCountReadingValuePrevious, 1); + readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, "." . $ElectricityCalcReadingPrefix . "_PowerDaySum", 0, 1); + readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, "." . $ElectricityCalcReadingPrefix . "_PowerDayCount", 0, 1); + readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_PowerDayMin", 0, 1); + readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_PowerDayMax", 0, 1); ### Create Log entries for debugging Log3 $ElectricityCalcName, 3, $ElectricityCalcName. " : ElectricityCalculator - Reading for the first daily value was not available and therfore reading and statistics have been written"; @@ -688,8 +688,8 @@ sub ElectricityCalculator_Notify($$) my $ElectricityCalcPowerCurrent = ($ElectricityCountReadingValueDelta / $ElectricityCountReadingTimestampDelta) * 3600 * 1000 * $ElectricityCalcDev->{system}{SiPrefixPowerFactor}; ### Calculate daily sum of power measurements "SP" and measurement counts "n" and then calculate average Power "Paverage = SP/n" - my $ElectricityCalcPowerDaySum = ReadingsVal($ElectricityCalcReadingDestinationDeviceName, $ElectricityCalcReadingPrefix . "_PowerDaySum", "0") + $ElectricityCalcPowerCurrent; - my $ElectricityCalcPowerDayCount = ReadingsVal($ElectricityCalcReadingDestinationDeviceName, $ElectricityCalcReadingPrefix . "_PowerDayCount", "0") + 1; + my $ElectricityCalcPowerDaySum = ReadingsVal($ElectricityCalcReadingDestinationDeviceName, "." . $ElectricityCalcReadingPrefix . "_PowerDaySum", "0") + $ElectricityCalcPowerCurrent; + my $ElectricityCalcPowerDayCount = ReadingsVal($ElectricityCalcReadingDestinationDeviceName, "." . $ElectricityCalcReadingPrefix . "_PowerDayCount", "0") + 1; my $ElectricityCalcPowerDayAverage = $ElectricityCalcPowerDaySum / $ElectricityCalcPowerDayCount; ### Calculate consumed Energy of current day W = (Wcurrent[kWh] - W1stReadDay[kWh]) @@ -748,19 +748,16 @@ sub ElectricityCalculator_Notify($$) Log3 $ElectricityCalcName, 5, $ElectricityCalcName. " : ElectricityCalculator - ElectricityCalcPowerDayMin : " . ReadingsVal( $ElectricityCalcReadingDestinationDeviceName, $ElectricityCalcReadingPrefix . "_PowerDayMin", 0) . " kW"; Log3 $ElectricityCalcName, 5, $ElectricityCalcName. " : ElectricityCalculator - ElectricityCalcPowerDayAverage : " . sprintf('%.3f', ($ElectricityCalcPowerDayAverage)) . " kW"; Log3 $ElectricityCalcName, 5, $ElectricityCalcName. " : ElectricityCalculator - ElectricityCalcPowerDayMax : " . ReadingsVal( $ElectricityCalcReadingDestinationDeviceName, $ElectricityCalcReadingPrefix . "_PowerDayMax", 0) . " kW"; - + ###### Write readings to ElectricityCalc device ### Initialize Bulkupdate readingsBeginUpdate($ElectricityCalcReadingDestinationDevice); - ### Write current mechanic meter reading - readingsBulkUpdate($ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_Meter", sprintf('%.3f', ($ElectricityCountReadingValueCurrent))); - ### Write consumed electric Energy (DV) since last measurement - readingsBulkUpdate($ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_LastDV", sprintf('%.3f', ($ElectricityCountReadingValueDelta))); + readingsBulkUpdate($ElectricityCalcReadingDestinationDevice, "." . $ElectricityCalcReadingPrefix . "_LastDV", sprintf('%.3f', ($ElectricityCountReadingValueDelta))); ### Write timelap (Dt) since last measurement - readingsBulkUpdate($ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_LastDt", sprintf('%.0f', ($ElectricityCountReadingTimestampDelta))); + readingsBulkUpdate($ElectricityCalcReadingDestinationDevice, "." . $ElectricityCalcReadingPrefix . "_LastDt", sprintf('%.0f', ($ElectricityCountReadingTimestampDelta))); ### Write current Power = average Power over last measurement period readingsBulkUpdate($ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_PowerCurrent", sprintf('%.3f', ($ElectricityCalcPowerCurrent))); @@ -769,10 +766,10 @@ sub ElectricityCalculator_Notify($$) readingsBulkUpdate($ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_PowerDayAver", sprintf('%.3f', ($ElectricityCalcPowerDayAverage))); ### Write Power measurement sum since midnight for average calculation - readingsBulkUpdate($ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_PowerDaySum", sprintf('%.3f', ($ElectricityCalcPowerDaySum))); + readingsBulkUpdate($ElectricityCalcReadingDestinationDevice, "." . $ElectricityCalcReadingPrefix . "_PowerDaySum", sprintf('%.3f', ($ElectricityCalcPowerDaySum))); ### Write Power measurement counts since midnight for average calculation - readingsBulkUpdate($ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_PowerDayCount", sprintf('%.0f', ($ElectricityCalcPowerDayCount))); + readingsBulkUpdate($ElectricityCalcReadingDestinationDevice, "." . $ElectricityCalcReadingPrefix . "_PowerDayCount", sprintf('%.0f', ($ElectricityCalcPowerDayCount))); ### Detect new daily minimum power value and write to reading if (ReadingsVal($ElectricityCalcReadingDestinationDeviceName, $ElectricityCalcReadingPrefix . "_PowerDayMin", 0) > $ElectricityCalcPowerCurrent) @@ -1350,28 +1347,6 @@ sub ElectricityCalculator_Notify($$) -
| - | |
<DestinationDevice>_<SourceCounterReading>_LastDV : | Difference of chosen electric energy between current and previous reading (ΔV). - |
| - | |
<DestinationDevice>_<SourceCounterReading>_LastDt : | Difference of time in seconds between current and previous reading (Δt). - |
| - | |
<DestinationDevice>_<SourceCounterReading>_PowerDayCount : | Number of Power measurements since midnight. (Required for average calculations) - |
| - | |
<DestinationDevice>_<SourceCounterReading>_PowerDaySum : | Sum of Power measurements since midnight. (Required for average calculations) - |
| - | |
<DestinationDevice>_<SourceCounterReading>_PrevRead : | Reading of previous electric energy measurement. (Required for ΔV and Δt calculation) - |
| - | |
<DestinationDevice>_<SourceCounterReading>_LastDV : | Energienunterschied in kWh zwischen den augenblicklichen und vorherigen Messwert (ΔW). - |
| - | |
<DestinationDevice>_<SourceCounterReading>_LastDt : | Zeitunterschied in Sekunden zwischen den augenblicklichen und vorherigen Messwert (Δt). - |
| - | |
<DestinationDevice>_<SourceCounterReading>_PowerDayCount : | Anzahl der Leistungsmessungen seit Mittenacht. (Wird für Errechnung des täglichen Mittelwert benötigt) - |
| - | |
<DestinationDevice>_<SourceCounterReading>_PowerDaySum : | Summe aller Leistungsmessungen seit Mitternacht. (Wird für Errechnung des täglichen Mittelwert benötigt) - |
| - | |
<DestinationDevice>_<SourceCounterReading>_PrevRead : | Reading der vorherigen Messung (Wird für die Berechnung des ΔW und Δt benötigt) - |