Homematic Thermostat

Hallo,

kann mir wer helfen?

Ich möchte gerne,
meine kompletten Heizkörperthermostate auf 19°C laufen lassen - momentan auf Manuell eingestellt.
und wenn ich das Haus verlasse möchte ich auf einen Schalter drücken so dass alle Thermostate auf 17° runterregeln und vielleicht dies für 8h lang.

Ich weiß leider nicht wie ich das Thema angehen soll, ist meine erste Skripterstellung.

Gruß und Danke Matthias

kein Ding ! musst nur die IDs anpassen:

$lock			=	getvalue(32096 /*[GERÄTE\HOMEMATIC\Eingang\Keymatic\HM-Sec-Key-S MEQ0043661:1\STATE]*/);
$jahreszeit =  getvalue(44890 /*[Astronomie\Jahreszeit]*/);

if(($lock == 0)and($jahreszeit==3))
{
    //IPS_SetScriptTimer($IPS_SELF, 60*10);
    echo "HEIZUNG WIRD RUNTERGEFAHREN";
    HM_WriteValueFloat(57988 /*[GERÄTE\HOMEMATIC\Badezimmer\HM-TC-IT-WM-W-EU MEQ0603558:2]*/,"SET_TEMPERATURE", 17.0);
    HM_WriteValueFloat(24329 /*[GERÄTE\HOMEMATIC\Wohnzimmer\Raumregler\HM-TC-IT-WM-W-EU MEQ0603225:2]*/,"SET_TEMPERATURE", 19.0);
    return;
}

sobald bei mir die Keymatic zuschliesst, wird das Skript getriggert und schaltet im Winter (3) die Thermos auf 17°
dafür kannst du aber jeden anderen Schalter nehmen

Vielen Dank,

gibt es eine Anleitung wie ich das Skript jetzt genau umsetze?

Ist es richtig das ich jetzt eine Variable mit Aktionskrip erstelle und dein Skript dort einfüge?

Gruß Matthias

SET_TEMPERATURE ist aber nicht konsequent, wenn man auch die internen Schaltpläne der Geräte nutzt, muss man auch den Modus setzen.
Das wäre dann MANU_MODE beim Verlassen.
Und zurück in den Automodus mit
HM_WriteValueBoolean(12345,‚AUTO_MODE‘,true);
Michael

brauch er nicht, da immer auf manu-mode

Das war doch nur ein Hinweis. Nur Manu-Mode fände ich auch inkonsequent. Besser Auto-Modus und nur für die Off-Zeit abschalten.

Gesendet von iPad mit Tapatalk

kommt drauf an…nutze bei mir auch nur den manuellen Modus, da ich in den einzelnen Räumen nicht sagen kann wann die benutzt werden…
z.B. nutzen wir das Wohnzimmer nur abends, aber auch nicht jeden Abend. daher alles auf Manuel 17°C und bei Benutzung manuell auf 21 hoch.

Hallo,

erstmal Vielen Dank für die ganze Hilfe.

Ich konnte mein Vorhaben mit diesem Skript umsetzen,
es funktioniert auch.

Aber…

Nach 30min ein paar mal Ausprobieren bekomme ich Fehlermeldungen.

Und mal funktionieren die Skripte und mal nicht…

Kann mir wer vielleicht helfen, ob ich die Skripte zu umständlich gestalte?

Dieses Skript soll die Heizung auf 17°C einstellen und nach 7Stunden wieder auf 19°C wieder hochfahren.

<?

//Thermostat Büro

if($_IPS['SENDER'] == "TimerEvent")
{
    //Aus Befehl
HM_WriteValueFloat(50015 /*[Hardware\Thermostate\Thermostat Büro]*/,"SET_TEMPERATURE", 19.0);
SetValueBoolean(58234 /*[Skripte\Thermostat\Abwesenheit\Schalter Abwesenheit Thermostate]*/, false);


    //Timer ausschalten
    IPS_SetScriptTimer($_IPS['SELF'], 0);
} else {
    //An Befehl
HM_WriteValueFloat(50015 /*[Hardware\Thermostate\Thermostat Büro]*/,"SET_TEMPERATURE", 17.0);

 
    //Timer anschalten
    IPS_SetScriptTimer($_IPS['SELF'], 25200);
	}

