Universelle Heizungssteuerung

[b][i]WICHTIG:

Im Wiki sind noch viel mehr Screenshots, da man hier nur 10 Dateien anhängen darf!

Link zum Wiki-Tutorial: Ernies Heizungsscript[/i][/b]

Hallo,

ich habe letzte Woche mein IPS und die dazugehörige Heizungssteuerung (HomeMatic CCU + Thermostate und Stellantriebe) in Betrieb genommen.

Da ich auf Anhieb kein Heizungssteuerungs-Script gefunden habe, dass meinen Wünschen entspricht, habe ich kurzerhand gestern ein eigenes geschrieben …
Mir alle Scripte anzuschauen, ob Sie einigermaßen das umsetzen können, was ich davon erwarte, war mir zu aufwendig; mein eigenes Script kenne ich dafür jetzt in und auswendig … Aber ihr dürft gerne etwas zu meinen Überlegungen sagen :slight_smile: Es ist ja noch kein Meister vom Himmel gefallen.

Kern-Gedanke für das gesamte Script ist der, ich durch meine Selbstständigkeit oft erst am Tag vorher weiß, ob ich im Büro bin oder nicht. Daraus hat sich für mich als wichtigste Anforderung die ergeben, dass man im nach hinein die An- und Abwesenheit in den einzelnen Räumen sehr einfach über IPS selbst verändern können soll.
Die Featureliste ist aktuell ziemlich kurz, aber ich habe die Scripte so abstrakt gehalten, dass man Sie zum einen noch einfach erweitern kann und zum anderen die Anbindung von weiteren Heizungskomponenten sehr einfach ist.

Grundsätzlich habe ich die Config komplett in das PHP Script gepackt. Dateien oder MySQL war mit zu aufwendig. Von dort wird jeden Tag einmal um 00:01 Uhr der Heizplan für den gestrigen Tag in Zukunft (also 6 Tage vorraus) erstellt. Dies passiert indem das PHP Script IPS-Varibalen inklusive Profil und vordefiniertem Wert dynamisch in der Tages-zugehörigen Kategorie erstellt. Damit kann man individuell die Anwesenheit für die nächsten 7 Tage vorgeben sowie bei Bedarf die Heizung direkt per Dashboard, WebFront oder iFront manuell anschmeisen.

Ein Trigger Script vergleicht die vorgegebenen Wunsch-Werte alle 2 Minuten mit der aktuellen Soll-Werten und passt diese eventuell an.

Feature Liste

[ul]
[li] Dashboard, WebFront und iFront zum einstellen der An-/Abwesenheit zu den verschiedenen Zeiten und Räumen
[/li][li] Abstrakt und Objektorientiert geschrieben - die Implementation für die verschiedenen Heizungssysteme sind in einem Interface gekapselt, dass sich das Script leicht an weitere Komponenten anpassen lässt. Bisher sind implementiert:
[/li][LIST]
[li] HomeMatic
[/li][li] HomeMatic SOLL/IST Vergleich (hier übernimmt IPS und nicht die Wandthermostate die Stellantriebssteuerung)
[/li][li] EinsWire-Wago Kombination
[/li][/ul]
[li] config der Steuerung direkt im PHP Code (siehe ScreenShot)
[/li][li] Variable Zeitprofile:
[/li][ul]
[li] Büro: Morgens (6 bis 12 Uhr) , Mittags (12 bis 18 Uhr) Abends (18 bis 22 Uhr)
[/li][li] Bad: Morgens (6 bis 7 Uhr), Tagsüber (7 bis 22 Uhr), spät Abends (22 bis 24 Uhr)
[/li][li] Abstellkammer: immer gleich
[/li][li] …
[/li][/ul]
[li] Raumprofile (Temperaturprofile)
[/li][ul]
[li] Büro Anwesend: 19 Grad
[/li][li] Büro Abwesend: 16 Grad (damit man es schnell wieder warm bekommt)
[/li][li] Abstellkammer: Immer 12 Grad
[/li][li] …
[/li][/ul]
[li] Standard-Anwesenheit
[/li][ul]
[li] Büro: nie Anwesend
[/li][li] Bad: Morgens und Abends Anwesend
[/li][li] Wohnzimmer: unter der Woche nie Anwesend, am Wochenende immer Anwesend
[/li][li] …
[/li][/ul]
[li] Auslesen von Fensterkontakten zum Absenken der Temperatur bei offenen oder gekippten Fenstern
[/li][li] 7 Tage im Vorraus Profile veränderbar (siehe ScreenShots)
[/li][/LIST]

