Seite 6 von 6

Re: [V4.0 IP5] Wie kann man den Taupunkt in einer Custom-Logik berechnen?

Verfasst: Mo Jul 29, 2024 7:34 am
von ThomasD
Hallo,

ich habe auch schon mal angefangen die Logic zu modifzieren.

Bild

Ohne Hysterese macht die auch was sie soll. Allerdings habe ich vermutlich noch einen Logik Fehler bei der Berechnung der Hysterese, weil sich der Alarm nicht wieder deaktiviert.

Gruß
Thomas

Re: [V4.0 IP5] Wie kann man den Taupunkt in einer Custom-Logik berechnen?

Verfasst: Mo Jul 29, 2024 8:27 am
von hans4711
Hallo @ThomasD ,
welche Funktion haben die beiden Ausgänge?
Wenn ich dich richtig verstanden habe möchtest du nur ein true/false ob der berechnete Taupunkt > dem vorgegebenen Taupunkt ist?

Re: [V4.0 IP5] Wie kann man den Taupunkt in einer Custom-Logik berechnen?

Verfasst: Mo Jul 29, 2024 8:53 am
von ThomasD
Hallo,

ich verwende folgendes:

Code: Alles auswählen

	  //Taupunktalarm
	  ["CalcFormula",["$taupunkt","$TaupunktAlarmTemperatur"], "$TPA", "$FormelTPA"],
	  ["CalcFormula",["$TPA","$Hysterese"],"$Unterschwelle","$FormelHysterese"],
	  ["Comparator" , "$TPA" , "$TaupunktAlarm" ,["$Unterschwelle","$temp"]]

Code: Alles auswählen

	//Formel zur Berechnung offset & Hysterese TaupunktalarmTemperatur
	["$FormelTPA","string","X1+X2"],
	["$FormelHysterese","string","X1-X2"],
Wobei ich mir nicht sicher bin ob die Hysterese Berechnung stimmt. Ohne Hysterese, sprich $Unterschwelle, schaltet der Alarm True/False usw.

Gruß
Thomas

Re: [V4.0 IP5] Wie kann man den Taupunkt in einer Custom-Logik berechnen?

Verfasst: Mo Jul 29, 2024 12:06 pm
von hans4711
Ich habe gestern abend schon mal angefangen die Funktion einzubauen, ich hoffe das ich es heute abend schaffe sie zu finalisieren. Bei mir gibt es aber dann nur einen Alarmausgang, daher die Frage für was bei dir die beiden Ausgänge sind?

Re: [V4.0 IP5] Wie kann man den Taupunkt in einer Custom-Logik berechnen?

Verfasst: Mo Jul 29, 2024 1:15 pm
von ThomasD
Ich dachte die eingestellte Taupunktalarmtemperatur und halt den Alarm auszugeben. Wie gesagt ohne hysterese geht’s auch. Da schaltet der Ausgang.

Re: [V4.0 IP5] Wie kann man den Taupunkt in einer Custom-Logik berechnen?

Verfasst: Mo Jul 29, 2024 1:51 pm
von hans4711
Ich schaue mal was ich heute abend hin bekomme

Re: [V4.0 IP5] Wie kann man den Taupunkt in einer Custom-Logik berechnen?

Verfasst: Di Jul 30, 2024 8:28 am
von ThomasD
Hallo @hans4711 ,

ich habe das jetzt nochmal etwas modifiziert, da ich einen Denkfehler drin hatte.
Jetzt schaltet der Taupunktalarm innerhalb der Regeln.
Vielleicht kannst du mal drüber schauen.

! noch nicht ausgiebig getestet !

Code: Alles auswählen

