NEWS
Suche helfende Hand Lüftungssteuerung
-
-
@paul53 Ist ein Shelly HT keine Ahnung
-
-
@paul53 said in Suche helfende Hand Lüftungssteuerung:
@TinoNikol sagte:
Ist ein Shelly HT
Habe ich nicht.
Denk hab eingestell ab 0,5 % Luftfeuchte meldet er
-
@TinoNikol sagte:
ab 0,5 % Luftfeuchte meldet er
Dann kann man den Anstieg auswerten. Vorschlag:
const idRH = 'alias.0.Bad.Klima.rel_Feuchte'; const idDusche = '0_userdata.0.Bad.Abluft.Duschen'; var duschen = getState(idDusche).val; on(idRH, function(dp) { let anstieg = 60000 * (dp.state.val - dp.oldState.val) / (dp.state.lc - dp.oldState.lc); // % pro Minute if(anstieg > 2 && dp.state.val > 66) duschen = true; else if(dp.state.val < 65) duschen = false; setState(idDusche, duschen, true); });
-
@paul53 said in Suche helfende Hand Lüftungssteuerung:
@TinoNikol sagte:
ab 0,5 % Luftfeuchte meldet er
Dann kann man den Anstieg auswerten. Vorschlag:
const idRH = 'alias.0.Bad.Klima.rel_Feuchte'; const idDusche = '0_userdata.0.Bad.Abluft.Duschen'; var duschen = getState(idDusche).val; on(idRH, function(dp) { let anstieg = 60000 * (dp.state.val - dp.oldState.val) / (dp.state.lc - dp.oldState.lc); // % pro Minute if(anstieg > 2 && dp.state.val > 66) duschen = true; else if(dp.state.val < 65) duschen = false; setState(idDusche, duschen, true); });
Cool
-
@paul53 said in Suche helfende Hand Lüftungssteuerung:
@TinoNikol sagte:
ab 0,5 % Luftfeuchte meldet er
Dann kann man den Anstieg auswerten. Vorschlag:
const idRH = 'alias.0.Bad.Klima.rel_Feuchte'; const idDusche = '0_userdata.0.Bad.Abluft.Duschen'; var duschen = getState(idDusche).val; on(idRH, function(dp) { let anstieg = 60000 * (dp.state.val - dp.oldState.val) / (dp.state.lc - dp.oldState.lc); // % pro Minute if(anstieg > 2 && dp.state.val > 66) duschen = true; else if(dp.state.val < 65) duschen = false; setState(idDusche, duschen, true); });
Irgendwie geht das nicht
-
@TinoNikol sagte:
Irgendwie geht das nicht
Was geht nicht ? Um zu sehen, woran es hakt, füge Log-Ausgaben ein:
const idRH = 'alias.0.Bad.Klima.rel_Feuchte'; const idDusche = '0_userdata.0.Bad.Abluft.Duschen'; var duschen = getState(idDusche).val; on(idRH, function(dp) { let anstieg = 60000 * (dp.state.val - dp.oldState.val) / (dp.state.lc - dp.oldState.lc); // % pro Minute if(anstieg > 2 && dp.state.val > 66) duschen = true; else if(dp.state.val < 65) duschen = false; setState(idDusche, duschen, true); log('Anstieg: ' + anstieg + ' %/min, rel. Feuchte: ' + dp.state.val + ' %, Duschen: ' + duschen); });
-
@paul53 Ok geht musste mal restarten aber braucht lang bis reagiert!
00:22:37.325 info javascript.0 (28636) Start javascript script.js.Lüftung.Dusch_Erkennung 00:22:37.331 info javascript.0 (28636) script.js.Lüftung.Dusch_Erkennung: registered 1 subscription and 0 schedules 00:23:09.453 info javascript.0 (28636) script.js.Lüftung.Dusch_Erkennung: Anstieg: 3.7327770763572485, rel. Feuchte: 89.5, Duschen: true
-
@paul53 Hi irgendwas stimmt nicht muss Javascript neustarten sonst Startet Lüftung nicht!
-
@TinoNikol sagte:
muss Javascript neustarten sonst Startet Lüftung nicht!
Das kann wohl kaum an diesem Skript liegen.
-
@paul53 An was könnte es liegen?
-
@TinoNikol sagte:
An was könnte es liegen?
?? Hast Du irgendwo eine Endlosschleife programmiert ? Meine Skriptvorschläge enthalten keine Endlosschleife, wenn die richtige Datenpunkt-ID zugeordnet ist. Deaktiviere mal die Skripte, die Du nicht gerade testen willst.
-
@paul53 Was heißt endlosschleife?
-
@TinoNikol sagte:
Was heißt endlosschleife?
Eine Endlosschleife ist eine Schleife, die nicht per Programm abgebrochen wird. Sie entsteht z.B., wenn der Trigger-Datenpunkt und der Datenpunkt der geschrieben wird, identisch sind und im Skript der Wert verändert wird. Beispiel:
const idTrigger = 'irgendeine_ID'; on(idTrigger, function(dp) { setState(idTrigger, dp.state.val + 1); // Wert im Datenpunkt wird um 1 erhöht, was wiederum einen Trigger auslöst });
Eine solche Endlosschleife kann das OS lahmlegen.
-
@paul53 Bin jetzt alles durch find nichts!
Hier mal die einzelnen Scripte:
const idRH = 'shelly.0.SHHT-1#F058A0#1.hum.value'; const idDusche = '0_userdata.0.Bad.Abluft.Duschen'; var duschen = getState(idDusche).val; on(idRH, function(dp) { let anstieg = 60000 * (dp.state.val - dp.oldState.val) / (dp.state.lc - dp.oldState.lc); // % pro Minute if(anstieg > 2 && dp.state.val > 65) duschen = true; else if(dp.state.val < 64) duschen = false; setState(idDusche, duschen, true); log('Anstieg: ' + anstieg + ', rel. Feuchte: ' + dp.state.val + ', Duschen: ' + duschen); });
// Feuchtegehalt und Taupunkt berechnen // IDs anpassen ! const idT = 'shelly.0.SHHT-1#E0119C#1.tmp.temperatureC'; const idRH = 'shelly.0.SHHT-1#E0119C#1.hum.value'; const idX = '0_userdata.0.Untergeschoss.Klima.Feuchtegehalt'; const idDp = '0_userdata.0.Untergeschoss.Klima.Taupunkt'; var t = getState(idT).val; // Temperatur in °C var rh = getState(idRH).val; // rel. Feuchte in % const DP = require('dewpoint'); // 70 m über NN const xdp = new DP(510); function klima() { const y = xdp.Calc(t, rh); setState(idX, Math.round(y.x * 10) / 10, true); // Feuchtegehalt in g/kg setState(idDp, Math.round(y.dp * 10) / 10, true); // Taupunkt in °C } klima(); // Script start on(idT, function (dp) { t = dp.state.val; klima(); }); on(idRH, function (dp) { rh = dp.state.val; klima(); });
// Raumlüftung zum Entfeuchten / Kühlen const idTi = 'shelly.0.SHHT-1#E0119C#1.tmp.temperatureC'; // Raum-Temperatur const idTa = 'shelly.0.SHSW-1#E0980696872B#1.ext.temperatureC1'; // Aussen-Temperatur const idXi = '0_userdata.0.Untergeschoss.Klima.Feuchtegehalt'; const idXa = '0_userdata.0.Aussen.Klima.Feuchtegehalt'; const idLueft = '0_userdata.0.Haus.Klima.Lueften'; var ti = getState(idTi).val; // Raumtemperatur in °C var ta = getState(idTa).val; // Aussentemperatur in °C var xi = getState(idXi).val; // Raumfeuchtegehalt in g/kg var xa = getState(idXa).val; // Aussenfeuchtegehalt in g/kg var lueft = getState(idLueft).val; // Lüftung steuern mit 0,2 g/kg und 0,3 K Hysterese function lueften() { if (xa <= (xi - 0.3) && ta <= (ti - 0.4) && ti >= 22.0 && xi >= 6) lueft = true; else if (xa >= (xi - 0.1) || ta >= (ti - 0.1) || ti <= 21.7 || xi <= 5.8) lueft = false; if (lueft != getState(idLueft).val) setState(idLueft, lueft); } lueften(); // Script start on(idXi, function (dp) { xi = dp.state.val; lueften(); }); on(idXa, function (dp) { xa = dp.state.val; lueften(); }); on(idTi, function (dp) { ti = dp.state.val; lueften(); }); on(idTa, function (dp) { ta = dp.state.val; lueften(); });
// Zu- und Ablüfter steuern // IDs anpassen ! const idZuluft = 'shelly.0.SHSW-25#10D1CC#1.Relay1.Switch'; const idAbluft = 'shelly.0.SHSW-25#10D1CC#1.Relay0.Switch'; const idZuMode = '0_userdata.0.Haus.Zuluft.Modus'; const idAbMode = '0_userdata.0.Haus.Abluft.Modus'; const idLueft = '0_userdata.0.Haus.Klima.Lueften'; const idDusche = '0_userdata.0.Bad.Abluft.Duschen'; var modeZu = getState(idZuMode).val; // 0=Aus,1=Auto,2=Ein var modeAb = getState(idAbMode).val; var lueft = getState(idLueft).val && compareTime('07:00', '22:00', 'between'); var duschen = getState(idDusche).val; function zuluft() { let ein = modeZu == 2 || modeZu == 1 && lueft; if(ein != getState(idZuluft).val) setState(idZuluft, ein); } function abluft() { let ein = modeAb == 2 || modeAb == 1 && (lueft || duschen); if(ein != getState(idAbluft).val) setState(idAbluft, ein); } zuluft(); abluft(); schedule('0 7,22 * * *', function() { // täglich am Morgen und am Abend zuluft(); abluft(); }); on(idLueft, function(dp) { lueft = dp.state.val && compareTime('07:00', '22:00', 'between'); zuluft(); abluft(); }); on(idZuMode, function(dp) { modeZu = dp.state.val; zuluft(); }); on(idAbMode, function(dp) { modeAb = dp.state.val; abluft(); }); on(idDusche, function(dp) { duschen = dp.state.val; abluft(); });
// Feuchtegehalt und Taupunkt berechnen // IDs anpassen ! const idT = 'shelly.0.SHSW-1#E0980696872B#1.ext.temperatureC1'; const idRH = 'shelly.0.SHSW-1#E0980696872B#1.ext.humidity1'; const idX = '0_userdata.0.Aussen.Klima.Feuchtegehalt'; const idDp = '0_userdata.0.Aussen.Klima.Taupunkt'; var t = getState(idT).val; // Temperatur in °C var rh = getState(idRH).val; // rel. Feuchte in % const DP = require('dewpoint'); // 70 m über NN const xdp = new DP(510); function klima() { const y = xdp.Calc(t, rh); setState(idX, Math.round(y.x * 10) / 10, true); // Feuchtegehalt in g/kg setState(idDp, Math.round(y.dp * 10) / 10, true); // Taupunkt in °C } klima(); // Script start on(idT, function (dp) { t = dp.state.val; klima(); }); on(idRH, function (dp) { rh = dp.state.val; klima(); });
-
-
@paul53 said in Suche helfende Hand Lüftungssteuerung:
@TinoNikol sagt:
Bin jetzt alles durch find nichts!
Ich finde auch nichts.
Und das mit der Dusche reagiert zu langsam kann ich da irgendwas ändern?
-
@TinoNikol sagte:
das mit der Dusche reagiert zu langsam kann ich da irgendwas ändern?
Das wird an der Trägheit des Feuchtesensors liegen. Vergleiche den Zeitpunkt des Logs mit dem Lüfterstart.
-
@paul53 Das sind 5 Min