FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Phill am 30 März 2017, 19:41:24

Titel: readingsProxy valueFn seltsames verhalten
Beitrag von: Phill am 30 März 2017, 19:41:24
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?
Titel: Antw:readingsProxy valueFn seltsames verhalten
Beitrag von: viegener am 31 März 2017, 00:21:47
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
Titel: Antw:readingsProxy valueFn seltsames verhalten
Beitrag von: Phill am 31 März 2017, 08:40:12
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 =~ /./);
Titel: Antw:readingsProxy valueFn seltsames verhalten
Beitrag von: viegener am 31 März 2017, 13:23:28
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.

Titel: Antw:readingsProxy valueFn seltsames verhalten
Beitrag von: JoeALLb am 31 März 2017, 21:36:14
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!
Titel: Antw:readingsProxy valueFn seltsames verhalten
Beitrag 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.

gruss
  andre
Titel: Antw:readingsProxy valueFn seltsames verhalten
Beitrag von: Phill am 31 März 2017, 23:38:29
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!
Titel: Antw:readingsProxy valueFn seltsames verhalten
Beitrag von: justme1968 am 31 März 2017, 23:42:07
ist eingecheckt.