/**
 * Logik zum Berechnen des Taupunkts. Der Taupunkt ist ein guter Wert um Aussenluft und Innenluft miteinander zu vergleichen um zu prüfen ob Lüften zur Feuchtigkeitsreduktion sinnvoll ist.
 * Die Entstehtung der Logik wurde hier besprochen:https://forum.timberwolf.io/viewtopic.php?f=24&t=4725
 * Die Formeln wurden von folgendem Post abgeleitet: http://dl8aap.koch-carsten.de/2020/07/taupunkt-berechnen/
 * Erklärung der Variablen aus der ursprünglichen Formel
 * var t = temperature;
* var r = humidity;
* var tp = 0.000;
* // Konstante
* var mw = 18.016; //Molekulargewicht des Wasserdampfes (kg/kmol)
* var gk = 8314.3; // universelle Gaskonstante (J/(kmol*K))
* var t0 = 273.15; // Absolute Temperatur von 0 °C (Kelvin)
* var tk = t + t0; // Temperatur in Kelvin
 
* Temp größer gleich 0 Grad:
*     a = 7.5;
*     b = 237.3;
* Temp kleiner 0 Grad:
*     a = 7.6;
*     b = 240.7;
*
* V2: Integration Berechnung absoute Luftfeuchtigkeit in g/m3
* Formel wurde hier entnommen: https://carnotcycle.wordpress.com/2012/08/04/how-to-convert-relative-humidity-to-absolute-humidity/
 */

{
  "_Meta": { // Optional
    "Description": "",
    "Version": "2.0",
    "Icon": "" // format: "data:image/svg+xml;base64,ENCODED_FILE"
  },
  "Input": [
    ["Temperatur","Temperatur des zu berechnenden Raumes","$temp","c" ],
    ["Luftfeuchtigkeit","Luftfeuchtigkeit des zu berechnenden Raumes","$feuchte","c" ],
	["Referenz Temperatur","Temperaturbezug für Taupunkt z.B. Fussbodentemperatur","$RefTemp","c" ],
	["Offset TPA","Offeset zum Taupunkt für Alarm","$TaupunktAlarmTemperatur","c" ],
	["Hysterese TPA","Hysterese","$Hysterese","c"]
  ],
  "Output": [
    ["Taupunkt","Berechneter Taupunkt","$taupunkt","a"],
    ["Absolute Luftfeuchtigkeit","Berechnete Absolute Luftfeuchtigkeit in g/m3","$absfeuchte","a"],
	["TPA Temp.","Taupunkt Alarm Temperatur","$TPA","a"],
	//Unterschwelle nur für DEBUGGING
	//["Unterschwelle (Temp).","Anzeige Unterschwelle nur Temporär","$Unterschwelle","a"],
	["Taupunktalarm","Taupunktalarm Ausgabe","$TaupunktAlarm","c"]
  ],
  "Level": [
      //Ein-Ausgänge
    ["$temp","float",0.0],
    ["$feuchte","float",0.0],
    ["$taupunkt","float",0.0],
    ["$absfeuchte","float",0.0],
    ["$RefTemp","float",0.0],
	["$TaupunktAlarmTemperatur","float",0.0],
	["$TaupunktAlarm","bool",false],
	["$Hysterese","float",0.0],
	
	
    
    //Formeln
    ["$formelinbenutzung","string","xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"], //Reservierung des Speicherplatzes, sonst werden nur 14 Zeichen reserviert
    
    //Formel jeweils einmal mit den Konstanten für Temperaturen >0 Grad, und einmal für Temperaturen <0 Grad    
    //var sdd = 6.1078 * Math.pow(10, (a*t)/(b+t));
    ["$formel1plus","string","6.1078 * 10^((7.5*X1)/(237.3+X1))"],
    ["$formel1minus","string","6.1078 * 10^((7.6*X1)/(240.7+X1))"],
    
    //var dd = sdd * (r/100);
    ["$formel2plus","string","X1 * (X2/100)"],
    ["$formel2minus","string","X1 * (X2/100)"],
    
    //var af = Math.pow(10,5) * mw/gk * dd/tk;
    ["$formel3plus","string","10^5 * 18.016/8314.3 * X1/(X2 + 273.15)"],
    ["$formel3minus","string","10^5 * 18.016/8314.3 * X1/(X2 + 273.15)"],

    //var v = Math.log10(dd/6.1078);
    ["$formel4plus","string","log10(X1/6.1078)"],
    ["$formel4minus","string","log10(X1/6.1078)"],
    
    //tp = Math.round( ((b*v) / (a-v))*100)/100;
    ["$formel5plus","string","((237.3*X1) / (7.5-X1))*100/100"],
    ["$formel5minus","string","((240.7*X1) / (7.6-X1))*100/100"],
    
    //Formel zur Berechnung der abs. Feuchte
    ["$formelabsfeuchte","string","(6.112 * exp((17.67 * X1)/(X1+243.5)) * X2 * 18.02)/((273.15+X1) * 100 * 0.08314)"],
	
	//Formel zur Berechnung offset TaupunktalarmTemperatur
	["$FormelTPA","string","X1+X2"],
	["$FormelHysterese","string","X1+X2"],
    
    //Variablen für die Berechnungen
    ["$schwellwert","float",0.0],
    ["$schwellwertueberschreitung","bool",false],
    ["$schwellwertueberschreitungint","integer",0],
    ["$sdd","float",0.0],
    ["$dd","float",0.0],
    ["$af","float",0.0],
    ["$v","float",0.0],
	["$TPA","float",0.0],
	["$Unterschwelle","float",0.0]
	
  ],
  
  "Module": [
      //Comparator, prüft ob die Temp postiv oder negativ ist, True bei Plusgraden, False bei Minusgraden
      ["Comparator" , "$temp" , "$schwellwertueberschreitung" , "$schwellwert"],

      //Formel 1
      ["Multiplexer", ["$formel1minus", "$formel1plus"],"$formelinbenutzung","$schwellwertueberschreitung"],
      ["CalcFormula",["$temp"], "$sdd", "$formelinbenutzung"],

      //Formel 2
      ["Multiplexer", ["$formel2minus", "$formel2plus"],"$formelinbenutzung","$schwellwertueberschreitung"],
      ["CalcFormula",["$sdd","$feuchte"], "$dd", "$formelinbenutzung"],

      //Formel 3
      ["Multiplexer", ["$formel3minus", "$formel3plus"],"$formelinbenutzung","$schwellwertueberschreitung"],
      ["CalcFormula",["$dd","$temp"], "$af", "$formelinbenutzung"],

      //Formel 4
      ["Multiplexer", ["$formel4minus", "$formel4plus"],"$formelinbenutzung","$schwellwertueberschreitung"],
      ["CalcFormula",["$dd"], "$v", "$formelinbenutzung"],
      
      //Formel 5      
      ["Multiplexer", ["$formel5minus", "$formel5plus"],"$formelinbenutzung","$schwellwertueberschreitung"],
      ["CalcFormula",["$v"], "$taupunkt", "$formelinbenutzung"],
      
      //Abs. Feuchte
      ["CalcFormula",["$temp","$feuchte"], "$absfeuchte", "$formelabsfeuchte"],

	  //Taupunktalarm
	  ["CalcFormula",["$taupunkt","$TaupunktAlarmTemperatur"], "$TPA", "$FormelTPA"],
	  ["CalcFormula",["$TPA","$Hysterese"],"$Unterschwelle","$FormelHysterese"],
	  ["Comparator" , "-$RefTemp" , "$TaupunktAlarm" ,["-$Unterschwelle","-$TPA"]]
      
  ]
}
Bild

