Fußbodenheizung Script

Hallo

Ich bräuchte folgende hilfe beim Script erstellen:

Fußbodenheizung einfache Reglung:

Vorgabe im WebFront der gewünschten Raumtemperatur - beispiel 22 Grad

Soll Temperatur 22 Grad

Die Ist Temperatur beträgt 20 Grad — befehl Ventil öffnen bei erreichen der Soll Temperatur – Ventil schliessen das gleiche beim unterschreiten der Soll Temperatur – Ventil öffnen.
Vielleicht noch ein Zeit Programm.

Das wäre für mich die einfachste Lösung , weil der errechnete Raumtemperatur (Außentemperatur gesteuert) kommt von der Heizungssteuerung.

Vielleicht hat schon jemand so ein Programm im Betrieb ??

Wäre um jede Hilfe dankbar.

Grüße
docrossi :confused:

hi docrossi,

ich glaub du denkst da zu einfach. Die Heizungssteuerung errechnet nur den Heizbedarf, also ein Rücklauf oder Vorlaufsoll, aber nicht die Raumtemperatur.
Im Idealfall bekommt sie das auch auf die Reihe, wenn ein hydraulischer Abgleich für alle Räume passiert ist! In der Praxis sind aber Einzelraumregelungen (auch so wie du es planst) oft von nöten!

Was du realisieren willst ist doch ein ein einfacher 2Punkt Regler. Soweit ich weiss stellt hier IPS doch solch einen Mittlerweile von Haus aus zur Verfügung!
Ansonsten kannst du es doch einfach mit einer „if“ Verzweigung lösen.

if (IstTemp<SollTemp)
{
//Ventil auf
}
else
{
//Ventil dicht
}

Ich selber habe leider nur Wandflächenheizungen, aber ich geh stark davon aus, dass du mit dieser Art Regelung keine genaue Regelung hinbekommst. Wenn du dein Ventil schließt ist soviel Energie im Boden, dass deine Raumtemperatur um locker 1 Grad überschießt! Wenn du noch die Möglichkeit hast, dann versuch noch einen Temp-Sensor in den Boden zu setzen! So weisst du wie geladen der Boden ist und du kannst „früher“ eingreifen!

Gruß

Kai

ok

Danke werde es mit dem Heating Cotrol … probieren.

:smiley:

Damit wirst Du aber starkes Überschwingen bekommen. Ich hab das jetzt mal für mich ausprobiert und ich habe eine logarithmische Kurve erstellt die mein Regler einhält wobei ich pro Raum 2 Werte, eine Art Parrallelverschiebung und eine Gesamtverschiebung, setzen kann. bisher hält sich das Überschwingen in Grenzen aber ich experimentiere noch.

Ich habe bei der Überwachung mit Multichart festgestellt, dass die Maßnahme die Rollden zu automatisieren sehr viel gebracht hat. Wenn ich abends im Raum bin mit meiner Maus, der Fernseher läuft und das Licht an ist geht die Temp locker um 0,8 Grad nach oben, auch wenn ich nicht heize und sie sinkt nachts nie unter 21 Grad.

Hallo,
man sollte, bevor man sich über die Regelung einer FBH ernsthaft Gedanken macht, den grundsätzlichen Sinn zu hinterfragen…Einfach mal unterstellt, es handelt sich hier um eine konventionelle FBH mit entsprechender Speichermasse, ist die einzig sinnvolle Regelung die Ausnutzung des Sebstregelungeffektes…Viel wichtiger wäre ein exakter hydraulischer Abgleich des ganzen Systems…
Der beschriebene Regelungsanasatz macht also nur bei Radiatoren Sinn…
MFG, kabo63.

Haargenauso sehe ich das auch! Direkt mit einer Einzelraumregelung (ERR) loszulegen wäre aus meiner Sicht auch ERSTMAL kontraproduktiv!
Eine vernünftige Regelung bei meinen Wandflächen hab ich erst hinbekommen wie die Sensoren in der Wand mit am Start waren, denn den Vorlauf den du jetzt per Ventil in deinen Boden jagst muss erst mal den Esstrich/Fliesen erwärmen und diese dann die Raumluft. Da hast direkt mal ne große Zeit Versatz!

Mein Fazit: Geh das Thema anders an!!! :smiley:

Ich verstehe das Problem nicht.
Ich habe in meinen Räumen Fußbodenheizung und LCN Temp Sonsoren.
In LCN gebe ich an, dass ich eine Raumwärme von 21 Grad haben möchte.
nun ist es so, daß sie bei 20,7 Grad die Ventile öffnen und bei 21,2 Grad die Ventile schliessen.
Klar „schiesst“:eek: die Temperatur auch mal auf 21,5 Grad hoch - Aber wen interessieren 0,3 Grad? Mal ehrlich…die sind mir doch schnuppe…:stuck_out_tongue:

…das tun viele nicht - es wäre auch müßig jetzt und hier die Details aufzudröseln - da müßte man einen separaten Thread aufmachen :wink:
Ein paar Infos dazu unter nachfolgendem Link:
Regelung der Fußbodenheizung - Der Selbstregeleffekt - SHKwissen - HaustechnikDialog
Empfehlenswert, allerdings schon bissel fachspezifisch, aber auch mit schönen Beispielen: Bosy-online - Sanitr-, Heizungs-, Klima-, Solar- und Technik-Informationen

Wie auch immer - ich möchte beileibe niemanden etwas ausreden :wink: wer’s halt braucht - auch ok :slight_smile:

MFG, kabo63.

Moin…

…starte doch einfach mal einen Versuch und berichte dann. Was soll denn passieren?
Ich hab bei mir auch ne Fussbodenheizung und kann nur bestätigen das diese sehr träge ist.
Deine 2-Punktregelung wird gut überschiessen. Aber Probieren geht über Studieren!! Also ab dafür! :slight_smile:
Google findet auch ne ganze Menge zum Thema „Fussbodenheizung“ und „Regelung“!

Grüße Peter

Natürlich kann man auch ein rel. träges System wie eine Fußbodenheizung regeln. Es gibt eine Studie, die beweist, dass die gebetsmühlenartig wiederholten Sätze zum „Selbstregeleffekt“ nur bedingt stimmen: http://www.bosy-online.de/Fachbeitrag_TGA_5_2005_ERR%20und%20FBH_BVF_Plate.pdf

Ein Zweipunkt Regler macht hier aber keinen Sinn, da es eben wegen der Trägheit des Systems zu starkem Übersteuern kommen wird. Das Zauberwort heißt hier Pulsweitenmodulation (PWM). Such mal danach, da wirst Du hier im Forum einiges zu finden.

Das Ganze sieht so aus, dass Du z.B. alle 10 Minuten den Ist mit dem Soll vergleichst und je nach dem wie nah Du dran bist einen Aktor schaltetst. Also weit weg (1 Grad) 100% das bedeutet der Aktor ist für 10 Minuten an. Nah dran (0,1 Grad) 30% also den Aktor für 3 Minuten an schalten, bis zum nächsten Test bleibt er dann 7 Minuten aus.

Ich teste meine Formel im Moment noch im Wohnzimmer aber es sieht schon gar nicht schlecht aus.

Ich habe z.B. auch den Fall, dass einige Zimmer nur sehr selten genutzt werden (wenn die Kinder mal übers Wochenende kommen) und da kann man dann mit einer Einzelraumregelung eine geringere Temperatur fahren und wenn die Kinder da sind eine höhere. Das geht ohne gar nicht.

Ach ja noch was, als ich noch keine Einzelraumregelung hatte ist im Wohnzimmer wegen der großen Scheiben die Temperatur wenn die Sonne rein schien auch gerne mal von 22 auf über 24 Grad gestiegen. Das passiert heute nicht mehr. Also für mich heißt das ganz klar Einzelraumregelung macht Sinn.

Hallo

das hört sich gut an !!

Ich habe jetzt eine zwei Punkt Regelung über das Heating Control gelöst , ist zwar nicht die saubere Lösung …

wenn deine Testphase abgeschlossen ist könntest du das Script veröffentlichen ??

Gruß

Das Skript sieht so aus und wird alle 10 Minuten getriggert:

<?

   include_once "IPSLogger.ips.php";

 	$heizperiode = GetValueBoolean(33680 /*[Program\Heizung\Data\Heizperiode]*/);
	$automatik = GetValueBoolean(13922 /*[Program\Heizung\Data\Zustand\Modus]*/);
	$manuelTemp = GetValueFloat(29883 /*[Program\Heizung\Data\Zustand\Manuell\Temperatur]*/);

   $rooms = array();

	/*
	Array für die Steuerung:
	   Name       = Name des Raumes
	   Sollwert   = Variable die den Sollwert des Raumes enthält
	   Istwert    = Variable die den Istwert des Raumes enthält
	   Aktor      = Der Schaltaktor der den Heizkreis steuert
	   Parralele  = Variable die die Parallelverschiebung der Heizkurven für den Raum Regelt
	   Korrektur  = Variable die den Korrekturwert für die Heizkurve des Raumes hält
	   Zusatz     = Boolsche Variable, die wenn TRUE dafür sorgt, dass die Temperatur in der Variablen "ZusatzTemp" statt der Solltemperatur des Reglers verwendet wird
      ZusatzTemp = Solltemp. die angefahren werden soll, wenn die Solltemp des Reglers überschrieben wird
	*/
	
	//Wohnzimmer
   $rooms[] = array("Name" => 'Wohnzimmer', "Sollwert" => 47561, "Istwert" => 12997, "Aktor" => 31710, "Parallele" => GetValue(50653), "Korrektur" => Getvalue(18084), "Zusatz" => 0 , "ZusatzTemp" => 0 );

	foreach ($rooms as $num => $room)
	{
	   If ($heizperiode)
	   {
		   //Sollwert holen je nach Einstellung
		   $sollwert = GetSollwert($room, $automatik, $manuelTemp);
			$room['Sollwert'] = $sollwert;
			
			//Istwert ermitteln aus Regler
			$istwert = getValueFloat($room['Istwert']);
			$room['Istwert'] = $istwert;
			
			//Stellwert ermitteln
			$pwm = SetPWM($room);

			//Heizung schalten
			if($pwm == 0)
			{
			   //Aktor aus schalten
			   HM_WriteValueBoolean($room['Aktor'], "STATE", false);
			   IPSLogger_Dbg (__file__, "Raum '".$room['Name']."' => Soll: ".$sollwert."°C, Ist: ".$istwert."°C, Aktor: ".($pwm / 60 * 10)."%");
			}
			else
			{
            //Aktor für die berechnete Zeit einschalten
			   HM_WriteValueFloat($room['Aktor'], "ON_TIME", $pwm); //für berechnete Zeit ein
   			HM_WriteValueBoolean($room['Aktor'], "STATE", true);

				//Anzeigekorrektur wieder raus nehmen für den Logger
				if (($pwm / 60 * 10) > 100)
			   {
					$pwm = 100 * 60 / 10;
				}

   			IPSLogger_Dbg (__file__, "Raum '".$room['Name']."' => Soll: ".$sollwert."°C, Ist: ".$istwert."°C, Aktor: ".($pwm / 60 * 10)."%");
			}
		}
		else
		{
		   //Aktor sicherheitshalber aus schalten
		   HM_WriteValueBoolean($room['Aktor'], "STATE", false);
		   IPSLogger_Dbg (__file__, "Raum '".$room['Name']."' => Aktor aus.");
		}
	}

	function GetSollWert($raum, $auto, $manTemp)
	{
		if ($auto == 1)
		{
			//Sollwert vom Regler holen
			$soll = getValueFloat($raum['Sollwert']);
		}
		else
		{
		   //manuellen Sollwert holen
         $soll = $manTemp;
		}

		//Ist Zusatzbedingung vorhanden?
		If (IPS_VariableExists($raum['Zusatz']))
		{
		   //Wenn Zusatzbedingung erfüllt Sollwert setzen
		   if (getValueBoolean($raum['Zusatz']) == 0)
		   {
		      $soll = getValueFloat($raum['ZusatzTemp']);
		   }
		}
		return $soll;
	}
	
	function SetPWM($raum)
	{
	   $delta = $raum['Sollwert'] - $raum['Istwert'];
		$parallel = $raum['Parallele'];
		$korrektur = $raum['Korrektur'];

      //Berechnet
		if ($delta >= 0)
		{
			$pwm = round((log10($delta + $parallel * 0.001) + $korrektur * 0.01)*100, 0);
			if ($pwm > 100){ $pwm = 100; }
		}
		else
		{
		   $pwm = 0;
		   //echo "test
";
		}

/*
		switch($delta)
	   {

			//alt
	      case ($delta < 0): $pwm = 0; break;
	      case ($delta > 0.8): $pwm = 100; break;
	      case ($delta > 0.6): $pwm = 90; break;
	      case ($delta > 0.4): $pwm = 75; break;
         case ($delta > 0.2): $pwm = 40; break;
	      case ($delta >= 0): $pwm = 20; break;
	      
	      //neu
	   	case ($delta < 0): $pwm = 0; break;
      	case ($delta > 0.9): $pwm = 100; break;
	      case ($delta > 0.8): $pwm = 100; break;
	      case ($delta > 0.7): $pwm = 100; break;
	      case ($delta > 0.6): $pwm = 95; break;
	      case ($delta > 0.5): $pwm = 90; break;
	      case ($delta > 0.4): $pwm = 80; break;
	      case ($delta > 0.3): $pwm = 70; break;
         case ($delta > 0.2): $pwm = 60; break;
         case ($delta > 0.1): $pwm = 45; break;
	      case ($delta >= 0):  $pwm = 25; break;
		}
*/

		//Einschaltzeit in Sekunden berechnen
		$dauer = (10 * 60) * $pwm / 100;
      if ($pwm == 100)
		{
   		$dauer = $dauer + 10; //10 Sekunden dazu wegen dem Anzeigeproblem in Multichard
		}
		return $dauer;
	}

