FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: heiko.ne am 30 Januar 2016, 09:43:01

Titel: Taupunkt aus zwei DOIF-Angaben berechnen und ausgeben
Beitrag von: heiko.ne am 30 Januar 2016, 09:43:01
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

Titel: Antw:Taupunkt aus zwei DOIF-Angaben berechnen und ausgeben
Beitrag von: Ellert am 30 Januar 2016, 12:28:46
DOIF bietet die Möglichkeit über attr <doifname> state {(Berechnung)} aktualisierte Werte anzuzeigen, s. http://fhem.de/commandref_DE.html#DOIF_state
Titel: Antw:Taupunkt aus zwei DOIF-Angaben berechnen und ausgeben
Beitrag von: marvin78 am 30 Januar 2016, 12:30:16
Eine Alternative wäre das Modul dewpoint.
Titel: Antw:Taupunkt aus zwei DOIF-Angaben berechnen und ausgeben
Beitrag von: heiko.ne am 30 Januar 2016, 13:53:57
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!