Gruß
Thomas

Re: [V4.0 IP5] Wie kann man den Taupunkt in einer Custom-Logik berechnen?

Verfasst: Di Jul 30, 2024 8:40 pm
von hans4711
Hallo @ThomasD,

ich habe die Logik getestet, funktioniert bei mir einwandfrei. Ich habe mal noch den Text und die Version angepasst.

Hier jetzt die offizielle Version 3:

Code: Alles auswählen

/**
 * Logik zur Berechnung von Taupunkt und absoluter Luftfeuchtigkeit. Zusätzlich kann ein Taupunktalarm anhand eines Referenzwerts ausgegeben werden.
 * Anwendungsfälle: 
      * Lüftung zur Reduktion von Feuchtigkeit im Haus durch Vergleich von Aussenluft und Raumluft
      * Alarm wenn in einem Raum der Taupunkt über die Raumtemperatur steigt und damit Kondensat entstehen kann, dazu auf den Eingang "Referenztemperatur" die Raumtemperatur hinzufügen. Über Offset TPA kann der Alarm schon z.B. 2 Kelvin vor erreichen des Taupunkts ausgelöst werden. Um ein "Zappeln" bei leichten Änderungen nahe am Taupunkt zu vermeiden kann eine Hysterese zum Ausschalten des Taupunktalarms vorgegeben werden.
* 
*
 * Die Entstehtung der Logik wurde hier besprochen:https://forum.timberwolf.io/viewtopic.php?f=24&t=4725
 * Die Formeln wurden von folgendem Post abgeleitet: http://dl8aap.koch-carsten.de/2020/07/taupunkt-berechnen/
 * Die Logikerweiterung um den Taupunktalarm wurde vom User ThomasD entwickelt
*
*
 * Erklärung der Variablen aus der ursprünglichen Formel
 * var t = temperature;
* var r = humidity;
* var tp = 0.000;
* // Konstante
* var mw = 18.016; //Molekulargewicht des Wasserdampfes (kg/kmol)
* var gk = 8314.3; // universelle Gaskonstante (J/(kmol*K))
* var t0 = 273.15; // Absolute Temperatur von 0 °C (Kelvin)
* var tk = t + t0; // Temperatur in Kelvin
 
* Temp größer gleich 0 Grad:
*     a = 7.5;
*     b = 237.3;
* Temp kleiner 0 Grad:
*     a = 7.6;
*     b = 240.7;
*
* V2: Integration Berechnung absoute Luftfeuchtigkeit in g/m3
* Formel wurde hier entnommen: https://carnotcycle.wordpress.com/2012/08/04/how-to-convert-relative-humidity-to-absolute-humidity/
* V3: Integration eines Taupunktalarms durch den User ThomasD
 */

