Hauptmenü

Berechnug DOIF

Begonnen von andre07, 27 Dezember 2015, 13:48:32

Vorheriges Thema - Nächstes Thema

andre07

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

Ellert

Was ist die Einheit für das Reading "energy"?

Ellert

Hat der Dummy wirklich ein Reading "energy"?

viegener

und noch: Ist die Mischung aus Gross- und kleinschreibung so wirklich korrekt?
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

andre07

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 ")} )




Ellert

Welchen Wert ergibt {ReadingsVal("Stromsensor.HausBetrieb","energy","0")} in die Kommandozeile eingegben?

andre07

Ergibt bei mir 659808.3

Ellert

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

andre07

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
































Ellert

#9
Da lässt sich sicher etwas mit der Variable $month machen oder mit dem Modul "statistics".

andre07

(($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  :-\



Ellert

([18:00]) (IF ($mday==1) () ELSE ())

Du weisst schon, dass Du auch so { ( [stromsensor.haus:enegy] - [Stromsensor.HausBetrieb:energy]) / 1000 * 0.29 } rechnen kannst?

andre07

#12
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 €"))

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

andre07

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}) €)