Gruß,

ernie

Wiki-Tutorial: Ernies Heizungsscript

[UPDATE Revision 3.0 (26.02.2011)]

[ul]
[li] Heizungs-Interface HomeMaticHeizenJaNein hinzugefügt
[/li][li] Heizungs-Interface EinsWireWagoKomponenten hinzugefügt
[/li][li] Erstellung kurzer Namen für Heizplan-Variablen im iFront möglich
[/li][li] zwei verschiedene Variablen-Profile für die Nutzung des iFronts oder WebFronts
[/li][li] SOLL-IST Vergleich zum schalten der Raum Temperatur im Eins-Wire-Wago und HomeMaticHeizenJaNein Interface
[/li][li] Funktion checkAllObjectIDs() hinzugefügt, dass alle definierten Objekt-IDs auf deren Existenz überprüft
[/li][li] GETESTET mit IPS Version v2.30#1832
[/li][/ul]
[/UPDATE 3.0]

[UPDATE Revision 2.2 (09.02.2011)]

[ul]
[li]vergessene aktionsScripte-changeWebFrontVariable.ips.php in die .zip Datei eingefügt
[/li][/ul]
[/UPDATE 2.2]

[UPDATE Revision 2.1 (09.02.2011)]

[ul]
[li]include Fehler in createHeizplanOneWeek.php gefixt
[/li][li]vergessene debugger.php Klasse in die .zip Datei eingefügt
[/li][/ul]
[/UPDATE 2.1]

[UPDATE Revision 2.0 (02.12.2010)]
Nachdem die Bilder im Wiki nun stehen, habe ich endlich die Doku und die neue Version (Revision 2) online gestelllt :slight_smile: Wer fragen hat, einfach hier melden.
[/UPDATE 2.0]

2010.11.06 - ernies heizungssteuerung (version 0.02).zip (10.7 KB)

erniesHeizungssteuerung_revision02.zip (13 KB)

erniesHeizungssteuerung_revision_2.2_version0.09b.zip (16.4 KB)

erniesHeizungssteuerung_revision_3.0_version0.16.zip (19.8 KB)

Hallo ernie,

das sieht ja sehr vielversprechend aus - derzeit habe ich antis_fht umgestrickte Version auf Homematic am laufen, ist allerdings mit Konfiguration über Excel umständlich und kann nicht die finale Lösung sein. Leide rgibts noch nihcts so Richtiges was eine individuelle Heizungssteuerung möglich handhabbar macht - Allerdings Deine Screenshots sehen sehr vielverprechend aus!!! Hast Du eine kleine Doku um das ganze als Außenstehender zum laufen bekommen zu können?

Danke Dir schon mal
JF

Den Tag über hat das Script seine Anforderungen erfolgreich absolviert und die Heizung gestellt. Das Bad war morgens warm. Yeah! Auch eine spontane Anpassung direkt im WebFront wurde nach wenigen Minuten übernommen :slight_smile:

Ich schreibe in den nächsten Tagen eine Doku, was man alles einrichten und in IPS erstellen muss, damit das Script läuft.

Gruß,

ernie

Hallo ernie,

bist Du schon einen Schritt voran gekommen? Ich würde Deine Lösung sehr gern testen, bin mit der Excel Variante von anti zwar schon weiter als vorher, aber die Lösung ist doch etwas unelegant.

Danke Dir schon mal - ich will allerdings keienen Stress machen!!

Grüße

juhu…und ich wäre auch sehr gerne ein „beta tester“ :slight_smile:

hört sich ja toll an, was du da gemacht hast.

ich bin auch selbstständig und habe total verrückte zeiten jeden tag.

nichts, auf was man sich verlassen kann…da gibt jedes programm auf :slight_smile:

LG
Sascha

Hi,

bin gerade dabei, gleich noch einige Dinge mit reinzuschreinen.

