klimagerät temperaurabhängig ein- / auschalten, wahlweise auch über timer

hallo gemeinde,

als „copy and paste“ -user stoße ich nun endgültig an meine grenzen… :frowning:

habe mein ips nun 2 jahre, ein bisschen von dem standard-homematic krempel im einsatz und mich bisher daran erfreut, ein wenig damit rumspielen zu können.
jetzt habe ich zum ersten mal eine idee für einen sinnvollen einsatz, da scheitert es an meiner beschränktheit in bezug auf programmierung! :confused:

hätte gerne eine steuerung, die wahlweise

  • temperaturabhängig (temperatur erreicht einen wert X -> klimagerät schaltet sich ein -> klimagerät kühlt technikraum auf wert Y runter -> klimagerät schaltet sich aus) (wenn möglich mit im webfront veränderbaren soll-/grenzwerten für temp-X und temp-Y)

  • oder zeitgesteuert (temperatur erreicht einen wert X -> klimagerät schaltet sich ein -> nach ablauf eines über das webfront einstellbaren timers schaltet sich das klimagerät wieder aus)

ein kleines klimagerät im technikraum ein- und ausschaltet. verwendet werden dafür ein homematic funk-zwischenstecker und ein funk-wandthermostat.

der oberkracher wäre es noch, wenn man über eine art betriebsmodus zwischen „aus“, „hand-ein“, „temp-steuerung“ und „timer-steuerung“ auswählen könnte.

wäre über jegliche form von unterstützung dankbar, sei es inform von code-schnipseln, links zu ähnlichen steuerungen hier aus dem forum (habe selber über die forensuche leider nichts ähnliches oder vergleichbares gefunden), unterstützung bei den zu erstellenden variablen… ect…

da ich hier viel mitlese und von den teilweise genialen ideen und lösungen total begeistert bin, finde ich es schade, dass die meisten projekte, für laien wie mich, kaum durch fremde hilfe umsetzbar sind. deshalb traue ich mich selbst kaum an die integration der vom forum entwickelten scripte und funktionen.

falls also jemand erbarmen mit einem unwissenden hat und mir ein wenig bei der umsetzung unter die arme greifen könnte, würde ich mich riesig freuen und wäre dafür unendlich dankbar!

beste grüße aus dem sauerland und allen noch ein erfolgreiches und gesundes jahr,

sven

Vielleicht einfach mal im Handbuch blättern. Da findet man gute Beispiele um auf die Idee zu kommen, wie es funktionieren könnte oder hier.

Hallo Sven,

für eigene Lösungen muss man sich zwangsweise mit dem IPS-Handbuch und PHP http://selfphp.de/ beschäftigen.
Anfangs hatte ich die meisten Probleme mit der Frage „Wie macht man das?“.

Dein Vorhaben ist ein gutes Projekt, um in die Programmierung einzusteigen.
Wir können gern zusammen versuchen, uns da heranzutasten.
Man sollte erst mal mit der Temperatursteuerung anfangen.
Wichtig ist, vor der Umsetzung genau festzulegen, was man wirklich will.
Beispiel Temperatursteuerung: max. 23°

Gruß, Peter

hallo boui,
hallo peter,

vielen dank, dass ihr euch meiner erbarmt und mir anbietet, mich ein bisschen zu unterstützen. dank bouis hinweise auf die beispiele habe ich gestern abend nun schon folgendes hintereinander bekommen:

sieht zwar schon ganz nett aus, was mir aber natürlich jetzt noch fehlt, ist die steuerung hinter der ganzen geschichte.
kann die betreibsarten jetzt lustig und munter anklicken und auch die ein- und ausschalttemperatur anwählen, aber intelligenz steckt noch nicht da hinter…

und da stehe ich nun wieder mit meinen nicht vorhandenen talenten. :o

gruß, sven

Hallo Sven,

denk mal so in die Richtung:

Jedesmal wenn sich die IST-Temperatur ändert, dann muss ein Skript getriggert werden (Stichwort Ereignis). In dem Skript:

Gewünschte Ein Temp einlesen;
Gewünschte AUS Temp einlesen
dann
Wenn Automatik an
und wenn IST > Ein Temp -> Klima einschalten zum kühlen
sonst
Wenn IST = Aus Temp -> Klima aus

Ansonsten nix machen.

Stichwort: If … then

Vielleicht noch ein Nachtrag:

Ich würde nicht mit ein/aus Temp, sondern mit einer Solltemp arbeiten. Und x als Hysterese, sonst moduliert Deine Klimaanlage andauernd.
$x=1.5
Wenn IST > (Soll +x) dann Klima an
sonst
Wenn IST<(Soll-x) dann aus
sonst
nix

Damit definierst Du dann ein Temperaturband, in dem Deine Anlage läuft.

@wupperi

zur info: die klimaanlage ist von sich aus blöd und regelt nicht. ist also entweder an oder aus.
daher möchte ich schon gerne mit einer ein- und ausschalt-temperatur arbeiten.
das gerät hängt an einer homematic funksteckdose.

habe mich jetzt mal im scripten versucht… :rolleyes:

bitte nicht lachen, ist mein erster versuch. und die ersten beiden betriebsarten („aus“ und „hand ein“) funktionieren schon.


<?

$betiebsart = GetValue(43128 /*[Technikraum\Klimagerät\Klimasteuerung\Betriebsart]*/ );  // Aus -Hand Ein -Temp-Auto - Timer-Auto
$temp_ein = GetValueFloat(39998 /*[Technikraum\Klimagerät\Klimasteuerung\EIN-Temp.]*/);
$temp_aus = GetValueFloat(59136 /*[Technikraum\Klimagerät\Klimasteuerung\AUS-Temp.]*/);

if (($betiebsart == 0 )) //Aus

    {
     HM_WriteValueBoolean(37158 /*[Technikraum\Klimagerät]*/, "STATE", false); //Gerät ausschalten
       }


if ($betiebsart == 1 ) //Hand EIN

    {

     HM_WriteValueBoolean(37158 /*[Technikraum\Klimagerät]*/, "STATE", true); //Gerät ausschalten
         }
    
    
if ($betiebsart == 2 ) // Temp-Auto
	{

	if ((GetValueBoolean(12036 /*[Technikraum\Klimagerät\Status]*/) == False) and (GetValueFloat(43663 /*[Technikraum\Wandthermostat\IST-Temperatur]*/) >= $temp_ein))
	   {
	   SetValueBoolean(12036 /*[Technikraum\Klimagerät\Status]*/, True);
	   }

	if ((GetValueBoolean(12036 /*[Technikraum\Klimagerät\Status]*/) == True) and (GetValueFloat(43663 /*[Technikraum\Wandthermostat\IST-Temperatur]*/) >= $temp_aus))
	   {
	   SetValueBoolean(12036 /*[Technikraum\Klimagerät\Status]*/, False);
	   }
	}


?>

leider tut´s die temperatursteuerung noch nicht. ist bestimmt ein popeliger logikfehler, aber als absoluter noob sehe ich den wald vor lauter bäumen nicht! :confused:

\Status]*/) == False) and (GetValueFloat(43663 /*[Technikraum\Wandthermostat\IST-Temperatur]*/) >= $temp_ein)) 

Müsste da nicht ein <= rein ?

meine Logik mit Solltemperatur würde auch nur ein und ausschalten, aber sei’s drum.
Dein Skript deckt folgenden Fall nicht ab: Was ist wenn das gerät aus ist und monetan die IST-Temperatur >= $temp_aus ist?
Dann macht Dein Skript gar nichts.

