Shutter - Variable "Position"

Hallo!

Die Variable „Position“ der Instanz „Shutter“ hat nur leserechte. Ich habe nun von Hand ausprobiert, in die Variable einen Wert einzutragen, was nach entsprechender Fehlermeldung auch funktioniert. Mit der Funktion SetValue scheint dies aber nicht zu funktionieren, es wird auch eine Warnung erzeugt.

Gibt es einen Trick, den Wert dennoch in die Variable zu bekommen. Damit könnte ich mein Problem der Rolladensteuerung über Taster in den jeweiligen Zimmern lösen. Ich habe ein Script geschrieben, welches den Rolladenstand aufgrund der Schaltzustände ermittelt, nur bringe ich eben das Ergebnis nicht in die Variable „Position“ gespeichert.

Vielen Dank und Grüße
Fridolin

Es gibt keinen Trick.

paresy

Hallo Paresy,

das ist echt schade, die Variable lässt sich unter „Bearbeiten“ auch nicht freigeben. Gibt es sonst eine Idee (z.B. direkt in der Datenbank) an die Variable ran zu kommen. Mein Problem wäre damit einfach gelöst. Der Shutter selbst regiert auf manuell eingestellte Werte in der Variable richtig, also dürte das kein Problem sein.

Gruß
Fridolin

Erstell eine Hilfsvariable die du dafür nutzt.

paresy

Die Hilfsvariable hab ich schon, mit der berechne ich derzeit den Stand der Rolladen mit annähernd gleichem Ergebnis wie der Shutter. Ich muss das Ergebnis in die Position des Shuttes bringen, sonst weis der nichts von der manuellen Einstellung über den LCN-Schalter und fährt wild den Rolladen falsch. Gebe ich die Position dem Shutter manuell vor, funktionierts. Also wie bekomme ich die Hilfsvariable in die Postion des Shutters?

Hab sonst keinen Plan, wie ich das Problem sonst lösen könnte?

Grüße
Fridolin

Genau aus diesem Grund (Shutter hat keine Ahnung von manuell gefahrenen LCN Rollläden) denke ich über eine eigene Lösung nach - leider :frowning:

Ich habe ein Script geschrieben, welches ähnliche Werte wie die Shutterposition in einer Hilfsvariable liefert. Ich zwar kein Programmierer, aber es funktioniert trotzdem. :slight_smile: Falls jemand Interesse hat, kann ich es gerne einstellen, wie gesagt, vielleicht nicht gerade professionell.

Die Daten müssen doch für die IPS - Variablen in irgend einer Datenbank oder Datei liegen! So müsste man doch an diese verflixte Shutterposition rankommen, um den Wert einzustellen?

Da werden doch wohl keine Geheimnisse verraten oder?

Grüße
Fridolin

Hi,

ich habe gestern auch ein Script geschrieben, welches die %-Position der LCN-Rollläden mitloggt (also wenn die Rollläden via LCN/Tasten gefahren werden). Ich werde das jetzt noch so erweitern, das ich die Positionen „Oben“, „Halb gesenkt“, „Auf Lücke“ und „Unten“ auch via IPS anfahren kann. Diese Werte werde ich dann auch „gerundet“ aus der %-Position berechnen, so dass sie auch nach dem LCN-Fahren angezeigt werden.

Die Laufzeiten halte ich im Script selbst. Ermitteln kann man sie mit meinem Skript auch ganz einfach, indem man die Positionen mit dem Taster anfährt.

Gruss
Coyote

Hi Coyote (wie kommst Du eigentlich zu diesem Namen?)

Ich finde die Idee super, vielleicht könne wir die Scripte mal austauschen. Ich vermute, dass dies für LCN - Projekte besser funktioniert als die Sache mit dem Shutter. Zumal wohl niemand gewillt ist, einen Weg zur Positions-Variable des Shutters offen zu legen.

Werde am Wochenende (falls es regnet :slight_smile: ) auch noch mal an das Thema rangehen.

Grüße
Fridolin

Hallo zusammen,

ich bin auch gerade dabei ein neues Script zu erstellen, welches mein altes (auch hier im Forum zu finden aber nicht mehr aktuell, bitte nicht mehr testen) ersetzen soll. Sollte es wie von mir erwartet funktionieren, werde ich es euch gerne zur Verfüguing stellen.
Es wird speziell für LCN programmiert und funktionert auch ausschließlich mit LCN. Wenn alles klappt wie ich mir das vorstelle, wird es keine Wünsche offen lassen :slight_smile:
Geplante erste Inbetriebnahme ist ca. nächstes Wochenende, eventuell noch nicht mit allen geplanten Features.

