Fußbodenheizung - Steuerung/Infrarotheizung-Steuerung

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

twoxx
Beiträge: 534
Registriert: 16.03.2015, 18:57
Hat sich bedankt: 1 Mal
Danksagung erhalten: 26 Mal

Re: Fußbodenheizung - Steuerung/IR-Heizung-Steuerung

Beitrag von twoxx » 05.03.2018, 22:17

GT2006 hat geschrieben:Moin,

nun möchte ich mich hier auch einmal einklinken.

Vor 2,5 Jahren, als wir ins Haus einzogen, hatte ich mir fest vorgenommen, die FB mit Stellantrieben und Wandthermostaten (HM-Classic) zu installieren. Und dann kam immer etwas dazwischen, so dass bis heute noch nichts umgesetzt wurde.

Jetzt beschäftige ich mich seit einigen Wochen wieder mit dem Thema und bin auf diesen Thread gestossen.

Meine FB läuft eigentlich ganz gut. Montag bis Freitag läuft sie von 5:30 bis 8:00 und dann wieder von 14 Uhr bis 18 Uhr, restliche Zeit in der Nachtabsenkung. Die Temperatur, auch bei -12 Grad Aussentemperatur sind vollkommen in Ordnung und schwanken zwischen 19 Grad und 20,5 Grad. Genau so möchten wir es haben. Am Wochenende läuft die FB von 6 Uhr bis 18 Uhr, restliche Zeit wieder Nachtabsenkung.

Weil eben die FB eigentlich ganz gut läuft, habe ich dann auch wieder von der Idee, der Steuerung mit Stellantrieben, Abstand genommen.

Da ich aber an den sehr sonnigen, sehr kalten Tagen zu Hause im Homeoffice war, ist mir aufgefallen, wieviel Energie die Sonne dann doch hat. Die Räume mit direkter Sonneneinstrahlung hatten quasi sofort 2 bis 3 Grad mehr. Meine Heizung im Keller hat natürlich weiter fleissig geheizt.

Also, nun doch wieder Einzelraumsteuerung ?

Nun gut, ich werde es mal ausprobieren, vorhanden sind ja Aktoren und Stellantriebe sowie Wandthermostate, die WTs sind sowieso schon installiert.

Die Aussentemperatur kann ich mir per BSB-Lan von der Zentralheizung abgreifen, siehe hier: viewtopic.php?f=47&t=33564 , ich habe also VOLLZUGRIFF auf meine Gasheizung.

MEINE FRAGE:
Würde es Sinn machen, der Gasheizung meine Raumtemperaturen zu übermitteln ? Oder würde ich dann zusammen mit dieser FB-Lösung eine ÜBER-Regelung verursachen ?
Wie ist Eure Einschätzung ?

Gruss
Jan

Hallo Jan,

was den alleinigen Ausgleich des Übersteuerns bei Sonneneinstrahlung/zusätzlichen Wärmequellen bei niedriger Vorlauftemperatur und meistens bzw. ständig geöffneten Stellantrieben angeht,
habe ich für Maestrone eine abgewandelte Form des Scripts hier eingestellt. Sofern Du das Script auch testen möchtest--> einfach loslegen.

Ob nun eine Steuerung der Gastherme effektiver als die Einzelraumregelung ist, kann man mit Deiner kurzen Beschreibung nicht feststellen.
Wenn Du Deine Gasheizung per Übermittlung der Raumtemperaturen dazu bringen kannst, bei Sonneneinstrahlung entsprechend runter zu regeln.... dann würde ich Deine
Variante vorziehen. Sofern das nicht möglich ist, ist meine Einzelraumregelung auf jeden Fall einen Versuch wert. Von der Theorie her müsste meine Steuerung Dein Vorhaben umsetzen können.
Allerdings bleibt Dir trotzdem nichts anderes übrig als es selbst auszuprobieren. Wie gesagt, nur Du selbst kennst Deine Heizung und Deine Situation am Besten.
- Charly - Raspymatic mit Redmatic, 420 Systemvariablen, 440 Programmen, 101 Direktverknüpfungen, 121 Geräten
- CCU3- Raspymatic mit Redmatic und Verbindung zur PV-Anlage/Wechselrichter
- Charly - Raspymatic mit Redmatic und Sprachsteuerung per Alexa

maduuto
Beiträge: 51
Registriert: 25.01.2017, 00:07

Re: Fußbodenheizung - Steuerung/IR-Heizung-Steuerung

Beitrag von maduuto » 08.05.2018, 02:15

Hallo. Wie kann ich folgendes Problem umgehen:
Soll = 21 Grad, Ist=23 Grad
Fenster wird geöffnet, nach 20min Ist = 22.8, nach 20min ist = 22,5 nach 20min ist = 22 Grad. Geht ja schnell beim Lüften. Aber allgemein auch wenn mal die Temperatur etwas rapider abfällt, macht der das.

Das Problem ist, das Script schaltet das Ventil rein, weil es merkt das die Temperatur stark abfällt. Doch liegt leider oft trotzdem die Isttemperatur über soll (liegt nicht am Script, die Bude heizt schnell auf). Daher macht es keinen Sinn, der Absenkung entgegenzuwirken in dem Moment. Kann man das verhindern, zumindest wenn ist nicht mal annähernd an soll ist?

Grrzzz
Beiträge: 17
Registriert: 01.08.2017, 09:34
Danksagung erhalten: 2 Mal

Re: Fußbodenheizung - Steuerung/IR-Heizung-Steuerung

Beitrag von Grrzzz » 08.05.2018, 13:43

twoxx hat geschrieben:
GT2006 hat geschrieben:Moin,

...
Da ich aber an den sehr sonnigen, sehr kalten Tagen zu Hause im Homeoffice war, ist mir aufgefallen, wieviel Energie die Sonne dann doch hat
...

Gruss
Jan

Hallo Jan,