//Thermostat Wohnzimmer

if($_IPS['SENDER'] == "TimerEvent")
{
    //Aus Befehl
HM_WriteValueFloat(56231 /*[Hardware\Thermostate\Thermostat Wohnzimmer]*/,"SET_TEMPERATURE", 19.0);
SetValueBoolean(58234 /*[Skripte\Thermostat\Abwesenheit\Schalter Abwesenheit Thermostate]*/, false);


    //Timer ausschalten
    IPS_SetScriptTimer($_IPS['SELF'], 0);
} else {
    //An Befehl
HM_WriteValueFloat(56231 /*[Hardware\Thermostate\Thermostat Wohnzimmer]*/,"SET_TEMPERATURE", 17.0);

 
    //Timer anschalten
    IPS_SetScriptTimer($_IPS['SELF'], 25200);
	}

//Thermostat Küche

if($_IPS['SENDER'] == "TimerEvent")
{
    //Aus Befehl
HM_WriteValueFloat(10662 /*[Hardware\Thermostate\Thermostat Küche]*/,"SET_TEMPERATURE", 19.0);
SetValueBoolean(58234 /*[Skripte\Thermostat\Abwesenheit\Schalter Abwesenheit Thermostate]*/, false);


    //Timer ausschalten
	
    IPS_SetScriptTimer($_IPS['SELF'], 0);
} else {
    //An Befehl
HM_WriteValueFloat(10662 /*[Hardware\Thermostate\Thermostat Küche]*/,"SET_TEMPERATURE", 17.0);

 
    //Timer anschalten
    IPS_SetScriptTimer($_IPS['SELF'], 25200);
	}

//Thermostat Gäste WC

if($_IPS['SENDER'] == "TimerEvent")
{
    //Aus Befehl
HM_WriteValueFloat(46128 /*[Hardware\Thermostate\Thermostat Gäste WC]*/,"SET_TEMPERATURE", 19.0);
SetValueBoolean(58234 /*[Skripte\Thermostat\Abwesenheit\Schalter Abwesenheit Thermostate]*/, false);


    //Timer ausschalten
	
    IPS_SetScriptTimer($_IPS['SELF'], 0);
} else {
    //An Befehl
HM_WriteValueFloat(46128 /*[Hardware\Thermostate\Thermostat Gäste WC]*/,"SET_TEMPERATURE", 17.0);

 
    //Timer anschalten
    IPS_SetScriptTimer($_IPS['SELF'], 25200);
	}

//Thermostat Flur

if($_IPS['SENDER'] == "TimerEvent")
{
    //Aus Befehl
HM_WriteValueFloat(43624 /*[Hardware\Thermostate\Thermostat Flur]*/,"SET_TEMPERATURE", 19.0);
SetValueBoolean(58234 /*[Skripte\Thermostat\Abwesenheit\Schalter Abwesenheit Thermostate]*/, false);


    //Timer ausschalten
	
    IPS_SetScriptTimer($_IPS['SELF'], 0);
} else {
    //An Befehl
HM_WriteValueFloat(43624 /*[Hardware\Thermostate\Thermostat Flur]*/,"SET_TEMPERATURE", 17.0);

 
    //Timer anschalten
    IPS_SetScriptTimer($_IPS['SELF'], 25200);
	}

//Thermostat Hannah Zimmer