?>

Erklärung:

Zusatz
ist eine Boolsche Variable die im Webfront eingestellt werden kann und mit der ich festlegen kann, dass die Automatik für einen Raum nicht verwendet werden soll. Das benutze ich für die Absenkung der Temperatur in den Kinderzimmern, solange die nicht da sind. Die kommen nur noch ab und an am Wochenende.

ZusatzTemp
ist die zugehörige Temperatur.

$heizperiode
Eine Boolsche Variable die festlegt ob überhaupt geheizt werden soll

$automatik
Eine Boolsche Variable die festlegt ob Automatik oder manueller Betrieb der gesamten Anlage gewünscht ist

$manuelTemp
Eine Variable die die Temperatur hält für den Fall das die Anlage im manuellen Modus läuft.

Die Funktion SetPWM ist das was die Zeiten berechnet. Hier habe ich zunächst mit diskreten Werten experimentiert wie man an dem drin gelassenen Kommentaren noch sehen kann und später eine Formel entwickelt.

Im Moment stehen sowohl für Korrektur als auch für Parrallele auf 110.

Ach ja, den Logger benutze ich um die ganze Regelung mit zu schreiben. Den findest Du im Wiki.

Ich hoffe damit kannst Du was anfangen.

Ich bin gerade dabei das Script mal bei mir zu testen. Allerdings bekomme ich immer noch ein recht hohes überschwingen.
Könntest Du mal mit einem Diagramm den Einfluss von „Parallele“ und „Korrektur“ erklären?

Das ist im Prinzip wie bei der Heizkurve eine Parallelverschiebung und eine Steilheit allerdings nur so ähnlich.

Wie im Skript zu erkennen hab ich ursprünglich mal die Werte diskret gesetzt und dabei einige Versuche gemacht. Diese Werte hatte ich aus einem anderen Skript - ich bin mir nicht sicher aber es war glaub ich aus Bernies Universal Heizungsskript - genommen und als ich ein laufendes System hatte hab ich mir aus den Werten in Excel eine Kurve bauen lassen.

Diese Kurve hab ich dann mit der Formel nachgebaut und über die beiden Werte kann man die Kurve beeinflussen. Sie müssen auch für jeden Raum einzeln ermittelt und eingestellt werden. Natürlich haben auch andere Faktoren einen Einfluss z.B. die Vorlauftemperatur, ob die Heizug einen hydraulichen Abgleich hat, die Abkühlkonstanten der Räume usw. Man muss da wohl auch ein wenig mit den Werten spielen. Leider dauert es halt immer etwas bis man eine Ergebnis bekommt wegen der Trägheit des Systems.

Am besten zum Verständnis lass dir die Kurve mal in Excel anzeigen und spiel mit den beiden Werten. Dann sieht man recht schnell was passiert. Vielleicht ist es auch einfacher mit diskreten Werten zu arbeiten.

So langsam verstehe ich es. :slight_smile:
Jetzt muss ich nur noch schauen, wie ich die langen Schaltzeiten meiner Stellmotoren in dem Skript unterbringe. Die brauchen so 3-4 Minuten um zu öffnen bzw. zu schließen. Wenn DeltaT recht klein ist, dann gehen die kaum auf bzw. gleich wieder zu. Hie rkommt also noch eine zusätzliche Nichtlinearität hinzu. Ich muss erst mal rausfinden, wie sich das bemerkbar macht.

Hallo Forengemeinde,