{
  "_Meta": { // Optional
    "Description": "",
    "Version": "2.0",
    "Icon": "" // format: "data:image/svg+xml;base64,ENCODED_FILE"
  },
  "Input": [
    ["Temperatur","Temperatur des zu berechnenden Raumes","$temp","c" ],
    ["Luftfeuchtigkeit","Luftfeuchtigkeit des zu berechnenden Raumes","$feuchte","c" ],
	["Referenz Temperatur","Temperaturbezug für Taupunkt z.B. Fussbodentemperatur","$RefTemp","c" ],
	["Offset TPA","Offeset zum Taupunkt für Alarm","$TaupunktAlarmTemperatur","c" ],
	["Hysterese TPA","Hysterese","$Hysterese","c"]
  ],
  "Output": [
    ["Taupunkt","Berechneter Taupunkt","$taupunkt","a"],
    ["Absolute Luftfeuchtigkeit","Berechnete Absolute Luftfeuchtigkeit in g/m3","$absfeuchte","a"],
	["TPA Temp.","Taupunkt Alarm Temperatur","$TPA","a"],
	//Unterschwelle nur für DEBUGGING
	//["Unterschwelle (Temp).","Anzeige Unterschwelle nur Temporär","$Unterschwelle","a"],
	["Taupunktalarm","Taupunktalarm Ausgabe","$TaupunktAlarm","c"]
  ],
  "Level": [
      //Ein-Ausgänge
    ["$temp","float",0.0],
    ["$feuchte","float",0.0],
    ["$taupunkt","float",0.0],
    ["$absfeuchte","float",0.0],
    ["$RefTemp","float",0.0],
	["$TaupunktAlarmTemperatur","float",0.0],
	["$TaupunktAlarm","bool",false],
	["$Hysterese","float",0.0],
	
	
    
    //Formeln
    ["$formelinbenutzung","string","xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"], //Reservierung des Speicherplatzes, sonst werden nur 14 Zeichen reserviert
    
    //Formel jeweils einmal mit den Konstanten für Temperaturen >0 Grad, und einmal für Temperaturen <0 Grad    
    //var sdd = 6.1078 * Math.pow(10, (a*t)/(b+t));
    ["$formel1plus","string","6.1078 * 10^((7.5*X1)/(237.3+X1))"],
    ["$formel1minus","string","6.1078 * 10^((7.6*X1)/(240.7+X1))"],
    
    //var dd = sdd * (r/100);
    ["$formel2plus","string","X1 * (X2/100)"],
    ["$formel2minus","string","X1 * (X2/100)"],
    
    //var af = Math.pow(10,5) * mw/gk * dd/tk;
    ["$formel3plus","string","10^5 * 18.016/8314.3 * X1/(X2 + 273.15)"],
    ["$formel3minus","string","10^5 * 18.016/8314.3 * X1/(X2 + 273.15)"],

    //var v = Math.log10(dd/6.1078);
    ["$formel4plus","string","log10(X1/6.1078)"],
    ["$formel4minus","string","log10(X1/6.1078)"],
    
    //tp = Math.round( ((b*v) / (a-v))*100)/100;
    ["$formel5plus","string","((237.3*X1) / (7.5-X1))*100/100"],
    ["$formel5minus","string","((240.7*X1) / (7.6-X1))*100/100"],
    
    //Formel zur Berechnung der abs. Feuchte
    ["$formelabsfeuchte","string","(6.112 * exp((17.67 * X1)/(X1+243.5)) * X2 * 18.02)/((273.15+X1) * 100 * 0.08314)"],
	
	//Formel zur Berechnung offset TaupunktalarmTemperatur
	["$FormelTPA","string","X1+X2"],
	["$FormelHysterese","string","X1+X2"],
    
    //Variablen für die Berechnungen
    ["$schwellwert","float",0.0],
    ["$schwellwertueberschreitung","bool",false],
    ["$schwellwertueberschreitungint","integer",0],
    ["$sdd","float",0.0],
    ["$dd","float",0.0],
    ["$af","float",0.0],
    ["$v","float",0.0],
	["$TPA","float",0.0],
	["$Unterschwelle","float",0.0]
	
  ],
  
  "Module": [
      //Comparator, prüft ob die Temp postiv oder negativ ist, True bei Plusgraden, False bei Minusgraden
      ["Comparator" , "$temp" , "$schwellwertueberschreitung" , "$schwellwert"],

      //Formel 1
      ["Multiplexer", ["$formel1minus", "$formel1plus"],"$formelinbenutzung","$schwellwertueberschreitung"],
      ["CalcFormula",["$temp"], "$sdd", "$formelinbenutzung"],

      //Formel 2
      ["Multiplexer", ["$formel2minus", "$formel2plus"],"$formelinbenutzung","$schwellwertueberschreitung"],
      ["CalcFormula",["$sdd","$feuchte"], "$dd", "$formelinbenutzung"],

      //Formel 3
      ["Multiplexer", ["$formel3minus", "$formel3plus"],"$formelinbenutzung","$schwellwertueberschreitung"],
      ["CalcFormula",["$dd","$temp"], "$af", "$formelinbenutzung"],

      //Formel 4
      ["Multiplexer", ["$formel4minus", "$formel4plus"],"$formelinbenutzung","$schwellwertueberschreitung"],
      ["CalcFormula",["$dd"], "$v", "$formelinbenutzung"],
      
      //Formel 5      
      ["Multiplexer", ["$formel5minus", "$formel5plus"],"$formelinbenutzung","$schwellwertueberschreitung"],
      ["CalcFormula",["$v"], "$taupunkt", "$formelinbenutzung"],
      
      //Abs. Feuchte
      ["CalcFormula",["$temp","$feuchte"], "$absfeuchte", "$formelabsfeuchte"],

	  //Taupunktalarm
	  ["CalcFormula",["$taupunkt","$TaupunktAlarmTemperatur"], "$TPA", "$FormelTPA"],
	  ["CalcFormula",["$TPA","$Hysterese"],"$Unterschwelle","$FormelHysterese"],
	  ["Comparator" , "-$RefTemp" , "$TaupunktAlarm" ,["-$Unterschwelle","-$TPA"]]
      
  ]
}
@Parsley Könntest du bitte auf der ersten Seite nochmal auf diesen Post verlinken? Hier wird noch auf den Post 37 Version 2 verlinkt. Vielen Dank

Re: [V4.0 IP5] Wie kann man den Taupunkt in einer Custom-Logik berechnen?

Verfasst: Mi Jul 31, 2024 1:47 pm
von Parsley
Moin
Soeben erledigt. 8-)

Re: [V4.0 IP5] Wie kann man den Taupunkt in einer Custom-Logik berechnen?

Verfasst: Mi Jul 31, 2024 3:51 pm
von StefanW
Hallo Hans,
hans4711 hat geschrieben: Di Jul 30, 2024 8:40 pmHier jetzt die offizielle Version 3:
Merci. Tolle Arbeit.

Hier die (inoffizielle) grafische Darstellung des künftigen Logik-Editors (hat Deinen Code eingelesen, Positionierung natürlich von Hand, ist noch Pre-Alpha Version, kann noch fehlerhaft sein, da nicht alle Module "drin" sind):


Bild


Geplant ist das mit der V5 im Winter. Wird jedoch nur mit einer V 5 Lizenz freigeschaltet werden, ist nicht Bestandteil freier Updates. Wer uns bei so einer aufwändigen Entwicklung unterstützen will, kauft bitte einen Wartungsvertrag für Lizenzen.


lg

Stefan