From 4a0aa274361bdd8241fb99e5352c3248aa090959 Mon Sep 17 00:00:00 2001 From: Sailor <> Date: Tue, 20 Dec 2016 08:55:35 +0000 Subject: [PATCH] 73_ElectricityCalculator: bugfix: Corrected month of annual reading git-svn-id: https://svn.fhem.de/fhem/trunk@12845 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/73_ElectricityCalculator.pm | 54 +++++++++++++++++++++------ 1 file changed, 42 insertions(+), 12 deletions(-) diff --git a/fhem/FHEM/73_ElectricityCalculator.pm b/fhem/FHEM/73_ElectricityCalculator.pm index acfbf56ab..00b920002 100644 --- a/fhem/FHEM/73_ElectricityCalculator.pm +++ b/fhem/FHEM/73_ElectricityCalculator.pm @@ -590,6 +590,9 @@ sub ElectricityCalculator_Notify($$) my $ElectricityCountReadingTimestampCurrentRelative = time_str2num($ElectricityCountReadingTimestampCurrent); my($ElectricityCountReadingTimestampCurrentSec,$ElectricityCountReadingTimestampCurrentMin,$ElectricityCountReadingTimestampCurrentHour,$ElectricityCountReadingTimestampCurrentMday,$ElectricityCountReadingTimestampCurrentMon,$ElectricityCountReadingTimestampCurrentYear,$ElectricityCountReadingTimestampCurrentWday,$ElectricityCountReadingTimestampCurrentYday,$ElectricityCountReadingTimestampCurrentIsdst) = localtime($ElectricityCountReadingTimestampCurrentRelative); + ### Correct current month by one month since Unix/Linux start January with 0 instead of 1 + $ElectricityCountReadingTimestampCurrentMon = $ElectricityCountReadingTimestampCurrentMon + 1; + ### Create Log entries for debugging Log3 $ElectricityCalcName, 5, $ElectricityCalcName. " : ElectricityCalculator - Reading Name : " . $ElectricityCountReadingName; Log3 $ElectricityCalcName, 5, $ElectricityCalcName. " : ElectricityCalculator - Previous Reading Value : " . $ElectricityCountReadingTimestampPrevious; @@ -612,14 +615,15 @@ sub ElectricityCalculator_Notify($$) my $ElectricityCalcPowerCurrent = ReadingsVal($ElectricityCalcReadingDestinationDeviceName, $ElectricityCalcReadingPrefix . "_PowerCurrent", "0"); ### Save Electricity pure cost of previous day, current electric Energy as first reading of day = first after midnight and reset min, max value, value counter and value sum - readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_EnergyCostDayLast", (sprintf('%.3f', ($ElectricityCalcEnergyCostDayLast ))), 1); - readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_EnergyDayLast", (sprintf('%.3f', ($ElectricityCalcEnergyDayLast ))), 1); - readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_PowerDaySum", 0 , 1); - readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_PowerDayCount", 0 , 1); - readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_PowerDayMin", (sprintf('%.3f', ($ElectricityCalcPowerCurrent ))), 1); - readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_PowerDayMax", 0 , 1); - readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_CounterDay1st", (sprintf('%.3f', ($ElectricityCountReadingValueCurrent ))), 1); - readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_CounterDayLast", (sprintf('%.3f', ($ElectricityCountReadingValuePrevious ))), 1); + readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_EnergyCostDayLast", (sprintf('%.3f', ($ElectricityCalcEnergyCostDayLast ))), 1); + readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_EnergyDayLast", (sprintf('%.3f', ($ElectricityCalcEnergyDayLast ))), 1); + readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_CounterDay1st", (sprintf('%.3f', ($ElectricityCountReadingValueCurrent ))), 1); + readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_CounterDayLast", (sprintf('%.3f', ($ElectricityCountReadingValuePrevious ))), 1); + readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, "." . $ElectricityCalcReadingPrefix . "_PowerDaySum", 0 , 1); + readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, "." . $ElectricityCalcReadingPrefix . "_PowerDayCount", 0 , 1); + readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_PowerDayMin", (sprintf('%.3f', ($ElectricityCalcPowerCurrent ))), 1); + readingsSingleUpdate( $ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_PowerDayMax", 0 , 1); + ### Check whether the current value is the first one after change of month if ($ElectricityCountReadingTimestampCurrentMday < $ElectricityCountReadingTimestampPreviousMday) @@ -726,13 +730,13 @@ sub ElectricityCalculator_Notify($$) ### Calculate the payment month since the year of Electricity meter reading started my $ElectricityCalcMeterYearMonth=0; - if (($ElectricityCountReadingTimestampCurrentMon + 1 - $attr{$ElectricityCalcName}{MonthOfAnnualReading} + 1) < 1) + if (($ElectricityCountReadingTimestampCurrentMon - $attr{$ElectricityCalcName}{MonthOfAnnualReading} + 1) < 1) { - $ElectricityCalcMeterYearMonth = 12 + $ElectricityCountReadingTimestampCurrentMon + 1 - $attr{$ElectricityCalcName}{MonthOfAnnualReading} + 1; + $ElectricityCalcMeterYearMonth = 12 + $ElectricityCountReadingTimestampCurrentMon - $attr{$ElectricityCalcName}{MonthOfAnnualReading}; } else { - $ElectricityCalcMeterYearMonth = $ElectricityCountReadingTimestampCurrentMon + 1 - $attr{$ElectricityCalcName}{MonthOfAnnualReading} + 1; + $ElectricityCalcMeterYearMonth = 1 + $ElectricityCountReadingTimestampCurrentMon - $attr{$ElectricityCalcName}{MonthOfAnnualReading}; } ### Calculate reserves at electricity supplier based on monthly advance payments within year of Electricity meter reading @@ -747,6 +751,7 @@ sub ElectricityCalculator_Notify($$) Log3 $ElectricityCalcName, 5, $ElectricityCalcName. " : ElectricityCalculator - _______Times__________________________________________"; Log3 $ElectricityCalcName, 5, $ElectricityCalcName. " : ElectricityCalculator - ElectricityCalcMeterYearMonth : " . $ElectricityCalcMeterYearMonth; + Log3 $ElectricityCalcName, 5, $ElectricityCalcName. " : ElectricityCalculator - Current Month : " . $ElectricityCountReadingTimestampCurrentMon; Log3 $ElectricityCalcName, 5, $ElectricityCalcName. " : ElectricityCalculator - _______Energy_________________________________________"; Log3 $ElectricityCalcName, 5, $ElectricityCalcName. " : ElectricityCalculator - ElectricityCalcEnergyDay : " . sprintf('%.3f', ($ElectricityCalcEnergyDay)) . " kWh"; @@ -815,7 +820,7 @@ sub ElectricityCalculator_Notify($$) readingsBulkUpdate($ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_EnergyMeter", sprintf('%.3f', ($ElectricityCalcEnergyMeter))); ### Write pure energy costs since midnight - readingsBulkUpdate($ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_EnergyCostDay", sprintf('%.3f', ($ElectricityCalcEnergyCostDay))); + readingsBulkUpdate($ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_EnergyCostDay", sprintf('%.3f', ($ElectricityCalcEnergyCostDay))); ### Write pure energy costs since beginning of month readingsBulkUpdate($ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_EnergyCostMonth", sprintf('%.3f', ($ElectricityCalcEnergyCostMonth))); @@ -832,6 +837,9 @@ sub ElectricityCalculator_Notify($$) ### Write current meter reading as sshown on the mechanical meter readingsBulkUpdate($ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_CounterCurrent", sprintf('%.3f', ($ElectricityCountReadingValueCurrent))); + ### Write months since last meter reading + readingsBulkUpdate($ElectricityCalcReadingDestinationDevice, $ElectricityCalcReadingPrefix . "_MonthMeterReading", sprintf('%.0f', ($ElectricityCalcMeterYearMonth))); + ### Finish and execute Bulkupdate readingsEndUpdate($ElectricityCalcReadingDestinationDevice, 1); } @@ -1378,6 +1386,17 @@ sub ElectricityCalculator_Notify($$) + + + +