Universelle Heizungssteuerung

ich glaube, dass wir bei Fensterkontakten gerade aufpassen und differenzieren müssen …

Es gibt zum einen den Fehler, dass die Fensterkontakte gar nicht bzw. falsch erkannt werden und zum anderen, dass der Wunsch gehegt wird, nicht nur eine Abwesend sondern auch noch eine Fenster-Auf Temperatur zu haben …

Die letzten Posts waren hier glaube ich nicht eindeutig dem jeweiligen Thema zuzuordnen …

Da hast du wohl recht. Ich habe beide Probleme momentan mit einem eigenen kleinen Hilfsskript und einer zusätzlichen Variable gelöst. Ich werde mal einen Screenshot machen, sofern ich heut Abend an meinen Pc komme.

Gruß Daniel

Gesendet von meinem A511 mit Tapatalk 2

Hallo,

ich habe das Heizungsscript schon einige Monate im Einsatz und hat auf Anhieb gut funktioniert - bis ungefähr zu dem Tag, wo ich das IPSLibrary installiert hatte. Kann auch ein Zufall sein…

Jedenfalls habe ich derzeit das Problem, dass der WT-IT-ST - Vergleich nur mehr bei Heizplanübergängen und nach Änderungen der Wunschtemperatur erfolgt. Die aktionsScripte-trigger.ips.php wird alle 5 Minuten aufgerufen, die Ist-Temperatur wird dabei aktualisiert, allerdings erfolgt kein Abgleich mehr zw WT-IT-SollTemperatur.

Wenn ich mich richtig erinnere, schien der Abgleich der einzelnen Räume im 5minuten-Rhytmus auch im Log auf, was jetzt nicht mehr der Fall ist.

Heizungsinterface: HomeMatic Heizen JA/NEIN

Ich hoffe, mein Problem ist verständlich ausgedrückt. :slight_smile:

Danke im Voraus für Denkanstöße!

Grüße

Günter

Hey,
Hier ist noch der versprochene Screenshot und das Skript für meine momentane Lösung mit den Fenster Kontakten und die Absenktemperatur.
Sorry für die Verspätung. Hat leider nicht früher geklappt dank der Firma.

Getriggert wird das ganze endweder durch die jeweiligen Fenster und durch veränderungen an der Anwesen Temperatur.

<?
//Sollwert für Anwesend der im Webfront eingestellt werden kann
$Anwesend = GetValueFloat (49618 /*[Heizungsteuerung\Heizplan\00-Temperatur Profile\Rechts\Wohn-, Esszimmer & Flur\Anwesend]*/);
//Temp. Sollwert der von dem Heizunsskript wieder Ausgelesen wird.
$Sollwert = 27419 /*[Heizungsteuerung\Heizplan\00-Temperatur Profile\Rechts\Wohn-, Esszimmer & Flur\Anwesend\Speicher]*/;

//Fenster die für die Absenkung zuständig sind.
$Fenster = array (
GetValueBoolean (56485 /*[Geräte\Erdgeschoss\Flur & Esszimmer\Fenster Flur\SENSOR]*/),
GetValueBoolean (11984 /*[Geräte\Erdgeschoss\Flur & Esszimmer\Fenster Esszimmer\SENSOR]*/),
);

//Auswertung des Array
If (in_array (true, $Fenster))
{
SetValueFloat($Sollwert, 6); //Speicher auf 6°C Setzten um Ventile zu Schließen
//echo 'auf';
}
else
{
SetValueFloat($Sollwert, $Anwesend); //Speicher auf Anwesend Temp. Setzten
//echo 'zu';
}
?>

Das Heizunsskript Liest dann wieder die Temperatur aus der Speicher Variable aus.

	
$this->heizungssteuerung['temperaturProfile']['Wohn & Esszimmer'] = array();
$this->heizungssteuerung['temperaturProfile']['Wohn & Esszimmer']['Anwesend'] 	= 27419 /*[Heizungsteuerung\Heizplan\00-Temperatur Profile\Rechts\Wohn-, Esszimmer & Flur\Anwesend\Speicher]*/; // cAOIDs ok
$this->heizungssteuerung['temperaturProfile']['Wohn & Esszimmer']['Abwesend'] 	= 43328 /*[Heizungsteuerung\Heizplan\00-Temperatur Profile\Rechts\Wohn-, Esszimmer & Flur\Abwesend]*/ ; // cAOIDs ok

