JBMedia Lightmanager Steuerung Kommandozeile

Welchem übergeordneten Objekt ist die Variable eigentlich zugeordnet ?

Das ist eigentlich egal.
Meine habe ich überhaupt manuell angelegt.
Das übergeordnete Objekt ist bei mir ein OneWire Temp-Sensor(Heizkessel).
Darunter habe ich eine Variable(Heizkessel, ID: 37967) vom Typ Boolean angelegt welches dann das Script aufruft (bei Änderung).
Ich teste das immer über das Webfront.

Geht aber mit deiner „Status“ Variable genauso.

Ein Doppelclick auf die Variable öffnet dir hier den Dialog den du brauchst.
Der Rest wie in dem Post vorher.

Grüße Marco

Prima, jetzt ist der Groschen bei mir endlich gefallen und das ganze funktioniert auch, jetzt bin ich einen großen Schritt weiter.

Ich schlußfolgere: für jeden Aktor ist eine eigene Variable und ein eigenes Script notwendig, siehe Anlage ?

Spannend wird es nun für die Jalousie-Aktoren und die Dimmer (nicht lernfähig), gibt es da ein paar Tipps dazu ?

Auf jeden Fall schonmal tausend Dank für die geduldige Unterstützung bisher.

Gruß, Frank

Hallo,

ich muß jetzt doch nochmal nachhaken, ich habe es noch nicht rausgekriegt, wie das Skript aussehen muß für einen Dimmer oder Jalousieaktor, wenn ich eine bestimmte Intensität anfahren möchte.

Könnte mir hierzu jemand ein Beispiel geben.

Danke.

Wie ich schon schrieb, sieht ein Aktionsskript zum Dimmen eines lernfähigen InterTechno-Dimmers mit der Adresse A1 wie folgt aus:


<?php
include('LightManager.ips.php');
$status = 48788 /*[Zimmer\Deckenleuchten\Status]*/;
LightManager::InterTechno_SetIntensity('A1', $IPS_VALUE, $status, $IPS_VARIABLE);
?>

Ein Skript zum Dimmen auf z.B. 66%:


<?php
include('LightManager.ips.php');
$status = 48788 /*[Zimmer\Deckenleuchten\Status]*/;
$intensity = 40383 /*[Zimmer\Deckenleuchten\Intensität]*/;
LightManager::InterTechno_SetIntensity('A1', 66, $status, $intensity);
?>

Rollladensteuerung per ShutterControl (Dokumentation) auf 50%:


<?php
$status = 36715 /*[Zimmer\Rollladen]*/;
SC_Move($status, 50);
?>

Danke,

wie sieht das denn bei nicht lernfähigen Dimmern aus, gibt es da für $intensity einen anderen Eintrag, ich meine sowas gelesen zu haben.

Wie in Deinem Beispiel funktioniert es bei mir leider nicht.

Gruß,
Fred

Die Dimm-Funktion aus meiner Klasse arbeitet nur mit den neuen lernfähigen Aktoren, da die alten Dimmer schlicht nicht gezielt prozentual ansteuerbar sind :/…

Ich hab’s befürchtet…

Danke erstmal.

Habe da doch noch eine Frage:

an welcher Stelle in das ShutterControl.ips wird der Code-Teil von macgiver eingebaut, passt das so wie ich das gemacht habe ?

Aus der Doku werde ich hinsichtlich Installation und Integration des ShutterControl Moduls nicht schlau, finde aber auch keine weiteren Themen dazu, bestimmt hat noch jemand einen entsprechenden Link für mich ?

Gruß, Fred

