Hallo,
ich wollte eigentlich nur aus einer 0 eine 1 machen. Will aber irgendwie nicht klappen.
$VALUE ist immer 1 in den unteren Beispielen.
{ abs($VALUE - 1) }
Ergebnis: 1
{ abs(($VALUE - 1)) }
Ergebnis: 1
{ ($VALUE == 1 ) ? "0" : "1" }
Ergebnis: 1
{ ($VALUE == 1 ) ? "A" : "B" }
Ergebnis: A
{ ($VALUE == 1 ) ? "0" : "B" }
Ergebnis: 1
sobald die Funktion eine 0 ergibt steht im STATE immer 1. ???
Genauer gesagt wird das $Value in STATE geschrieben.
{ 0 }
Ergebnis: 1
So wie es aussieht ignoriert fhem die Perlklammer wenn diese null ergibt. Ist das wirklich so gewollt?
Deine Beobachtung ist richtig, und so ist auch die Implementierung. Es steht zwar so nicht genau in der commandref, aber es geht um den Fall, wenn die valueFn "" also einen leeren String zurückliefert. Oder eben eine leere Rückgabe und diese ist eben der Wert 0 in perl.
Vielleicht könnte man die Dokumentation hier anpassen (oder auch das Verhalten ändern), momentan würde ich aber empfehlen auf andere Werte auszuweichen
Danke für die Antwort.
Ehrlich gesagt verstehe ich nicht warum man die reguläre 0 bei dem Modul verhindern sollte.
Wie wäre es damit? So würden Zahlen generell erlaubt werden.
33_readingsProxy.pm
135c135
< $value = $value_fn if( $value_fn );
---
> $value = $value_fn if( $value_fn or $value_fn =~ /\d/ );
Ein leerer String würde weiterhin einen Passthrough generieren. Was durchaus Sinn macht.
Wie du schon gesagt hast. Es muss sowieso was getan werden, entweder an die Doku ran oder besser den Code der Doku anpassen. ;)
EDIT:
oder so wäre es vielleicht schöner.
135c135
< $value = $value_fn if( $value_fn );
---
> $value = $value_fn if( $value_fn =~ /./);
Wie gesagt kurzfristig würde ich an Deiner Stelle auf andere Werte ausweichen. Ob das Modul geändert wird ist ein Frage, die Andre (justme1968) entscheiden muss. Es stellt sich aber auf jeden Fall die Frage, ob sich jemand auf das jetzige Verhalten verlässt oder ob das vielleicht gar bewusst so gemacht wurde, denn Dein Vorschlag wäre ja eine inkompatible Verhaltensänderung.
wäre das nicht im ELS-> Zweig performanter und würde nur ausgeführt werden, wenn die erste Prüfung fehlschlägt?
Ich denke jedenfalls, dass dies unbedingt geändert werden sollte, da 0 und 1 korrekte Rückgabewerte sein sollten und diese in Plots besser darstellbar sind wie alle alternativen!
schau mal ob es mit$value = $value_fn if( $value_fn ne '' );
macht was du willst.
gruss
andre
Zitat von: justme1968 am 31 März 2017, 22:58:46
schau mal ob es mit$value = $value_fn if( $value_fn ne '' );
macht was du willst.
Ja funktioniert!
ist eingecheckt.