IPSShadowing - eine Beschattungssteuerung

Hi,

Du musst auf die neuerste Version der Beschattungsteuerung upgraden, der Fehler kam durch die neue IPS Version 2.5…

Okay danke ! Jetzt funzt es ! Gruß André


I am here: http://maps.google.com/maps?ll=51.914275,7.617641

Hallo ihr Beschatter !

Vorab danke für die tollen Scripts samt Installer und (endlich) ausreichend Doku !

Leider bekomme ich meine EIB Shutter Instanzen nicht integriert, werden diese noch nicht unterstützt ? Da es dort nur die drei Werte Auf, Ab, Stop gibt sollte das nicht so schwer sein - ich finde aber A) keine Doku zu den Weten 0-1-2 bei der EIB Shutter-Geschichte udn B) keinen Ansatz wie ich das dann über den Custom-Part im Script machen kann…

Vielleicht kann sich das einer der Cracks anschauen ? Danke !

Hallo,

ja, EIB wird zur Zeit noch nicht unterstützt. Ich hab jetzt aber einen Beitrag gefunden, wo das kurz beschrieben ist:
http://www.ip-symcon.de/forum/f32/doku-eib-knx-befehle-14176/#post127548

Also könnte der Code in der „Custom“ Ansteuerungs Variante so aussehen:


    function IPSShadowing_MoveByHardwareCustom($DeviceId, $DevicePath, $Command) {
       $DeviceName   = get_DeviceNameByDeviceId($DeviceId);
       $InstanceId   = get_InstanceIDByDevicePath($DevicePath);

       if ($Command==c_MovementId_Up) {
          EIB_Move($InstanceId, 0); //0 = Open, 2 = Stop, 4 = Close
       } elseif ($Command==c_MovementId_Down) {
          EIB_Move($InstanceId, 4); //0 = Open, 2 = Stop, 4 = Close
       } else {
          EIB_Move($InstanceId, 2); //0 = Open, 2 = Stop, 4 = Close
       }
    }

Gib bitte Bescheid falls es klappt

Hallo,
kann mir mal einer erklären wieso wenn ich auf „Hoch“ in der Steuerung drücke die Jalousie runter fährt? Wenn ich direkt den Aktor im Webfront ansteuer also ohne IPSShadowing läuft es richtig. Also 100% gleich zu.

Gruß Tim

Hallo Tim,

100% ist bei Homematic Shutter offen, 0% geschlossen (siehe auch CCU). Ich denke Du hast die Dinger verkehrt angeschlossen …

Brwonson, sieht richtungsmäßig gut aus:

Normales hoch/runter Fahren geht !

Bei allen anderen Funktionen/Befehlen meckert er:

Fatal error: Cannot redeclare IPSShadowing_MoveByHardwareCustom() (previously declared in D:\IP-Symcon\scripts\IPSShadowing_Custom.ips.php:13) in D:\IP-Symcon\scripts\IPSShadowing_Custom.ips.php on line 48

Vielen Dank fürs nochmal anschauen !

Hallo Andreas,

Ich versuche gerade IPSShadowing zu installieren.
Ich habe die jüngste zip-Datei runtergeladen.
Ich habe die Dateien in scripts kopiert.
Ich habe das Installationsscript in IPS angelegt.
Beim Ausführen kommt die Fehlermeldung, dass das Script als fehlerhaft markiert wurde.
Beim Experimentieren mit dem Script habe ich herausgefunden, dass, wenn ich im Abschnitt Program Installation die erste Zeile mit

$CategoryIdShadowing = CreateCategoryPath ($ProgramPath) ;

auskommentiere, das Script durchläuft und die Scripte unter der root.Scripts anlegt.

Die angelegten Scripte sind dann aber leer.

Was mache ich falsch?

Viele Grüße

Manfred

Hallo Manfred,

Die aktuellste Version des IPSInstallers hast Du in Verwendung?
Und poste doch mal die genaue Fehlermeldung!

Ich habe die neueste IPSInstaller Version mit deiner IPSLibrary installiert.

Wo kann ich die Fehlermeldung des Scripts auslesen? ich kenne mich da noch nicht so aus.
Ich sehe nur, dass das Script als fehlerhaft markiert wird.Danke

OK dann folgendes Vorgehen:

  • IPSLogger der Library installieren
  • Datei IPSLogger.ips.php im scripts Verzeichnis anlegen mit folgendem Inhalt:

<?
   IPSUtils_Include ('IPSLogger.inc.php',      'IPSLibrary::app::core::IPSLogger');
?>

  • IPSInstallerdownloaden und ebenfalls in Scripts Verzeichnis kopieren
  • danach Installationsscript nochmals starten

Fehler sollten direkt in der Konsole angezeigt werden und auch im IPSlogger …

Mit der neuen Installation des Loggers hat es jetzt geklappt und der Fehler ist gar nicht mehr aufgetreten, die Installation von IPSShadowing klappte jetzt auf Anhieb, prima.

Jetzt kann ich weiter machen. danke für die schnelle Hilfe.
Und auch ein Lob für Deine Arbeit.

Viele Grüße

Manfred

Andreas, ich komm mit EIB-Shadowing nicht weiter…

Normales hoch/runter Fahren geht !

Bei allen anderen Funktionen/Befehlen meckert er u.a. folgende Sachen an:

Fatal error: Cannot redeclare IPSShadowing_MoveByHardwareCustom() (previously declared in D:\IP-Symcon\scripts\IPSShadowing_Custom.ips.php:12) in D:\IP-Symcon\scripts\IPSShadowing_Custom.ips.php on line 64

oder

Vielen Dank fürs nochmal anschauen !

Poste doch mal den kompletten Inhalt des Scriptes IPSShadowing_Custom.ips.php


