Universelle Heizungssteuerung

kaum den Beitrag erstellt und schon funktionierts… :wink:

Die Lösung stand eigentlich in der WIKI: THERMOSTAT ObjectIDs = ID der Thermostate…

War eigentlich nicht so schwer ^^

Hallo,

Genau das war´s! Ich hab jetzt zur Sicherheit immer 00:01 und 23:59 genommen.

Brauchst du eigentlich nicht. Logisch ist ein eigentlich aber auch. Der Tag beginnt um 0:00 Uhr und endet um 23:59, 0:00 ist dann wieder ein neuer Tag.

Guten Morgen,

so, die nächsten Fragen sind aufgetreten - und zwar sind mir trotz WIKI-Studium die Abhängigkeiten der Temperaturen (SollT/WunschT/Temp.Profile) nicht ganz klar:

Heizungsinterface: HomeMatic Heizen JA/NEIN

  1. Welche Funktionen haben die Temperatur-Profile?

  2. Wie funktioniert die Temperaturregelung:

Dieses Interface liest die SOLL-Temperaturen aus IPS-Variablen und schreibt die SOLL-Temperaturen an die SETPOINT-Variable der Thermostate. Die Steuerung der Stellantriebe wird hierbei von IPS „übernommen“. Um die Stellantriebe direkt von IPS aus steuern zu können, wird für Abkühlen eine Temperatur von 6° an die Thermostate, für Heizen wird eine Temperatur von 30° an die Thermostate geschickt.

So weit kann ich noch folgen. Den folgenden Satz verstehe ich allerdings nicht ganz:

Damit sind die Stellantriebe entweder 0% oder 100% auf. Die Probleme, die man eventuell mit einem Überschwappen der Temperatur innerhalb eines Raumes aufgrund der Firmeware 2.0 eines Thermostats gibt, können damit unterbunden werden, da tatsächlich direkt bei der erreichten Wunsch-Temperatur der Stellantrieb geschlossen wird.

Wunschtemperatur ist ja für An- und Abwesendheit pro Raum definiert, für die Solltemperatur gibt es allerdings nur einen Wert - irgendwie stehe ich hier auf dem Schlauch, wie da die richtige Temperatur zustande kommen soll. Wonach soll sich die Soll-Temperatur richten?

Dank im Voraus für die Aufklärung! :slight_smile:

Grüße

Günter

Hi,

da es jeweils um ganze Tage (ohne Datum) geht ist klar, dass 18:00 bis 00:00 Uhr nicht funktionieren kann. Wenn man aus 18:00 Uhr einen Timestamp zum Vergleich mit dem Timestamp von 00:00 erstellt, liegt 00:00 Uhr in der Vergangenheit … Aus einer negativen Zeit kann man keinen Slot erstellen in dem geheizt werden soll. Am Ende eines Tages muss es also wie ihr selbst schon festgestellt habt immer 23:59 als letzte Minute des aktuelle Tages sein. Am nächsten Tag geht es dann von 00:00 Uhr (das sollte eigentlich funktionieren) neu bis 23:59 los.

Hier im Script noch über Mitternacht hinweg Slots erstellen und vergleichen zu lassen zu können, würde das ganze an falscher Stelle verkomplizieren …

In einem Zwischensatz im Wiki habe ich erwähnt, dass bei keiner definierten Zeit immer Abwesenheit gilt. Ich habe also bis 23:59 einen Slot wo ich eventuell abends heizen will. Der nächste Slot fängt im Bad um 06:00 Uhr an. Zwischen 00:00 und 05:59 ist also durch keinen definierten Slot automatisch Abwesenheit …

Aber auch das nehme ich als Hinweis mit ins Wiki auf, wenn wir irgendwann mal fertig sind mit unserem Häuschen

äh ja :slight_smile: Den Post hatte ich schon mal gelesen, vor meiner Antwort aber irgendwie nicht mehr gesehen …

Welche meinst Du? Die Variablen-Profile? Die machen nur, dass es im WebFront schön aussieht und das mann im iFront Switch Schalter für ein und aus hat?

Oder habe ich die Frage falsch verstanden.

Zu Variablen Profilen steht auch auf Variablenprofile — IP-Symcon :: Automatisierungssoftware eine Einführung. Hast Du die schon gelesen?

Es geht ja darum, Homematic zu verbieten den Raum zu lange überschappen zu lassen. Bei einigen Thermostaten, die von HomeMatic gesteuert werden, ist es hin und wieder so, dass Du 21° als Temperatur angibst, das Thermostat bei 22,5° das Ventil aber immer noch nicht geschlossen hat. Warum auch immer …

