NEWS
Node-Red Javascript Node - Berechnung ungewünscht doppelt
-
Ich hab den Code nochmal leicht editiert!
-
Vielen Dank erstmal - das muss noch ein kleiner Fehler im Script sein...?
13.5.2020, 15:48:05node: Taupunktfunction : (error)
"ReferenceError: oldTP is not defined (line 22, col 1)"Line 22:
if (oldTP !== tp) {
-
@lemuba Ja ich habe nochmal geändert. War ein großes P anstelle eines kleinen und aussßerdem darfst die Variablen nur mit richtigem Topic setzen. Kopier nochmal alles aus der Box.
-
Top - funktioniert!:
13.5.2020, 16:01:28node: 81594f23.375458
Taupunkt : msg.payload : number
6.09Das kann ich nun sicherlich als Grundlage nehmen um auch weitere Berechnungen durchzuführen/zu optimieren, wie z.B. Windchill:
-
Noch eine Frage - bedeutet das jetzt aber, daß der Taupunkt nur bei Temperaturen über 0 Grad berechnet wird?
if (tempf >0 && humidity > 0 ) {
tp = ((241.2 * Math.log(humidity/100)) + ((4222.03716 * tempf) / (241.2 + tempf))) / (17.5043 - Math.log(humidity/100) - ((17.5043*tempf)/(241.2+tempf)));
tp = Math.round( tp * 100 ) / 100;
context.set("contexttp",tp);
} -
@lemuba Ja da hast Du Recht - letztlich diente die Bedingung nur dazu, zu überprüfen ob alles initialisiert ist. Entweder Du fängst das ab mit != NaN oder Du nimmst einfach einen anderen Wert.
Du kannst ja die Temperatur mit -100 initialisieren und dann in der Abfrage > -100 arbeiten. -
Ok, bin aber gerade am schauen ob eine Taupunktberechnung unter Null Grad überhaupt relevant ist - ein anderes, dann metrolgisches Thema...
-
if (!(isNaN(tempf) || isNaN(humidity))) { ...
müsste eigentlich auch funktionieren als Bedingung
-
@mickym sagte in Node-Red Javascript Node - Berechnung ungewünscht doppelt:
!(isNaN(tempf) || isNaN(humidity))
Ich habe nun die -100 Variante eingebaut, weil die habe ich glaube ich verstanden... und funktioniert so weit:
Mir war nicht ganz klar wo das reingehört hätte:
!(isNaN(tempf) || isNaN(humidity))
-
var tempf = context.get('tempf')|| 0; var humidity = context.get('humidity')|| 0; var oldTp = context.get('contexttp') || 0; var tp = 0; if (msg.topic === "tempf") { tempf= msg.payload; context.set('tempf',msg.payload); } else if (msg.topic === "humidity") { humidity= msg.payload; context.set('humidity',msg.payload); } // Quelle: https://www.chemie-schule.de/KnowHow/Taupunkt // Gültigkeitsbereich Taupunkt: -30°C <= tmp <= 70°C if (!(isNaN(tempf) || isNaN(humidity))) { tp = ((241.2 * Math.log(humidity/100)) + ((4222.03716 * tempf) / (241.2 + tempf))) / (17.5043 - Math.log(humidity/100) - ((17.5043*tempf)/(241.2+tempf))); tp = Math.round( tp * 100 ) / 100; context.set("contexttp",tp); } if (oldTp !== tp) { msg.payload = tp; msg.topic = "Taupunkt"; return msg } else { return null; }
-
@mickym sagte in Node-Red Javascript Node - Berechnung ungewünscht doppelt:
var tempf = context.get('tempf')|| 0;
var humidity = context.get('humidity')|| 0;
var oldTp = context.get('contexttp') || 0;
var tp = 0;if (msg.topic === "tempf") {
tempf= msg.payload;
context.set('tempf',msg.payload);} else if (msg.topic === "humidity") {
humidity= msg.payload;
context.set('humidity',msg.payload);
}// Quelle: https://www.chemie-schule.de/KnowHow/Taupunkt
// Gültigkeitsbereich Taupunkt: -30°C <= tmp <= 70°C
if (!(isNaN(tempf) || isNaN(humidity))) {
tp = ((241.2 * Math.log(humidity/100)) + ((4222.03716 * tempf) / (241.2 + tempf))) / (17.5043 - Math.log(humidity/100) - ((17.5043*tempf)/(241.2+tempf)));
tp = Math.round( tp * 100 ) / 100;
context.set("contexttp",tp);
}if (oldTp !== tp) {
msg.payload = tp;
msg.topic = "Taupunkt";
return msg }
else {
return null;
}Funktioniert auch... nun habe ich estmal was zum weiterspielen/testen... Vielen Dank erstmal!
Den Link/Quelle zu diesem Beitrag werde ich gleich mal im Script notieren....