Dadurch, dass Du eine Aus UND Einschaltgrenze hast, musst Du quasi 4 Zustände regeln. (An und Temp drüber, An und Temp drunter, Aus und Temp drüber und Aus und Temp drunter)

Hättest Du nur ne Soll Temp und würdest dagegen modulieren wärs einfacher. Entweder Temp ist drüber dann an, ansonsten aus.

@kronos: du hast recht, den vergleich habe ich beide male mit >= gemacht. aber das war noch nicht des rätsels lösung.

@wupperi: habe die anderen beiden möglichen fälle dann auch mal in´s script integriert. es passiert aber immer noch nichts. :confused:

Stell mal das aktuelle Skript rein. Und vor allem - wie wird das Skript getriggert?

das script sieht jetzt so aus:

 <?

$betiebsart = GetValue(43128 /*[Technikraum\Klimagerät\Klimasteuerung\Betriebsart]*/ );  // "Aus" "Hand Ein" "Temp-Auto"
$temp_ein = GetValueFloat(39998 /*[Technikraum\Klimagerät\Klimasteuerung\EIN-Temp.]*/);
$temp_aus = GetValueFloat(59136 /*[Technikraum\Klimagerät\Klimasteuerung\AUS-Temp.]*/);

if (($betiebsart == 0 )) // Aus

    {
     HM_WriteValueBoolean(37158 /*[Technikraum\Klimagerät]*/, "STATE", false); //Gerät ausschalten
     SetValueString(19338 /*[Technikraum\Klimagerät\Klimasteuerung\Schaltbefehl Aus]*/  ,$uhrzeit_aus);
    }


if ($betiebsart == 1 ) // Hand EIN

    {
     HM_WriteValueBoolean(37158 /*[Technikraum\Klimagerät]*/, "STATE", true); //Gerät ausschalten
     SetValueString(19338 /*[Technikraum\Klimagerät\Klimasteuerung\Schaltbefehl Aus]*/  ,$uhrzeit_ein);
    }
    
    
if ($betiebsart == 2 ) // Temp-Auto
	{

	if ((GetValueBoolean(12036 /*[Technikraum\Klimagerät\Status]*/) == False)
			and
				(GetValueFloat(43663 /*[Technikraum\Wandthermostat\IST-Temperatur]*/) >= $temp_ein))
	   {
	   SetValueBoolean(12036 /*[Technikraum\Klimagerät\Status]*/, True);
	   }
	   
	   if ((GetValueBoolean(12036 /*[Technikraum\Klimagerät\Status]*/) == False)
			and
				(GetValueFloat(43663 /*[Technikraum\Wandthermostat\IST-Temperatur]*/) >= $temp_aus))
	   {
	   SetValueBoolean(12036 /*[Technikraum\Klimagerät\Status]*/, True);
	   }
	   

	if ((GetValueBoolean(12036 /*[Technikraum\Klimagerät\Status]*/) == True)
			and
				(GetValueFloat(43663 /*[Technikraum\Wandthermostat\IST-Temperatur]*/) <= $temp_aus))
	   {
	   SetValueBoolean(12036 /*[Technikraum\Klimagerät\Status]*/, False);
	   }

		if ((GetValueBoolean(12036 /*[Technikraum\Klimagerät\Status]*/) == True)
			and
				(GetValueFloat(43663 /*[Technikraum\Wandthermostat\IST-Temperatur]*/) <= $temp_ein))
	   {
	   SetValueBoolean(12036 /*[Technikraum\Klimagerät\Status]*/, False);
	   }

	}

?>

getriggert wird das script über die variable „Betriebsart“, mit der ich halt den modus einstelle.
das action-script für die variable sieht so aus:

<?

SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
IPS_RunScript(11693 /*[Technikraum\Klimagerät\Klimasteuerung]*/);

?>