[ul]
[li] ändern der An/Abwesenheitstemperatur per IPS-Variablen
[/li][li] Ansprechen von Fensterkontakten (Offen/Gekippt/Geschlossen)
[/li][li] auslagern der IPS-Objekt IDs in eine eigene Config, damit man nicht bei jedem Update die ObjektIDs in der config neu setzen muss
[/li][li] Für HomeMatic Firmware 2.0 eine „Erweiterten Heizungssteuerung“, damit die HomeMatic nicht bei der Themperatur überschwappt und unnötig Heizkosten produziert
[/li][li] Visualisieren der Daten in einem Multigraph pChart (Wunsch/Soll/Ist Temperatur + %Stellantrieb + Luftfeuchtigkeit)
[/li][/ul]

Bin dieses Wochenende ziemlich Busy mit Terminen, aber nächste Woche sollte das klappen.

Wenn ich es soweit grob fertig habe, dann schreibe ich ein Tutorial im Wiki.

Gruß,

ernie

Hallo ernie,

vielen Dank für Deinen tollen Ansatz der im Grunde fast exakt dem entspricht was auch ich vorhabe. Daher wäre ich Dir für eine Bereitstellung Deiner Skripte und für ein Tutorial sehr dankbar. :slight_smile:

Gruß
Tobias

Hallo,

ich habe nachdem ich schon die komplizierte Variante geschrieben hatte, doch noch mal auf die einfache gewechselt. Das Script kann jetzt einen Raum auf Wunsch-Temperatur einstellen oder „erweitert für HomeMatic v2.0 Firmware“ einen Raum auf Wunsch-Temperatur minus Delta-Temperatur setzen.

Ich teste es mal grundlegend bis zum Wochenende. Zumindest sollte es nicht groben Unfug treiben. Außerdem gibt es noch ein paar Kleinigkeiten, die noch zu fixen sind bevor es postbar ist (wenn man Abends bis zum Ende vom Zeitprofil heizt wird aktuell der Raum nicht mehr abgesenkt sondern die Nacht durch geheizt … Das ist irgendwie kontraproduktiv, wenn man ein System entwickelt, das Heizkosten sparen soll)

Dann poste ich es mal.

Den Multigraph gibt es allerdings bis dahin leider noch nicht :frowning: Der wird dann nachgereicht.

Im ersten Beitrag ist das neue Script (Revision 2) und der Aktuelle Wiki-Artikel verlinkt …

Viel Spaß damit,

ernie

Hallo ernie,

ich habe heute endlich mal etwas Zeit gehabt, mich mit Deinem Script auszuprobieren. Allerdings habe ich hier noch Fragen bzgl. der Einstellungen in der Datei config.class.ips.php

  • Welche ObjectIDs von welchen Raum-Soll Temperaturen sollen in diesem Abschnitt eingetragen werden?

// ### Definition der ObjectIDs, an denen die Raum-Soll-Temperaturen gelesen werden können

Danke + Viele Grüße bin gespannt wie das Script schlussendlich funzt!

Gunnar

Na das wird wohl die ID Deiner Variable z.B. Setpoint bei Homematic sein.

Hab das Script aber nicht im Gebrauch.

Hallo,

das ist korrekt.

Wie man in den Kommentaren sieht, gibt es eine Variable, wo die Temperatur gesetzt wird (das Thermostat selbst):

/[Heizung\HomeMatic Komponenten\Bad\Bad - Thermostat - Klima (CLIMATECONTROL_REGULATOR)]/

und eine Variable, wo die Temperatur gelesen wird (SET-POINT von dem Thermostat):

/[Heizung\HomeMatic Komponenten\Bad\Bad - Thermostat - Klima (CLIMATECONTROL_REGULATOR)\SETPOINT]/;

Gruß,

ernie

Hallo Ernie,

das sieht klasse aus. Ist die Bedienung automatisch im Webfront möglich bzw. muss ich dazu noch etwas beachten?
Wie ist das wenn ich nicht nur Homematic Geräte benutzen möchte … gibt es da dann noch etwas zu beachten?

edit
Im Wiki steht etwas davon das man die Scripte in einen eigenen Ordner verschieben sollte und das es im Editor machbar ist … wie komme ich an das Inputfenster auf dem Bild???

edit2
Und wofür ist diese Zeile:

namespace de\IPSymcon\ernie;

Gruß
Jens

Hallo,

die Bedienung im Web-Front geht eigentlich automatisch, da die Variablen automatisch mit dem richtigen Profil erstellt werden.