was den alleinigen Ausgleich des Übersteuerns bei Sonneneinstrahlung/zusätzlichen Wärmequellen bei niedriger Vorlauftemperatur und meistens bzw. ständig geöffneten Stellantrieben angeht,
habe ich für Maestrone eine abgewandelte Form des Scripts hier eingestellt. Sofern Du das Script auch testen möchtest--> einfach loslegen.
Ich habe bei mir Zuhause eine Vitodent, angeschlossen an einem Raspi via openv (https://openv.wikispaces.com). Damit habe ich dann Vollzugriff auf die Heizung. Dein oben beschriebenes Problem löse ich über die Reduktion der Raumsolltemperator direkt an der Heizung. Dadurch wird die Vorlauftemperatur reduziert, und es gibt kein Überschwingen mehr:
konni100000 hat geschrieben:Wenn Ihr wie ich eine Luftwaermepumpe mit Fussbodenheizung in einem gut isoliertem Haus habt, kennt ihr ja die Probleme damit: sehr träges System und die Heizung arbeitet je kälter es draussen wird mehr und ineffektiver. Ausserdem heizt die Sonne an sonnigen Tagen die Wohnung innerhalb kurzer Zeit enorm auf. Darum hab ich mir überlegt, eine Wettervorhersage für die nächsten Stunden zusammen mit der Ansteuermöglichkeit der Heizung mittels Raspberry Pi zu nutzen.
Ich habe übrigens eine Vitocal 200-S, Bj 2013 und eine Vitocell 100 als Warmwasserspeicher.
Die Regelung nutzt die Möglichkeit des Raspberry Pi mittels Node.js-Script die Wettervorhersage aus Openweathermap.org bzw. Wunderground.com einzulesen und aufgrund den Daten aus zukünftiger Temperatur und Wolkenbedeckung die Heizung mittels VCLIENT anzupassen. Das Node.js Script wird dann mittels Cronjob z.B. stündlich aufgerufen
Beginnend in Absatz 10:
10. Regelung der Vitotronic auf Basis von Wettervorhersage.

Ich habe oben stehende Lösung zusammen mit einer Einzelraum-Regelung für meine FuBo seit einem Jahr laufen - und das Einsparpotential allein durch die o.b. Zusatzregelung ist erschreckend hoch.

twoxx
Beiträge: 534
Registriert: 16.03.2015, 18:57
Hat sich bedankt: 1 Mal
Danksagung erhalten: 26 Mal

Re: Fußbodenheizung - Steuerung/IR-Heizung-Steuerung

Beitrag von twoxx » 18.05.2018, 20:07

maduuto hat geschrieben:Hallo. Wie kann ich folgendes Problem umgehen:
Soll = 21 Grad, Ist=23 Grad
Fenster wird geöffnet, nach 20min Ist = 22.8, nach 20min ist = 22,5 nach 20min ist = 22 Grad. Geht ja schnell beim Lüften. Aber allgemein auch wenn mal die Temperatur etwas rapider abfällt, macht der das.

Das Problem ist, das Script schaltet das Ventil rein, weil es merkt das die Temperatur stark abfällt. Doch liegt leider oft trotzdem die Isttemperatur über soll (liegt nicht am Script, die Bude heizt schnell auf). Daher macht es keinen Sinn, der Absenkung entgegenzuwirken in dem Moment. Kann man das verhindern, zumindest wenn ist nicht mal annähernd an soll ist?

Hallo Maduuto,

wenn Dein Zimmer sehr schnell wieder aufheizt, dann kannst Du den Zuschlag bei der Variable "hochtempXXXX" entsprechend reduzieren.
Siehe hierzu auch die Beschreibung auf der ersten Seite des Threads.
- Charly - Raspymatic mit Redmatic, 420 Systemvariablen, 440 Programmen, 101 Direktverknüpfungen, 121 Geräten
- CCU3- Raspymatic mit Redmatic und Verbindung zur PV-Anlage/Wechselrichter
- Charly - Raspymatic mit Redmatic und Sprachsteuerung per Alexa

schonwiederich
Beiträge: 52
Registriert: 07.10.2016, 13:44
Hat sich bedankt: 3 Mal
Danksagung erhalten: 1 Mal

Re: Fußbodenheizung - Steuerung/IR-Heizung-Steuerung

Beitrag von schonwiederich » 15.11.2018, 19:38

Hallo Max,
wir hatten die letzten Jahre schon mal per Mail geschrieben. Was ich jetzt schreibe hilft aber auf jeden Fall auch anderen , daher hier im Forum:

Historie:
Erst alten HKV. Jetzt neuen HKV :-). Dann 4 Fach Aktor und einen Stellantrieb thermoelektisch, so wie einen Wandthermostat von HM gekauft. (TESTSETUP)
Alles Angeschlossen und angelernt.
Dann wieder deinen Thread ausgegraben und die Dinge auf Seite 1 durchgeführt.
1. Die Variablen per Skript angelegt.
2. Die Programme angelegt.
3. Die Scripte mit den "meinen" Variablenbezeichnungen abgeändert.
4. Statt eines Thermostats, per open waether map die Außentemperatur in eine Variable geschrieben und diese in deinen Programmen dann genutzt.
5. Dann habe ich noch (was auf der Seite 1 nicht direkt erkennbar war, aber ich in den Scripten gesehen habe die XXXXXXXX mit den jeweiligen SN
ersetzt.
string RaumreglerFBHogAnkleide = "BidCos-RF.OEQ1672956";
string AktorFBHogAnkleide = "BidCos-RF.OEQ0615335";
string AktorkanalFBHogAnkleide ="1";
6. Alle Programme einmal angestoßen.

Jetzt habe ich ein paar Fragen :-) :-) :-)

1. War das alles ausreichend um das Testsetup zu betreiben. Wenn ich auf Seite 2 weiter lese kommen noch Themen wie "Systemvariablen mit dem Thermostat verknüpfen". Das hab ich nicht gemacht. Ist das noch immer nötig oder war das zu beginn des Threats nötig, aber jetzt nicht mehr?

2. Entweder ich habe beim Variablen anlegen mit dem Script was falsch gemacht oder das Script legt eine Variable falsch an.
Zumindest hatte ich hinter diese Variabel hier:
FBHogAnkleideTempIstinToleranz anstelle der eigentlich benötigten FBHogAnkleideFBTempIstinToleranz. Das "FB" in der Mitte ist irgendwie nicht dabei gewesen?!

3. Im Programm 1 steht wenn die Außentemperatur GRÖßER oder gleich 4 Grad ist, dann setze die VAriable "Aussentemp" auf 1 ansonsten auf 2.
Was passiert mit dieser Entscheidung, also wo wird die 1 oder die 2 wieder gelesen um daraus eine Aktion abzuleiten?
Im Programm 2 (wenn ich richtig deute) wird geschaut ob das Thermostat eine Solltemperatur von mindestens 6,5 Grad hat UND
die Aussentemperatur kleiner als -6 Grad ist. (und Weiteres für meine Frage nicht relevantes :-) )
Warum prüft Programm 1 eine Außentempeeratur von >4 Grad und Programm 2 eine von <-6.
Beide dienen doch dem Erhalt des Wärmekreislaufs (keine Auskühlung) Warum sind dann 10 Grad Differenz mit unterschiedlicher Prüfrichtung
angegeben. Das habe ich noch nicht ganz verstanden.

4. Mit den 20 Minuten bin ich noch irritiert. Ich lese einerseits das Programm 3 läuft alle 20 Minuten. So ist das Zeitmodul auch eingestellt.
Dann schreibst Du aber dass das Programm den Intervall in dem es neu berechnet selbst ermittelt? Wie kann es dass, wenn das Zeitmodul auf "alle
20 Minuten" eingestellt ist? Da habe ich noch nen Knoten im Kopf .......

5. Schaltschwellehochtemp: Wenn ich es richtig behaten habe habe ich gelesen dass ich dort den "gemessenen" Zeitraum für das Öffnen des
Stellventils eintragen soll. Sind bei mir 195 Sekunden.Aber "eintragen" lässt sich dort ja nur MAX und MIN bei einer Zahlenvariablen.
Soll das da wirklich eingetragen werden oder wie ist das gemeint?
Schaltschwelleniedertemp: Hier steht ebenso, da man den Wert für das ÖFFNEN eintragen soll. (PS Öffnen und Schließen dauert bei mir
unterschiedlich lange.) Wenn wirklich öffnen gemeint ist, warum gibt es dann zwei Variablen die immer denselben Wert enthalten werden?

6.
dom.GetObject("SicherheitsheizzeitEGBuro").State(240.000); !---- Heizzeit, falls errechnete Heizzeit im Minus
Wie kommt denn die errechnete Minusheizzeit zustande?

dom.GetObject("SchaltschwelleniedertempEGBuro").State(190.000); !--- Sofern errechnete Schaltzeit kleiner, dann nicht einschalten
dom.GetObject("SchaltschwellehochtempEGBuro").State(190.000); !---- Sofern errechnete Schaltzeit kleiner, dann nicht einschalten
Ich vermute es sind 190 Sekunden?! Was machen diese 190 Sekunden bzw eine Veränderung des Wertes?
Was ist die Schaltzeit? Ist das die Zeit die das Ventiel zum Öffnen braucht? Wenn ja ist diese doch nicht errechnet sondern gemessen, oder ?
Oder meint Schlatzeit hier auch Heizzeit?

dom.GetObject("ScriptwiederholungEGBuromax").State(5.0); !-----------Wiederholung des Scripts bis Wärmeerhaltung
Heisst, wenn die Wärmeerhaltung des Heizkreises läuft, passiert dies 5 Mal?
Wenn ja, warum passiert dass nicht immer wieder, sondern wird hiermit begrenzt?

dom.GetObject("ScriptwiederholungEGBuroHeizzeit").State(241.0); !---- Heizzeit bei Wärmeerhaltung

7 Programm 2. Die Einschaltdauer des Aktors ?!
Wenn ich nur auf Programm 2 schaue, sagt es mir wenn alles Bedingungen eintreffen, dann schalte den Aktor für 240 Sekunden ein.
Wenn ich jetzt die Öffnungszeit von 195 Sekunden beim Stellventil nehme.
Bleiben 45 Sekunden 100% Heizleistung
Die Restlichen Sekunden jeweils abgestuft 90 80 70 % Heuzleistung usw.
Passiert dies auch genau so und wenn ja, war das bei Dir ausreichen zur Wärmeerhaltung des Heizkreises?

1000 Dank schon jetzt für die Antworten.

PS: Fenster un Türkontakte habe ich (noch) keine. Aber die sind ja auch in deinem Skript nicht berücksichtigt. Richtig?

VG schonwiederich

twoxx
Beiträge: 534
Registriert: 16.03.2015, 18:57
Hat sich bedankt: 1 Mal
Danksagung erhalten: 26 Mal

Re: Fußbodenheizung - Steuerung/IR-Heizung-Steuerung

Beitrag von twoxx » 16.11.2018, 21:30

