NEWS
Heizkreisregelungen - JS
-
> Logikwert und min: 0, max: 1 sind ein Widerspruch. Diesbezüglich wurde der Adapter schlampig programmiert. Dann kommt es darauf an, auf welche Werte reagiert wird.
Sollte ich das in den Einstellungen ändern, Die Ventile und auch die Pumpen werden richtig geschalten.Dann kann ich im FBH-Script die Declaration der Variablen und auch das Ein und Ausschalten dieser entfernen.
-
Sollte ich das in den Einstellungen ändern, `
Nein - auch wenn es nicht korrekt ist - die Datenpunkteigenschaften werden vom Adapter erzeugt.
@sound31:Die Ventile und auch die Pumpen werden richtig geschalten. `
Mit 0/1 ?Dann kann ich im FBH-Script die Declaration der Variablen und auch das Ein und Ausschalten dieser entfernen. `
Ja. -
Hallo Paul53,
gibt es eine einfache Möglichkeit in die Scripte eine Stop Funktion einzufügen bei
zB. Service?
Aktuell hatte es mit die Heizkreispumpe am Donnerstag zerlegt um am Samstag
in der früh das Heizregister der Gastherme.
Das Script für den Mischermotor tut auch bereits Ihren Dienst.
Allerdings sind manchmal beide Ausgänge angesprochen.
Grüße, Andy.
-
gibt es eine einfache Möglichkeit in die Scripte eine Stop Funktion einzufügen bei zB. Service? `
Was soll erreicht werden ?Was meinst Du mit Service ?
-
Heute bekomme ich das neue Register für die Gastherme.
zum einbauen muss ich das Wasser zum Teil aus dem Heizkreis entfernen.
Dazu muss ich die Pumpe auch ausschalten das geht jetzt nur über
das ausschalten des Scrips oder Stromlos machen.
-
Dazu muss ich die Pumpe auch ausschalten das geht jetzt nur über das ausschalten des Scrips oder Stromlos machen. `
Stromlos machen ist keine schlechte Lösung. Jedes Skript lässt sich auch im Reiter "Javascript" deaktivieren und nach dem Deaktivieren des Skripts kann man den Datenpunkt für die Pumpe im Reiter "Objekte" auf "Aus" ändern.Du solltest noch einen Datenpunkt "Heizperiode" oder "Jahreszeit" (Winter = true) vom Typ "Schalter" unter javascript.0 anlegen und darüber die Mischeransteuerung und die Pumpenansteuerung beeinflussen.
const idHeizen = 'javascript.0.Heizperiode'; ... var heizen = getState(idHeizen).val; function control() { if(timer) clearTimeout(timer); if ((pump1 || pump2) && heizen) { ... } // am Ende zusätzlich on(idHeizen, function(dp) { heizen = dp.state.val; control(); });
-
-
Hallo,
> Du solltest noch einen Datenpunkt "Heizperiode" oder "Jahreszeit" (Winter = true) vom Typ "Schalter" unter javascript.0 anlegen und darüber die Mischeransteuerung und die Pumpenansteuerung beeinflussen.
das würde heissen das nur die Pumpen abgeschalten werden und die Ventile und der Mischer weiter (auch im Sommer)fahren würden.
Bei einer reinen Außentemperatur gesteuerte Abschaltung würde die Heizung auch zu laufen beginnen wenn die
Raumtemperaturen im Sommer mal unter den Sollwert sinken würde.
> Welche Laufzeit hast Du ermittelt ?
Von komplett "Geschlossen" bis "Offen" sind es 110sec.Frage zur Mischeransteuerung:
Da ich die Pumpe für den HK im OG ja auf eine Elektronische ändern muss, die die ich jetzt verbaut habe
ist nicht passen für Heizkörperbetrieb (ist halt ein altes Haus).
Sollte ich diese dauern laufen lassen oder über eine Anforderung aus dem Script heraus.
Grüße, Andy
-
das würde heissen das nur die Pumpen abgeschalten werden und die Ventile und der Mischer weiter (auch im Sommer)
fahren würden. `
Nein, der Datenpunkt "Heizperiode" sollte auch bei der Ventil- und Mischeransteuerung ausgewertet werden.
@sound31:Sollte ich diese dauern laufen lassen oder über eine Anforderung aus dem Script heraus. `
Da die Pumpe selbst auf eine sehr geringe Leistung runter regelt, würde ich sie nur im Sommer (Datenpunkt "Heizperiode")abschalten.Im Sommer sollte ein Wartungslauf gegen das Festsitzen ergänzt werden: Pumpen täglich 1 Minute ein, FBH-Ventile wöchentlich 5 Minuten auf; bei der FBH erst die Pumpe, danach die Ventile.
-
Denn Datenpunkt Heizperiode habe ich auch ins Script der FBH geschrieben
danach schaut das so aus:
var Xp = 2; var Tn = 3600; var pwm = 100; //* PWM Zeit verlängert const idHeizen = "javascript.0.Heizperiode"/*Heizperiode*/; var xid = "knx.0.Sensoren.Erdgeschoss.Temp-Sensor-Kueche-EG"/*Temp-Sensor-Kueche-EG*/; var wid = "javascript.0.Sollwert-Küche-EG"/*Sollwert-Küche-EG*/; var yid = "knx.0.Aktoren.Heizung-Technik.Ventil-FBH-Kueche-EG"/*Ventil-FBH-Kueche-EG*/; var n = 0; // Intervallzähler var PI = require('pi-controller'); var pi = new PI(Xp, Tn); pi.setOutputMax(pwm); // default: OutputMax = 100 // Abfrage für Sommer/Winter noch einfugen function control() { var x = getState(xid).val; // Istwert in °C var w = getState(wid).val; // Sollwert in °C var y = pi.Control(w - x); // Stellsignal n++; if (n >= pwm) n = 0; if (n < 8 && y > 0) // Mindesteinschaltdauer: 8 Intervalle { setState(yid, 1); // setState(pump, 1); } else if (n >= 8 && y <= n) // Zwei Ventile werden geschalten { setState(yid, 0); // setState(pump, 0); } } control(); // Script start setInterval(control, 30000 ); // Intervall: von 1 auf 0,5 Minuten geändert // Abschaltung on(idHeizen, function(dp) { heizen = dp.state.val; control(); });
nach dem Start des Scripts kommen zwei Warn Meldungen:
(Ausdruck beim Start)
08:03:46.803 [info] javascript.0 Stop script script.js.Heizung.Küche-EG.FBH-Küche-EG
08:03:47.528 [info] javascript.0 Start javascript script.js.Heizung.Küche-EG.FBH-Küche-EG
08:03:47.528 [warn] javascript.0 at control (script.js.Heizung.Küche-EG.FBH-Küche-EG:25:9)
08:03:47.528 [warn] javascript.0 at script.js.Heizung.Küche-EG.FBH-Küche-EG:34:1
08:03:47.528 [info] javascript.0 script.js.Heizung.Küche-EG.FBH-Küche-EG: registered 1 subscription and 0 schedules
ist das so korrekt?
Bei Script für die Regelung der Temperatur im OG genügt es ja wen die Abschaltung im
> // 3-Punkt-Ansteuerung aus Stellsignal
ist, oder? -
Die Warnung kommt, weil die Variable heizen nicht deklariert ist.
var heizen = getState(idHeizen).val;
Die Auswertung muss in der Funktion control() erfolgen, damit die Ventile zu bleiben.
if (n < 8 && y > 0 && heizen) // Mindesteinschaltdauer: 8 Intervalle
Beim Übergang Winter zu Sommer ist es besser, die Ventile gleich zu schließen.
// Abschaltung on(idHeizen, function(dp) { heizen = dp.state.val; if(!heizen) setState(yid, 0); });
-
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(); });