Um solch ein Überschwappen zu verhindern, vergleicht mein Script die Temperaturen selbst und lässt die Thermostate nur noch ganz heiß oder sau kalt machen. Das ist bei HomeMatic Thermostaten 6° oder 30°. Damit sind die Stellantriebe dann entweder komplett auf oder komplett zu. Dieser Wert wird natürlich für jeden Raum einzeln gesetzt. Wohnzimmer kann also auf 6° stehen, während das Schlafzimmer auf 30° steht. Je nachdem, welche Wunsch- und Ist-Temperatur jeweils in beiden Räumen ist.

Hi,

danke für die rasche Antwort, Punkt 1 schau ich mir nochmals an.

zu Punkt 2:

Um solch ein Überschwappen zu verhindern, vergleicht mein Script die Temperaturen selbst und lässt die Thermostate nur noch ganz heiß oder sau kalt machen. Das ist bei HomeMatic Thermostaten 6° oder 30°. Damit sind die Stellantriebe dann entweder komplett auf oder komplett zu. Dieser Wert wird natürlich für jeden Raum einzeln gesetzt. Wohnzimmer kann also auf 6° stehen, während das Schlafzimmer auf 30° steht. Je nachdem, welche Wunsch- und Ist-Temperatur jeweils in beiden Räumen ist.

Das verstehe ich alles, aber welche Rolle spielt die Soll-Temperatur (heiz - Soll Temperaturen) dabei? Welche Funktion hat diese?

Meine „Soll-Temperatur“ sollte ja die „Wunsch-Temperatur“ (an-/abwesend) sein, jedoch fließt scheinbar die Solltemperatur auch in die Steuerung der Thermostate ein…

Da hab ich noch ein Verständnisproblem. :slight_smile:

Danke,

Günter

SOLL-Temperatur ist die Temperatur (bei HomeMatic Heizen Ja/Nein), die der Raum aktuell haben soll.

Beispiel 1:
Wunsch-Temperatur 20°, IST-Temperatur 19° => Soll Temperatur bei HomeMaticHeizenJaNein 30° (weil der Raum geheizt werden soll)

Beispiel 2: (30 Minuten später)
Wunsch-Temperatur 20°, IST-Temperatur 20,7° => Soll Temperatur bei HomeMaticHeizenJaNein 6° (weil der Raum abkühlen soll, bis er an der Untergrenze von Wunsch-Delta-Temperatur angekommen ist; dann schaltet das Script wieder auf heizen)

Im Wiki: Raum-Steuerungs-Techniken / Soll-Ist-Vergleich

Der Raum schwankt also permanent zwischen der Wunsch-Temperatur minus und plus die Delta-Temperatur.

Verständlicher?

Jo, das ist auch alles klar. :slight_smile:

Aber wozu hinterlege ich diesen Wert:

Anlegen der heiz-Soll-Temperatur Variablen
NEU eingeführt in Revision 3

Die folgenden Variablen müssen nur für die Interfaces HomeMaticHeizenJaNein und EinsWireWago angelegt werden
Für jeden Raum, den man steuern will, muss man eine IPS-Variable zum speichern der SOLL-Temperaturen erstellen.

Type: Float
Profil: ~Temperature 

Da habe ich für jeden Raum einen Soll-Wert hinterlegt, obwohl es für mich keinen Sinn macht. Schließlich habe ich ja gleichzeitig meine Wunschtemperatur als „Soll-Temperatur“ hinterlegt…

Sorry für die Verwirrung!

Günter

Naja, irgendwo muss sich mein Script ja merken, ob der Raum aktuell auf Heizen oder auf Abkühlen steht um im Thermostat die richtige Temperatur zu setzen und vor allen Dingen vergleichen zu können, ob der Raum Status sich von heizen auf abkühlen geändert hat.

Soll Temperatur ist immer die Temperatur Wunsch - oder + die Delta Temperatur. Also bei 20° Wunsch-Temperatur und 0,5° Delta-Temperatur 19,5° oder 20,5°.

Im HM-Thermostat kommen dann immer 30° oder 6° raus.

Wunsch-Temperatur und Ist-Temperatur sind ja dazu nicht geeignet.

Bei HomeMaticHeizenJaNein gibt es also 4 Temperaturen.

  • Wunsch (20°)
  • Ist (18°)
  • Soll (20,5°)
  • HM-Thermo (30°)

