Hi all
ich würde gerne in einem Userreading 2 Abfragen durchführen
Es soll die Spannung abgefragt und diese in Prozent umgewandelt werden - wenn aber die Prozentzahl über 100 steigt oder unter 0 fällt soll der Wert überschrieben werden
batteryPercent {my $wert = (ReadingsVal("Terrassentuer_open_closed_Enocean","voltage","")-2.2+0.2)/0.2*100; ($wert > 100) ? '100' : $wert}
leider funktioniert das ganze nur bei einer Abfrage
wenn ich eine 2 hinzufüge funktioniert leider die Abfrage nicht mehr
batteryPercent {my $wert = (ReadingsVal("Terrassentuer_open_closed_Enocean","voltage","")-2.2+0.2)/0.2*100; ($wert > 100) ? '100' : $wert; ($wert < 0) ? '0' : $wert;}
hat jemand von den Experten einen Idee
besten Dank
Da du nicht sagst, was daran nicht funktioniert ist es ein bisschen ein Ratespiel... Mach mal am Ende einreturn $wert;
Gesendet von iPhone mit Tapatalk
Hi KernSani
vielen Dank für die rasche Antwort
Also wenn ich die 2 Abfrage hinzufüge wird die Erste ignoriert
($wert > 100) ? '100' : $wert; ($wert < 0) ? '0' : $wert;
das bedeutet, dass wenn der Wert über 100 ansteigt - wird diese Abfrage nicht mehr ausgeführt - es wird nur mehr die Abfage kleiner 0 ausgeführt
Setze in der ersten Abfrage mal auf 100, ohne die Anführungszeichen.
Edit: und noch besser: Mit ReadingsNum statt ReadingsVal arbeiten.
Gesendet von iPhone mit Tapatalk
batteryPercent {my $wert = (ReadingsVal("Terrassentuer_open_closed_Enocean","voltage","")-2.2+0.2)/0.2*100; ($wert > 100) ? '100' : ($wert < 0) ? '0' : $wert;}
ungetestet und etwas blauäugig vielleicht
Zitat von: CoolTux am 18 April 2020, 11:33:03
batteryPercent {my $wert = (ReadingsVal("Terrassentuer_open_closed_Enocean","voltage",-2.2+0.2)/0.2*100; ($wert > 100) ? '100' : ($wert < 0) ? '0' : $wert;}
ungetestet und etwas blauäugig vielleicht
ich würde erst einmal klassisch kürzen ;-)
-2.2+0.2 --> +2
/0.2*100 --> *500
Hi all
vielen Dank an alle
@ KernSani hat leider nicht zum Erfolg geführt
@ CoolTux - jetzt wird bei einem Wert unter 0 leider immer 100 ausgegeben - das würde bedeuten,dass die 2 Abfrage nicht bearbeitet wird
@ Wuppi68 - das hast du sicher recht ;) - aber hier weiß ich auch später, was ich mir dabei gedacht habe...
gibt es noch ideen....
Ja :)
($wert > 100)?100:eval{$wert < 0?0:$wert}
Getestet ;)
{my $wert=45;;($wert > 100)?100:eval{$wert < 0?0:$wert}}
{my $wert=-45;;($wert > 100)?100:eval{$wert < 0?0:$wert}}
{my $wert=145;;($wert > 100)?100:eval{$wert < 0?0:$wert}}
Ich habe nicht verstanden warum die Rückgabe im "Anschlag" als String erfolgen soll '100' - deswegen habe ich das weggelassen. ;D
Gruß Otto
normale klammern statt eval sollte eigentlich auch funktionieren.
@Frank Da ist er wieder, der Unterschied zwischen Anfänger(ich) und Fortgeschrittenem. Ich habe mir das Konstrukt mit eval{} vor einiger Zeit an einem ganzen Abend mal hart erarbeitet (Versuch/Irrtum) auf sowas einfaches wie () bin ich da nicht gekommen ;D ;D ;D
Immerhin hatten die anwesenden Programmierer keine wirkliche Idee :-* :P :-* 🍻
Ja: funktioniert! Und man kann sogar die Klammern von vorn recyclen :D
$wert > 100?100:($wert < 0?0:$wert)
Hi Otto123
funktioniert und vielen Dank