Neues Modul: ElectricityCalculator

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

Vorheriges Thema - Nächstes Thema

fh168

Hallo Sailor,

ich bin gerade über dieses Modul gestossen, muss ich natürlich sofort ausprobieren.

ich habe einen ESA2000 Analog zähler, welcher schon 3 Jahre lang bis auf die Nachkommastelle super funktionioniert.

https://blog.moneybag.de/die-stromkosten-im-blick-mit-der-energiesparampel-ein-erfahrungsbericht/

Jetzt bin ich etwas verwirrt, was ich da in den regex definitionen eintragen muss. ist es das acutal oder ticks?
und was für ein faktor muss man da eingeben? ist es der, der auf dem (analogen Ferrarizähler steht)?


Batteriewechsel
1
2016-08-20 18:04:23
actual
0.422641509433962
2016-10-24 20:08:28
actual_ticks
1
2016-10-24 20:08:28
battery
ok
2016-10-24 20:08:28
day
6.18666666666667
2016-10-24 20:08:28
day_hr
5.12
2016-10-24 19:55:13
day_last
6.64
2016-10-24 00:00:52
day_lr
1.06666666666667
2016-10-24 20:08:28
diff
0.0133
2016-10-24 20:08:28
diff_sec
795
2016-10-24 20:08:28
diff_ticks
7
2016-10-24 20:08:28
hour
0.0933333333333333
2016-10-24 20:08:28
hour_last
0.373333333333333
2016-10-24 20:08:28
last_sec
1477332508
2016-10-24 20:08:28
max
315.314917127072
rate
LR
2016-10-24 20:08:28
raw
CNT: 94+ CUM: 41056 CUR: 1 TICKS: 75 LR
2016-10-24 20:08:28
2016-10-24 20:08:28
repeat
+
2016-10-24 20:08:28
sequence
94
2016-10-24 20:08:28
state
CNT: 94+ CUM: 1930.400 CUR: 0.423 TICKS: 75 LR
2016-10-24 20:08:28
ticks
75
2016-10-24 20:08:28
total
1930.39999999922
2016-10-24 20:08:28
total_ticks
41056
2016-10-24 20:08:28
Hue, Lacrosse, PCA301, MySensors, V 1.67 CUL 868 V3.4, Lacrosse-WLAN-Gateway, Tasmota RF-

FunkOdyssey

@ulli: Ich nehme das nur einmal am Tag erstellte Reading *EnergyDayLast. Ansonsten macht es keinen Sinn.

Sailor

Moin zusammen

Nur zur Info, falls Ihr auch komische Leistungsspitzen in euren Plots habt:
https://forum.fhem.de/index.php/topic,59624.0/topicseen.html

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

Sailor

Hallo Reinhart

Zitat von: Reinhart am 21 Oktober 2016, 12:29:33
Ich hänge dir hier ein Bild von den Readings meines Youless an, dann siehst du genau die verwendeten Namen und welchen Wert sie beinhalten. Damit kommst du dann sicher leichter zurecht, wenn man weiß was drinnen steht. Ob Strom oder Gas ist vom Youless gesehen egal, weil ich in der Impulskonstante den Faktor von N/m3 auf KW schon umgerechnet habe und in Fhem alles in elektrischer Leistung betrachte.
und hier nochmals die Definition, weil ich habe da nachträglich noch etwas umgebaut, sonst passen die ReadingNames nicht zusammen.

Also ich fand dein Youless so gut, dass ich da mal ein bisschen rumprogrammiert habe.

Anbei mein Attribut "valueStyle".

Das Gute an dem Teil ist, nur die ersten 6 Zeilen müssen mit den namen der Devices und der Readings gefüllt werden.

Alles andere berechnet sich von selbst anhand der getätigten Attribute.

Soll heissen: Rot/Amber/Green berechnet sich anhand der zu leistenden monatlichen Zahlungen.
Ändern sich die Zahlungen weil Preise gestiegen, ändern sich auch die Warnbereiche mit.

Gruss
    Sailor




