Hallo
Habe hier ein DOIF was mir die Tageskosten in EURO erechnen soll
Irgendwie scheint er da aber was falsch zu rechnen
Hier mein DOIF
Internals:
DEF ([10:14]) ( {(my $verbrauch=ReadingsVal("stromsensor.haus","energy","0") - ReadingsVal("Stromsensor.HausBetrieb","energy","0")) /1000 * 0.29 ;; my $verbrauchgerundet=int(100*$verbrauch+0.5)/100 ;; fhem("setreading Stromsensor.HausBetrieb TagEuroKosten $verbrauchgerundet €")} )
NAME Tagesverbraucheuro
NR 536
NTFY_ORDER 50-Tagesverbraucheuro
STATE cmd_1
TYPE DOIF
Readings:
2015-12-27 10:14:00 cmd_event timer_1
2015-12-27 10:14:00 cmd_nr 1
2015-12-27 10:14:00 state cmd_1
2015-12-27 10:14:00 timer_1_c1 28.12.2015 10:14:00
Condition:
0 DOIF_time_once($hash,$hash->{timer}{0},$wday,"")
Days:
Devices:
Do:
0:
0 {(my $verbrauch=ReadingsVal("stromsensor.haus","energy","0") - ReadingsVal("Stromsensor.HausBetrieb","energy","0")) /1000 * 0.29 ;; my $verbrauchgerundet=int(100*$verbrauch+0.5)/100 ;; fhem("setreading Stromsensor.HausBetrieb TagEuroKosten $verbrauchgerundet €")}
Helper:
globalinit 1
last_timer 1
sleeptimer -1
Internals:
Itimer:
Readings:
Realtime:
0 10:14:00
State:
Time:
0 10:14:00
Timecond:
0 0
Timer:
0 0
Timerfunc:
Timers:
0 0
Attributes:
do always
ALs Ergebnis bekomme 10225 € etwas viel für einen Tag. "stromsensor.haus" ist mein Homematic Device und Stromsensor.HausBetrieb
ein Dummy worin diec Werte täglich geschrieben werden.
Wahrscheinlich nur etwas an der Klammersetzung falsch aber ich komme einfach nicht drauf wo mein Fehler liegt
Andre
Was ist die Einheit für das Reading "energy"?
Hat der Dummy wirklich ein Reading "energy"?
und noch: Ist die Mischung aus Gross- und kleinschreibung so wirklich korrekt?
Der dummy hat ein reading energy
zur Zeit 659808.3 Das Device stromsensor.haus 668066.6
Mit diesen DOIF schreibe ich das Reading energy aus stromsensor.haus in den dummy Stromsensor.HausBetrieb
([10:20]) (setreading Stromsensor.HausBetrieb power [stromsensor.haus:power],setreading Stromsensor.HausBetrieb energy [stromsensor.haus:energy] )
Dieses DOIF was mir die Gesamtstromverbrauch berechnet rechnet korrekt
([10:10]) ( {my $verbrauch=ReadingsVal("stromsensor.haus","energy","0") /1000 ;; my $verbrauchgerundet=int(100*$verbrauch+0.5)/100 ;; fhem("setreading Stromsensor.HausBetrieb Gesamt $verbrauchgerundet Kwh ")} )
Welchen Wert ergibt {ReadingsVal("Stromsensor.HausBetrieb","energy","0")} in die Kommandozeile eingegben?
Ergibt bei mir 659808.3
Ist mir jetzt erst aufgefallen:
Du benutzt in ReadingsVal Kommata, die könnten als Befehlstrenner interpretiert werden, s. http://fhem.de/commandref_DE.html#DOIF_Angaben_im_Ausfuehrungsteil (http://fhem.de/commandref_DE.html#DOIF_Angaben_im_Ausfuehrungsteil)
Habs jetzt so gelöst
([10:15]) ( { my $verbrauch=ReadingsVal("stromsensor.haus","energy","0") ;;;;
my $dummyreading = ReadingsVal("Stromsensor.HausBetrieb","energy","0") ;;;;
my $strompreiss = 0.29 ;;;;
my $tageswertstrom = sprintf("%.1f", ($verbrauch - $dummyreading) /1000 ) ;;;;
my $stromkostentaeglich = sprintf("%.1f", ($tageswertstrom * $strompreiss));;;;
fhem("setreading Stromsensor.HausBetrieb TagEuro $stromkostentaeglich € ")})
Und für die kwh so
([10:17]) ( { my $verbrauch=ReadingsVal("stromsensor.haus","energy","0") ;;;;
my $dummyreading = ReadingsVal("Stromsensor.HausBetrieb","energy","0") ;;;;
my $verbrauchgerundet=int(100*$verbrauch+0.5)/100 ;;;;
my $tageswertstrom = sprintf("%.1f", ($verbrauch - $dummyreading) /1000 ) ;;;;
fhem("setreading Stromsensor.HausBetrieb TagesKwh $tageswertstrom Kwh ")})
Wochen und Stundenwerte ließen sich so auch ganz einfach erstellen.
Was mir noch fehlt sind die möglichkeit monatswerte per DOIF zu erstellen also das DOIF soll einmal im Monat
auslösen
Andre
Da lässt sich sicher etwas mit der Variable $month machen oder mit dem Modul "statistics".
(($mday==1) and [18:00]) ( { my $verbrauch=ReadingsVal("stromsensor.haus","energy","0")......
Das wäre glaub ich am 1 jeden Monats um 18:00Uhr ??
(($month== 1 and $month== 2 and $month== 3) and [18:00])
Hier dann auch kann man die letzte schreibweise irdenwie abkürzen :-\
([18:00]) (IF ($mday==1) () ELSE ())
Du weisst schon, dass Du auch so { ( [stromsensor.haus:enegy] - [Stromsensor.HausBetrieb:energy]) / 1000 * 0.29 }
rechnen kannst?
ja steht so in der commandref
nur wie packe ich das in mein DOIF um es per setreading in meinen dummy zu schreiben
So jedenfalls nicht
(($mday == 29) and [18:02] )( { { ( my $monatsverbrauch=ReadingsVal( [stromsensor.haus:energy] - ReadingsVal[Stromsensor.HausBetrieb:monat]) / 1000 * 0.29 )};; fhem("setreading Stromsensor.HausBetrieb Monatskosten $monatsverbrauch €")})
und so erfolgt die Berechnung aber er führt setreading nicht aus :(
(($mday == 29) and [20:06] )( { ( my $monatsverbrauch=( [stromsensor.haus:energy] - [Stromsensor.HausBetrieb:monat]) / 1000 * 0.29 )};; fhem("setreading Stromsensor.HausBetrieb Monatskosten $monatsverbrauch €"))
Zitat von: andre07 am 29 Dezember 2015, 20:01:34
ja steht so in der commandref
nur wie packe ich das in mein DOIF um es per setreading in meinen dummy zu schreiben
So jedenfalls nicht
(($mday == 29) and [18:02] )( { { ( my $monatsverbrauch=ReadingsVal( [stromsensor.haus:energy] - ReadingsVal[Stromsensor.HausBetrieb:monat]) / 1000 * 0.29 )};; fhem("setreading Stromsensor.HausBetrieb Monatskosten $monatsverbrauch €")})
und so erfolgt die Berechnung aber er führt setreading nicht aus :(
(($mday == 29) and [20:06] )( { ( my $monatsverbrauch=( [stromsensor.haus:energy] - [Stromsensor.HausBetrieb:monat]) / 1000 * 0.29 )};; fhem("setreading Stromsensor.HausBetrieb Monatskosten $monatsverbrauch €"))
z. B.
($mday == 29 and [18:02]) (setreading Stromsensor.HausBetrieb {([stromsensor.haus:enegy]-[Stromsensor.HausBetrieb:energy])/1000 * 0.29} €)
Gruß
Damian
Danke Damain
:)
so ähnlich hatte ich das schon auf den Schirm hatte aber so wie hier mit der formatierung nicht hingehauen
($mday == 29 and [18:02] ) (setreading Stromsensor.HausBetrieb Monatskosten ({sprintf "%.2f"([stromsensor.haus:energy]-[Stromsensor.HausBetrieb:monat])/1000 * 0.29}) €)
Zitat von: andre07 am 29 Dezember 2015, 21:29:00
Danke Damain
:)
so ähnlich hatte ich das schon auf den Schirm hatte aber so wie hier mit der formatierung nicht hingehauen
($mday == 29 and [18:02] ) (setreading Stromsensor.HausBetrieb Monatskosten ({sprintf "%.2f"([stromsensor.haus:energy]-[Stromsensor.HausBetrieb:monat])/1000 * 0.29}) €)
($mday == 29 and [18:02] ) (setreading Stromsensor.HausBetrieb Monatskosten {(sprintf "%.2f",([stromsensor.haus:energy]-[Stromsensor.HausBetrieb:monat])/1000 * 0.29)} €)
Gruß
Damian
hatte ich auch schon gesucht
Kommt leider bei mir "error no right bracket" verstehe ich jetzt auch nicht
($mday == 29 and [18:02] ) (setreading Stromsensor.HausBetrieb Monatskosten {(sprintf "%.2f",([stromsensor.haus:energy]-[Stromsensor.HausBetrieb:monat])/1000 * 0.29)} €)
Zitat von: andre07 am 29 Dezember 2015, 22:19:59
Kommt leider bei mir "error no right bracket" verstehe ich jetzt auch nicht
($mday == 29 and [18:02] ) (setreading Stromsensor.HausBetrieb Monatskosten {(sprintf "%.2f",([stromsensor.haus:energy]-[Stromsensor.HausBetrieb:monat])/1000 * 0.29)} €)
ja, es liegt am Trennzeichen Komma (das leidige Thema), daher doppelt klammern, jetzt aber:
($mday == 29 and [18:02] ) ((setreading Stromsensor.HausBetrieb Monatskosten {(sprintf "%.2f",([stromsensor.haus:energy]-[Stromsensor.HausBetrieb:monat])/1000 * 0.29)} €))
jetzt aber gehts danke noch und gute Nacht :) :)
Zitat$mday == 29
Im Februar 2017 gibt es damit keinen Monatswert.