if($_IPS['SENDER'] == "TimerEvent")
{
    //Aus Befehl
HM_WriteValueFloat(59159 /*[Hardware\Thermostate\Thermostat Zimmer Hannah]*/,"SET_TEMPERATURE", 19.0);
SetValueBoolean(58234 /*[Skripte\Thermostat\Abwesenheit\Schalter Abwesenheit Thermostate]*/, false);


    //Timer ausschalten
	
    IPS_SetScriptTimer($_IPS['SELF'], 0);
} else {
    //An Befehl
HM_WriteValueFloat(59159 /*[Hardware\Thermostate\Thermostat Zimmer Hannah]*/,"SET_TEMPERATURE", 17.0);

 
    //Timer anschalten
    IPS_SetScriptTimer($_IPS['SELF'], 25200);
	}

//Thermostat Schlafzimmer

if($_IPS['SENDER'] == "TimerEvent")
{
    //Aus Befehl
HM_WriteValueFloat(46224 /*[Hardware\Thermostate\Thermostat Schlafzimmer]*/,"SET_TEMPERATURE", 19.0);
SetValueBoolean(58234 /*[Skripte\Thermostat\Abwesenheit\Schalter Abwesenheit Thermostate]*/, false);


    //Timer ausschalten
	
    IPS_SetScriptTimer($_IPS['SELF'], 0);
} else {
    //An Befehl
HM_WriteValueFloat(46224 /*[Hardware\Thermostate\Thermostat Schlafzimmer]*/,"SET_TEMPERATURE", 17.0);

 
    //Timer anschalten
    IPS_SetScriptTimer($_IPS['SELF'], 25200);
	}

//Thermostat Kinderzimmer 2 Nähzimmer

if($_IPS['SENDER'] == "TimerEvent")
{
    //Aus Befehl
HM_WriteValueFloat(47094 /*[Hardware\Thermostate\Thermostat Kinderzimmer 2 Nähzimmer]*/,"SET_TEMPERATURE", 19.0);
SetValueBoolean(58234 /*[Skripte\Thermostat\Abwesenheit\Schalter Abwesenheit Thermostate]*/, false);


    //Timer ausschalten
	
    IPS_SetScriptTimer($_IPS['SELF'], 0);
} else {
    //An Befehl
HM_WriteValueFloat(47094 /*[Hardware\Thermostate\Thermostat Kinderzimmer 2 Nähzimmer]*/,"SET_TEMPERATURE", 17.0);

 
    //Timer anschalten
    IPS_SetScriptTimer($_IPS['SELF'], 25200);
	}

//Thermostat Badezimmer

if($_IPS['SENDER'] == "TimerEvent")
{
    //Aus Befehl
HM_WriteValueFloat(21177 /*[Hardware\Thermostate\Thermostat Badezimmer]*/,"SET_TEMPERATURE", 19.0);
SetValueBoolean(58234 /*[Skripte\Thermostat\Abwesenheit\Schalter Abwesenheit Thermostate]*/, false);


    //Timer ausschalten
	
    IPS_SetScriptTimer($_IPS['SELF'], 0);
} else {
    //An Befehl
HM_WriteValueFloat(21177 /*[Hardware\Thermostate\Thermostat Badezimmer]*/,"SET_TEMPERATURE", 17.0);

 
    //Timer anschalten
    IPS_SetScriptTimer($_IPS['SELF'], 25200);
	}


?>

Diese Skript soll den Timer abstellen und die Heizung auf 19°C einstellen.

<?

IPS_SetScriptTimer($_IPS['SELF'], 0);

//Büro

HM_WriteValueFloat(50015 /*[Hardware\Thermostate\Thermostat Büro]*/,"SET_TEMPERATURE", 19.0);
SetValueBoolean(58234 /*[Skripte\Thermostat\Abwesenheit\Schalter Abwesenheit Thermostate]*/, false);



//Badezimmer

HM_WriteValueFloat(21177 /*[Hardware\Thermostate\Thermostat Badezimmer]*/,"SET_TEMPERATURE", 19.0);
SetValueBoolean(58234 /*[Skripte\Thermostat\Abwesenheit\Schalter Abwesenheit Thermostate]*/, false);