{
my $ElectricityCalcName = "CH_ElectricityCalculator";
my $ElectricityCountName = "CH_ElectricityCounter";
my $ElectricityCountReadingName = "energyCalc";

my $GasCalcName = "CH_GasCalculator";
my $GasCountName = "CH_GasCounter";
my $GasCountReadingName = "counters.A";

my $ElectricitySiPrefixPowerFactor = 1;
if(defined($attr{$ElectricityCalcName}{SiPrefixPower}))
{
if    ($attr{$ElectricityCalcName}{SiPrefixPower} eq "W" ) {$ElectricitySiPrefixPowerFactor = 1          ;}
elsif ($attr{$ElectricityCalcName}{SiPrefixPower} eq "kW") {$ElectricitySiPrefixPowerFactor = 1000       ;}
elsif ($attr{$ElectricityCalcName}{SiPrefixPower} eq "MW") {$ElectricitySiPrefixPowerFactor = 1000000    ;}
elsif ($attr{$ElectricityCalcName}{SiPrefixPower} eq "GW") {$ElectricitySiPrefixPowerFactor = 1000000000 ;}
else    {$ElectricitySiPrefixPowerFactor = 1          ;}
}
my $ElectricityCalcReadingPrefix = ($ElectricityCountName . "_" . $ElectricityCountReadingName);
my $ElectricityMeterMaxCost = ($attr{$ElectricityCalcName}{MonthlyPayment}*12)-$attr{$ElectricityCalcName}{BasicPricePerAnnum};
my $ElectricityMonthlyMaxCost = $attr{$ElectricityCalcName}{MonthlyPayment}-($attr{$ElectricityCalcName}{BasicPricePerAnnum}/12);
my $ElectricityMonthlyMaxEnergy = $ElectricityMonthlyMaxCost   / $attr{$ElectricityCalcName}{ElectricityPricePerKWh};
my $ElectricityDailyMaxEnergy = $ElectricityMonthlyMaxEnergy / 30;
my $ElectricityDailyMaxCost = $ElectricityMonthlyMaxCost   / 30;
my $ElectricityMaxAveragePower = $ElectricityDailyMaxEnergy * 1000 / 24 / $ElectricitySiPrefixPowerFactor;
my @ElectricityPowerCurrentThreshold = (      $ElectricityMaxAveragePower , 4* $ElectricityMaxAveragePower               );
my @ElectricityEnergyDayThreshold = ((0.75*$ElectricityDailyMaxEnergy) , $ElectricityDailyMaxEnergy                  );
my @ElectricityEnergyCostDayThreshold = ((0.75*$ElectricityDailyMaxCost)   , $ElectricityDailyMaxCost                    );
my @ElectricityEnergyCostMonthThreshold = ((0.75*$ElectricityMonthlyMaxCost) , $ElectricityMonthlyMaxCost                  );
my @ElectricityEnergyCostMeterThreshold = ((0.75*$ElectricityMeterMaxCost)   , $ElectricityMeterMaxCost                    );
my @ElectricityFinanceReserveThreshold = (0                                 , $attr{$ElectricityCalcName}{MonthlyPayment} );

my $GasSiPrefixPowerFactor = 1;
if(defined($attr{$GasCalcName}{SiPrefixPower}))
{
if    ($attr{$GasCalcName}{SiPrefixPower} eq "W" ) {$GasSiPrefixPowerFactor = 1          ;}
elsif ($attr{$GasCalcName}{SiPrefixPower} eq "kW") {$GasSiPrefixPowerFactor = 1000       ;}
elsif ($attr{$GasCalcName}{SiPrefixPower} eq "MW") {$GasSiPrefixPowerFactor = 1000000    ;}
elsif ($attr{$GasCalcName}{SiPrefixPower} eq "GW") {$GasSiPrefixPowerFactor = 1000000000 ;}
else                                           {$GasSiPrefixPowerFactor = 1          ;}
}
my $GasCalcReadingPrefix = ($GasCountName . "_" . $GasCountReadingName);
my $GasMeterMaxCost = ($attr{$GasCalcName}{MonthlyPayment}*12)-$attr{$GasCalcName}{BasicPricePerAnnum};
my $GasMonthlyMaxCost = $attr{$GasCalcName}{MonthlyPayment}-($attr{$GasCalcName}{BasicPricePerAnnum}/12);
my $GasMonthlyMaxEnergy = $GasMonthlyMaxCost   / $attr{$GasCalcName}{GasPricePerKWh};
my $GasDailyMaxEnergy = $GasMonthlyMaxEnergy / 30;
my $GasDailyMaxCost = $GasMonthlyMaxCost   / 30;
my $GasMaxAveragePower = $GasDailyMaxEnergy * 1000 / 24 * $GasSiPrefixPowerFactor;
my @GasPowerCurrentThreshold = (      $GasMaxAveragePower , 4 * $GasMaxAveragePower                 );
my @GasEnergyDayThreshold = ((0.75*$GasDailyMaxEnergy) , $GasDailyMaxEnergy                  );
my @GasEnergyCostDayThreshold = ((0.75*$GasDailyMaxCost)   , $GasDailyMaxCost                    );
my @GasEnergyCostMonthThreshold = ((0.75*$GasMonthlyMaxCost) , $GasMonthlyMaxCost                  );
my @GasEnergyCostMeterThreshold = ((0.75*$GasMeterMaxCost)   , $GasMeterMaxCost                    );
my @GasFinanceReserveThreshold = (0                         , $attr{$GasCalcName}{MonthlyPayment} );

if   ( $READING eq ($ElectricityCalcReadingPrefix . "_PowerCurrent") && $VALUE <= $ElectricityPowerCurrentThreshold[0])
{
'style="color:green;;text-align:right"'
}
elsif( $READING eq ($ElectricityCalcReadingPrefix . "_PowerCurrent") && $VALUE > $ElectricityPowerCurrentThreshold[0] && $VALUE < $ElectricityPowerCurrentThreshold[1])
{
'style="color:orange;;text-align:right"'
}
elsif( $READING eq ($ElectricityCalcReadingPrefix . "_PowerCurrent") && $VALUE >= $ElectricityPowerCurrentThreshold[1])
{
'style="color:red;;text-align:right"'
}
elsif( $READING eq ($ElectricityCalcReadingPrefix . "_EnergyDay") && $VALUE <= $ElectricityEnergyDayThreshold[0])
{
'style="color:green;;text-align:right"'
}
elsif( $READING eq ($ElectricityCalcReadingPrefix . "_EnergyDay") && $VALUE > $ElectricityEnergyDayThreshold[0] && $VALUE < $ElectricityEnergyDayThreshold[1] )
{
'style="color:orange;;text-align:right"'
}
elsif( $READING eq ($ElectricityCalcReadingPrefix . "_EnergyDay") && $VALUE >= $ElectricityEnergyDayThreshold[1])
{
'style="color:red;;text-align:right"'
}
elsif( $READING eq ($ElectricityCalcReadingPrefix . "_EnergyDayLast") && $VALUE <= $ElectricityEnergyDayThreshold[0])
{
'style="color:green;;text-align:right"'
}
elsif( $READING eq ($ElectricityCalcReadingPrefix . "_EnergyDayLast") && $VALUE > $ElectricityEnergyDayThreshold[0] && $VALUE < $ElectricityEnergyDayThreshold[1] )
{
'style="color:orange;;text-align:right"'
}
elsif( $READING eq ($ElectricityCalcReadingPrefix . "_EnergyDayLast") && $VALUE >= $ElectricityEnergyDayThreshold[1])
{
'style="color:red;;text-align:right"'
}
elsif( $READING eq ($ElectricityCalcReadingPrefix . "_EnergyCostDayLast") && $VALUE <= $ElectricityEnergyCostDayThreshold[0])
{
'style="color:lightgreen;;text-align:right"'
}
elsif( $READING eq ($ElectricityCalcReadingPrefix . "_EnergyCostDayLast") && $VALUE > $ElectricityEnergyCostDayThreshold[0] && $VALUE < $ElectricityEnergyCostDayThreshold[1] )
{
'style="color:orange;;text-align:right"'
}
elsif( $READING eq ($ElectricityCalcReadingPrefix . "_EnergyCostDayLast") && $VALUE >= $ElectricityEnergyCostDayThreshold[1])
{
'style="color:red;;text-align:right"'
}
elsif( $READING eq ($ElectricityCalcReadingPrefix . "_EnergyCostMonth") && $VALUE <= $ElectricityEnergyCostMonthThreshold[0])
{
'style="color:lightgreen;;text-align:right"'
}
elsif( $READING eq ($ElectricityCalcReadingPrefix . "_EnergyCostMonth") && $VALUE > $ElectricityEnergyCostMonthThreshold[0] && $VALUE < $ElectricityEnergyCostMonthThreshold[1] )
{
'style="color:orange;;text-align:right"'
}
elsif( $READING eq ($ElectricityCalcReadingPrefix . "_EnergyCostMonth") && $VALUE >= $ElectricityEnergyCostMonthThreshold[1])
{
'style="color:red;;text-align:right"'
}
elsif( $READING eq ($ElectricityCalcReadingPrefix . "_EnergyCostMeter") && $VALUE <= $ElectricityEnergyCostMeterThreshold[0])
{
'style="color:lightgreen;;text-align:right"'
}
elsif( $READING eq ($ElectricityCalcReadingPrefix . "_EnergyCostMeter") && $VALUE > $ElectricityEnergyCostMeterThreshold[0] && $VALUE < $ElectricityEnergyCostMeterThreshold[1] )
{
'style="color:orange;;text-align:right"'
}
elsif( $READING eq ($ElectricityCalcReadingPrefix . "_EnergyCostMeter") && $VALUE >= $ElectricityEnergyCostMeterThreshold[1])
{
'style="color:red;;text-align:right"'
}
elsif( $READING eq ($ElectricityCalcReadingPrefix . "_FinanceReserve") && $VALUE < $ElectricityFinanceReserveThreshold[0])
{
'style="color:red;;text-align:right"'
}
elsif( $READING eq ($ElectricityCalcReadingPrefix . "_FinanceReserve") && $VALUE > $ElectricityFinanceReserveThreshold[0] && $VALUE < $ElectricityFinanceReserveThreshold[1] )
{
'style="color:orange;;text-align:right"'
}
elsif( $READING eq ($ElectricityCalcReadingPrefix . "_FinanceReserve") && $VALUE > $ElectricityFinanceReserveThreshold[1])
{
'style="color:lightgreen;;text-align:right"'
}
elsif( $READING eq ($GasCalcReadingPrefix . "_PowerCurrent") && $VALUE <= $GasPowerCurrentThreshold[0])
{
'style="color:green;;text-align:right"'
}
elsif( $READING eq ($GasCalcReadingPrefix . "_PowerCurrent") && $VALUE > $GasPowerCurrentThreshold[0] && $VALUE < $GasPowerCurrentThreshold[1])
{
'style="color:orange;;text-align:right"'
}
elsif( $READING eq ($GasCalcReadingPrefix . "_PowerCurrent") && $VALUE >= $GasPowerCurrentThreshold[1])
{
'style="color:red;;text-align:right"'
}
elsif( $READING eq ($GasCalcReadingPrefix . "_EnergyDay") && $VALUE <= $GasEnergyDayThreshold[0])
{
'style="color:green;;text-align:right"'
}
elsif( $READING eq ($GasCalcReadingPrefix . "_EnergyDay") && $VALUE > $GasEnergyDayThreshold[0] && $VALUE < $GasEnergyDayThreshold[1] )
{
'style="color:orange;;text-align:right"'
}
elsif( $READING eq ($GasCalcReadingPrefix . "_EnergyDay") && $VALUE >= $GasEnergyDayThreshold[1])
{
'style="color:red;;text-align:right"'
}
elsif( $READING eq ($GasCalcReadingPrefix . "_EnergyDayLast") && $VALUE <= $GasEnergyDayThreshold[0])
{
'style="color:green;;text-align:right"'
}
elsif( $READING eq ($GasCalcReadingPrefix . "_EnergyDayLast") && $VALUE > $GasEnergyDayThreshold[0] && $VALUE < $GasEnergyDayThreshold[1] )
{
'style="color:orange;;text-align:right"'
}
elsif( $READING eq ($GasCalcReadingPrefix . "_EnergyDayLast") && $VALUE >= $GasEnergyDayThreshold[1])
{
'style="color:red;;text-align:right"'
}
elsif( $READING eq ($GasCalcReadingPrefix . "_EnergyCostDayLast") && $VALUE <= $GasEnergyCostDayThreshold[0])
{
'style="color:lightgreen;;text-align:right"'
}
elsif( $READING eq ($GasCalcReadingPrefix . "_EnergyCostDayLast") && $VALUE > $GasEnergyCostDayThreshold[0] && $VALUE < $GasEnergyCostDayThreshold[1] )
{
'style="color:orange;;text-align:right"'
}
elsif( $READING eq ($GasCalcReadingPrefix . "_EnergyCostDayLast") && $VALUE >= $GasEnergyCostDayThreshold[1])
{
'style="color:red;;text-align:right"'
}
elsif( $READING eq ($GasCalcReadingPrefix . "_EnergyCostMonth") && $VALUE <= $GasEnergyCostMonthThreshold[0])
{
'style="color:lightgreen;;text-align:right"'
}
elsif( $READING eq ($GasCalcReadingPrefix . "_EnergyCostMonth") && $VALUE > $GasEnergyCostMonthThreshold[0] && $VALUE < $GasEnergyCostMonthThreshold[1] )
{
'style="color:orange;;text-align:right"'
}
elsif( $READING eq ($GasCalcReadingPrefix . "_EnergyCostMonth") && $VALUE >= $GasEnergyCostMonthThreshold[1])
{
'style="color:red;;text-align:right"'
}
elsif( $READING eq ($GasCalcReadingPrefix . "_EnergyCostMeter") && $VALUE <= $GasEnergyCostMeterThreshold[0])
{
'style="color:lightgreen;;text-align:right"'
}
elsif( $READING eq ($GasCalcReadingPrefix . "_EnergyCostMeter") && $VALUE > $GasEnergyCostMeterThreshold[0] && $VALUE < $GasEnergyCostMeterThreshold[1] )
{
'style="color:orange;;text-align:right"'
}
elsif( $READING eq ($GasCalcReadingPrefix . "_EnergyCostMeter") && $VALUE >= $GasEnergyCostMeterThreshold[1])
{
'style="color:red;;text-align:right"'
}
elsif( $READING eq ($GasCalcReadingPrefix . "_FinanceReserve") && $VALUE < $GasFinanceReserveThreshold[0])
{
'style="color:red;;text-align:right"'
}
elsif( $READING eq ($GasCalcReadingPrefix . "_FinanceReserve") && $VALUE > $GasFinanceReserveThreshold[0] && $VALUE < $GasFinanceReserveThreshold[1] )
{
'style="color:orange;;text-align:right"'
}
elsif( $READING eq ($GasCalcReadingPrefix . "_FinanceReserve") && $VALUE > $GasFinanceReserveThreshold[1])
{
'style="color:lightgreen;;text-align:right"'
}
}
******************************
Man wird immer besser...

