NEWS
Zentrale Heizungssteuerung
-
Hallo zusammen,
gibt es ein "best practice" zur Umsetzung einer Heizungssteuerung in ioBroker?
Diese sollte Anwesenheit und Abwesenheit realisiert bekommen (über Variable bzw. Geofency) sowie einen Wochenzeitplan besitzen. (Dieser wird dann von der Anwesenheitssteuerung überschrieben.)
Unter CCU.IO hatte ich mir eine Lösung über die ScriptGUI gebaut bei ioBroker bin ich noch unsicher was die beste Umsetzungsform ist.
-
Rein JS
-
Scenes?
-
NodeRED
-
Kalenderadapter?
Vorallem sollte die Kombination mit Fenstersensoren funktionieren. Meine zentrale Steuerung überschrieb leider regelmäßig die Absenktemperatur bei (zu lange) geöffneten Fenstern
Freue mich über Vorschläge und Tipps.
Danke
Beste Grüße
Trident
-
-
Hallo,
die Wochenpläne (für Homematic) steuere ich mittels occ. Dort werden die Thermostaten
aber immer auf "AUTO" gestellt.
Mittels homekit steuere ich im Moment neue Temperaturen wenn ich zuhause bin und es mir nicht passt.
Szenen / Geofency würde ich gerne testen, bin ich aber leider immer noch nicht dazu gekommen.
LG Christian
-
Bei mir habe ich eine State Maschine implementiert: an definierte Zeitpunkte wird eine State Variable zwische awake, empty und sleeping gewechselt. Das Script dafür habe ich in Forum vor 2 Monaten gepostet.
Danach habe ich eine Script, dass die Ziel temperature für jedes Zimmer setzt. Dieses Script erkennt automatisch, wenn eine Fenster in gleiche Zimmer aufgemacht wird und dann setzt eine niedrige Zieltemperature bis die Fenstern zugemacht wird. Damit vermeide ich eine direkte Verbindung zwischen Thermostat und Fenster Sensor, so das die Batterien in Thermostat länger halten.
Hier ist meine Heizung script:
`var TEMPERATURES_ID="javascript.0.roomTemperatures"; var STATE_PREVIEW_ID="javascript.0.homeStatePreview"/*homeStatePreview*/; var DEFAULT_TEMP=21; var OPEN_WINDOW_TEMP=12; var ICON="../hm-rpc/icons/42_hm-cc-tc_thumb.png"; //Register all rooms rooms = getEnums('rooms'); for (var i in rooms){ var roomName = rooms[i].name; log("ROOM: "+roomName); $('state[id=.SETPOINT](rooms='+roomName+')').each(function(id, i){ //log(id); registerTermostat(roomName, id); }); } function registerTermostat(roomName, termostatTempId){ log("Registering termostat for room "+roomName); //Create grouping states createState(TEMPERATURES_ID, 0 ,true, {role:"roomTemperatures",icon:ICON}); var roomTemperatures4Termostat = TEMPERATURES_ID+"."+roomName; createState(roomTemperatures4Termostat, 0, true, {role:"roomTemperatures",icon:ICON}); //Get the state names from STATE_PREVIEW homeStates = getObject(STATE_PREVIEW_ID).common.states; for (var state in homeStates) { //Create variable to store temperature for this room and state var stateName=TEMPERATURES_ID+"."+roomName+"."+homeStates[state]; createState(stateName, DEFAULT_TEMP, false, {role:"roomTemperatures", unit: "°C", icon: ICON, desc: "Temperature for room "+roomName+" and state "+homeStates[state] }); //log("VALUE: "+JSON.stringify(getState(stateName))); //Register for changes in this variable on(stateName, cb(setTemperature)); } //Register window states var windowIDs = []; $('state[id=.STATE](rooms='+roomName+')').each(function(id, i){ var object = getObject(id); if(object.native.CONTROL == "DOOR_SENSOR.STATE") { log("Detected window ("+roomName+"):"+getObject(id).common.name+" - "+id); windowIDs.push(id); on(id, cb(setTemperature)); } }); //Register for changes in home state on(STATE_PREVIEW_ID, cb(setTemperature)); //Set current temperature for this room setTemperature(); //Function that sets the temperature for this room function setTemperature(){ //Are windows open? var windowsOpen = false; for (var i in windowIDs){ windowsOpen |= getState(windowIDs[i]).val; } if ( windowsOpen) { log ("Target temp for "+roomName+": "+OPEN_WINDOW_TEMP+" (OPEN WINDOW)"); setStateIfChanged(termostatTempId,OPEN_WINDOW_TEMP); } else { //Retrieve target temperature for this state var previewState = getState(STATE_PREVIEW_ID).val; var previewStateName = homeStates[previewState]; var targetTemperateState = getState(roomTemperatures4Termostat+"."+previewStateName); //If we just create the state, then it might still not be available -> use DEFAULT_TEMP var targetTemperate = targetTemperateState ? targetTemperateState.val : DEFAULT_TEMP ; //Convert to float targetTemperate = parseFloat(targetTemperate); //Set temperature log ("Target temperature for "+roomName+" and previewState "+previewStateName+" is "+targetTemperate); setStateIfChanged(termostatTempId,targetTemperate); } } }`[/i][/i]
-
Danke für die Antworten und guten Ideen!
Das Skript sieht interessant aus, wobei mich als einziges der Verzicht auf die Direktverknüpfung stört. Ich habe in zwei Räumen das Wandthermostat zusätzlich zu dem Thermostat an der Heizung, da die Räume sonst nicht vernünftig zu regeln sind. Diese Funktion würde ich ohne Gruppe verlieren. Aber ich werde mir auf jeden Fall ein paar Anregungen aus dem Skript holen!
Danke!
VG
Trident
-
der Verzicht auf die Direktverknüpfung stört `
Ich habe noch eine Direktverknüpfung zwischen Ventil und Termostat, da die alten Homemematic Ventile die ich zu Hause habe, nicht direkt gestört werden können. Das ist bei die neue Homematic Ventil anders in der "Theorie", da die Temperatur damit so sehr starkt abeicht, dass man auch eine Wandtehrmostat braucht.
Wenn Du nur die Wandtermostat steuern willst, kannst Du die Ventile ausfiltern:
$('channel{TYPE=THERMALCONTROL_TRANSMIT}[state.id=*.SET_TEMPERATURE](rooms='+roomName+')').each(function(id, i){ //log(id); registerTermostat(roomName, id); });
So muss braucht man keine zusätzliche Gruppen.
Die Direktverknüpfung habe ich nur zwischen Ventil und Fensterkontekt vemiedet, weil damit die alte Wandtehrmostaten immer dann wach bleiben mussten und damit die Akkus jede weniger Monaten getauscht werden mussten. Ich weiss nicht, ob bei die neue Wandtehrmostaten das noch dem Fall ist.