Heizkörperthermostat Heizprogramme per WebFront einstellen

@galleto
Schau mal hier … (Zitat aus meinem Beitrag #135):

Ich habs im Beitrag #135 jetzt noch ein wenig farbiger gestaltet … :smiley:

Gruß

Swifty

Na das hatte ich schon gesehen. :smiley: Ich hab die Installation nach Anleitung gemäß Beitrag #1 gemacht. Mir war nur nicht klar, dass ich danach noch ein Update gemäß Beitrag #2 machen muss. Den Verweis „Update siehe unten“ habe ich ignoriert, weil ich ja keins machen wollte. Ich dachte bei einer völligen Neuinstallation wäre gleich alles aktuell. :wink:

EDIT: Um es auf den Punkt zu bringen - das ZIP-File in Beitrag #1 ist veraltet. :wink:

Grüße
galleto

Guten Morgen,

ich habe mal wieder ne Frage :stuck_out_tongue:

Ich habe ja mehrere Wandthermostate bzw. Heizkörperthermostate. Wenn sich das ausgewählte Wochenprofil ändern soll, soll das bei mir meistens bei allen Thermostaten passieren. Ich habe mir also gedacht, ich baue mir einen Globalen Änderungs-Knopf. Versucht habe ich es mit:

$Profil = 0 ;//0 = Normal, 1 = Frei, 2 = Abwesend
SetValueInteger (48276  /*[Scripte\Heizen\Prog_Räume\Kueche\HM_Praesenz_Profil_Auswahl_ID]*/, $Profil);
//5 Sek warten, dann nächsten Raum ändern usw.

Das führt auch dazu, dass sich die Präsenz Variable ändert. Die Änderung wird aber nicht an den Thermostaten weitergegeben. Nach weiterem nachforschen denke ich verstanden zu haben, dass die HM_Heizung_Raumsteuerung dafür verantwortlich ist, es aber nicht geht, weil der Sender nicht das Webfront sondern mein Script ist ?

Was muss ich machen, damit ich per Script die Präsenz ändern kann ?

Grüße

Julian

Hallo…

das Problem bei Deinem Lösungsansatz ist, dass das Script „HM_Heizung_Raumsteuerung“ durch eine Änderung der Variable „HM_Praesenz_Profil_Auswahl_ID“ gar nicht ausgelöst wird. … Es fehlt Einfach ein entsprechendes Ereignis und eine kleine Anpassung im Script. Probier mal folgendes aus:

  1. Füge beim Script „HM_Heizung_Raumsteuerung“ für jedes „anzusprechende“ Thermostat ein auslösendes Ereignis hinzu, welches bei einer Variablenänderung der jeweiligen Variable „HM_Praesenz_Profil_Auswahl_ID“ ausgelöst wird.

  2. Ersetze mal - probehalber - Dein Script „HM_Heizung_Raumsteuerung“ durch das Folgende (vorher das existierende Script mal sichern):

<?
include "HM_Heizung_Konfig.ips.php";
include "HM_Heizung_Funktionen.ips.php";
include "hmxml.inc.php";

//******************************************************************************

If ($_IPS['SENDER'] == "Execute")  // manuelles Ausführen zur Instalation
	{
	Foreach ($Zimmer as $key=> $Raum)
	      {
			If ($HM_Typ[$key]=="HM-CC-TC")
			   {
			   Raumsteuerung_HM_CC_TC($key);
			   }
			If ($HM_Typ[$key]=="HM-CC-RT-DN")
			   {
			   Raumsteuerung_HM_CC_RT_DN($key);
			   }
			If ($HM_Typ[$key]=="HM-TC-IT-WM-W-EU")
			   {
            Raumsteuerung_HM_TC_IT_WM_W_EU($key);
            }
			}
	}

//*****************************************************************************
IPS_LOGMESSAGE("Heizung",$_IPS['SENDER']);
If ($_IPS['SENDER'] != "Execute") // Ausführung erfolgt über WebFrond oder Tigger
	{
	$gefunden="";
	$HM_Raum=  IPS_GetObject(IPS_GetParent($_IPS['VARIABLE']))['ObjectName'];
	Foreach ($Zimmer as $key=> $Raum)
	  {
	  If ($Raum== $HM_Raum)
	     {
        $gefunden="OK";
		  break;
	     }
	  }

	If ($gefunden== "OK")
	   {
	   If ($HM_Typ[$key]=="HM-CC-TC")
			   {
			   Raumsteuerung_HM_CC_TC($key);
			   }
		If ($HM_Typ[$key]=="HM-CC-RT-DN")
			   {
			   Raumsteuerung_HM_CC_RT_DN($key);
			   }
		If ($HM_Typ[$key]=="HM-TC-IT-WM-W-EU")
			   {
			   Raumsteuerung_HM_TC_IT_WM_W_EU($key);
			   }

		/****************************************************************************
	   	                    Aktionen Auswerten
		*****************************************************************************/

		//**********************************
		// neues Ventil-Thermostat
		//**********************************
		IF ($HM_Typ[$key]=="HM-CC-RT-DN")
			{
			Switch ($_IPS['SENDER'])
				{

				Case 'WebFront':
				Case 'Variable':
	   		  // ****************************
	           // Aktion für Variable Modus
	           // ****************************
				  if (@$_IPS['VARIABLE'] == $HM_Modus_ID)
						{
						Switch ($_IPS['VALUE'])
							   {
							   case -1:
					      	    HM_WriteValueFloat($IPS_HM_DeviceID[$key],"MANU_MODE", 100);
					         	 break;
							   case 0:
						          HM_WriteValueBoolean($IPS_HM_DeviceID[$key],"AUTO_MODE", true);
							       break;
							   case 1:
							       HM_WriteValueFloat($IPS_HM_DeviceID[$key],"MANU_MODE", GetValue(IPS_GetObjectIDByIdent ("SET_TEMPERATURE", $IPS_HM_DeviceID[$key])));
							       break;
			   				case 3:
							       HM_WriteValueBoolean($IPS_HM_DeviceID[$key],"BOOST_MODE", true);
							       break;
								}

						SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
   			      break;
						}

				 //********************************************************************
	   	    // wird Temperatur im Webfrond geändert  ... nur bei neuem Thermostat
				 //********************************************************************

				 //if (@$_IPS['VARIABLE'] == IPS_GetObjectIDByIdent ("SET_TEMPERATURE", $IPS_HM_DeviceID[$key]))
				 //    {
				//	  HM_WriteValueFloat($IPS_HM_DeviceID[$key],"SET_TEMPERATURE", $_IPS['VALUE']);
				//	  break;
				//	  }

				 //**********************************
				 // Profil auswählen / setzen
				 //**********************************
					if ($_IPS['VARIABLE'] == $HM_Praesenz_Profil_Auswahl_ID)
					   {
						$tmp=GetValue($_IPS['VARIABLE']);
						SetValue($_IPS['VARIABLE'],$_IPS['VALUE']);
						$WP=unserialize(GetValue($HM_Heizung_Wochenprofil_ID));
						if (@array_key_exists(GetValueFormatted($HM_Praesenz_Profil_Auswahl_ID ),$WP ))
							{
							Set_Praesenz_Profil($Zimmer[$key], GetValueFormatted($HM_Praesenz_Profil_Auswahl_ID ));
							}
							else
							{
							SetValue($_IPS['VARIABLE'],$tmp);
							}
						break;
					   }

				 //**********************************
				 // Profil in IPS abspeichern
				 //**********************************
					if ($_IPS['VARIABLE'] == $HM_Wochenprofil_speichern_ID)
					   {
                  switch (GetValue($_IPS['VARIABLE']))
							 {
							 case 1:
							     SetValue($_IPS['VARIABLE'],0); // Speicherbutton sperren
							     break;

                      default:
							     SetValue($_IPS['VARIABLE'],1); // Speicherbutton freigeben
							 }
						 break;
					   }



		  		 //**********************************
	 			 // Aktion für Wochenprofil auslesen
  				 //**********************************
               if ($_IPS['VARIABLE'] == $HM_Wochenprofil_auslesen_ID)
					   {
					   $tempProfile = HMXML_getTempProfile($IPS_HM_DeviceID[$key],false, false);
					   SetValue($HM_Heizung_WochenProfil_Anzeige_html_ID, HM_WochenTempProfil_html(serialize($tempProfile)));

 					   $Profile=unserialize(GetValue($HM_Heizung_Wochenprofil_ID));
					   $gefunden="";
					   $i=0;
					   if (is_array($Profile))
					      {
							Foreach($Profile as $Profil)
							   {
						   	If ($Profil == $tempProfile)
									{
									$gefunden="OK";
									break;
									}
         		         $i++;
               			}

								If ($gefunden== "OK")
			                  {
      			            SetValue($HM_Praesenz_Profil_Auswahl_ID, $i);
         	   		      //IPS_LOGMESSAGE("HM","OK ....".$i);
									}
		         	         else
      		      	      {
            		   	   SetValue($HM_Praesenz_Profil_Auswahl_ID, -1); // das im HM gepseicherte Profil ist  unbekannt
			           			}
							 }
							else
							 {
							 SetValue($HM_Praesenz_Profil_Auswahl_ID, -1);  // IPS kennt (noch) keine Profile für das HM
							 }
						 
						 if (GetValue($HM_Wochenprofil_speichern_ID)==1)  /// ausgelesenes Profil wird gespeichert in Profilvariable "Normal"
   	                  {
								SetValue($HM_Praesenz_Profil_Auswahl_ID, 0);
								$tmp[GetValueFormatted($HM_Praesenz_Profil_Auswahl_ID )]=$tempProfile;
            	         Setvalue($HM_Heizung_Wochenprofil_ID, serialize($tmp));
            	         SetValue($HM_Wochenprofil_speichern_ID,0 ); // Speicherbutton sperren
               	      }
						 }
				break;


			 }
		  }


		//**********************************
		// neues WandThermostat
		//**********************************
		IF ($HM_Typ[$key]=="HM-TC-IT-WM-W-EU")
			{
			Switch ($_IPS['SENDER'])
				{

				Case 'WebFront':
				Case 'Variable':
				
     			  // ****************************
	           // Aktion für Variable Modus
	           // ****************************
				  if (@$_IPS['VARIABLE'] == $HM_Modus_ID)
						{
						Switch ($_IPS['VALUE'])
							   {
							   case -1:
					      	    HM_WriteValueFloat($IPS_HM_DeviceID[$key],"MANU_MODE", 100);
					         	 break;
							   case 0:
						          HM_WriteValueBoolean($IPS_HM_DeviceID[$key],"AUTO_MODE", true);
							       break;
							   case 1:
							       HM_WriteValueFloat($IPS_HM_DeviceID[$key],"MANU_MODE", GetValue(IPS_GetObjectIDByIdent ("SET_TEMPERATURE", $IPS_HM_DeviceID[$key])));
							       break;
			   				case 3:
							       HM_WriteValueBoolean($IPS_HM_DeviceID[$key],"BOOST_MODE", true);
							       break;
								}

						SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
   			      break;
						}

       		   //**********************************
 				   // Profil auswählen / setzen
				   //**********************************
					if ($_IPS['VARIABLE'] == $HM_Praesenz_Profil_Auswahl_ID)
					   {
						SetValue($_IPS['VARIABLE'],$_IPS['VALUE']);
						
                  HMXML_setParamInt($IPS_HM_DeviceID[$key],"WEEK_PROGRAM_POINTER", $_IPS['VALUE']);

						$tempProfile = HMXML_getTempProfile($IPS_HM_DeviceID[$key],false, false);
						//print_r($tempProfile);
						$P[0]=$tempProfile["P1"];
						$P[1]=$tempProfile["P2"];
						$P[2]=$tempProfile["P3"];
						SetValue($HM_Heizung_WochenProfil_Anzeige_html_ID, HM_WochenTempProfil_html(serialize($P[GetValue($HM_Praesenz_Profil_Auswahl_ID)])));


						$Profile=unserialize(GetValue($HM_Heizung_Wochenprofil_ID));
					   $gefunden=0;
					   $i=0;

						if (is_array($Profile))
					      {
							If ($Profile[array_keys($Profile)[0]] == $P[0] and
                         $Profile[array_keys($Profile)[1]] == $P[1] and
                         $Profile[array_keys($Profile)[2]] == $P[2])    // stimmen die in IPS gespeicherten Profile mit dem aus dem HM Device überein ?
                         
                         {
								 SetValue($HM_Wochenprofil_speichern_ID,0); // Speicherbutton sperren
								 }
								else
								 {
                         SetValue($HM_Wochenprofil_speichern_ID,1); // Speicherbutton freigeben
								 }
							 }
							else
							 {
							 SetValue($HM_Wochenprofil_speichern_ID,1); // Speicherbutton freigeben
							 }
						  break;
					    }

			    //**********************************
				 // Profil in IPS abspeichern
 				 //**********************************
				 if ($_IPS['VARIABLE'] == $HM_Wochenprofil_speichern_ID)
				     {
						if (GetValue($HM_Wochenprofil_speichern_ID)==1)  /// ist der Speicherbutton freigegeben ?
   	                  {
								$tempProfile = HMXML_getTempProfile($IPS_HM_DeviceID[$key],false, false);
								//print_r($tempProfile);
								$P[0]=$tempProfile["P1"];
								$P[1]=$tempProfile["P2"];
								$P[2]=$tempProfile["P3"];

                        $VP=IPS_GetVariable($HM_Praesenz_Profil_Auswahl_ID)['VariableCustomProfile'];
								$Profile=IPS_GetVariableProfile($VP)['Associations'];

								$PN[0]= $Profile[0]['Name'];
                        $PN[1]= $Profile[1]['Name'];
                        $PN[2]= $Profile[2]['Name'];
                        
                        $tmp[$PN[0]]=$P[0];
                        $tmp[$PN[1]]=$P[1];
                        $tmp[$PN[2]]=$P[2];
                        
            	         Setvalue($HM_Heizung_Wochenprofil_ID, serialize($tmp));
            	         SetValue($HM_Wochenprofil_speichern_ID,0 ); // Speicherbutton sperren
								}
 				     break;
				     }


  				}
			}

		//**********************************
		// altes Thermostat
		//**********************************
		IF ($HM_Typ[$key]=="HM-CC-TC")
			{
			Switch ($_IPS['SENDER'])
				{

		  	    Case 'WebFront':
				 Case 'Variable':
				
					//**********************************
					// Aktion für Variable Modus
					//**********************************
					if (@$_IPS['VARIABLE'] == $HM_Modus_ID)
						{
						IF ($_IPS['VALUE'] == -1)
			   			{
							HMXML_setTCMode($IPS_HM_DeviceID[$key], 0);
							HM_WriteValueFloat($IPS_HM_DeviceID[$key], "SETPOINT", 100.00);
							If (GetValue($_IPS['VARIABLE'])== 1)
					  			{
								SetValue($_IPS['VARIABLE'],-1);
								}
						   }
						  else
							{
							HMXML_setTCMode($IPS_HM_DeviceID[$key], $_IPS['VALUE']);
							// $IPS_DeviceID: IPS Instance ID
							// $nMode: INTEGER - Mode 0 = MANUAL, 1 = AUTO, 2=CENTRAL, 3 = PARTY
							if (HMXML_getTCMode($IPS_HM_DeviceID[$key])==$_IPS['VALUE'])
								{
								SetValue($_IPS['VARIABLE'],$_IPS['VALUE']);
								}
						 	}
	      	      break;
				  	   }
					//**********************************
					// Profil auswählen / setzen
					//**********************************
				  if ($_IPS['VARIABLE'] == $HM_Praesenz_Profil_Auswahl_ID)
					   {
						$tmp=GetValue($_IPS['VARIABLE']);
						SetValue($_IPS['VARIABLE'],$_IPS['VALUE']);
						$WP=unserialize(GetValue($HM_Heizung_Wochenprofil_ID));
						if (@array_key_exists(GetValueFormatted($HM_Praesenz_Profil_Auswahl_ID ),$WP ))							{
							Set_Praesenz_Profil($Zimmer[$key], GetValueFormatted($HM_Praesenz_Profil_Auswahl_ID ));
							}
							else
							{
							SetValue($_IPS['VARIABLE'],$tmp);
							}
						break;
					   }

				  //**********************************
				  // Profil in IPS abspeichern
				  //**********************************
					if ($_IPS['VARIABLE'] == $HM_Wochenprofil_speichern_ID)
					   {
                  switch (GetValue($_IPS['VARIABLE']))
							 {
							 case 1:
							     SetValue($_IPS['VARIABLE'],0); // Speicherbutton sperren
							     break;

                      default:
							     SetValue($_IPS['VARIABLE'],1); // Speicherbutton freigeben
							 }
						 break;
					   }


					//**********************************
					// Aktion für Wochenprofil auslesen
				   //**********************************
               if ($_IPS['VARIABLE'] == $HM_Wochenprofil_auslesen_ID)
					   {
					   $tempProfile = HMXML_getTempProfile($IPS_HM_DeviceID[$key],false, false);
					   SetValue($HM_Heizung_WochenProfil_Anzeige_html_ID, HM_WochenTempProfil_html(serialize($tempProfile)));

 					   $Profile=unserialize(GetValue($HM_Heizung_Wochenprofil_ID));
					   $gefunden="";
					   $i=0;
					   if (is_array($Profile))
					      {
							Foreach($Profile as $Profil)
							   {
						   	If ($Profil == $tempProfile)
									{
									$gefunden="OK";
									break;
									}
         		         $i++;
               			}

								If ($gefunden== "OK")
			                  {
      			            SetValue($HM_Praesenz_Profil_Auswahl_ID, $i);
         	   		      //IPS_LOGMESSAGE("HM","OK ....".$i);
									}
		         	         else
      		      	      {
            		   	   SetValue($HM_Praesenz_Profil_Auswahl_ID, -1); // das im HM gepseicherte Profil ist  unbekannt
			           			}
							 }
							else
							 {
							 SetValue($HM_Praesenz_Profil_Auswahl_ID, -1);  // IPS kennt (noch) keine Profile für das HM
							 }

						 if (GetValue($HM_Wochenprofil_speichern_ID)==1)  /// ausgelesenes Profil wird gespeichert in Profilvariable "Normal"
   	                  {
								SetValue($HM_Praesenz_Profil_Auswahl_ID, 0);
								$tmp[GetValueFormatted($HM_Praesenz_Profil_Auswahl_ID )]=$tempProfile;
            	         Setvalue($HM_Heizung_Wochenprofil_ID,serialize($tmp));
              	         SetValue($HM_Wochenprofil_speichern_ID,0 ); // Speicherbutton sperren
               	      }
						 }
				break;


				}
			 }
		}
	}




?>

… dann sollte Dein Code funktionieren … bei mir klappts :smiley:

Gruß

Swifty

Swifty’s Heizungssteuerung läuft bei mir in 11 Räumen einwandfrei. 10x Wandthermostat alt, seit heute neu mit noch einem Heizkörperthermostat. Ich bin einfach begeistert… und warte schon gespannt auf die Party/Urlaubsfunktion! 1000 Dank an Swifty!!!

Nun zu meiner Frage: Hat jemand von Euch statt der Funk-Fenstermelder verkabelte Fenster? Ich habe verkabelte Fenster und überall Schließerkontakt-Sensoren (HMW-WEN-SC12) drangehängt. Daher kennt HM und IPS zwar, wenn ein Fenster offen ist, aber an die Thermostate kann diese Info nicht angelernt werden. Falls noch jemand diese Konfiguration hat, würde mich brennend interessieren, wie Ihr das gelöst habt!

lg trubbert

Ich habe im Moment gar keine Fensterkontakte, habe aber vor mal welche zu haben. Und wenn, dann werden es bei mir auch Kabelgebundene werden.

Ich hatte mir schon mal gedanken über dieses Problem gemacht:
Könnte man nicht ein Script schreiben, dass bei ($Fenster == auf) Die Thermostate auf Modus = Manuell + Set_Temp = 10 °C setzt ?

Und dann je nach belieben nach einer Zeit oder bei Fenster wieder zu wieder auf Automatik zurückschalten. Falls du bei Fenster zu auch im Manu-Mode bist, müsste man die alte Temperatur noch zwischenspeichern.

Das ganze ist dann natürlich nicht Autark, wobei, wenn man die Erfahrungen mit den HM-Funk-Fensterkontakten aus dem Forum liest, mein IPS-Server läuft stabiler als es die HM-Funk-Fensterkontakte scheinbar tun.

Übrigens @Swifti, das mit dem Globalen setzen der Präsenz geht. Danke !
Bin gerade am Script optimieren, damit es sauber ist :wink: Wenn ich damit fertig bin probier ich mich mal an dieser Fenstergeschichte, wenns dann nicht schon zu spät ist :loveips:

Gruß

Julian

Es geht :wink: … Danke für deine Hilfe. Ich habe mir jetzt ein Script geschrieben, dass mir Global die Präsenz ändert. Ich hänge es mal an, falls noch jemand so etwas machen will. Ich muss allerdings sagen, dass ich nur Hobbymäßig programmieren kann, der Code wahrscheinlich recht „dirty“ ist. Einige Passagen und Funktionen sind auch aus Swifty’s Scripten geklaut.
Getestet auf meinem IPS #3361

  1. „HM_Heizung_Raumsteuerung“ aktualisieren aus #224
  2. In der Kategorie „Funktionen“ ein leeres Script „HM_Heizung_Global_Profil“ anlegen und folgenden Code rein kopieren.
  3. WFE Id einsetzen und einmal ausführen.

Edit: Habe das untenstehende Script noch mal überarbeitet, es kann jetzt auch Den Modus (Auto, Manu, usw.) Global ändern, allerdings nur bei den neuen Ventil- und Wand-thermostaten !

<?

include "HM_Heizung_Konfig.ips.php";
include "HM_Heizung_Funktionen.ips.php";

//------------------------------------------------
//Einmal manuell ausführen zur Installation und bei änderungen der Zimmer

$Intervall = 5; // Zeit in Sek. zwischen dem Setzen der änderungen pro Zimmer.
$WFE_Uebersicht = 36245 /*[Webinterface\Browser\Heizen\WFE_Links\Übersicht\Unten]*/; //Kategorie, in der die Links zum Globalen ändern des erstellt werden.

//------------------------------------------------

If ($_IPS['SENDER'] == "Execute")  // Instalation
    {
    $VarIdZaehler = CreateVariableByName($_IPS['SELF'], "Zaehler", 1, "", "Zaehler", 0);
    $VarIdAuswahl = CreateVariableByName($_IPS['SELF'], "Auswahl", 1, "", "Auswahl", 2);
    $VarIdMode = CreateVariableByName($_IPS['SELF'], "Mode", 1, "", "Mode", 3);
    $VarIdSender = CreateVariableByName($_IPS['SELF'], "Sender", 1, "", "Sender", 1);

    IPS_SetVariableCustomAction ( $VarIdAuswahl, $_IPS['SELF'] );
    IPS_SetVariableCustomProfile ( $VarIdAuswahl , "Praesenz" );
    SetLinkByName($WFE_Uebersicht, "Globale Profil-Auswahl", $VarIdAuswahl, 0);

    IPS_SetVariableCustomAction ( $VarIdMode, $_IPS['SELF'] );
    IPS_SetVariableCustomProfile ( $VarIdMode , "HM_Heizung_Steuerung_RT-DN" );
    SetLinkByName($WFE_Uebersicht, "Globale Modus-Auswahl", $VarIdMode, 1);

    Foreach ($Zimmer as $key=> $Raum)
          {
          		$PraesenzId = IPS_GetObjectIDByName( "HM_Praesenz_Profil_Auswahl_ID", IPS_GetObjectIDByName($Raum, IPS_GetParent(IPS_GetParent($_IPS['SELF']))));
          		SetTimerByName(@IPS_GetScriptIDByName("HM_Heizung_Raumsteuerung", (IPS_GetParent($_IPS['SELF']))), ("Tigger_Global_Praesenz".$Raum), $PraesenzId);
          }
    }

$VarIdSender = @IPS_GetObjectIDByName("Sender", $_IPS['SELF']);
$VarIdZaehler = @IPS_GetObjectIDByName("Zaehler", $_IPS['SELF']);
$VarIdMode = @IPS_GetObjectIDByName("Mode", $_IPS['SELF']);
$VarIdAuswahl = @IPS_GetObjectIDByName("Auswahl", $_IPS['SELF']);

$VarValZaehler = GetValueInteger ($VarIdZaehler);
$VarValSender = GetValueInteger ($VarIdSender);

if($_IPS['SENDER'] == "TimerEvent" && $VarValSender == $VarIdAuswahl)
	 {
	  		$VarValAuswahl = GetValueInteger ($VarIdAuswahl);
	  		SetValueInteger ( IPS_GetObjectIDByName( "HM_Praesenz_Profil_Auswahl_ID", IPS_GetObjectIDByName($Zimmer[($VarValZaehler+1)], IPS_GetParent(IPS_GetParent($_IPS['SELF'])))) , $VarValAuswahl);
	  		SetValueInteger ($VarIdZaehler, ($VarValZaehler+1));
	  		if(count ($IPS_HM_DeviceID) == ($VarValZaehler+1))
	  		{
	      		IPS_SetScriptTimer($_IPS['SELF'], 0);
	      		SetValueInteger ($VarIdSender, 0);
	  		}
	  }
if($_IPS['SENDER'] == "TimerEvent" && $VarValSender == $VarIdMode)
	 {
	 $VarValMode = GetValueInteger ($VarIdMode);
	 SetValueInteger ($VarIdZaehler, ($VarValZaehler+1));
	 Switch ($VarValMode)
                               {
                               case -1:
                                  HM_WriteValueFloat($IPS_HM_DeviceID[($VarValZaehler+1)],"MANU_MODE", 100);
                                  SetValueInteger (IPS_GetObjectIDByName( "Modus-SOLL", IPS_GetObjectIDByName($Zimmer[($VarValZaehler+1)], IPS_GetParent(IPS_GetParent($_IPS['SELF'])))) ,-1);
                                  break;
                               case 0:
                                  HM_WriteValueBoolean($IPS_HM_DeviceID[($VarValZaehler+1)],"AUTO_MODE", true);
                                  SetValueInteger (IPS_GetObjectIDByName( "Modus-SOLL", IPS_GetObjectIDByName($Zimmer[($VarValZaehler+1)], IPS_GetParent(IPS_GetParent($_IPS['SELF'])))) ,0);
                                   break;
                               case 1:
                                   HM_WriteValueFloat($IPS_HM_DeviceID[($VarValZaehler+1)],"MANU_MODE", GetValue(IPS_GetObjectIDByIdent ("SET_TEMPERATURE", $IPS_HM_DeviceID[($VarValZaehler+1)])));
                                   SetValueInteger (IPS_GetObjectIDByName( "Modus-SOLL", IPS_GetObjectIDByName($Zimmer[($VarValZaehler+1)], IPS_GetParent(IPS_GetParent($_IPS['SELF'])))) ,1);
                                   break;
                               case 3:
                                   HM_WriteValueBoolean($IPS_HM_DeviceID[($VarValZaehler+1)],"BOOST_MODE", true);
                                   SetValueInteger (IPS_GetObjectIDByName( "Modus-SOLL", IPS_GetObjectIDByName($Zimmer[($VarValZaehler+1)], IPS_GetParent(IPS_GetParent($_IPS['SELF'])))) ,3);
                                   break;
                                }
	 if(count ($IPS_HM_DeviceID) == ($VarValZaehler+1))
	  		{
	      		IPS_SetScriptTimer($_IPS['SELF'], 0);
	      		SetValueInteger ($VarIdSender, 0);
	  		}
	 }
if (($_IPS['VARIABLE'] == $VarIdMode || $_IPS['VARIABLE'] == $VarIdAuswahl) && $VarValSender == 0)
	  {
       SetValueInteger ($VarIdSender, $_IPS['VARIABLE']);
	 	 SetValueInteger ($VarIdZaehler, 0);
		 SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
    	 IPS_SetScriptTimer($_IPS['SELF'], $Intervall);
		}

?>
1 „Gefällt mir“

Hallo,
ich entschuldige mich schon mal im voraus, :slight_smile: Aber ich suche jetzt schon Stunden
Aber wo bekomme ich eine funktionierende xmlrpc.inc.php her.
Ich habe zwar eine gefunden, aber die bringt folgende Fehlermeldung

"Abort Processing during Fatal-Error: Assigning the return value of new by reference is deprecated
Error in Script E:\IP-Symcon\scripts\xmlrpc.inc.php on Line 583 "
Es wäre super wenn mir jemand helfen könnte.

Gruß
Harry

Hier ist die, die ich benutze.

Die Forensuche nach „xmlrpc.inc.php“ verweist über einen Umweg

auf diesen Link

Such- und Probierzeit 5 Minuten :rolleyes:

Gruß
Bruno

Hallo,
erstmal vielen Dank für die Hilfe.

@Inspra, die hab ich auch benutzt, die bringt aber die Fehlermeldung

@Bruno, genau die habe ich gesucht, aber leider nicht gefunden. Danke

Der Fehler ist weg, dafür habe ich einen neuen, Ich werde aber erstmal im Forum suchen ob ich da was finde :wink:

Danke und Gruß
Harry

Schreib lieber gleich was es ist, nicht dass der Abend draufgeht :wink: :smiley:

Ich muss doch noch das suchen üben. :smiley:
Aber Spaß bei Seite, ich werde erstmal versuchen mich selber durch zu kämpfen sonst kapiere ich das nie :wink::wink:
Trotzdem danke für das Angebot

Gruss
Harry

Gesendet von meinem iPad mit Tapatalk

Würde mich auch interessieren.

Gruß

Hallo,

was spricht denn gegen die Idee, dem Thermostat bei Fenster auf einfach Manu-Mode + Temp ( 5 °C z.B.) zu übergeben und bei Fenster zu dann wieder Automatik, oder wenn vorher nicht Automatik war halt den entsprechenden Modus + Temp ?

Grüße

Julian

Hallo Inspra,

dagegen spricht

(1) die Hoffnung, daß schon jemand dieses Problem gelöst haben könnte :slight_smile:
(2) daß es eleganter wäre, die bereits vorhandene Logik im FWT zu nutzen - falls das möglich ist. Sind ev die „virtuellen“ Kanäle der CCU dazu brauchbar dem FWT einen FunkFensterkontakt vorzugaukeln?
(3) meine Familie, der ich dann wieder erklären muß, daß sie frieren muß weil ich meine Programmierfähigkeiten überschätzt habe.

:slight_smile: Trotzdem Danke für den Tipp. Vermutlich werde ich es in der heizfreien Periode versuchen…

Hallo,

ich nutze seit einem halbem Jahr diese Art der Steuerung für meine Raum- und Heizkörperthermostate. Bis jetzt problem- und sorglos! Ich finde es genial!

@swifty
Ich möchte für die Anzeige der Wochenprofile die Farbe rot schon bei 21°C beginnen lassen. Ich habe mich dazu schon durch die einzelnen Skripte gesucht… mit wenig Erfolg.
Kannst du mir einen Tip geben wo und wie ich das einstellen kann?

Na dann schau mal in HM_Heizung_Funktionen

Hallo swifty,

nach langem Gefummel ist es mir gelungen, deine Skripte in mein Webfront einzuarbeiten.
Es läuft!

Mein Wunsch ist es aber nun, meine bisherige Heizungssteuerung zu modifizieren.
Der Hintergrund: ich arbeite im Schichtdienst und jeden Tag anders. Dafür habe ich mir ein Steuerungssystem gebaut, dass meine Dienste aus dem Google Kalender ausliest und meine Thermostate entsprechend per Skript zur richtigen Zeit mit der richtigen Temperatur versorgt.
Nach Umstellung auf die neuen Ventil- und Wandthermostate stiess ich dabei auf Probleme, weil sich diese blöden Dinger immer wieder auf ihre eingestellten Programme besinnen und meine vorgegebenen Temperaturen überschreiben.
Daher die Idee, täglich das notwendige Tagesprogramm (Tagesprofil) in die Thermostate zu laden, statt es von IPS abarbeiten zu lassen.

Mein Aufbaue: ich habe 7 Räume, davon 5 nur mit Ventilthermostaten und 2 mit Wandthermostaten und je 2 daran gekoppelten Ventilthermostaten.

Leider fehlen mir in mancher Hinsicht noch ein wenig Programmierkenntnisse.
Ich habe versucht, durch deine Skripte zu steigen, scheitere aber an der ein oder anderen Stelle.

<?

include "hmxml.inc.php";
include "HM_Heizung_Konfig.ips.php";

$dayofweek = strtoupper(date("l"));

$tempProfileNew = array();
$tempProfileNew[$dayofweek]['EndTimes'] = array("24:00");
$tempProfileNew[$dayofweek]['Values'] = array(5.0);

// Ventilthermostate
HMXML_setTempProfile($IPS_HM_DeviceID[1] /*[Räume\Arbeitszimmer Andreas\Thermostat\CLIMATECONTROL_RT_TRANSCEIVER]*/, $tempProfileNew);
HMXML_setTempProfile($IPS_HM_DeviceID[2] /*[Räume\Arbeitszimmer Sabine\Thermostat\CLIMATECONTROL_RT_TRANSCEIVER]*/, $tempProfileNew);
HMXML_setTempProfile($IPS_HM_DeviceID[3] /*[Räume\Küche\Thermostat\CLIMATECONTROL_RT_TRANSCEIVER]*/, $tempProfileNew);
HMXML_setTempProfile($IPS_HM_DeviceID[4] /*[Räume\Bad oben\Thermostat\CLIMATECONTROL_RT_TRANSCEIVER]*/, $tempProfileNew);
HMXML_setTempProfile($IPS_HM_DeviceID[5] /*[Räume\Bad unten\Thermostat\CLIMATECONTROL_RT_TRANSCEIVER]*/, $tempProfileNew);

// Wandthermostate
HMXML_setParamInt($IPS_HM_DeviceID[6] /*[Räume\Schlafzimmer\Thermostat\THERMALCONTROL_TRANSMIT]*/,"WEEK_PROGRAM_POINTER", 1);
HMXML_setTempProfile($IPS_HM_DeviceID[6] /*[Räume\Schlafzimmer\Thermostat\THERMALCONTROL_TRANSMIT]*/, $tempProfileNew);
HMXML_setParamInt($IPS_HM_DeviceID[7] /*[Räume\Wohnzimmer\Thermostat\THERMALCONTROL_TRANSMIT]*/,"WEEK_PROGRAM_POINTER", 0);
HMXML_setTempProfile($IPS_HM_DeviceID[7] /*[Räume\Wohnzimmer\Thermostat\THERMALCONTROL_TRANSMIT]*/, $tempProfileNew);

?>

Die „Fütterung“ der Ventilthermostate funktioniert dabei problemlos (hier der Einfachheit halber nur eine Temperatur für den ganzen Tag).

Dieses Verfahren jedoch scheitert bei den Wandthermostaten. Es erfolgt zwar keine Fehlermeldung, jedoch wird auch kein Programm gespeichert.
Was mache ich hier falsch? Wie erkläre ich den Wandthermostaten, in welches Wochenprofil ich den Tag speichern möchte?

LG,

Andreas

Ok, Kommando zurück, ich habs herausgefunden…

<?

include "hmxml.inc.php";
include "HM_Heizung_Konfig.ips.php";

$dayofweek = strtoupper(date("l"));

$tempProfileNew = array();
$tempProfileNew[$dayofweek]['EndTimes'] = array("24:00");
$tempProfileNew[$dayofweek]['Values'] = array(5.0);

// Ventilthermostate
HMXML_setTempProfile($IPS_HM_DeviceID[1], $tempProfileNew);
HMXML_setTempProfile($IPS_HM_DeviceID[2], $tempProfileNew);
HMXML_setTempProfile($IPS_HM_DeviceID[3], $tempProfileNew);
HMXML_setTempProfile($IPS_HM_DeviceID[4], $tempProfileNew);
HMXML_setTempProfile($IPS_HM_DeviceID[5], $tempProfileNew);

// Wandthermostate
HMXML_setTempProfile($IPS_HM_DeviceID[6], $tempProfileNew, 1);
HMXML_setTempProfile($IPS_HM_DeviceID[7], $tempProfileNew, 1);

?>