Heizkörperthermostat Heizprogramme per WebFront einstellen

Yepp - läuft wie früher

Danke

Nur zur Info - Die Config für Highcharts aus Post #89 läuft problemlos auf Highcharts V 3.0, wenn die letzten 4 Zeilen (ab ----> ) an die neuen Konventionen angepasst werden. Das alles auch auf Raspbian / IPS 4
Vielen Dank für alles
so long
Sven

oder eine angepasste hmxml.inc.php verwenden.

Der Befehl wurde zur 4.0 geändert. Man kann das zwar über die Kompatibilitätsfunktion machen, aber besser ist es die Befehle zu korrigieren.

Ich habe das mal für die Datei angepasst. Somit sollte die Funktion IPS 4.0 kompatibel sein.

<?
/* HMXML.inc.php v 02-2014

 * angepasst am 2013-11-19 wegen HM-CC-RT-DN by SWifty

 * angepasst am 2014-02-19:
	- in der funktion HMXML_getType() werden die einmal gefundenen HMDevices
	 jetzt in einem Cache gespeichert
   - HMXML_getTempProfile() erweitert um HM-TC-IT-WM-W-EU
   - HMXML_setTempProfile() erweitert um HM-TC-IT-WM-W-EU
   - HMXML_setParamInt() ... neu
   
  * angepasst am 24.07.2016 wegen HM_GetAddress
	 ausgetauscht gegen IPS_GetProperty($IPS_DeviceID, 'Address')
	 Folgeauswertung und Variablenzuordnung angepasst.

 * Basierend auf Zapp (2011) for the IPS Community
 * This  library  is  free  software;  you can redistribute it and/or modify it
 * under  the  terms  of the GNU Library General Public License as published by
 * the  Free  Software Foundation; either version 2 of the License, or (at your
 * option) any later version.
 *
 * This  library is distributed in the hope that it will be useful, but WITHOUT
 * ANY  WARRANTY;  without  even  the  implied  warranty  of MERCHANTABILITY or
 * FITNESS  FOR  A  PARTICULAR  PURPOSE.  See  the  GNU  Library General Public
 * License for more details.
 *
 * You  should  have  received a copy of the GNU Library General Public License
 * along  with  this  library;  if  not, write to the Free Software Foundation,
 */
//----------------------------------------------------------------------------
// USAGE:
// The HMXML library requires the xmlrpc library. Copy the library and
// xmlrpc.inc.php in the IPS script directory
// ---------------------------------------------------------------------------
//
// It should automatically detect the BidCos Service and create a XMLRPC client
// for every request.
// If you get an error message from HMXML_init or if you have performance
// problems, please add the following line at the start of your script:
//
// HMXML_init(YOUR_BIDCOS_SERVER_IP);
//
// All functions accept either the IPS Instance ID or the HM Address as parameter
//
// Examples:
//
// -- Get a full list of HM Devices
// $devices = HMXML_DevicesList();
// print_r($devices);
//
// -- Get a full list of HM Interfaces
// $interfaces = HMXML_InterfacesList();
// print_r($interfaces);
//
// -- Get all Parameters for a given HM device using the IPS instance ID
// $HM_Device_Parameters = HMXML_getParamSet($IPS_Instance_ID, 2);
// -- Get the Parameter Description
// $HM_Device_Parameters_Desc = HMXML_getParamSetDesc($IPS_Instance_ID, 2);
// -- Get one specific Parameter
// $TC_Mode = HMXML_getParamSet($IPS_Instance_ID, 2, 'MODE_TEMPERATUR_REGULATOR');
// -- The Mode of a HM Thermostat can also be retrived with
// HMXML_getTCMode($IPS_DeviceID);
// -- To set the Mode
// HMXML_setTCMode($IPS_DeviceID, $Mode);
// where 0 = MANUAL; 1 = AUTO; 2=CENTRAL; 3 = PARTY
//
// -- Get the Tempareature Profile of a Thermostat in a better Human-readable array
// $tempProfile = HMXML_getTempProfile($IPS_Instance_ID);
// print_r($tempProfile);
// -- Setting a temperature for a given Day / Profile Index
// Note: The transfer of data to the TC might take some time (few minutes).
// $tempProfileNew = array();
// $tempProfileNew['MONDAY']['EndTimes'] = array("06:30","08:30","16:30","22:00","24:00");
// $tempProfileNew['MONDAY']['Values'] = array(17.0,20.0,17.0,19.5,17.0);
// HMXML_setTempProfile(29146 /*[Objekt #29146 existiert nicht]*/, $tempProfileNew);
//
// Remarks:

// Version string.
//define("HMXML_VERSION", "0.2");
require "./xmlrpc.inc.php" ;

//Init XMLRPC client with address to speed up process
HMXML_init("192.168.114.160", false, 2001);
date_default_timezone_set('UTC'); //* wichtig, da sonst am Tag der Zeitumstellung WZ/SZ Konflikte auftreten.  Erg‰nt von Swifty am 09.04.2013



//
// *************************************************************************
//   HMXML functions
// *************************************************************************

