KNX Data Secure Unterstützung
für KNX Logger und KNX Busmonitor
KNX Diagnose Monitor, Import des ETS Projektes deutlich beschleunigt, Suche in der Navigation
Mehr Informationen dazu hier im Forum
Insider Version 6 zur 4.5 jetzt für alle Mitglieder des Insider Clubs installierbar
Alle Infos zum Update im Timberwolf Wiki
[Beantwortet] [V4.0 IP5] Wie kann man den Taupunkt in einer Custom-Logik berechnen?
Forumsregeln
- Denke bitte an aussagekräftige Titel und gebe dort auch die [Firmware] an. Wenn ETS oder CometVisu beteiligt sind, dann auch deren Version
- Bitte mache vollständige Angaben zu Deinem Server, dessen ID und dem Online-Status in Deiner Signatur. Hilfreich ist oft auch die Beschreibung der angeschlossener Hardware sowie die verwendeten Protokolle
- Beschreibe Dein Projekt und Dein Problem bitte vollständig. Achte bitte darauf, dass auf Screenshots die Statusleiste sichtbar ist
- Bitte sei stets freundlich und wohlwollend, bleibe beim Thema und unterschreibe mit deinem Vornamen. Bitte lese alle Regeln, die Du hier findest: https://wiki.timberwolf.io/Forenregeln
-
- Reactions:
- Beiträge: 3903
- Registriert: So Aug 12, 2018 8:44 am
- Hat sich bedankt: 1263 Mal
- Danksagung erhalten: 2213 Mal
Update: Fehler gefunden. Melde mich gleich dazu.
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297
-
- Reactions:
- Beiträge: 4088
- Registriert: So Aug 12, 2018 10:20 am
- Hat sich bedankt: 1415 Mal
- Danksagung erhalten: 1901 Mal
Ahh ich habe mir das auch gerade auf den Schirm gezogen. Wollte mich dann auch nochmal in den Customs üben.
Mal am Ende vergleichen was rauskommt als Lösungsoptionen.
Mal am Ende vergleichen was rauskommt als Lösungsoptionen.
Grüße Göran
#1 Timberwolf 2600 Velvet Red TWS #225 / VPN aktiv / Reboot OK
#2 Timberwolf 2600 Organic Silver TWS #438 / VPN aktiv / Reboot OK
#PV 43,2 kWh Akku; 3x VE MP2 5000; 6,7 kWp > 18 Panele an 4x HM1500 + 1 HM800 WR; Open-DTU
#1 Timberwolf 2600 Velvet Red TWS #225 / VPN aktiv / Reboot OK
#2 Timberwolf 2600 Organic Silver TWS #438 / VPN aktiv / Reboot OK
#PV 43,2 kWh Akku; 3x VE MP2 5000; 6,7 kWp > 18 Panele an 4x HM1500 + 1 HM800 WR; Open-DTU
-
- Reactions:
- Beiträge: 3903
- Registriert: So Aug 12, 2018 8:44 am
- Hat sich bedankt: 1263 Mal
- Danksagung erhalten: 2213 Mal
Hallo zusammen!
Dieses Beispiel hat mir gerade wieder ein paar graue Haare verursacht und zeigt wiedermal eindrucksvoll, wie schnell man einen Fehler/Bug unterstellt, er sich dann anders auflöst.
Von vorne:
1) Gestern habe ich mich um den Hinweis angenommen, dass bool und multiplexer nicht zusammenspielen => in Customs sehr wohl ok.
Dazu habe ich die Formel (mit Fehlerhinweis) eingekürzt und alles funktionierte wunderbar.
2) Den Fehler in der Formel habe ich nicht gefunden. Daher heute weiter gesucht. Formel weiter reduziert und plötzlich ging es. Dachte schon, die Reihenfolge der Argumente spielt eine Rolle.
Parallel in Excel mitgerechnet. Manchmal passte es, mit weiteren Faktoren wieder nicht... BUG?
3) Am Ende ist die Lösung schon fast trivial. Hans verwendet einen Multiplexer für string und kopiert die richtige Formel für die Auswertung weiter.
Dazu wird die Formel auf den String "$formelinbenutzung" kopiert, der allerdings mit "" initialisiert wird. Ihr ahnt es schon....
Offensichtlich werden strings nur mit (vermutlich) 14 Zeichen initialisiert, außer der defaultwert ist länger. Somit wird zur Laufzeit der längere String abgeschnitten und ist dann fehlerhaft.
Das spricht in diesem Fall tatsächlich dafür, dass man diese Logik mit einem Multiplexer für die Parameter aufbaut und nicht mit strings.
lg
Robert
Dieses Beispiel hat mir gerade wieder ein paar graue Haare verursacht und zeigt wiedermal eindrucksvoll, wie schnell man einen Fehler/Bug unterstellt, er sich dann anders auflöst.
Von vorne:
1) Gestern habe ich mich um den Hinweis angenommen, dass bool und multiplexer nicht zusammenspielen => in Customs sehr wohl ok.
Dazu habe ich die Formel (mit Fehlerhinweis) eingekürzt und alles funktionierte wunderbar.
2) Den Fehler in der Formel habe ich nicht gefunden. Daher heute weiter gesucht. Formel weiter reduziert und plötzlich ging es. Dachte schon, die Reihenfolge der Argumente spielt eine Rolle.
Parallel in Excel mitgerechnet. Manchmal passte es, mit weiteren Faktoren wieder nicht... BUG?
3) Am Ende ist die Lösung schon fast trivial. Hans verwendet einen Multiplexer für string und kopiert die richtige Formel für die Auswertung weiter.
Dazu wird die Formel auf den String "$formelinbenutzung" kopiert, der allerdings mit "" initialisiert wird. Ihr ahnt es schon....
Offensichtlich werden strings nur mit (vermutlich) 14 Zeichen initialisiert, außer der defaultwert ist länger. Somit wird zur Laufzeit der längere String abgeschnitten und ist dann fehlerhaft.
Das spricht in diesem Fall tatsächlich dafür, dass man diese Logik mit einem Multiplexer für die Parameter aufbaut und nicht mit strings.
lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297
-
- Reactions:
- Beiträge: 124
- Registriert: Mi Nov 08, 2023 4:24 pm
- Hat sich bedankt: 40 Mal
- Danksagung erhalten: 65 Mal
Hallo Robert,
vielen Dank für deine Arbeit. Ich habe es leider nicht verstanden wo das Problem ist? Kann dann der Multiplexer nur 14 Zeichen verarbeiten?
Ich weiß dann ehrlich gesagt nicht wie die alternative Lösung auszusehen hat.
vielen Dank für deine Arbeit. Ich habe es leider nicht verstanden wo das Problem ist? Kann dann der Multiplexer nur 14 Zeichen verarbeiten?
Ich weiß dann ehrlich gesagt nicht wie die alternative Lösung auszusehen hat.
3500 XL ID:1339
-
- Reactions:
- Beiträge: 2670
- Registriert: Sa Sep 15, 2018 10:26 am
- Wohnort: Kerpen
- Hat sich bedankt: 998 Mal
- Danksagung erhalten: 787 Mal
Hallo Hans,
er kann mehr. Die Variable vom Typ String in einer Custom-Logik muss nur mit einer entsprechenden Länge "initialisiert" werden.
Sieh dazu auch hier: viewtopic.php?f=24&t=3937&p=44019&hilit ... nge#p44019
1. erster Spiegelpunkt.
Beste Grüße
Jens
er kann mehr. Die Variable vom Typ String in einer Custom-Logik muss nur mit einer entsprechenden Länge "initialisiert" werden.
Sieh dazu auch hier: viewtopic.php?f=24&t=3937&p=44019&hilit ... nge#p44019
1. erster Spiegelpunkt.
Beste Grüße
Jens
timberwolf168 | (2600er) | VPN offen | Reboot nach Vereinbarung |
timberwolf1699 | (3500XL) | VPN offen | Reboot jederzeit |
wiregate1250 |
-
- Reactions:
- Beiträge: 3903
- Registriert: So Aug 12, 2018 8:44 am
- Hat sich bedankt: 1263 Mal
- Danksagung erhalten: 2213 Mal
Hallo Hans!
Du musst die Initalisierung
in
ändern, dann kannst du auch längere Formeln verarbeiten (mindestens soviele x wie deine Formel lang ist). Ich weiß aber nicht, ob dann bei 255 Zeichen o.ä. ein Limit ist, denn ich hab es mit den langen Formeln nicht zum Laufen bekommen.
Der bessere Weg ist aus meiner Sicht:
1) Die Formel aufgeteilt in mehrere Strings, allerdings die Zahlen 7.5 bzw. 7.6 und 237.3 bzw. 240.7 als X3 und X4
Wenn kein String kopiert wird, gibt es da mit Stringlängen keine schwer zu findenden Effekte.
2) X1 uns X2 ist dann wie gehabt T und Luftfeuchte
3) X3 und X4 befüllst du per Multiplexer je nachdem ob T>=0 0der T<0 mit den dazugehörigen Zahlen (aber in einem Level, Zahl direkt als Attribut geht nicht!).
4) Am Ende wird mit den richtigen X1-X4 gerechnet - fertig.
lg
Robert
Du musst die Initalisierung
Code: Alles auswählen
["$formelinbenutzung","string",""],
Code: Alles auswählen
["$formelinbenutzung","string","xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"],
Der bessere Weg ist aus meiner Sicht:
1) Die Formel aufgeteilt in mehrere Strings, allerdings die Zahlen 7.5 bzw. 7.6 und 237.3 bzw. 240.7 als X3 und X4
Wenn kein String kopiert wird, gibt es da mit Stringlängen keine schwer zu findenden Effekte.
2) X1 uns X2 ist dann wie gehabt T und Luftfeuchte
3) X3 und X4 befüllst du per Multiplexer je nachdem ob T>=0 0der T<0 mit den dazugehörigen Zahlen (aber in einem Level, Zahl direkt als Attribut geht nicht!).
4) Am Ende wird mit den richtigen X1-X4 gerechnet - fertig.
lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297
-
- Reactions:
- Beiträge: 4088
- Registriert: So Aug 12, 2018 10:20 am
- Hat sich bedankt: 1415 Mal
- Danksagung erhalten: 1901 Mal
Hi zusammen,
habe mich da eben auch noch ein wenig mit beschäftigt.
Die gesamte Berechnung in einer langen Formel hat er soweit getan, es gab aber einen Fehler und um den zu debuggen hatte ich es dann doch etwas weiter aufgedröselt.
Bis ich dann merkte das die beiden Faktoren (a,b), welche da temperaturabhängig ausgewählt wurden, in der Potenzformel vertauscht waren und dann kamen da absurde Zahlen raus bzw. die Logik ist da in Ergebniswertfehler gelaufen (result is NaN or INFINTY).
Aufgeteilt in insgesamt 6 Formeln (2 zur Faktorauswahl und 4 Berechnungen) tut das jetzt in dieser Form:
Ich habe das gegen ein paar Werte mit einem Online-Rechner der ebenfalls diese Formeln verwendete abgeglichen, das passt in etwa. bei -5°C und 25% rFeuchte gab es kleinere Abweichungen.
habe mich da eben auch noch ein wenig mit beschäftigt.
Die gesamte Berechnung in einer langen Formel hat er soweit getan, es gab aber einen Fehler und um den zu debuggen hatte ich es dann doch etwas weiter aufgedröselt.
Bis ich dann merkte das die beiden Faktoren (a,b), welche da temperaturabhängig ausgewählt wurden, in der Potenzformel vertauscht waren und dann kamen da absurde Zahlen raus bzw. die Logik ist da in Ergebniswertfehler gelaufen (result is NaN or INFINTY).
Aufgeteilt in insgesamt 6 Formeln (2 zur Faktorauswahl und 4 Berechnungen) tut das jetzt in dieser Form:
Code: Alles auswählen
{
"_Meta": { // Optional
"Description": "",
"Version": "1.00",
"Icon": "" // format: "data:image/svg+xml;base64,ENCODED_FILE"
},
"Input": [
["Temperatur","Temperatur","$temp","c" ],
["Feuchtigkeit","Feuchtigkeit","$feuchte","c" ]
],
"Output": [
["Taupunkt","Berechneter Taupunkt","$taupunkt","a"],
// Debugging
["Faktor_a", "Auswahlwert X1","$faktor_a","a"],
["Faktor_b", "Auswahlwert X2","$faktor_b","a"],
["sdd", "SDD","$sdd","a"],
["dd", "DD","$dd","a"],
["v", "v","$v","a"]
],
"Level": [
//Ein/Ausgänge
["$temp","float",0.0],
["$feuchte","float",0.0],
["$taupunkt","float",0.0],
//Konstanten Variablen
["$faktor_a","float",0.0],
["$faktor_b","float",0.0],
["$sdd","float",0.0],
["$dd","float",0.0],
["$v","float",0.0],
//Formeln
["$calc_faktor_a","string","(X1>=0)?7.5:7.6"],
["$calc_faktor_b","string","(X1>=0)?237.3:270.7"],
["$calc_sdd","string","6.1078 * 10^((X1*X3)/(X2+X3))"],
["$calc_dd","string","X1/100 * X2"],
["$calc_v","string","log10(X1/6.1078)"],
["$calc_taupunkt","string","X2*X3/(X1-X3)"]
],
"Module": [
["CalcFormula",["$temp"], "$faktor_a", "$calc_faktor_a"],
["CalcFormula",["$temp"], "$faktor_b", "$calc_faktor_b"],
// Berechnung sdd
["CalcFormula",["$faktor_a","$faktor_b","$temp"], "$sdd", "$calc_sdd"],
// Berechnung dd
["CalcFormula",["$feuchte","$sdd"], "$dd", "$calc_dd"],
// Berechnung v
["CalcFormula",["$dd"], "$v", "$calc_v"],
// Berechnung taupunkt
["CalcFormula",["$faktor_a","$faktor_b","$v"], "$taupunkt", "$calc_taupunkt"]
]
}
Zuletzt geändert von gbglace am Do Dez 28, 2023 3:30 pm, insgesamt 1-mal geändert.
Grüße Göran
#1 Timberwolf 2600 Velvet Red TWS #225 / VPN aktiv / Reboot OK
#2 Timberwolf 2600 Organic Silver TWS #438 / VPN aktiv / Reboot OK
#PV 43,2 kWh Akku; 3x VE MP2 5000; 6,7 kWp > 18 Panele an 4x HM1500 + 1 HM800 WR; Open-DTU
#1 Timberwolf 2600 Velvet Red TWS #225 / VPN aktiv / Reboot OK
#2 Timberwolf 2600 Organic Silver TWS #438 / VPN aktiv / Reboot OK
#PV 43,2 kWh Akku; 3x VE MP2 5000; 6,7 kWp > 18 Panele an 4x HM1500 + 1 HM800 WR; Open-DTU
-
- Reactions:
- Beiträge: 124
- Registriert: Mi Nov 08, 2023 4:24 pm
- Hat sich bedankt: 40 Mal
- Danksagung erhalten: 65 Mal
Danke für Eure Hilfe!!!! Die Logik funktioniert jetzt.
Hier der Code falls jemand ebenfalls die Berechnung des Taupunkts benötigt:
---> Hier in einem späteren Post die Version 2.0. Es wird zusätzlich noch die absolute Luftfeuchtigkeit berechnet viewtopic.php?f=24&t=4725&start=30#p52212
@StefanW Ein Hinweis in der Doku das Stringvariablen 12 Zeichen haben wenn bei der Deklaration kein Wert mitgegeben wird wäre klasse
Ich würde diesen Post gerne beim ersten Beitrag markieren, ich kann leider den ersten Beitrag nicht mehr bearbeiten? Wie kann ich das machen?
Hier der Code falls jemand ebenfalls die Berechnung des Taupunkts benötigt:
---> Hier in einem späteren Post die Version 2.0. Es wird zusätzlich noch die absolute Luftfeuchtigkeit berechnet viewtopic.php?f=24&t=4725&start=30#p52212
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;
* }
*/
{
"_Meta": { // Optional
"Description": "",
"Version": "1.00",
"Icon": "" // format: "data:image/svg+xml;base64,ENCODED_FILE"
},
"Input": [
["Temperatur","Temperatur","$temp","c" ],
["feuchtefeuchte","feuchtefeuchte","$feuchte","c" ]
],
"Output": [
["Taupunkt","Berechneter Taupunkt","$taupunkt","a"]
],
"Level": [
//Ein-Ausgänge
["$temp","float",0.0],
["$feuchte","float",0.0],
["$taupunkt","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"],
//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]
],
"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"]
]
}
Ich würde diesen Post gerne beim ersten Beitrag markieren, ich kann leider den ersten Beitrag nicht mehr bearbeiten? Wie kann ich das machen?
Zuletzt geändert von hans4711 am Fr Dez 29, 2023 10:42 am, insgesamt 2-mal geändert.
3500 XL ID:1339
-
- Reactions:
- Beiträge: 2670
- Registriert: Sa Sep 15, 2018 10:26 am
- Wohnort: Kerpen
- Hat sich bedankt: 998 Mal
- Danksagung erhalten: 787 Mal
Hallo Hans,
Das Editieren der Posts ist nur für eine bestimmte Zeit möglich. Nach Ablauf dieser Frist geht das absichtlich "nur" noch mit den Rechten eines Moderators. (Frag mich bitte nicht nach der genauen Zeitspanne
)
Beste Grüße
Jens
wenn du mir genau erklärst, was du dir da vorstellst, kann ich das gerne für dich übernehmen.
Das Editieren der Posts ist nur für eine bestimmte Zeit möglich. Nach Ablauf dieser Frist geht das absichtlich "nur" noch mit den Rechten eines Moderators. (Frag mich bitte nicht nach der genauen Zeitspanne

Beste Grüße
Jens
timberwolf168 | (2600er) | VPN offen | Reboot nach Vereinbarung |
timberwolf1699 | (3500XL) | VPN offen | Reboot jederzeit |
wiregate1250 |
-
- Reactions:
- Beiträge: 3903
- Registriert: So Aug 12, 2018 8:44 am
- Hat sich bedankt: 1263 Mal
- Danksagung erhalten: 2213 Mal
1) Gerne - danke für deine Ausdauer.
2) Wo in der Doku würdest du solch Information erwarten? Ich ergänze das gerne, bin aber etwas betriebsblind.
lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297