Dabei habe ich aber festgestellt, dass im Wiki noch nicht erwähnt ist, dass man das Variablen-Profil noch anlegen muss. Außerdem ist das AktionsScript zum ändern der An/Abwesenheit für das WebFront nicht im ZIP gewesen und wird direkt im CreateHeizplan.php angesprochen und nicht in der Config Klasse definiert.

Ich ändere ab und poste eine neue Version. Dann sollte auch klar sein, wie das Web-Front angesprochen wird.

################

Wenn Du andere Geräte als HomeMatic verwenden willst, müssen wir die entsprechenden Befehle im Interface anpasssen und eine neue Klasse für deine Heizungskomponenten erstellen.

An sich steht im Interface, wie genau die Heizungskomponenten angesprochen werden.

Es gibt 6 Funktionen:


interface HeizungsKomponenten {
    // Heizungs Funktionen
    public function __construct($varConfigObject);
    public function getSollTemperatur ($raumName);
    public function setSollTemperatur ($raumName,$sollTemperatur,$grund);
    public function getWindowStatus ($objectID);
    
    // Fenster Stati-Funktionen
    public function getOpendWindowValue();
    public function getTitedWindowValue();
    public function getClosedWindowValue();
}

An der Implementation der vorhandenen HomeMatic Komponenten sollte man sich gut orientieren können.

Die neue Klasse kann direkt unter der HomeMatic-Komponenten Klasse erstellt werden.

Welche Heizungs-Steuerung hast Du?

Gruß,

ernie

Zitat:
Zitat von Tetrapack
[i]Hallo Ernie,
edit
Im Wiki steht etwas davon das man die Scripte in einen eigenen Ordner verschieben sollte und das es im Editor machbar ist … wie komme ich an das Inputfenster auf dem Bild???

edit2
Und wofür ist diese Zeile:
namespace de\IPSymcon\ernie;

Gruß
Jens[/i]

Im Editor das dritte Icon von Links ist „Umbenennen“ … Ich habe auch etwas gebraucht, bis ich es gefunden hatte.

Namespaces wurde in PHP 5.3 eingeführt. Sie dienen dazu, dass verschiedene Frameworks, die eventuell gleiche Objekt- und Klassennamen verwenden nebeneinander existieren können.

Beispiel: es gibt normalerweise eine Date Klasse für Datumsfunktionen. Wenn jemand in seinem Framework eine eigene Date-Klasse geschrieben hat, kann man den Code nicht mehr compilieren, da es nicht zwei Klassen mit dem gleichen Namen geben kann. Namespaces entledigen sich dieses Problems, da man für sein eigenes Framework einen eigenen Namesraum bekommt.

Hier ist es eigentlich eher uninteressant, da alle Funktionen eindeutige Namen haben… Aber ich verwende Namespaces auch sonst …

Ich hatte schon mal grob durchgesehen ob ich blicke wie das läuft, aber irgendwie bin ich zwischendrin untergegangen :wink:
Reicht eigentlich das 2. Archiv (Revision 02) für die Benutzung oder muss das erste auch noch heruntergalden werden??

Ich nutze 1-Wire Geräte bzw. ne Wago für meine Stellantriebe. Homematic habe ich bisher nur einen einzigen und da werden auch nicht mehr viele dazu kommen :wink:

Die Ist/Sollwerte sind ja nicht so das Problem, oder? Bei nicht HM Geräten muss dann ja nur die passende Variable geändert werden … aber wie und wo setzt man dann den Befehl für auf/zu der Stellantriebe?

Was das Webfront an geht, da hab ich mich eh noch nicht weiter mit beschäftigt … bin ja eigentlich noch Verfechter des Dashboards :wink: … also ist das mit dem Variablenprofil auch noch nicht ganz so klar …

Gruß
Jens

Danke für den Hinweis mit dem Umbenennen!

Es wird immer auseichen (auch in zukünftigen Versionen), dass aktuelleste ZIP File herunterzuladen.

Bei HomeMatic kann man die Stellantriebe selbst nicht regeln. Man kann nur der Zentrale oder dem LAN-Adapter sagen, dass es 17° sein sollen. Die Stellantriebe werden dann von der Zentrale/LAN-Adapter eingestellt.