schonwiederich hat geschrieben:
15.11.2018, 19:38
Hallo Max,
wir hatten die letzten Jahre schon mal per Mail geschrieben. Was ich jetzt schreibe hilft aber auf jeden Fall auch anderen , daher hier im Forum:

Historie:
Erst alten HKV. Jetzt neuen HKV :-). Dann 4 Fach Aktor und einen Stellantrieb thermoelektisch, so wie einen Wandthermostat von HM gekauft. (TESTSETUP)
Alles Angeschlossen und angelernt.
Dann wieder deinen Thread ausgegraben und die Dinge auf Seite 1 durchgeführt.
1. Die Variablen per Skript angelegt.
2. Die Programme angelegt.
3. Die Scripte mit den "meinen" Variablenbezeichnungen abgeändert.
4. Statt eines Thermostats, per open waether map die Außentemperatur in eine Variable geschrieben und diese in deinen Programmen dann genutzt.
5. Dann habe ich noch (was auf der Seite 1 nicht direkt erkennbar war, aber ich in den Scripten gesehen habe die XXXXXXXX mit den jeweiligen SN
ersetzt.
string RaumreglerFBHogAnkleide = "BidCos-RF.OEQ1672956";
string AktorFBHogAnkleide = "BidCos-RF.OEQ0615335";
string AktorkanalFBHogAnkleide ="1";
6. Alle Programme einmal angestoßen.

Jetzt habe ich ein paar Fragen :-) :-) :-)

1. War das alles ausreichend um das Testsetup zu betreiben. Wenn ich auf Seite 2 weiter lese kommen noch Themen wie "Systemvariablen mit dem Thermostat verknüpfen". Das hab ich nicht gemacht. Ist das noch immer nötig oder war das zu beginn des Threats nötig, aber jetzt nicht mehr?
- Alles ausreichend, Systemvariablen verknüpfen ist nicht mehr nötig.
schonwiederich hat geschrieben:
15.11.2018, 19:38
2. Entweder ich habe beim Variablen anlegen mit dem Script was falsch gemacht oder das Script legt eine Variable falsch an.
Zumindest hatte ich hinter diese Variabel hier:
FBHogAnkleideTempIstinToleranz anstelle der eigentlich benötigten FBHogAnkleideFBTempIstinToleranz. Das "FB" in der Mitte ist irgendwie nicht dabei gewesen?!
Ich guck mir das "Erstellungsscript" nochmal an. Vielen Dank für den Hinweis. Ich gehe davon aus, das du bei der Durchsicht der Scripte
dann die richtie Bezeichnung der Variable herausgefunden hast und die Variable entsprechend benannt hast.
schonwiederich hat geschrieben:
15.11.2018, 19:38

3. Im Programm 1 steht wenn die Außentemperatur GRÖßER oder gleich 4 Grad ist, dann setze die VAriable "Aussentemp" auf 1 ansonsten auf 2.
Was passiert mit dieser Entscheidung, also wo wird die 1 oder die 2 wieder gelesen um daraus eine Aktion abzuleiten?
Im Programm 2 (wenn ich richtig deute) wird geschaut ob das Thermostat eine Solltemperatur von mindestens 6,5 Grad hat UND
die Aussentemperatur kleiner als -6 Grad ist. (und Weiteres für meine Frage nicht relevantes :-) )
Warum prüft Programm 1 eine Außentempeeratur von >4 Grad und Programm 2 eine von <-6.
Beide dienen doch dem Erhalt des Wärmekreislaufs (keine Auskühlung) Warum sind dann 10 Grad Differenz mit unterschiedlicher Prüfrichtung
angegeben. Das habe ich noch nicht ganz verstanden.
Ich gehe davon aus, Du meinst Programm 0 (denn Programm 1 schreibt nur die letzte Einschalt- bzw. Heizzeit in eine Variable).
Programm 0 ermittelt, ob die Aussentemperatu größer oder gleich 4 Grad ist und setzte entsprechend die Variable Aussentemp.
Das Script 4 nutzt diese Information für den Fall das ein Fenster geöffnet wird. Sofern die Absenktemperatur des WTH bei 5,5 Grad
gesetzt ist UND die Aussentemperatur unter 4 Grad ist, wird immer wieder mal sicherheitshalber geheizt, damit die Temperatur in der
Fussbodenheizung nicht zu stark absinkt.

Programm 2 sorgt ebenfalls für das "sicherheitshalber Heizen", aber im genau UMGEKEHRTEN Fall, wenn die Fenster geschlossen sind und
dadurch die Solltemperatur größer als die Absenktemperatur ist (ich habe aus dem Bauch heraus einfach größer 6,5 Grad genommen).
Die Aussentemperatur von -6 kommt deshalb zustande, weil bei meiner Heizung erst bei einer Aussentemperatur von -6 oder weniger
ein Auskühlen der Fussbodenheizung feststellbar ist, sofern das Fenster zu ist und der Stellantrieb länger als 240 Minuten nicht mehr geöffnet war.

Bei einem geöffneten Fenster erfolgt ein Auskühlen jedoch schon bei unter 4 Grad und nicht erst bei Minusgraden.

schonwiederich hat geschrieben:
15.11.2018, 19:38

4. Mit den 20 Minuten bin ich noch irritiert. Ich lese einerseits das Programm 3 läuft alle 20 Minuten. So ist das Zeitmodul auch eingestellt.
Dann schreibst Du aber dass das Programm den Intervall in dem es neu berechnet selbst ermittelt? Wie kann es dass, wenn das Zeitmodul auf "alle
20 Minuten" eingestellt ist? Da habe ich noch nen Knoten im Kopf .......
Das PROGRAMM läuft alle 20 Minuten. Das SCRIPT im Programm muß auch wissen, dass es alle 20 Minuten ausgeführt wird.
Früher hatte ich das fest im Script definiert. Aus "Anwenderfreundlichkeitsgründen" habe ich dann die automatische Feststellung
programmiert. Denn die 20 Minuten Intervall sind nur ein Erfahrungswert bei meiner Heizung. Wenn du die Intervalle kürzer oder länger benötigst, dann brauchst du nur das zeitmodul zu ändern und das Script reagiert automatisch auf das neue Intervall. Sofern Du dies nicht möchtest, weil du beispielsweise auch zwischen den festen Intervallen ab und zu mal das Programm manuell auslösen willst, dann habe ich auf der ersten Seite auch eine Möglichkeit geschrieben um das Intervall im Script auch fest zu programmieren.
schonwiederich hat geschrieben:
15.11.2018, 19:38

5. Schaltschwellehochtemp: Wenn ich es richtig behaten habe habe ich gelesen dass ich dort den "gemessenen" Zeitraum für das Öffnen des
Stellventils eintragen soll. Sind bei mir 195 Sekunden.Aber "eintragen" lässt sich dort ja nur MAX und MIN bei einer Zahlenvariablen.
Soll das da wirklich eingetragen werden oder wie ist das gemeint?
Schaltschwelleniedertemp: Hier steht ebenso, da man den Wert für das ÖFFNEN eintragen soll. (PS Öffnen und Schließen dauert bei mir
unterschiedlich lange.) Wenn wirklich öffnen gemeint ist, warum gibt es dann zwei Variablen die immer denselben Wert enthalten werden?
Ich weiß jetzt leider nicht was du mit MAX und MIN meinst.
Sowohl bei Schaltschwellehochtemp als auch bei Schaltschwelleniedertemp kannst Du eintragen, wann das Script auf ein Einschalten des Stellantriebes verzichten soll. Ich orientiere mich dabei an der Zeit den der Stellantrieb benötigt um komplett zu öffnen. Denn eine Heizzeit die kürzer ist als
das Öffnen des Stellantriebs benötigt, macht ja keinen Sinn einzuschalten, denn es wird ja quasi (fast) nicht geheizt.

Das man das bei hochtemp und niedertemp separat einstellen kann, liegt daran, das ich bei der Entwicklung mit unterschiedlichen Schaltzeiten bei "ISt-Temperatur > Solltemp" und "Ist-Temperatur < Solltemp" gearbeitet habe, da in diesen Fällen bei meiner Heizung oft auch unterschiedliche Vorlauftemperaturen vorhanden sind. Im Standard kann man das aber beim gleichen Wert lassen. Wie gesagt, ich mußte viel "ausprobieren" und "rumspielen" um die richtigen Einstellungen für meine Heizung zu finden.


