Shutter Control skript für enocean

hallo und guten tag !

gibt es vielleicht das skript „Shutter Control“ auch schon für enocean?

happy day und dank ,frank

Hallo Frank,

ich kenne die Enocean Befehle nicht, aber falls Du mir die BEfehle für Hoch, runter und Stop postest, kann ich versuchen diese ins Shutterscript zu packen.

Gruß Philipp

hallo philipp!

vielen dank für dein angebot :slight_smile: ich habe den rolladen bisher nur unter ips v1 und will ihn in v2 einbinden. ich gehe aber davon aus, dass der befehl in v2 der gleich ist.

für „hoch“ wäre das: ENO_Switchmode(25172, TRUE);
für „runter“ wäre das: ENO_Switchmode(16309, TRUE);

stop ist, wenn der gleiche befehl nochmal gesendet wird.

happy day und dank, frank

Hallo verstehe ich das richtig, dass Du eine Instanz für runter und eine für Hoch hast?

Und muss der gleiche Befehl für Stop nochmal gesendet werden oder nicht vielmehr ein „false“ an die entsprechende Instanz?

Sind die beiden Instanzen gegeneinander verriegelt, so dass kein hoch und runter auf einmal möglich ist?

Gruß

Philipp

hallo philipp !

ich habe einen enocean actor an dem rolladen. der hat 2 „seiten“. die sind bei mir im ips als 2 instanzen angekommen. wenn ich die eine auf TRUE setze, geht er runter, wenn ich die andere auf TRUE setze, geht er rauf.
wenn man einen auf TRUE gesetzt hat, und das ding läuft, muss man ihn nochmal auf TRUE setzen, damit er stoppt. das ganze geht in dem fall wie ein taster. also auf TRUE und sofort wieder auf FALSE.

gegeneinander sind die kanäle entweder im aktor gesichert oder im gurtwickler der da dran angeschlossen ist.

happy day ,frank

Hallo Frank,

soweit verstanden.
Nur was passiert wenn der Stop Befehl kommt, wenn der Rolladen schon in den Endschalter geafren ist?

Ich befürchte, dass man keinen definierten STOP Befehl hinbekommt. Den beim Fahren auf 0% oder 100% werden 5 Sekunden zur Laufzeit hinzu addiert. SOmit hat man dort immer den Fall, dass der Endschalter schon aktiv ist, und erst dann wieder ein true kommt.

Gruß Philipp

hallo philipp !

wenn ich den rolladen komplett runterfahre und dann nochmal den „runter“ schalter drücke passiert einfach nix. hilft das ?

happy day und dank, frank

Ok,

das hilft :slight_smile:

Ich baus mal ein :slight_smile:

Gruß Philipp

Hallo Frank,

welches Enocean Gerät nutzt Du ?
EnOcean PTM200TX??

Brauche ich als Info.

Gruß Philipp

hallo philipp !

sorry, ich hab die frage jetzt erst gesehen. ja, ich habe den ptm200tx genommen.

happy day, frank

Hallo,

ok, dann schaue ich, dass ich das heute Abend integriert bekomme.

Gruß´Philipp

hallo philipp !

vielen dank für deine hilfe :slight_smile:

happy day ,frank

Hallo Frank,

teste mal dieses Script.


<?
//Variables provided by ShutterControl Module
//IPS_LogMessage("InstanceID", $SC_INSTANCE); /* InstanceID */
//IPS_LogMessage("Direction", $SC_DIRECTION); /* {0..2} Stop, Up, Down */
//IPS_LogMessage("Duration", $SC_DURATION); /* ms */

switch($IPS_SENDER)
{

case "ShutterControl": //Script wurde vom Shuttermodul aufgerufen

define("SC_DIRECTION_STOP", 0);
define("SC_DIRECTION_UP", 1);
define("SC_DIRECTION_DOWN", 2);

$instance = IPS_GetInstance($SC_INSTANCE);
switch($instance['ModuleInfo']['ModuleID'])
{
  case "{48FCFDC1-11A5-4309-BB0B-A0DB8042A969}": //FS20
      $running = CreateVariableByName($SC_INSTANCE, "Moving", 0);
      $value = GetValue(IPS_GetStatusVariableID($SC_INSTANCE, "StatusVariable"));
      switch($SC_DIRECTION)
      {
         case SC_DIRECTION_STOP:
          if(GetValue($running))
          {
              FS20_SwitchMode($SC_INSTANCE, $value);
              SetValue($running, false);
          }
          break;
         case SC_DIRECTION_UP:
          if(!GetValue($running))
          {
              FS20_SwitchMode($SC_INSTANCE, true);
              SetValue($running, true);
          }
          if($SC_DURATION > 999)
          {
  				  TimerDelay($SC_INSTANCE, $SC_DURATION, "FS20U");
          }
          if($SC_DURATION > 0 and $SC_DURATION <=999)
          {
  				  IPS_Sleep($SC_DURATION);
              FS20_SwitchMode($SC_INSTANCE, true);
              SetValue($running, false);
          }
          break;
         case SC_DIRECTION_DOWN:
          if(!GetValue($running))
          {
              FS20_SwitchMode($SC_INSTANCE, false);
              SetValue($running, true);
          }
          if($SC_DURATION > 999)
          {
              TimerDelay($SC_INSTANCE, $SC_DURATION, "FS20D");
          }
          if($SC_DURATION > 0 and $SC_DURATION <=999)
          {
              IPS_Sleep($SC_DURATION);
              FS20_SwitchMode($SC_INSTANCE, false);
              SetValue($running, false);
          }
          break;
      }
      break;
  case "{1B7B5B7D-CAA9-4AB5-B9D8-EC805EC955AD}": //xComfort
      switch($SC_DIRECTION)
      {
         case SC_DIRECTION_STOP:
          MXC_ShutterStop($SC_INSTANCE);
          break;
         case SC_DIRECTION_UP:
          MXC_ShutterMoveUp($SC_INSTANCE);
          if($SC_DURATION > 999)
          {
              TimerDelay($SC_INSTANCE, $SC_DURATION, "XCOM");
          }
          if($SC_DURATION > 0 and $SC_DURATION <= 999)
          {
              IPS_Sleep($SC_DURATION);
              MXC_ShutterStop($SC_INSTANCE);
          }
          break;
         case SC_DIRECTION_DOWN:
          MXC_ShutterMoveDown($SC_INSTANCE);
          if($SC_DURATION > 999)
          {
              TimerDelay($SC_INSTANCE, $SC_DURATION, "XCOM");
          }
          if($SC_DURATION > 0 and $SC_DURATION <= 999)
          {
              IPS_Sleep($SC_DURATION);
              MXC_ShutterStop($SC_INSTANCE);
          }
          break;
      }
      break;
      case "{2D871359-14D8-493F-9B01-26432E3A710F}": //LCN
      $type=LCN_GetUnit($SC_INSTANCE);
		switch($type)
		{
			case 0: //Ausgänge

		    	switch($SC_DIRECTION)
      		{
         	case SC_DIRECTION_STOP:
         	LCN_SetIntensity($SC_INSTANCE,0,0);
          	LCN_SetIntensity($SC_INSTANCE2,0,0);
          	break;
         	case SC_DIRECTION_UP:
          	LCN_SetIntensity($SC_INSTANCE,100,4);
          	if($SC_DURATION > 999)
          	{
              TimerDelay($SC_INSTANCE, $SC_DURATION, "LCNA");
          	}
          	if($SC_DURATION > 0 and $SC_DURATION <= 999)
          	{
              IPS_Sleep($SC_DURATION);
              LCN_SetIntensity($SC_INSTANCE,0,0);
          	}
          	break;
         	case SC_DIRECTION_DOWN:
          	LCN_SetIntensity($SC_INSTANCE2,100,4);
          	if($SC_DURATION > 999)
          	{
             TimerDelay($SC_INSTANCE2, $SC_DURATION, "LCNA");
          	}
          	if($SC_DURATION > 0 and $SC_DURATION <= 999)
          	{
              IPS_Sleep($SC_DURATION);
              LCN_SetIntensity($SC_INSTANCE2,0,0);
          	}
          	break;
      		}
      	break;

      	case 2: //Relais
      	switch($SC_DIRECTION)
      		{
         	case SC_DIRECTION_STOP:
         	LCN_SwitchRelay($SC_INSTANCE,false);
          	break;
         	case SC_DIRECTION_UP:
          	LCN_SwitchRelay($SC_INSTANCE,true);
          	LCN_SwitchRelay($SC_INSTANCE2,false); // Um Relaisrichtung zu ändern bitte auf true
          	if($SC_DURATION > 999)
          	{
					TimerDelay($SC_INSTANCE, $SC_DURATION, "LCNR");
				}
				if($SC_DURATION > 0 and $SC_DURATION <= 999)
          	{
              IPS_Sleep($SC_DURATION);
              LCN_SwitchRelay($SC_INSTANCE, false);
          	}
          	break;
         	case SC_DIRECTION_DOWN:
          	LCN_SwitchRelay($SC_INSTANCE,true);
          	LCN_SwitchRelay($SC_INSTANCE2,true);// Um Relaisrichtung zu ändern bitte auf false
          	if($SC_DURATION > 999)
          	{
              	TimerDelay($SC_INSTANCE, $SC_DURATION, "LCNR");
          	}
          	if($SC_DURATION > 0 and $SC_DURATION <= 999)
          	{
              IPS_Sleep($SC_DURATION);
              LCN_SwitchRelay($SC_INSTANCE, false);
          	}
          	break;
      		}
      	break;
			}
      	break;
      	
      	case "{8492CEAF-ED62-4634-8A2F-B09A7CEDDE5B}": //Enocean
          	switch($SC_DIRECTION)
      		{
         	case SC_DIRECTION_STOP:
         	ENO_SwitchMode($SC_INSTANCE,true);
          	ENO_SwitchMode($SC_INSTANCE2,true);
          	break;
         	case SC_DIRECTION_UP:
          	ENO_SwitchMode($SC_INSTANCE,true);
          	if($SC_DURATION > 999)
          	{
              TimerDelay($SC_INSTANCE, $SC_DURATION, "ENO");
          	}
          	if($SC_DURATION > 0 and $SC_DURATION <= 999)
          	{
              IPS_Sleep($SC_DURATION);
              ENO_SwitchMode($SC_INSTANCE,true);
          	}
          	break;
         	case SC_DIRECTION_DOWN:
          	ENO_SwitchMode($SC_INSTANCE2,true);
          	if($SC_DURATION > 999)
          	{
             TimerDelay($SC_INSTANCE2, $SC_DURATION, "ENO");
          	}
          	if($SC_DURATION > 0 and $SC_DURATION <= 999)
          	{
              IPS_Sleep($SC_DURATION);
              ENO_SwitchMode($SC_INSTANCE2,true);
          	}
          	break;
      		}
      	break;
      	
  case "{9317CC5B-4E1D-4440-AF3A-5CC7FB42CCAA}": //1-Wire Shutter
      switch($SC_DIRECTION)
      {
         case SC_DIRECTION_STOP:
           OneWireShutter($SC_INSTANCE, 0, $SC_DURATION);
          break;
         case SC_DIRECTION_UP:
           if($SC_DURATION == 0)
             $SC_DURATION = 120000;
           OneWireShutter($SC_INSTANCE, 0, $SC_DURATION);
          break;
         case SC_DIRECTION_DOWN:
           if($SC_DURATION == 0)
             $SC_DURATION = 120000;
           OneWireShutter($SC_INSTANCE, 1, $SC_DURATION);
          break;
      }
    break;
    case "{EE4A81C6-5C90-4DB7-AD2F-F6BBD521412E}": //Homematic Shutter
      switch($SC_DIRECTION)
      {
         case SC_DIRECTION_STOP:
              HM_WriteValueBoolean($SC_INSTANCE, "STOP", true);
          break;
         case SC_DIRECTION_UP:
              HM_WriteValueFloat($SC_INSTANCE, "LEVEL", 1.0);
          if($SC_DURATION > 999)
          {
              TimerDelay($SC_INSTANCE, $SC_DURATION, "HOME");
          }
          if($SC_DURATION > 0 and $SC_DURATION <=999)
          {
              IPS_Sleep($SC_DURATION);
              HM_WriteValueBoolean($SC_INSTANCE, "STOP", true);
          }
           break;
         case SC_DIRECTION_DOWN:
              HM_WriteValueFloat($SC_INSTANCE, "LEVEL", 0.0);
          if($SC_DURATION > 999)
          {
              TimerDelay($SC_INSTANCE, $SC_DURATION, "HOME");
          }
          if($SC_DURATION > 0 and $SC_DURATION <=999)
          {
              IPS_Sleep($SC_DURATION);
              HM_WriteValueBoolean($SC_INSTANCE, "STOP", true);
          }
           break;
      }
    break;
  default:
    die("No Handler for Module ".$instance['ModuleInfo']['ModuleName']." found");
}
break;

case "TimerEvent": //Script wurde von einem Ereignis aufgerufen

IPS_SetEventActive($IPS_EVENT, false);    //Ereignis deaktivieren
$timer=IPS_GetName($IPS_EVENT);
$SCT_INSTANCE = intval(substr($timer,-5,5));
$bus = substr($timer,0,-5);

	switch ($bus)
	{
	case "LCNA":
	LCN_SetIntensity($SCT_INSTANCE,0,0);
	break;

	case "LCNR":
	LCN_SwitchRelay($SCT_INSTANCE,false);
	break;

	case "XCOM":
	MXC_ShutterStop($SCT_INSTANCE);
	break;

	case "HOME":
	HM_WriteValueBoolean($SCT_INSTANCE, "STOP", true);
	break;
	
	case "ENO":
	ENO_SwitchMode($SCT_INSTANCE,true);
	break;

	case "FS20U":
	$running = CreateVariableByName($SCT_INSTANCE, "Moving", 0);
		FS20_SwitchMode($SCT_INSTANCE, true);
   	SetValue($running, false);
	break;

	case "FS20D":
	$running = CreateVariableByName($SCT_INSTANCE, "Moving", 0);
	   FS20_SwitchMode($SCT_INSTANCE, false);
      SetValue($running, false);
	break;

	}



break;
}