mfg
Smudo

Hallo Smudo!

Das finde ich echt super.
Ich bin ziemlicher Anfänger in Sachen IPS und PHP und bin wegen der Probleme schon leicht genervt. Die Doku vom Shutter ist echt bescheiden.
Hab zwischenzeitlich noch jede Menge nicht beschriebener Funktionen entdeckt, die die ich suche fehlt allerdings.

Ich würde sehr gerne auf dein Script warten, auch wenn ich danach alle meine 21 Rolläden neu anpacken muss.

Viele Grüße
Frido

Hier noch mein Entwuf für das Abgreifen der Laufzeit


$roll_typ            = "R"    /* R = Relais, A=Ausgang */;
$id_motor_status 		= 43343 /*[2.Rolladen\Esszimmer\1.Rolladen  links\.Motor\42.R1.Status Motor an/aus]*/;
$id_richtung_status 	= 24582 /*[2.Rolladen\Esszimmer\1.Rolladen  links\.Richtung\42.R2.Status Richtung]*/;
$id_lcn_stand 			= 52254 /*[2.Rolladen\Esszimmer\1.Rolladen  links\LCN-Rolladenstand]*/ ;
$id_shutter_stand 	= 18263 /*[2.Rolladen\Esszimmer\1.Rolladen links\Position]*/ ;

$laufzeit_zu      	= 21.0     /* Laufzeit Gesamtlaufzeit in S */ ;



// Stand ermitteln ----------------------------------------------------------------------------------------------------------------------------------------

$stand 		= GetValue($id_lcn_stand);					/* aktueller Stand lesen */
$shut_stand	= GetValue($id_shutter_stand);					/* aktueller Stand lesen */
$laufzeit 	= $laufzeit_zu * $stand;					/* aktueller Stand der Laufzeit errechnen */


$motor 		= motor($roll_typ, $id_motor_status, $id_richtung_status);		/* Status Motor ermitteln */
$richtung 	= richtung($roll_typ, $id_motor_status, $id_richtung_status);	/* Status Richtung ermitteln */


/* Stand ermitteln -------------------------------------------------------------*/
$zaeler = 0 ;											/* Zähler rücksetze */
$messungStart = strtok(microtime(), " ") + strtok(" ");	/* Startzeit messen */

while (($motor == true) and ($zaeler < $laufzeit_zu * 10))
	{
	ips_sleep(100);
	$motor = motor($roll_typ, $id_motor_status, $id_richtung_status);		/* Status Motor erneut ermitteln */
	$zaeler++;																/* maximaler Durchlauf bis Laufzeit Rolladen */
	}

$messungEnde = strtok(microtime(), " ") + strtok(" ");	/* Endezeit messen */

$dauer = ($messungEnde - $messungStart) *1.30;					/* Dauer der Laufzeit messen */

if($richtung == true)
{
	$laufzeit = $laufzeit + $dauer;						/* Rolladen fährt ab */
}
else
{
	$laufzeit = $laufzeit - $dauer;						/* Rolladen fährt auf */
}

if($laufzeit > $laufzeit_zu){$laufzeit = $laufzeit_zu;}
if($laufzeit < 0) {$laufzeit = 0;}
$stand = $laufzeit / ($laufzeit_zu) ;
SetValueFloat($id_lcn_stand, $stand);

$standi = (int) ($stand*100);
echo($standi);
if(abs($standi-$shut_stand)>10)
{
SetValueInteger($id_shutter_stand, $standi);
}

function motor($roll_typ, $id_motor_status, $id_richtung_status)
{
if($roll_typ == "R")
{
$motor 		= GetValue($id_motor_status);
}
if($roll_typ == "A")
{
	if(GetValue($id_motor_status) == true or GetValue($id_richtung_status) == true)
	{ $motor = true;}
	else
	{ $motor = false;}
}
 
return $motor;
}

function richtung($roll_typ, $id_motor_status, $id_richtung_status)
{
if($roll_typ == "R")
{
$richtung 		= GetValue($id_richtung_status);
}
if($roll_typ == "A")
{
	if(GetValue($id_motor_status) == true)
	{ $richtung = true;}
	else
	{ $richtung = false;}
}
 
return $richtung;
}