schonwiederich hat geschrieben:
15.11.2018, 19:38
6.
dom.GetObject("SicherheitsheizzeitEGBuro").State(240.000); !---- Heizzeit, falls errechnete Heizzeit im Minus
Wie kommt denn die errechnete Minusheizzeit zustande?

dom.GetObject("SchaltschwelleniedertempEGBuro").State(190.000); !--- Sofern errechnete Schaltzeit kleiner, dann nicht einschalten
dom.GetObject("SchaltschwellehochtempEGBuro").State(190.000); !---- Sofern errechnete Schaltzeit kleiner, dann nicht einschalten
Ich vermute es sind 190 Sekunden?! Was machen diese 190 Sekunden bzw eine Veränderung des Wertes?
Was ist die Schaltzeit? Ist das die Zeit die das Ventiel zum Öffnen braucht? Wenn ja ist diese doch nicht errechnet sondern gemessen, oder ?
Oder meint Schlatzeit hier auch Heizzeit?

dom.GetObject("ScriptwiederholungEGBuromax").State(5.0); !-----------Wiederholung des Scripts bis Wärmeerhaltung
Heisst, wenn die Wärmeerhaltung des Heizkreises läuft, passiert dies 5 Mal?
Wenn ja, warum passiert dass nicht immer wieder, sondern wird hiermit begrenzt?
dom.GetObject("ScriptwiederholungEGBuroHeizzeit").State(241.0); !---- Heizzeit bei Wärmeerhaltung
Minusheizzeit kann zustande kommen, wenn die tatsächliche Raumtemperaturentwicklung aufgrund Wärmeeinstrahlung oder zuvieler Leute im Raum
größer ist als die vorausgerechnete Temperaturentwicklung aufgrund errechneter Heizzeit. Sofern dies so ist, dann reduziert das Script die
tatsächliche Heizzeit um die Differenz. Dies kann unter Umständen dazu führen, dass die Heizzeit negativ werden kann.
Für diesen Fall habe ich ein "sicherheitshalber doch kurz Heizen" dazugeschaltet indem die Heizzeit auf 240 festgesetzt wird.

Ja es sind 190 Sekunden. Erklärung siehe Antwort zu 5.

Scriptwiederholungmax:
Das Script wird 5 mal ausgeführt OHNE die Wärmeerhaltung einzuschalten. Beim nächsten mal wird der Zähler auf 0 gesetzt und die
Wärmeerhaltung wird eingeschaltet SOFERN die anderen Kriterien (Aussentemp, Fenster offen) zutreffen.
Wenn die Wärmeerhaltung bei JEDEM Ausführen des Scripts geschaltet würde, dann könnte man auch einfach weiterheizen lassen.
Das wäre Energieverschwendung und bei meiner Heizung wäre es zu viel. Mir ging es darum, das die Fussbodenheizung nicht zu stark auskühlt bis
das Fenster wieder geschlossen wird.
schonwiederich hat geschrieben:
15.11.2018, 19:38
7 Programm 2. Die Einschaltdauer des Aktors ?!
Wenn ich nur auf Programm 2 schaue, sagt es mir wenn alles Bedingungen eintreffen, dann schalte den Aktor für 240 Sekunden ein.
Wenn ich jetzt die Öffnungszeit von 195 Sekunden beim Stellventil nehme.
Bleiben 45 Sekunden 100% Heizleistung
Die Restlichen Sekunden jeweils abgestuft 90 80 70 % Heuzleistung usw.
Passiert dies auch genau so und wenn ja, war das bei Dir ausreichen zur Wärmeerhaltung des Heizkreises?

1000 Dank schon jetzt für die Antworten.

PS: Fenster un Türkontakte habe ich (noch) keine. Aber die sind ja auch in deinem Skript nicht berücksichtigt. Richtig?

VG schonwiederich
Deine Abstufung stimmt fast. Es geht ja eigentlich mit 10 20 30 40 % los... bis dann die 45 Sekunden 100% laufen und dann 90 80 70 % etc.
Das hat bei meiner Heizung bisher gereicht.

Die Fenster- und Türkontakte sind insofern im Script berücksichtigt, sofern Du den Wandthermostat auf eine Solltemperatur von unter 5,6 Grad einstellst. Bei mir ist die Absenktemperatur der Direktverknüpfung zwischen Fensterkontakt und Wandthermostat auf 5,5 Grad eingestellt.
Das Programm/Script erkennt an dieser Solltemperatu das das Fenster wohl offen sein muß und berücksichtigt dies entsprechend.
- Charly - Raspymatic mit Redmatic, 420 Systemvariablen, 440 Programmen, 101 Direktverknüpfungen, 121 Geräten
- CCU3- Raspymatic mit Redmatic und Verbindung zur PV-Anlage/Wechselrichter
- Charly - Raspymatic mit Redmatic und Sprachsteuerung per Alexa

schonwiederich
Beiträge: 52
Registriert: 07.10.2016, 13:44
Hat sich bedankt: 3 Mal
Danksagung erhalten: 1 Mal

Re: Fußbodenheizung - Steuerung/IR-Heizung-Steuerung

Beitrag von schonwiederich » 19.11.2018, 15:42

Hallo Max,
twoxx hat geschrieben:
16.11.2018, 21:30
Ich weiß jetzt leider nicht was du mit MAX und MIN meinst.
Sowohl bei Schaltschwellehochtemp als auch bei Schaltschwelleniedertemp kannst Du eintragen, wann das Script auf ein Einschalten des Stellantriebes verzichten soll. Ich orientiere mich dabei an der Zeit den der Stellantrieb benötigt um komplett zu öffnen.
Du schreibst auf Seite 1:
SchaltschwellehochtempEGBuro = Hier den mittels Stoppuhr ermittelten Wert in Sekunden eintragen, den der Stellantrieb benötigt um komplett zu öffnen

Ich war davon ausgegangen dass etwas in diese Variable eingetragen werden soll. Aber dies geschieht ja nicht direkt sondern indirekt über die passende Stelle im Script.

Ansonsten denke ich habe ich deine Antworten verstanden. Hattest Du was wegen des Scriptes zur Variablenerzeugung herausfinden können ?

Mal eine andere Frage. Um mir anzuschauen wie sich Aktor und Tempertaur zueinander verhalten nutze ich CCU Historian. Ich hab in der CCU und im Historian nach einem Wert gesucht der die Solltemperatur des Wandthermostats ausgibt. Ich finde keinen. Bin ich zu blind oder gibt es den nicht (auswertbar) ? Ich habe dann deine SysVar zur Solltemperatur genommen. Die enthält ja denselben Wert, jedoch hat mich schon gewundert das das Thermostat diesen nicht ausgibt.

Im Anhnang sieht man der Verlauf der letzten Tage.
In den 8 Stunden von 22:00 bis 06:00 ist die Solltemp 17Grad.
Wann sieht auch das der Temperaturabfall in dieser Zeit zwischen 0,4 und 1,0 Grad beträgt.
Alles natürlich in dieser Zeit ohne das Fenster zu öffnen und den Raum dadurch auszukühlen.
Ich schließe daraus, wenn ich also nur etwas mehr als 0,1 Grad pro Stunde an Temeratur verliere und sich ab 22:00 Uhr niemand mehr in dem Raum aufhält, könnte ich mit der Solltempüeratur 17 Grad auch schon um 19:00 Uhr starten.
Ich bin kein Energieexperte, wüsste auch nicht wie ich das berechnen soll. Intuitiv würde ich aber sagen, dass 3 Stunden länger den Raum nicht zu beheizen mehr energie einspart, als es energie benötigt, die verlorenen 0,3 bis 0,4 Grad wieder hinzuzuheizen.

Was mir bei der Grafik noch nicht ganz klar geworden ist, warum die Heizphasen, so "kurz" berechnet sind, das die Temperatur nur so "gegen" die Solltemperatur von 21 Grad "schwingt" ohne diese zu erreichen oder zu "überschwingen". Der Logik nach, würde ich immer ein leichtes Über- und Unterschwingen im Bezug auf die 21 Grad erwarten (wenn ich die Berechnungslogik richtig verstanden habe.)

Kannst Du Dir da einen "Reim" drauf machen?

Grundsätzlich denke ich zeigt die Grafik aber erstmal das ich im wesentlichen alles richtig eingerichtet habe wie Du es vorgesehen hast, oder?

Lieben Dank und viele Grüße!
Dateianhänge
Unbenannt.JPG

twoxx
Beiträge: 534
Registriert: 16.03.2015, 18:57
Hat sich bedankt: 1 Mal
Danksagung erhalten: 26 Mal

