Taupunkt aus zwei DOIF-Angaben berechnen und ausgeben

Begonnen von heiko.ne, 30 Januar 2016, 09:43:01

Vorheriges Thema - Nächstes Thema

heiko.ne

Hallo zusammen,
ich würde gerne aus zwei vorhandenen DOIFs, die jeweils ein reading "state" besitzen (nämlich einmal die Temperatur und einmal die relative Feuchtigkeit), die zugehörige Taupunkttemperatur berechnen.

Dazu meine Idee einem weiteren DOIF mit Namen "Keller_Taupunkt" (oder Dummy?) das folgende userReading hinzuzufügen:

attr Keller_Taupunkt userReadings dewpoint:temperature {my $dp;; my $temperature = ReadingsVal("Keller_Temperatur","state",0);; my $humidity = ReadingsVal("Keller_Feuchtigkeit","state",0);; my $A = 17.2694;; my $B = ($temperature > 0) ? 237.3 : 265.5;; my $es = 610.78 * exp( $A * $temperature / ($temperature + $B) );; my $e = $humidity/ 100 * $es;; if ($e == 0) { Log 1, "Error: dewpoint() e==0: temp=$temperature, hum=$humidity";; return 0;; } my $e1 = $e / 610.78;; my $f = log( $e1 ) / $A;; my $f1 = 1 - $f;; if ($f1 == 0) { Log 1, "Error: dewpoint() (1-f)==0: temp=$temperature, hum=$humidity";; return 0;; } $dp = $B * $f / $f1 ;; sprintf "%.2f", $dp;;}

Die Frage dazu lauten nun:

Wie bekomme ich "Keller_Taupuntk" dazu, dass es das oben gezeigt userReading bei Veränderung der Eingangswerte "Keller_Temperatur" und "Keller_Feuchtigkeit" aktualisiert und mir das entsprechende reading "dewpoint" anzeigt?

Im Anhang ist das derzeitige DIOF zu sehen.

Gruß und Dank,
Heiko


Ellert

DOIF bietet die Möglichkeit über attr <doifname> state {(Berechnung)} aktualisierte Werte anzuzeigen, s. http://fhem.de/commandref_DE.html#DOIF_state

marvin78


heiko.ne

So gelöst:

define Keller_Taupunkttemperatur doif {(([Keller_Feuchtigkeit:state]/100)**(1/8.02)*(109.8+[Keller_Temperatur:state])-109.8)}

Danke für die Hinweise!