<?
//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 "{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 > 0)
            {
              IPS_Sleep($SC_DURATION);
              LCN_SetIntensity($SC_INSTANCE,0,0);
            }
            break;
          case SC_DIRECTION_DOWN:
            LCN_SetIntensity($SC_INSTANCE2,100,4);
            if($SC_DURATION > 0)
            {
              IPS_Sleep($SC_DURATION);
              LCN_SetIntensity($SC_INSTANCE2,0,0);
            }
            break;
        }
        break;
      case 2: //Reais
        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 > 0)
            {
            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 > 0)
            {
            IPS_Sleep($SC_DURATION);
            LCN_SwitchRelay($SC_INSTANCE,false);
            }
            break;
        }
        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 > 0)
          {
              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 > 0)
          {
              IPS_Sleep($SC_DURATION);
              HM_WriteValueBoolean($SC_INSTANCE, "STOP", true);
          }
           break;
      }
    break;
    case "{E6D7692A-7F4C-441D-827B-64062CFE1C02}": // JB-Lightmanager Pro
        // Instanz öffnen, wenn nicht schon offen
        IPS_RunScriptEx( SET_HID_STATUS, Array("hid_id" => JB_LIGHTMANAGER, "vendor_id" => JB_LIGHTMANAGER_VENDORID, "product_id" => JB_LIGHTMANAGER_PRODUCTID, "status" => true));

        sleep(1);
      $running = CreateVariableByName($SC_INSTANCE2, "Moving", 0);
      $value = GetValue(IPS_GetStatusVariableID($SC_INSTANCE2, "StatusVariable"));
      // Funk-ID aus Variable holen
      $funk_ID = GetValue(IPS_GetVariableIDByName("Funk_ID", $SC_INSTANCE2));
      switch($SC_DIRECTION)
      {
         case SC_DIRECTION_STOP:
          if(GetValue($running))
          {
               HID_SendEvent($SC_INSTANCE,0,chr(0x15).chr($funk_ID).chr(0x74).chr(0x02).chr(0x00).chr(0x00).chr(0x00).chr(0x00));
              SetValue($running, false);
          }
          break;
         case SC_DIRECTION_UP:
          if(!GetValue($running))
          {
                  HID_SendEvent($SC_INSTANCE,0,chr(0x15).chr($funk_ID).chr(0x74).chr(0x01).chr(0x00).chr(0x00).chr(0x00).chr(0x00));
              SetValue($running, true);
          }
          if($SC_DURATION > 0)
          {
              IPS_Sleep($SC_DURATION);
              HID_SendEvent($SC_INSTANCE,0,chr(0x15).chr($funk_ID).chr(0x74).chr(0x02).chr(0x00).chr(0x00).chr(0x00).chr(0x00));
              SetValue($running, false);
          }
          else
            SetValue($running, false);
          break;
         case SC_DIRECTION_DOWN:
          if(!GetValue($running))
          {
              HID_SendEvent($SC_INSTANCE,0,chr(0x15).chr($funk_ID).chr(0x74).chr(0x04).chr(0x00).chr(0x00).chr(0x00).chr(0x00));
              SetValue($running, true);
          }
          if($SC_DURATION > 0)
          {
              IPS_Sleep($SC_DURATION);
              HID_SendEvent($SC_INSTANCE,0,chr(0x15).chr($funk_ID).chr(0x74).chr(0x02).chr(0x00).chr(0x00).chr(0x00).chr(0x00));
              SetValue($running, false);
          }
          else
            SetValue($running, false);
          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;
}

?>

Kann mir da denn niemand weiterhelfen ?

Servus!

Hab deinen Hilfeschrei gehört.

Also:

  1. Shutter Instanz anlegen.

  2. Konfigurieren wie auf dem Bild.(natürlich mit den eigenen Instanzen)

  3. wichtig sind die Fahrzeiten des Rollladens, denn nur so lässt sich eine bestimmte Position anfahren.

  4. Aufruf in einem Script mit:

SC_MoveUp($instanceID, 0);

oder

SC_MoveDown($instanceID, 0);

Fertig.

Damit sollte es eigentlich schon gehen.

PS: ich habe jede Menge zusätzliche Variablen für die Rollläden wie „wann geht er frühestens hoch“, welches Programm, Betriebsart(Sommer, Winter). Bei Sommer geht der Rollladen nicht ganz zu (Lüftung). usw.
Diese dienen aber hauptsächlich dazu die Events „Auf“ und „Zu“ zu regeln.

Aber fangen wir mal mit den Basics an.

lg Marco

Aahhh, ganz nah dran…

Was hast Du als zweite Sendeinstanz hinterlegt, ich glaube das ist der Knackpunkt.

Gruß, Fred

Die zweite Sende-Instanz ist das neu angelegte Shutter-Modul selber.

Denn nur so hast du Zugriff auf deine Variablen(„Moving“, …).

z.B

$running = CreateVariableByName($SC_INSTANCE2, "Moving", 0);
$value = GetValue(IPS_GetStatusVariableID($SC_INSTANCE2, "StatusVariable"));
// Funk-ID aus Variable holen
$funk_ID = GetValue(IPS_GetVariableIDByName("Funk_ID", $SC_INSTANCE2)); 

Hoffe ich konnte dir helfen.

lg
Marco

Ich habe es noch nicht ganz verinnerlicht, wo ist der Verweis/Verknüpfung auf die Aktoradresse (in diesem Fall A12) ?

Die momentane Struktur habe ich mal angehängt, auch die Fehlermeldung beim Einmessen.

Habe ich eigentlich Deinen Teil für den ShutterControl richtig in das Script eingebaut (siehe weiter oben im Topic) ?

Wir nähern und der Lösung immer mehr, viel kann ich nicht mehr falsch gemacht haben…

Gruß,
Fred

Ja da fehlen dir wohl noch ein paar Essentielle Dinge.

Ich hab es für mich so gelöst, daß ich die meisten Instanz ID’s in einem globalen Script definiere. Darum fasst überall Konstanten.

Ausserdem schalte ich die Lightmanager nach getaner Arbeit wieder ab, bzw. morgens wieder ein. Darum das Script. Wenn du das nicht brauchst kannst du es vorerst auskommentieren.

Was noch wichtig ist, ist die funk_ID deines Rollladen Aktors.
Diese muss unter der Shutter-Instanz liegen.
Ah, ich sehe gerade die Frage nach der Aktor Adresse. Siehe eine Zeile darüber.

Hier die Übersetzung dazu:
SET_HID_STATUS = angehängtes Script zum Suchen und Öffnen einer HID
JB_LIGHTMANAGER = Instanz ID des Lightmanagers
define („JB_LIGHTMANAGER_VENDORID“, 5824);
define („JB_LIGHTMANAGER_PRODUCTID“, 2610);

Open_HID.txt (1.74 KB)

welche Jalousien Aktoren benutzt du?

Und weißt du auch wie die Steuerbefehle aussehen?

Ich nutze im Erdgeschoss noch die Düwi 5247 für die Rolläden.

Als Steuerbefehle kenne ich die vier aus der SC-Doku.
Zum Testen habe ich mal ein Script wie folgt verwendet:

<?php
$status = 10036 /*[JB Lightmanager\Rolladen\Kamin links (Shutter Control Aktor A12)]*/;
SC_Move($status, 50);
?>

wobei $status die ID der SC-Instanz ist.

Wobei ich es noch immer nicht verstanden habe, wie die Aktor-ID hinterlegt werden kann.

Gruß,
Fred

Wie schon beschrieben brauchst du eine Adresse (Funk) die du steuern willst.

Nachdem über die Shutter-Instanz keine Adresse abrufbar ist, musst du dich selbst darum kümmern.

Bei mir heißt diese Funk_id und liegt immer unter der jeweiligen Shutter-Instanz. Siehe Seite 3 ganz unten.

So hole ich die dann auch im eigentlichen Shutter-Script ab.

$funk_ID = GetValue(IPS_GetVariableIDByName("Funk_ID", $SC_INSTANCE2));

Hier baue ich die Adresse und den Steuerbefehl zusammen:
Wie du siehst benutze ich hier die funk_ID die ich zuvor abgeholt habe.

HID_SendEvent($SC_INSTANCE,0,chr(0x15).chr($funk_ID).chr(0x74).chr(0x02).chr(0x00).chr(0x00).chr(0x00).chr(0x00));

Im Endeffekt mache ich nichts anderes als das ich einen Sequenz über den Lightmanager sende der eine Adresse und einen Aktion beinhaltet.

Als Steuerbefehl meinte ich eher die des Aktors.

lg
Marco

Ich sehe, Du hast als String „0x00“ hinterlegt in der Funk-ID.
Ist das also die umgerechnete Aktorenadresse ?
Wenn ja, gibt es sicher ein HIlfsprogramm oder eine Anleitung mit der man diese Umwandlungen machen kann ?

siehe hier:
http://www.ip-symcon.de/forum/f67/jbmedia-lightmanager-steuerung-kommandozeile-12308/#post110703

Angelernte Aktoren werden der Reihenfolge nach vergeben.

Funk_ID:
Aktor 1 = 0x00
Aktor 2 = 0x01
Aktor 3 = 0x02
usw.

Marco

Ich habe den Code von macgyver auf die Nutzung meiner LightManager-Klasse umgestrickt, die Adresse (Funk-ID) des Rollladens ist dabei im Klartext (etwa 1, 2 oder 3…) in der Variable „Kanal“ zu hinterlegen:


	case "{E6D7692A-7F4C-441D-827B-64062CFE1C02}": //Light-Manager Pro
		$running = CreateVariableByName($SC_INSTANCE2, "Moving", 0);
		$value = GetValue(IPS_GetStatusVariableID($SC_INSTANCE2, "StatusVariable"));
		$shutterID = GetValue(IPS_GetVariableIDByName("Kanal", $SC_INSTANCE2));
		switch($SC_DIRECTION)
		{
			case SC_DIRECTION_STOP:
				if(GetValue($running))
				{
					LightManager::Uniroll_SwitchMode($shutterID, LightManager::UNIROLL_STOP);
					SetValue($running, false);
				}
				break;
			case SC_DIRECTION_UP:
				if(!GetValue($running))
				{
					LightManager::Uniroll_SwitchMode($shutterID, LightManager::UNIROLL_UP);
					SetValue($running, true);
				}
				if($SC_DURATION > 0)
				{
					IPS_Sleep($SC_DURATION);
					LightManager::Uniroll_SwitchMode($shutterID, LightManager::UNIROLL_STOP);
					SetValue($running, false);
				}
				else
					SetValue($running, false);
				break;
			case SC_DIRECTION_DOWN:
				if(!GetValue($running))
				{
					LightManager::Uniroll_SwitchMode($shutterID, LightManager::UNIROLL_DOWN);
					SetValue($running, true);
				}
				if($SC_DURATION > 0)
				{
					IPS_Sleep($SC_DURATION);
					LightManager::Uniroll_SwitchMode($shutterID, LightManager::UNIROLL_STOP);
					SetValue($running, false);
				}
				else
					SetValue($running, false);
				break;
		}
		break;

Ansonsten lässt sich die Adresse auch mit folgendem Codeschnipsel „umrechnen“ (aus $actor = 1 wird dann $address = 0x00 usw.):


$address = dechex(intval($actor) - 1);