ShutterControl auch mit HM-LC-Sw4-PCB möglich?

Hallo,

kann ich das ShutterControl auch verwenden, wenn die Rolläden per HM-LC-Sw4-PCB und 230V-Relais anschaltet sind. Habe im Modul die HM-Instanz (für hoch) als erste Sendeinstanz eingetragen; die für runter als zweite Sendeinstanz. Als Aktionsscript dienst das folgende:

<?
//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 */

if($IPS_SENDER != "ShutterControl")
 die("This script can only be started by the ShutterControl Module");

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 "{EE4A81C6-5C90-4DB7-AD2F-F6BBD521412E}": //Homematic Shutter
      switch($SC_DIRECTION)
      {
         case SC_DIRECTION_STOP:
              HM_WriteValueBoolean($SC_INSTANCE, "STATE", false);
              HM_WriteValueBoolean($SC_INSTANCE2, "STATE", false);
          break;
         case SC_DIRECTION_UP:
              HM_WriteValueBoolean($SC_INSTANCE, "STATE", true);
          if($SC_DURATION > 0)
          {
              IPS_Sleep($SC_DURATION);
              HM_WriteValueBoolean($SC_INSTANCE, "STATE", false);
          }
           break;
         case SC_DIRECTION_DOWN:
              HM_WriteValueBoolean($SC_INSTANCE2, "STATE", true);
          if($SC_DURATION > 0)
          {
              IPS_Sleep($SC_DURATION);
              HM_WriteValueBoolean($SC_INSTANCE2, "STATE", false);
          }
           break;
      }
    break;
  default:
    die("No Handler for Module ".$instance['ModuleInfo']['ModuleName']." found");
}

?>

Einmessen geht nicht.

EDIT: Hatte soeben bei LCN abgucken wollen … leider auch ohne Erfolge. Ich hatte gehofft, per $SC_INSTANCE2 die zweite im Modul eingetragene Instanz ansprechen zu können. Script ist oben aktualisiert.

EDIT2: Über bei drei Button ganz unten im Modul kann ich den Rolladen in die jeweils richtige Richtung bewegen und bei STOP ist auch wirklich stop. Anhand der Zeiten der STATE-Variablen der HM-Instanzen sehe, ich diese beide angesrochen werden. Somit gehe ich doch davon aus, das $SC_INSTANCE2 der richtige Weg ist. Leider ist nun kein Einmessen möglich.

Werde leider nicht ganz schlau aus dem Ganzen. :confused:

Was willst Du wissen ?

Gruß
Bruno

Das geht. Habe das schon länger erfolgreich so laufen.
Mein abgeändertes 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 */

if($IPS_SENDER != "ShutterControl")
 die("This script can only be started by the ShutterControl Module");

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 "{EE4A81C6-5C90-4DB7-AD2F-F6BBD521412E}": //Homematic Shutter
      switch($SC_DIRECTION)
      {
         case SC_DIRECTION_STOP:
              HM_WriteValueBoolean($SC_INSTANCE , "STATE" , false);
          break;
         case SC_DIRECTION_UP:
              HM_WriteValueBoolean($SC_INSTANCE , "STATE" , true);
          if($SC_DURATION > 0)
          {
              IPS_Sleep($SC_DURATION);
              HM_WriteValueBoolean($SC_INSTANCE , "STATE" , false);
          }
           break;
         case SC_DIRECTION_DOWN:
              HM_WriteValueBoolean($SC_INSTANCE2 , "STATE" , true);
          if($SC_DURATION > 0)
          {
              IPS_Sleep($SC_DURATION);
              HM_WriteValueBoolean($SC_INSTANCE2 , "STATE" , false);
          }
           break;
      }
    break;
  default:
    die("No Handler for Module ".$instance['ModuleInfo']['ModuleName']." found");
}


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;
}

?>

Hi,

wie kann ich die Rollöden einmessen? Da es keine Doku dafür gibt, gilt probieren. Ich kann Hoch, Stop, Runter erfolgreich klicken. Auch Werte manuell eintragen und dann auf Position fahren geht. Nur das Einmessen nicht. Warum?

Ich dachte deine Frage galt der 2.Instanz…

Ich glaube mich zu erinnern (ca. 8 Monate her), dass ich verzweifelt (nach mehreren Versuchen) auch die Zeiten mit einer Stoppuhr genommen und dann manuell eingetragen habe…

Upps., nancilla - deinen Kommentar hatte ich vorhin gar nicht gesehen…

Ja, ich habe - wie im Screenshot zu sehen - die Zeiten auch manuell eingetragen. Damit scheint es zu gehen.

Wie bewegst Du den Rolladen denn? Mit einem der SC_…-Befehle und welchen Parametern?

Keine Doku :confused:

Shutter Control: IP-Symcon :: Automatisierungssoftware

Was passiert wenn Du auf „Hoch“ oder „Runter“ bei „Messung starten“ drückst?

Bewegung erfolgt mit „SC_Move“ (siehe Handbuch)

Gruß
Bruno

Ja, das Script ist da und der Rest steht sehr lückenhaft … Hätte mir noch ein paar Worte auch über die Optionen im Modul selbst erwartet. Egal.

Beim Klicken passiert eben gar nichts - weder hoch noch runter. Die Button unten sind in Betrieb.

Eigentlich nur mit z.B.:

SC_Move(56121 /*[2. Etage\Wohnzimmer\Rollladen\Position]*/ , 50);

… für halb geöffnet/geschlossen.

Deshalb habe ich mein Script gepostet, welches eine entsprechende Variable, bei mir umbenannt „Position“ anlegt/auswertet und genutzt wird.

