FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Holgi0815 am 20 Dezember 2013, 12:05:45

Titel: Runden mit fhem oder perl
Beitrag von: Holgi0815 am 20 Dezember 2013, 12:05:45
Moin moin,

wie der Betreff schon sagt: wie runde ich denn?
ich schreibe mit "setreading" aus einem notify in einen dummy (eine Durchschnittsberechnung). Dabei kommen 0-4 Nachkommastellen raus, mir würde aber eine völlig reichen.
...
my $Temp = ( $Temp1 + $Temp2 + $Temp3 + $Temp4 ) / 4;
...
fhem "setreading dy_Innen_Durchschnitt temperature $Temp";

schaffe ich das mit "Bordmitteln" direkt im notify, oder ist das eine eigene Funktion wert?

http://perl-howto.de/2008/11/zahlen-runden-mit-mathround.html (http://perl-howto.de/2008/11/zahlen-runden-mit-mathround.html) wäre dann wohl mein Startpunkt.

Danke für jeden tipp
Holger
Titel: Antw:Runden mit fhem oder perl
Beitrag von: Joachim am 20 Dezember 2013, 12:13:07
$Temp   = sprintf("%.1f",$Temp);

ist aber nicht kaufmännisch gerundet, sondern nur Nackommastellen abgeschnitten
Titel: Antw:Runden mit fhem oder perl
Beitrag von: Markus Bloch am 20 Dezember 2013, 12:28:09


     Aufrunden
    $ceil   = POSIX::ceil(3.5);                        # 4

    Abrunden
    $floor  = POSIX::floor(3.5);                       # 3

    Runden
    $round = Math::Round::round(3.5);                       # 4



Viele Grüße

Markus
Titel: Antw:Runden mit fhem oder perl
Beitrag von: Markus Bloch am 20 Dezember 2013, 12:32:40
und für eine Nachkommastelle:


$value = Math::Round::nearest('0.1','3.2456')    # 3.2
Titel: Antw:Runden mit fhem oder perl
Beitrag von: Holgi0815 am 20 Dezember 2013, 12:56:04
Man, seid Ihr schnell!!

Danke, das klappt!
so sieht der nf jetzt aus
{
use Math::Round qw/round/;
...
my $Temp = ( $Temp1 + $Temp2 + $Temp3 + $Temp4 ) / 4;
$Temp = Math::Round::nearest('0.1',$Temp);


ohne das use gabs logischerweise noch dies:
"nf_Set_Innen_Durchschnitt return value: Undefined subroutine &Math::Round::round called at (eval 1675) line 14."

Danke Holger
Titel: Antw:Runden mit fhem oder perl
Beitrag von: DerJens am 23 November 2014, 15:36:34
Ich danke für die Anleitung und füge noch eine kleine Ergänzung hinzu:

Falls Math::Round nicht gefunden wird, fehlt die Perl-Bibliothek.
sudo apt-get install libmath-round-perl

Aussagekräftige Beispiele, wie mit Perl gerundet wird, habe ich hier gefunden: http://perl-howto.de/2008/11/zahlen-runden-mit-mathround.html (http://perl-howto.de/2008/11/zahlen-runden-mit-mathround.html)

Das funktioniert dann auch in einem Userreading:
Tagesverbrauch { use Math::Round qw/nearest/; ReadingsVal("Gas","Tagesverbrauch",0) + nearest('0.01', ReadingsVal("Gas","kWh",0)*0.0458); }
Titel: Antw:Runden mit fhem oder perl
Beitrag von: herrmannj am 23 November 2014, 15:42:30
my $Temp = int(0.5 + (( $Temp1 + $Temp2 + $Temp3 + $Temp4 ) / 4));
Titel: Antw:Runden mit fhem oder perl
Beitrag von: harvey1988 am 15 Juli 2016, 17:58:58
Hallo und Entschuldigung das ich dieses Thema nochmal aufwärmen muss.
Aber ich habe folgendes Problem und komme einfach nicht weiter:
Hier mein User Reading:

attr HM_4040A6_T1 userReadings Bodenfeuchte_Balkon { int ( ReadingsVal("HM_4040A6_T1","temperature",0) - 24 ) / 0.327 }

Damit soll die Temperatur in einen Bodenfeuchtewert umgerechnet werden.
Bauanleitung findet man hier:
http://www.stall.biz/project/robuster-bodenfeuchtesensor-fur-den-ausseneinsatz

Jetzt ergibt das halt dann leider:
(55-24)/0,327=94,80122324159021

Es würde mir reichen, wenn einfach hier auf 95 gerundet wird.

Kann mir hier bitte jemand weiterhelfen?
Titel: Antw:Runden mit fhem oder perl
Beitrag von: oniT am 15 Juli 2016, 18:09:45
Hallo,

wenn es nicht so genau sein muss mit Auf- und Abrunden und Dir in Deinem Beispiel auch 94 reicht, dann würde ich nur noch eine Klammer mehr setzen.


attr HM_4040A6_T1 userReadings Bodenfeuchte_Balkon { int (( ReadingsVal("HM_4040A6_T1","temperature",0) - 24 ) / 0.327)}


Gruß
Tino
Titel: Antw:Runden mit fhem oder perl
Beitrag von: Hans Franz am 15 Juli 2016, 18:15:21
Wenn es doch darauf ankommt:
attr HM_4040A6_T1 userReadings Bodenfeuchte_Balkon { round(( ReadingsVal("HM_4040A6_T1","temperature",0) - 24 ) / 0.327,0)

Gruß
Hans
Titel: Antw:Runden mit fhem oder perl
Beitrag von: harvey1988 am 15 Juli 2016, 18:23:34
Hallo Hans,

vielen Dank.

Irgendwo in deiner Syntax muss sich ein Fehler eingeschlichen haben, denn sobald ich mein UserReading so umbaue, wird der Wert nicht mehr berechnet.

Auch vielen Dank an dich @Toni, aber eine richtige Rundung wäre schon cool :-)

Viele Grüße
Titel: Antw:Runden mit fhem oder perl
Beitrag von: Hans Franz am 15 Juli 2016, 18:34:51
ZitatIrgendwo in deiner Syntax muss sich ein Fehler eingeschlichen haben
Yep, die geschweifte Klammer am Ende. Brauch 'ne neue Brille.

Gruß
Hans
Titel: Antw:Runden mit fhem oder perl
Beitrag von: oniT am 15 Juli 2016, 21:21:45
Zitat von: harvey1988 am 15 Juli 2016, 18:23:34
Auch vielen Dank an dich @Toni, aber eine richtige Rundung wäre schon cool :-)

Yep, dann ist die Lösung von Hans die richtige :)

Gruß,
Tino
Titel: Antw:Runden mit fhem oder perl
Beitrag von: harvey1988 am 15 Juli 2016, 21:22:59
Vielen Dank,

nun rennts perfekt.

Hab mich jetzt schon 14 Tage damit geärgert.....

Vielen vielen Dank nochmal  :)

Grüße