<?
	// ----------------------------------------------------------------------------------------------------------------------------
	//
	// Function will be called when DeviceType in Configuration File is set to c_DeviceType_Custom
	//
	// Parameters:
	//   $DeviceId   - ID of current Shadowing Device (means Program.IPSShadowing.Devices.MyCurrentDevice)
	//   $DevicePath - Configuration Value c_Property_DevicePath for current Device
	//   $Command    - Current Command, possible Values: c_MovementId_Up, c_MovementId_Down and c_MovementId_Stop
	//
	// ----------------------------------------------------------------------------------------------------------------------------
//		  function IPSShadowing_MoveByHardwareCustom($DeviceId, $DevicePath, $Command) {
//      $DeviceName   = get_DeviceNameByDeviceId($DeviceId);

//	}

	// ----------------------------------------------------------------------------------------------------------------------------
	//
	// Function will be called by the Program Timer when no manual Invervention has occured, present
	// is not activated and Automatic is enabled.
	// Shadowing can be activated as described below, to prevent other Programs from being executed,
	// the function has to return true;
	//
	// Parameters:
	//   $DeviceId   - ID of current Shadowing Device (means Program.IPSShadowing.Devices.MyCurrentDevice)
	//   $isDay      - boolean Value, indicating Day or Night
	//
	// Executing a Program:
   //   IPSShadowing_MoveByProgram($DeviceId, c_ProgramId_Opened);    // Opening
   //   IPSShadowing_MoveByProgram($DeviceId, c_ProgramId_Closed);    // Close a Shutter
   //   IPSShadowing_MoveByProgram($DeviceId, c_ProgramId_Dimout);    // Close a Jalousie
   //   IPSShadowing_MoveByProgram($DeviceId, c_ProgramId_Shadowing); // Shadowing a Jalousie
	//
	// ----------------------------------------------------------------------------------------------------------------------------

  function IPSShadowing_MoveByHardwareCustom($DeviceId, $DevicePath, $Command) {
       $DeviceName   = get_DeviceNameByDeviceId($DeviceId);
       $InstanceId   = get_InstanceIDByDevicePath($DevicePath);

       if ($Command==c_MovementId_Up) {
          EIB_Move($InstanceId, 0); //0 = Open, 2 = Stop, 4 = Close
       } elseif ($Command==c_MovementId_Down) {
          EIB_Move($InstanceId, 4); //0 = Open, 2 = Stop, 4 = Close
       } else {
          EIB_Move($InstanceId, 2); //0 = Open, 2 = Stop, 4 = Close
       }


	// ----------------------------------------------------------------------------------------------------------------------------
	//
	// Moving a Device by a other Script (like a Script for a Shutter Switch) can be done by calling then
	// Function IPSShadowing_MoveByControl
	//
	// Parameters:
	//   $DeviceId   - ID of MovementControl of Shadowing Device (means Program.IPSShadowing.Devices.MyCurrentDevice.Movement)
	//   $Command    - Command: c_MovementId_Up, c_MovementId_Down and c_MovementId_Stop
	//
	// ----------------------------------------------------------------------------------------------------------------------------

	include_once "IPSShadowing_Movement.ips.php";
	IPSShadowing_MoveByControl($ControlID, c_MovementId_Down);
	IPSShadowing_MoveByControl($ControlID, c_MovementId_Up);
	IPSShadowing_MoveByControl($ControlID, c_MovementId_Stop);
 }
?>

… der letzte Teil ist falsch, der sollte eigentlich nur veranschaulichen, wie man die Beschattung von Aussen Steuern kann…

Das sollte reichen:


<?

  function IPSShadowing_MoveByHardwareCustom($DeviceId, $DevicePath, $Command) {
       $DeviceName   = get_DeviceNameByDeviceId($DeviceId);
       $InstanceId   = get_InstanceIDByDevicePath($DevicePath);

       if ($Command==c_MovementId_Up) {
          EIB_Move($InstanceId, 0); //0 = Open, 2 = Stop, 4 = Close
       } elseif ($Command==c_MovementId_Down) {
          EIB_Move($InstanceId, 4); //0 = Open, 2 = Stop, 4 = Close
       } else {
          EIB_Move($InstanceId, 2); //0 = Open, 2 = Stop, 4 = Close
       }
 }
?> 

Tja die Zuordnung Movement und Hardware scheint nicht zu passen:

Movement:


<?
	include_once "IPSLogger.ips.php";
	include_once "IPSShadowing_Configuration.ips.php";
	include_once "IPSShadowing_Control.ips.php";
	include_once "IPSShadowing_Hardware.ips.php";
	include_once "IPSShadowing_Custom.ips.php";


	// ----------------------------------------------------------------------------------------------------------------------------
   function IPSShadowing_MoveByCommand($Command, $DeviceId) {

		switch ($Command) {
			case c_MovementId_Up;
			case c_MovementId_Down:
			case c_MovementId_Stop:
		   	IPSShadowing_MoveByHardware($DeviceId, $Command);
		   	break;
			default: 
		}

		if (GetValue(get_ControlId(c_Control_Movement, $DeviceId)) <> $Command) {
		   SetValue(get_ControlId(c_Control_Movement, $DeviceId), $Command);
		}
   }

	// ----------------------------------------------------------------------------------------------------------------------------
   function IPSShadowing_MoveByEvent($DeviceId, $Level) {
		IPSLogger_Dbg(__file__, "Received StateChange from Shutter '".IPS_GetName($DeviceId)."', NewLevel=".round($Level).", CurrentLevel=".GetValue(get_ControlId(c_Control_Position, $DeviceId)));
      if (GetValue(get_ControlId(c_Control_Position, $DeviceId)) <> $Level and
		    GetValue(get_ControlId(c_Control_StepsToDo, $DeviceId))=="") {
			IPSLogger_Inf(__file__, "Apply StateChange from Shutter '".IPS_GetName($DeviceId)."', Level=".round($Level));
		   SetValue(get_ControlId(c_Control_Movement, $DeviceId), c_MovementId_Stop);
		   SetValue(get_ControlId(c_Control_Position, $DeviceId), $Level);
	      if (!GetValue(get_ControlId(c_Control_ManualChange, $DeviceId)) and
			    GetValue(get_ControlId(c_Control_Automatic, $DeviceId))) {
	      	SetValue(get_ControlId(c_Control_ManualChange, $DeviceId), true);
	      }
			IPSShadowing_SetStatus($DeviceId);
	   }
   }

	// ----------------------------------------------------------------------------------------------------------------------------
   function IPSShadowing_MoveByProgram($DeviceId, $ProgramId, $DimoutOption=null, $TriggeredByTemp=false, $isDay=null) {
		$MovementStatus = GetValue(get_ControlId(c_Control_Movement, $DeviceId));

		$DoBeMoved = $MovementStatus;
      switch ($ProgramId) {
			case c_ProgramId_Manual:
			   break;
			case c_ProgramId_Opened:
			   $DoBeMoved = c_MovementId_Opened;
			   break;
			case c_ProgramId_OpenedOrShadowing:
			   if ($MovementStatus<>c_MovementId_Opened and $MovementStatus<>c_MovementId_Shadowing) {$DoBeMoved = c_MovementId_Shadowing;}
			   break;
			case c_ProgramId_OpenedDay:
			   if ($isDay) { $DoBeMoved = c_MovementId_Opened;}
			   break;
			case c_ProgramId_OpenedNight:
			   if (!$isDay) { $DoBeMoved = c_MovementId_Opened;}
			   break;
			case c_ProgramId_Closed:
			   $DoBeMoved = c_MovementId_Closed;
			   break;
			case c_ProgramId_Dimout:
			   $DoBeMoved = c_MovementId_Dimout;
			   break;
			case c_ProgramId_DimoutOrShadowing:
			   if ($MovementStatus<>c_MovementId_Dimout and $MovementStatus<>c_MovementId_Shadowing) {$DoBeMoved = c_MovementId_Shadowing;}
			   break;
			case c_ProgramId_DimoutAndShadowing:
			   if ($DimoutOption) {
				   $DoBeMoved = c_MovementId_Dimout;
			   } else {
				   $DoBeMoved = c_MovementId_Shadowing;
			   }
			   break;
			default:
				IPSLogger_Err(__file__, "Unknown Program $Program, DeviceId=$DeviceId");
				exit;
      }
		if ($DoBeMoved<>$MovementStatus) {
			if ($TriggeredByTemp and !GetValue(get_ControlId(c_Control_TempChange, $DeviceId))) {
				SetValue(get_ControlId(c_Control_TempChange, $DeviceId), true);
			}
			SetValue(get_ControlId(c_Control_Movement, $DeviceId), $DoBeMoved);
			IPSShadowing_Move($DeviceId);
			IPSShadowing_LogMoveByProgram($DeviceId, $ProgramId, $TriggeredByTemp);
		}
	}

	// ----------------------------------------------------------------------------------------------------------------------------
   function IPSShadowing_MoveByControl($ControlId, $Value) {
   	$ControlType = get_ControlType($ControlId);
   	$DeviceId    = get_DeviceIdByControlId($ControlId);
   	
		switch ($ControlType) {
			case c_Control_Movement:
		   	if ($Value==c_MovementId_Space) {
					return;
				} elseif (GetValue($ControlId)==$Value) {
					return;
				} else {
			      if (!GetValue(get_ControlId(c_Control_ManualChange, $DeviceId))) {
			      	SetValue(get_ControlId(c_Control_ManualChange, $DeviceId), true);
			      }
			      SetValue($ControlId, $Value);
				   IPSShadowing_Move($DeviceId);
					IPSShadowing_LogMoveByControl($DeviceId);
				}

			   break;
			default:
				IPSLogger_Err(__file__, "Unknown ControlType $ControlType, DeviceId=$DeviceId");
				exit;
		}
   }

	// ----------------------------------------------------------------------------------------------------------------------------
   function IPSShadowing_Move($DeviceId) {
      IPSShadowing_CalcNextSteps($DeviceId);
     	SetValue(get_ControlId(c_Control_Movement, $DeviceId), -1);
      IPSShadowing_ExecuteNextStep($DeviceId);
      IPSShadowing_StartRefreshTimer(true);
   }

	// ----------------------------------------------------------------------------------------------------------------------------
   function IPSShadowing_AddNextStep(&$StepsToDo, $Command, $SecondsToDo, $Display, $SecondsTotal, $PercentagePosition) {
      $Step = count($StepsToDo);
      $StepsToDo[$Step]   = $Command;
      $StepsToDo[$Step+1] = $SecondsToDo;
      $StepsToDo[$Step+2] = $Display;
      $StepsToDo[$Step+3] = $SecondsTotal;
      $StepsToDo[$Step+4] = $PercentagePosition;
	}
	
	// ----------------------------------------------------------------------------------------------------------------------------
   function IPSShadowing_CalcNextSteps($DeviceId) {
      $DeviceName   = get_DeviceNameByDeviceId($DeviceId);
      $DeviceConfig = get_ShadowingConfiguration();

      $Position     = GetValue(get_ControlId(c_Control_Position, $DeviceId));
      $ToBeMoved    = GetValue(get_ControlId(c_Control_Movement, $DeviceId));
      $StepsToDo    = array();

		//IPSShadowing_AddNextStep($StepsToDo, $ToBeMoved, 1,  '', null, null);
		if ($ToBeMoved==c_MovementId_Opened or $ToBeMoved==c_MovementId_Up) {
			$SecTotal     = $DeviceConfig[$DeviceName][c_Property_TimeOpening];
			$SecNullToPos = $SecTotal*$Position/100;
			$SecPosTo100  = $SecTotal-$SecNullToPos;
			IPSShadowing_AddNextStep($StepsToDo, c_MovementId_Up, $SecTotal-$SecPosTo100, null,    $SecTotal, $SecPosTo100);
			IPSShadowing_AddNextStep($StepsToDo, c_MovementId_Stop,   $DeviceConfig[$DeviceName][c_Property_TimePause],  'Offen (Stop)', null, null);
			IPSShadowing_AddNextStep($StepsToDo, c_MovementId_Opened, 1, null, null , null);

		} elseif ($ToBeMoved==c_MovementId_Shadowing or $ToBeMoved==c_MovementId_Down or $ToBeMoved==c_MovementId_Dimout or $ToBeMoved==c_MovementId_Closed) {
			$SecTotal     = $DeviceConfig[$DeviceName][c_Property_TimeClosing];
			$SecNullToPos = $SecTotal*$Position/100;
	      if ($ToBeMoved==c_MovementId_Dimout) {
				IPSShadowing_AddNextStep($StepsToDo, c_MovementId_Down,   $SecTotal-$SecNullToPos, null, $SecTotal, $SecNullToPos);
				IPSShadowing_AddNextStep($StepsToDo, c_MovementId_Stop,   $DeviceConfig[$DeviceName][c_Property_TimePause],  'Abdunkelung (Pause)', null, null);
				IPSShadowing_AddNextStep($StepsToDo, c_MovementId_Up,     $DeviceConfig[$DeviceName][c_Property_TimeDimoutUp], 'Abdunkelung (Hoch)', null, null);
				IPSShadowing_AddNextStep($StepsToDo, c_MovementId_Stop,   $DeviceConfig[$DeviceName][c_Property_TimePause],  'Abdunkelung (Pause)', null, null);
				IPSShadowing_AddNextStep($StepsToDo, c_MovementId_Down,   $DeviceConfig[$DeviceName][c_Property_TimeDimoutDown], 'Abdunkelung (Runter)', null, null);
				IPSShadowing_AddNextStep($StepsToDo, c_MovementId_Stop,   $DeviceConfig[$DeviceName][c_Property_TimePause],  'Abdunkelung (Stop)', null, null);
				IPSShadowing_AddNextStep($StepsToDo, c_MovementId_Dimout, 1,  null, null, null);
	      } elseif ($ToBeMoved==c_MovementId_Down) {
				IPSShadowing_AddNextStep($StepsToDo, c_MovementId_Down, $SecTotal-$SecNullToPos, null, $SecTotal, $SecNullToPos);
				IPSShadowing_AddNextStep($StepsToDo, c_MovementId_Stop, 1, null, null, null);
			} elseif ($ToBeMoved==c_MovementId_Shadowing) {
				IPSShadowing_AddNextStep($StepsToDo, c_MovementId_Down, $SecTotal-$SecNullToPos, null, $SecTotal, $SecNullToPos);
				IPSShadowing_AddNextStep($StepsToDo, c_MovementId_Stop, 1, "$Position%", null, null);
				IPSShadowing_AddNextStep($StepsToDo, c_MovementId_Up,    $DeviceConfig[$DeviceName][c_Property_TimeDimoutUp], 'Beschattung (Hoch)', null, null);
				IPSShadowing_AddNextStep($StepsToDo, c_MovementId_Stop, $DeviceConfig[$DeviceName][c_Property_TimePause],  'Beschattung (Stop)', null, null);
				IPSShadowing_AddNextStep($StepsToDo, c_MovementId_Shadowing, 1,  null, null, null);
			} else {
				IPSShadowing_AddNextStep($StepsToDo, c_MovementId_Down, $SecTotal-$SecNullToPos, null, $SecTotal, $SecNullToPos);
				IPSShadowing_AddNextStep($StepsToDo, c_MovementId_Stop, 1, "$Position%", null, null);
				IPSShadowing_AddNextStep($StepsToDo, c_MovementId_Closed, 1,  null, null, null);
			}
			
		} elseif ($ToBeMoved==c_MovementId_75 or $ToBeMoved==c_MovementId_50 or $ToBeMoved==c_MovementId_25) {
			$SecTotal     = $DeviceConfig[$DeviceName][c_Property_TimeClosing];
			$SecNullToPos = $SecTotal*$Position/100;
			$SecPosTo100  = $SecTotal-$SecNullToPos;
			if ($ToBeMoved==c_MovementId_75) {
				$SecNullToNew = $SecTotal*75/100;
				$Position     = 75;
			} elseif ($ToBeMoved==c_MovementId_50) {
				$SecNullToNew = $SecTotal*50/100;
				$Position     = 50;
			} else {
				$SecNullToNew = $SecTotal*25/100;
				$Position     = 25;
			}
			if ($SecNullToNew > $SecNullToPos) {
				IPSShadowing_AddNextStep($StepsToDo, c_MovementId_Down, $SecNullToNew-$SecNullToPos, null, $SecTotal, $SecNullToPos);
			} elseif ($SecNullToNew < $SecNullToPos) {
				IPSShadowing_AddNextStep($StepsToDo, c_MovementId_Up, $SecNullToPos-$SecNullToNew, null, $SecTotal, $SecPosTo100);
			} else {
			}
			IPSShadowing_AddNextStep($StepsToDo, c_MovementId_Stop, 1, "$Position%", null, null);
			IPSShadowing_AddNextStep($StepsToDo, $ToBeMoved,        1, null, null, null);

		} elseif ($ToBeMoved==c_MovementId_Stop) {
			IPSShadowing_AddNextStep($StepsToDo, c_MovementId_Stop, 1, null, null, null);

		} else {
			IPSLogger_Err(__file__, "Unknown MovementId $ToBeMoved, DeviceId=$DeviceId");
			exit;
		}

      SetValue(get_ControlId(c_Control_StepsToDo, $DeviceId), implode('|', $StepsToDo));
      SetValue(get_ControlId(c_Control_Step,      $DeviceId), -5);
   }

	// ----------------------------------------------------------------------------------------------------------------------------
   function IPSShadowing_ExecuteNextStep($DeviceId) {
      $DeviceName    = get_DeviceNameByDeviceId($DeviceId);
		$Step          = GetValue(get_ControlId(c_Control_Step, $DeviceId))+5;

      $NextStepsToDo = GetValue(get_ControlId(c_Control_StepsToDo, $DeviceId));
      $NextStepsToDo = Explode('|', $NextStepsToDo);

		if ($Step < count($NextStepsToDo)) {
			$Command = $NextStepsToDo[$Step];
			$Time    = $NextStepsToDo[$Step+1];
			IPSLogger_Trc(__file__, "Shadowing for Device '$DeviceName', Step $Step, Command=$Command, Time=$Time");
			IPSShadowing_MoveByCommand($Command, $DeviceId);

	      SetValue(get_ControlId(c_Control_Step, $DeviceId),      $Step);
	      SetValue(get_ControlId(c_Control_StartTime, $DeviceId), time());
		} else {
			IPSLogger_Dbg(__file__, "Finished all Steps for Device '$DeviceName'");
	      SetValue(get_ControlId(c_Control_StepsToDo, $DeviceId), "");
	      SetValue(get_ControlId(c_Control_Step, $DeviceId),      -1);
	      SetValue(get_ControlId(c_Control_StartTime, $DeviceId), -1);
	      IPSShadowing_StartRefreshTimer(false);
	      IPSShadowing_SetStatus($DeviceId);
		}
   }

	// ----------------------------------------------------------------------------------------------------------------------------
	function IPSShadowing_Refresh() {
	   $DeviceIds = IPS_GetChildrenIds(c_ID_Devices);
		foreach($DeviceIds as $DeviceId) {
		   if (GetValue(get_ControlId(c_Control_Step, $DeviceId)) >= 0) {
      		$NextStepsToDo = Explode('|', GetValue(get_ControlId(c_Control_StepsToDo, $DeviceId)));
      		$StepCount     = count($NextStepsToDo);
      		$Step          = GetValue(get_ControlId(c_Control_Step, $DeviceId));
      		$StartTime     = GetValue(get_ControlId(c_Control_StartTime, $DeviceId));
				$SecsDone      = time()-$StartTime;
				$SecsToDo      = $NextStepsToDo[$Step+1];
				$Display       = $NextStepsToDo[$Step+2];
				$SecsTotal     = $NextStepsToDo[$Step+3];
				$SecStepBegin  = $NextStepsToDo[$Step+4];
				$Command       = $NextStepsToDo[$Step];

				if ($SecsTotal <> null) {
					//  SecTotal   ... 100%
					//  Begin+Done ...   x%
   	         $Position       = round(($SecStepBegin+$SecsDone)*100/$SecsTotal);
   	         if ($Command==c_MovementId_Up) {
   	            $Position = 100-$Position;
   	         }
   	         if ($Position>100) {$Position=100;}
   	         if ($Position<0)   {$Position=0;}
	      		SetValue(get_ControlId(c_Control_Position, $DeviceId), $Position);
					$SecsOpen      = $SecsToDo-$SecsDone;
					if ($SecsOpen < 0) {$SecsOpen=0;}
					$Display = "$Position% ($SecsOpen Sek)";
				}

				if ($Display!=null) {
	      		SetValue(get_ControlId(c_Control_Display, $DeviceId), $Display);
				}

				if ($SecsDone >= $SecsToDo) {
			      IPSShadowing_ExecuteNextStep($DeviceId);
				}
		   }
		}
	}

	// ----------------------------------------------------------------------------------------------------------------------------
   function IPSShadowing_StartRefreshTimer($Value) {
	   $Name    = 'Refresh';
	   $TimerId = @IPS_GetEventIDByName($Name, c_ID_RefreshTimerScript);
	   if ($TimerId === false) {
 			$TimerId = IPS_CreateEvent(1 /*Cyclic Event*/);
   		IPS_SetName($TimerId, $Name);
   		IPS_SetParent($TimerId, c_ID_RefreshTimerScript);
			if (!IPS_SetEventCyclic($TimerId, 2 /*Daily*/, 1 /*Int*/,0 /*Days*/,0/*DayInt*/,1/*TimeType Sec*/,1/*Sec*/)) {
				IPSLogger_Err(__file__, "IPS_SetEventCyclic failed for Refresh Timer!!!");
				exit;
			}
		}
		if ($Value) {
	   	IPS_SetEventActive($TimerId, true);
		} else {
		   $OneOrMoreDevicesActive = false;
		   $DeviceIds             = IPS_GetChildrenIds(c_ID_Devices);
			foreach($DeviceIds as $DeviceId) {
			   $OneOrMoreDevicesActive = ($OneOrMoreDevicesActive or GetValue(get_ControlId(c_Control_StepsToDo, $DeviceId))<>null);
			}
			if (!$OneOrMoreDevicesActive) {
		   	IPS_SetEventActive($TimerId, false);
			}
   	}
   }