Das ganze kann man sicherlich auch schöner Lösen, aber Momentan reicht das ganze für mich aus.

Gruß Daniel

Im LOG erscheint eigentlich nur was, wenn sich eine Temperatur oder ein Heiz-Status ändert. Ob es etwas mit der Library zu tun hat lässt sich schwer sagen. Sollte und dürfte aber eigentlich nicht.

Lässt Du mit der Library irgendwie deine HomeMatic Geräte lesen oder schreiben? Könnte eventuell die Library die HM-Thermostate beeinflusse.

Stehen die Thermostate auf „CENT?“

Wird die Temperatur auf 30° gestellt, wenn Du in innerhalb eines zeitslots die Anwesenheit von Abwesend auf Anwesend stellst?

Lasse nur mit Highcharts die Soll- und Ist-Temperaturen grafisch darstellen. Sonst hat eigentlich nichts mit den HM-Thermostaten zu tun

ja

nur wenn die Isttemperatur < Solltemperatur ist. Dann würde es eine Anpassung auslösen. Allerdings bleibt die Temperatur mindestens solange auf 30°, bis ein neuer Zeitslot beginnt. Erst dann folgt wieder die Prüfung, wie sich die IT-ST-WT verhalten.

Da einige Zeitslots recht lange sind, wird es ganz schön warm…

Moin :slight_smile:

Noch mal zu dem Thema mit den Links, die Raumbezogen zusammengestellt werden soll …

Da ja der Aufwand zu groß ist das Script komplett umzuschreiben, wie würde dann ein Schript aussehen, welches alle Variablen raussucht, die mit einem bestimmten Text anfangen und dann zu diesen variablen Links in einem bestimmten Ordner erstellt (vorher natürlich vorhandene Links löschen) ?
Dieses Script würde man dann täglich nach Erstellung des Heizplans laufen lassen und hätte somit zumindest die Möglichkeit immer die aktuellen Links zu verwenden?
Das Löschen der Links könnte man vielleicht vor Neuerstellung des Heizplans machen, damit keine fehlerhaften Links in der Zeit der Neuerstellung da sind.

Wie würde so etwas funktionieren bzw. geht das eleganter?

  1. getChildrenIDs(Heizplan)
    (wenn man den Ordner Wunschtemperaturen woanders hin packt, dann so weiter?)
  2. foreach … getchildrenIDs
  3. …foreach … GetName
  4. … if preg_match Name = xyz… createLink

Gruß
Jens

Hallo,

die Sache mit den Homematic Fenster/Türkontakte habe ich bei mir so gelöst:

In der Datei INTERFACES_Heizungskomponenten.ips.php habe ich die Zeile 100 und 229


public function getWindowStatus ($objectID) {return GetValueInteger($objectID);}

durch


	public function getWindowStatus ($objectID) {
	$var = IPS_GetVariable($objectID);
	if ($var['VariableValue']['ValueType']==0) {
	$val =  GetValueBoolean($objectID);
		if ($val) return 2;
		else return 0;
	}
	else {
	              return GetValueInteger($objectID);
		}
	}

ersetzt.

Ich prüfe einfach ob die ObjektID eine Integer oder Boolean Variable ist. Ist es ein Boolean - also ein Funk-Fensterkontakt - gebe ich bei geöffneten Fenster einfach 2 zurück ansonsten den Wert 0.

Bis jetzt konnte ich keine Probleme feststellen.

Gruß

Christian

Hallo,

Danke für die info, ich werde das mal so ausprobieren.

So, ich habe dann heute Nacht Langeweile gehabt und ein wenig ausprobiert … ist sicher nicht 100%ig optimiert, aber ich stells trotzdem mal rein:

<?