Re: Fußbodenheizung - Steuerung/IR-Heizung-Steuerung

Beitrag von twoxx » 19.11.2018, 18:46

Hallo SchonwiederDU :lol:

ich antworte jetzt kurz auf ein paar Details.

SchaltschwellehochtempEGBuro: Ja der Wert wird über das Script eingetragen.

Historian verwende ich nicht mehr, da ich nun eine CCU3 verwende und dort das System leider auf einer SD-Karte gespeichert ist und
ich so wenig wie möglich Schreibzugriffe auf die SD-Karte machen will.

Deine Vorgehensweise, die "Absenktemperatur" zu ermitteln erscheint mir plausibel. Es gibt hier im Forum auch jemanden der das per Script löst.
Aber grundsätzlich reicht es ja, wenn Du deine Erfarhrungswerte einfach ausprobierst und Dich entsprechend an die richtigen Zeiten/Temperaturen annäherst. Die Arbeit mußt Du ja nur einmal machen, sofern sich an Deiner Heizung künftig nur wenig ändert.

Die Berechnungslogik ist anders als Du interpretiert hast.
Es ist genau so, dass die Temperatur von unten an die Solltemperatur "heranschwingen soll". Ein Überschwingen soll vermieden werden.
Genauso soll auch ein "Unterschwingen" vermieden werden, wenn durch Sonneneinstrahlung die Temperatur über der Solltemp liegt und dann
irgendwann anfängt abzufallen.

Das Script ist so programmiert, dass bei erreichter Temperatur die Stellantriebe geschlossen sind. Wenn Du also so nah wie möglich an die Solltemperatur herankommen willst, dann solltest du die Hysterese (Bereich zwischen Hochstill und Niederstill) so klein wie möglich halten und/oder das Berechnungsintervall kürzer wählen und /oder die Vorlauftemperatur etwas erhöhen (was aber natürlich nicht sinnvoll ist).

Sofern Du eher den Weg gehen willst, das die Stellantriebe bei erreichen der Solltemperatur weiter offen sind (quasi immer offen sind) und
erst schliessen wenn die Solltemperatur überschritten wird, dann könnte ich dir noch ein anderes Scirpt 4 anbieten. Ich habe das mal programmiert aber nie zum Einsatz gebracht, weils bei mir alles zufriedenstellend funktioniert.

Das ist dieses Script hier:

Code: Alles auswählen