oder

  • Wunsch (20°)
  • Ist (20,6°)
  • Soll (19,5°)
  • HM-Thermostat (6°)
    => so lange, bis die Ist-Temperatur wieder bei 19,4° angekommen ist

Nur mit allen vier Temperaturen kann man den Heizen oder abkühlen lassen und sich alles merken …

Verständlicher?

vorweg gleich mal danke für deine Geduld.

Ich glaube, wir kommen der Sach schon näher. :slight_smile:

Heißt das, dass es egal ist, welchen Wert ich hier eintrage bzw ob ich hier überhaupt einen Wert eintrage, weil sich das Feld selbt errechnet?

Danke!

Günter

wo trägst Du dafür einen Wert ein?

Aus dem Wiki:
Steuerungstechniken / Soll-Ist-Vergleich:

Sollte das Thermostat nur Heizen Ja/Nein unterstützen oder die Thermostatssteuerung zu schlecht sein, kann mit dieser Steuerungstechnik die Soll Temperatur permanent mit der Ist-Temperatur verglichen und angepasst werden. Solange die Wunsch-Temperatur plus die Delta-Temperatur im Raum noch nicht erreicht ist, wird diese als Soll-Temperatur gesetzt. Wenn diese Temperatur erreicht ist, wird die Soll-Temperatur auf die Wunsch-Temperatur minus die Delta-Temperatur gesetzt. Dies gilt so lange, bis die Ist-Temperatur diese neue Soll-Temperatur unterschreitet. Der Raum schwankt also permanent zwischen der Wunsch-Temperatur minus und plus die Delta-Temperatur.

Hi,

jetzt hab ich es verstanden. Mein Problem war, dass sich auf dem ersten Blick die Solltemperatur nicht an die Wunsch-Temp. und Ist-Temp angepasst hat.

So ist es klar, danke für deine Bemühungen und dein Script!

Grüße

Günter

Moin zusammen,

das Script läuft nun seit einigen Wochen perfekt durch. Ich habe noch einige Fragen, wovon einige sicherlich sehr schnell zu beantworten sind.

Ich würde gerne die Temperatur, die ein Raum gerade haben soll, in eine Variable schreiben. Ich habe in den Scripten schon entsprechende Funktionen gefunden, bin aber leider nicht in der Lage mir das daraus selbst zu bauen. Ich kann zwar im WF wunderbar sehen, welches Profil gerade in welchem Raum aktiv ist, aber ich hätte die „Soll-Temperatur“ auch gerne noch in einer separaten Variablen pro Raum.

Nächste Frage. Ich komme ursprünglich von den FS20 FHT80B-Geräten und habe diese mit AntisFHT genutzt. Bei diesem Script war es so, wenn man am Rad gedreht hat (also am Temperaturregler :slight_smile: ), dann hat das Thermostat die manuell gedrehte Temperatur so lange gehalten, bis der nächste Heiz-Slot erreicht war.
Ein Beispiel: Am Tag, wo kein regulärer Heiz-Slot vorgesehen ist, will ich spontan das Badezimmer heizen. Badezimmer hat 19° Soll-Temperatur im Profil abwesend. Drehe ich nun am Rad auf 22°, so hält das exakt 2 Minuten, bis das Heizungsscript wieder getriggert wird. Das Thermostat steht dann wieder auf 19°.
Lässt sich das irgendwie unterbinden? Oder gibt es einen Workarround?

Grüße,
Christoph

Hallo Ernie,

ich finde deine Heizungssteuerung richtig Klasse. Bisher habe ich mit der Verson 2.4 gearbeitet.
Bei läuft noch nicht so viel. Meine Heizungssteuerung habe ich ganz einfach aufgebaut. Diese läuft auch ganz gut.
Leider sind ab der Version 2.5 einige Funktionen nicht mehr enthalten. Die Umstellung auf die Version 2.6 stelle sichfür mich so einfach dar.
Dabei bin ich über deine universelle Heizungssteuerung gestollpert.
Ich möcht ein kurzen Feedback geben.
Die Installation ging ganz schnell. Das anbassen der ID’s war schon eine kleine Herausforderung.
Aber wer im Wiki richtig list kann es ganz gut alleine schaffen, was mir auch gelungen ist.
Bei einer Sache habe ich etwas länger gebraucht und zwar beider Objekt ID für „writeRaumSollTemeratur“, die für das Gerät Thermostat ist. Ich habe immer nach einer Variablen gesucht.

In allen habe ich mit meinen Anpassung von 8 Räumen so ca. 3 Abende a 3 Stunden benötigt.