?>

Hardware:


<?
	// ----------------------------------------------------------------------------------------------------------------------------
	function get_InstanceIDByDevicePath($Path) {
		$ObjId = false;
		foreach (explode('.',$Path) as $Idx=>$Category) {
		   $ObjId = @IPS_GetObjectIDByName($Category, $ObjId);
		   if ($ObjId===false) {
			   if (@IPS_InstanceExists((int)$Path)) {
			      return (int)$Path;
				}
				return false;
			}
		}
		
		return $ObjId;
	}


	// ----------------------------------------------------------------------------------------------------------------------------
   function IPSShadowing_MoveByHardwareShutterModule($DeviceId, $DevicePath, $Command) {
	   $InstanceId = get_InstanceIDByDevicePath($DevicePath);
  		if ($InstanceId===false) {
     		IPSLogger_Wrn(__file__, "Device $DevicePath could NOT be found to activate Shadowing for a 'ShutterModule' Device");
  		} elseif ($Command==c_MovementId_Up) {
     		IPSLogger_Dbg(__file__, "Move Up of Shadowing Device $DevicePath: call SC_MoveUp($InstanceId,0)");
			SC_MoveUp($InstanceId,0);
  		} elseif ($Command==c_MovementId_Down) {
     		IPSLogger_Dbg(__file__, "Move Down of Shadowing Device $DevicePath: call SC_MoveDown($InstanceId,0)");
			SC_MoveDown($InstanceId,0);
		} else {
     		IPSLogger_Dbg(__file__, "Stop of Shadowing Device $DevicePath: call SC_Stop($InstanceId)");
			SC_Stop($InstanceId);
		}
	}

	// ----------------------------------------------------------------------------------------------------------------------------
   function IPSShadowing_MoveByHardwareMoellerEaton($DeviceId, $DevicePath, $Command) {
	   $InstanceId = get_InstanceIDByDevicePath($DevicePath);
  		if ($InstanceId===false) {
     		IPSLogger_Wrn(__file__, "Device $DevicePath could NOT be found to activate Shadowing for a 'MoellerEaton' Device");
  		} elseif ($Command==c_MovementId_Up) {
     		IPSLogger_Dbg(__file__, "Move Up of Shadowing Device $DevicePath: call MXC_ShutterMoveUp($InstanceId)");
			MXC_ShutterMoveUp($InstanceId);
  		} elseif ($Command==c_MovementId_Down) {
     		IPSLogger_Dbg(__file__, "Move Down of Shadowing Device $DevicePath: call MXC_ShutterMoveDown($InstanceId)");
			MXC_ShutterMoveDown($InstanceId);
		} else {
     		IPSLogger_Dbg(__file__, "Stop of Shadowing Device $DevicePath: call MXC_ShutterStop($DeviceId)");
			MXC_ShutterStop($InstanceId);
		}
	}

	// ----------------------------------------------------------------------------------------------------------------------------
   function IPSShadowing_MoveByHardwareHomematic($DeviceId, $DevicePath, $Command) {
	   $InstanceId = get_InstanceIDByDevicePath($DevicePath);
  		if ($InstanceId===false) {
     		IPSLogger_Wrn(__file__, "Device $DevicePath could NOT be found to activate Shadowing for a 'Homematic' Device");
  		} elseif ($Command==c_MovementId_Up) {
     		IPSLogger_Dbg(__file__, "Move Up of Shadowing Device $DevicePath: call HM_WriteValueFloat($InstanceId , 'LEVEL', 1)");
			HM_WriteValueFloat($InstanceId , 'LEVEL', 1);
  		} elseif ($Command==c_MovementId_Down) {
     		IPSLogger_Dbg(__file__, "Move Down of Shadowing Device $DevicePath: call HM_WriteValueFloat($InstanceId , 'LEVEL', 0)");
			HM_WriteValueFloat($InstanceId , 'LEVEL', 0);
		} else {
     		IPSLogger_Dbg(__file__, "Stop of Shadowing Device $DevicePath: call HM_WriteValueBoolean($InstanceId , 'STOP', true)");
			HM_WriteValueBoolean($InstanceId , 'STOP', true);
		}
	}

	// ----------------------------------------------------------------------------------------------------------------------------
   function IPSShadowing_MoveByHardwareEnocean($DeviceId, $DevicePath, $Command) {
      $MovementId = GetValue(get_ControlId(c_Control_Movement, $DeviceId));
	   $InstanceId = get_InstanceIDByDevicePath($DevicePath);
  		if ($InstanceId===false) {
     		IPSLogger_Wrn(__file__, "Device $DevicePath could NOT be found to activate Shadowing for a 'Enocean' Device");
  		} elseif ($Command==c_MovementId_Up) {
  		   if ($MovementId<>c_MovementId_Up and $MovementId<>c_MovementId_Down) {
	     		IPSLogger_Dbg(__file__, "Move Up of Shadowing Device $DevicePath: call ENO_SwitchMode($InstanceId, true)");
				ENO_SwitchMode($InstanceId, true);
			}
  		} elseif ($Command==c_MovementId_Down) {
  		   if ($MovementId<>c_MovementId_Up and $MovementId<>c_MovementId_Down) {
	     		IPSLogger_Dbg(__file__, "Move Down of Shadowing Device $DevicePath: call ENO_SwitchMode($InstanceId, false)");
				ENO_SwitchMode($InstanceId, false);
			}
		} else {
  		   if ($MovementId==c_MovementId_Up) {
	     		IPSLogger_Dbg(__file__, "Stop of Shadowing Device $DevicePath: call ENO_SwitchMode($InstanceId, true)");
				ENO_SwitchMode($InstanceId, true);
  		   } elseif ($MovementId==c_MovementId_Down) {
	     		IPSLogger_Dbg(__file__, "Stop of Shadowing Device $DevicePath: call ENO_SwitchMode($InstanceId, false)");
				ENO_SwitchMode($InstanceId, false);
			} else {
			}
		}
	}

	// ----------------------------------------------------------------------------------------------------------------------------
   function IPSShadowing_MoveByHardware1Wire($DeviceId, $DevicePath, $Command) {
	   $InstanceId = get_InstanceIDByDevicePath($DevicePath);
  		if ($InstanceId===false) {
     		IPSLogger_Wrn(__file__, "Device $DevicePath could NOT be found to activate Shadowing for a '1Wire' Device");
  		} elseif ($Command==c_MovementId_Up) {
     		IPSLogger_Dbg(__file__, "Move Up of Shadowing Device $DevicePath: call @TMEX_F29_SetStrobe($InstanceId, True); @TMEX_F29_SetPort((integer)$InstanceId, (integer)120+128);");
   		@TMEX_F29_SetStrobe($InstanceId, True);
   		@TMEX_F29_SetPort((integer)$InstanceId, (integer)120+128);
  		} elseif ($Command==c_MovementId_Down) {
     		IPSLogger_Dbg(__file__, "Move Down of Shadowing Device $DevicePath: call @TMEX_F29_SetStrobe($InstanceId, True); @TMEX_F29_SetPort((integer)$InstanceId, (integer)120);");
   		@TMEX_F29_SetStrobe($InstanceId, True);
   		@TMEX_F29_SetPort((integer)$InstanceId, (integer)120);
		} else {
     		IPSLogger_Dbg(__file__, "Stop of Shadowing Device $DevicePath: call @TMEX_F29_SetStrobe($InstanceId, True); @TMEX_F29_SetPort((integer)$InstanceId, (integer)0);");
   		@TMEX_F29_SetStrobe($InstanceId, True);
   		@TMEX_F29_SetPort((integer)$InstanceId, (integer)0);
		}
	}

	// ----------------------------------------------------------------------------------------------------------------------------
   function IPSShadowing_MoveByHardwareLCN($DeviceId, $DevicePath, $Command) {
      $DeviceName   = get_DeviceNameByDeviceId($DeviceId);
      $DeviceConfig = get_ShadowingConfiguration();
		$DevicePath2  = $DeviceConfig[$DeviceName][c_Property_DevicePath2];
	   $InstanceId1  = get_InstanceIDByDevicePath($DevicePath);
	   $InstanceId2  = get_InstanceIDByDevicePath($DevicePath2);

  		if ($InstanceId1===false or $InstanceId2===false) {
     		IPSLogger_Wrn(__file__, "Devices $DevicePath, $DevicePath2 could NOT be found to activate Shadowing for a 'LCN' Device");
     		return;
		}
		
      $type=LCN_GetUnit($InstanceId1);
      switch($type) {
         case 0:
		  		if ($Command==c_MovementId_Up) {
		     		IPSLogger_Dbg(__file__, "Move Up of Shadowing Device $DevicePath: call LCN_SetIntensity($InstanceId1,100,4);");
         		LCN_SetIntensity($InstanceId1,100,4);
		  		} elseif ($Command==c_MovementId_Down) {
		     		IPSLogger_Dbg(__file__, "Move Down of Shadowing Device $DevicePath: call LCN_SetIntensity($InstanceId2,100,4);");
         		LCN_SetIntensity($InstanceId2,100,4);
				} else {
		     		IPSLogger_Dbg(__file__, "Stop of Shadowing Device $DevicePath: call LCN_SetIntensity($InstanceId1,0,0); LCN_SetIntensity($InstanceId2,0,0);");
		      	LCN_SetIntensity($InstanceId1,0,0);
		         LCN_SetIntensity($InstanceId2,0,0);
				}
				break;

         case 2:
		  		if ($Command==c_MovementId_Up) {
		     		IPSLogger_Dbg(__file__, "Move Up of Shadowing Device $DevicePath: call LCN_SetIntensity($InstanceId1,100,4);");
					LCN_SwitchRelay($InstanceId1, true);
					LCN_SwitchRelay($InstanceId2, false); // Um Relaisrichtung zu ändern bitte auf true
 		  		} elseif ($Command==c_MovementId_Down) {
		     		IPSLogger_Dbg(__file__, "Move Down of Shadowing Device $DevicePath: call LCN_SetIntensity($InstanceId2,100,4);");
					LCN_SwitchRelay($InstanceId1, true);
					LCN_SwitchRelay($InstanceId2, true); // Um Relaisrichtung zu ändern bitte auf false
 				} else {
		     		IPSLogger_Dbg(__file__, "Stop of Shadowing Device $DevicePath: call LCN_SwitchRelay($InstanceId1,false;");
             	LCN_SwitchRelay($InstanceId1,false);
				}
				break;

			default:
     			IPSLogger_Err(__file__, "Unknown LCNType $type found for LCN Instance $InstanceId1");
				exit;
		}
	}

	// ----------------------------------------------------------------------------------------------------------------------------
   function IPSShadowing_MoveByHardwareFS20($DeviceId, $DevicePath, $Command) {
      $MovementId = GetValue(get_ControlId(c_Control_Movement, $DeviceId));
	   $InstanceId = get_InstanceIDByDevicePath($DevicePath);
  		if ($InstanceId===false) {
     		IPSLogger_Wrn(__file__, "Device $DevicePath could NOT be found to activate Shadowing for a 'Enocean' Device");
  		} elseif ($Command==c_MovementId_Up) {
  		   if ($MovementId<>c_MovementId_Up and $MovementId<>c_MovementId_Down) {
	     		IPSLogger_Dbg(__file__, "Move Up of Shadowing Device $DevicePath: call FS20_SwitchMode($InstanceId, true)");
				FS20_SwitchMode($InstanceId, true);
			} else {
	     		IPSLogger_Dbg(__file__, "Shadowing Device $DevicePath is already in Status '$MovementId' MoveUp/MoveDown,  !!!");
			}
  		} elseif ($Command==c_MovementId_Down) {
  		   if ($MovementId<>c_MovementId_Up and $MovementId<>c_MovementId_Down) {
	     		IPSLogger_Dbg(__file__, "Move Down of Shadowing Device $DevicePath: call FS20_SwitchMode($InstanceId, false)");
				FS20_SwitchMode($InstanceId, false);
			} else {
	     		IPSLogger_Dbg(__file__, "Shadowing Device $DevicePath is already in Status '$MovementId' MoveUp/MoveDown,  !!!");
			}
		} else {
  		   if ($MovementId==c_MovementId_Up) {
	     		IPSLogger_Dbg(__file__, "Stop of Shadowing Device $DevicePath: call FS20_SwitchMode($InstanceId, true)");
				FS20_SwitchMode($InstanceId, true);
  		   } elseif ($MovementId==c_MovementId_Down) {
	     		IPSLogger_Dbg(__file__, "Stop of Shadowing Device $DevicePath: call FS20_SwitchMode($InstanceId, false)");
				FS20_SwitchMode($InstanceId, false);
			} else {
			}
		}
	}

	// ----------------------------------------------------------------------------------------------------------------------------
   function get_DeviceTypeByInstanceId($InstanceId) {
		$DeviceInfo = IPS_GetInstance($InstanceId);
		switch($DeviceInfo['ModuleInfo']['ModuleID']) {
  			case "{48FCFDC1-11A5-4309-BB0B-A0DB8042A969}": //FS20
  			   $DeviceType = c_DeviceType_FS20;
  			   break;
			case "{1B7B5B7D-CAA9-4AB5-B9D8-EC805EC955AD}": //xComfort
  			   $DeviceType = c_DeviceType_MoellerEaton;
  			   break;
			case "{2D871359-14D8-493F-9B01-26432E3A710F}": //LCN
  			   $DeviceType = c_DeviceType_LCN;
  			   break;
			case "{9317CC5B-4E1D-4440-AF3A-5CC7FB42CCAA}": //1-Wire Shutter
  			   $DeviceType = c_DeviceType_1Wire;
  			   break;
			case "{EE4A81C6-5C90-4DB7-AD2F-F6BBD521412E}": //Homematic Shutter
  			   $DeviceType = c_DeviceType_Homematic;
  			   break;
			case "{8492CEAF-ED62-4634-8A2F-B09A7CEDDE5B}": //enocean
  			   $DeviceType = c_DeviceType_Enocean;
  			   break;
			case "{542CC907-CA63-4E7A-A8C7-92F74639FA4C}": //Shutter Module
  			   $DeviceType = c_DeviceType_ShutterModule;
  			   break;
			default:
			   IPSLogger_Err(__file__, "Automatic Activation NOT supported for ModuleID ".$DeviceInfo['ModuleInfo']['ModuleID']);
			   exit;

		}
		return $DeviceType;
	}

	// ----------------------------------------------------------------------------------------------------------------------------
   function IPSShadowing_MoveByHardware($DeviceId, $Command) {
      $DeviceName   = get_DeviceNameByDeviceId($DeviceId);
      $DeviceConfig = get_ShadowingConfiguration();
		$DeviceType   = $DeviceConfig[$DeviceName][c_Property_DeviceType];
		$DevicePath   = $DeviceConfig[$DeviceName][c_Property_DevicePath];

		if ($DeviceType==c_DeviceType_Auto) {
		   $InstanceId = get_InstanceIDByDevicePath($DevicePath);
	  		if ($InstanceId===false) {
	     		IPSLogger_Wrn(__file__, "Device $DevicePath could NOT be found to activate Shadowing");
	     		return;
			}
			$DeviceType = get_DeviceTypeByInstanceId($InstanceId);
		}

		switch($DeviceType) {
		   case c_DeviceType_Homematic:
		      IPSShadowing_MoveByHardwareHomematic($DeviceId, $DevicePath, $Command);
		      break;
		   case c_DeviceType_MoellerEaton:
		      IPSShadowing_MoveByHardwareMoellerEaton($DeviceId, $DevicePath, $Command);
		      break;
		   case c_DeviceType_LCN:
		      IPSShadowing_MoveByHardwareLCN($DeviceId, $DevicePath, $Command);
		      break;
		   case c_DeviceType_Enocean:
		      IPSShadowing_MoveByHardwareEnocean($DeviceId, $DevicePath, $Command);
		      break;
		   case c_DeviceType_FS20:
		      IPSShadowing_MoveByHardwareFS20($DeviceId, $DevicePath, $Command);
		      break;
		   case c_DeviceType_1Wire:
		      IPSShadowing_MoveByHardware1Wire($DeviceId, $DevicePath, $Command);
		      break;
		   case c_DeviceType_ShutterModule:
		      IPSShadowing_MoveByHardwareShutterModule($DeviceId, $DevicePath, $Command);
		      break;
		   case c_DeviceType_Custom:
		      IPSShadowing_MoveByHardwareCustom($DeviceId, $DevicePath, $Command);
		      break;
			default:
			   IPSLogger_Err(__file__, "Unknown DeviceType '$DeviceType' for Shadowing of Device '$DeviceName'");
			   exit;
		}
	}

