NEWS
[Skript] Absolute Feuchte berechnen
-
Bei mir ist das JSON Objekt gefüllt, hab aber das Script neu in meine Sammlung aufgenommen! Super Arbeit, danke dafür [emoji1360]
Gesendet von meinem iPhone mit Tapatalk
-
Hmmm, wird der Datenpunkt "Aktualisierung" angefasst?
Sollte ja alle 2 Minuten laufen.
[Edit]Leg erst mal mind. das Außenthermometer und einen Raum an.
Ich filtere das Außenthermometer aus. Wenn es dann keinen Raum gibt, kann ja auch nichts geschrieben werden.
Gruß,
Eric
-
Nope!
ich sehe gerade eine Fehlermeldung:
19:43:43.628 [error] TypeError: Cannot read property 'val' of null at calc (script.js.Klima.Feuchteberechnung:450:57) at calcAll (script.js.Klima.Feuchteberechnung:530:9) at Object.main (script.js.Klima.Feuchteberechnung:590:5) at null. (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:1800:44) at ontimeout [as _onTimeout] (timers.js:209:34) at Timer.listOnTimeout (timers.js:92:15)
Muss ich für später bereits angelegte Räume (die allerdiings existente Datenpunkte aus anderen Räumen haben) löschen?
Gruß
Raiiner
-
Poste mal bitte den Block mit den Raum-Definitionen.
Hast Du in dem Block die IDs der Thermostate angepasst (da stehen Demowerte drin)?
Gruß,
Eric
-
Gerne:
!
// ----------------------------------------------------------------------------- // Räume mit Sensoren // ----------------------------------------------------------------------------- var raeume = { // Keine Leerzeichen (Name wird als Datenpunktname verwendet!) // Sensoren Aussen "Aussen" : { "Sensor_TEMP" : "hm-rpc.1.JEQ0140901.1.TEMPERATURE" /*Aussenthermometer:1.TEMPERATURE*/, "Sensor_HUM" : "hm-rpc.1.JEQ0140901.1.HUMIDITY" /*Aussenthermometer:1.HUMIDITY*/, "Sensor_TEMP_OFFSET" : 0.0, "Sensor_HUM_OFFSET" : 0 }, // Sensoren Innen "Werkstatt" : { "Sensor_TEMP" : "hm.rpc.1.JEQ0046663.1.TEMPERATURE", "Sensor_HUM" : "hm-rpc.1.JEQ0046663.1.HUMIDITY", "Sensor_TEMP_OFFSET" : 0.0, "Sensor_HUM_OFFSET" : 0, "TEMP_Zielwert" : 21, "Aussensensor" : "Aussen" }, "Bad" : { "Sensor_TEMP" : "hm-rpc.1.JEQ0064523.1.TEMPERATURE", "Sensor_HUM" : "hm-rpc.1.JEQ0064523.1.HUMIDITY", "Sensor_TEMP_OFFSET" : 0.0, "Sensor_HUM_OFFSET" : 0, "TEMP_Zielwert" : 21, "Aussensensor" : "Aussen" }, "Dachstudio" : { "Sensor_TEMP" : "hm-rpc.1.JEQ0267518.1.TEMPERATURE", "Sensor_HUM" : "hm-rpc.1.JEQ0267518.1.HUMIDITY", "Sensor_TEMP_OFFSET" : 0.0, "Sensor_HUM_OFFSET" : 0, "TEMP_Zielwert" : 21, "Aussensensor" : "Aussen" }, "Schlafzimmer" : { "Sensor_TEMP" : "hm-rpc.1.LEQ0080851.1.TEMPERATURE", "Sensor_HUM" : "hm-rpc.1.LEQ0080851.1.HUMIDITY", "Sensor_TEMP_OFFSET" : 0.0, "Sensor_HUM_OFFSET" : 0, "TEMP_Zielwert" : 21, "Aussensensor" : "Aussen" }, "Esszimmer" : { "Sensor_TEMP" : "hm-rpc.1.LEQ0081020.1.TEMPERATURE", "Sensor_HUM" : "hm-rpc.1.LEQ0081020.1.HUMIDITY", "Sensor_TEMP_OFFSET" : 0.0, "Sensor_HUM_OFFSET" : 0, "TEMP_Zielwert" : 21, "Aussensensor" : "Aussen" }, "Bureau" : { "Sensor_TEMP" : "hm-rpc.1.LEQ0440620.1.TEMPERATURE", "Sensor_HUM" : "hm-rpc.1.LEQ0440620.1.HUMIDITY", "Sensor_TEMP_OFFSET" : 0.0, "Sensor_HUM_OFFSET" : 0, "TEMP_Zielwert" : 21, "Aussensensor" : "Aussen" }, "Sauna" : { "Sensor_TEMP" : "hm-rpc.1.MEQ0180889.1.TEMPERATURE", "Sensor_HUM" : "hm-rpc.1.MEQ0180889.1.HUMIDITY", "Sensor_TEMP_OFFSET" : 0.0, "Sensor_HUM_OFFSET" : 0, "TEMP_Zielwert" : 21, "Aussensensor" : "Aussen" }, "Gast" : { "Sensor_TEMP" : "hm-rpc.1.MEQ0479049.1.TEMPERATURE", "Sensor_HUM" : "hm-rpc.1.MEQ0479049.1.HUMIDITY", "Sensor_TEMP_OFFSET" : 0.0, "Sensor_HUM_OFFSET" : 0, "TEMP_Zielwert" : 21, "Aussensensor" : "Aussen" }, "Bureau2" : { "Sensor_TEMP" : "hm-rpc.1.LEQ0440620.1.TEMPERATURE", "Sensor_HUM" : "hm-rpc.1.LEQ0440620.1.HUMIDITY", "Sensor_TEMP_OFFSET" : 0.0, "Sensor_HUM_OFFSET" : 0, "TEMP_Zielwert" : 21, "Aussensensor" : "Aussen" }, "Bureau3" : { "Sensor_TEMP" : "hm-rpc.1.LEQ0440620.1.TEMPERATURE", "Sensor_HUM" : "hm-rpc.1.LEQ0440620.1.HUMIDITY", "Sensor_TEMP_OFFSET" : 0.0, "Sensor_HUM_OFFSET" : 0, "TEMP_Zielwert" : 21, "Aussensensor" : "Aussen" } }; !
-
Sieht erst mal ok aus.
Kurze Frage : "hm-rpc.1" ist korrekt?
Was sagt denn das Log?
Gruß,
Eric
-
-
Seltsam.
Versuche es bitte mal nur mit dem Aussenthermometer und einem Raum.
Zumindest dieRäume müssen als Datenpunkte usw. angelegt werden.
Wie sieht der Datenbaum aus?
Gruß,
Eric
-
Achtung Missverständnis!
ich glaube wir reden aneinander vorbei.
Zumindest dieRäume müssen als Datenpunkte usw. angelegt werden. `
sind si ja auch!Wie sieht der Datenbaum aus? `
Der ist IMHO komplett in Ordnung.Nur die Datenpunkte json und Aktualisiereung sind leer.
Gruß
Rainer
-
Lösch mal bitte den Datenbaum ab "Raumklima" und dann starte das Script mal neu (bitte 2-3 mal das Script neu starten).
Dann bitte einen Screenshot des Datenbaums mit einem aufgeklappten Raum-Ordner aber sichtbaren Aktualisierungs- und JSON-Datenpunkt.
Gruß,
Eric
[Nachtrag]
Das NPM-Modul "dewpoint" hast Du aber drin?
-
Bitte, wie gewünscht:
Habe sogar die javascript Instanz neu gestartet.
Dewpoint hatte ich beim ersten Schuss vergessen - wer liest schon die ersten Zeilen im Skript :lol:
Ist jetzt aber schon lange drin.
Nicht dass wir uns Missverstehen: Bis auf json und dessen Aktualisierung scheint alles drin zu sein, der alte Screenshot war nur gefiltert.
Gruß
rainer
-
Habe jetzt doch noch eine Error, weiß aber nicht, ob der mit dir zu tun hat:
hm-rega-1 05 21:03:33.811 error runScriptFile Error: ENOENT: no such file or directory, open '/opt/iobroker/node_modules/iobroker.hm-rega/lib/../regascripts/alarms.fn'
EDIT:
Das Skript hat auf jeden Fall immer wieder meinen javascript Adapter ins aus gekickt.
Der Adapter brauchte nachher immer >70% CPU un dann war er weg. Adapter neu starten uund das gleiche Spiel von vorne.
Habe jetzt erst festgestellt, dass ALLE berechneten Werte fehlen.
Nur die nativen Werte sind drin:
Ich finde aber auch den Fehler nicht.
Gruß
Rainer
-
Moin Rainer,
Das Skript hat auf jeden Fall immer wieder meinen javascript Adapter ins aus gekickt.
Der Adapter brauchte nachher immer >70% CPU un dann war er weg. Adapter neu starten uund das gleiche Spiel von vorne. `
das verstehe ich nicht.Bei mir (Cubietruck) läuft der Prozess io.javascript.0 im Durchschnitt mit 3 - 8 % CPU-Last (laut TOP).
Wenn ich das Raumklima-Script manuell anstoße, geht die CPU-Last für einen ganz kurzen Moment auf max. 35% hoch - aber nur für ein Messintervall, danach ist er sofort wieder unten.
{edit}
Ich habe den Code nochmals etwas angepasst:
-
Wartezeit nach Anlegend er Datenpunkt von 500ms auf 5000ms erhöht (500ms war zu kurz und hat Fehler erzeugt)
-
Bool "logging" eingeabut. Wenn auf true gesetzt, werden im Log einige Infos erzeugt
Hier der neue Code (Demo-Raumdaten !!!)
! ````
// Berechnet Taupunkt, absolute Luftfeuchtigkeit, Enthalpie, Lüftungsempfehlung,
//gemessene Temperatur & Luftfeuctigkeit inkl. Offset zwecks Kalibrierung
// -----------------------------------------------------------------------------
// benötigt in der Javascript das Modul "dewpoint"
// (in der Javascript-Instanz Einstellungen unter "Zusätzliche NPM-Module")
// -----------------------------------------------------------------------------
// von paul53 übernommen und angepasst
// http://forum.iobroker.net/viewtopic.php?f=20&t=2437&hilit=Lüftung*#p21476
// und Solear: http://forum.iobroker.net/viewtopic.php?f=21&t=2645&p=23381#p23282
// -----------------------------------------------------------------------------
// 05.06.2015 Anpassung ericc2905
// Boolean "anyLueften", Datenpunkt "Lueften", Datenpunkt "Aktualisierung" und JSON-Ausgabe eingebaut
// -----------------------------------------------------------------------------
// 06.06.2015 Anpassung ericc2905
// Logging (über Bool "logging" eingebaut)
! var nn = 273; // eigene Höhe nn (normalnull), z.B. über http://de.mygeoposition.com zu ermitteln
var pfad = "Raumklima" +"."; // Pfad unter dem die Datenpunkte in der Javascript-Instanz angelegt werden
var controlPfad = "CONTROL" +"."; // Pfad innerhalb des Raums
var skriptConf = true; // true: Raumwerte werden über das Skript geändert / false: Raumwerte werden über Objekte (oder VIS) geändert
var defaultTemp = 21; // Default TEMP_Zielwert, wenn im Raum nicht angegeben
! // eric2905 Zusätzliche Variablen definieren
// --------------------------------------------------------------------
var anyLueften = false; // false: Nirgendwo lüften notwendig / true: Lüften notwendig
var strJSONfinal = ""; // Fertiges JSON (zum Schreiben in Datenpunkt)
var strJSONtemp = ""; // Bastel-JSON (wird suksessive gefüllt)
var strDatum = ""; // Datums der Aktualisierung
var logging = false; // Sollen Log-Infos ausgegeben werden? [ja/nein]
// eric2905 Ende -------------------------------------------------------
! // -----------------------------------------------------------------------------
// Räume mit Sensoren
// -----------------------------------------------------------------------------
var raeume = { // Keine Leerzeichen (Name wird als Datenpunktname verwendet!)
// Sensoren Aussen
"Aussen" : {
"Sensor_TEMP" : "hm-rpc.0.IEQ1234560.1.TEMPERATURE",
"Sensor_HUM" : "hm-rpc.0.IEQ1234560.1.HUMIDITY",
"Sensor_TEMP_OFFSET" : 0.0,
"Sensor_HUM_OFFSET" : 0
},
// Sensoren Innen
"Raum1" : {
"Sensor_TEMP" : "hm-rpc.0.IEQ1234561.1.TEMPERATURE",
"Sensor_HUM" : "hm-rpc.0.IEQ1234561.1.HUMIDITY",
"Sensor_TEMP_OFFSET" : 0.0,
"Sensor_HUM_OFFSET" : 0,
"TEMP_Zielwert" : 21,
"Aussensensor" : "Aussen"
},
"Raum2" : {
"Sensor_TEMP" : "hm-rpc.0.IEQ1234562.1.TEMPERATURE",
"Sensor_HUM" : "hm-rpc.0.IEQ1234562.1.HUMIDITY",
"Sensor_TEMP_OFFSET" : 0.0,
"Sensor_HUM_OFFSET" : 0,
"TEMP_Zielwert" : 21,
"Aussensensor" : "Aussen"
},
"Raum3" : {
"Sensor_TEMP" : "hm-rpc.0.IEQ1234563.1.TEMPERATURE",
"Sensor_HUM" : "hm-rpc.0.IEQ1234563.1.HUMIDITY",
"Sensor_TEMP_OFFSET" : 0.0,
"Sensor_HUM_OFFSET" : 0,
"TEMP_Zielwert" : 21,
"Aussensensor" : "Aussen"
}
};
! // =============================================================================
// Skriptbereich. Ab hier muss nichts mehr eingestellt / verändert werden.
// =============================================================================
var raumDatenpunkte = {
"x" : {
"DpName" : "Feuchtegehalt_Absolut",
"init": 0,
"dp": {
"name": 'absoluter Feuchtegehalt',
"desc": 'absoluter Feuchtegehalt, errechnet',
"type": 'number',
"role": 'value',
"unit": 'g/kg'
}
},
"rh" : {
"DpName" : "relative_Luftfeuchtigkeit",
"init": 0,
"dp": {
"name": 'gemessene relative Luftfeuchtigkeit (inkl. Offset)',
"desc": 'relative Luftfeuchtigkeit, vom Sensor + Offset zum Ausgleich von Messungenauigkeiten des Geräts',
"type": 'number',
"role": 'value',
"unit": '%'
}
},
"dp" : {
"DpName" : "Taupunkt",
"init": 0,
"dp": {
"name": 'Taupunkt',
"desc": 'Taupunkt. Temperatur von Wänden, Fenstern, usw. ab der sich die Feuchtigkeit niederschlägt.',
"type": 'number',
"role": 'value',
"unit": '°C'
}
},
"t" : {
"DpName" : "Temperatur",
"init": 0,
"dp": {
"name": 'gemessene Temperatur (inkl. Offset)',
"desc": 'gemessene Temperatur vom Sensor zzgl. eines Offsets um Geräteungenauigkeiten auszugleichen',
"type": 'number',
"role": 'value',
"unit": '°C'
}
},
"h" : {
"DpName" : "Enthalpie",
"init": 0,
"dp": {
"name": 'Enthalpie',
"desc": 'Enthalpie',
"type": 'number',
"role": 'value',
"unit": 'kJ/kg'
}
},
"lüften" : {
"DpName" : "Lüftungsempfehlung",
//"init": false,
"dp": {
"name": 'Lüftungsempfehlung',
"desc": 'Lüftungsempfehlung',
"type" : 'boolean',
"role": 'value'
}
}
};
! var raumControl = {
"Sensor_TEMP_OFFSET" : {
"DpName" : "Sensor_TEMP_OFFSET",
"init": 0,
"dp": {
"name": 'Offset Temperatur zum Sensormesswert (Ausgleich von Ungenauigkeiten)',
"desc": 'Offset Temperatur zum Sensormesswert (Ausgleich von Ungenauigkeiten)',
"type": 'number',
"role": 'control.value',
"unit": '°C'
}
},
"Sensor_HUM_OFFSET" : {
"DpName" : "Sensor_HUM_OFFSET",
"init": 0,
"dp": {
"name": 'Offset Luftfeuchtigkeit zum Sensormesswert (Ausgleich von Ungenauigkeiten)',
"desc": 'Offset Luftfeuchtigkeit zum Sensormesswert (Ausgleich von Ungenauigkeiten)',
"type": 'number',
"role": 'control.value',
"unit": '%'
}
},
"TEMP_Zielwert" : {
"DpName" : "TEMP_Zielwert",
"init": 0,
"dp": {
"name": 'Temperatursteuerwert zum lüften',
"desc": 'Temperatursteuerwert zum lüften',
"type": 'number',
"role": 'control.value',
"unit": '°C'
}
},
"Aussensensor" : {
"DpName" : "Aussensensor",
"init": "",
"dp": {
"name": 'Aussensensor, der zum Vergleich genommen wird',
"desc": 'Aussensensor, der zum Vergleich genommen wird',
"type": 'string',
"role": 'control.value'
}
}
};
! var DP = require('dewpoint'); // Das Modul dewpoint einlesen
var xdp = new DP(nn);
! function createDp() {
var name;
var init;
var forceCreation;
var common;if (logging) log("Start Erzeugung Datenpunkte");
//eric2905 Datenpunkt "Lüften" erzeugen
// --------------------------------------------------------------------
createState(pfad + 'Lüften', "", {
name: 'Muss irgendwo gelüftet werden',
desc: 'Muss irgendwo gelüftet werden',
type: 'boolean',
unit: '',
role: 'value'
});
if (logging) log("Datenpunkt Lüften erzeugt");
// eric2905 Ende -------------------------------------------------------! //eric2905 Datenpunkt "JSON" erzeugen
// --------------------------------------------------------------------
createState(pfad + 'JSON', "", {
name: 'JSON-Ausgabe aller Werte',
desc: 'JSON-Ausgabe aller Werte',
type: 'string',
unit: '',
role: 'value'
});
if (logging === true) log("Datenpunkt JSON erzeugt")
// eric2905 Ende -------------------------------------------------------
! //eric2905 Datenpunkt "Aktualsierung" erzeugen
// --------------------------------------------------------------------
createState(pfad + 'Aktualsierung', "", {
name: 'Aktualisierungszeitpunkt der JSON-Ausgabe',
desc: 'Aktualisierungszeitpunkt der JSON-Ausgabe',
type: 'string',
unit: '',
role: 'value'
});
if (logging) log("Datenpunkt Aktualisierung erzeugt");
// eric2905 Ende -------------------------------------------------------
!
for (var raum in raeume) {
for (var datenpunktID in raumDatenpunkte) {
name = pfad + raum + "." + raumDatenpunkte[datenpunktID].DpName;
init = raumDatenpunkte[datenpunktID].init;
forceCreation = false; // Init der Datenpunkte wird nur beim ersten Star angelegt. Danach bleiben die Wert auch nach Skritpstart enthalten.
common = raumDatenpunkte[datenpunktID].dp;
createState(name, init , forceCreation, common);
log("neuer Datenpunkt: " + name,"debug");
}
for (var control in raumControl) {
name = pfad + raum + "." + controlPfad + raumControl[control].DpName;
//init = raumControl[control].init;
forceCreation = skriptConf;
common = raumControl[control].dp;
if (typeof raeume[raum][raumControl[control].DpName] !=="undefined") {
init = raeume[raum][raumControl[control].DpName];
createState(name, init , forceCreation, common);
}
}
}
}
! function runden(wert,stellen) {
var gerundet = Math.round(wert10stellen)/(10*stellen);
return gerundet;
}
! //eric2905 JSON erzeuen
// --------------------------------------------------------------------
function createJSON() {
var temppfad = "";
var tempVal = "";
strJSONfinal = "[";
strJSONtemp = "";
if (logging) log("Erzeugung JSON gestartet");
for (var raum in raeume) {
if (raum != "Aussen") {
strJSONtemp = strJSONtemp + "{";
strJSONtemp = strJSONtemp + ""Raum":"" + raum + "",";
for (var datenpunktID in raumDatenpunkte) {
temppfad = pfad + raum + "." + raumDatenpunkte[datenpunktID].DpName;
tempVal = getState(temppfad).val;
if(raumDatenpunkte[datenpunktID].DpName != "Lüftungsempfehlung") {
tempVal = parseFloat(tempVal);
tempVal = tempVal.toFixed(2);
}
strJSONtemp = strJSONtemp + """ + raumDatenpunkte[datenpunktID].DpName + "":"" + tempVal + "",";
}
strJSONtemp = strJSONtemp.substr(0, strJSONtemp.length - 1);
strJSONtemp = strJSONtemp + "},";
}
}
strJSONtemp = strJSONtemp.substr(0, strJSONtemp.length - 1);
strJSONfinal = strJSONfinal + strJSONtemp + "]";
if (logging) log("strJSONfinal : " + strJSONfinal);
}
// eric2905 Ende -------------------------------------------------------
! function calc(raum) { // Über Modul Dewpoint absolute Feuchte berechnen
var t = getState(raeume[raum].Sensor_TEMP).val; // Temperatur auslesen
var rh = getState(raeume[raum].Sensor_HUM).val; // Feuchtigkeit relativ auslesen
var y = xdp.Calc(t, rh);
var toffset = 0.0; // Offset in °C
var rhoffset = 0; // Offset in %
if (logging) log("Function CALC gestartet");
if(typeof raeume[raum].Sensor_TEMP_OFFSET !=="undefined") {
var idtoffset = pfad + raum + "." + controlPfad + "Sensor_TEMP_OFFSET";
toffset = getState(idtoffset).val; // Offset aus den Objekten/Datenpunkt auslesen
}
if(typeof raeume[raum].Sensor_HUM_OFFSET !=="undefined") {
var idrhoffset = pfad + raum + "." + controlPfad + "Sensor_HUM_OFFSET";
rhoffset = getState(idrhoffset).val; // Offset aus den Objekten/Datenpunkt auslesen
}
! t = t + toffset;
rh = rh + rhoffset;
! var x = y.x; // Zu errechnende Variable für Feuchtegehalt in g/kg
var dp = y.dp; // Zu errechnende Variable für Taupunkt in °C
! var h = 1.00545 * t + (2.500827 + 0.00185894 * t) * x;
! var idx = pfad + raum + "." + raumDatenpunkte["x"].DpName;
var iddp = pfad + raum + "." + raumDatenpunkte["dp"].DpName;
var idt = pfad + raum + "." + raumDatenpunkte["t"].DpName;
var idrh = pfad + raum + "." + raumDatenpunkte["rh"].DpName;
var ih = pfad + raum + "." + raumDatenpunkte["h"].DpName;setState(idx , runden(x,2)); // errechnete absolute Feuchte in Variable schreiben setState(iddp , runden(dp,1)); // errechneter Taupunkt in Variable schreiben setState(idt , t); // Sensor Temperatur inkl. Offset setState(idrh , rh); // Sensor Relative Feuchte inkl. Offset setState(ih , runden(h,2)); // Enthalpie
! // Lüften
if(typeof raeume[raum].Aussensensor !=="undefined") {
var aussen = raeume[raum].Aussensensor;
var idta = pfad + aussen + "." + raumDatenpunkte["t"].DpName;
var idxa = pfad + aussen + "." + raumDatenpunkte["rh"].DpName;
} else {
return;
}
! var ti = t; // Raumtemperatur in °C
var xi = rh; // Raumfeuchtegehalt in g/kg
var ta = getState(idta).val; // Aussentemperatur in °C
var xa = getState(idxa).val; // Aussenfeuchtegehalt in g/kg
if (xa == 0) return;var mi = defaultTemp; // Temperaturmittelwert auf Default
! if(typeof raeume[raum].TEMP_Zielwert !=="undefined") {
mi = raeume[raum].TEMP_Zielwert;
}
var mih = mi + 0.25; // Temperaturmittelwert hoch
var mit = mi - 0.25; // Temperaturmittelwert tief
! var idLueften = pfad + raum + "." + raumDatenpunkte["lüften"].DpName;// Lüftungsempfehlung steuern mit 0,3 g/kg und 0,5 K Hysterese
//eric2905 Originalblock
// ---------------------------------------------------------------------
//if (xa <= (xi - 0.4) && ta <= (ti - 0.6) && ti >= mih) setState(idLueften, true);
//else if (xa >= (xi - 0.1) || ta >= (ti - 0.1) || ti <= mit) setState(idLueften, false);
// eric2905 Ende -------------------------------------------------------if (xa <= (xi - 0.4) && ta <= (ti - 0.6) && ti >= mih) { setState(idLueften, true); anyLueften = true; } else if (xa >= (xi - 0.1) || ta >= (ti - 0.1) || ti <= mit) setState(idLueften, false); if (logging) log("Raumwete : " + raum+", ti:"+ti+", ta: "+ta+", xi:"+xi+", xa: "+xa+", mih:"+mih+", mit:"+mit,"debug");
}
! function calcAll () {
for (var raum in raeume) {
calc(raum);
}
}
! function Datum() {
var jetzt = new Date();
var jahr = String(jetzt.getFullYear());
var monat = jetzt.getMonth() + 1;
if(monat<10) {
monat = "0" + String(jetzt.getMonth() + 1);
} else {
monat = String(jetzt.getMonth() + 1);
}
var tag = jetzt.getDate();
if(tag<10) {
tag = "0" + String(jetzt.getDate());
} else {
tag = String(jetzt.getDate());
}
var stunden = jetzt.getHours();
if(stunden<10) {
stunden = "0" + String(jetzt.getHours());
} else {
stunden = String(jetzt.getHours());
}
var minuten = jetzt.getMinutes();
if(minuten<10) {
minuten = "0" + String(jetzt.getMinutes());
} else {
minuten = String(jetzt.getMinutes());
}
var sekunden = jetzt.getSeconds();
if(sekunden<10) {
sekunden = "0" + String(jetzt.getSeconds());
} else {
sekunden = String(jetzt.getSeconds());
}
strDatum = tag + "."+ monat + "." + jahr + " - " + stunden + ":" + minuten + ":" + sekunden;
}
! // alle zwei Minuten neu berechnen
schedule("*/2 * * * *", function () {
calcAll();
// eric2905 Aufruf eingebaut und Datenpunkt befüllen
// ---------------------------------------------------------------------
createJSON();
Datum();
setState(pfad + 'Lüften', anyLueften);
setState(pfad + 'JSON', strJSONfinal);
setState(pfad + 'Aktualsierung', strDatum);
// eric2905 Ende -------------------------------------------------------
});
! function main() {
calcAll();// eric2905 Aufruf eingebaut und Datenpunkt befüllen
// ---------------------------------------------------------------------
createJSON();
Datum();
setState(pfad + 'Lüften', anyLueften);
setState(pfad + 'JSON', strJSONfinal);
setState(pfad + 'Aktualsierung', strDatum);
// eric2905 Ende -------------------------------------------------------! }
! if (logging) {
log("----------------------------------------------------------");
log("Script-Start");
log("----------------------------------------------------------");
}
createDp(); // Datenpunkte anlegen
if (logging) log("Datenpunkte angelegt");
setTimeout(main, 5000); // Zum Skriptstart ausführen
! ````
{/edit}Hat sonst noch jemand ähnliche Phänomene?
Gruß,
Eric
-
-
Hallo Eric,
hilft nicht, der Fehler schein woanders:
TypeError: Cannot read property 'val' of null at calc (script.js.Klima.Feuchteberechnung:458:57) at calcAll (script.js.Klima.Feuchteberechnung:538:9) at Object.main (script.js.Klima.Feuchteberechnung:598:5) at null. (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:1800:44) at ontimeout [as _onTimeout] (timers.js:209:34) at Timer.listOnTimeout (timers.js:92:15)
script.js.Klima.Feuchteberechnung:458:57
` > var tag = jetzt.getDate();if(tag<10) {
tag = "0" + String(jetzt.getDate());
} else { tag = "0" + String(jetzt.getDate()); `
script.js.Klima.Feuchteberechnung:538:9
Sind das nicht Zeilennummern?
Diese Zeile gibt es nicht.
EDIT:
Habe alle Skripte deaktiviert, javascript auf debug gestellt, und Instanz neu gestartet. Jetzt gerade eine Fehlermeldung:
javascript-0 2016-06-06 08:24:12.430 warn State "hm.rpc.1.JEQ0046663.1.TEMPERATURE" not found
Muss mal sehen, wo der Wurm drin ist.
****EDIT2:
Läuft!!!
da war ein Punkt, statt eines Bindestrichs!
Das muss man erst mal sehen.
DANKE nochmal.****
Danke erst mal
Rainer
-
Läuft!!! `
Das ließt man doch gerneDafür ist jetzt ein Logging mit drin, das man per Bool ein-/ausschalten kann.
Ich baue die Funktion "createJSON" noch dahin um, das auch die Aussenwerte mit aufgenommen werden - das sieht dann einfach schöner aus.
Noch eine Frage an die ursprünglichen Script-Ersteller:
Ist die Einheit für die absolute Feuchte tatsächlich "g/kg" (ist so in der Datenpunkt-Definition angegeben)?
Ich lese immer nur von "g/m3".
Gruß,
Eric
-
Der Begriff "absolute Luftfeuchte" wird sowohl für g Wasser pro kg trockene Luft (auch Feuchtegehalt oder Mischungsverhältnis genannt) als auch für g Wasser pro m³ feuchte Luft verwendet, wobei g/m³ häufiger ist. Deshalb bevorzuge ich die Bezeichnung "Feuchtegehalt" für g/kg.
Bei der Auslegung von Luftaufbereitungsanlagen wird mit dem https://de.wikipedia.org/wiki/Mollier-h-x-Diagramm gearbeitet und der Feuchtegehalt x verwendet.
-
Hi paul53,
danke für die Info.
Was hast Du denn eingesetzt / verwendet? Sofern ich verstanden habe, ist das ursprüngliche Berechnungs-Script ja von Dir.
Dann passe ich später die Ausgaben so an, das dort eine eindeutige Bezeichnung steht.
Danke und Gruß,
Eric
-
Im Script läuft alles über g/kg.
(Achtung: beim vergleich der Werte mit CUxD-Werten, dort muss man von g/m³ auf g/kg umstellen!)
-
zur Einheit der absoluten Feuchte:
ich persönlich dneke, dass es einfach für die meisten verständlicher ist sich 10g Wasser in einm m³ Luft vorzustellen, als in einem kg Luft ("was bitte ist ein kg Luft?").
Daher hatte ich diese Berechnung nach http://hobby-photo.de/download/Luftfeuchte_hobby-photo.xlsfrüher benutzt.
Die errechneten Werte sind jedoch unterschiedlich.
Ich habe bei mir den Begriff "Wassergehalt" für die abs. Feuchte benutzt, (<size size="50">damit meine Frau auch das Lüften versteht</size>).
Hier mal der Vergleich meiner auf der CCU berechneten Werte und mühsamm zusammengeklickten "Tabelle" und der Paul/Eric-Variante:
Die Datenpunkte in der JSON-Tabelle scheinen ja nach der Reihenfolge der Zimmer im Skriptkopf sortiert zu sein.
Muss ich dort die Reihenfolge ändern, um die Tabelle umzusortieren?
Gruß
rainer
-
Hi,
Im Script läuft alles über g/kg. `
danke für die Info - dann baue ich die Ausgaben heute Abend so um, das es eindeutig ist(Achtung: beim vergleich der Werte mit CUxD-Werten, dort muss man von g/m³ auf g/kg umstellen! `
Das nehme ich als Hinweis in den Header mit auf - danke für die Warnung.Die Datenpunkte in der JSON-Tabelle scheinen ja nach der Reihenfolge der Zimmer im Skriptkopf sortiert zu sein.
Muss ich dort die Reihenfolge ändern, um die Tabelle umzusortieren? `
Ja, ich lese sie in der gleichen Reihenfolge ein, wie sie erstellt werden.Gruß,
Eric