FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Grave am 09 Juli 2015, 15:00:21

Titel: [gelöst]Wert wird anstatt einmal 100 mal gelogt
Beitrag von: Grave am 09 Juli 2015, 15:00:21
Hi,

folgender Code sollte den Gasverbrauch pünktlich zur vollen Stunde logen. Anstatt diesen Wert pro Stunde einmal in die Log-Datei zu schreiben, wird er aber 100 mal geschrieben. Finde aber einfach keinen Fehler. Zum testen lasse ich das ganze momentan minütlich ablaufen.

Zitatdefine Gaszaehler OWDevice 1D.3D000E000000 600
attr Gaszaehler IODev myLocalOWServer
attr Gaszaehler model DS2423
attr Gaszaehler room OWDevice

define Verbrauch_Stunde dummy
define Verbrauch_Gas dummy
define evtRoutineEveryMinute at +*00:01:00 set {GasproStunde}
attr evtRoutineEveryMinute alignTime 00:00

Zitatsub GasproStunde
{
#
# Zunächst Differenz aktueller Wert - Wert von letzter Stunde berechnen
my $WertGas = ReadingsVal("Gaszaehler","counters.A",0) - Value("Verbrauch_Gas");
  # Stundenverbrauch in Verbrauch_Stunde speichern
fhem ("set Verbrauch_Stunde $WertGas");
# Aktuellen Wert speichern
my $WertGas = ReadingsVal("Gaszaehler","counters.A",0);
fhem ("set Verbrauch_Gas $WertGas");
}
Titel: Antw:Wert wird anstatt einmal 100 mal gelogt
Beitrag von: SvenJust am 09 Juli 2015, 15:16:24
Hallo,

die Berechnung des Verbrauchs ist leichter mit userReadings zu implementieren, die von Dir angegebene Funktion ist nicht notwendig. Schau mal in der Commandref nach userReadings und dem modifier monotonic.

attr Gaszaehler userReadings Verbrauch_Gas monotonic  {ReadingsVal("Gaszaehler","counters.A",0)}ist ungetestet. Der Code sollte den Verbrauch über die Zeit addieren. Wenn gewünscht kann das Reading mit at stündlich auf 0 resettet werden.

VG
Sven
Titel: Antw:Wert wird anstatt einmal 100 mal gelogt
Beitrag von: Grave am 09 Juli 2015, 15:27:15
Ich probiere deinen Vorschlag gleich mal aus. Hab aber mein Problem gelöst. Habe beim Aufruf der sub {GasproStunde} das "set" weggelassen. Jetzt wird pro Stunde(Minute) nur ein Wert gelogt. Warum das so funkioniert verstehe ich jedoch nicht.
Titel: Antw:[gelöst]Wert wird anstatt einmal 100 mal gelogt
Beitrag von: Grave am 09 Juli 2015, 15:52:40
Würe das auf 0 setzen dann so aussehen?

Zitatattr Gaszaehler userReadings Verbrauch_Gas {ReadingsVal("Gaszaehler",0,0)}
Titel: Antw:[gelöst]Wert wird anstatt einmal 100 mal gelogt
Beitrag von: SvenJust am 10 Juli 2015, 08:35:19
Hallo!

ZitatWüre das auf 0 setzen dann so aussehen?
Nein.

Readings werden mit setreading gesetzt. Der Code zum Setzen lautet dann:
setreading Gaszaehler Verbrauch_Gas 0
Weiteres steht in der Commandref http://fhem.de/commandref_DE.html#setreading

VG
Sven