Hallo,
das nutze ich um auszurechnen ob ein Lüften sinnvoll ist oder nicht.
Gruß
Mike
<?
// Angaben manuell
$temperaturID = 22036 /*[Geräte\Erdgeschoss\Bad\WAT-Bad\Temperatur]*/;
$relfeuchteID = 27283 /*[Geräte\Erdgeschoss\Bad\WAT-Bad\Luftfeuchte]*/;
$absFeuchte_aussenID = 21561 /*[Geräte\Erdgeschoss\Balkon\KLM-Balkon\Abs_Luftfeuchte_Aussen]*/;
$temperatur = GetValue($temperaturID);
$relfeuchte = GetValue($relfeuchteID);
$absFeuchte_aussen = GetValue($absFeuchte_aussenID);
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Instanz herausfinden
$parentID = IPS_GetParent($_IPS['SELF']);
// Variablen anlegen (0 = Boolean; 1 = Integer; 2 = Float; 3 = String)
$Taupunkt_ID = CreateVariableByName($parentID, "Taupunkt", 2, "~Temperature", "Innentemperatur","");
$Taupunktabstand_ID = CreateVariableByName($parentID, "Taupunktabstand", 2, "~Temperature", "Innentemperatur", "");
$Wandtemperatur_ID = CreateVariableByName($parentID, "Wandtemperatur", 2, "~Temperature", "Innentemperatur", "");
$Abs_Luftfeuchte_Innen_ID = CreateVariableByName($parentID, "Abs_Luftfeuchte_Innen", 2, "abs.humidity", "Luftfeuchte", "");
$Schimmel_TF_70_ID = CreateVariableByName($parentID, "Schimmel_TF_70", 2, "~Temperature", "Innentemperatur", "");
$Schimmel_TF_80_ID = CreateVariableByName($parentID, "Schimmel_TF_80", 2, "~Temperature", "Innentemperatur", "");
$AW_Wert_ID = CreateVariableByName($parentID, "AW_Wert", 2, "aw.value", "Information", "");
$Schimmelgefahr_ID = CreateVariableByName($parentID, "Schimmelgefahr", 1, "Schimmel", "Warning", "");
$Lueften_Sinnvoll_ID = CreateVariableByName($parentID, "Lueften_Sinnvoll", 0, "switch.ja_nein", "Information", "");
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Event Anlegen (0 = Variablenaktualisierung, 1 = Variablenänderung, 2 = Grenzüberschreitung. Grenzwert wird über IPS_SetEventTriggerValue festgelegt, 3 = Grenzunterschreitung. Grenzwert wird über IPS_SetEventTriggerValue festgelegt, 4 = bestimmtem Wert. Wert wird über IPS_SetEventTriggerValue festgelegt
// Legt ein Trigger-Event (bei Variablenänderung) für die Variable mit der Objekt-ID ... an (damit dieses Skript hier ausgeführt wird, wenn die Variable sich ändert)
CreateEventTrigger(IPS_GetName($temperaturID), $temperaturID, $_IPS['SELF'], 1);
CreateEventTrigger(IPS_GetName($relfeuchteID), $relfeuchteID, $_IPS['SELF'], 1);
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Variablen für Berechnung
$lueften_sinnvoll = @IPS_GetObjectIDByName("Lueften_Sinnvoll", $parentID);
$dewpointID = @IPS_GetObjectIDByName("Taupunkt", $parentID);
$dewpointdistanceID = @IPS_GetObjectIDByName("Taupunktabstand", $parentID);
$walltemperatureID = @IPS_GetObjectIDByName("Wandtemperatur", $parentID);
$abshumID = @IPS_GetObjectIDByName("Abs_Luftfeuchte_Innen", $parentID);
$abshum_wandID = @IPS_GetObjectIDByName("Abs_Luftfeuchte_Wand", $parentID);
$schimmel70ID = @IPS_GetObjectIDByName("Schimmel_TF_70", $parentID);
$schimmel80ID = @IPS_GetObjectIDByName("Schimmel_TF_80", $parentID);
$schimmelgefahrID = @IPS_GetObjectIDByName("Schimmelgefahr", $parentID);
$awID = @IPS_GetObjectIDByName("AW_Wert", $parentID);
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------
// alle Formeln nach http://www.wettermail.de/wetter/feuchte.html
if( $temperatur >= 0 ){
$a=7.5; $b=237.3;
}else{
$a=7.6; $b=240.7;
}
// Berechnung Taupunkt nach Magnusformel //
//Berechnung Sättigungsdampfdruck
$sdd = 6.1078 * pow(10.0, ( ($a*$temperatur) / ($b+$temperatur) ) );
//Berechnung Dampfdruck
$dd =($relfeuchte/100.0) * $sdd;
//Berechnung Taupunkt
$v =log10 ( ($dd/6.1078) );
$td =($b*$v) / ($a-$v);
$taupunkt =($td*100+0.5) / 100;
SetValue($dewpointID, $taupunkt);
//Berechnung Taupunktabstand
$taupunktdistance = (($temperatur-3)-$taupunkt);
SetValue($dewpointdistanceID, $taupunktdistance);
//Berechnung Wandtemperatur
$walltemperature = ($temperatur-3);
SetValue($walltemperatureID, $walltemperature);
//Berechnung Absolute Feuchte Luft
$absFeuchte = (exp(log(10) * 5) * 18.016/8314.3 * $dd/(273.15 + $temperatur));
SetValue($abshumID, $absFeuchte);
//Lüften sinnvoll berechnen
$differenz = ($absFeuchte - $absFeuchte_aussen);
If ($differenz > 0)
{
SetValue($lueften_sinnvoll, true);
}
Else If ($differenz <= 0)
{
SetValue($lueften_sinnvoll, false);
}
//Berechnung Schimmelgefahr TF70
$v2 =log10 ( ((($relfeuchte/100.0) * $sdd)/(6.1078*0.7)) );
$td2 =($b*$v2) / ($a-$v2);
$tempSchimmel70 =($td2*100+0.5) / 100;
SetValue($schimmel70ID, $tempSchimmel70);
//Berechnung Schimmelgefahr TF80
$v2 =log10 ( ((($relfeuchte/100.0) * $sdd)/(6.1078*0.8)) );
$td2 =($b*$v2) / ($a-$v2);
$tempSchimmel80 =($td2*100+0.5) / 100;
SetValue($schimmel80ID, $tempSchimmel80);
//Berechnung normierte Feuchte (20°C)
$normfeu = $sdd*$relfeuchte/2340;
//Berechnung Schimmelwert aw-Wert
$sdd2 = 6.1078 * pow(10.0, ( ($a*($temperatur-3)) / ($b+($temperatur-3)) ) );
$aw = ($dd/$sdd2);
SetValue($awID, $aw);
if($aw < 0.7)
{
SetValue($schimmelgefahrID,0);
}
if(($aw >= 0.695) and ($aw < 0.795))
{
SetValue($schimmelgefahrID,1);
}
else If ($aw >= 0.795)
{
SetValue($schimmelgefahrID,2);
}
Else
{
SetValue($schimmelgefahrID,0);
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------
/// Funktion um Vaiablen anzulegen
function CreateVariableByName($ParentID, $VarName, $VarTyp, $VarProfile = "", $VarIcon = "",$VarActionScript = "")
{
$VarID = @IPS_GetVariableIDByName($VarName, $ParentID);
if($VarID === false)
{
$VarID = IPS_CreateVariable($VarTyp);
IPS_SetParent($VarID, $ParentID);
IPS_SetName($VarID, $VarName);
IPS_SetInfo($VarID, "This variable was created by script #".$_IPS["SELF"]);
if($VarProfile !== "")
{
IPS_SetVariableCustomProfile($VarID, $VarProfile);
}
if($VarIcon !== "")
{
IPS_SetIcon($VarID, $VarIcon);
}
if($VarActionScript !== "")
{
IPS_SetVariableCustomAction($VarID, $VarActionScript);
}
}
return $VarID;
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Funktion um Event anzulegen
function CreateEventTrigger($EventName, $VarID, $ParentID, $EventTyp)
{
$eid = @IPS_GetEventIDByName($EventName, $ParentID);
if (is_numeric($eid) == false) {
$eid = IPS_CreateEvent(0);
IPS_SetEventTrigger($eid, $EventTyp, $VarID);
IPS_SetParent($eid, $ParentID);
IPS_SetName($eid, $EventName);
IPS_SetEventActive($eid, true);
}
}
?>