?>



Das sollte nicht das Problem sein. Es ist nur ein Script für alle Jalousien in dem dur nur deine individuellen Daten eingeben musst.

Hallo,

habe zwar kein LCN (aus verschiedenen Gründen FS20), aber habe dasselbe Thema vor der Brust. Ich nehme an, dass dieses noch einige andere haben bzw haben werden (es gibt ja immer wieder Zuwachs).

Wollen wir nicht ne „Task Force“ machen, um ein Shutter Control zu kriegen, das allgemeiner ist?

Prinzipiell müssen da ja „nur“ die Hardwareseitigen Events und Sendungen anders interpretiert werden. Die Variablen für die Zustände und vor allem später noch die Repräsentation (ich denke da auch an Webfront) sind dann ja wieder gleich.

Und wenn man es genau nimmt, ist es auch nix anderes als ein spezielles Szenario-Management, denn auch dort (siehe Gruppenadressen bei FS20) hat man diese Themen.

Grüße
jwka

Hallo
Das Thema ist ja schon etwas Älter aber da ich hier neu bin und auch so meine Probleme mit dem Shutter Modul habe wollte ich hier nochmal nachfragen.
Ich benutze eine Homematic Wired 12/7 Aktor je ein Kanal für die Ansteuerung und einen für die Richtung.
Pro Rollo habe ich dann noch jeweils einen Taster für hoch und runter diese gehen auch auf die 12/7 Aktoren.
Jetzt wollte ich mal nachfragen ob jemand ein Skript hat mit dem ich Rollos ansteuern kann und auch eine Rückmeldung über den Zustand der Rollos bekomme.
Vielen Dank im voraus
Mfg Stefan

Hallo Stefan,

mit meiner Beschattungssteuerung sollte das relativ einfach möglich sein. Sieh Dir mal den Thread und das Wiki an…

Alternativ sollte es auch mit dem normalen Shutter Modul gehen - in jedem Fall ist es aber wichtig, dass die Taster nicht direkt angelernt sind, sondern über IPS laufen (ansonsten ist die Positionsberechnung in IPS nicht möglich)

Hallo Andreas
Erstmal Danke für die Antwort. Also Deine Skripte sind wirklich sehr gut aber doch ein wenig zu viel für mich. Im moment habe ich das Shutter Modul im einsatz und es klappt auch sehr gut. Ich habe es noch ein wenig umgebaut damit es mit meiner Umsetzung klappt jetzt brauche ich auch eigentlich nur noch das meine Taster mit eingebunden werden(sind nicht direkt verknüpft).
Hier mal mein Skript ich habe einfach ein paar Sachen die für LCN gedacht waren mit übernommen. Vieleicht hilft das ja weiter.

<?
//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 "{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 > 0)
          {
              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 > 0)
          {
              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 > 0)
          {
              IPS_Sleep($SC_DURATION);
              MXC_ShutterStop($SC_INSTANCE);
          }
          break;
         case SC_DIRECTION_DOWN:
          MXC_ShutterMoveDown($SC_INSTANCE);
          if($SC_DURATION > 0)
          {
              IPS_Sleep($SC_DURATION);
              MXC_ShutterStop($SC_INSTANCE);
          }
          break;
      }
      break;
  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_INSTANCE2,"STATE", true);
            HM_WriteValueBoolean($SC_INSTANCE,"STATE",true); // Um Relaisrichtung zu ändern bitte auf true
            if($SC_DURATION > 0)
            {
            IPS_Sleep($SC_DURATION);
            HM_WriteValueBoolean($SC_INSTANCE,"STATE",false);
            HM_WriteValueBoolean($SC_INSTANCE2,"STATE",false);
            }
            break;
          case SC_DIRECTION_DOWN:
            HM_WriteValueBoolean($SC_INSTANCE,"STATE", true);
            HM_WriteValueBoolean($SC_INSTANCE2,"STATE",false);// Um Relaisrichtung zu ändern bitte auf false
            if($SC_DURATION > 0)
            {
            IPS_Sleep($SC_DURATION);
            HM_WriteValueBoolean($SC_INSTANCE,"STATE",false);
            HM_WriteValueBoolean($SC_INSTANCE2,"STATE",false);
            }
            break;
        }
        break;
   


    break;
  default:
    die("No Handler for Module ".$instance['ModuleInfo']['ModuleName']." found");
}

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

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

?>