NEWS
Heizkreisregelungen - JS
-
ei Script für die Regelung der Temperatur im OG genügt es ja wen die Abschaltung im
// 3-Punkt-Ansteuerung aus Stellsignal
ist, oder? `
Ja. -
Anmerkung: Da die KNX-Datenpunkte zum Schalten (Ventile, Pumpen) mit 0 und 1 anstelle false/true angesteuert werden müssen, sollte der Datenpunkttyp von "boolean" in "number" (Zahl) geändert werden.
-
Hallo paul53,
da ich für die Ladung des Boilers und die Fußbodenheizung nur einen Vorlauf
zur verfügung habe ist dieser mit einem Ventil umschaltbar.
(Leider ein altes Haus)
Dazu muss ich allerdings die FBH Pumpe Abschalten.
Ist das so korrekt wie ichs in das Script eingefügt habe?
Das Ventil liefert eine "1" wenn es eingeschalten ist.
// Ansteuerung Pumpe für Fußbodenheizungen const idHeizen = "javascript.0.Heizperiode"/*Heizperiode*/; const idladung = "knx.0.Aktoren.Heizung-Technik.Ventil-Ladung-Boiler"/*Ventil-Ladung-Boiler*/; var idpump1 = "knx.0.Aktoren.Heizung-Technik.Ventil-FBH-Kueche-EG"/*Ventil-FBH-Kueche-EG*/; var idpump2 = "knx.0.Aktoren.Heizung-Technik.Ventil-1-FBH-Flur-EG"/*Ventil-1-FBH-Flur-EG*/; var idpump = "knx.0.Aktoren.Heizung-Technik.HK-EG-Pumpe"/*HK-EG-Pumpe*/; // Initialisierung bei Skriptstart var pump1 = getState(idpump1).val; var pump2 = getState(idpump2).val; var timer = null; var heizen = getState(idHeizen).val; var ladung = getState(idladung).val; function control() { if(timer) clearTimeout(timer); if (pump1 || pump2) { timer = setTimeout(function() { setState(idpump, 1); }, 180000); // 3 Minuten Verzögerung } else { timer = setTimeout(function() { setState(idpump, 0); }, 180000); } } // Skriptstart control(); // Auf Änderung von Pumpe1 reagieren on(idpump1, function(dp) { pump1 = dp.state.val; control(); }); // Auf Änderung von Pumpe 2 reagieren on(idpump2, function(dp) { pump2 = dp.state.val; control(); }); // Abschaltung on(idHeizen, function(dp) { heizen = dp.state.val; control(); }); // Abschaltung wegen Boilerladung on(idladung, function(dp) { heizen = dp.state.val; control(); });
-
Die Variable heizen wird im Skript gesetzt aber nicht ausgewertet. Bitte ergänzen:
if ((pump1 || pump2) && heizen) {
ist dieser mit einem Ventil umschaltbar….Das Ventil liefert eine "1" wenn es eingeschalten ist. `
Ist das ein Umschaltventil und was bedeutet "eingeschaltet" ?Weshalb soll die Pumpe der FBH bei Speicherladung abschalten ?
-
Die Pumpe der FBH ist noch eine "Alte" ohne Elektr.Lastregelung,
Das sollte ich lt. dem Installateur so machen damit kein Überdruck im System entsteht
da bei der Boilerladung der Vorlauf zur FBH unterbrochen ist.
Eingeschaltet heißt das Wasser lüft in Richtung Boiler
Ausgeschalten in Richtung FBH.
-
Eingeschaltet heißt das Wasser lüft in Richtung Boiler `
Dann solltest Du es so machen:... if ((pump1 || pump2) && heizen && !ladung) { ... // Abschaltung wegen Speicherladung on(idladung, function(dp) { ladung = dp.state.val; if(ladung) setState(idpump, 0); // FBH-Pumpe sofort aus, wenn Speicherladung else control(); });
-
Vielen Dank,
Schönen Abend noch.
-
Hallo Paul53,
Ich habe noch eine Frage zum Script Pumpen.
Bei Schalten der Boilerladung schalter die Pumpe aus aber nach 3 Minuten wider ein
obwohl die Ladung noch ein ist.
Hier das Script, vielleicht kannst du noch mal ein Auge drauf werfen, Danke.
// Ansteuerung Pumpe für Fußbodenheizungen const idHeizen = "javascript.0.Heizperiode"/*Heizperiode*/; const idladung = "knx.0.Aktoren.Heizung-Technik.Ventil-Ladung-Boiler"/*Ventil-Ladung-Boiler*/; var idpump1 = "knx.0.Aktoren.Heizung-Technik.Ventil-FBH-Kueche-EG"/*Ventil-FBH-Kueche-EG*/; var idpump2 = "knx.0.Aktoren.Heizung-Technik.Ventil-1-FBH-Flur-EG"/*Ventil-1-FBH-Flur-EG*/; var idpump = "knx.0.Aktoren.Heizung-Technik.HK-EG-Pumpe"/*HK-EG-Pumpe*/; // Initialisierung bei Skriptstart var pump1 = getState(idpump1).val; var pump2 = getState(idpump2).val; var timer = null; var heizen = getState(idHeizen).val; var ladung = getState(idladung).val; function control() { if(timer) clearTimeout(timer); if ((pump1 || pump2) && heizen && !ladung) { timer = setTimeout(function() { setState(idpump, 1); }, 300000); // 3 Minuten Verzögerung } else { timer = setTimeout(function() { setState(idpump, 0); }, 180000); } } // Skriptstart control(); // Auf Änderung von Pumpe1 reagieren on(idpump1, function(dp) { pump1 = dp.state.val; control(); }); // Auf Änderung von Pumpe 2 reagieren on(idpump2, function(dp) { pump2 = dp.state.val; control(); }); // Abschaltung on(idHeizen, function(dp) { heizen = dp.state.val; control(); }); // Abschaltung wegen Speicherladung on(idladung, function(dp) { ladung = dp.state.val; if(ladung) setState(idpump, 0); // FBH-Pumpe sofort aus, wenn Speicherladung else control(); });
-
Bei Schalten der Boilerladung schalter die Pumpe aus aber nach 3 Minuten wider ein obwohl die Ladung noch ein ist. `
Das kann laut Skript nicht sein, denn die Pumpe schaltet nur ein, wenn die Ladung nicht aktiv ist.if ((pump1 || pump2) && heizen && !ladung) {
Liefert der Datenpunkt idLadung nur einen kurzen Impuls? Bitte prüfen
// Abschaltung wegen Speicherladung on(idladung, function(dp) { ladung = dp.state.val; log('Speicherladung: ' + ladung); // Debug if(ladung) setState(idpump, 0); // FBH-Pumpe sofort aus, wenn Speicherladung else control(); });
-
Das Ventil bleibt Eingeschalten der Datenpunkt vom KNX her ist somit "Ein"
Ich habe die Zeilen Eingefügt:
` > Liefert der Datenpunkt idLadung nur einen kurzen Impuls? Bitte prüfen` > Code:
// Abschaltung wegen Speicherladung
on(idladung, function(dp) {
ladung = dp.state.val;
log('Speicherladung: ' + ladung); // Debug
if(ladung) setState(idpump, 0); // FBH-Pumpe sofort aus, wenn Speicherladung
else control();
});
und die Einschaltzeit der Boilerrladung geändert,danach standen diese Zeilen im LOG:
hm-rpc.2 2018-01-04 11:12:43.295 info xmlrpc -> 0 devices hm-rpc.2 2018-01-04 11:12:43.287 info xmlrpc <- listDevices ["hm-rpc.2"] javascript.0 2018-01-04 11:10:46.085 info script.js.Heizung.Boilerladung.Boilerladung: registered 0 subscriptions and 3 schedules javascript.0 2018-01-04 11:10:46.077 info Start javascript script.js.Heizung.Boilerladung.Boilerladung javascript.0 2018-01-04 11:10:46.064 info Stop script script.js.Heizung.Boilerladung.Boilerladung hm-rpc.2 2018-01-04 11:09:13.278 info xmlrpc -> 0 devices hm-rpc.2 2018-01-04 11:09:13.270 info xmlrpc <- listDevices ["hm-rpc.2"] hm-rpc.2 2018-01-04 11:05:43.194 info xmlrpc -> 0 devices hm-rpc.2 2018-01-04 11:05:43.182 info xmlrpc <- listDevices ["hm-rpc.2"] hm-rpc.2 2018-01-04 11:02:13.148 info xmlrpc -> 0 devices hm-rpc.2 2018-01-04 11:02:13.135 info xmlrpc <- listDevices ["hm-rpc.2"] javascript.0 2018-01-04 11:01:45.660 info script.js.Heizung.Pumpen.FBH-Pumpe: Speicherladung: 1 javascript.0 2018-01-04 11:01:00.239 info script.js.Heizung.Pumpen.FBH-Pumpe: Speicherladung: 0 javascript.0 2018-01-04 11:01:00.159 info script.js.Heizung.Pumpen.FBH-Pumpe: Speicherladung: 1 javascript.0 2018-01-04 11:01:00.116 info script.js.Heizung.Pumpen.FBH-Pumpe: Speicherladung: 0 javascript.0 2018-01-04 11:01:00.113 info script.js.Heizung.Pumpen.FBH-Pumpe: Speicherladung: 1 javascript.0 2018-01-04 10:58:47.109 info script.js.Heizung.Boilerladung.Boilerladung: registered 0 subscriptions and 3 schedules javascript.0 2018-01-04 10:58:47.098 info Start javascript script.js.Heizung.Boilerladung.Boilerladung javascript.0 2018-01-04 10:58:47.087 info Stop script script.js.Heizung.Boilerladung.Boilerladung hm-rpc.2 2018-01-04 10:58:43.092 info xmlrpc -> 0 devices hm-rpc.2 2018-01-04 10:58:43.084 info xmlrpc <- listDevices ["hm-rpc.2"] web.0 2018-01-04 10:56:30.083 info 2018-01-04T09:56:30.078Z Connected system.user.admin javascript.0 2018-01-04 10:56:08.350 info script.js.Heizung.Pumpen.FBH-Pumpe: registered 4 subscriptions and 0 schedules javascript.0 2018-01-04 10:56:08.342 info Start javascript script.js.Heizung.Pumpen.FBH-Pumpe javascript.0 2018-01-04 10:56:08.315 info Stop script script.js.Heizung.Pumpen.FBH-Pumpe hm-rpc.2 2018-01-04 10:55:13.044 info xmlrpc -> 0 devices
-
Die Pumpe schaltet aber nach 3 Minuten wider ein.
-
Die Pumpe schaltet aber nach 3 Minuten wider ein. `
Und das passiert auch durch den JavaScript adapter oder könnt es irgendwo anders her ?
–-----------------------
Send from mobile device
Das schöne ios hat Auto Korrektur zum k****
Wer Schreibfehler findet darf sie behalten oder auf eBay verkaufen, mindest Umsatz 10% für die community
-
Und das passiert auch durch den JavaScript adapter oder könnt es irgendwo anders her ? `
Auch das lässt sich durch ein zusätzliches Log feststellentimer = setTimeout(function() { setState(idpump, 1); log('FBH-Pumpe Ein, Typ von Ladung: ' + typeof ladung); }, 300000); // 5 Minuten Verzögerung
-
Auch das lässt sich durch ein zusätzliches Log feststellen `
man sieht es auch am object wen man mit de maus drauf stehen bleibt
979_aenderung.jpg -
Aus der Anforderung zur Ladung kommt es nicht obwohl mir dieser Eintrag
etwas verdächtig vorkommt:
Warum hier innerhalb nicht mal einer Sekunde 4x geschalten wird??
Ich werde mir mal das Script zur Ladung des Boilers nochmals ansehenob es von dort kommt.
-
@paul53 Hallo Paul 53, ich habe das PI-Regler-Script für die Vorlauftemperatur in Verbindung mit dem 3-Punkt-Mischer-Script getestet. Es funktioniert soweit super. Vielen Dank für die tolle Umsetzung für eine Idee, die ich schon länger hatte aber nicht umzusetzen wusste. Eine Sache habe ich gefunden, wobei meine Javascript Kenntnisse nicht reichen, um den Fehler zu finden. Wenn das Stellsignal vom PI-Regler 100 % beträgt, fährt beim Start des Mischer-Scripts nach der Initialisierungsfahrt der Mischer nicht wieder auf. Das Stellsignal ist 100 und der Mischer fährt nicht mehr. Wenn ich kurz manuell das Stellsignal auf einen Wert unter 100 setze, fährt der Mischer auf und die Regelung funktioniert wieder super. Das tritt jedesmal nach der Initialisierung auf, wenn 100 % als Stellsignal anliegen. Hast du evtl. eine Idee?
MfG Silvio
-
@SilSchm sagte:
Das Stellsignal ist 100 und der Mischer fährt nicht mehr.
Der Trigger, der die Mischerbewegung anstößt, benötigt eine Wertänderung, die nicht erfolgt, wenn das Stellsignal auf 100 % bleibt. Erweitere bitte den Scriptstart (Zeilen 14 bis 20) um das Fahren in die Sollposition:
// Bei Skriptstart fährt Antrieb auf Position 0 (Zu) setState(idAuf, false); setState(idZu, true); var timer = setTimeout(function() { setState(idZu, false); motor = false; move(getState(idy).val); // Fahren in Sollposition }, 1000 * (Laufzeit + 10));