//Flur

HM_WriteValueFloat(43624 /*[Hardware\Thermostate\Thermostat Flur]*/,"SET_TEMPERATURE", 19.0);
SetValueBoolean(58234 /*[Skripte\Thermostat\Abwesenheit\Schalter Abwesenheit Thermostate]*/, false);


//Gäste WC

HM_WriteValueFloat(46128 /*[Hardware\Thermostate\Thermostat Gäste WC]*/,"SET_TEMPERATURE", 19.0);
SetValueBoolean(58234 /*[Skripte\Thermostat\Abwesenheit\Schalter Abwesenheit Thermostate]*/, false);

//Nähzimmer

HM_WriteValueFloat(47094 /*[Hardware\Thermostate\Thermostat Kinderzimmer 2 Nähzimmer]*/,"SET_TEMPERATURE", 19.0);
SetValueBoolean(58234 /*[Skripte\Thermostat\Abwesenheit\Schalter Abwesenheit Thermostate]*/, false);

//Küche

HM_WriteValueFloat(10662 /*[Hardware\Thermostate\Thermostat Küche]*/,"SET_TEMPERATURE", 19.0);
SetValueBoolean(58234 /*[Skripte\Thermostat\Abwesenheit\Schalter Abwesenheit Thermostate]*/, false);

//Schlafzimmer

HM_WriteValueFloat(46224 /*[Hardware\Thermostate\Thermostat Schlafzimmer]*/,"SET_TEMPERATURE", 19.0);
SetValueBoolean(58234 /*[Skripte\Thermostat\Abwesenheit\Schalter Abwesenheit Thermostate]*/, false);


//Wohnzimmer

HM_WriteValueFloat(56231 /*[Hardware\Thermostate\Thermostat Wohnzimmer]*/,"SET_TEMPERATURE", 19.0);
SetValueBoolean(58234 /*[Skripte\Thermostat\Abwesenheit\Schalter Abwesenheit Thermostate]*/, false);

//Hannah

HM_WriteValueFloat(59159 /*[Hardware\Thermostate\Thermostat Zimmer Hannah]*/,"SET_TEMPERATURE", 19.0);
SetValueBoolean(58234 /*[Skripte\Thermostat\Abwesenheit\Schalter Abwesenheit Thermostate]*/, false);


?>

Ich hoffe ihr könnt mir helfen.

Gruß Matthias

Ich bekomme Meldungen wie "Zu viele gleichzeitige Skripte, verwerfe Ausführung.

Gruß Matthias

Wenn ich das richtig verstanden habe besitzt einen Schalter den Du drückst wenn Du aus dem Haus gehst, dann ist es ausreichend ein Skript auf diesen Schalter zu legen. Die Räume die Du schalten willst sind auch immer gleich, es ändert sich ja lediglich die Temperatur.

Am einfachsten gehst das mit zwei Skripten. Ein Skript beinhaltet die eigentliche Schaltfunktion, das andere Skript sitzt auf dem Ereignis beim Drücken des Schalters. Den eigentlichen Wert übergibst Du an das zweite Skript mit IPS_RunScriptEx

Du hast also ein Skript das auf dem Schalter liegt, das triggert das andere Skript und übergibt jeweils den passenden Wert:


<?

if($_IPS['SENDER'] == "TimerEvent") 
{ 
    //Aus Befehl 
	IPS_RunScriptEx(12345 /*[Temp]*/, Array("Temp" => 19.0, "absence" => false));


    //Timer ausschalten 
    IPS_SetScriptTimer($_IPS['SELF'], 0); 
} else { 
    //An Befehl 
	IPS_RunScriptEx(12345 /*[Temp]*/, Array("Temp" => 17.0, "absence" => true));
  
    //Timer anschalten 
    IPS_SetScriptTimer($_IPS['SELF'], 25200); 
    } 