Nochmals viel Dank an alle die hier im forum mit wirken.

Hallo

ich weis nicht ob das hier hin gehört.
Leider geht das WIKI seit heute nicht mehr.

Erst mal herzlich willkommen mit deinen 3 Posts in mehr als 3 Jahren :wink:

Wenn ich ehrlich bin, kann mein IPS bisher nichts anderes als mein Heizungsscript :frowning: In der Mietwohnung hat sich noch nicht viel mehr angeboten. Aber der WAF Faktor ist seitdem extrem gestiegen … Wenn wir unser neues altes Haus zu ende saniert haben, wird IPS sicherlich noch viele schöne neue Aufgaben bekommen … Ich denke da an die Wäschespinne, die Abends sagt, dass noch Wäsche auf ihr hängt und für die Nacht Regen angesagt ist …

Vielen Dank für das Lob an alle und für dein Feedback. Ich nehme es bei Gelegenheit mit ins Wiki auf. Vielleicht kannst Du noch einen Satz über dein PHP Kentnisse sagen. So in die Richtung „rudimentär, gut, PHP-Web-Entwickler“ … Das ist sicherlich für andere von Interesse, die sich überlegen das Script auch einzubauen.

Und nein, ich glaube nicht, dass dieser Thread der richtige Punkte für das (sicherlich nur vorrübergehend) kaputte Wiki ist. Ich mache mal einen neuen Thread dafür auf :slight_smile:

P.S.: @derStandard: du bist nicht vergessen, leider aber aufgrund akuter Zeitnot etwas verschoben :frowning:

Hallo ernie!

Nach wie vor läuft dein Programm bei mir Super! :slight_smile:

Aber ich wollte mal nachfragen, wie es mit einer Globalen-Absenk-Temperatur bei offenen/gekippten Fenster aussieht?

LG aus Österreich,
Christian.

hi,

schön dass das Script gut läuft :slight_smile:

Ich befürchte, mit ernsten neuen Features im Script müssen wir uns alle bis nächsten Winter gedulden, auch wenn der jetzige gerade erst anfängt :frowning:

Ich kernsaniere gerade unser neues (altes) Haus … Danach habe ich zwar eine unglaublich coole IPS Spielweise, aber bis es fertig ist … Ich sage nur Handwerker-Koordination …

Wenn ich wieder etwas Zeit habe (leider wahrscheinlich erst nach dem winterlichen Frost), will ich das Script auch eventuell in die IPS Library heben … da muss ich noch mal schauen, ob das vorteilhaft sein könnte …

Sorry :frowning:

Hallo zusammen!

ernie, kein Problem, wollte eben nur mal einen Zeitrahmen wissen g

Ich habs jetzt anders gelöst bei mir um in deinem Script nicht rumdoktern zu müssen…

Vielleicht ists für die anderen ja interessant:

  • je eine „safe“-Variable unterhalb jeder Abwesenheits-Temperatur-Variable angelegt und versteckt.
  • Script erstellt und dort alle Variablen der Abwesenheit-Temp und Fenster reinschreiben.
  • Ausgelöste Ereignisse aller Fenster „Bei Variablenänderung“ erstellt.

Fertig :slight_smile:

Hier noch mein Script:


<?
$temp_id['Keller/Büro']         = 32840 /*[Heizplan\00-Temperaturprofile\Keller\Büro - Abwesend]*/;
$temp_id['Whg1/Andrea']         = 27148 /*[Heizplan\00-Temperaturprofile\Wohnung 1\Andrea - Abwesend]*/;
$temp_id['Whg1/Bad']                = 40453 /*[Heizplan\00-Temperaturprofile\Wohnung 1\Bad - Abwesend]*/;
$temp_id['Whg1/Benjamin']         = 45761 /*[Heizplan\00-Temperaturprofile\Wohnung 1\Benjamin - Abwesend]*/;
$temp_id['Whg1/Küche']             = 36703 /*[Heizplan\00-Temperaturprofile\Wohnung 1\Küche - Abwesend]*/;
$temp_id['Whg1/Schlafzimmer'] = 37591 /*[Heizplan\00-Temperaturprofile\Wohnung 1\Schlafzimmer - Abwesend]*/;
$temp_id['Whg1/Wohnzimmer']     = 56582 /*[Heizplan\00-Temperaturprofile\Wohnung 1\Wohnzimmer - Abwesend]*/;
$temp_id['Whg2/Bad']             = 45657 /*[Heizplan\00-Temperaturprofile\Wohnung 2\Bad - Abwesend]*/;
$temp_id['Whg2/Schlafzimmer'] = 51340 /*[Heizplan\00-Temperaturprofile\Wohnung 2\Schlafzimmer - Abwesend]*/;
$temp_id['Whg2/Wohnküche']     = 27830 /*[Heizplan\00-Temperaturprofile\Wohnung 2\Wohnküche - Abwesend]*/;

