Dewpoint: Unterschied zwischen den Versionen

Aus FHEMWiki
(Code korrigiert)
(Teilweise ergänzt (noch unvollständig); Code-Beispiel auf Source-Formatierung umgestellt)
Zeile 8: Zeile 8:
|ModOwner=Willi Herzig}}
|ModOwner=Willi Herzig}}


Dewpoint oder Taupunkt
Das Modul [[dewpoint]] bietet Funktionen im Zusammenhang mit der Taupunktberechnung an. Die verfügbaren Funktionen, über einen Parameter bei der Definition gesteuert, sind
* dewpoint (Taupunkt)
* fan (erzeugt ein Event, das zur Lüftersteuerung verwendet werden kann)
* alarm (erzeugt einen "Schimmel-Alarm", wenn eine Referenztemperatur unter den Taupunkt fällt)
{{todo|Seite muss noch vervollständigt werden --[[Benutzer:Ph1959de|Peter]] ([[Benutzer Diskussion:Ph1959de|Diskussion]]) 13:49, 14. Mär. 2016 (CET)}}
== Voraussetzungen ==
Es muss ein Device geben, das die zur Berechnung erforderlichen Basisdaten ''Temperatur'' und ''Feuchte'' liefert. Die Namen der entsprechenden Readings können bei der Definition des ''dewpoint'' Device angegeben werden.


Um den Taupunkt einfach berechnen zu können, kann neben dem Modul [[dewpoint]] auch folgendes userReading gesetzt werden. Der Code dazu wurde direkt aus dem Modul entnommen.
== Anwendung ==
=== Define ===
Ein ''dewpoint'' Device (siehe auch commandref) wird definiert mit:
:<code>define <name> dewpoint <type> ...</code>
Mögliche Werte und Bedeutung von
;type
*dewpoint - aus ''temp_name'' und ''hum_name'' wird der Taupunkt berechnet und als Reading mit dem Namen ''new_name'' an die durch ''devicename-regex'' spezifizierten Devices hinzugefügt
*fan -
*alarm -
 
Die vollständige Syntax für den Typ ''dewpoint'':
:<code>define <name> dewpoint '''dewpoint''' <devicename-regex> [<temp_name> <hum_name> <new_name>]</code>
wobei die Platzhalter folgende Bedeutung haben:
;name
:der Name des definierten ''dewpoint'' Device
;devicename-regex
:Spezifikation des Geräts / der Geräte, von denen ''temp_name'' und ''hum_name'' gelesen und ''new_name'' geschrieben werden soll
;temp_name
:Name des Readings, das den Temperaturwert enthält; wenn dieser Parameter nicht angegeben ist, wird ''temperature'' angenommen
;hum_name
:Name des Readings, das den Feuchtewert enthält; wenn dieser Parameter nicht angegeben ist, wird ''humidity'' angenommen
;new_name
:Name des Readings, das den berechneten Taupunkt aufnehmen soll; wenn dieser Parameter nicht angegeben ist, wird ''dewpoint'' angenommen
 
=== Attribute ===
 
== Anwendungsbeispiele ==
 
== Alternativen zu diesem Modul ==
Um den Taupunkt einfach berechnen zu können, kann neben dem Modul ''dewpoint'' auch das Folgende userReading gesetzt werden (der Code dazu wurde direkt aus dem Modul entnommen und ist so über das Webinterface einzugeben).


Das Userreading hat den Vorteil, nicht mit anderen Modulen in Konflikt zu geraten.
Das Userreading hat den Vorteil, nicht mit anderen Modulen in Konflikt zu geraten.
:<code>attr <Device> userReadings dew:temperature { my $dp;; my $temperature = ReadingsVal($name,"temperature",0);; my $humidity = ReadingsVal($name,"humidity",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;;}</code>
<source lang="perl">attr <Device> userReadings dew:temperature {  
my $dp;
my $temperature = ReadingsVal($name,"temperature",0);
my $humidity = ReadingsVal($name,"humidity",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;
}</source>
(Das obige Beispiel wurde nach Umstellung auf "Source"-Formatierung noch nicht getestet. --[[Benutzer:Ph1959de|Peter]] ([[Benutzer Diskussion:Ph1959de|Diskussion]]) 13:49, 14. Mär. 2016 (CET))


== Links ==
== Links ==

Version vom 14. März 2016, 13:49 Uhr


dewpoint
Zweck / Funktion
Berechnung des Taupunkts
Allgemein
Typ Hilfsmodul
Details
Dokumentation EN / DE
Modulname 98_dewpoint.pm
Ersteller Willi Herzig
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref!


Das Modul dewpoint bietet Funktionen im Zusammenhang mit der Taupunktberechnung an. Die verfügbaren Funktionen, über einen Parameter bei der Definition gesteuert, sind

  • dewpoint (Taupunkt)
  • fan (erzeugt ein Event, das zur Lüftersteuerung verwendet werden kann)
  • alarm (erzeugt einen "Schimmel-Alarm", wenn eine Referenztemperatur unter den Taupunkt fällt)
Todo: Seite muss noch vervollständigt werden --Peter (Diskussion) 13:49, 14. Mär. 2016 (CET)

Voraussetzungen

Es muss ein Device geben, das die zur Berechnung erforderlichen Basisdaten Temperatur und Feuchte liefert. Die Namen der entsprechenden Readings können bei der Definition des dewpoint Device angegeben werden.

Anwendung

Define

Ein dewpoint Device (siehe auch commandref) wird definiert mit:

define <name> dewpoint <type> ...

Mögliche Werte und Bedeutung von

type
  • dewpoint - aus temp_name und hum_name wird der Taupunkt berechnet und als Reading mit dem Namen new_name an die durch devicename-regex spezifizierten Devices hinzugefügt
  • fan -
  • alarm -

Die vollständige Syntax für den Typ dewpoint:

define <name> dewpoint dewpoint <devicename-regex> [<temp_name> <hum_name> <new_name>]

wobei die Platzhalter folgende Bedeutung haben:

name
der Name des definierten dewpoint Device
devicename-regex
Spezifikation des Geräts / der Geräte, von denen temp_name und hum_name gelesen und new_name geschrieben werden soll
temp_name
Name des Readings, das den Temperaturwert enthält; wenn dieser Parameter nicht angegeben ist, wird temperature angenommen
hum_name
Name des Readings, das den Feuchtewert enthält; wenn dieser Parameter nicht angegeben ist, wird humidity angenommen
new_name
Name des Readings, das den berechneten Taupunkt aufnehmen soll; wenn dieser Parameter nicht angegeben ist, wird dewpoint angenommen

Attribute

Anwendungsbeispiele

Alternativen zu diesem Modul

Um den Taupunkt einfach berechnen zu können, kann neben dem Modul dewpoint auch das Folgende userReading gesetzt werden (der Code dazu wurde direkt aus dem Modul entnommen und ist so über das Webinterface einzugeben).

Das Userreading hat den Vorteil, nicht mit anderen Modulen in Konflikt zu geraten.

attr <Device> userReadings dew:temperature { 
 my $dp;
 my $temperature = ReadingsVal($name,"temperature",0);
 my $humidity = ReadingsVal($name,"humidity",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;
}

(Das obige Beispiel wurde nach Umstellung auf "Source"-Formatierung noch nicht getestet. --Peter (Diskussion) 13:49, 14. Mär. 2016 (CET))

Links