FHEM Forum

FHEM => Sonstiges => Thema gestartet von: Schneewa am 18 April 2020, 10:59:47

Titel: [­gelöst] Userreading - Abfrage
Beitrag von: Schneewa am 18 April 2020, 10:59:47
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

Titel: Antw:Userreading - Abfrage
Beitrag von: KernSani am 18 April 2020, 11:03:26
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
Titel: Antw:Userreading - Abfrage
Beitrag von: Schneewa am 18 April 2020, 11:26:00
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

Titel: Userreading - Abfrage
Beitrag von: KernSani am 18 April 2020, 11:32:22
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
Titel: Antw:Userreading - Abfrage
Beitrag 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
Titel: Antw:Userreading - Abfrage
Beitrag von: Wuppi68 am 18 April 2020, 11:39:14
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
Titel: Antw:Userreading - Abfrage
Beitrag von: Schneewa am 18 April 2020, 12:04:10
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....



Titel: Antw:Userreading - Abfrage
Beitrag von: Otto123 am 18 April 2020, 12:29:24
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
Titel: Antw:Userreading - Abfrage
Beitrag von: frank am 18 April 2020, 12:36:18
normale klammern statt eval sollte eigentlich auch funktionieren.
Titel: Antw:Userreading - Abfrage
Beitrag von: Otto123 am 18 April 2020, 12:43:00
@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)
Titel: Antw:Userreading - Abfrage
Beitrag von: Schneewa am 18 April 2020, 12:46:32
Hi Otto123

funktioniert und vielen Dank