?>

Hier musst du 12345 durch die Objekt ID des zweiten Skripts ersetzten (STRG+O).

Das zweite Skript nimmt den Wert entgegen und schaltet dann die Geräte:


<?
$Temp = $_IPS['Temp'];
$absence = $_IPS['absence'];
//Büro 
HM_WriteValueFloat(50015 /*[Hardware\Thermostate\Thermostat Büro]*/,"SET_TEMPERATURE", $Temp); 

//Badezimmer 
HM_WriteValueFloat(21177 /*[Hardware\Thermostate\Thermostat Badezimmer]*/,"SET_TEMPERATURE", $Temp); 

//Flur 
HM_WriteValueFloat(43624 /*[Hardware\Thermostate\Thermostat Flur]*/,"SET_TEMPERATURE", $Temp); 

//Gäste WC 
HM_WriteValueFloat(46128 /*[Hardware\Thermostate\Thermostat Gäste WC]*/,"SET_TEMPERATURE", $Temp); 


//Nähzimmer 
HM_WriteValueFloat(47094 /*[Hardware\Thermostate\Thermostat Kinderzimmer 2 Nähzimmer]*/,"SET_TEMPERATURE", $Temp); 

//Küche 
HM_WriteValueFloat(10662 /*[Hardware\Thermostate\Thermostat Küche]*/,"SET_TEMPERATURE", $Temp); 

//Schlafzimmer 
HM_WriteValueFloat(46224 /*[Hardware\Thermostate\Thermostat Schlafzimmer]*/,"SET_TEMPERATURE", $Temp); 

//Wohnzimmer 
HM_WriteValueFloat(56231 /*[Hardware\Thermostate\Thermostat Wohnzimmer]*/,"SET_TEMPERATURE", $Temp); 

//Hannah 
HM_WriteValueFloat(59159 /*[Hardware\Thermostate\Thermostat Zimmer Hannah]*/,"SET_TEMPERATURE", $Temp); 

// Schalter setzten
SetValueBoolean(58234 /*[Skripte\Thermostat\Abwesenheit\Schalter Abwesenheit Thermostate]*/, $absence); 

?>

Ich hoffe das ist verständlich, ansonsten fragen bzw. dies mal so ausprobieren.

Hallo zusammen,

mit folgendem Script ändere ich die Solltemperatur beim Wandthermostat, das auslösende Ereignis ist die Änderung der Variablen 21696:



<?

$Fstatus 	= getvalue(21696 /*[Homematic\Wohnzimmer\WZ-Fenster-auf-zu\Status]*/);
// Solltemperatur feststellen
if ($Fstatus)
	{
	$Temp = 11.0;
	}
else
	{
	$Temp = 23.0;
	}
HM_WriteValueFloat(11756 /*[Homematic\Wohnzimmer\HM-TC-IT-WM-W-EU]*/, "SET_TEMPERATURE", $Temp);
?>

Ändere ich die Variable 21696 im Objektbaum manuell, ist alles in Ordnung. Die Rückmeldung lautet:

wird die auslösende Variable durch ein anderes Script geändert, nämlich durch einen verdeckten HMIP Fensterkontakt, dann ändert sich zwar auch die Variable 21696 und das Script wird ebenfalls aufgerufen, aber es läuft dann auch einen Fehler:

Beim Wandthermostat ist „Status emulierten“ ausgeschaltet.
IPS ist 4.4
64 bit Version
WIN7
11756 ist die Instanz des Wandthermostat.

Diese Vorgehensweise habe ich gewählt, weil HMIP und HM nicht kombinierbar sind, mir der verdeckte Türkontakt gefällt und ich mit einer zentralen Zimmervariablen die Möglichkeit habe, später mehrere Türkontakte zu berücksichtigen.

Hat jemand einen Tipp, warum das Script mal funktioniert und mal auf einen Fehler läuft?

… hat niemand einen Tipp für mich?