//Zeiten Räume
$BadID = 19616 /*[Webfronts\Heizung\Bad\Zeiten]*/;
$AnkleideID = 51029 /*[Webfronts\Heizung\Ankleide\Zeiten]*/;
$Diele = 41990 /*[Webfronts\Heizung\Diele\Zeiten]*/;
$Essen = 48757 /*[Webfronts\Heizung\Essen\Zeiten]*/;
$Katzen = 12710 /*[Webfronts\Heizung\Katzen\Zeiten]*/;
$Kueche = 40876 /*[Webfronts\Heizung\Küche\Zeiten]*/;
$Schlafen = 19827 /*[Webfronts\Heizung\Schlafen\Zeiten]*/;
$WC = 48275 /*[Webfronts\Heizung\WC\Zeiten]*/;
$Wohnen = 40123 /*[Webfronts\Heizung\Wohnen\Zeiten]*/;



//******************************************************************************
// Array
$ZeitenIDs = array(19616 => "Bad", 51029 => "Ankleide", 41990 => "Diele", 48757 => "Essen", 12710 => "Katzen", 40876 => "Küche", 19827 => "Schlafen", 48275 => "WC", 40123 => "Wohnen");


//ID`s der Unterordner Heizplan auslesen
$kategorie = IPS_GetChildrenIDs(24160 /*[Heizung Ernie\Heizplan]*/);


//Für jeden Unterordner
foreach($kategorie as $tage)
{

	      //Tag herauslösen
			$tag = IPS_GetName($tage);

			//Alle Zeitslots des Tages
	   	$raumID = IPS_GetChildrenIDs($tage);
	   	
			foreach($raumID as $zeit)
				{
				   $zeitslot = IPS_GetName($zeit);
			   	
			   	 if ($tag == "00-Wunsch Temperaturen")
			   	 	$raum = substr($zeitslot, 0, -11);
			   	 else

			   	
					$raum = substr($zeitslot, 0, -23);
				
					//finde $raum in Array und nehme Key -&gt; $Ordner
               $Ordner = array_search($raum, $ZeitenIDs);
               if(IPS_InstanceExists($Ordner))
                  {
						   $InstanzID = @IPS_GetInstanceIDByName($tag, $Ordner);
							if ($InstanzID === false)
								{
	    							echo "Instanz nicht gefunden!";
	    							$InstanceID = IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");  	//Dummyinstanz erstellen
	    							IPS_ApplyChanges($InstanceID);
	    							IPS_SetName($InstanceID, $tag); 																//Instance benennen
	    							IPS_SetParent($InstanceID, $Ordner);
	    						}

						   $TagID = @IPS_GetObjectIDByName($tag, $Ordner);

						   $LinkID = IPS_CreateLink();             	//Link anlegen
							IPS_SetName($LinkID, $zeitslot); 			//Link benennen
							IPS_SetLinkChildID($LinkID, $zeit);     	//Link verknüpfen

							IPS_SetParent($LinkID, $TagID);
						}
					else
					   {
					      echo "Zeiten Ordner existiert nicht!";
						}
				}

}
      

?&gt;

Heizplan.png

Und dazu das Löschscript:

<?

$RaumIDs = array(19616 /*[Webfronts\Heizung\Bad\Zeiten]*/, 51029, 41990 /*[Webfronts\Heizung\Diele\Zeiten]*/, 48757, 12710 /*[Webfronts\Heizung\Katzen\Zeiten]*/, 40876, 19827 /*[Webfronts\Heizung\Schlafen\Zeiten]*/, 48275, 40123 /*[Webfronts\Heizung\Wohnen\Zeiten]*/);

foreach($RaumIDs as $raum)
	{
				//ID`s der Unterordner Heizplan auslesen
				$tage = IPS_GetChildrenIDs($raum);

				//Für jeden Unterordner
				foreach($tage as $tag)
				{
				   if(IPS_GetName($raum) != "Wunsch Temperaturen")
				      {
						  	$links = IPS_GetChildrenIDs($tag);
							foreach($links as $link)
										{
											IPS_DeleteLink($link);
										}
						}
				}
	}
?&gt;

