JBMedia Lightmanager Steuerung Kommandozeile

Hallo,

ich benutze den Lightmanager um meine Lichter zu schalten.
Im Moment habe ich das Browserfenster in mein Dashboard eingebunden.
Ich habe aber heute folgendes auf der Herstellerseite gelesen:
"Lightman Studio bietet die Möglichkeit, den Light-Manager per Kommandozeilen-Parameter zu steuern. Dies ist interessant, wenn Lichtszenen durch andere Programme oder Batch-Dateien ausgelöst werden sollen. Folgende Parameter stehen zur Verfügung:

minimize: Startet Lightman Studio als Trayicon
key: Nummer der Lichtszene, die ausgelöst werden soll

Beispiel: lightmanstudio.exe key=1

Es ist auch möglich, einzelne Aktoren direkt anzusteuern. Dazu sind folgende Parameter verfügbar:

system: InterTechno = 4, FS20 = 3, Uniroll = 7, IKEA = 6
housecode: 1 - 16. Entspricht bei InterTechno A - P, bei FS20 der Adressgruppe 1 - 16, bei IKEA der Systemnummer
channel: Entspricht dem Kanal 1 - 16
learn: Aktiviert das Protokoll für lernfähige InterTechno Aktoren (Wert 0/1)
dim: Helligkeitslevel 1 - 16 (entpsricht 6,25% Schritten)
command: Dies ist der auszuführende Befehl

Bei InterTechno stehen folgende Commands zur Verfügung:

1 = Einschalten
2 = Ausschalten
3 = Toggeln
4 = Wenden Links
5 = Wenden Rechts
6 = Auswählen
7 = Dimmen auf Wert

Bei FS20:

1 = Einschalten
2 = Ausschalten
3 = Toggeln
4 = Dimmen Hoch
5 = Dimmen Runter
6 = Dimmen auf Wert
7 = Auswählen

Bei IKEA:

1 = Einschalten
2 = Ausschalten
3 = Toggeln
4 = Dimmen Hoch
5 = Dimmen Runter
6 = Dimmen auf Wert
7 = Auswählen

Bei Uniroll:

1 = Rauf
2 = Stopp
3 = Runter
4= Auswählen

Beispiel: lightmanstudio.exe system=4 housecode=3 channel=5 command=1

Diese Kommandozeile würde den InterTechno Aktor C-5 einschalten.

Beispiel: lightmanstudio.exe system=3 housecode=7 channel=1 command=6 dim=8

Diese Kommandozeile würde den FS20 Aktor 1 der Adressgruppe 7 auf den Wert 50% dimmen."

Leider reagiert keine Lampe, egal ob direkt in der DOSBox oder per Batch Datei.

Könnt Ihr mir helfen?

Jörg

Nutzt von Euch keiner das Ding?

Nö, wir nutzen IPS :smiley:

Hast Du das Teil per USB am IPS PC?

Hallo,

ja steckt per USB am Server auf dem auch IPS läuft.
Bedient wird alles über ein Touch Notebook von Asus.

Hab jetzt noch ein bischen weitergespielt.
Anscheinend kein ich die Aktoren nicht wirklich direkt ansprechen aber über die von mir definierten Szenen klappt es.
Jetzt werd ich mir ein paar Knöpfe im Dashboard basteln.

Jörg

Hallo,

bis heute hat alles geklappt, die Lampen wurden zuverlässig aus und eingeschaltet.
Aber:
Jetzt geht nichts mehr.
Ich sehe auch bei den Meldung nicht das etwas gesendet wird.
Mein Scipt:

//sendet '' per DosBox
$output = shell_exec('C:\programme\lightmanstudio\lightmanstudio.exe key=5');

Servus!

Ich hatte hin und wieder das Problem das er über USB nicht erkannt wurde.
Einfach mal aus und wieder einstecken und nochmal probieren.

Benutze auch seit kurzem dem JBMedia Lightmanager Pro.

Ich steuere ihn allerdings über eine HID Instanz.

Hab kurz das USB Protokoll mitgeschnitten und dann das ganze über IPS steuern lassen (HID_SendEvent). Ist aber noch im Anfangsstadium.

Ist im Prinzip ein Einzeiler. So hab ich keine Logik im Lightmanager und nutze ihn sozusagen nur als Funk-Gateway für meine Rollläden/Steckdosen.

lg Marco

Hallo,

kannst Du mir sagen wie Du das mit der HID Instanz gemacht hast und wie die Befehle aussehen?
Kenne mich damit leider überhaupt nicht aus.

Jörg

Du legst eine neue Instanz von HID an.