$glob_window_temp = 57796 /*[Heizungssteuerung\Heizplan\00-Temperaturprofile\Fenster offen Temperatur]*/;

$window_id['Keller/Büro'][0]           = 11948 /*[Allgemein\Keller\Büro\Fenster\Status\STATE]*/;
$window_id['Whg1/Andrea'][0]           = 57629 /*[Wohnung 1\Andrea\Fenster\Status\STATE]*/;
$window_id['Whg1/Bad'][0]              = 50638 /*[Wohnung 1\Bad\Fenster\Status\STATE]*/;
$window_id['Whg1/Benjamin'][0]       = 54535 /*[Wohnung 1\Benjamin\Fenster\Status\STATE]*/;
$window_id['Whg1/Küche'][0]           = 47623 /*[Wohnung 1\Küche\Fenster\Status\STATE]*/;
$window_id['Whg1/Schlafzimmer'][0] = 52245 /*[Wohnung 1\Schlafzimmer\Fenster links\Status\STATE]*/;
$window_id['Whg1/Schlafzimmer'][1] = 26022 /*[Wohnung 1\Schlafzimmer\Fenster rechts\Status\STATE]*/;
$window_id['Whg1/Wohnzimmer'][0]   = 32664 /*[Wohnung 1\Wohnzimmer\Fenster links\Status\STATE]*/;
$window_id['Whg1/Wohnzimmer'][1]   = 37033 /*[Wohnung 1\Wohnzimmer\Fenster rechts\Status\STATE]*/;
$window_id['Whg1/Wohnzimmer'][2]   = 33735 /*[Wohnung 1\Wohnzimmer\Terassentür\Status\STATE]*/;
$window_id['Whg2/Bad'][0]               = 13139 /*[Wohnung 2\Bad\Fenster\Status\STATE]*/;
$window_id['Whg2/Schlafzimmer'][0] = 57893 /*[Wohnung 2\Schlafzimmer\Fenster links\Status\STATE]*/;
$window_id['Whg2/Schlafzimmer'][1] = 12258 /*[Wohnung 2\Schlafzimmer\Fenster rechts\Status\STATE]*/;
$window_id['Whg2/Wohnküche'][0]       = 33592 /*[Wohnung 2\Wohnküche\Fenster Küche\Status\STATE]*/;
$window_id['Whg2/Wohnküche'][1]       = 55635 /*[Wohnung 2\Wohnküche\Fenster Wohnzimmer\Status\STATE]*/;
$window_id['Whg2/Wohnküche'][2]       = 44861 /*[Wohnung 2\Wohnküche\Terassentür\Status\STATE]*/;


foreach($window_id as $key => $val) {
    if(array_search($_IPS['VARIABLE'], $val) !== FALSE) {
        $name = $key;
    }
}

if(GetValue($_IPS['VARIABLE']) == 2 || GetValue($_IPS['VARIABLE']) == 1) {
    //Wenn Fenster geöffnet oder gekippt wird -> Abwesenheitstemp. zwischenspeichern -> Abwesenheitstemp. mit globaler Fenster-Temp. überschreiben
    if(GetValueFloat(IPS_GetChildrenIDs($temp_id[$name])[0]) == GetValueFloat($glob_window_temp) || GetValueFloat(IPS_GetChildrenIDs($temp_id[$name])[0]) == 0) {
        SetValueFloat(IPS_GetChildrenIDs($temp_id[$name])[0], GetValueFloat($temp_id[$name])); //Abwesenheitstemp. zwischenspeichern
    }
    SetValueFloat($temp_id[$name], GetValueFloat($glob_window_temp)); //Abwesenheitstemp. mit globalen Wert überschreiben
} else {
    //Wenn Fenster geschlossen wird -> Abwesenheitstemp. zurückspeichern -> Safe-Variable leeren
    SetValueFloat($temp_id[$name], GetValueFloat(IPS_GetChildrenIDs($temp_id[$name])[0]));
    SetValueFloat(IPS_GetChildrenIDs($temp_id[$name])[0], 0);
}
?>

lg,
Christian.