Ist das bei 1-Wire oder Wango anders? Kann man da die Stellantriebe selbst regeln?

Aktuell kann das Script keine direkte Regelung von Stellantrieben

Ich hatte noch keine Zeit mir ein Dashboard zu machen … Deshalb aktuell noch WebFront …

Wie gesagt, ich poste dazu noch die Erklärung im Wiki.

Also über Wago bzw. 1-Wire kann ich den Stellantrieben eben sagen 0 oder 1 … also auf oder zu :wink:
Ich weiß jetzt nicht wie einfach es möglich ist diese Funktion in dein Script zu integrieren: Zur Zeit setze ich eine Variable auf TRUE, wenn normal geheizt wird und auf FALSE wenn Zeit für die Absenktemperatur ist und dazu läuft dann minütlich ein Script, was Soll/Ist vergleicht und dementsprechend das Ventil öffnet oder schließt. Was mir fehlt ist so eine komplexe Verwaltung für die Wochentage …

Die Soll/Ist Werte für den Berieb sind ja egal, das ist HM ja sehr ähnlich … da mus ich ja nur die IDs anpassen aber die Variable Heizen/Absenk müßte dann über die Verwaltung deines Scripts mit gesetzt werden, um den Zeitraum festzulegen wann Heizen und wann Absenken ist … so hatte ich mir das zumindest gedacht!?

ich hoffe du verstehst was ich meine … :confused:

Gruß
Jens

Wenn ich es richtig verstanden habe, sollte das nicht so schwierig sein …

Heizen Ja/Nein kann man relativ einfach umsetzen mit einem Switch Heizvariante: Ja/Nein oder gezielte Temperatur setzen.

Für die richtige Temperatur bzw. das abstellen der Heizung könnte man eine 3. Variante der Heizungssteuerung schreiben. Bisher habe ich „KEINE Raum-Steuerungs-Technik“ und „SIMPLE-DELTA Raumsteuerungs Technik“ implementiert.

Sie sind in der config erklärt.

Mit einer 3. Variante „SOLL-IST Vergleichs-Raumsteuerungs-Technik“ sollte sich das mit wenig Aufwand realisieren lassen.

Du kannst die Variante entweder selbst in der Klasse trigger.class in der Funktion setRaumTemperatur() implementieren, oder ich schreibe das in den nächsten Tagen und Du testet es mit deinen Wange / 1-Wire Modulen.

Noch nicht verstanden habe ich, warum die IST-Werte egal sind? Führt das nicht abfragen von Ist-Werten nicht dazu, dass Du nur Heizen oder nicht Heizen hast, aber nicht eine bestimmte Temperatur einstellen kannst, bei der IPS die Heizung aus macht?

Äh … ich meinte damit nur, dass das Auslesen der IST-Werte ja schon existiert.
Bzw. meinte ich damit dass das Setzen der IST-Werte durch deine Verwaltungsfunktion schon geht … das wird natürlich benötigt, damit das Script dann auch die richtigen IST/SOLL Werte vergleicht!? Oder reden wir jetzt aneinander vorbei !?
Also im Prinzip passen deine beiden Varianten ja auch … SOLL/IST wird bei mir natürlich auch mit einem gewissen Delta berechnet, es geht mir nur um die Ansteuerung der Ventile.

Vielleicht habe ich die ganze Sache auch noch nicht richtig verstanden … bei HM sendest du einen Sollwert an den Thermostaten und der regelt dann die Stellantriebe im passenden Zeitraum auf die gewünschte Solltemp. (egal ob normal oder absenk)!?

Für meine Variante müßte es ähnlich klappen … nur wird der Sollwert dann in eine Variable geschrieben, auf die ein Script zugreift und in dem Script dann „regelt“ und eine weitere Variable auf TRUE oder FALSE setzt. Auf dieser Variable liegt dann ein Ereigis, das dann die Ventile öffnet oder schließt.
Das Regelscript muss minütlich ausgeführt werden (was bei HM ja vom Thermostaten erledigt wird)

Gruß
Jens

Korrekt

Die Frage ist nun, ob wir die einfache Variante schreiben, die nur die Variable setzt, die vom Regelscript ausgelesen wird, oder ob wir die Regelung mit in mein Heizungsscript packen.

Wie komplex und groß ist dein Regelungsscript?