Frage zum userReadings und dem Syntax

Begonnen von M.Piet, 13 Juli 2017, 08:09:21

Vorheriges Thema - Nächstes Thema

M.Piet

Hallo Zusammen,

ich tu mich noch ein wenig schwer mit dem Syntax. Es geht um ein Userreading meiner 1-wire Sensoren.

Ich erzeuge bereits ein Userreading. Dieses filtert mir 85° Werte raus:
cleanTemp {my $temp = ReadingsNum("DS18S20_F79A0C030800","temperature",85); return $temp unless($temp == 85); return ReadingsNum("DS18S20_F79A0C030800","cleanTemp",-273) }

Ich nutze auch bei anderen Geräten ein userReading um die Werte in den Nachkommastellen zu kürzen:
cleanTemp_test { int ( 10 * ReadingsVal("DS18S20_F79A0C030800","temperature",0) + 0.5 ) / 10 }

Ich würde gern beides auf einmal machen. Ich habe diverses ausprobiert, komme aber nicht zu dem Erfolg, dass Werte mit 85° ignoriert werden und gleichzeitig das Reading auf eine Stelle hinter dem Koma gekürzt wird.
Für einige wird das denke ich eine Kleinigkeit sein....vielleicht kann mir jemand helfen...

Danke schon mal.

dev0

Zitat von: M.Piet am 13 Juli 2017, 08:09:21
Ich würde gern beides auf einmal machen. Ich habe diverses ausprobiert, komme aber nicht zu dem Erfolg
Und was erwartest Du jetzt als Antwort? Perlcode, den Du per copy/paste übernehmen kannst?

M.Piet

Nein, das bestimmt nicht. Ich habe mir beim Thema fhem schon sehr viel selbst erarbeitet. :) Es gibt echt prima Doku, Wiki, CommandRef etc.

Aber mit Perl tu ich mich echt sehr schwer. Ich hatte die Hoffnung das man mit einfachen mitteln beide Zeilen verknüpfen kann. Wenn es nicht so einfach ist, muss sich auch keiner groß die Mühe machen.  8)

Ich habe das in der Hoffnung gepostet, das mir noch jemand ein paar Tips geben kann. Den kleinen Schönheitsfehler bekomme ich einfach nicht weg.  :(

CoolTux

Sowohl int() als auch ReadingsVal() sind Funktionen. Man kann verschachtelte Funktionsaufrufe machen.
Jetzt musst Du halt überlegen was brauchst Du zu erst. Die Henne oder das Ei? Und kannst dann den einen Aufruf in den anderen reinarbeiten.
Schreib einfach mal den Aufruf und poste ihn hier. Wir helfen dann.
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

SabineT

es gibt übrigens im FHEM auch die Funktion round (sh. FHEM referenz https://fhem.de/commandref.html#Utils)

CoolTux

Guter Hinweis. Ganz vergessen. Danke
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

dev0

Damit wir diesen Thread schließen können und die Nachwelt vllt. noch etwas davon hat, würde ich folgende Syntax (für den userReadings Def-Editor) vorschlagen:


cleanTemp:temperature { 
  my $t = ReadingsNum("DS18S20_F79A0C030800","temperature",85);
  my $ct = ReadingsNum("DS18S20_F79A0C030800","cleanTemp",-273);
  round($t == 85 ? $ct : $t, 1)
}

M.Piet

Hallo Zusammen,

sorry das ich erst jetzt antworte. Ich war im Urlaub.
Vielen Dank für die Antworten!

Zitat von: dev0 am 15 Juli 2017, 13:56:09

cleanTemp:temperature { 
  my $t = ReadingsNum("DS18S20_F79A0C030800","temperature",85);
  my $ct = ReadingsNum("DS18S20_F79A0C030800","cleanTemp",-273);
  round($t == 85 ? $ct : $t, 1)
}

Danke für deine Mühe! Aber da scheint noch ein Fehler zu sein: seit dem anpassen in dem userReadings Def-Editor wird das Userreading gar nicht mehr geschrieben (siehe Screenshot).

Wenn es aber zu zeitaufwändig wird, kann ich auch mit dem kleinem Schönheitsfehler leben. Ich bekomme das alleine nicht hin, will aber nicht eure Zeit zu sehr in Ansprich nehmen.



CoolTux


cleanTemp:temperature.* { 
  my $t = ReadingsNum("DS18S20_F79A0C030800","temperature",85);
  my $ct = ReadingsNum("DS18S20_F79A0C030800","cleanTemp",-273);
  round($t == 85 ? $ct : $t, 1)
}


Damit sollte es gehen
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

M.Piet

Super, das klappt :)

Vielen dank für die tolle Hilfe!