[gelöst]Wert wird anstatt einmal 100 mal gelogt

Begonnen von Grave, 09 Juli 2015, 15:00:21

Vorheriges Thema - Nächstes Thema

Grave

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

SvenJust

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
FTUI, Raspberry PI/SSD, CUL CC1101, HMLAN, 10x HM-LC-Bl1PBU-FM, HM-LC-Sw4-WM (KWL Pluggit P300), HM-WDS30-OT2-SM (Sonnensensor), HM-Sec-SCo, LW-12 Wifi LED, CUL Selbstbau nanoCUL 433 (IT), Arduino (S0-Stromverbrauch), OW DS2480 (OWX_ASYNC) 8x DS18B20, MQTT (Fröling P4), MYSENSORS (Roto Rollläden)

Grave

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.

Grave

Würe das auf 0 setzen dann so aussehen?

Zitatattr Gaszaehler userReadings Verbrauch_Gas {ReadingsVal("Gaszaehler",0,0)}

SvenJust

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
FTUI, Raspberry PI/SSD, CUL CC1101, HMLAN, 10x HM-LC-Bl1PBU-FM, HM-LC-Sw4-WM (KWL Pluggit P300), HM-WDS30-OT2-SM (Sonnensensor), HM-Sec-SCo, LW-12 Wifi LED, CUL Selbstbau nanoCUL 433 (IT), Arduino (S0-Stromverbrauch), OW DS2480 (OWX_ASYNC) 8x DS18B20, MQTT (Fröling P4), MYSENSORS (Roto Rollläden)