Sailor

Zitat von: fh168 am 24 Oktober 2016, 20:46:24
ich habe einen ESA2000 Analog zähler, welcher schon 3 Jahre lang bis auf die Nachkommastelle super funktionioniert.

Jetzt bin ich etwas verwirrt, was ich da in den regex definitionen eintragen muss. ist es das acutal oder ticks?
und was für ein faktor muss man da eingeben? ist es der, der auf dem (analogen Ferrarizähler steht)?

Ich vermute "total" oder "total_ticks" und dann den Umrechnungsfaktor der auf dem Zählers steht (Zum Beispiel 75 U/kWh)

Auf alle Fälle muss einer der Reading kontinuierlich hochzählen und nicht schwanken.

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

whistler81

Zitat von: Reinhart am 07 Oktober 2016, 13:40:27
Hallo cjung!

Hier bitte die Config der readingsGroup.

####################################################
##         Strom/Gaszaehler von Youless           ##
####################################################
define EnergiezaehlerS readingsGroup <%measure_power>,<Zaehlerstand>,<aktueller Wert>,<Tagesverbrauch=>>,<Heute>,<Tagesverbrauch=>>,<Gestern>,<Monat>,<Jahr>,<€-Reserve>,<hr> .*(LS110|LS110_2):electricityConsumed,electricityPower,statElectricityConsumedToday,electricityConsumed_EnergyDay,electricityConsumed_EnergyDayLast,electricityConsumed_EnergyCostDayLast,electricityConsumed_EnergyCostMonth,electricityConsumed_EnergyCostMeter,electricityConsumed_FinanceReserve
attr EnergiezaehlerS mapping %ALIAS
attr EnergiezaehlerS nameStyle style="color:yellow"
attr EnergiezaehlerS room Energie
attr EnergiezaehlerS valueFormat {'electricityConsumed' =>"%09d", 'electricityPower' =>"%.0f W", 'statElectricityConsumedToday' =>"%.0f Wh",'electricityConsumed_EnergyDayLast' => "%.2f Kw/h",'electricityConsumed_EnergyCostDayLast'=> "%.2f €", 'electricityConsumed_EnergyCostMonth'=> "%.2f €",'electricityConsumed_EnergyCostMeter'=> "%.2f €", 'electricityConsumed_FinanceReserve' => "%.2f €",'electricityConsumed_EnergyDay'=> '{sprintf("%.2f €",$VALUE*0.17)}' }

