Notify nach einmal auslösen erst wieder bei Änderung eines Readings ausführen

Begonnen von TomLee, 28 September 2021, 12:11:54

Vorheriges Thema - Nächstes Thema

TomLee

Ok, in der Variable steht aber drin wahr oder falsch, also kann ich einfach nur die Variable für das erste return nehmen und im zweiten return die Variable negieren:

defmod not_sp_Thomas_pushek_isday notify Echo:list_SHOPPING_ITEM:.* {\
my $v= ReadingsVal('sp_Thomas','presence','presence') eq 'present';;\
return fhem('sleep sp_Thomas:presence:.absent sta;;pushek') if isday() && $v;;\
return fhem('pushek') if isday() && !$v ;;}
attr not_sp_Thomas_pushek_isday group Einkaufsliste
attr not_sp_Thomas_pushek_isday room Fernando

setstate not_sp_Thomas_pushek_isday 2021-10-01 11:26:06
setstate not_sp_Thomas_pushek_isday 2021-10-01 11:19:14 state active


edit:

ohne es getestet zu haben noch etwas kürzer:

defmod not_sp_Thomas_pushek_isday notify Echo:list_SHOPPING_ITEM:.* {\
my $d = isday();
my $v= ReadingsVal('sp_Thomas','presence','presence') eq 'present';;\
return fhem('sleep sp_Thomas:presence:.absent sta;;pushek') if $d && $v;;\
return fhem('pushek') if $d && !$v ;;}
attr not_sp_Thomas_pushek_isday group Einkaufsliste
attr not_sp_Thomas_pushek_isday room Fernando

setstate not_sp_Thomas_pushek_isday 2021-10-01 11:26:06
setstate not_sp_Thomas_pushek_isday 2021-10-01 11:19:14 state active

betateilchen

Da Zuweisen von isday() an eine Variable kannst Du Dir getrost sparen. Es geht nicht um kürzer, sondern um perfomanter.

Hier noch was zum Nachdenken übers Wochenende...


defmod not_sp_Thomas_pushek_isday notify Echo:list_SHOPPING_ITEM:.* { \
return unless isday();; \
if(ReadingsVal('sp_Thomas','presence','presence') eq 'present') \
{ return fhem('sleep sp_Thomas:presence:.absent sta;;pushek');; } else \
{ return fhem('pushek');; }}
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

TomLee

Du hältst an dem unless fest, bei einem anderen Mitlesenden hast du mit Sicherheit kurzzeitig für min. 60 % "CPU"-Auslastung gesorgt 8) ;D , ich hab das gestern Abend ausprobiert und es sprach eigentlich nichts dagegen if !isday zu verwenden oder doch ?

Ist das Beispiel performanter weil gleich Ende ist wenn nicht Tag ?

Du magst das gewohnt sein mit der Variante von if und den vielen Klammern und vermutlich ging es dir nur darum diesen Ansatz aufzuzeigen, mir gefällts irgendwie in dem Fall weniger, spricht was dagegen hier einfach den ternären Operator zu verwenden ? Dann wäre das auch kurz und knapp in dem notify, weil ich noch nicht weiß ob ich das auslagere.

betateilchen

Zitat von: TomLee am 02 Oktober 2021, 15:23:42
mit Sicherheit kurzzeitig für min. 60 % "CPU"-Auslastung gesorgt

Quatsch. "unless ..." ist nichts anderes als Dein "if !..." bzw. "if not ..."

https://www.perltutorial.org/perl-unless/

Zitat von: TomLee am 02 Oktober 2021, 15:23:42
Du magst das gewohnt sein mit der Variante von if und den vielen Klammern

Das hat nichts mit Gewohnheit zu tun, sondern mit (Programmier-)Logik.

Mach was Du willst, zur Not bleib halt auch bei Deinem Spaghetti-Code


--
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

TomLee

Unsinn oder nicht, ich halts fest:

Für die die sich mit einem Nudelgericht zufrieden geben:

defmod not_sp_Thomas_pushek_isday notify Echo:list_SHOPPING_ITEM:.* {\
return if !isday();;\
return ReadingsVal('sp_Thomas','presence','presence') eq 'present' ? fhem('sleep sp_Thomas:presence:.absent sta;;pushek') : fhem('pushek');;}