ich finde diesen Thread äußerst interessant. Das liegt wohl daran, dass ich derzeit vor exakt dem gleichen Problem stehe.
Momentan hatte ich noch keine Zeit mich ausgiebig damit zu beschäftigen, aber das soll sich zukünftig ändern.
Zunächst werde ich mich aber in das interessante Script von „mws“ einarbeiten.

Interessant wäre es auch die aktuellen Erfahrungen von „ThomasWest69“ zu hören, gerade in Hinsicht auf die trägen Stellantriebe. Ich habe bei meinen noch nicht die Öffnungszeit gemessen, jedoch brauchen meine auch wenige Minuten zum vollständigen Öffen/Schließen (btw. meine sind stromlos offen).

Sobald ich erste Erkenntnisse oder ähnliches habe melde ich mich, und ich würde mich freuen wenn von Euch ggf. Information oder Updates zum Stand der Dinge kommen.

MfG
Arne

Hallo,

in einigen Tagen bekomme ich die Fußbodenheizung in beiden Bädern in den Estrich gelegt (oder es gibt wohl noch ein anderes Konzept, dass mein Architekt gerade bevorzugt, bei dem das System in Platten oder so ähnlich gelegt wird und danach einfach drüber gefliest wird). Ich werde eine WAGO voraussichtlich mit 1-wire Temperatur-Sensoren haben. Kann mir jemand ein Boden-Sensor empfehlen, den ich in den Estrich einbauen lassen kann.

Viele Grüße,

ernie

@MWS

Habe nach anfänglichen Schwierigkeiten das Script nun am Laufen.

Ist genauso wie ich es mir auch schon seit längerem überlegt habe, aber mangels ausreichenden PHP-Kenntnissen noch nicht umgesetzt habe.

Ich habe aber noch eine Frage:

Wenn ich das Script nun für mehrere Räume nutzen will, muss ich dann nur die Zeile die das Array $rooms füllt kopieren und mit den Werten des nächsten Raumes füllen?
Oder was muss ich dann tun.

Wie gesagt ich bin absoluter PHP-Newbie.
Unter Delphi hätte ich eine kleine Datenbank mit den Räumen angelegt und fertig. Habe berufsbedingt aber vor 10 Jahren aufgehört mit dem Programmieren.

Super Script. Die Formel für die Zeitberechnung ist klasse.
Was noch fehlt, ist ein Einfluss der Außentemperatur. Bei niedriger Außentemperatur längere Zeiten, bei hoher Außentemperatur kurze Zeiten. Mal sehen ob ich sowas nicht in die Formel reinbekomme.
Oder wenn man große Fenster hat einen Sonnenscheinfaktor über Helligkeitssensor.

Gruß

Udo

Ja genau, die foreach Schleife durchläuft alle Räume für die ein array angelegt wurde um die benötigte Zeit zu berechnen.

Erweiterungen / Verbesserungen der Formel sind natürlich gerne gesehen.

Danke für die Antwort.

gerade probiert und funktioniert.

Werde es mal ein paar Tage testen. Mal sehen ob ich noch eine zusätzliche Beeinflussung brauche.
Wird sich zeigen wenn es mal sonnig ist. Habe einen Raum nach Süden raus mit 8m² Fenstern .

Mit dem Heating Script hatte ich immer Überschwingen von 2 Grad, da der Raum recht gut isoliert ist, und
richtig Masse an Estrich über den Rohren liegt.

Bis jetzt erst 0,5 Grad Überschwingen 1 Stunde nach Erreichen der Solltemperatur. Und das bei fast +10 Grad
Außentemperatur

Habe leider noch keine Möglichkeit den Vorlauf der FBHz über Außentemperatur zu steuern, da ich die FBHz in der jeweiligen Wohnung runtermische. Habe normalerweise Heizkörper und meinen Laden und eine kleine Wohnung im Zuge der Kernsanierung auf FBHz umgerüstet. Habe ich schrittweise überall vor, wo ich die Böden neu mache.

Wenn es HM-Thermostate mit abgesetztem Fühler gäbe, würde ich die Vorlauftemperatur mit Stellantrieben regeln.
Zur Zeit habe ich ein Vorlaufregelventil von Heimeyer mit einem abgesetzten Fühler . da würde ein HM Stellantrieb drauf passen.

Bevor die Heizungsspezialisten jetzt schimpfen. Dabei handelt es sich nicht um die Heizungskreise sondern um den Vorlauf der an den Heizkreisverteiler geht.

Gruß Udo