NEWS
KNX Heizungsaktor steuern?
-
Ich werde zukünftig einen KNX Heizungsaktor haben, der die Ventile der Heizkörper ansteuert. Die IST-Temperatur kommt von Temperatursensoren in den Tastern in jedem Raum.
Ich würde jetzt gern pro Raum ein Wochenprogramm erstellen, dass dem Aktor die SOLL-Temperatur pro Raum vorgibt. Wie kann ich das realisieren?
-
Ich habe es mit diesen Datenpunkten für Tagesprofile und Wochenprofil
, diesen Datenpunkten für die Sollwerte
und mit diesem Skript für jeden Raum gelöst:! ```
// Sollwert aus akt. Tagesprofil / Abwesenheit / Party ! // Raumkurzname am Anfang des Datenpunktnamen und als JS-Gruppenname var raum = name.split(".")[2]; ! var abwid = getIdByName("Abwesenheit.Modus"); // Auto, kurz abwesend, Reise, Aufheizen var partyid = getIdByName(raum + ".Unterbrechung"); // Auto, Manu, Party var akttagid = getIdByName(raum + ".Tagesprofil"); var swabwid = getIdByName(raum + ".SW.Abwesend"); var swheizid = getIdByName(raum + ".SW.Aufheizen"); var swecoid = getIdByName(raum + ".SW.Economy"); var swcomfid = getIdByName(raum + ".SW.Komfort"); var swmanuid = getIdByName(raum + ".SW.Manu"); // SW Manu/Party var swnachtid = getIdByName(raum + ".SW.Nacht"); var swreiseid = getIdByName(raum + ".SW.Reise"); var swid = getIdByName(raum + ".SW.Profil"); // Profilsollwert ! var abw = getState(abwid).val; var party = getState(partyid).val; var akttag = getState(akttagid).val; ! function sollwert() { if(abw == 3) setState(swid, getState(swheizid).val, true); else if(abw == 2) setState(swid, getState(swreiseid).val, true); else if(abw == 1) setState(swid, getState(swabwid).val, true); else if(!abw) { if(party) setState(swid, getState(swmanuid).val, true); else { var jetzt = new Date(); jetzt = 60 * jetzt.getHours() + jetzt.getMinutes(); var profil = akttag.split(";"); var anzahl = profil.length; for(var i = anzahl - 1; i >= 0; i--) { var change = profil[i].split(" "); var time = change[0].split(":"); time = 60 * parseInt(time[0]) + parseInt(time[1]); if(time <= jetzt) { var level = change[1].toUpperCase(); switch(level) { case "C": case "K": setState(swid, getState(swcomfid).val, true); break; case "E": case "S": setState(swid, getState(swecoid).val, true); break; case "N": setState(swid, getState(swnachtid).val, true); break; case "A": setState(swid, getState(swabwid).val, true); break; default: log("Falscher Sollwertlevel !", "warn"); } return; } } } } } ! sollwert(); // Script start ! on(abwid, function(dp) { abw = dp.state.val; sollwert(); }); ! on(partyid, function(dp) { party = dp.state.val; sollwert(); }); ! on(akttagid, function(dp) { akttag = dp.state.val; sollwert(); }); ! schedule("*/10 * * * *", sollwert);
[/i] -
ah ok. danke!
-
Nachtrag: Mit dem folgenden Skript wird jeweils um Mitternacht das aktuelle Tagesprofil gesetzt:
!
// aktuelles Tagesprofil ! // Raumkurzname am Anfang des Datenpunktnamen und als JS-Gruppenname var raum = name.split(".")[2]; ! var selectid = getIdByName(raum + ".Profilauswahl"); var wocheid = getIdByName(raum + ".Wochenprofil"); var aktid = getIdByName(raum + ".Tagesprofil"); var tag1id = getIdByName(raum + ".Tagesprofil-1"); var tag2id = getIdByName(raum + ".Tagesprofil-2"); var tag3id = getIdByName(raum + ".Tagesprofil-3"); var tag4id = getIdByName(raum + ".Tagesprofil-4"); var tag5id = getIdByName(raum + ".Tagesprofil-5"); var fhid = getIdByName("Feiertag.heute"); var fmid = getIdByName("Feiertag.morgen"); ! function aktprofil(select) { var profil; if(select == 6) { // Wochenprogramm select = getState(wocheid).val; select = select.split(","); var wd = new Date(); wd = wd.getDay() - 1; if(wd < 0) wd = 6; // Sonntag var fh = getState(fhid).val; var fm = getState(fmid).val; if(fh && !fm && (wd < 4 || wd == 6)) wd = 6; if(fh && (fm || wd == 4 || wd == 5)) wd = 5; if(fm && !fh && wd < 4) wd = 4; if(fm && wd == 6) wd = 5; select = parseInt(select[wd]); } switch(select) { case 1: profil = getState(tag1id).val; break; case 2: profil = getState(tag2id).val; break; case 3: profil = getState(tag3id).val; break; case 4: profil = getState(tag4id).val; break; case 5: profil = getState(tag5id).val; break; default: profil = "00:00 A"; } setState(aktid, profil, true); } ! on(selectid, function(dp) { aktprofil(dp.state.val); }); ! schedule("1 0 0 * * *", function() { // 1 s nach Mitternacht aktprofil(getState(selectid).val); }); aktprofil(getState(selectid).val); // Script start !
Dabei werden auch Feiertage (heute, morgen) berücksichtigt.