Naja ich denke: du hast zwar definiert ABER eben nur, wenn bestimmte Bedingungen durchlaufen wurden. Das xy am Ende wird aber IMMER "verwendet". Also einmal "vorne" definieren my $xy=""; und dann später eben zuweisen.
hmm, da ich in allen if-Zweigen (if, elsif und else) $xy definiert habe müsste es eigentlich immer definiert werden, oder habe ich hier einen Denkfehler?
Ich hab es mal mit deinem Hinweis versucht:
actuation_ofen:actuation.* {my $xy=""; my $x1=AttrNum("Set_Hzng_WhnZmar","threshold_ofen_low",1); my $x2=AttrNum("Set_Hzng_WhnZmar","threshold_ofen_high",1); my $v=ReadingsNum("Set_Hzng_WhnZmar","actuation",1,1); if ($v<$x1){my $xy=0} elsif ($v>$x2){my $xy=$v} else {my $xy=(0+(($x2-0)/(($x2-$x1))*($v-$x1)))}; $xy}
Dadurch wird keine Fehlermeldung mehr angezeigt, aber es wird für das Userreading "actuation_ofen" immer nur "" eingetragen, die if-Funktion wird wohl garnicht durchlafen. Nur warum nicht?
ABER: macht ein userReadings bei einem DOIF überhaupt Sinn? Also noch dazu wenn du Werte ANDERER Devices abfrägst/nutzt?
WEIL: ein userReadings wird ja nur "ausgeführt", wenn sich etwas bei dem Device tut, wo es "dranhängt"! Also beim DOIF. Solange beim DOIF nichts passiert, wird auch das userReadings nicht "beachtet"...
Gruß, Joachim
Das passt soweit, in dem DOIF triggere ich auf das eigene Reading "actuation", welches von einem anderem Modul befüllt wird. Das Userreading "actuation_ofen" soll sich nur bei einer aktualisierung des Reading "actuation" aktualisieren.
Ich hab die Berechnung von "actuation_ofen" aus dem DOIF raus und in das Userreading genommen, da ich für "actuation_ofen" eine Interpolation berechne und mir das zu umständlich im DOIF-Bereich war (bzw. hab es dort nicht hinbekommen).