Das manuelle Eingeben der Zeiten ist kein Problem, funktioniert genauso. Wichtig, „Setzen“ und „Übernehmen“ öfters betätigen. Das Ding ist etwas zickig.

Alternativ die Rolläden über „Switch_Duration“ für die gewünschte Zeit laufen lassen. Funktioniert bei meinen FS20 besser wie der Shutter.

Gruß
Bruno

Hatte ich auch anfangs parallel zum Test laufen … ist aber nur ein kleiner Kompromiss! Besser ist es, wenn man auf HM umstellt gleich mit den passenden Befehlen arbeitet, weil es sonst nur komplizierter wird.

An sowas hatte ich auch gedacht - bei HM in meinem Fall mittels „ON_TIME“. Ohne „Setzen“ und „Übernehmen“ ginge das Eintragen der Zeiten manuell icht.

So, nun haste mich abgehängt… Was:confused:

OOOOppppssss, hatte wohl das Teil verwechselt. :o

Ob Shutter-Modul oder nicht, ist Geschmacksache. Es geht auch ohne.

Gruß
Bruno

Aber das war der Ursprungsdeganke des Themenerstellers und es ist in der Anwendung/Ausführung doch etwas „komfortabler“ und dem Dedanken der IPS-Supplier für eine weitere Evulation näher.

Hallo,

danke für eure Mithilfe bis hierhin.
@nancilla: Wie jetzt?

Zitat von hrahlers
An sowas hatte ich auch gedacht - bei HM in meinem Fall mittels „ON_TIME“.

So, nun haste mich abgehängt… Was

Mit dem „ON_TIME“ kann ich vor dem eigentlichen Abschicken des Befehls für die Aktion noch eine Zeit festlegen, für wielange der Aktor schaltet. Somit läuft das Script weiter und der Timer läuft im Aktor. Dieser schaltet sich dann selbst aus.

		HM_WriteValueFloat(11829 /*[HWR\Rolladen\Rolladen Strassenfenster hoch]*/, "ON_TIME", 25);
		HM_WriteValueBoolean(11829 /*[HWR\Rolladen\Rolladen Strassenfenster hoch]*/, "STATE", true);

Stand nun: Einmessen geht immer noch nicht - manuelles Eintragen erfolgreich -> Teilproblem erledigt. Mit SC_Move fährt auch alles in die richtige Position, auch Anzeige im WFE ok.

Nun habe ich ja auch die Taster im Zimmer. Es soll so sein, daß bei Taste_runter der Roll. nach unten bewegt wird. Bei erneuten Druck auf Taste_runter soll er stehen bleiben. Die Anzeige im WFE stimmt nicht, und bei erneuten Bewegen per Script z.B. auf 50% steht der Roll. irgendwo, aber nicht halboffen. Denn bei erstmaligen Tasten ist ja nicht immer bekannt, welche Stellung zuletzt erreicht wird. Meine Hoffnung war, daß der Shutter die gefahrene Zeit mitbekommt und un die Position prozentual anzeigt. Dem scheint jedoch nicht so zu sein.

Kann ich das dem Shutter beibringen? Alternative Idee ist auch, diese Zeit (zw. 1. u. 2. Tasterdruck) Variable zu schreiben.

EDIT: Hier (http://www.ip-symcon.de/forum/f52/shuttercontrol-waehrend-fahrt-unterbrechen-15345/) hat jemand das gleiche Problem.

OK, falsch, es sind keine Jalousieaktoren :o

Stichwort „Toggle-Button“, Abfrage einer Variablen, wenn „Aus“, dann fährt der Rolladen (und setzt Var auf true), wenn „An“ Stopp des Rolladens (Var aus false). Zwangs-Rücksetzung der Var zum Ende der Fahrzeit.

Darf bloß niemand mehrfach die Taste drücken.

Gruß
Bruno

Nur am Rande…ich hatte mal an der Umgebung der Shutter Control rumgespieltund etwas gebastelt, um die Rolladen während der Fahrt WebFront-Konform anhalten zu können. hrahlers hatte in dem Thread auch mal angefragt…könnte das hier weiterhelfen?

Hallo,

ich habe das mit den HM-LC-Sw4-PCB jetzt so gelöst.


<?
//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 */

if($IPS_SENDER != "ShutterControl")
 die("This script can only be started by the ShutterControl Module");

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 "{EE4A81C6-5C90-4DB7-AD2F-F6BBD521412E}": //Homematic
      switch($SC_DIRECTION)
      {
         case SC_DIRECTION_STOP:
              HM_WriteValueBoolean($SC_INSTANCE, "STATE", false);
              HM_WriteValueBoolean($SC_INSTANCE2, "STATE", false);
              break;
         case SC_DIRECTION_UP:
              HM_WriteValueBoolean($SC_INSTANCE2, "STATE", false);
              HM_WriteValueFloat($SC_INSTANCE, "ON_TIME", $SC_DURATION / 1000);
              HM_WriteValueBoolean($SC_INSTANCE, "STATE", true);
              break;
         case SC_DIRECTION_DOWN:
              HM_WriteValueBoolean($SC_INSTANCE, "STATE", false);
              HM_WriteValueFloat($SC_INSTANCE2, "ON_TIME", $SC_DURATION / 1000);
              HM_WriteValueBoolean($SC_INSTANCE2, "STATE", true);
              break;
      }
    break;
  default:
    die("No Handler for Module ".$instance['ModuleInfo']['ModuleName']." found");
}
?>

Der Vorteil ist das die Aktoren selber nach der defienierten Zeit abschalten und das Skript kein Sleep macht!
Ich hoffe ich habe keinen Denkfehler. Soweit läuft aber alles und das Einlernen geht auch.
Man könnte vielleit noch die Hardwareabfrage rausnehmen.

Gruß

Joachim