?>

Da stimmt glaub ich an der Konfiguration was nicht. Starte nochmals das Installations Script und poste auch nochmals Deine Konfiguration…

Nur den Installer ausführen hat nichts gebracht.

Evtl. ist hier im EIB-Shutter ein Fehler ?

Config :


<?
	include_once "IPSShadowing_Constants.ips.php";

	// Common Configuration Settings
	// --------------------------------------------------------------------------
	define ("c_Setting_TempOutdoorPath",	"");
	define ("c_Setting_TempIndoorPath",		"");

	// Present Configuration
	define ("c_Setting_PresentPath",			"");

	// Twillight Configuration
	define ("c_Setting_TwilightBODPath",			"");
	define ("c_Setting_TwilightEODPath",			"");
	define ("c_Setting_TwilightLimitedBODPath",	"");
	define ("c_Setting_TwilightLimitedEODPath",	"");

	// Logging List Length
	define ("c_LogMessage_Count",					9);

	// Device Configuration
	// --------------------------------------------------------------------------
	function get_ShadowingConfiguration() {
	   return array(
	      "Wohnen"  	=>	array(
				c_Property_ShadowingType	=> 	c_ShadowingType_Shutter,
				c_Property_DeviceType      =>    c_DeviceType_Custom,
				c_Property_DevicePath      =>    'Program.IPSShadowing.Devices.RolladenWohnen',
				c_Property_DevicePath2     =>    '',
				c_Property_TimeOpening		=> 	73,
				c_Property_TimeClosing		=> 	73,
				c_Property_TimeDimoutUp		=> 	1,
				c_Property_TimeDimoutDown	=> 	1,
				c_Property_TimePause			=> 	1,
				),


	   );
 }
?>

Das Device hat den Namen „Küche“, sollte aber den Namen „Wohnen“ haben --> ändere es mal manuell oder Löschen+NeuInstallation…