[gelöst] userReadings ohne Event möglich?

Begonnen von FhemPiUser, 07 August 2019, 19:58:16

Vorheriges Thema - Nächstes Thema

FhemPiUser

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?

rudolfkoenig

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.

frank

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.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

rudolfkoenig

Ich habe die Logzeile auf  "attr global verbose 5" eingeschraenkt.

frank

FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

FhemPiUser

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!

justme1968

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. 
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968