FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: andre07 am 27 Dezember 2015, 13:48:32

Titel: Berechnug DOIF
Beitrag von: andre07 am 27 Dezember 2015, 13:48:32
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
Titel: Antw:Berechnug DOIF
Beitrag von: Ellert am 27 Dezember 2015, 14:01:42
Was ist die Einheit für das Reading "energy"?
Titel: Antw:Berechnug DOIF
Beitrag von: Ellert am 27 Dezember 2015, 17:41:19
Hat der Dummy wirklich ein Reading "energy"?
Titel: Antw:Berechnug DOIF
Beitrag von: viegener am 27 Dezember 2015, 18:21:50
und noch: Ist die Mischung aus Gross- und kleinschreibung so wirklich korrekt?
Titel: Antw:Berechnug DOIF
Beitrag von: andre07 am 27 Dezember 2015, 19:52:47
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 ")} )



Titel: Antw:Berechnug DOIF
Beitrag von: Ellert am 27 Dezember 2015, 23:00:57
Welchen Wert ergibt {ReadingsVal("Stromsensor.HausBetrieb","energy","0")} in die Kommandozeile eingegben?
Titel: Antw:Berechnug DOIF
Beitrag von: andre07 am 28 Dezember 2015, 00:35:42
Ergibt bei mir 659808.3
Titel: Antw:Berechnug DOIF
Beitrag von: Ellert am 28 Dezember 2015, 09:15:04
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)
Titel: Antw:Berechnug DOIF
Beitrag von: andre07 am 28 Dezember 2015, 14:23:29
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































Titel: Antw:Berechnug DOIF
Beitrag von: Ellert am 28 Dezember 2015, 16:54:52
Da lässt sich sicher etwas mit der Variable $month machen oder mit dem Modul "statistics".
Titel: Antw:Berechnug DOIF
Beitrag von: andre07 am 28 Dezember 2015, 19:19:06
(($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  :-\


Titel: Antw:Berechnug DOIF
Beitrag von: Ellert am 28 Dezember 2015, 20:15:38
([18:00]) (IF ($mday==1) () ELSE ())

Du weisst schon, dass Du auch so { ( [stromsensor.haus:enegy] - [Stromsensor.HausBetrieb:energy]) / 1000 * 0.29 } rechnen kannst?
Titel: Antw:Berechnug DOIF
Beitrag 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 €"))
Titel: Antw:Berechnug DOIF
Beitrag von: Damian am 29 Dezember 2015, 20:19:02
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
Titel: Antw:Berechnug DOIF
Beitrag 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}) €)
Titel: Antw:Berechnug DOIF
Beitrag von: Damian am 29 Dezember 2015, 21:51:05
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
Titel: Antw:Berechnug DOIF
Beitrag von: inesa394 am 29 Dezember 2015, 22:04:33
hatte ich auch schon gesucht
Titel: Antw:Berechnug DOIF
Beitrag 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)} €)
Titel: Antw:Berechnug DOIF
Beitrag von: Damian am 29 Dezember 2015, 22:31:50
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)} €))

Titel: Antw:Berechnug DOIF
Beitrag von: andre07 am 29 Dezember 2015, 22:42:55
jetzt aber gehts danke noch und gute Nacht :) :)
Titel: Antw:Berechnug DOIF
Beitrag von: Ellert am 30 Dezember 2015, 11:56:02
Zitat$mday == 29

Im Februar 2017 gibt es damit keinen Monatswert.