Dann suchst du unter „Gerät“ den Light-Manager raus.
Häckchen auf „Gerät öffnen“ und übernehmen klicken.

Somit sollte mal die USB-Verbindung stehen.

Danach kannst du mit HID_SendEvent Kommandos schicken.

Der erste Parameter ist die HID Instanz.
Der zweite eigentlich immer 0.
Der dritte Parameter ist das eigentliche Kommando.
wobei das zweite „chr()“ die ID des Funkempfängers ist und die restlichen ordne ich der Funktion zu (rauf, runter, stop) bei Rollläden.


// rauf
HID_SendEvent(22145 /*[JB_Lightmanager]*/,0,chr(0x15).chr(0x00).chr(0x74).chr(0x01).chr(0x00).chr(0x00).chr(0x00).chr(0x00));
//15 00 74 01 00 00 00 00
// runter
HID_SendEvent(22145 /*[JB_Lightmanager]*/,0,chr(0x15).chr(0x00).chr(0x74).chr(0x04).chr(0x00).chr(0x00).chr(0x00).chr(0x00));
//15 00 74 04 00 00 00 00
// stop
HID_SendEvent(22145 /*[JB_Lightmanager]*/,0,chr(0x15).chr(0x00).chr(0x74).chr(0x02).chr(0x00).chr(0x00).chr(0x00).chr(0x00));
//15 00 74 02 00 00 00 00

Im Beispiel sieht das so aus:
chr(0x15) = Kennzeichen für Uniroll
chr(0x00) = Nummer der Funk ID beginnend bei 0
chr(0x74) = Kennzeichen für Uniroll

chr(0x02) = stop Zeichen
chr(0x00) = fix
chr(0x00) = fix
chr(0x00) = fix
chr(0x00) = fix

Für Steckdosen sieht das ähnlich aus:

HID_SendEvent(22145 /*[JB_Lightmanager]*/,0,chr(0x05).chr(0x00).chr(0x02).chr(0x06).chr(0x00).chr(0x00).chr(0x00).chr(0x00))

Im Beispiel sieht das so aus:
chr(0x05) = Kennzeichen für Intertechno Steckdose
chr(0x00) = Nummer der Funk ID beginnend bei 0 = Hauscode A
chr(0x02) = Schaltkennzeichen (2 = Toggle, 1 = Ein, 0 = Aus, 3 = Wenden links, 4 = Wenden rechts)

chr(0x06) = Kennzeichen für Intertechno Steckdose
chr(0x00) = fix
chr(0x00) = fix
chr(0x00) = fix
chr(0x00) = fix

Für FS20 Steckdosen siehe hier:

chr(0x01) = Kennzeichen für FS20
chr(0x00) = fix
chr(0x00) = fix

chr(0x01) = FunkID
chr(0x00) = Schaltbefehl (0 = aus, 11 = ein, 12 = Toggle)
chr(0x00) = fix
chr(0x03) = fix
chr(0x00) = fix

Soweit fürs erste.

Schönen Abend
Marco

Vielen Dank, werde ich in den nächsten Tagen testen.

Jörg

Die Idee, den LightManager über eine HID-Instanz anzusteuern, ist wirklich super :)!

Ich habe mir das USB-Protokoll auch mal angeschaut und die Funktionalität in einer Klasse gekapselt. Die Erkenntnisse von macgyver dienten als Basis, bis auf Feinheiten (das 2. und 3. Steuerzeichen bei FS20 ist nicht fix, sondern entspricht dem Hauscode) sind die diese absolut korrekt.

Neben normalen InterTechno-Aktoren können mit der Klasse auch lernfähige, prozentual dimmbare wie das Dimmer-Micromodul angesprochen werden. Die Uniroll-Rollladen-Steuerung ist rudimentär (könnte man noch mit dem Shutter Control-Skript verzahnen), ebenso die zur Schaltung von FS20-Aktoren. Letztere sollte man ohnehin besser über eine FHZ 1x00 laufen lassen und die entsprechenden FS20_*-Funktionen von IPS nutzen; ich verwende die implementierte Methode lediglich für das Senden von Befehlen an „virtuelle“ Geräte per FS20 IRF (etwa: TV leiser/lauter), die ich nicht extra in IP-Symcon anlegen möchte.

Hier nun der Code der LightManager-Klasse (einfach per C&P in ein neues Skript namens LightManager.ips.php übertragen und die Konfiguration am Ende anpassen, wobei nur die ID der HID-Instanz essentiell ist):