attr EnergiezaehlerS valueStyle { if($READING eq "electricityPower" && $VALUE >= 0 && $VALUE <= 1000){ 'style="color:green;;text-align:right"' }elsif( $READING eq "electricityPower" && $VALUE > 1000 && $VALUE < 3000){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "electricityPower" && $VALUE >= 3000){ 'style="color:red;;text-align:right"' }elsif( $READING eq "statElectricityConsumedToday" && $VALUE >= 15000){ 'style="color:red;;text-align:right"' }elsif( $READING eq "statElectricityConsumedToday" && $VALUE <= 6000){ 'style="color:green;;text-align:right"' }elsif( $READING eq "statElectricityConsumedToday" && $VALUE > 6000 && $VALUE < 15000 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "electricityConsumed_EnergyDayLast" && $VALUE <= 15){'style="color:green;;text-align:right"'}elsif( $READING eq "electricityConsumed_EnergyDayLast" && $VALUE > 15 && $VALUE < 20 ){'style="color:orange;;text-align:right"' }elsif( $READING eq "electricityConsumed_EnergyDayLast" && $VALUE >= 20){ 'style="color:red;;text-align:right"' }elsif( $READING eq "electricityConsumed_EnergyCostDayLast" && $VALUE <= 3){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "electricityConsumed_EnergyDay" && $VALUE <=15 ){'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "electricityConsumed_EnergyDay" && $VALUE > 15 && $VALUE < 20){'style="color:orange;;text-align:right"' }elsif( $READING eq "electricityConsumed_EnergyDay" && $VALUE >= 20){'style="color:red;;text-align:right"' }elsif( $READING eq "electricityConsumed_EnergyCostDay" && $VALUE <= 3){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "electricityConsumed_EnergyCostDayLast" && $VALUE > 3 && $VALUE < 5 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "electricityConsumed_EnergyCostDayLast" && $VALUE >= 5){ 'style="color:red;;text-align:right"' }elsif( $READING eq "electricityConsumed_EnergyCostMonth" && $VALUE <= 90){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "electricityConsumed_EnergyCostMonth" && $VALUE > 90 && $VALUE < 150 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "electricityConsumed_EnergyCostMonth" && $VALUE >= 150){ 'style="color:red;;text-align:right"' }elsif( $READING eq "electricityConsumed_EnergyCostMeter" && $VALUE <= 90){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "electricityConsumed_EnergyCostMeter" && $VALUE > 90 && $VALUE < 150 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "electricityConsumed_EnergyCostMeter" && $VALUE >= 150){ 'style="color:red;;text-align:right"' }elsif( $READING eq "electricityConsumed_FinanceReserve" && $VALUE > 400){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "electricityConsumed_FinanceReserve" && $VALUE < 400 && $VALUE > 200 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "electricityConsumed_FinanceReserve" && $VALUE < 399){ 'style="color:red;;text-align:right"' }else{ 'style="color:grey;;text-align:right"' } }

du musst halt die Devices (LS110|LS110_2) und die Readingsnamen anpassen. Die täglichen aufkumulierten Kosten (ab 0:00 Uhr) werden noch berechnet, da es diese Ausgabe vom Electricity Modul nicht gibt. Da musst du deine Stromkosten (hier 0.17, Leistungspreis+Transport+Steuer) noch anpassen.

#################################################
#            Strom Zähler UG                                                                         #
#################################################

define Energiezaehler readingsGroup <%measure_power>,<Verbrauch ab 0 Uhr>,<Stundenwert>,<Tageswert>,<Wochenwert>,<€ Gestern>,<Monat>,<Jahr>,<€ Reserve> .*(Zaehlerstand_UG|Zaehlerstand_DG|Zaehlerstand_EG):state,appCountsPerHour,appCountsPerDay,appCountsPerWeek,countsOverall_EnergyCostDayLast,countsOverall_EnergyCostMonth,countsOverall_EnergyCostMeter,countsOverall_FinanceReserve

attr Energiezaehler mapping %ALIAS
attr Energiezaehler nameStyle style="color:yellow"
attr Energiezaehler room Energie
attr Energiezaehler valueFormat {'state' =>"%.2f Wh", 'appCountsPerHour' => "%.1f Wh", 'appCountsPerDay' => "%.2f Wh", 'appCountsPerWeek' => "%.0f Wh", 'countsOverall_EnergyCostDayLast' => "%.2f €", 'countsOverall_EnergyCostMonth' => "%.2f €", 'countsOverall_EnergyCostMeter' => "%.2f €", 'countsOverall_FinanceReserve' => "%.2f €" }

attr Energiezaehler valueStyle { if($READING eq "state" && $VALUE >= 0 && $VALUE <= 8000){ 'style="color:green;;text-align:right"' }elsif( $READING eq "state" && $VALUE > 8000 && $VALUE < 17000){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "state" && $VALUE >= 17000){ 'style="color:red;;text-align:right"' }elsif( $READING eq "appCountsPerHour" && $VALUE > 1000){ 'style="color:red;;text-align:right"' }elsif( $READING eq "appCountsPerHour" && $VALUE <= 500){ 'style="color:green;;text-align:right"' }elsif( $READING eq "appCountsPerHour" && $VALUE > 500 && $VALUE < 1000 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "appCountsPerDay" && $VALUE <= 8000){ 'style="color:green;;text-align:right"' }elsif( $READING eq "appCountsPerDay" && $VALUE > 8000 && $VALUE < 17000 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "appCountsPerDay" && $VALUE >= 17000){ 'style="color:red;;text-align:right"' }elsif( $READING eq "appCountsPerWeek" && $VALUE <= 56000){ 'style="color:green;;text-align:right"' }elsif( $READING eq "appCountsPerWeek" && $VALUE > 56000 && $VALUE < 105000 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "appCountsPerWeek" && $VALUE >= 119000){ 'style="color:red;;text-align:right"' }elsif( $READING eq "appCountsPerMonth" && $VALUE <= 240000){ 'style="color:green;;text-align:right"' }elsif( $READING eq "appCountsPerMonth" && $VALUE > 240000 && $VALUE < 510000 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "appCountsPerMonth" && $VALUE >= 510000){ 'style="color:red;;text-align:right"' }elsif( $READING eq "countsOverall_EnergyDay" && $VALUE <= 15){'style="color:green;;text-align:right"'}elsif( $READING eq "countsOverall_EnergyDay" && $VALUE > 15 && $VALUE < 20 ){'style="color:orange;;text-align:right"' }elsif( $READING eq "countsOverall_EnergyDay" && $VALUE > 20){ 'style="color:red;;text-align:right"' }elsif( $READING eq "countsOverall_EnergyDayLast" && $VALUE <= 15){'style="color:green;;text-align:right"'}elsif( $READING eq "countsOverall_EnergyDayLast" && $VALUE > 15 && $VALUE < 20 ){'style="color:orange;;text-align:right"' }elsif( $READING eq "countsOverall_EnergyDayLast" && $VALUE > 20){ 'style="color:red;;text-align:right"' }elsif( $READING eq "countsOverall_EnergyCostDayLast" && $VALUE <= 3){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "countsOverall_EnergyCostDayLast" && $VALUE > 3 && $VALUE < 5 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "countsOverall_EnergyCostDayLast" && $VALUE >= 5){ 'style="color:red;;text-align:right"' }elsif( $READING eq "countsOverall_EnergyCostMonth" && $VALUE <= 90){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "countsOverall_EnergyCostMonth" && $VALUE > 90 && $VALUE < 150 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "countsOverall_EnergyCostMonth" && $VALUE >= 150){ 'style="color:red;;text-align:right"' }elsif( $READING eq "countsOverall_EnergyCostMeter" && $VALUE <= 90){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "countsOverall_EnergyCostMeter" && $VALUE > 90 && $VALUE < 150 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "countsOverall_EnergyCostMeter" && $VALUE >= 150){ 'style="color:red;;text-align:right"' }elsif( $READING eq "countsOverall_FinanceReserve" && $VALUE > 400){ 'style="color:lightgreen;;text-align:right"' }elsif( $READING eq "countsOverall_FinanceReserve" && $VALUE < 400 && $VALUE > 200 ){ 'style="color:orange;;text-align:right"' }elsif( $READING eq "countsOverall_FinanceReserve" && $VALUE < 399){ 'style="color:red;;text-align:right"' }else{ 'style="color:grey;;text-align:right"' } }

und hier die readingGroup aus den GPIO's die direkt von den S0-Zählern kommen.

Wichtig bei beiden readingsGroup ist das Attribut ReadingDestination (attr myElectricityCalculatorUG ReadingDestination CounterDevice) damit die Berechnungen in den urspünglichen Device zurück geschrieben werden und nicht nur im ElectricityCalculator landen, damit tust du dir dann leichter bei der Formatierung.
Deine persönlichen Alarmgrenzen und somit die Umfärbungsschwelle musst halt selber auf deine Bedürfnisse vernünftig einstellen. Ich habe hohen Stromverbrauch und daher die Schwellen relativ hoch eingestellt wenn es rot werden soll.

PS: ach ja, der Gaszähler kommt bei mir schon in Kw, der wird vom Youless schon umgerechnet.

LG
Reinhart

Hallo!

Ich habe ein Frage zum dem Code: Ich habe den genauso eingegeben, Devices angepasst, es wird mir aber kein Wert für "Gestern" angezeigt. Habe ich etwas vergessen zu machen?

Der "Heute" Wert ist verfügbar....

Danke für Eure Hilfe

Beste Grüße
Clemens

Reinhart

siehst du den Wert im Reading "electricityConsumed_EnergyCostDayLast", das ist der Wert von "Gestern".

LG
Reinhart



FHEM auf Raspy4 mit Bullseye + SSD, Homematic, ESP8266, ESP32, Sonoff, eBus, NanoCUL, MapleCUL, , MQTT2, Alexa

Reinhart

@Sailor

Danke für dein valueStyle, du hast das sehr professionell umgesetzt!
Ich teste schon damit!

LG
Reinhart
FHEM auf Raspy4 mit Bullseye + SSD, Homematic, ESP8266, ESP32, Sonoff, eBus, NanoCUL, MapleCUL, , MQTT2, Alexa

Sailor

#113
Hallo Reinhart

Geändert

Zitat von: Reinhart am 29 Oktober 2016, 21:13:49
Danke für dein valueStyle, du hast das sehr professionell umgesetzt!
Ich teste schon damit!

Danke für die Blumen...

Leider funktioniert es noch nicht so mit ValueStyle valueFormat ... Ich forsche noch.


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

Reinhart

ja, ich bekomme auch einen Syntaxfehler, du hast es zwar sehr schön strukturiert, doch bei den readingsGroups habe ich auch schon viel Lehrgeld bezahlen müssen. Ein einziges falsches Zeichen an der falschen Stelle und schon sucht man.

LG
FHEM auf Raspy4 mit Bullseye + SSD, Homematic, ESP8266, ESP32, Sonoff, eBus, NanoCUL, MapleCUL, , MQTT2, Alexa

Sailor

Hallo Reinhart

Zitat von: Reinhart am 31 Oktober 2016, 18:47:36
ja, ich bekomme auch einen Syntaxfehler, du hast es zwar sehr schön strukturiert, doch bei den readingsGroups habe ich auch schon viel Lehrgeld bezahlen müssen. Ein einziges falsches Zeichen an der falschen Stelle und schon sucht man.

Sorry

Ich meinte valueFormat funktioniert nicht. valueStyle funktioniert wie gepostet.

Was für ein Fehler gibt er aus?

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

Reinhart

sämtliche my Deklarationen werden angemeckert.

Unknown command my, try help. Unknown command my, try help. Unknown command my, try help. Unknown command my, try help. Unknown command my, try help. Unknown command my, try help. Unknown command if(defined($attr{$ElectricityCalcName}{SiPrefixPower})), try help. Unknown command

.....usw. das kommt ein paar 100 Mal, bei jedem "my"

Klammern habe ich schon alle überprüft und die scheinen ok zu sein.

Ich dachte immer der Zeilenumbruch muss durch "\" markiert sein, so wie hier in meinem Beispiel, dieses funktioniert.
define pool.pump.timer at +*02:30:00 { \
   if (($hour > 5 && $hour < 21) && (Value("PoolAutomatik") eq "Ein")) { \
       my $pt=(ReadingsVal("PoolWasser", "temperature", "20")-10)*60*3;; \
       fhem ("set PumpePool on-for-timer $pt");;\
  }\
}


LG

FHEM auf Raspy4 mit Bullseye + SSD, Homematic, ESP8266, ESP32, Sonoff, eBus, NanoCUL, MapleCUL, , MQTT2, Alexa

Sailor

Hallo Reinhart

Zitat von: Reinhart am 01 November 2016, 11:15:15
sämtliche my Deklarationen werden angemeckert.

Unknown command my, try help. Unknown command my, try help. Unknown command my, try help. Unknown command my, try help. Unknown command my, try help. Unknown command my, try help. Unknown command if(defined($attr{$ElectricityCalcName}{SiPrefixPower})), try help. Unknown command

.....usw. das kommt ein paar 100 Mal, bei jedem "my"

Klammern habe ich schon alle überprüft und die scheinen ok zu sein.

Ich dachte immer der Zeilenumbruch muss durch "\" markiert sein, so wie hier in meinem Beispiel, dieses funktioniert.
define pool.pump.timer at +*02:30:00 { \
   if (($hour > 5 && $hour < 21) && (Value("PoolAutomatik") eq "Ein")) { \
       my $pt=(ReadingsVal("PoolWasser", "temperature", "20")-10)*60*3;; \
       fhem ("set PumpePool on-for-timer $pt");;\
  }\
}



Du musst meinen Code ja auch in das GUI eingeben und nicht die .cfg Datei editieren.
Das Gui fügt dann die "\" automatisch ein.

Das würde auch die Fehlermeldungen erklären.

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

Reinhart

#118
Danke für den Hinweis, habe nicht gewusst das dies so einfach funktioniert und ohne Fehler angenommen wird.

Aber der Output der readingsGroup ist nicht sehr schön, irgendwie passt das nicht zu den im valueFormat angegebenen readings.
Die fhem.cfg kann ich nach dem einfügen editieren und die Zeilenumbrüche sind dann ok mit "\", es kommt auch kein weiterer Fehler beim Speichern. Übrigens der Code lebt und beim Eintreffen von Readings verschiebt sich das ganze im Ausgabefenster und wandert hin und her.

Ich muss mir das mit den ersten 6 Zeilen noch genau ansehen, hier dürfte das Problem sein.

LG

PS: Problem gefunden: ich hab ezuerst mit dem Sternchen den Eintrag gelöscht und dann erst das Editorfenster aufgerufen, das produziert diesen Fehler. Wenn im Editorfenster der alte Eintrag gelöscht wird, dann klappt es.
FHEM auf Raspy4 mit Bullseye + SSD, Homematic, ESP8266, ESP32, Sonoff, eBus, NanoCUL, MapleCUL, , MQTT2, Alexa

Sailor

Hallo Reinhart

Zitat von: Reinhart am 01 November 2016, 18:16:01
PS: Problem gefunden: ich hab ezuerst mit dem Sternchen den Eintrag gelöscht und dann erst das Editorfenster aufgerufen, das produziert diesen Fehler. Wenn im Editorfenster der alte Eintrag gelöscht wird, dann klappt es.

Freut mich!

Wie sieht es jetzt aus?

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