!--------Steuerung Fussbodenheizung
    !----- RaumreglerEGBuro und Aktor identifizieren
    string RaumreglerEGBuro = "BidCos-RF.XXXXXXXXXXX";
    string AktorEGBuro = "BidCos-RF.XXXXXXXXXXXX";
    string AktorkanalEGBuro ="XXX";
    !----Ausführintervall Script und diverses festlegen
    dom.GetObject("SicherheitsheizzeitEGBuro").State(240.000); !---- Heizzeit, falls errechnete Heizzeit im Minus
    dom.GetObject("SchaltschwelleniedertempEGBuro").State(190.000); !--- Sofern errechnete Schaltzeit kleiner, dann nicht einschalten
    dom.GetObject("SchaltschwellehochtempEGBuro").State(190.000); !---- Sofern errechnete Schaltzeit kleiner, dann nicht einschalten
    dom.GetObject("ScriptwiederholungEGBuromax").State(5.0); !-----------Wiederholung des Scripts bis Wärmeerhaltung
    dom.GetObject("ScriptwiederholungEGBuroHeizzeit").State(241.0); !---- Heizzeit bei Wärmeerhaltung
    !----- Temperaturen feststellen
    dom.GetObject("isttemperaturEGBuro").State((0.0000 + dom.GetObject(RaumreglerEGBuro#":2.ACTUAL_TEMPERATURE").Value()));
    dom.GetObject("solltemperaturEGBuro").State((0.0000 + dom.GetObject(RaumreglerEGBuro#":2.SET_TEMPERATURE").Value()));
    var schaltzustandEGBuro = dom.GetObject(AktorEGBuro#":"#AktorkanalEGBuro#".STATE").Value();
    !------ GrenzTemperaturen berechnen
    dom.GetObject("hochtempEGBuro").State((0.000 + dom.GetObject("solltemperaturEGBuro").Value() + 0.5));
    dom.GetObject("toleranzniederEGBuro").State(1.0);
    dom.GetObject("niedertempEGBuro").State((0.000 + dom.GetObject("solltemperaturEGBuro").Value() - dom.GetObject("toleranzniederEGBuro").Value()));
    dom.GetObject("hochstillEGBuro").State((0.000 + dom.GetObject("solltemperaturEGBuro").Value() + 0.1));
    dom.GetObject("niederstillEGBuro").State((0.000 + dom.GetObject("solltemperaturEGBuro").Value() - 0.2));
    dom.GetObject("toleranzEGBuro").State((0.000 + dom.GetObject("hochtempEGBuro").Value() - dom.GetObject("niedertempEGBuro").Value()));
    dom.GetObject("EGBuroFBTempDiff2").State(dom.GetObject("EGBuroFBTempDiff").Value());
    if ((dom.GetObject("EGBuroFBTempDiff").Value()) <= 0.000)
    {
    dom.GetObject("EGBuroFBTempDiff").State(0.010);
    WriteLine("TempDiff kleiner gleich 0"); WriteLine(dom.GetObject("EGBuroFBTempDiff").Value());
    }
    else
    {
    WriteLine ("TempfDiff größer 0"); WriteLine(dom.GetObject("EGBuroFBTempDiff").Value());
    }
    !---------------------- Einschaltzeit berechnen -----------------
    if ((dom.GetObject("isttemperaturEGBuro").Value()) <= (dom.GetObject("solltemperaturEGBuro").Value()))
    {
    WriteLine("Isttemperatur kleinergleich solltemperatur");
    dom.GetObject("heizleistungEGBuro").State((0.0000 + ((((dom.GetObject("solltemperaturEGBuro").Value() + 0.2000) - dom.GetObject("isttemperaturEGBuro").Value()) / dom.GetObject("toleranzEGBuro").Value()) * 100.0000)));
    dom.GetObject("heizzeit1EGBuro").State((0.0000 + ((dom.GetObject("ScriptintervallEGBuro").Value() * dom.GetObject("heizleistungEGBuro").Value()) / 100.0000)));
    dom.GetObject("einschaltzeitvergleichtempEGBuro").State((0.0000 + ((dom.GetObject("EGBuroFBTempDiff").Value() * dom.GetObject("heizzeit1EGBuro").Value()) / dom.GetObject("EGBuroDiffStartEndHeizzeit").Value())))
    dom.GetObject("OrigHeizEGBuro").State(dom.GetObject("heizzeit1EGBuro").Value());
    if (((dom.GetObject("toleranzEGBuro").Value() * dom.GetObject("heizleistungEGBuro").Value()) / 100.0000) >= dom.GetObject("einschaltzeitvergleichtempEGBuro").Value())
    {
    WriteLine("heizzeit im original übernommen"); dom.GetObject("heizzeitEGBuro").State((dom.GetObject("heizzeit1EGBuro").Value() * 60.0000));
    }
    else
    {
    WriteLine("reduzierte heizzeit übernommen");
    dom.GetObject("tempdifferenzkalkrealEGBuro").State((0.0000 + (dom.GetObject("einschaltzeitvergleichtempEGBuro").Value() - ((dom.GetObject("toleranzEGBuro").Value() * dom.GetObject("heizleistungEGBuro").Value()) / 100.0000))));
    dom.GetObject("reduzierungszeitEGBuro").State(0.0000 + ((dom.GetObject("tempdifferenzkalkrealEGBuro").Value() * dom.GetObject("EGBuroDiffStartEndHeizzeit").Value()) / dom.GetObject("EGBuroFBTempDiff").Value()));
    dom.GetObject("neueheizzeitEGBuro").State((0.0000 + (dom.GetObject("heizzeit1EGBuro").Value() - dom.GetObject("reduzierungszeitEGBuro").Value())));
    if (dom.GetObject("neueheizzeitEGBuro").Value() <= 0.0000)
    {
    dom.GetObject("heizzeitEGBuro").State((0.0000 + dom.GetObject("SicherheitsheizzeitEGBuro").Value())); WriteLine("sicherheitshalber 4 Minuten heizen");
    }
    else
    {
    dom.GetObject("heizzeitEGBuro").State((0.0000 + (dom.GetObject("neueheizzeitEGBuro").Value() * 60.0000))); WriteLine("neueheizzeit übernommen");
    }
    }
    }
    else
    {
    WriteLine("Isttemperatur größer solltemperatur");
    dom.GetObject("heizleistungEGBuro").State((0.0000 + (((dom.GetObject("hochtempEGBuro").Value() - dom.GetObject("isttemperaturEGBuro").Value()) / dom.GetObject("toleranzEGBuro").Value()) * 100.0000)));
    dom.GetObject("heizzeit1EGBuro").State((0.0000 + ((dom.GetObject("ScriptintervallEGBuro").Value() * dom.GetObject("heizleistungEGBuro").Value()) / 100.0000)));
    dom.GetObject("einschaltzeitvergleichtempEGBuro").State((0.0000 + (dom.GetObject("EGBuroFBTempDiff").Value() * dom.GetObject("heizzeit1EGBuro").Value() / dom.GetObject("EGBuroDiffStartEndHeizzeit").Value())));
    dom.GetObject("OrigHeizEGBuro").State(dom.GetObject("heizzeit1EGBuro").Value());
    if (((dom.GetObject("toleranzEGBuro").Value() * dom.GetObject("heizleistungEGBuro").Value()) / 100.0000) >= dom.GetObject("einschaltzeitvergleichtempEGBuro").Value())
    {
    WriteLine("heizzeit im original übernommen"); dom.GetObject("heizzeitEGBuro").State((dom.GetObject("heizzeit1EGBuro").Value() * 60));
    }
    else
    {
    WriteLine("reduzierte heizzeit übernommen");
    dom.GetObject("tempdifferenzkalkrealEGBuro").State(0.0000 + (dom.GetObject("einschaltzeitvergleichtempEGBuro").Value() - ((dom.GetObject("toleranzEGBuro").Value() * dom.GetObject("heizleistungEGBuro").Value()) / 100.0000)));
    dom.GetObject("reduzierungszeitEGBuro").State(0.0000 + ((dom.GetObject("tempdifferenzkalkrealEGBuro").Value() * dom.GetObject("EGBuroDiffStartEndHeizzeit").Value()) / dom.GetObject("EGBuroFBTempDiff").Value()));
    dom.GetObject("neueheizzeitEGBuro").State(0.0000 + (dom.GetObject("heizzeit1EGBuro").Value() - dom.GetObject("reduzierungszeitEGBuro").Value()));
    if (dom.GetObject("neueheizzeitEGBuro").Value() <= 0.0000)
    {
    dom.GetObject("heizzeitEGBuro").State(0.0000 + dom.GetObject("SicherheitsheizzeitEGBuro").Value()); WriteLine("sicherheitshalber 4 Minuten heizen");
    }
    else
    {
    dom.GetObject("heizzeitEGBuro").State(0.0000 + (dom.GetObject("neueheizzeitEGBuro").Value() * 60.0000)); WriteLine("neueheizzeit übernommen");
    }
    }
    }
    !-----------------------Heizzeit in Systemvariable schreiben
    dom.GetObject("EGBuroFBEinschaltzeit").State(dom.GetObject("heizzeitEGBuro").Value());
    dom.GetObject("EGBuroFBeinschaltzeitvergleichtemp").State(dom.GetObject("einschaltzeitvergleichtempEGBuro").Value());

    !------------------- Künftige Temperatur bei doppelter Schaltzeit vorausrechnen
    dom.GetObject("tempvorausrechnungEGBuro").State(0.0000 + ((dom.GetObject("EGBuroFBTempDiff2").Value() * (dom.GetObject("ScriptintervallEGBuro").Value() * 2.000) / dom.GetObject("EGBuroDiffStartEndHeizzeit").Value())));
    dom.GetObject("NeueisttemperaturEGBuro").State(0.0000 + dom.GetObject("isttemperaturEGBuro").Value() + dom.GetObject("tempvorausrechnungEGBuro").Value());
    !--------------TEST Temperaturen anzeigen
    !----- Schaltungen ausführen
    if ((dom.GetObject("isttemperaturEGBuro").Value() < dom.GetObject("hochtempEGBuro").Value()) && (dom.GetObject("isttemperaturEGBuro").Value() > dom.GetObject("niedertempEGBuro").Value()))
     {
    if ((dom.GetObject("EGBuroFBVergleichTemp").Value() == dom.GetObject("isttemperaturEGBuro").Value()) && (dom.GetObject("isttemperaturEGBuro").Value() > dom.GetObject("solltemperaturEGBuro").Value()))
    {
    dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value()); WriteLine("Ist = Vergleichstemperatur");
    if (schaltzustandEGBuro == "true")
       {
        WriteLine("ist eingeschaltet und soll ausgeschaltet sein"); dom.GetObject(AktorEGBuro#":"#AktorkanalEGBuro#".STATE").State(0); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
        }
        else
        {
         WriteLine("ist ausgeschaltet und soll ausgeschaltet sein"); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
         }
    }
    else
    {
     WriteLine("innerhalb toleranz"); dom.GetObject("EGBuroFBTempIstinToleranz").State(true);
      if ((dom.GetObject("isttemperaturEGBuro").Value() <= dom.GetObject("hochstillEGBuro").Value()) && (dom.GetObject("isttemperaturEGBuro").Value() >= dom.GetObject("niederstillEGBuro").Value()))
      {
       WriteLine("innerhalb stille");

	   if ((dom.GetObject("isttemperaturEGBuro").Value() <= dom.GetObject("solltemperaturEGBuro").Value()) )
{
	   if (schaltzustandEGBuro == "true")
       {
        WriteLine("ist eingeschaltet und soll eingeschaltet sein"); dom.GetObject("EGBuroFBTempIstinToleranz").State(true); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
        }
        else
        {
         WriteLine("ist eingeschaltet und soll eingeschaltet sein"); dom.GetObject(AktorEGBuro#":"#AktorkanalEGBuro#".ON_TIME").State(36000); dom.GetObject(AktorEGBuro#":"#AktorkanalEGBuro#".STATE").State(1); dom.GetObject("EGBuroFBTempIstinToleranz").State(true); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
         }
	   }
else	    
	{   
        if (schaltzustandEGBuro == "true")
       {
        WriteLine("ist eingeschaltet und soll ausgeschaltet sein"); dom.GetObject(AktorEGBuro#":"#AktorkanalEGBuro#".STATE").State(0); dom.GetObject("EGBuroFBTempIstinToleranz").State(true); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
        }
        else
        {
         WriteLine("ist ausgeschaltet und soll ausgeschaltet sein"); dom.GetObject("EGBuroFBTempIstinToleranz").State(true); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
         }
}
		 }
       else
       {
       WriteLine("ausserhalb stille");
       if (dom.GetObject("isttemperaturEGBuro").Value() < dom.GetObject("niederstillEGBuro").Value())
       {
        if (dom.GetObject("heizzeitEGBuro").Value() < dom.GetObject("SchaltschwelleniedertempEGBuro").Value())
        {
        WriteLine("Schaltzeit zu klein");dom.GetObject("EGBuroFBTempIstinToleranz").State(true);
        if (schaltzustandEGBuro == "true")
        {
        WriteLine("ist eingeschaltet und soll eingeschaltet sein"); dom.GetObject(AktorEGBuro#":"#AktorkanalEGBuro#".ON_TIME").State(36000); dom.GetObject(AktorEGBuro#":"#AktorkanalEGBuro#".STATE").State(1); dom.GetObject("EGBuroFBTempIstinToleranz").State(true); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
        }
        else
        {
         WriteLine("ist ausgeschaltet und soll eingeschaltet sein"); dom.GetObject(AktorEGBuro#":"#AktorkanalEGBuro#".ON_TIME").State(36000); dom.GetObject(AktorEGBuro#":"#AktorkanalEGBuro#".STATE").State(1);dom.GetObject("EGBuroFBTempIstinToleranz").State(true); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
         }
        }
        else
        {
        WriteLine("kleiner niederstill"); dom.GetObject(AktorEGBuro#":"#AktorkanalEGBuro#".ON_TIME").State(36000); dom.GetObject(AktorEGBuro#":"#AktorkanalEGBuro#".STATE").State(1); dom.GetObject("EGBuroFBTempIstinToleranz").State(true); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
        }
       }
        else
        {
        if (dom.GetObject("EGBuroFBVergleichTemp").Value() < dom.GetObject("isttemperaturEGBuro").Value())
        {
        dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value()); WriteLine("über hochstill gestiegen");
        if (schaltzustandEGBuro == "true")
        {
        WriteLine("ist eingeschaltet und soll ausgeschaltet sein"); dom.GetObject(AktorEGBuro#":"#AktorkanalEGBuro#".STATE").State(0); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
        }
        else
        {
         WriteLine("ist ausgeschaltet und soll ausgeschaltet sein"); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
         }
         }
        else
        {
        if (dom.GetObject("heizzeitEGBuro").Value() < dom.GetObject("SchaltschwellehochtempEGBuro").Value())
        {
        WriteLine("Schaltzeit zu klein"); dom.GetObject("EGBuroFBTempIstinToleranz").State(true);
        if (schaltzustandEGBuro == "true")
       {
        WriteLine("ist eingeschaltet und soll ausgeschaltet sein"); dom.GetObject(AktorEGBuro#":"#AktorkanalEGBuro#".STATE").State(0); dom.GetObject("EGBuroFBTempIstinToleranz").State(true); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
        }
        else
        {
         WriteLine("ist ausgeschaltet und soll ausgeschaltet sein"); dom.GetObject("EGBuroFBTempIstinToleranz").State(true); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
         }
        }
        else
        {
         WriteLine("größer als hochstill"); dom.GetObject(AktorEGBuro#":"#AktorkanalEGBuro#".ON_TIME").State(dom.GetObject("heizzeitEGBuro").Value()); dom.GetObject(AktorEGBuro#":"#AktorkanalEGBuro#".STATE").State(1); dom.GetObject("EGBuroFBTempIstinToleranz").State(true); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
         }
         }
       }
      }
    }
    }
    else
      {
      if (dom.GetObject("isttemperaturEGBuro").Value() >= dom.GetObject("hochtempEGBuro").Value())
      {
      WriteLine("Isttemperatur größer als hochtemp");
      if (schaltzustandEGBuro == "true")
       {
        if (dom.GetObject("NeueisttemperaturEGBuro").Value() <= dom.GetObject("solltemperaturEGBuro").Value())
        {
         WriteLine("Neue Isttemp kleiner gleich Solltemperatur");
         WriteLine("ist eingeschaltet und soll eingeschaltet sein");
         dom.GetObject("EGBuroFBTempIstinToleranz").State(false); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
         }
         else
         {
         WriteLine("Neue Isttemp grösser Solltemperatur");
         WriteLine("ist eingeschaltet und soll ausgeschaltet sein"); dom.GetObject(AktorEGBuro#":"#AktorkanalEGBuro#".STATE").State(0); dom.GetObject("EGBuroFBTempIstinToleranz").State(false); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
         }
        }
        else
        {
        if (dom.GetObject("NeueisttemperaturEGBuro").Value() <= dom.GetObject("solltemperaturEGBuro").Value())
        {
         WriteLine("Neue Isttemp kleiner gleich Solltemperatur");
         WriteLine("ist ausgeschaltet und soll eingeschaltet sein");
    dom.GetObject(AktorEGBuro#":"#AktorkanalEGBuro#".ON_TIME").State(36000);
         dom.GetObject(AktorEGBuro#":"#AktorkanalEGBuro#".STATE").State(1); dom.GetObject("EGBuroFBTempIstinToleranz").State(false); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
    dom.GetObject("EGBuroFBEinschaltzeit").State(888);
         }
         else
         {
         WriteLine("Neue Isttemp grösser Solltemperatur");
         WriteLine("ist ausgeschaltet und soll ausgeschaltet sein"); dom.GetObject("EGBuroFBTempIstinToleranz").State(false); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
         }
         }
      }
      else
      {
       if (dom.GetObject("isttemperaturEGBuro").Value() == dom.GetObject("niedertempEGBuro").Value())
      {
       if (schaltzustandEGBuro == "true")
       {
        if (dom.GetObject("NeueisttemperaturEGBuro").Value() >= dom.GetObject("niederstillEGBuro").Value())
        {
         WriteLine("Neue Isttemp größer gleich Niederstill");
         WriteLine("ist eingeschaltet und soll ausgeschaltet sein");
         dom.GetObject("EGBuroFBTempIstinToleranz").State(false); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
         }
         else
         {
         WriteLine("Neue Isttemp kleiner Niederstill");
         WriteLine("ist eingeschaltet und soll eingeschaltet sein");
         dom.GetObject("EGBuroFBTempIstinToleranz").State(false); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
         }
        }
        else
        {
         if (dom.GetObject("NeueisttemperaturEGBuro").Value() >= dom.GetObject("niederstillEGBuro").Value())
        {
         WriteLine("Neue Isttemp größer gleich Niederstill");
         WriteLine("ist ausgeschaltet und soll eingeschaltet sein"); dom.GetObject("EGBuroFBTempIstinToleranz").State(false); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
		 dom.GetObject(AktorEGBuro#":"#AktorkanalEGBuro#".ON_TIME").State(36000);  dom.GetObject(AktorEGBuro#":"#AktorkanalEGBuro#".STATE").State(1);
         }
         else
         {
         WriteLine("Neue Isttemp kleiner Niederstill");
         WriteLine("ist ausgeschaltet und soll eingeschaltet sein");
    dom.GetObject(AktorEGBuro#":"#AktorkanalEGBuro#".ON_TIME").State(36000);  dom.GetObject(AktorEGBuro#":"#AktorkanalEGBuro#".STATE").State(1);dom.GetObject("EGBuroFBTempIstinToleranz").State(false); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
    dom.GetObject("EGBuroFBEinschaltzeit").State(888);
         }
         }
        }
       else
       {
       WriteLine("Isttemperatur ist kleiner als niedertemp");
       if (schaltzustandEGBuro == "true")
       {
        if (dom.GetObject("NeueisttemperaturEGBuro").Value() >= dom.GetObject("niederstillEGBuro").Value())
        {
         WriteLine("Neue Isttemp größer gleich Niederstill");
         WriteLine("ist eingeschaltet und soll ausgeschaltet sein");
         dom.GetObject(AktorEGBuro#":"#AktorkanalEGBuro#".STATE").State(0); dom.GetObject("EGBuroFBTempIstinToleranz").State(false); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
         }
         else
         {
         WriteLine("Neue Isttemp kleiner Niederstill");
         WriteLine("ist eingeschaltet und soll eingeschaltet sein");
         dom.GetObject("EGBuroFBTempIstinToleranz").State(false); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
         }
        }
        else
        {
         if (dom.GetObject("NeueisttemperaturEGBuro").Value() >= dom.GetObject("niederstillEGBuro").Value())
        {
         WriteLine("Neue Isttemp größer gleich Niederstill");
         WriteLine("ist ausgeschaltet und soll eingeschaltet sein"); dom.GetObject("EGBuroFBTempIstinToleranz").State(false); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
         }
         else
         {
         WriteLine("Neue Isttemp kleiner Niederstill");
         WriteLine("ist ausgeschaltet und soll eingeschaltet sein");
    dom.GetObject(AktorEGBuro#":"#AktorkanalEGBuro#".ON_TIME").State(36000);
    dom.GetObject(AktorEGBuro#":"#AktorkanalEGBuro#".STATE").State(1); dom.GetObject("EGBuroFBTempIstinToleranz").State(false); dom.GetObject("EGBuroFBVergleichTemp").State(dom.GetObject("isttemperaturEGBuro").Value());
    dom.GetObject("EGBuroFBEinschaltzeit").State(888);
         }
         }
       }
      }
    }
    if ((dom.GetObject("solltemperaturEGBuro").Value() < 5.600) && (dom.GetObject("ScriptwiederholungEGBuromax").Value() == dom.GetObject("ScriptwiederholungEGBuro").Value()) && (dom.GetObject("Aussentemp").Value() == 2.0))
    {
    dom.GetObject(AktorEGBuro#":"#AktorkanalEGBuro#".ON_TIME").State(dom.GetObject("ScriptwiederholungEGBuroHeizzeit").Value()); dom.GetObject(AktorEGBuro#":"#AktorkanalEGBuro#".STATE").State(1); dom.GetObject("ScriptwiederholungEGBuro").State(0.0);
    dom.GetObject("EGBuroFBEinschaltzeit").State(999);
    }
    else
    {
    WriteLine("nix");
    dom.GetObject("ScriptwiederholungEGBuro").State(dom.GetObject("ScriptwiederholungEGBuro").Value() + 1.0);
    if (dom.GetObject("ScriptwiederholungEGBuro").Value() > dom.GetObject("ScriptwiederholungEGBuromax").Value())
    {
    dom.GetObject("ScriptwiederholungEGBuro").State(0.0);
    }
    else
    {
    dom.GetObject("ScriptwiederholungEGBuro").State(dom.GetObject("ScriptwiederholungEGBuro").Value());
    }
    }
    WriteLine("Ende");
Es ist wie gesagt nie getestet und die Logik müsste auch noch ein wenig verfeinert werden
Zuletzt geändert von twoxx am 13.04.2020, 14:12, insgesamt 1-mal geändert.
- Charly - Raspymatic mit Redmatic, 420 Systemvariablen, 440 Programmen, 101 Direktverknüpfungen, 121 Geräten
- CCU3- Raspymatic mit Redmatic und Verbindung zur PV-Anlage/Wechselrichter
- Charly - Raspymatic mit Redmatic und Sprachsteuerung per Alexa

schonwiederich
Beiträge: 52
Registriert: 07.10.2016, 13:44
Hat sich bedankt: 3 Mal
Danksagung erhalten: 1 Mal

Re: Fußbodenheizung - Steuerung/IR-Heizung-Steuerung

Beitrag von schonwiederich » 24.11.2018, 20:16

Hallo twoxx :)

Ich hättte da gerne mal ein Problem :)

Mir sind 2 Dinge im Bezug auf den Modus nicht klar.

1. Du erklärst auf Seite 1 das die variable automanuweiter dafür sorgt ob das Programm und script läuft =Auto oder nicht läuft <>Auto, zb man.
Ok, ich hatte nun gedacht das wenn ich das thermostat auf manu Stelle, sich dann auch die variable ändert. Das tut sie aber nicht. Also hab ich ein Programm erstellt das bei Änderung des Modus des wandthermostats die systemvariable entsprechend abändern. Nun funktioniert das auch so wie es soll. Hätte das mit der systemvariable denn von selbst funktionieren sollen? Wenn ja, dann läuft bei mir was falsch. Wenn nein dann wäre vielleicht noch ein Hinweis darauf auf Seite 1 gut. Ausser ich hab den überlesen.

2. Ich Blick noch nicht so ganz durch wann was welche Priorität hat. Es passiert folgendes:ich bin auf dem. Thermostat im Auto Modus. Deine Programme und Skripten laufen also durch. Dann ändere ich am thermostat die solltemperatur. Der Modus ist immernoch Auto.
In dem Moment haben wir 2 Aussagen zur solltemperatur. Einmal die im heizplan des Thermostats und einmal manuell eingestellte [immernoch Auto mode]
. Dan habe ich mindestens 2 mal 20 Minuten Zyklen abgewartet und deine Programme laufen durch aber die solltemperatur bleibt die die ich am thermostat händisch eingestellt habe.

Ich frage mich also hat die händische Einstellung immer Priorität vor dem wochenprogramm oder ubernimmt das wochenprogramm wieder die Priorität wenn um 0.00uhr der neue Tag anfängt. Und vor allem, warum kann ich im Auto Modus die solltemperatur verändern. Ich hätte gedacht dazu muss man in den manu Modus.

Beobachtet habe ich auch, wenn ich dann in den manu Modus schalte und dann wieder zurück in Auto dann greift wieder der wochenheizplan im thermostat.

Um meiner Familie das nutzen der Heizung zu erleichtern hättte ich gerne gesagt in den manu Modus wechseln und Temperatur einstellen, aber das tenoeratureinstellen kann so ja auch "ausversehen" passieren.

Würde mich freuen wenn du hier etwas Licht in die Verwirrungen bringen kannst :)

Vielen Dank vorab.

twoxx
Beiträge: 534
Registriert: 16.03.2015, 18:57
Hat sich bedankt: 1 Mal
Danksagung erhalten: 26 Mal

Re: Fußbodenheizung - Steuerung/IR-Heizung-Steuerung

Beitrag von twoxx » 24.11.2018, 23:13

schonwiederich hat geschrieben:
24.11.2018, 20:16
Hallo twoxx :)

Ich hättte da gerne mal ein Problem :)

Mir sind 2 Dinge im Bezug auf den Modus nicht klar.

1. Du erklärst auf Seite 1 das die variable automanuweiter dafür sorgt ob das Programm und script läuft =Auto oder nicht läuft <>Auto, zb man.
Ok, ich hatte nun gedacht das wenn ich das thermostat auf manu Stelle, sich dann auch die variable ändert. Das tut sie aber nicht. Also hab ich ein Programm erstellt das bei Änderung des Modus des wandthermostats die systemvariable entsprechend abändern. Nun funktioniert das auch so wie es soll. Hätte das mit der systemvariable denn von selbst funktionieren sollen? Wenn ja, dann läuft bei mir was falsch. Wenn nein dann wäre vielleicht noch ein Hinweis darauf auf Seite 1 gut. Ausser ich hab den überlesen.
Mit der Variable automanuweiter kannst Du steuern, ob das Programm bei der DANN-Bedingung(und die darin befindlichen Scripte)
ausgeführt werden soll.

Da ja ein Zeitintervall das Programm ständig auslöst, benötigt man ja einen "Schalter" der das Programm quasi im Sommer "deaktiviert".
Sonst würde ja im Sommer auch immer das Programm durchlaufen, obwohl das gar nicht erforderlich ist.

Wenn Du den Modus des Thermostats auf "Manu" setzt und dadurch auch die Variable auf "manu" gesetzt wird, dann schaltest Du damit die Steuerung ab.
schonwiederich hat geschrieben:
24.11.2018, 20:16

2. Ich Blick noch nicht so ganz durch wann was welche Priorität hat. Es passiert folgendes:ich bin auf dem. Thermostat im Auto Modus. Deine Programme und Skripten laufen also durch. Dann ändere ich am thermostat die solltemperatur. Der Modus ist immernoch Auto.
In dem Moment haben wir 2 Aussagen zur solltemperatur. Einmal die im heizplan des Thermostats und einmal manuell eingestellte [immernoch Auto mode]
. Dan habe ich mindestens 2 mal 20 Minuten Zyklen abgewartet und deine Programme laufen durch aber die solltemperatur bleibt die die ich am thermostat händisch eingestellt habe.

Ich frage mich also hat die händische Einstellung immer Priorität vor dem wochenprogramm oder ubernimmt das wochenprogramm wieder die Priorität wenn um 0.00uhr der neue Tag anfängt. Und vor allem, warum kann ich im Auto Modus die solltemperatur verändern. Ich hätte gedacht dazu muss man in den manu Modus.

Beobachtet habe ich auch, wenn ich dann in den manu Modus schalte und dann wieder zurück in Auto dann greift wieder der wochenheizplan im thermostat.

Um meiner Familie das nutzen der Heizung zu erleichtern hättte ich gerne gesagt in den manu Modus wechseln und Temperatur einstellen, aber das tenoeratureinstellen kann so ja auch "ausversehen" passieren.

Würde mich freuen wenn du hier etwas Licht in die Verwirrungen bringen kannst :)

Vielen Dank vorab.
Wenn du im Auto-Modus bist UND an dem Stellrad dann die Solltemperatur durch drehen änderst, dann gilt die geänderte Solltemperatur solange bis im Wochenprogramm der nächste Zeitpunkt kommt indem eine Solltemperatur definiert wurde.

Wenn Du in den Manu-Modus wechselst, dann gilt kein Wochenprogramm mehr. Dann musst Du die Sollempteratur per Stellrad ändern und diese bleibt dann so lange bis Du sie wieder am Stellrad abänderst oder wieder in den Auto-Modus wechselst.

===> Wenn Du also eine Solltemperatur einstellen willst, die nicht durch ein Wochenprogramm später dann wieder verändert wird = Manu Modus
===> Wenn Du also eine Solltemperatur einstellen willst und diese später aber durch ein Wochenprogramm geändert werden darf = Auto Modus

Du kannst im Wandthermostat auch eine Bediensperre einstellen. Entweder für den Modus oder für das Stellrad etc.
- Charly - Raspymatic mit Redmatic, 420 Systemvariablen, 440 Programmen, 101 Direktverknüpfungen, 121 Geräten
- CCU3- Raspymatic mit Redmatic und Verbindung zur PV-Anlage/Wechselrichter
- Charly - Raspymatic mit Redmatic und Sprachsteuerung per Alexa

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“