<?php
/**
* Klasse zur Ansteuerung des jbmedia Light-Manager Pro per HID-Instanz
* Beinhaltet aus Gründen der IPS-Konformität und Wumpus-Widmung ausschließlich statische Methoden
* Unterstützte Systeme: InterTechno, Uniroll, FS20 (rudimentär)
*
* @author tpmaerk
*/
class LightManager
{
	const INTERTECHNO_OFF = 0x00;
	const INTERTECHNO_ON = 0x01;
	const INTERTECHNO_TOGGLE = 0x02;
	const INTERTECHNO_TURN_LEFT = 0x03;
	const INTERTECHNO_TURN_RIGHT = 0x04;
	const UNIROLL_UP = 0x01;
	const UNIROLL_STOP = 0x02;
	const UNIROLL_DOWN = 0x04;
	const FS20_OFF = 0x00;
	const FS20_ON = 0x11;
	const FS20_TOGGLE = 0x12;
	private static $FS20_Housecode;
	private static $instanceId;

	/**
	* Konfiguration: ID der LightManager-Instanz setzen
	*
	* @param		string	$instanceId ID der LightManager-Instanz
	* @return	void
	*/
	public static function setInstanceId($instanceId)
	{
		self::$instanceId = $instanceId;
	}
	
	/**
	* Befehl an LightManager senden (Wrapper für HID_SendEvent())
	*
	* @param		mixed		$command	Abzusetzender Befehl
	* @return	boolean	Rückgabe von HID_SendEvent()
	*/
	private static function _sendCommand($command)
	{
	  return HID_SendEvent(self::$instanceId, 0, $command);
	}
	
	/**
	* InterTechno-Adressen (A1 - P16) in internes Hex-Format übersetzen
	*
	* @param		string	$actor	Adresse des Aktors (etwa 'A1')
	* @return	string	Adresse im internen Hex-Format
	*/
	public static function InterTechno_TranslateAddress($actor)
	{
		$group = ord(strtoupper(substr($actor, 0, 1))) - 65;
		$channel = intval(substr($actor, 1)) - 1;
		return '0x'.dechex($group).dechex($channel);
	}
	
	/**
	* InterTechno-Aktor schalten
	*
	* @param		string	$actor			Adresse des Aktors (etwa 'A1')
	* @param		int		$mode    		Schaltmodus (vordefinierte Konstante angeben)
	* @param		int		$statusID  		ID der Status-Variable (etwa 12345)
	* @param		boolean	$isAdaptable   true, falls Aktor lernfähig, ansonsten false (Default)
	* @return	void
	*/
	public static function InterTechno_SwitchMode($actor, $mode, $statusID, $isAdaptable = false)
	{
		$address = self::InterTechno_TranslateAddress($actor);
		$type = !$isAdaptable ? chr(0x06).chr(0x00) : chr(0x07).chr(0x01);
		self::_sendCommand(chr(0x05).chr($address).chr($mode).$type.chr(0x00).chr(0x00).chr(0x00));

		$msg = ($mode == self::INTERTECHNO_ON) ? true : false;
		$msg = ($mode == self::INTERTECHNO_TOGGLE) ? !GetValueBoolean($statusID) : $msg;
		SetValueBoolean($statusID, $msg);
	}
	
	/**
	* Lernfähigen InterTechno-Aktor dimmen
	*
	* @param		string	$actor		Adresse des Aktors (etwa 'A1')
	* @param		int		$value    	Intensität (0 bis 100)
	* @param		int		$statusID  	ID der Status-Variable (etwa 12345)
	* @param		int		$intensityID  ID der Intensitäts-Variable (etwa 12345)
	* @return	void
	*/
	public static function InterTechno_SetIntensity($actor, $value, $statusID, $intensityID)
	{
		$address = self::InterTechno_TranslateAddress($actor);
		$scale = array(0x00, 0x08, 0x18, 0x28, 0x38, 0x48, 0x58, 0x68, 0x78, 0x88, 0x98, 0xa8, 0xb8, 0xc8, 0xd8, 0xe8, 0xf8);
		$level = ceil($value / 6.25);
		self::_sendCommand(chr(0x05).chr($address).chr($scale[$level]).chr(0x04).chr(0x01).chr(0x00).chr(0x00).chr(0x00));

		SetValueBoolean($statusID, ($value == 0) ? false : true);
		SetValueInteger($intensityID, floor($level * 6.25));
	}
	
	/*
	* Uniroll-Rollladen steuern
	*
	* @param		string	$actor		Adresse des Aktors (etwa 1)
	* @param		int		$mode			Schaltmodus (vordefinierte Konstante angeben)
	* @param		int		$statusID		Optional: ID der Status-Variable (etwa 12345)
	* @return	void
	*/
	public static function Uniroll_SwitchMode($actor, $mode, $statusID = null)
	{
		$address = dechex(intval($actor) - 1);
		self::_sendCommand(chr(0x15).chr($address).chr(0x74).chr($mode).chr(0x00).chr(0x00).chr(0x00).chr(0x00));

		if(!empty($statusID)) {
			$msg = ($mode == self::UNIROLL_UP) ? 'Geöffnet' : 'Geschlossen';
			$msg = ($mode == self::UNIROLL_STOP) ? 'Angehalten' : $msg;
			SetValue($statusID, $msg);
		}
	}

	/**
	* FS20-Adressen (1111 - 4444) in internes Hex-Format übersetzen
	*
	* @param		string	$actor	Adresse des Aktors (etwa '1111')
	* @return	string	Adresse im internen Hex-Format
	*/
	public static function FS20_TranslateAddress($actor)
	{
		$trans = array(11 => '0', 12 => '1', 13 => '2', 14 => '3', 21 => '4', 22 => '5', 23 => '6', 24 => '7',
					31 => '8', 32 => '9', 33 => 'a', 34 => 'b', 41 => 'c', 42 => 'd', 43 => 'e', 44 => 'f');
		return '0x'.$trans[substr($actor, 0, 2)].$trans[substr($actor, 2, 2)];
	}

	/**
	* Konfiguration: FS20-Hauscode setzen
	*
	* @param		string	$code		FS20-Hauscodes (etwa '11111111')
	* @return	void
	*/
	public static function setFS20Housecode($code)
	{
		$part1 = self::FS20_TranslateAddress(substr($code, 0, 4));
		$part2 = self::FS20_TranslateAddress(substr($code, 4, 4));
		self::$FS20_Housecode = chr($part1).chr($part2);
	}

	/*
	* FS20-Aktor schalten
	*
	* @param		string	$actor	Adresse des Aktors (etwa '1111')
	* @param		int		$mode		Schaltmodus (vordefinierte Konstante angeben)
	* @param		int		$statusID	Optional: ID der Status-Variable (etwa 12345)
	* @return	void
	*/
	public static function FS20_SwitchMode($actor, $mode, $statusID = null)
	{
		$address = self::FS20_TranslateAddress($actor);
		self::_sendCommand(chr(0x01).self::$FS20_Housecode.chr($address).chr($mode).chr(0x00).chr(0x03).chr(0x00));
		
		if(!empty($statusID)) {
			$msg = ($mode == self::FS20_ON) ? true : false;
			$msg = ($mode == self::FS20_TOGGLE) ? !GetValueBoolean($statusID) : $msg;
			SetValueBoolean($statusID, $msg);
		}
	}
}

// Konfiguration hier vornehmen
LightManager::setInstanceId(12345 /*[Light-Manager Pro (HID)]*/);
LightManager::setFS20Housecode('12341234');
?>

Ein beispielhaftes Aktionsskript zum Schalten eines InterTechno-Aktors mit der Adresse A1 (an/aus abhängig vom aktuellen Status):


<?php
include('LightManager.ips.php');
$mode = GetValueBoolean($IPS_VARIABLE) ? LightManager::INTERTECHNO_OFF : LightManager::INTERTECHNO_ON;
LightManager::InterTechno_SwitchMode('A1', $mode, $IPS_VARIABLE, true);
?>

Ein Aktionsskript zum Dimmen eines lernfähigen InterTechno-Dimmers mit der Adresse A1 sieht wie folgt aus:


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

FS20-Aktor mit der Adresse 1122 einschalten (ohne eine Status-Variable zu aktualisieren):


<?php
include('LightManager.ips.php');
LightManager::FS20_SwitchMode('1122', LightManager::FS20_ON);
?>

Runterlassen des Uniroll-Rollladens Nr. 1:


<?php
include('LightManager.ips.php');
$status = 18015 /*[Zimmer\Rollladen\Status]*/;
LightManager::Uniroll_SwitchMode('1', LightManager::UNIROLL_DOWN, $status);
?>

Die Methoden sind ausführlich dokumentiert; falls trotzdem Fragen auftreten, einfach hier stellen :).

Das wäre der Code-Teil für das Shutter-Script, ergänzt um das starten HID-Instanz falls geschlossen/verloren.

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;

Das funktioniert bei mir seit ein paar Wochen wirklich gut.

lg
Marco

Hallo zusammen,

ich steuere einen Gebäudeteil (noch) mit Intertechno, den Rest über Z-Wave.

Die Einrichtung hat bisher gut geklappt und es funktioniert auch alles inkl. Webfront, nur mit der Steuerung des Lightmanagers habe ich noch Probleme.

Ich bin wie weiter oben beschrieben (Einrichten HID-Instanz, Script für die Klasse und Aktionsscript) verfahren und bekomme nun beim ausführen des Testscriptes (Aktor B3 schalten) folgende Fehlermeldungen:

[i]Notice: Undefined variable: IPS_VARIABLE in C:\Program Files\IP-Symcon\scripts\19782.ips.php on line 3

Warning: ‚‘ is not a valid integer value in C:\Program Files\IP-Symcon\scripts\19782.ips.php on line 3

Notice: Undefined variable: IPS_VARIABLE in C:\Program Files\IP-Symcon\scripts\19782.ips.php on line 4

Warning: Access violation at address 73051B10. Read of address 73051B10 in C:\Program Files\IP-Symcon\scripts\LightManager.ips.php on line 44

Warning: ‚‘ is not a valid integer value in C:\Program Files\IP-Symcon\scripts\LightManager.ips.php on line 77[/i]

Hat jemand einen Tipp, was ich vielleicht in der Konfiguration falsch gemacht habe, siehe auch Anlage ?

Danke

Der Script Code wäre gut.

So sieht man nicht wirklich viel.

Es scheint ja auch ein Problem mit den Variablen zu geben.

Poste mal deine Scripte 19782.ips.php und LightManager.ips.php

Grüße
Marco

Anbei die Scripts.

Bin ich vielleicht auch noch auf dem Holzweg mit dem angelegten „Dummy-Aktor“ als Z-Wave Switch ?

Gruß

19782.ips.pdf (4.16 KB)

LightManager.ips.pdf (23.5 KB)

Sehe ich das richtig daß du das Skript 19782 ausführen willst wenn du 35599 veränderst?
Oder hast du das Skript manuell ausgeführt?
Dann gibt es auch kein $IPS_VARIABLE

Gib mal die ID der zu holenden Variable händisch ein, also fix.
Und starte das Script nochmal.

$mode = GetValueBoolean(35599) ? LightManager::INTERTECHNO_OFF :
LightManager::INTERTECHNO_ON;
LightManager::InterTechno_SwitchMode('B3', $mode, 35599, true);

Ich gehe mal davon aus das du die Hilfe schon gelesen hast:
Systemvariablen: IP-Symcon :: Automatisierungssoftware

lg
Marco

Danke für den Hinweis mit der Doku, es erschliesst sich mir aber dennoch nicht, wo der Hund begraben liegt.

Bisher bin ich davon ausgegeangen, dass das Script 19782 dasjenige ist, dass man „anklickt“ (= manuell aufrufen ?) um die Aktoradresse B3 an das Script LightManager.ips zu übergeben, welches dann den eigentlichen „Schaltvorgang“ über die HID-Instanz durchführt.

Ich vermute, ich habe einen gehörigen Denkfehler in der Umsetzung, da ich davon ausgegegangen bin, mit den von Dir geposteten Scripts würde es so einfach funktionieren.

Was ist also mein Fehler ?

Gruß

Prinzipiell liegst du richtig.

Beachten musst du aber bei „$IPS_VARIABLE“ das hier die ID des Aufrufers steht, sei es eine Variable, ein Script eine Instanz, was auch immer.
Nur wenn du das Script manuell = über den Button ausführen aufrufst gibt es hier keine übergeordnete ID und somit läuft das Script auf einen Fehler.

Ich hoffe ich konnte das verständlich erklären.

Wenn du willst das bei einer Änderung von 35599 das Skript 19782 ausgeführt wird musst du ein Ereignis anlegen das dein Skript 19782 bei Variablenänderung von 35599 aufruft.

So hab ich das zigfach umgesetzt.

Also: Variable -> Ereignis -> Skript starten

Grüße
Marco

Sorry,

aber jetzt bin ich total verwirrt.

Könntest Du mir das step-by-step schildern, wie Du das umgesetzt hast, oder einen Verweis wo das vielleicht schon mal gefordert war ?

Danke,
Frank

Ok, versuchen wirs mal.

Doppelclick auf die Variable die du ändern möchtest/auf die du reagieren möchtest.
Weiter klicken.
Bild 1: Auswählen klicken
Bild 2: Skript auswählen das du starten willst.
Weiter klicken
Weiter klicken
OK klicken

Fertig

Somit müsste bei jeder Variablenänderung dein Skript aufgerufen werden.

Grüße
Marco

Auswahl.JPG

Welchem übergeordneten Objekt ist die Variable eigentlich zugeordnet ?