über den das bedienelement „Betriebsart“ kann ich das gerät auch in den „Hand Ein“ modus schalten und das klimagerät an. aus kann ich es auch wieder schalten. das script scheint also auf jeden fall schon mal was zu machen…
wenn ich ehrlich bin, bin ich sehr froh, dass ich schon so weit bin. ihr spezies werdet sehr wahrscheinlich die hände über dem kopf zusammenschlagen, oder??? :o

Das heisst dann ja wohl, dass das Skript immer nur dann ausgeführt wird wenn Du die Variable Betriebsart und nicht auch wenn sich die Temperatur in dem Raum änderst, korrekt?

Dann fehlt Dir der zweite Trigger über die Temperatur.

@kronos: hm, an den zweiten trigger über die temperatur habe ich gar nicht gedacht…
aber müsste nicht zumindest das klimagerät einmal angehen, wenn ich auf den modus „Temp-Auto“ stelle? dann wird das script doch ausgeführt!?!

ich glaube, es fehlt mir da irgendwie noch was an grundlegendem verständnis… :frowning:

Da stehts doch. Einfach ein Ereignis setzen auf Aenderung der Variable IST temp und Ausfuehrung des Skripts als Aktion.

hallo kronos, hallo wupperi,

noch mal vielen herzlichen dank für eure unterstützung und eure geduld.
aber das script noch zusätzlich über die variablenänderung der ist-temp zu triggern, hat noch keine besserung gebracht.

denke, dass hier noch hiergendwo der hase im pfeffer liegt…
vielleicht in der letzten if-abfrage??? :rolleyes:


if ($betiebsart == 2 ) // Temp-Auto
	{

	if ((GetValueBoolean(12036 /*[Technikraum\Klimagerät\Status]*/) == False)
			and
				(GetValueFloat(43663 /*[Technikraum\Wandthermostat\IST-Temperatur]*/) >= $temp_aus))
	   {
	   SetValueBoolean(12036 /*[Technikraum\Klimagerät\Status]*/, True);
	   }
	   
	if ((GetValueBoolean(12036 /*[Technikraum\Klimagerät\Status]*/) == False)
			and
				(GetValueFloat(43663 /*[Technikraum\Wandthermostat\IST-Temperatur]*/) >= $temp_ein))
	   {
	   SetValueBoolean(12036 /*[Technikraum\Klimagerät\Status]*/, True);
	   }
	   

	if ((GetValueBoolean(12036 /*[Technikraum\Klimagerät\Status]*/) == True)
			and
				(GetValueFloat(43663 /*[Technikraum\Wandthermostat\IST-Temperatur]*/) <= $temp_aus))
	   {
	   SetValueBoolean(12036 /*[Technikraum\Klimagerät\Status]*/, False);
	   }

	if ((GetValueBoolean(12036 /*[Technikraum\Klimagerät\Status]*/) == True)
			and
				(GetValueFloat(43663 /*[Technikraum\Wandthermostat\IST-Temperatur]*/) <= $temp_ein))
	   {
	   SetValueBoolean(12036 /*[Technikraum\Klimagerät\Status]*/, False);
	   }

	}

Hallo zusammen! :slight_smile:

du hast bei der Betriebsart Automatik nirgends den Befehl

HM_WriteValueBoolean(37158 /*[Technikraum\Klimagerät]*/, "STATE", false); //Gerät ausschalten

geschrieben. Weil ohne diesem wird auch kein Aktor geschalten. :slight_smile:

LG,
Christian.

Wow - wie blind kann man denn nur sein, dass wir das nicht gesehen haben. :eek:

Betriebsblindheit g
an die einfachsten Sachen denkt man ja gar nicht g

@ChristianS: SUPER!!! vielen dank, genau das war´s! :smiley:

@alle, die mir bis hier hin mit ihren hilfestellungen unter die arme gegriffen haben:
auch euch herzlichen dank! erst durch eure kleinen winks mit dem zaunpfahl in form von beispielen und denkanstößen, bin ich auf den lösungsansatz gekommen. :loveips: