[­gelöst] Userreading - Abfrage

Begonnen von Schneewa, 18 April 2020, 10:59:47

Vorheriges Thema - Nächstes Thema

Schneewa

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


KernSani

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
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Schneewa

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


KernSani

#3
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
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

CoolTux

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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Wuppi68

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
FHEM unter Proxmox als VM

Schneewa

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....




Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

frank

normale klammern statt eval sollte eigentlich auch funktionieren.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Otto123

#9
@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)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Schneewa

Hi Otto123

funktioniert und vielen Dank