function HMXML_init($BidCosServiceIP, $debug = false, $port = "2001") {

	// $BidCosServiceIP: The IP Address of the BidCos Server. If not provided or false, will be detected via IPS

	global $xml_client;

	if ($xml_client !== false) {
		if ($BidCosServiceIP === false) { // We did not provide an IP for the BidCos Service
		   $nbOfHMSockets = 0;
   		foreach ( IPS_GetInstanceListByModuleID("{A151ECE9-D733-4FB9-AA15-7F7DD10C58AF}") as $id ) // HomeMatic Socket
			{
			   if (($nbOfHMSockets++) > 1) {
			      die ("Error: HMXML_init() More than one HM Socket found. Please init XMLRPC Socket manually with HMXML_init(BidCos_Service_IP). <br>
");
			   }
				$HMSocketObject = IPS_GetObject($id);
				//print_r($HMSocketObject);
				if ($HMSocketObject['ObjectSummary'] == "localhost") { // Don't know why the address is in ObjectSummary...
					$IP = gethostbyname('localhost'); // Not an efficient method. Replace if needed. $_SERVER['SERVER_ADDR'] not working
					$BidCosServiceIP = $IP;
				}
				else $BidCosServiceIP = $HMSocketObject['ObjectSummary'];
				if ($debug) echo"Debug: Found HomeMatic Socket (BidCos Service) at IP $BidCosServiceIP
";
			}
	   }
		$xml_client = new xmlrpc_client("http://".$BidCosServiceIP.":".$port);
   	// XMLRPC Debug values: 0, 1 and 2 are supported (2 = echo sent msg too, before received response)
   	if ($debug !== false) $xml_client->setDebug(2);
   	else $xml_client->setDebug(0);

   	if ($xml_client !== false) return true;
   	else return false;

	}

	// Instance of XML_Client already exists
	return false;
}

function HMXML_DevicesList() {

	$request = new xmlrpcmsg('listDevices');
	$devices = HMXML_send($request);

	return $devices;
}

function HMXML_InterfacesList() {

	$request = new xmlrpcmsg('listBidcosInterfaces');
  	$devices = HMXML_send($request);

	return $devices;
}

// Gets the Type of HM device (HM terminology)
function HMXML_getType($IPS_DeviceID) {

	//HM_Devices cachen

	$hmxml_id=@IPS_GetScriptIDByFile("hmxml.inc.php");

	$HM_Cache_ID = @IPS_GetVariableIDByName("HM_Device_Cache", $hmxml_id);
   if($HM_Cache_ID === false)
      {
      $HM_Cache_ID = IPS_CreateVariable(3);
      IPS_SetParent($HM_Cache_ID, $hmxml_id);
      IPS_SetName($HM_Cache_ID, "HM_Device_Cache");
	   IPS_SetPosition ($HM_Cache_ID, 2);
		}
	$HM_Cache=unserialize(GetValue($HM_Cache_ID));


   // $IPS_DeviceID: IPS Instance ID

	//$HMAddressFull = explode(":", HM_GetAddress($IPS_DeviceID));
	//$HMAddress = $HMAddressFull[0];
   //$HMAddressChannel = $HMAddressFull[1];

	$HMAddressFull = IPS_GetProperty($IPS_DeviceID, 'Address');
	$HMAddress = substr($HMAddressFull,0,10);
	$HMAddressCHannel = substr($HMAddressFull,11,1);


   If (array_key_exists($HMAddress, $HM_Cache) == false)
		{

	   $devices = HMXML_DevicesList();

		//print_r ($devices);
   	$type = false;
		foreach($devices as $device)
			 {
		    if (strpos($device['ADDRESS'], $HMAddress) !== false)
				 {
				 $type = $device['TYPE'];
				 $HM_Cache[$HMAddress]=$type;
				 SetValue($HM_Cache_ID,serialize($HM_Cache));
				 break;  // We stop at the first one we find
				 }
			 }
		}
	 else
	   {
	   $type=$HM_Cache[$HMAddress];
		}
	return $type;
}

// Gets the Temperature Profile of a Thermostat for a given day or all days
// Returns the result in an array

function HMXML_getTempProfile($IPS_DeviceID, $day = false, $echo = false, $WT_Profil=-1)
 {
   // $IPS_DeviceID: IPS Instance ID
	// $day: STRING - Name of day in english (not case-sensitive) or false for all days
	// $echo: BOOL - if true, the Temperature profiles is output in readable format with time values
	// $WT_Profil nur f¸r HM-TC-IT-WM-W-EU; G¸ltige Werte 1,2,3; bei -1 werden alle Profile (1-3) zur¸ckgegeben

   //$HMAddressFull 	= explode(":", HM_GetAddress($IPS_DeviceID));
   //$HMAddress 			= $HMAddressFull[0];
   //$HMAddressChannel = $HMAddressFull[1];

	$HMAddressFull = IPS_GetProperty($IPS_DeviceID, 'Address');
	$HMAddress = substr($HMAddressFull,0,10);
	$HMAddressCHannel = substr($HMAddressFull,11,1);

	$dayArray = array("MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY");
	$tempArray = array();

	if ($day != false)
		{
	   if (!in_array($day, $dayArray)) die("Error: Unknown Day parameter in function HMXML_getTempProfile<br>
"); // HMXML_SetTempProfile
	   $dayArray = array($day);
		}
	$type = HMXML_getType($IPS_DeviceID);


   if ($type == "HM-CC-TC")
		{
      $params = HMXML_getParamSet($IPS_DeviceID, $HMAddressChannel);
		foreach($dayArray as $day)
			{
      	//if ($echo) echo "$day
";
      	$thisEndTimesArray 	= array();
      	$thisTempValuesArray	= array();

			//<Erg‰nzung von Ralla
			$timePrevious = "00:00";
			//Erg‰nzung von Ralla>
       	for ($index = 1; $index <= 24; $index++)
			 	{
         	$keyTemp = "TEMPERATUR_".strtoupper($day)."_".$index;
         	$keyTO 	= "TIMEOUT_".strtoupper($day)."_".$index;
         	$Temp 	= $params[$keyTemp];
         	$TO 		= $params[$keyTO];
       		$Time = date('H:i', mktime(0, $TO)); // $timePassed + TO

         	if ($TO >= 1440) $Time = "24:00";
         	//if ($echo) echo "$index: $timePrevious -> $Time = $Temp 8C
"; //if ($echo) echo "$index: $timePrevious -> $Time = $Temp 8C
";
				//<Erg‰nzung von Ralla
				$timePrevious = $Time;
				//Erg‰nzung von Ralla>
         	array_push($thisEndTimesArray,	$Time);
            array_push($thisTempValuesArray,	$Temp);
         	if ($TO >= 1440) break;
	   		}
  			 $tempArray[$day]['EndTimes'] 	= $thisEndTimesArray;
	   	 $tempArray[$day]['Values'] 	= $thisTempValuesArray;
			 }
			 return $tempArray;
   	}
  //* eigef¸gt von Swifty am ******************************

   if ($type == "HM-CC-RT-DN")
	   {
      $params = HMXML_getParamSet($IPS_DeviceID,"");
      foreach($dayArray as $day)
		   {
      	if ($echo) echo "$day
";
      	$thisEndTimesArray 	= array();
      	$thisTempValuesArray	= array();

			//<Erg‰nzung von Ralla
			$timePrevious = "00:00";
			//Erg‰nzung von Ralla>
       	for ($index = 1; $index <= 13; $index++)
			   {
         	$keyTemp = "TEMPERATURE_".strtoupper($day)."_".$index;
         	$keyTO 	= "ENDTIME_".strtoupper($day)."_".$index;
         	$Temp 	= $params[$keyTemp];
         	$TO 		= $params[$keyTO];
       		$Time = date('H:i', mktime(0, $TO)); // $timePassed + TO

         	if ($TO >= 1440) $Time = "24:00";
         	if ($echo) echo "$index: $timePrevious -> $Time = $Temp 8C
"; //if ($echo) echo "$index: $timePrevious -> $Time = $Temp 8C
";
				//<Erg‰nzung von Ralla
				$timePrevious = $Time;
				//Erg‰nzung von Ralla>
         	array_push($thisEndTimesArray,	$Time);
            array_push($thisTempValuesArray,	$Temp);
         	if ($TO >= 1440) break;
   		   }
   		$tempArray[$day]['EndTimes'] 	= $thisEndTimesArray;
   		$tempArray[$day]['Values'] 	= $thisTempValuesArray;
		   }
		   return $tempArray;
       }

   if ($type == "HM-TC-IT-WM-W-EU")
	   {
      $params = HMXML_getParamSet($IPS_DeviceID,"");

  		For ($P=1; $P<=3; $P++)
		   {
         if ($echo) echo "WochenProgramm - P$P
";
			foreach($dayArray as $day)
			   {
   	   	if ($echo) echo "$day
";
      		$thisEndTimesArray 	= array();
      		$thisTempValuesArray	= array();

				//<Erg‰nzung von Ralla
				$timePrevious = "00:00";
				//Erg‰nzung von Ralla>
       		for ($index = 1; $index <= 13; $index++)
				   {
   	      	$keyTemp = "P". $P ."_TEMPERATURE_".strtoupper($day)."_".$index;
      	   	$keyTO 	= "P". $P ."_ENDTIME_".strtoupper($day)."_".$index;


					if (array_key_exists($keyTemp, $params))
					 	{
	         		$Temp 	= $params[$keyTemp];
   	      		$TO 		= $params[$keyTO];
   	      		}
                  //* notwendig da Firmeware beim LAN-Adapter abweicht und beim Profil 1 dort das Pr‰fix "P1_" fehlt.
						else
						{
   	      		$keyTemp = "TEMPERATURE_".strtoupper($day)."_".$index;
      	   		$keyTO 	= "ENDTIME_".strtoupper($day)."_".$index;
	         		$Temp 	= $params[$keyTemp];
   	      		$TO 		= $params[$keyTO];
   	      		}
						//*******************************************************************


	       		$Time = date('H:i', mktime(0, $TO)); // $timePassed + TO

	         	if ($TO >= 1440) $Time = "24:00";
   	      	if ($echo) echo "$index: $timePrevious -> $Time = $Temp 8C
"; //if ($echo) echo "$index: $timePrevious -> $Time = $Temp 8C
";
					//<Erg‰nzung von Ralla
					$timePrevious = $Time;
					//Erg‰nzung von Ralla>
	         	array_push($thisEndTimesArray,	$Time);
   	         array_push($thisTempValuesArray,	$Temp);
      	   	if ($TO >= 1440) break;
   			   }
	   		$tempArray["P".$P][$day]['EndTimes'] 	= $thisEndTimesArray;
   			$tempArray["P".$P][$day]['Values'] 	= $thisTempValuesArray;
			   }
	      }

      	If ($WT_Profil>0 and $WT_Profil<=3)
		   	{
				return $tempArray["P".$WT_Profil];
			   }
			   else
		   	{
			   return $tempArray;
			   }

   	}

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


  If ($type != "HM-CC-RT-DN" and $type != "HM-CC-TC" and $type != "HM-TC-IT-WM-W-EU")
     {
     die("Error: HMXML_getTempProfile() Device $HMAddress ($IPS_DeviceID) is not of Type HM-CC-TC OR HM-CC-RT-DN OR HM-TC-IT-WM-W-EU<br>
");
     }
 }

function HMXML_setTempProfile($IPS_DeviceID, $tempProfileArray, $WT_Profil=0)
 {
	// $IPS_DeviceID: IPS Instance ID
	// $tempProfileArray: ARRAY of type returned by HMXML_getTempProfile()
	// $WT_Profil nur f¸r HM-TC-IT-WM-W-EU; g¸ltige werte 1,2,3 --< das zu speichernde Profil

	$HMAddress = IPSid_2_HMAddress($IPS_DeviceID);

	$type = HMXML_getType($IPS_DeviceID);

	if ($type == "HM-CC-TC")
	   {
      $values = new xmlrpcval();
      foreach ($tempProfileArray as $day => $valuesArray)
		  {
        $previousTimeEnd = "00:00";
     	  for ($index=1; $index <= count($valuesArray['EndTimes']); $index++)
			   {
            $key = "TEMPERATUR_".strtoupper($day)."_".$index;
   			$paramTemp = array($key => new xmlrpcval($valuesArray['Values'][$index-1], "double"));
   			$values->addStruct($paramTemp);
  				$key = "TIMEOUT_".strtoupper($day)."_".$index;
				if ($valuesArray['EndTimes'][$index-1] > $previousTimeEnd)
				   {
				   // Convert end time to Timeout
				   $thisDayStart = mktime(0, 0);
               $timeEndArray = explode(":", $valuesArray['EndTimes'][$index-1]);
				   if ($timeEndArray[1] % 10) die("Error: Invalid End Time (must be 10mn increments) for $day at index $index in HMXML_setTempProfile()<br>
");
				   $timeEndts = mktime($timeEndArray[0], $timeEndArray[1]);
               // $timeout = (($timeEndts - $thisDayStart)/60)+60; // TODO, works  ?
				   $timeout = (($timeEndts - $thisDayStart)/60); // TODO, works  ?
               $paramTime = array($key => new xmlrpcval("$timeout", "int")); // i4
               $values->addStruct($paramTime);
					}
				  else
					die("Error: Invalid End Time for $day at index $index in HMXML_setTempProfile()<br>
");
            $previousTimeEnd = $valuesArray['EndTimes'][$index-1];
				}

        }
        $content = new xmlrpcmsg("putParamset",
                   array(  new xmlrpcval("$HMAddress:2", "string"),
                           new xmlrpcval("MASTER", "string"),
                           $values ) );
   	  $result = HMXML_send($content);

		  return true;
     }

//* eigef¸gt von Swifty ********************
	if ($type == "HM-CC-RT-DN")
	   {
      $values = new xmlrpcval();
      foreach ($tempProfileArray as $day => $valuesArray)
		  {
        $previousTimeEnd = "00:00";
     	  for ($index=1; $index <= count($valuesArray['EndTimes']); $index++)
			   {
           	$key = "TEMPERATURE_".strtoupper($day)."_".$index;
   			$paramTemp = array($key => new xmlrpcval($valuesArray['Values'][$index-1], "double"));
   			$values->addStruct($paramTemp);
  				$key = "ENDTIME_".strtoupper($day)."_".$index;
  				if ($index>13) break; // HM-CC-RT-DN hat nur 13 Tages - Timeslots
				if ($valuesArray['EndTimes'][$index-1] > $previousTimeEnd)
				   {
				   // Convert end time to Timeout
				   $thisDayStart = mktime(0, 0);
               $timeEndArray = explode(":", $valuesArray['EndTimes'][$index-1]);
				   if ($timeEndArray[1] % 10) die("Error: Invalid End Time (must be 10mn increments) for $day at index $index in HMXML_setTempProfile()<br>
");
				   $timeEndts = mktime($timeEndArray[0], $timeEndArray[1]);
               $timeout = (($timeEndts - $thisDayStart)/60); // TODO, works  ?
               $paramTime = array($key => new xmlrpcval("$timeout", "int")); // i4
               $values->addStruct($paramTime);
					}
				  else
					die("Error: Invalid End Time for $day at index $index in HMXML_setTempProfile()<br>
");
            $previousTimeEnd = $valuesArray['EndTimes'][$index-1];
				}

        }
        $content = new xmlrpcmsg("putParamset",
                   array(  new xmlrpcval("$HMAddress", "string"),
                           new xmlrpcval("MASTER", "string"),
                           $values ) );
   	  $result = HMXML_send($content);

		  return true;
      }


      if ($type == "HM-TC-IT-WM-W-EU")
	   {
		$values = new xmlrpcval();

		//* notwendig da Firmeware beim LAN-Adapter abweicht und beim Profil 1 dort das Pr‰fix "P1_" fehlt.
      $params = HMXML_getParamSet($IPS_DeviceID,"");
		if (array_key_exists("P1_ENDTIME_FRIDAY_1", $params)) // nur ein Beispiel des "P1_"-Profils erforderlich
		 	{
	     	$Praefix="P" .$WT_Profil ."_";
   	 	}
   	 	else
   	 	{
	    	$Praefix="";
   	 	}
		//****************************************************************

		foreach ($tempProfileArray as $day => $valuesArray)
		  {
		  $previousTimeEnd = "00:00";
     	  for ($index=1; $index <= count($valuesArray['EndTimes']); $index++)
			   {

           	$key = $Praefix ."TEMPERATURE_".strtoupper($day)."_".$index;
   			$paramTemp = array($key => new xmlrpcval($valuesArray['Values'][$index-1], "double"));
				$values->addStruct($paramTemp);
  				$key = $Praefix ."ENDTIME_".strtoupper($day)."_".$index;



  				if ($index>13) break; // HM-TC-IT-WM-W-EU hat nur 13 Tages - Timeslots
				if ($valuesArray['EndTimes'][$index-1] > $previousTimeEnd)
				   {
				   // Convert end time to Timeout
				   $thisDayStart = mktime(0, 0);
               $timeEndArray = explode(":", $valuesArray['EndTimes'][$index-1]);
				   if ($timeEndArray[1] % 5) die("Error: Invalid End Time (must be 10mn increments) for $day at index $index in HMXML_setTempProfile()<br>
");
				   $timeEndts = mktime($timeEndArray[0], $timeEndArray[1]);
               $timeout = (($timeEndts - $thisDayStart)/60); // TODO, works  ?
        		   $paramTime = array($key => new xmlrpcval("$timeout", "int")); // i4
		         $values->addStruct($paramTime);
					}
				  else
					die("Error: Invalid End Time for $day at index $index in HMXML_setTempProfile()<br>
");
              $previousTimeEnd = $valuesArray['EndTimes'][$index-1];
				}
        }

    	  $content = new xmlrpcmsg("putParamset",
                   array(  new xmlrpcval("$HMAddress", "string"),
                           new xmlrpcval("MASTER", "string"),
                           $values ) );
   	  $result = HMXML_send($content);

		  return true;
      }

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

  If ($type != "HM-CC-RT-DN" and $type != "HM-CC-TC" and $type != "HM-TC-IT-WM-W-EU")
     {
     die("Error: HMXML_getTempProfile() Device $HMAddress ($IPS_DeviceID) is not of Type HM-CC-TC, HM-TC-IT-WM-W-EU OR HM-CC-RT-DN<br>
");
     }


 }

function HMXML_setTemp($IPS_DeviceID, $day, $index, $temp, $timeEnd = false) {
	// $IPS_DeviceID: IPS Instance ID
	// $day: STRING - Full day name (english), not case-sensitive
	// $index: INTEGER - The Temperature list index, between 1 and 24 (max 24 temperatire values/slots)
	// $timeEnd: STRING - Value of End Time in the Format HH:mm
	// Note: The transfer of data to the TC might take some time (few minutes).
    die ("Error: HMXML_setTemp() removed in v0.2<br>
");

    return false;
}

function HMXML_getParamSet($IPS_DeviceID, $channel = null, $param = false) {
	// $IPS_DeviceID: IPS Instance ID
	// $channel: INTEGER - if null the channel is taken from IPS
	// $param: STRING - A specific parameter to return (see HomeMatic Specficiation), returns all if false
	// Output: An array of Parameters for the Device

   //$HMAddressFull = explode(":", HM_GetAddress($IPS_DeviceID));
   //$HMAddress = $HMAddressFull[0];
   //$HMAddressChannel = $HMAddressFull[1];

	$HMAddressFull = IPS_GetProperty($IPS_DeviceID, 'Address');
	$HMAddress = substr($HMAddressFull,0,10);
	$HMAddressCHannel = substr($HMAddressFull,11,1);

   $thisChannel = isset($channel) ? $channel : $HMAddressChannel;
	$request = new xmlrpcmsg("getParamset",
  					array(new xmlrpcval("$HMAddress:$thisChannel", "string"),
           		new xmlrpcval("MASTER", "string")) );

	$messages = HMXML_send($request);

	if ($param !== false) return $messages[$param];
	return $messages;
}

function HMXML_getParamSetDesc($IPS_DeviceID, $channel = null, $param = false) {
	// $IPS_DeviceID: IPS Instance ID
	// $channel: INTEGER - default is null. Should already be included in HM Address
	// $param: STRING - A specific parameter to return (see HomeMatic Specficiation), returns all if false
	// Output: Array of Parameter Descriptions for the Device

   //$HMAddressFull = explode(":", HM_GetAddress($IPS_DeviceID));
   //$HMAddress = $HMAddressFull[0];
   //$HMAddressChannel = $HMAddressFull[1];

   $HMAddressFull = IPS_GetProperty($IPS_DeviceID, 'Address');
	$HMAddress = substr($HMAddressFull,0,10);
	$HMAddressCHannel = substr($HMAddressFull,11,1);

	$thisChannel = isset($channel) ? $channel : $HMAddressChannel;
	$request = new xmlrpcmsg("getParamsetDescription",
  					array(new xmlrpcval("$HMAddress:$thisChannel", "string"),
           		new xmlrpcval("MASTER", "string")) );
//echo "$HMAddress:$thisChannel";

	$messages = HMXML_send($request);

   if ($param !== false) return $messages[$param];
	return $messages;
}

//* eigef¸gt von Swifty am 11.2.2014 ********************
function HMXML_setParamInt($IPS_DeviceID, $param, $value) {
	// $IPS_DeviceID: IPS Instance ID or HM Address
	// $param: STRING - The parameter to set
	// $value: DOUBLE - The value to set.
   $HMAddress = IPSid_2_HMAddress($IPS_DeviceID);

	$params = array($param => new xmlrpcval("$value", "i4"));

	$values = new xmlrpcval();
	$values->addStruct($params);

	$content = new xmlrpcmsg("putParamset",
                    array(  new xmlrpcval("$HMAddress", "string"),
                            new xmlrpcval("MASTER", "string"),
                            $values ) );
  	$result = HMXML_send($content);
//****************************************************
}



function HMXML_setParamFloat($IPS_DeviceID, $param, $value) {
	// $IPS_DeviceID: IPS Instance ID or HM Address
	// $param: STRING - The parameter to set
	// $value: DOUBLE - The value to set. If not double, will not be set on device
	$HMAddress = IPSid_2_HMAddress($IPS_DeviceID);

	$params = array($param => new xmlrpcval("$value", "double"));

	$values = new xmlrpcval();
	$values->addStruct($params);

	$content = new xmlrpcmsg("putParamset",
                    array(  new xmlrpcval("$HMAddress:2", "string"),
                            new xmlrpcval("MASTER", "string"),
                            $values ) );

	$result = HMXML_send($content);
}

// Gets the Mode of a VD (Valve) Device
function HMXML_getTCValveMode($IPS_DeviceID) {
	// $IPS_DeviceID: IPS Instance ID
	// Output: INTEGER - Mode 0 = AUTO, 1 = CLOSE VALVE, 2 = OPEN VALVE
   $HMAddress = IPSid_2_HMAddress($IPS_DeviceID);

   $type = HMXML_getType($IPS_DeviceID);
   if ($type == "HM-CC-TC") {
		$value = HMXML_getParamSet($IPS_DeviceID, 2, 'MODE_TEMPERATUR_VALVE');
		return $value;
	} else {
      die("Error: HMXML_getTCValveMode() Device $IPS_DeviceID is not of Type HM-CC-TC<br>
");
   }
}

// Sets the Mode on a VD (Valve) Device
function HMXML_setTCValveMode($IPS_DeviceID, $nMode) {
	// $IPS_DeviceID: IPS Instance ID
	// $nMode: INTEGER - 0 = AUTO, 1 = CLOSE VALVE, 2 = OPEN VALVE

   $HMAddress = IPSid_2_HMAddress($IPS_DeviceID);

   $type = HMXML_getType($IPS_DeviceID);
   if ($type == "HM-CC-TC") {
		$params = array("MODE_TEMPERATUR_VALVE" => new xmlrpcval("$nMode", "i4"));

		$values = new xmlrpcval();
		$values->addStruct($params);

		$content = new xmlrpcmsg("putParamset",
                    array(  new xmlrpcval("$HMAddress:2", "string"),
                            new xmlrpcval("MASTER", "string"),
                            $values ) );

   	$result = HMXML_send($content);

		return $result;
 	} else {
      die("Error: HMXML_setTCValveMode() Device $HMAddress ($IPS_DeviceID) is not of Type HM-CC-TC<br>
");
   }
}


// Sets the Error Position on a VD (Valve) Device
function HMXML_setVDErrorPos($IPS_DeviceID, $nErrorPosition) {
	// $IPS_DeviceID: IPS Instance ID
	// $nErrorPosition: INTEGER - Position in %, between 0 and 99 included

   $HMAddress = IPSid_2_HMAddress($IPS_DeviceID);

   $type = HMXML_getType($IPS_DeviceID);
   if ($type == "HM-CC-VD") {
		$params = array("VALVE_ERROR_POSITION" => new xmlrpcval("$nErrorPosition", "i4"));

		$values = new xmlrpcval();
		$values->addStruct($params);

		$content = new xmlrpcmsg("putParamset",
                    array(  new xmlrpcval("$HMAddress:2", "string"),
                            new xmlrpcval("MASTER", "string"),
                            $values ) );

   	$result = HMXML_send($content);

		return $result;
 	} else {
      die("Error: HMXML_setVDErrorPos() Device $HMAddress ($IPS_DeviceID) is not of Type HM-CC-VD<br>
");
   }
}

// Sets the Error Position on a VD (Valve) Device
function HMXML_setVDOffset($IPS_DeviceID, $nOffset) {
	// $IPS_DeviceID: IPS Instance ID
	// $nOffset: INTEGER - Offset Position in %, between 0 and 25 included

   $HMAddress = IPSid_2_HMAddress($IPS_DeviceID);

   $type = HMXML_getType($IPS_DeviceID);
   if ($type == "HM-CC-VD") {
		$params = array("VALVE_OFFSET_VALUE" => new xmlrpcval("$nOffset", "i4"));

		$values = new xmlrpcval();
		$values->addStruct($params);

		$content = new xmlrpcmsg("putParamset",
                    array(  new xmlrpcval("$HMAddress:2", "string"),
                            new xmlrpcval("MASTER", "string"),
                            $values ) );

   	$result = HMXML_send($content);

		return $result;
 	} else {
      die("Error: HMXML_setVDOffset() Device $HMAddress ($IPS_DeviceID) is not of Type HM-CC-VD<br>
");
   }
}

// Gets the Mode on a TC (Thermostat) Device
function HMXML_getTCMode($IPS_DeviceID) {
	// $IPS_DeviceID: IPS Instance ID
	// Output: INTEGER - Mode: 0 = MANUAL, 1 = AUTO, 2=CENTRAL, 3 = PARTY

   $type = HMXML_getType($IPS_DeviceID);
   if ($type == "HM-CC-TC") {
		$value = HMXML_getParamSet($IPS_DeviceID, 2, 'MODE_TEMPERATUR_REGULATOR');
		return $value;
  	} else {
      die("Error: HMXML_getTCMode() Device $IPS_DeviceID is not of Type HM-CC-TC<br>
");
   }
}

// Sets the Mode on a TC (Thermostat) Device
function HMXML_setTCMode($IPS_DeviceID, $nMode) {
	// $IPS_DeviceID: IPS Instance ID
	// $nMode: INTEGER - Mode 0 = MANUAL, 1 = AUTO, 2=CENTRAL, 3 = PARTY

   $HMAddress = IPSid_2_HMAddress($IPS_DeviceID);

   $type = HMXML_getType($IPS_DeviceID);
   if ($type == "HM-CC-TC") {
		$params = array("MODE_TEMPERATUR_REGULATOR" => new xmlrpcval("$nMode", "i4"));

		$values = new xmlrpcval();
		$values->addStruct($params);

		$content = new xmlrpcmsg("putParamset",
                    array(  new xmlrpcval("$HMAddress:2", "string"),
                            new xmlrpcval("MASTER", "string"),
                            $values ) );

   	$result = HMXML_send($content);

		return $result;
 	} else {
      die("Error: HMXML_setTCMode() Device $HMAddress ($IPS_DeviceID) is not of Type HM-CC-TC<br>
");
   }
}

// Sets Temperature Comfort Value
function HMXML_setTempComfortValue($IPS_DeviceID, $temp) {
	// $IPS_DeviceID: IPS Instance ID
	// $temp: FLOAT - Temperature Value

	$type = HMXML_getType($IPS_DeviceID);
   if ($type == "HM-CC-TC") {
      $result = HMXML_setParamFloat($IPS_DeviceID, "TEMPERATUR_COMFORT_VALUE", $temp);

		return $result;
 	} else {
      die("Error: HMXML_SetTempComfortValue() Device $IPS_DeviceID is not of Type HM-CC-TC<br>
");
   }
}

// Sets Temperature Lowering (Absenk) Value
function HMXML_setTempLoweringValue($IPS_DeviceID, $temp) {
	// $IPS_DeviceID: IPS Instance ID
	// $temp: FLOAT - Temperature Value

	$type = HMXML_getType($IPS_DeviceID);
   if ($type == "HM-CC-TC") {
      $result = HMXML_setParamFloat($IPS_DeviceID, "TEMPERATUR_LOWERING_VALUE", $temp);

		return $result;
 	} else {
      die("Error: HMXML_SetTempLoweringValue() Device $IPS_DeviceID is not of Type HM-CC-TC<br>
");
   }
}

// Sets Temperature Lowering (Absenk) Value
function HMXML_setTempPartyValue($IPS_DeviceID, $temp) {
	// $IPS_DeviceID: IPS Instance ID
	// $temp: FLOAT - Temperature Value

	$type = HMXML_getType($IPS_DeviceID);
   if ($type == "HM-CC-TC") {
      $result = HMXML_setParamFloat($IPS_DeviceID, "TEMPERATUR_PARTY_VALUE", $temp);

		return $result;
 	} else {
      die("Error: HMXML_SetTempPartyValue() Device $IPS_DeviceID is not of Type HM-CC-TC<br>
");
   }
}

// Sets Party Time
function HMXML_setPartyEnd($IPS_DeviceID, $day, $hour, $minute) {
	// $IPS_DeviceID: IPS Instance ID
	// $day: number of days (0 to 200 max)
	// $hour: the hour (0 to 23 included)
	// $minute: 0 = 00, 1 = 30

	if ($day < 0 or $day > 200) 		die("Error: HMXML_SetPartyEnd() Number of Days must be between 0 and 200<br>
");
	if ($hour < 0 or $day > 23) 		die("Error: HMXML_SetPartyEnd() Hour must be between 0 and 23<br>
");
	if ($minute < 0 or $minute > 1) 	die("Error: HMXML_SetPartyEnd() Minute must be 0 (00) or 1 (30)<br>
");

   $HMAddress = IPSid_2_HMAddress($IPS_DeviceID);

	$type = HMXML_getType($IPS_DeviceID);
   if ($type == "HM-CC-TC") {

      $values = new xmlrpcval();

   	$paramDay = array("PARTY_END_DAY" => new xmlrpcval("$day", "double"));
   	$values->addStruct($paramDay);
   	$paramHour = array("PARTY_END_HOUR" => new xmlrpcval("$hour", "i4"));
   	$values->addStruct($paramHour);
   	$paramMinute = array("PARTY_END_MINUTE" => new xmlrpcval("$minute", "i4"));
   	$values->addStruct($paramMinute);

      $content = new xmlrpcmsg("putParamset",
                    array(  new xmlrpcval("$HMAddress:2", "string"),
                            new xmlrpcval("MASTER", "string"),
                            $values ) );

   	$result = HMXML_send($content);

		return $result;
 	} else {
      die("Error: HMXML_SetPartyEnd() Device $IPS_DeviceID is not of Type HM-CC-TC<br>
");
   }
}


// Gets Reception Levels between 2 HM Devices in dbm
function HMXML_getRFLevelsAB($IPS_DeviceID_A, $IPS_DeviceID_B) {
	// $IPS_DeviceID_A: IPS Instance ID of first device
	// $IPS_DeviceID_B: IPS Instance ID of second device
	// Output: Array with Reception Levels in dbm
	// Note: 65536 means unknown level

   $HMAddressA = IPSid_2_HMAddress($IPS_DeviceID_A);
   $HMAddressB = IPSid_2_HMAddress($IPS_DeviceID_B);

	$request = new xmlrpcmsg('rssiInfo');
	$devices = HMXML_send($request);

	//$result = array();

	//array_push($result, $devices[$HMAddressA][$HMAddressB]);
	//array_push($result, $devices[$HMAddressB][$HMAddressA]);

	//return $result;
	return $devices[$HMAddressA][$HMAddressB];
}

// Converts IPS Instance ID to HM Address or leaves Address if provided as such
function IPSid_2_HMAddress($IPS_DeviceID) {
   // $IPS_DeviceID: IPS Instance ID or HM Address
   // output: HM Address

	if (preg_match ("/^[A-Z]{3}[0-9]*/", $IPS_DeviceID)) {
		// The provided ID is a HM Address. Leave as it is.
	 	return $IPS_DeviceID;
	} else {
    	// The provided ID is a IPS Instance ID. Convert and extract HM Address.
	 	//$HMAddressFull = HM_GetAddress($IPS_DeviceID);
	 	//if ($HMAddressFull === false) echo "Eror: Invalid IPS Instance ID in IPSid_2_HMAddress()";
	 	//$HMAddressArray = explode(":", $HMAddressFull);
   	//$HMAddress = $HMAddressArray[0];
   	
   	$HMAddressFull = IPS_GetProperty($IPS_DeviceID, 'Address');
   	if ($HMAddressFull === false) echo "Eror: Invalid IPS Instance ID in IPSid_2_HMAddress()";
	   $HMAddress = substr($HMAddressFull,0,10);
   	
   	return $HMAddress;
	}
}

// Creates XMLRPC Client Instance and sends request
function HMXML_send($request) {
	global $xml_client, $BidCosServiceIP;

	// If the client does not exist, initialise it here
	if ($xml_client == false) {
      $init_result = HMXML_init();
		if ($init_result !== false) echo "XMLRPC INIT SUCCESS!
"; else "XMLRPC INIT FAILED!
";
		echo "
";
 }

	$response = $xml_client->send($request);
	if ( $response->errno == 0 )
   	$messages = php_xmlrpc_decode($response->value());
	else
		die("Error: HMXML_send() Request to BidCos-Service failed ($BidCosServiceIP) -> $response->errstr<br>
");

	return $messages;
}
?>

Gruß
Christian

Moin,

zunächst einmal vielen Dank an Swifty für dieses tolle Programm. Den Wert dieses Tools weiß wohl jeder zu schätzen, der mal über die WebGui von Homematic Einstellungen in den Profilen vorgenommen hat.:slight_smile:

Ich habe mir die Scripte angepasst für IPSView, da ich weder das WebFront nutze noch unterschiedliche Konfigurationen in den einzelnen Räumen habe - immer HM-TC-IT-WM-W-EU mit HM-CC-RT-DN.

Dabei ist mir aufgefallen, dass beim Übernehmen von Wochenprofilen nicht immer die zu übernehmenden Daten angezeigt werden. Meiner Ansicht nach liegt das in der HM_Edit (21.2.14) ab Zeile 542:

			Case $Praesenz_Profil_Auswahl_id:
				SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
			break;

Diese Variable wird aber bereits in Zeile 183 abgefragt:

		Case $HM_Zimmer_Auswahl_id:
		Case $Praesenz_Profil_Auswahl_id:

Ich habe das wie folgt angepasst mit der Variablen $Wochenprofil_uebernehmen_von_Praesenz_Profil_id

			case $Wochenprofil_uebernehmen_von_Praesenz_Profil_id:
	            If (GetValue($Wochenprofil_uebernehmen_von_id)!=0)
			   		{
                  $ProfilDaten= unserialize(GetValue($IPS_HM_Wochenprofil[GetValue($Wochenprofil_uebernehmen_von_id)])); // Wochenprofil holen
				      $tmp=@$ProfilDaten[GetValueFormatted($Wochenprofil_uebernehmen_von_Praesenz_Profil_id)]; // Wochenprofil passend zur gewünschten Praesenz
         			SetValue($WochenProfil_Daten_edit_id,serialize($tmp));


						If (GetValue($WochenProfil_Daten_edit_id)=="N;")  //Profil ist leer
				   		{
						   $str = $str = "<table align='center' border=0 cellpadding=3 cellspacing=3 width=90%>
									<tr height=30 ><th> Slot </th><th> Start </th><th> Ende </th><th> SollWert</th></tr>";
		   		      $str .= "<tr  align='center' height=25> <td width=25%>  </td><td width=25%> </td><td width=25%> </td><td width=25%> </td></tr></table>";
			            SetValue($TagesProfil_edit_Anzeige_id, $str);
							SetValue($WochenProfil_edit_Anzeige_id,"");
							SetValue($Wochenprofil_speichern_id,1);  // Speicher Button freigeben
   			   		}
						  else
							{
		    				SetValue($WochenProfil_edit_Anzeige_id, HM_WochenTempProfil_html($WochenProfil_Daten_edit_id, GetValue($Profil_Wochentage_id)));
							$tmp=(unserialize(Getvalue($WochenProfil_Daten_edit_id)));
							$day=GetValue($Profil_Wochentage_id);
							SetValue($TagesProfil_edit_Anzeige_id, HM_TagesTempProfil_html($tmp[$dayArray[$day]], GetValue($Profil_Slot_Auswahl_id)));
							SetValue($Wochenprofil_speichern_id,1);  // Speicher Button freigeben							}
							}
						}
			break;

Ferner habe ich noch eine Frage. In Zeile 108 steht folgender Kommentar

		      // nur wenn editiertes Wochenprofil zur aktuellen (Heizungs)Präsenz passt, dann übertrage das Profil auch an das Thermostat

und im else Zweig Zeile 146 findet sich dieses

					 else // Wenn aktives PräsenzProfil nicht dem editierten Profil entspricht, dann wird nicht zm Thermostat übertragen sondern nur abgespeichert

Mir ist nun nicht klar, warum die Daten nicht in jedem Fall an das Thermostat übertragen werden dürfen. Ich habe einige Tests gemacht und konnte zunächst nichts feststellen. Auch ist mir in diesem Zusammenhang nicht klar, wann die abgespeicherten Daten nun jemals an das Thermostat übertragen werden :confused:

Falls hierfür jemand eine Erklärung hat wäre ich für die Information dankbar :slight_smile:

So nun werde ich das Ganze noch für Gruppen anpassen.

Gruß
Hans

Hallo Hans,

ich glaube durch verstehst mein Skript z.Z. besser als ich selbst. Das Script läuft seit geraumer Zeit ohne Probleme und ich hatte daher keine Veranlassung mich dort wieder reinzudenken … man vergisst viel zu schnell :o …

So aus dem Bauch würde ich meinen, dass die Kommentare (und der programmabschnitt) eine Altlast in Bezug auf die Vorgänger des HM-CC-RT-DN sind. Diese Teile kannten nur ein Profil. Das Skript verwaltet jedoch 3 Profile. Waren dem Thermostaten die Daten zum Profil „Normal“ bekannt und habe ich in IPS das Profil „Frei“ editiert, so durfte ich dieses nicht an den Thermostaten senden, da dieser ja nur die zuletzt gesendeten Daten speichert. Das Profil „Frei“ wurde daher in IPS abgelegt und erst bei Bedarf an das Thermostat gesandt. Die HM-CC-RT-DN haben ja 3 Profile, von welchen immer eins in aktiviert ist. Da stellt sich das Problem nicht.

Gruß

Swifty

PS: Ich verwende bei mir auch nur die Heizungsgruppen. Ich habe das diesbezügliche Skript nie veröffentlich, da ich da einiges umgebaut habe. Der Nachteil bei den Gruppen ist, dass man den Status immer abfragen muss und dieser nicht aktiv von der CCU gesendet wird.

Hallo Swifty,

ich glaube durch verstehst mein Skript z.Z. besser als ich selbst

danke für die Blumen, aber daran glaube ich eher nicht :slight_smile: Nichtsdestotrotz habe ich mich sehr intensiv damit beschäftigt, da ich der Ansicht bin, dass sich der Aufwand lohnt, wenn man an die Bedienung über die WebGui denkt. Ich will es dann auch noch dahingehend erweitern, dass auch die anderen Daten wie z. B. Comfort Temp und Lowering Temp usw direkt via IPSView geändert werden können.

Vielen Dank für deine Erläuterungen und das tolle Script.

Gruß
Hans

Hallo Swifty und andere Anwender
als CCU2-Progammanwender und Umsteiger auf IPS bin ich von Deinem Programm begeistert. Es macht genau das, was ich mir wünsche:
Symcon stellt die Rahmenbedingungen, die Homematic-Einheiten regeln für sich autark.
So ist sichergestellt, dass auch bei Ausfall con Systemen (IPS, CCU2) die Heizung noch läuft.
Ich habe Dein Script in mehreren Räumen im Einsatz. Alle Räume, bis auf das Wohnzimmer, haben nur einen Heizkörper mit HM-CC-RT-DN. Im Wohnzimmer sind 3 Heizkörper mit HM-CC-RT-DN und ein Wandthermostat HM-TC-IT-WM-W-EU.
In allen Räumen sind die HM-CC-RT-DN mit den Fenstersensoren über virtuelle Gruppen in der CCU2 verknüpft.
Im Wohnzimmer kommt zu der Gruppe auch das Wandthermostat HM-TC-IT-WM-W-EU.
Somit funktioniert die Fenster-offen-Regelung. Die Heizkörper regeln auf 12 Grad runter, wenn die Fenster wieder zu sind, regeln die Heizkörper auf die vorgesehene Temperatur.

Ausschnitt der Konfig:


$HM_Edit_Wfe_ID= 14551 /*[91 Heizung\WF]*/ ;

//****************************************************************************
$Zimmer[0]="WOZ";
$HM_Typ[0]="HM-TC-IT-WM-W-EU";

$IPS_HM_DeviceID[0]=11337 /*[2 Erdgeschoss\2.20_Wohnzimmer\2.20_Wandthermostat_2_THERMALCONTROL_TRANSMIT]*/  ;
$HM_Wfe_ID[0]=17029 /*0[91 Heizung\WF\WOZ]*/   ;
//******************************************************************************
$Zimmer[1]="AZM";
$HM_Typ[1]="HM-CC-RT-DN";

$IPS_HM_DeviceID[1]=55147 /*[2 Erdgeschoss\2.40_Arbeitszimmer\2.40_HK_4_CLIMATECONTROL_RT_TRANSCEIVER]*/  ;
$HM_Wfe_ID[1]=15726 /*[91 Heizung\WF\AZM]*/ ;
//******************************************************************************
$Zimmer[2]="GWC";
$HM_Typ[2]="HM-CC-RT-DN";

$IPS_HM_DeviceID[2]=56521 /*[2 Erdgeschoss\2.50_GästeWC\2.50_HK_4_CLIMATECONTROL_RT_TRANSCEIVER]*/  ;
$HM_Wfe_ID[2]=26900 /*[91 Heizung\WF\GWC]*/ ;
//****************************************************************************

Nun zu meinen zwei Problemfällen:
Fall 1 - Arbeitszimmer AZM:
Hier ist nur ein HM-CC-RT-DN verbaut. Eigenartiger Weise kann die Soll-Temp. nur in diesem Raum nur in 5-Grad-Schritten eingestellt werden. Alle anderen Räume sind korrekt. In der Konfig (siehe oben) sind die Einträge WOZ und GWC identisch, also HM-CC-RT-DN, ID, WFE).
Ich habe den Raum schonmal gelöscht, die Einträge erschoben usw.
Auch in der CCU2 habe ich die Einträge geprüft, nirgend ist was von einer Schrittweite zu finden.
Welche Abhilfe gibt es?

-

Fall 2 - Wohnzimmer WOZ:
Mein Wohnzimmer hat 3 HM-CC-RT-DN und einen Wandthermostaten HM-TC-IT-WM-W-EU. Hier ist es nicht möglich, die Profile abzurufen und zu editieren. Das „Wochenprofil auslesen“ habe ich nur zum Test aktiviert, das hat aber keinen Einfluss. Wann kann hier die Abhilfe sein?

-

Ich habe alle Infos in diesem Forum durchgesucht. Die Suchfunktion läßt hier zu wünschen übrig. Ich habe die Dateien vom 24.02.2014 im Einsatz (Deine letzte Veröffentlichung).

Du hattest schonmal geschrieben, dass Du die virtuellen Gruppen einprogrammiert hast. Auch die Screenshots sahen vielversprechend aus.

Besteht die Möglichkeit, dass Du die aktuellen Scripte veröffentlichst?

Vielen Dank schonmal im Voraus für Deine Hilfe.
Vielleicht hatte ein anderer Anwender auch schonmal solch ein Problem und kann Tipps geben.

Matthias

Hallo Zusammen,

die meisten hier scheinen mit ihren Bemühungen die tollen Scripte von Swifty unter 4.0 zum Laufen zu bekommen schon recht weit gediehen zu sein. Ich leider nicht! Beim Ausführen des Scriptes „HM_Profil-Import.ips.php“ werde ich mit Fehlermeldungen erschlagen (s.u.):confused:. Ich habe die Anpassungen mit den Umlauten und ° durchgeführt, trozdem scheine ich noch etwas sehr grundlegendes falsch zu machen. Hat jemand eine Idee? Ganz herzlichen Dank!

Gruß
Frank

PHP-Error-Notice: unserialize(): Error at offset 207 of 1052 bytes
Error in Script /var/lib/symcon/scripts/HM_Profil-Import.ips.php on Line 36
Notice: unserialize(): Error at offset 207 of 1052 bytes in /var/lib/symcon/scripts/HM_Profil-Import.ips.php on line 36
PHP-Error-Warning: array_keys() expects parameter 1 to be array, boolean given
Error in Script /var/lib/symcon/scripts/HM_Profil-Import.ips.php on Line 46
Warning: array_keys() expects parameter 1 to be array, boolean given in /var/lib/symcon/scripts/HM_Profil-Import.ips.php on line 46
PHP-Error-Warning: Invalid argument supplied for foreach()
Error in Script /var/lib/symcon/scripts/HM_Profil-Import.ips.php on Line 62
Warning: Invalid argument supplied for foreach() in /var/lib/symcon/scripts/HM_Profil-Import.ips.php on line 62
PHP-Error-Warning: Profilename cannot be empty
Error in Script /var/lib/symcon/scripts/HM_Profil-Import.ips.php on Line 95
Warning: Profilename cannot be empty in /var/lib/symcon/scripts/HM_Profil-Import.ips.php on line 95
PHP-Error-Warning: Profile with name # does not exist
Error in Script /var/lib/symcon/scripts/HM_Profil-Import.ips.php on Line 96
Warning: Profile with name # does not exist in /var/lib/symcon/scripts/HM_Profil-Import.ips.php on line 96
PHP-Error-Warning: Profile with name # does not exist
Error in Script /var/lib/symcon/scripts/HM_Profil-Import.ips.php on Line 97
Warning: Profile with name # does not exist in /var/lib/symcon/scripts/HM_Profil-Import.ips.php on line 97
PHP-Error-Warning: Profile with name # does not exist
Error in Script /var/lib/symcon/scripts/HM_Profil-Import.ips.php on Line 98
Warning: Profile with name # does not exist in /var/lib/symcon/scripts/HM_Profil-Import.ips.php on line 98
PHP-Error-Warning: Profile with name # does not exist
Error in Script /var/lib/symcon/scripts/HM_Profil-Import.ips.php on Line 99
Warning: Profile with name # does not exist in /var/lib/symcon/scripts/HM_Profil-Import.ips.php on line 99
PHP-Error-Notice: unserialize(): Error at offset 253 of 503 bytes
Error in Script /var/lib/symcon/scripts/HM_Profil-Import.ips.php on Line 36
Notice: unserialize(): Error at offset 253 of 503 bytes in /var/lib/symcon/scripts/HM_Profil-Import.ips.php on line 36
PHP-Error-Warning: array_keys() expects parameter 1 to be array, boolean given
Error in Script /var/lib/symcon/scripts/HM_Profil-Import.ips.php on Line 46
Warning: array_keys() expects parameter 1 to be array, boolean given in /var/lib/symcon/scripts/HM_Profil-Import.ips.php on line 46
PHP-Error-Warning: Invalid argument supplied for foreach()
Error in Script /var/lib/symcon/scripts/HM_Profil-Import.ips.php on Line 62PHP-Error-Maximal ErrorCount exceeded for this Session --> Abort ProcessingAbort Processing during exceed of maximal ErrorCount: Invalid argument supplied for foreach()
Error in Script /var/lib/symcon/scripts/HM_Profil-Import.ips.php on Line 62

Hi,

ich habe es inzwischen hinbekommen. Ursache für den Fehler war, dass die Suchfunktion des Editors innerhalb der IPS-Console nicht richtig funktioniert, sprich es werden nicht alle Umlaute und Sonderzeichen gefunden. Bei Benutzung eines vernünfigten Editors hat es dann funktioniert. :slight_smile:

Gruß
Frank

Du kannst ja mal die korrigierte Version posten dann muss man sich nicht die Mühe machen das selbst zu machen wenn man das neu unter 4.x nutzen will. Das wäre nett.:wink:

Lösung: Ich habe die Räume WOZ (kein Profil) und AZM (5-Grad-Problem) unter Prog_Räume und unter WF gelöscht. Zudem habe ich unter HM_Heizung_Raumsteuerung die Timer gelöscht. In der HM_Heizung_Konfig jeweils einen neuen Raum angelegt und den Index nicht auf 0 oder 1 sondern (bei mir) auf 10 und 11 gesetzt. Im WF wurden die Räume neu angelegt.
Anschließend HM_Heizung_Raumsteuerung manuell gestartet und HM_Edit manuell gestartet.
Ein Kopieren und Anpassen der Räume in der HM_Heizung_Konfig war nicht ausreichend, löschen und vom anderen Raum kopieren hat geholfen.

Umlaute aus den Profilen entfernt, Zähler der Länge angepasst (sx)


<?
/********************************
 Profil Import Script
 v 0.1 - 15.02.2014
 (c) Swifty
 Vorraussetzung IPS v3.1
********************************/
// MH: Umlaute geaendert in ue, ae, oe und Gradzeichen weg
// MH: sx angepasst (Zähler im Profil)
//*********************************************************
// Hier bitte die vom Profil Export Script erstellen
// Profile einfügen (Copy & Paste)
//*********************************************************
$Profile[0]="a:1:{s:18:^^HM_Heizung_Auswahl^^;a:11:{s:12:^^Associations^^;a:9:{i:0;a:4:{s:5:^^Color^^;i:-1;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:1:^^ ^^;s:5:^^Value^^;d:0;}i:1;a:4:{s:5:^^Color^^;i:-1;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:6:^^Kueche^^;s:5:^^Value^^;d:1;}i:2;a:4:{s:5:^^Color^^;i:-1;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:13:^^Arbeitszimmer^^;s:5:^^Value^^;d:2;}i:3;a:4:{s:5:^^Color^^;i:-1;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:3:^^Bad^^;s:5:^^Value^^;d:3;}i:4;a:4:{s:5:^^Color^^;i:-1;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:9:^^KiZ Janik^^;s:5:^^Value^^;d:4;}i:5;a:4:{s:5:^^Color^^;i:-1;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:9:^^KiZ Anika^^;s:5:^^Value^^;d:5;}i:6;a:4:{s:5:^^Color^^;i:-1;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:4:^^WZ01^^;s:5:^^Value^^;d:6;}i:7;a:4:{s:5:^^Color^^;i:-1;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:4:^^WZ02^^;s:5:^^Value^^;d:7;}i:8;a:4:{s:5:^^Color^^;i:-1;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:4:^^WZ03^^;s:5:^^Value^^;d:8;}}s:6:^^Digits^^;i:0;s:4:^^Icon^^;s:0:^^^^;s:10:^^IsReadOnly^^;b:0;s:8:^^MaxValue^^;d:1;s:8:^^MinValue^^;d:0;s:6:^^Prefix^^;s:0:^^^^;s:11:^^ProfileName^^;s:18:^^HM_Heizung_Auswahl^^;s:11:^^ProfileType^^;i:1;s:8:^^StepSize^^;d:0;s:6:^^Suffix^^;s:0:^^^^;}}";
$Profile[1]="a:1:{s:8:^^Praesenz^^;a:11:{s:12:^^Associations^^;a:3:{i:0;a:4:{s:5:^^Color^^;i:10079487;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:6:^^Normal^^;s:5:^^Value^^;d:0;}i:1;a:4:{s:5:^^Color^^;i:13434828;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:4:^^Frei^^;s:5:^^Value^^;d:1;}i:2;a:4:{s:5:^^Color^^;i:16764057;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:8:^^Abwesend^^;s:5:^^Value^^;d:2;}}s:6:^^Digits^^;i:0;s:4:^^Icon^^;s:0:^^^^;s:10:^^IsReadOnly^^;b:0;s:8:^^MaxValue^^;d:3;s:8:^^MinValue^^;d:0;s:6:^^Prefix^^;s:0:^^^^;s:11:^^ProfileName^^;s:8:^^Praesenz^^;s:11:^^ProfileType^^;i:1;s:8:^^StepSize^^;d:0;s:6:^^Suffix^^;s:0:^^^^;}}";
$Profile[2]="a:1:{s:20:^^HM_Heizung_Wochentag^^;a:11:{s:12:^^Associations^^;a:7:{i:0;a:4:{s:5:^^Color^^;i:-1;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:2:^^Mo^^;s:5:^^Value^^;d:0;}i:1;a:4:{s:5:^^Color^^;i:-1;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:2:^^Di^^;s:5:^^Value^^;d:1;}i:2;a:4:{s:5:^^Color^^;i:-1;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:2:^^Mi^^;s:5:^^Value^^;d:2;}i:3;a:4:{s:5:^^Color^^;i:-1;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:2:^^Do^^;s:5:^^Value^^;d:3;}i:4;a:4:{s:5:^^Color^^;i:-1;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:2:^^Fr^^;s:5:^^Value^^;d:4;}i:5;a:4:{s:5:^^Color^^;i:-1;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:2:^^Sa^^;s:5:^^Value^^;d:5;}i:6;a:4:{s:5:^^Color^^;i:-1;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:2:^^So^^;s:5:^^Value^^;d:6;}}s:6:^^Digits^^;i:0;s:4:^^Icon^^;s:0:^^^^;s:10:^^IsReadOnly^^;b:0;s:8:^^MaxValue^^;d:0;s:8:^^MinValue^^;d:0;s:6:^^Prefix^^;s:0:^^^^;s:11:^^ProfileName^^;s:20:^^HM_Heizung_Wochentag^^;s:11:^^ProfileType^^;i:1;s:8:^^StepSize^^;d:0;s:6:^^Suffix^^;s:0:^^^^;}}";
$Profile[3]="a:1:{s:15:^^HM_Heizung_Slot^^;a:11:{s:12:^^Associations^^;a:0:{}s:6:^^Digits^^;i:0;s:4:^^Icon^^;s:0:^^^^;s:10:^^IsReadOnly^^;b:0;s:8:^^MaxValue^^;d:3;s:8:^^MinValue^^;d:1;s:6:^^Prefix^^;s:4:^^Slot^^;s:11:^^ProfileName^^;s:15:^^HM_Heizung_Slot^^;s:11:^^ProfileType^^;i:1;s:8:^^StepSize^^;d:1;s:6:^^Suffix^^;s:0:^^^^;}}";
$Profile[4]="a:1:{s:26:^^HM_Heizung_Temperatur_Edit^^;a:11:{s:12:^^Associations^^;a:4:{i:0;a:4:{s:5:^^Color^^;i:3368703;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:4:^^-1 C^^;s:5:^^Value^^;d:1;}i:1;a:4:{s:5:^^Color^^;i:3368703;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:6:^^-0,1 C^^;s:5:^^Value^^;d:2;}i:2;a:4:{s:5:^^Color^^;i:16711680;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:6:^^+0,1 C^^;s:5:^^Value^^;d:3;}i:3;a:4:{s:5:^^Color^^;i:16711680;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:4:^^+1 C^^;s:5:^^Value^^;d:4;}}s:6:^^Digits^^;i:0;s:4:^^Icon^^;s:0:^^^^;s:10:^^IsReadOnly^^;b:0;s:8:^^MaxValue^^;d:0;s:8:^^MinValue^^;d:0;s:6:^^Prefix^^;s:0:^^^^;s:11:^^ProfileName^^;s:26:^^HM_Heizung_Temperatur_Edit^^;s:11:^^ProfileType^^;i:1;s:8:^^StepSize^^;d:0;s:6:^^Suffix^^;s:0:^^^^;}}";
$Profile[5]="a:1:{s:20:^^HM_Heizung_Zeit_Edit^^;a:11:{s:12:^^Associations^^;a:6:{i:0;a:4:{s:5:^^Color^^;i:-1;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:3:^^-1h^^;s:5:^^Value^^;d:1;}i:1;a:4:{s:5:^^Color^^;i:-1;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:6:^^-10min^^;s:5:^^Value^^;d:2;}i:2;a:4:{s:5:^^Color^^;i:-1;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:5:^^-5min^^;s:5:^^Value^^;d:3;}i:3;a:4:{s:5:^^Color^^;i:-1;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:5:^^+5min^^;s:5:^^Value^^;d:4;}i:4;a:4:{s:5:^^Color^^;i:-1;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:6:^^+10min^^;s:5:^^Value^^;d:5;}i:5;a:4:{s:5:^^Color^^;i:-1;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:3:^^+1h^^;s:5:^^Value^^;d:6;}}s:6:^^Digits^^;i:0;s:4:^^Icon^^;s:0:^^^^;s:10:^^IsReadOnly^^;b:0;s:8:^^MaxValue^^;d:0;s:8:^^MinValue^^;d:0;s:6:^^Prefix^^;s:0:^^^^;s:11:^^ProfileName^^;s:20:^^HM_Heizung_Zeit_Edit^^;s:11:^^ProfileType^^;i:1;s:8:^^StepSize^^;d:0;s:6:^^Suffix^^;s:0:^^^^;}}";
$Profile[6]="a:1:{s:23:^^HM_Heizung_Slot_add_del^^;a:11:{s:12:^^Associations^^;a:2:{i:0;a:4:{s:5:^^Color^^;i:16764057;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:17:^^ZeitSlot Loeschen^^;s:5:^^Value^^;d:1;}i:1;a:4:{s:5:^^Color^^;i:13434828;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:17:^^ZeitSlot anfuegen^^;s:5:^^Value^^;d:2;}}s:6:^^Digits^^;i:0;s:4:^^Icon^^;s:0:^^^^;s:10:^^IsReadOnly^^;b:0;s:8:^^MaxValue^^;d:0;s:8:^^MinValue^^;d:0;s:6:^^Prefix^^;s:0:^^^^;s:11:^^ProfileName^^;s:23:^^HM_Heizung_Slot_add_del^^;s:11:^^ProfileType^^;i:1;s:8:^^StepSize^^;d:0;s:6:^^Suffix^^;s:0:^^^^;}}";
$Profile[7]="a:1:{s:27:^^HM_Heizung_Profil_speichern^^;a:11:{s:12:^^Associations^^;a:1:{i:0;a:4:{s:5:^^Color^^;i:16711680;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:16:^^Profil speichern^^;s:5:^^Value^^;d:1;}}s:6:^^Digits^^;i:0;s:4:^^Icon^^;s:0:^^^^;s:10:^^IsReadOnly^^;b:0;s:8:^^MaxValue^^;d:0;s:8:^^MinValue^^;d:0;s:6:^^Prefix^^;s:0:^^^^;s:11:^^ProfileName^^;s:27:^^HM_Heizung_Profil_speichern^^;s:11:^^ProfileType^^;i:1;s:8:^^StepSize^^;d:0;s:6:^^Suffix^^;s:0:^^^^;}}";
$Profile[8]="a:1:{s:29:^^HM_heizung_Profil_uebertragen^^;a:11:{s:12:^^Associations^^;a:2:{i:0;a:4:{s:5:^^Color^^;i:-1;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:1:^^ ^^;s:5:^^Value^^;d:0;}i:1;a:4:{s:5:^^Color^^;i:3368703;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:18:^^Profil uebertragen^^;s:5:^^Value^^;d:1;}}s:6:^^Digits^^;i:0;s:4:^^Icon^^;s:0:^^^^;s:10:^^IsReadOnly^^;b:0;s:8:^^MaxValue^^;d:0;s:8:^^MinValue^^;d:0;s:6:^^Prefix^^;s:0:^^^^;s:11:^^ProfileName^^;s:29:^^HM_heizung_Profil_uebertragen^^;s:11:^^ProfileType^^;i:1;s:8:^^StepSize^^;d:0;s:6:^^Suffix^^;s:0:^^^^;}}";
$Profile[9]="a:1:{s:20:^^HM_Heizung_Steuerung^^;a:11:{s:12:^^Associations^^;a:5:{i:0;a:4:{s:5:^^Color^^;i:3368703;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:6:^^Sommer^^;s:5:^^Value^^;d:-1;}i:1;a:4:{s:5:^^Color^^;i:16711680;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:7:^^Manuell^^;s:5:^^Value^^;d:0;}i:2;a:4:{s:5:^^Color^^;i:32768;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:9:^^Automatik^^;s:5:^^Value^^;d:1;}i:3;a:4:{s:5:^^Color^^;i:16750848;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:8:^^Zentrale^^;s:5:^^Value^^;d:2;}i:4;a:4:{s:5:^^Color^^;i:8388608;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:5:^^Party^^;s:5:^^Value^^;d:3;}}s:6:^^Digits^^;i:0;s:4:^^Icon^^;s:0:^^^^;s:10:^^IsReadOnly^^;b:0;s:8:^^MaxValue^^;d:0;s:8:^^MinValue^^;d:0;s:6:^^Prefix^^;s:0:^^^^;s:11:^^ProfileName^^;s:20:^^HM_Heizung_Steuerung^^;s:11:^^ProfileType^^;i:1;s:8:^^StepSize^^;d:0;s:6:^^Suffix^^;s:0:^^^^;}}";
$Profile[10]="a:1:{s:29:^^HM_Wochenprofil_aktualisieren^^;a:11:{s:12:^^Associations^^;a:1:{i:0;a:4:{s:5:^^Color^^;i:3368703;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:13:^^Aktualisieren^^;s:5:^^Value^^;d:0;}}s:6:^^Digits^^;i:0;s:4:^^Icon^^;s:0:^^^^;s:10:^^IsReadOnly^^;b:0;s:8:^^MaxValue^^;d:0;s:8:^^MinValue^^;d:0;s:6:^^Prefix^^;s:0:^^^^;s:11:^^ProfileName^^;s:29:^^HM_Wochenprofil_aktualisieren^^;s:11:^^ProfileType^^;i:1;s:8:^^StepSize^^;d:0;s:6:^^Suffix^^;s:0:^^^^;}}";
$Profile[11]="a:1:{s:26:^^HM_Heizung_Steuerung_RT-DN^^;a:11:{s:12:^^Associations^^;a:4:{i:0;a:4:{s:5:^^Color^^;i:3368703;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:6:^^Sommer^^;s:5:^^Value^^;d:-1;}i:1;a:4:{s:5:^^Color^^;i:3381606;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:9:^^Automatik^^;s:5:^^Value^^;d:0;}i:2;a:4:{s:5:^^Color^^;i:16711680;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:7:^^Manuell^^;s:5:^^Value^^;d:1;}i:3;a:4:{s:5:^^Color^^;i:16777113;s:4:^^Icon^^;s:0:^^^^;s:4:^^Name^^;s:5:^^Boost^^;s:5:^^Value^^;d:3;}}s:6:^^Digits^^;i:0;s:4:^^Icon^^;s:0:^^^^;s:10:^^IsReadOnly^^;b:0;s:8:^^MaxValue^^;d:0;s:8:^^MinValue^^;d:0;s:6:^^Prefix^^;s:0:^^^^;s:11:^^ProfileName^^;s:26:^^HM_Heizung_Steuerung_RT-DN^^;s:11:^^ProfileType^^;i:1;s:8:^^StepSize^^;d:0;s:6:^^Suffix^^;s:0:^^^^;}}";

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

$overwrite=true;


Foreach ($Profile as $Profil)
	{
   $temp=str_replace(':^^' , ':"' , $Profil);
	$temp=str_replace('^^;' , '";' , $temp);

	$Profil=unserialize($temp);
   profil_erstellen($Profil);
 	}


function Profil_erstellen($Profil)

	{

	//print_r($Profil);
	$ProfilName=array_keys($Profil)[0];

	$Profil=$Profil[$ProfilName];

   $Digits=$Profil['Digits'];
   $Icon=$Profil['Icon'];
   $IsReadOnly=$Profil['IsReadOnly'];
	$Minimalwert=$Profil['MaxValue'];
	$Maximalwert=$Profil['MinValue'];
	$Praefix=$Profil['Prefix'];
	$Suffix=$Profil['Suffix'];
   $Typ=$Profil['ProfileType'];      //0=Boolean, 1=Integer, 2=Float, 3=String
	$Schrittweite=$Profil['StepSize'];



  	Foreach($Profil['Associations'] as $key=> $Assos)
		{
		$Asso[$key]=array("Wert" => $Assos['Value'],
			 				   "Name" => $Assos['Name'],
								"Icon" => $Assos['Icon'],
								"Farbe"=> $Assos['Color']);

		}

		//echo $ProfilName."
";
		//print_r($Profil['Associations']);
		//	print_r($Asso);


	If (IPS_VariableProfileExists($ProfilName))
		{
		if ($overwrite=true)
		   {
	   	IPS_SetVariableProfileText ( $ProfilName , $Praefix , $Suffix );
		   IPS_SetVariableProfileValues ( $ProfilName, $Minimalwert , $Maximalwert , $Schrittweite );
			IPS_SetVariableProfileDigits ($ProfilName,$Digits);
			IPS_SetVariableProfileIcon ($ProfilName,$Icon);
			If (Count($Profil['Associations'])>0)
			   {
				Foreach($Asso as $Association)
					{
	   			IPS_SetVariableProfileAssociation ( $ProfilName , $Association['Wert'] , $Association['Name'] , $Association['Icon'] , $Association['Farbe'] );
					}
				}
			}
  		}
		else
		{
	   IPS_CreateVariableProfile ( $ProfilName , $Typ );
   	IPS_SetVariableProfileText ( $ProfilName , $Praefix , $Suffix );
	   IPS_SetVariableProfileValues ( $ProfilName, $Minimalwert , $Maximalwert , $Schrittweite );
		IPS_SetVariableProfileDigits ($ProfilName,$Digits);
		IPS_SetVariableProfileIcon ($ProfilName,$Icon);
		If (Count($Profil['Associations'])>0)
			   {
				Foreach($Asso as $Association)
					{
	   			IPS_SetVariableProfileAssociation ( $ProfilName , $Association['Wert'] , $Association['Name'] , $Association['Icon'] , $Association['Farbe'] );
					}
				}
		}
	print_r(IPS_GetVariableProfileList ( ));
	print_r(IPS_GetVariableProfile($ProfilName));
	}

?>

Das mit den Umlauten ist mist.

Ich habe jetzt mal unserialize ersetzt durch jsondecode dann kann man auch Umlaute benutzten und es geht mit IPS 4.x, Ist außerdem besser lesbar und kürzer.


<?
/********************************
 Profil Import Script
 v 0.2 - 09.10.2016
 (c) Swifty
 Vorraussetzung ab IPS v3.1
********************************/
//*********************************************************
// unserialize ersetzt durch jsondecode / Umlaute können verwendet werden
//*********************************************************
$ProfileJSON[0] = '{"HM_Heizung_Auswahl":{"Associations":[{"Color":-1,"Icon":"","Name":" ","Value":0},{"Color":-1,"Icon":"","Name":"Küche","Value":1},{"Color":-1,"Icon":"","Name":"Arbeitszimmer","Value":2},{"Color":-1,"Icon":"","Name":"Bad","Value":3},{"Color":-1,"Icon":"","Name":"Kinderzimmer 1","Value":4},{"Color":-1,"Icon":"","Name":"Kinderzimmer 2","Value":5},{"Color":-1,"Icon":"","Name":"WZ01","Value":6},{"Color":-1,"Icon":"","Name":"WZ02","Value":7},{"Color":-1,"Icon":"","Name":"WZ03","Value":8}],"Digits":0,"Icon":"","IsReadOnly":false,"MaxValue":1,"MinValue":0,"Prefix":"","ProfileName":"HM_Heizung_Auswahl","ProfileType":1,"StepSize":0,"Suffix":""}}';
$ProfileJSON[1] = '{"Praesenz":{"Associations":[{"Color":10079487,"Icon":"","Name":"Normal","Value":0},{"Color":13434828,"Icon":"","Name":"Frei","Value":1},{"Color":16764057,"Icon":"","Name":"Abwesend","Value":2}],"Digits":0,"Icon":"","IsReadOnly":false,"MaxValue":3,"MinValue":0,"Prefix":"","ProfileName":"Praesenz","ProfileType":1,"StepSize":0,"Suffix":""}}';
$ProfileJSON[2] = '{"HM_Heizung_Wochentag":{"Associations":[{"Color":-1,"Icon":"","Name":"Mo","Value":0},{"Color":-1,"Icon":"","Name":"Di","Value":1},{"Color":-1,"Icon":"","Name":"Mi","Value":2},{"Color":-1,"Icon":"","Name":"Do","Value":3},{"Color":-1,"Icon":"","Name":"Fr","Value":4},{"Color":-1,"Icon":"","Name":"Sa","Value":5},{"Color":-1,"Icon":"","Name":"So","Value":6}],"Digits":0,"Icon":"","IsReadOnly":false,"MaxValue":0,"MinValue":0,"Prefix":"","ProfileName":"HM_Heizung_Wochentag","ProfileType":1,"StepSize":0,"Suffix":""}}';
$ProfileJSON[3] = '{"HM_Heizung_Slot":{"Associations":[],"Digits":0,"Icon":"","IsReadOnly":false,"MaxValue":3,"MinValue":1,"Prefix":"Slot","ProfileName":"HM_Heizung_Slot","ProfileType":1,"StepSize":1,"Suffix":""}}';
$ProfileJSON[4] = '{"HM_Heizung_Temperatur_Edit":{"Associations":[{"Color":3368703,"Icon":"","Name":"-1 °C","Value":1},{"Color":3368703,"Icon":"","Name":"-0,1 °C","Value":2},{"Color":16711680,"Icon":"","Name":"+0,1 °C","Value":3},{"Color":16711680,"Icon":"","Name":"+1 °C","Value":4}],"Digits":0,"Icon":"","IsReadOnly":false,"MaxValue":0,"MinValue":0,"Prefix":"","ProfileName":"HM_Heizung_Temperatur_Edit","ProfileType":1,"StepSize":0,"Suffix":""}}';
$ProfileJSON[5] = '{"HM_Heizung_Zeit_Edit":{"Associations":[{"Color":-1,"Icon":"","Name":"-1h","Value":1},{"Color":-1,"Icon":"","Name":"-10min","Value":2},{"Color":-1,"Icon":"","Name":"-5min","Value":3},{"Color":-1,"Icon":"","Name":"+5min","Value":4},{"Color":-1,"Icon":"","Name":"+10min","Value":5},{"Color":-1,"Icon":"","Name":"+1h","Value":6}],"Digits":0,"Icon":"","IsReadOnly":false,"MaxValue":0,"MinValue":0,"Prefix":"","ProfileName":"HM_Heizung_Zeit_Edit","ProfileType":1,"StepSize":0,"Suffix":""}}';
$ProfileJSON[6] = '{"HM_Heizung_Slot_add_del":{"Associations":[{"Color":16764057,"Icon":"","Name":"ZeitSlot Löschen","Value":1},{"Color":13434828,"Icon":"","Name":"ZeitSlot anfügen","Value":2}],"Digits":0,"Icon":"","IsReadOnly":false,"MaxValue":0,"MinValue":0,"Prefix":"","ProfileName":"HM_Heizung_Slot_add_del","ProfileType":1,"StepSize":0,"Suffix":""}}';
$ProfileJSON[7] = '{"HM_Heizung_Profil_speichern":{"Associations":[{"Color":16711680,"Icon":"","Name":"Profil speichern","Value":1}],"Digits":0,"Icon":"","IsReadOnly":false,"MaxValue":0,"MinValue":0,"Prefix":"","ProfileName":"HM_Heizung_Profil_speichern","ProfileType":1,"StepSize":0,"Suffix":""}}';
$ProfileJSON[8] = '{"HM_heizung_Profil_uebertragen":{"Associations":[{"Color":-1,"Icon":"","Name":" ","Value":0},{"Color":3368703,"Icon":"","Name":"Profil übertragen","Value":1}],"Digits":0,"Icon":"","IsReadOnly":false,"MaxValue":0,"MinValue":0,"Prefix":"","ProfileName":"HM_heizung_Profil_uebertragen","ProfileType":1,"StepSize":0,"Suffix":""}}';
$ProfileJSON[9] = '{"HM_Heizung_Steuerung":{"Associations":[{"Color":3368703,"Icon":"","Name":"Sommer","Value":-1},{"Color":16711680,"Icon":"","Name":"Manuell","Value":0},{"Color":32768 /*[Objekt #32768 existiert nicht]*/,"Icon":"","Name":"Automatik","Value":1},{"Color":16750848,"Icon":"","Name":"Zentrale","Value":2},{"Color":8388608,"Icon":"","Name":"Party","Value":3}],"Digits":0,"Icon":"","IsReadOnly":false,"MaxValue":0,"MinValue":0,"Prefix":"","ProfileName":"HM_Heizung_Steuerung","ProfileType":1,"StepSize":0,"Suffix":""}}';
$ProfileJSON[10] = '{"HM_Wochenprofil_aktualisieren":{"Associations":[{"Color":3368703,"Icon":"","Name":"Aktualisieren","Value":0}],"Digits":0,"Icon":"","IsReadOnly":false,"MaxValue":0,"MinValue":0,"Prefix":"","ProfileName":"HM_Wochenprofil_aktualisieren","ProfileType":1,"StepSize":0,"Suffix":""}}';
$ProfileJSON[11] = '{"HM_Heizung_Steuerung_RT-DN":{"Associations":[{"Color":3368703,"Icon":"","Name":"Sommer","Value":-1},{"Color":3381606,"Icon":"","Name":"Automatik","Value":0},{"Color":16711680,"Icon":"","Name":"Manuell","Value":1},{"Color":16777113,"Icon":"","Name":"Boost","Value":3}],"Digits":0,"Icon":"","IsReadOnly":false,"MaxValue":0,"MinValue":0,"Prefix":"","ProfileName":"HM_Heizung_Steuerung_RT-DN","ProfileType":1,"StepSize":0,"Suffix":""}}';

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

$overwrite=true;

Foreach ($ProfileJSON as $Profil)
	{
   		$Profil = json_decode($Profil, true);
   		profil_erstellen($Profil);
 	}


function Profil_erstellen($Profil)

	{

	//print_r($Profil);
	$ProfilName=array_keys($Profil)[0];

	$Profil=$Profil[$ProfilName];

   $Digits=$Profil['Digits'];
   $Icon=$Profil['Icon'];
   $IsReadOnly=$Profil['IsReadOnly'];
	$Minimalwert=$Profil['MaxValue'];
	$Maximalwert=$Profil['MinValue'];
	$Praefix=$Profil['Prefix'];
	$Suffix=$Profil['Suffix'];
   $Typ=$Profil['ProfileType'];      //0=Boolean, 1=Integer, 2=Float, 3=String
	$Schrittweite=$Profil['StepSize'];



  	Foreach($Profil['Associations'] as $key=> $Assos)
		{
		$Asso[$key]=array("Wert" => $Assos['Value'],
			 				   "Name" => $Assos['Name'],
								"Icon" => $Assos['Icon'],
								"Farbe"=> $Assos['Color']);

		}

		//echo $ProfilName."
";
		//print_r($Profil['Associations']);
		//	print_r($Asso);


	If (IPS_VariableProfileExists($ProfilName))
		{
		if ($overwrite=true)
		   {
	   	IPS_SetVariableProfileText ( $ProfilName , $Praefix , $Suffix );
		   IPS_SetVariableProfileValues ( $ProfilName, $Minimalwert , $Maximalwert , $Schrittweite );
			IPS_SetVariableProfileDigits ($ProfilName,$Digits);
			IPS_SetVariableProfileIcon ($ProfilName,$Icon);
			If (Count($Profil['Associations'])>0)
			   {
				Foreach($Asso as $Association)
					{
	   			IPS_SetVariableProfileAssociation ( $ProfilName , $Association['Wert'] , $Association['Name'] , $Association['Icon'] , $Association['Farbe'] );
					}
				}
			}
  		}
		else
		{
	   IPS_CreateVariableProfile ( $ProfilName , $Typ );
   	IPS_SetVariableProfileText ( $ProfilName , $Praefix , $Suffix );
	   IPS_SetVariableProfileValues ( $ProfilName, $Minimalwert , $Maximalwert , $Schrittweite );
		IPS_SetVariableProfileDigits ($ProfilName,$Digits);
		IPS_SetVariableProfileIcon ($ProfilName,$Icon);
		If (Count($Profil['Associations'])>0)
			   {
				Foreach($Asso as $Association)
					{
	   			IPS_SetVariableProfileAssociation ( $ProfilName , $Association['Wert'] , $Association['Name'] , $Association['Icon'] , $Association['Farbe'] );
					}
				}
		}
//	print_r(IPS_GetVariableProfileList ( ));
//	print_r(IPS_GetVariableProfile($ProfilName));
	}

?>

Hallo Zusammen,

nachdem inzwischen unter 4.0 alles so weit wieder läuft, wollte ich eine kleines Programm entwickeln, dass das Profil für alle Räume gesammelt auf „Normal“, „Frei“ oder „Abwesend“ setzt. Ganz platt habe ich in einem Script nacheinander die Variable „HM_Praesenz_Profil_Auswahl_ID“ für die verschiedenen Räume z.B. für „Frei“ alle auf „2“ gesetzt. Durch die Variablenänderung wird das Script „HM_Heizung_Raumsteuerung.ips.php“ getriggert, was die Profiländerung überträgt. So weit die Theorie. Was passiert ist, das die Variable geändert wird - im Web-Frontend zu sehen - aber das Profil nicht wirklich umgesetzt wird, sprich die Profil-Anzeige sich nicht ändert und auch nicht die Temperatur. Mache ich die Profiländerung händisch in der Web-Oberfläche funktioniert das sofort. Ich habe schon mit verschiedenen Pausen zwischen den Variabblenänderungen gespielt, weil ich vermutete, dass das Script (->Raumsteuerung) zu schnell und zu oft angesprochen wird, aber auch dass hat keinen Erfolg gebracht. Was mache ich falsch, hat jemand eine Idee? Danke!

//* Alle Räume auf Profil "Abwesend"
//*
SetValueInteger(28697 /*[Basis-System Haus\Basis-Funktionen\Heizung\Prog_Räume\Hobbyraum\HM_Praesenz_Profil_Auswahl_ID]*/,2);
IPS_Sleep (4000);
SetValueInteger(32660 /*[Basis-System Haus\Basis-Funktionen\Heizung\Prog_Räume\Medienzimmer\HM_Praesenz_Profil_Auswahl_ID]*/,2);
IPS_Sleep (4000);
.......

Gruß
Frank

Das sollte die Lösung sein…

Heizkörperthermostat Heizprogramme per WebFront einstellen - Seite 23

Matthias

Hallo Swifty,

ja, das ist bei deiner Vorgehensweise der Fall. Aus diesem Grund habe ich die komplette Struktur der Speicherung bei mir geändert :slight_smile:

Anders als in deinem Script speichere ich die Daten überhaupt nicht in IPS. Damit entfallen die Kategorien der Räume, das Script HM_Raumsteuerung wird nicht benötigt und - da ich nur die Kombination Heizungsthermostate mit Wandthermostaten habe - auch einige andere Komplexitäten was die Speicherung unterschiedlicher Profile betrifft. Da ich IPSView benutze entfällt zusätzlich noch die Generierung der WebFront Variablen. Den Party-Modus benötige ich ebenfalls nicht, da bei Besuch die Thermostate auf manuelle Steuerung geschaltet werden.

Ich lese jeweils die Daten des zu ändernden Temperaturprofils ein, ändere diese und schreibe sie direkt in die Gruppe zurück. Die Gruppen selbst - erzeugt durch HM_VG - brauche ich ebenfalls nicht in IPS. Für die Anzeigen wie Ventilstellung, Luftfeuchtigkeit usw. benutze ich direkt die Variablen aus den Thermostaten. Ergänzt habe ich das Ganze dann noch um das Einlesen der weiteren Profilbasisdaten, so wie diese auch in der WebGui angezeigt werden. Dies führte zu einer Erweiterung der hmxml.php - vielen Dank auch an Zapp für diese tolle Arbeit - wo nun die geänderten Parameter der Profilbasisdaten zurückgeschrieben werden.

Vereinfacht ausgedrückt ist das alles nun nichts anderes als eine komplexe Stammdatenverwaltung, bei der ich mir auch noch den Aufwand mit dem Cachen der Daten sparen konnte. Auf den Duty Cycle der CCU hat das alles keinen Einfluss, da dieser ja nur beim Zurückschreiben der Daten relevant ist und dies bei dir ja letztendlich auch geschieht.

Wenn man sich so intensiv mit dem Script beschäftigt hat erkennt man erst, welcher Aufwand und welch clevere Logik sich hinter dem Ganzen verbirgt. Da ich mich erst seit knapp einem Jahr mit IP-Symcon beschäftige habe ich sehr viel gelernt, was für Möglichkeiten einem in IP-Symcon geboten werden. Nur durch Lesen der Dokumentation und der Befehle kann man leider die Zusammenhänge nur sehr schwer erkennen :rolleyes:

Nochmals vielen Dank für deine Arbeit.

Gruß
Hans

Hallo zusammen habe leider seit dem umstieh auf 4.0 ein paar Probleme mit dem Script von swifty. Hab mir zwar aus dem letzten seiten die meisten notwendigen Änderungen raus gezogen aber irgenwie tut es immernoch nicht… Könnte jemand einen Stand hochladen der unter IPS 4.0 sicher funktioniert?? Danke.

Ich hatte gerade erst vor ein paar Tagen alle Skripte neu benutzen müssen und letztendlich nur ein Problem. Nämlich das Kopieren von Code aus diesem Thread mit dem Edge als Browser. Sowie ich endlich mal einen anderen Browser für copy benutzt hatte ging auch alles.
Was hast Du denn für Fehler?

Viele Grüße
Peter

Es werden im webfront keine Temperaturen mehr für die slots angenommen ich drücke auf 1 Grad plus es kommt in der Variable auch + 1 Grad an aber im Slot tut sich leider nix.

Gesendet von meinem ONEPLUS A3003 mit Tapatalk

Hallo hab jetzt neu aufgesetzt… Bekomme im Script HM_Edit beim speichern eines Profiles immer einen Fehler in der Zeile 105 angezeigt. In der Zeile stehe eine Abfrage auf eine Variable die bei mir aber nicht angelegt wurde…

If (HM_WochenTempProfil_prüfen($WochenProfil_Daten_edit_id) == „OK“)

ip-symcom.PNG

Weiss nicht was jetzt noch falsch ist…