FHEM Forum

FHEM => Sonstiges => Thema gestartet von: FhemPiUser am 07 August 2019, 19:58:16

Titel: [gelöst] userReadings ohne Event möglich?
Beitrag von: FhemPiUser am 07 August 2019, 19:58:16
Hallo,

ist es möglich bei einem userReadings das Ergebnis zurückzugeben, dass das Reading nicht aktualisiert werden soll, also auch kein Update Event erzeugt wird?

Ich hatte angenommen, dass das geht, wenn im userreading kein Rückgabewert bzw. ein leerer Rückgabewert erfolgt. Das ist aber nicht der Fall.

Im Beispiel unten soll dann z.B. rain nicht aktualisiert werden und damit auch rain_sum nicht ausgeführt werden, wenn rain oder state != 0 sind, es also nicht regnet. Leider wird mit dem Code unten trotzdem ein Event für rain erzeugt mit einem leeren Reading.

rain { if ((ReadingsVal("MeinRegenmesser","rain",0) != 0 ) or (ReadingsVal("MeinRegenmesser","state",0) != 0)) { sprintf("%0.2f",ReadingsVal("MeinRegenmesser","state",0)*0.25);;} }, rain_sum:^rain$ { sprintf("%0.2f",ReadingsVal("MeinRegenmesser","rain",0)+ReadingsVal("MeinRegenmesser","rain_sum",0));; }, r

Im Endeffekt will ich die Anzahl Einträge im Log minimieren, also rain und rain_sum nicht alle 5min ins Log schreiben, wenn es nicht regnet. Event-on-change/update kann ich nicht nutzen, da rain_sum aktualisiert werden muss, wenn z.B. zwei mal hintereinander rain=1 ist (kein change, aber update und >0).

Kann man diese Funktionalität nicht z.B. mit Hilfe eines neuen Parameters (z.B. neuer userReadings modifier) einführen, mit dem eingestellt werden kann, dass ein leerer Rückgabewert zu keinem Event führt?
Titel: Antw:userReadings ohne Event möglich?
Beitrag von: rudolfkoenig am 08 August 2019, 10:50:50
Wenn ich Folgendes ausfuehre:
define d dummy
attr d userReadings rain { undef }
setreading d bla bla
dann seht im Log
Zitat2019.08.08 10:41:04 1: PERL WARNING: d userReadings rain evaluated to undef at fhem.pl line 4688.
2019.08.08 10:41:04 3: eval: { undef }
und es wird weder ein Event generiert, noch das rain Reading angelegt.
Beim wiederholten Ausfuehren von setreading wird kein Log-Eintrag mehr generiert.

Bin noch nicht ueberzeugt, dass fuer die Vermeidung dieser Logzeile sich lohnt, einen neuen userReadings-Modifier einzubauen.
Titel: Antw:userReadings ohne Event möglich?
Beitrag von: frank am 08 August 2019, 11:15:06
es wäre schon schön, wenn diese logzeile bei rückgabe von undef verschwinden würde, da ich auch häufig undef zurückgebe.
Titel: Antw:userReadings ohne Event möglich?
Beitrag von: rudolfkoenig am 08 August 2019, 11:21:46
Ich habe die Logzeile auf  "attr global verbose 5" eingeschraenkt.
Titel: Antw:userReadings ohne Event möglich?
Beitrag von: frank am 08 August 2019, 11:23:31
merci.
Titel: Antw:userReadings ohne Event möglich?
Beitrag von: FhemPiUser am 08 August 2019, 20:45:38
Hallo Rudolf,

stimmt, es geht wenn der Rückgabewert "undef" ist. Kein Rückgabewert reicht nicht.

Nachdem ich ein

else { return undef;; }

eingefügt habe funktioniert es wie gewünscht.

Danke!
Titel: Antw:[gelöst] userReadings ohne Event möglich?
Beitrag von: justme1968 am 09 August 2019, 10:07:04
kein rückgabewert gibt es eigentlich
nicht. ohne return liefet perl den  wert des letzen blocks zurück.

d.h. 'nichts' musst du explizit als undef zurückliefen.