Hallo und guten Abend…

Ich habe da mal was versucht.
Das Erstellen des Heizplanes funktioniert schon ganz gut.

Hier mal ein Bild (ist nur ein Ausschnitt).

Jetzt mus die Abfrage von Heizungstrigger noch angepasst werden.

Wenn alles so klappt, wie ich es mir Vorstelle, braucht man dann in der config.class nur noch den Debuggerbereich.
Denn Heizplan und die Struktur habe ich in je eine class ausgelagert.
Wer das mal testen möchte, bitte melden. Dann lade ich gerne mal den momentanen Stand hoch.

Bin Dankbar für jeden Vorschlag.

???
Hatte ich auch schon … siehe letzter Beitrag !? :confused:

Hast du das in das vorhandene Script eingebaut oder extra Scripte angelegt??

Gruß
Jens

Bis jetzt habe ich 2 neue Scrippte erstellt und die createHeizplan.class.ips.php umgeschrieben.

Hier mal die neue createHeizplan.class.ips.php !!bitte nur zum anschauen!!!
Die funktioniert alleine nicht.
createHeizplan.class.ips.rar (1.44 KB)

Alles was du da beschrieben hast, geht damit.

  1. Links löschen.
  2. Variblen löschen
  3. Variablen anlegen.
  4. Links erstellen.
    alles vom Vortag. Dafür braucht man aber eine definierte Struktur. Dynamisch bekomme ich das nicht hin. ist wohl auch sehr aufwendig.
    Die Struktur ist im Bild zu sehen, wobei der Name (Bezeichnung) jeder für sich anpassen könnte.
    Hier noch der Entwurf von der class.struktur.ips.php
    createHeizplan.class.ips.rar (1.44 KB)

Ich habe bisher auch alles umgesetzt … es gibt quasi eine Kategorie für das Heizungswebfront, in der die Einzelnen Räume als Kategorie liegen (also separate Struktur für das Webfront, kein Ersatz für den Heizplan)

Für jeden Raum gibt es eine Instanz, unter der die Zeiten dann dargestellt werden. Diese ID benötigt man eigentlich nur und dann werden alle Tage incl. Wunschtemperatur darunter angelegt. Löschscript löscht dann alle Links wieder. Sind dann auch 2 einzelne Scripte.
Werde mein vorheriges Posting noch mal anpassen.

Das Ganze als Class bekomme ich nicht hin, aber es funktioniert … :slight_smile:

Gruß
Jens

Klasse, was ihr da so hinbekommen habt.

Währe schön, wenn ich das mal zur Verfügung stellen könntet und dazu etwas dokumentiert.

Hi … im Grunde steht bei mir alles dabei … wenn noch Fragen offen sind, dann fragen.

:wink:

Bin noch nicht so weit.
Mein Ziel, wie schon erwähnt, ein(ige) Script(e) der(die) alles automatisch erledigen.
Vom Anlegen der Kategorien bis hin zu den Variablen, HM Modulen und der Links fürs Webfront.
Werde wo noch einige Wochen brauchen, halt so wie es die Zeit zulässt.

Genau das habe ich schon fertig als Class. Muss ich alles noch bereinigen und optimieren und den Debugger einbinden.
Das wird noch ein Thema der Debugger.
Hat jemand von euch auch EinsWireWago Komponeten. Da kenne ich mich garnicht mit aus. Oder habt ihre alle nur Homematic?

Ohne es mangels Zeit genau geprüft zu haben, sollte die Eintragungen für die Fenstergriffe im Interface genau das lösen … Aber wenn es anders klappt, super!

Ich habe 1-wire Temp.Fühler und die Ventile werden von einer Wago geschaltet. HM habe ich nur am Handtuchheizkörper im Bad :wink:

Hallo,

Soweit ich das vom der Meldungs-Ausgabe her beurteilen kann, funktioniert das bei mir recht gut. Sobald Fenster-Kontakt „offen“ meldet, wird die Soll-Temperatur auf den „Abwesenheitswert“ gesetzt - mit der von HM üblichen Verzögerung von teilweise mehreren Minuten.