function OneWireShutter($ins, $dir, $sec) {
   @TMEX_F29_SetStrobe($ins, True);
   $res = ($dir * 128) + ($sec / 1000);
   @TMEX_F29_SetPort((integer)$ins, (integer)$res);
}

function TimerDelay($id, $time, $bus) {
	global $IPS_SELF;
	$sekunden=intval(substr($time, 0,-3));
   $msekunden=substr($time, -3, 3);
   $timerid = IPS_GetObjectIDByName($bus.$id, $IPS_SELF);
	if ($timerid ==0)
	{
	$newtimer = IPS_CreateEvent(1);
   IPS_SetEventScript($newtimer, $IPS_SELF); //Aktuelles Skript aufrufen
   IPS_SetName($newtimer, $bus.$id);
   IPS_Sleep(intval($msekunden));
   IPS_SetEventCyclic($newtimer, 0, 0, 0, 0, 1, $sekunden);
	IPS_SetEventCyclicDateBounds($newtimer, 0, 0);
	IPS_SetEventCyclicTimeBounds($newtimer, time(), 0);
	IPS_SetEventActive($newtimer, true);    //Ereignis aktivieren
   }
   else
   {
   IPS_Sleep(intval($msekunden));
   IPS_SetEventCyclic($timerid, 0, 0, 0, 0, 1, $sekunden);
	IPS_SetEventCyclicDateBounds($timerid, 0, 0);
	IPS_SetEventCyclicTimeBounds($timerid, time(), 0);
	IPS_SetEventActive($timerid, true);    //Ereignis aktivieren
   }
}

function CreateVariableByName($id, $name, $type)
{
   global $IPS_SELF;
   $vid = @IPS_GetVariableIDByName($name, $id);
   if($vid===false) {
     $vid = IPS_CreateVariable($type);
     IPS_SetParent($vid, $id);
     IPS_SetName($vid, $name);
     IPS_SetInfo($vid, "This Variable was created by Script #$IPS_SELF");
   }
   return $vid;
}





?>

Im Shuttermodul unter Instance 1 und Instance 2 zwei Instanzen eintragen.

Einlernen und testen :slight_smile:

Der STop Button im Modul dürfte nicht richtig gehen, da mir hierfür der definierte ENO_STOP Befehl fehlt.

Beim Positionieren später sollte aber alles gehen.

Gruß Philipp

Ich werde (wohl am Wochenende) auch noch die Stopfunktion richtig integrieren. So dass das Enocean dann sauber integriert ist.

Gruß Philipp

hallo philipp !

ich werde das skript mal ausprobieren. vielen dank. aber wohl auch erst am wochenende leider. irgendwie komme ich zu nix. alle haben schon 1000 sachen mit v2 gemacht und ich steh noch immer am anfang :mad:

happy day und dank, frank

hallo philipp !

also es klappt fast :slight_smile: ich hab das skript mal übernommen und eine shutter control instanz angelegt mit den 2 enocean instanzen für „rauf“ und für „runter“. dann habe ich die messung mit „down“ angefangen. das klappt auch bis ich unten alle werte festgelegt habe. wenn ich dann aber die „rauf“ messung mache, bleibt der rollanden mittendrin stehen und ich komme nicht weiter.

mache ich da jetzt irgendwas falsch ?

happy day und dank, frank

Hallo Frank,
bin eben auf diese Dinger hier gestoßen.
Arbeitet ihr mit denen? wollte es nur mal wissen da ich sie mir zulegen wollte.
Gruß und schöne Ostern Uwe.

hallo uwe !

also ich habe den hier: EnOcean - Hausautomation - SPS - Unterputz Schaltaktor 2 Kanal 230VAC 3103000

aber: ich habe einen gurtwickler, der auf enocean „umgebaut“ wurde. daher ist das kein rolladen aktor, sondern nur ein 2. kanal aktor da die absicherung der kanäle gegeneinander im gurtwickler gemacht wird.

happy easter, frank