ZigBee Lights / Tradfri oder Hue per RaspBEE von Dresden Elektronik ansteuern!

Hallo zusammen, auf der Suche nach eine schönen Integrierbarkeit von Ikea Tradfri Lampen und anderen Funk Komponenten bin ich auf das RaspBee Gateway von Dresden Elektronik gestoßen.

Dieses verfügt über einen Websocket und eine REST-API und ich versuche mich gerade mal da an der Ansteuerung.

An dieser Stelle würde ich mich über Hilfe freuen.

Was ich bisher habe:

Daten -> IPS

IPS Verbindet sich per Websocket Client mit dem Raspbee und empfängt in einer Registervariable fleißig die Daten wenn sich im Funknetz irgendwas tut.

Ein bislang ganz simples Verarbeitungs Script nimmt die Daten und trägt sie in IPS Variablen ein. Damit sehe ich schonmal ob eine Lampe aktuell AN oder AUS ist und ihre Helligkeit.

Script:

<?

 // wenn das Skript von einer RegisterVariable-Instanz aus aufgerufen worden ist
if ($_IPS['SENDER'] == "RegisterVariable")
{
	// bereits im Puffer der Instanz vorhandene Daten in $data kopieren
	$data  = RegVar_GetBuffer($_IPS['INSTANCE']);
	$json=json_decode($_IPS['VALUE']);
	
    if (( $json->r == "lights" ) && ( $json->e == "changed" )) {
        if ( isset($json->state->on)) { 
                    if ($json->state->on == 1  ) {                                                    
                        if ( $json->id == "1") { SetValue(30319 /*[MakiHome\Erdgeschoss\Wohnzimmer\Tradfri Lampe\Schalten]*/,true); } 
                        } else 
                        { if ( $json->id == "1") { SetValue(30319 /*[MakiHome\Erdgeschoss\Wohnzimmer\Tradfri Lampe\Schalten]*/,false); } 
                    }
        }
        if ( isset($json->state->bri)) {
             if ( $json->id == "1") { SetValue(22239 /*[MakiHome\Erdgeschoss\Wohnzimmer\Tradfri Lampe\Helligkeit]*/,$json->state->bri); } 
        }

        if ( isset($json->state->x)) { echo "FARBE-X: ".$json->state->x."
"; }
        if ( isset($json->state->y)) { echo "FARBE-Y: ".$json->state->y."
"; }
    }








	/*
	if ( $json->r == "lights" ) {
		if ( $json->state->on ) {	
			//echo "Lampe mit ID: ".$json->id." wurde eingeschaltet
";
		} else {
			//echo "Lampe mit ID: ".$json->id." wurde ausgeschaltet
";
		}		
	
        if ( $json->state->bri ) {	
			//echo "Lampe mit ID: ".$json->id." Helligkeit: ".$json->state->bri."
";
        }    
	}
	*/
   /*
   	echo $json->t;		//Type Of Message
	echo "
";
	echo $json->e;		//Type of Event
	echo "
";
	echo $json->r;		//Type of Resource
	echo "
";
	echo $json->id;		//ID
	echo "
";
    echo $json->state->on;		//ID
	echo "
";
    echo $json->state->bri;		//ID
	echo "
";
    echo $json->state->x;		//ID
	echo "
";
    echo $json->state->y;		//ID
	echo "
";
    */  
 
  
// Inhalt von $data im Puffer der RegisterVariable-Instanz speichern
RegVar_SetBuffer($_IPS['INSTANCE'], $data);
}
?>

IPS → RaspBee

Ich kann über ein einfaches Script die änderung einer IPS Variable an den Raspbee senden warauf hin er z.B. das passende Licht AN oder Aus macht. Dieses Script kann einfach als Aktionsscript an eine Variable mit ~Switch Profil gehängt werden.

<?
		
		
		SetValue((int)$IPS_VARIABLE,!GetValue((int)$IPS_VARIABLE));
		
		$currentstate=GetValue((int)$IPS_VARIABLE);
		
		if ( $currentstate == "false" ) { $data='{"on": true}'; } else { $data='{"on": false}'; }

		$curl = curl_init();

		curl_setopt_array($curl, array(
		  	CURLOPT_URL => "http://192.168.1.49/api/MEINAPIKEY/lights/1/state",
		  	CURLOPT_RETURNTRANSFER => true,
  			CURLOPT_ENCODING => "",
  			CURLOPT_MAXREDIRS => 10,
			CURLOPT_TIMEOUT => 30,
  			CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  			CURLOPT_CUSTOMREQUEST => "PUT",
  			CURLOPT_POSTFIELDS => $data,
  			CURLOPT_HTTPHEADER => array(
    			"cache-control: no-cache",
    			"content-type: application/json",
    			"x-api-key: MEINAPIKEY"
  			),
		));
		

		$response = curl_exec($curl);
		$err = curl_error($curl);

		curl_close($curl);

		if ($err) {
  			echo "cURL Error #:" . $err;
		} else {
  			//echo $response;
		}

?>

Aktuell stellt sich mir die folgenden Fragen:

Wie erstelle ich ein „Geräteobjekt“ (Instanz) für IPS das im Prinzip die Eigenschaften einer Ikea Birne abbildert.
In der Instanz müsste die ID (Adresse der Lampe auf dem ZigBee Netz) eingetragen werden können und sie sollte folgende Eigenschaften als Statusvariablen haben: (Status (AN/AUS), Helligkeit 0-100%(intensity 255), Farbton, Sättigung) Die Farben am besten als Color Picker.

Die Lampen wollen ihre Farbangabe per CIE x,y Daten haben.

Wie bekomme ich in IPS ein Mapping der eingehenden Daten in denen ja nur die ID der Lampe enthalten ist auf eine Instanz ID oder Variablen ID hin.

Vielleicht kann mir ja hier jemand weiter helfen oder ist sogar fähig / interessiert dazu ein Modul oder sowas zu Bauen.

PHP mäßg reichts bei mir leider nur fürs nötigste.

lG Martin

Hi,

ich beschäftige mich schon seit ca. 2 Jahren mit dem raspbee Gateway. Habe ca. 30 Geräte eingebunden (Lampen, Plugs, Bewegungsmelder, Fernbedienung etc. von verschiedenen Herstellern) Insofern kenne ich alle Eigenheiten und die Schnittstelle sehr gut.
Die Vorteile vom raspbee (auch als Stick unter Windows lauffähig) sind einfach die weitestgehende Herstellerunabhängigkeit (muss halt nur zigbee Protokoll sein), die websockets (kein pull notwendig) und die laufende Weiterentwicklung (open source) durch den Hersteller und die community.
Die Ansteuerung mache ich allerdings von ausserhalb, weil auch ich noch kein eigenes Modul schreiben kann. Im Prinzip habe ich eine Konfigurationsdatei, die die unique id eines Gerätes ( wichtig…nicht die Nummer des Gerätes nehmen, da die sich ändern kann wenn man das zb. gateway neu aufsetzt) mit den entsprechenden Objektnummern in ips verbindet. Funktioniert sehr gut, aber es ist immer manuelle Arbeit beim Hinzufügen eines neuen Gerätes notwendig. Allerdings sind dann die Funktionen, die die Geräte schalten, in einer Klasse zusammengefügt, sodass hier keine Arbeit mehr entsteht bei einem neuen Gerät.
Ich wäre sehr daran interessiert an einem Modul mitzuarbeiten…vielleicht lerne ich dann ja auch einmal ein eigenes Modul zuschreiben.

Hi, danke für deine Antwort. Zwei kurze Fragen dazu…

  1. Kann mann über den Wegsacket auch Befehle an die Lampe loswerden? Alle Versuche von mir in dieser Richtung sind leider ohne erfolg gewesen. Aber vielleicht mach ich auch was falsch.

  2. Diese Unique ID wird aber vom Wegsacket nicht übermittelt oder sehe ich sie nur nicht? Ich bekomme nur die ID meiner ersten Lampe ID=1 meiner zweiten Lampe ID=2 usw,

Gruß Martin

zu 1) Nein, da geht nur „GET“.
„PUT“,„POST“,„DELETE“ wie in Deinem Beispiel mit curl.

zu 2) Wenn Du in deinem Browser zb. eingibst: „http://192.168.178.40:8080/MEINAPIKEY/lights/3/“ kommt auch die unique id. Den Link kannst Du ja mit IPS Mitteln aufrufen.

Ergebnis des Aufrufs:
{„ctmax“:454,„ctmin“:153,„etag“:„d38551217532bca4534ba77bb680ab6b“,„hascolor“:true,„manufacturername“:„Philips“,„modelid“:„LTW001“,„name“:„light_2“,„state“:{„alert“:„none“,„bri“:48,„colormode“:„ct“,„ct“:366,„on“:true,„reachable“:true},„swversion“:„5.50.1.16698“,„type“:„Color temperature light“,„uniqueid“:"00:17:88:01:02:37:70:47-0b"}

Gruss

Hallo,

ich habe seit gestern auch das RaspBEE Modul bzw. den Stick davon.

Ich bin leider auch noch nicht bewandert, was Module an geht, würde mich aber mal dran versuchen - vielleicht klappt es ja. Wie habt Ihr Euch denn beim Websocket registriert, so dass Ihr die Änderungen mitgeteilt bekommt?

Vielleicht schaffen wir das ja gemeinsam…

Nun als erstes Installierst du dir im IPS das Wesocket Modul von Nall Chan

IPSNetwork/WebSocketServer at master · Nall-chan/IPSNetwork · GitHub

Danach erstellst du dir unter Splitter Instanzen eine Websocket Client Instanz. Diese wird dann auch einen ClientSocket erstellen.

In der Websocket Instanz sind folgende Dinge einzustellen:

URL: ws://IP-DES-RASPBEE:443

Port 443 war für meinen der Richtige.

Protokoll Version 13

Alles weitere bleibt wie es ist.

Der Client Socket verbindet sich dann halt auf die IP und Port 443

Nun brauchst du noch eine REGISTER VARIABLE die du mit dem Websocket Client verbindest und der du ein Auswerte Script zuweist.

Einen Anfang eines solchen Scripts habe ich ja am begin des Beitrags gepostet.

Viel Erfolg!

Gruß Martin

Hi,

ich bin glaub ich einfach zu doof zu - ich habe jetzt jede Menge gelesen und gedacht, die Basics verstanden zu haben, scheitere aber dann doch wieder schon am Anfang… :frowning:

Ich habe folgenden kurzen Testcode als Aktionsskript zur Register-Variable:


 // wenn das Skript von einer RegisterVariable-Instanz aus aufgerufen worden ist
if ($_IPS['SENDER'] == "RegisterVariable")
{
    // bereits im Puffer der Instanz vorhandene Daten in $data kopieren
    $data  = RegVar_GetBuffer($_IPS['INSTANCE']);
    $json = json_decode($_IPS['VALUE']);
    
var_dump(json_decode($json));
var_dump(json_decode($json, true));
    
    
// Inhalt von $data im Puffer der RegisterVariable-Instanz speichern
RegVar_SetBuffer($_IPS['INSTANCE'], $data);
}

Allerdings geben mir beide var_dumps „NULL“ aus, was ich einfach nicht verstehe.

Ich habe zum Test einmal im Firefox einen WebSocket Client installiert und erhalte dort saubere json Nachrichten…

Hast Du hier noch eine Idee für mich?

Warum zweimal decode?
Einmal reicht doch.

$json = json_decode($_IPS['VALUE']);

var_dump($json);

Michael

Hallo,

vielen Dank - aber irgendwie bin ich zu doof zu :frowning:

ein

echo $_IPS['VALUE'];

bringt mir

27.09.2018, 18:14:10 | Register Variable |  k{"e":"changed","id":"3","r":"sensors","state":{"lastupdated":"2018-09-27T16:14:10","power":40},"t":"event"}

ein

$json = json_decode($_IPS['VALUE']);

var_dump($json); 

führt zu

27.09.2018, 18:15:41 | Register Variable |  NULL
 

Das ist doch zum Mäusemelken.

Ein Websocketclient unter Firefox bringt mir:

{
  "e": "changed",
  "id": "3",
  "r": "sensors",
  "state": {
    "lastupdated": "2018-09-27T16:16:47",
    "power": 40
  },
  "t": "event"
}

Hast Du noch einen Tip für mich?

Grüße
Dominic

Deine RegisterVariable hängt wohl am ClientSocket und nicht am WebSocket-Client.
Michael

Ja so sieht es aus.

sieht man auch am Buchstaben vor der Geschweiften Klammer:

k{„e“:„changed“,„id“:„3“,„r“:„sensors“,„state“:{„lastupdated“:„2018-09-27T16:14:10“,„power“:40},„t“:„event“}


Reihenfolge:

Client-Socket -----> Websocket Client -------> Register Variable

So, hier mal mein aktueller Stand der Dinge für alle die es brauchen können:

  1. Datenempfang vom Raspbee -> IPS

CLIENT SOCKET->WEBSOCKETCLIENT->REGISTERVARIABLE-> SCRIPT: Auswertung

<?

 // wenn das Skript von einer RegisterVariable-Instanz aus aufgerufen worden ist
if ($_IPS['SENDER'] == "RegisterVariable")
{
    $apikey=GetValue(48874);

    //ID ARRAY aus Datei holen
    // Datei Struktur:
    // UniqueID,Id,StateVarID,BrightVarId,SatVarID,HueVarID,XVarID,YVarID
       
    $string_data = file_get_contents("tradfri.db");     //Lädt Datei in String
    $lights = unserialize($string_data);                //String in Array zurückwandeln
    

	// bereits im Puffer der Instanz vorhandene Daten in $data kopieren
	$data  = RegVar_GetBuffer($_IPS['INSTANCE']);
	$json=json_decode($_IPS['VALUE']);
	
    

    if (( $json->r == "lights" ) && ( $json->e == "changed" )) {
        if ( isset($json->state->on)) { 
                    
                    //ermitteln der nötigen variablen id!
                    $jid = $json->id;
                    $key = array_search($jid, $lights);               // Sucht die Statusvariablen ID und ermittelt den KEY dazu
                    $key = $key +1;                                     // Die gesuchte ID ist eine Stelle Rechts von der ID
                    $id = $lights[$key];   
                    
                    if ($json->state->on == 1  ) { SetValue($id,true);            
                                                } else 
                                                { SetValue($id,false); 
                    }
        }
        if ( isset($json->state->bri)) {
             //ermitteln der nötigen variablen id!
                    $jid = $json->id;
                    $key = array_search($jid, $lights);               // Sucht die Statusvariablen ID und ermittelt den KEY dazu
                    $key = $key +2;                                     // Die gesuchte ID ist zwei Stellen Rechts von der ID
                    $id = $lights[$key]; 
                    SetValue($id,$json->state->bri);             
        }

        //if ( isset($json->state->x)) { echo "FARBE-X: ".$json->state->x."
"; }
        //if ( isset($json->state->y)) { echo "FARBE-Y: ".$json->state->y."
"; }
    }








	
// Inhalt von $data im Puffer der RegisterVariable-Instanz speichern
RegVar_SetBuffer($_IPS['INSTANCE'], $data);
}
?>

Diese Script setzt bei Empfangen Daten für STATE->ON und STATE->BRI die zu der Lampe gehörenden Variablen in IPS

  1. Regelmäßiges erstellen einer Datenbank aller Lichter mit ihren Unique Id,Id und den zugehörigen Statusvariablen in IPS

Dies mache ich automatisch alle 15 Minuten um in allen anderen Scripten die Zuordnung der IPS Variablen zu den Geräten machen zu können

<?



// Dieses Script liest regelmäßig den Status aller Lampen aus und erstellt eine 
// Datenbankdatei um die Zuordnung UniqueID,ID und IPS Status Variablen zu ermöglichen
// Diese Datenbank Datei wird von allen anderen Tradfri Scripten benötigt.

// Datei Struktur:
// UniqueID,Id,StateVarID,BrightVarId,SatVarID,HueVarID,XVarID,YVarID

$apikey=GetValue(48874);
$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "http://192.168.1.49/api/$apikey/lights",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  //CURLOPT_POSTFIELDS => $data,
  CURLOPT_HTTPHEADER => array(
    "cache-control: no-cache",
    "content-type: application/json",
    "x-api-key: $apikey"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  $status = json_decode($response);
  $array = get_object_vars($status);
  //var_dump($array);
  $index = 0;

  foreach($array as $key => $data) {
    //echo $key . "
";
    //KEY ist die Laufende ID vom Phoscon Gateway
    


   

    switch ($data->uniqueid) {
            case '90:fd:9f:ff:fe:33:54:4c-01':
                echo $data->name."
";
                $statevar = 30319;
                $brightvar = 22239;
                $satvar = 13336;
                $huevar = 17446;
                $xvar = 28584;
                $yvar = 22764;

                break;
            case '00:0b:57:ff:fe:d9:8e:3a-01':
                echo $data->name."
";
                $statevar = 32094;
                $brightvar = 46600;
                $satvar = 0;
                $huevar = 0;
                $xvar = 0;
                $yvar = 0;
                break;
            case '00:0b:57:ff:fe:db:ac:54-01':
                echo $data->name."
";
                $statevar = 17762;
                $brightvar = 53670;
                $satvar = 0;
                $huevar = 0;
                $xvar = 0;
                $yvar = 0;
                break;
            default:
                echo "Unbekannte Lampe
";
                $statevar = 0;
                $brightvar = 0;
                $satvar = 0;
                $huevar = 0;
                $xvar = 0;
                $yvar = 0;
                break;
        
    }
    
    
    // Datei Struktur 10 Felder:
    // UniqueID,Id,StateVarID,BrightVarId,SatVarID,HueVarID,XVarID,YVarID,Reserve,Reserve
    
    $lights[$index]=$data->uniqueid;
    $index=$index+1;
    $lights[$index]=$key;
    $index=$index+1;
    $lights[$index]=$statevar;
    $index=$index+1;
    $lights[$index]=$brightvar;
    $index=$index+1;
    $lights[$index]=$satvar;
    $index=$index+1;
    $lights[$index]=$huevar;
    $index=$index+1;
    $lights[$index]=$xvar;
    $index=$index+1;
    $lights[$index]=$yvar;
    $index=$index+1;
    $lights[$index]="nix";
    $index=$index+1;
    $lights[$index]="nix";
    $index=$index+1;

  }  
  
}

//echo "
";

//var_dump($lights);
$string_data = serialize($lights);
file_put_contents("tradfri.db", $string_data);
echo "Writing Tradfri State to Array DB!
";
?>

Diese Datei „trafri.db“ wird im Scripts Verzeichnis abgelegt und jedesmal überschrieben.
Sie wird von den andern Scripten Geladen um die zum Gerät gehörigen Variablen ID´s auslesen zu können.

Das TOGGLE Aktionsscript (invertiert mit jedem Aufruf den Schaltzustand der betreffenden Lampe)

<?
		
		
		SetValue((int)$IPS_VARIABLE,!GetValue((int)$IPS_VARIABLE));
		
		$currentstate=GetValue((int)$IPS_VARIABLE);
		$varid = (int)$IPS_VARIABLE;
        $apikey=GetValue(48874);

        //ID ARRAY aus Datei holen
        // Datei Struktur:
        // UniqueID,Id,StateVarID,BrightVarId,SatVarID,HueVarID,XVarID,YVarID
       
        $string_data = file_get_contents("tradfri.db");     //Lädt Datei in String
        $lights = unserialize($string_data);                //String in Array zurückwandeln
        $key = array_search($varid, $lights);               // Sucht die Statusvariablen ID und ermittelt den KEY dazu
        $key = $key -1;                                     // Die gesuchte ID ist eine Stelle Links von der Statevar
        $id = $lights[$key];                                // die ID aus dem Array lesen

		if ( $currentstate == "false" ) { $data='{"on": true}'; } else { $data='{"on": false}'; }

		$curl = curl_init();

		curl_setopt_array($curl, array(
		  	CURLOPT_URL => "http://192.168.1.49/api/$apikey/lights/$id/state",
		  	CURLOPT_RETURNTRANSFER => true,
  			CURLOPT_ENCODING => "",
  			CURLOPT_MAXREDIRS => 10,
			CURLOPT_TIMEOUT => 30,
  			CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  			CURLOPT_CUSTOMREQUEST => "PUT",
  			CURLOPT_POSTFIELDS => $data,
  			CURLOPT_HTTPHEADER => array(
    			"cache-control: no-cache",
    			"content-type: application/json",
    			"x-api-key: $apikey"
  			),
		));
		

		$response = curl_exec($curl);
		$err = curl_error($curl);

		curl_close($curl);

		if ($err) {
  			echo "cURL Error #:" . $err;
		} else {
  			//echo $response;
		}

?>

Das DIM Aktionsscript (Liest den Wert der Brightness IPS Variable uns sendet ihn an die zugehörige Lampe

<?
		
		
		//Variable setzen
        SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
		$currentstate=GetValue((int)$IPS_VARIABLE);
		$varid = (int)$IPS_VARIABLE;
        $apikey=GetValue(48874);

        //ID ARRAY aus Datei holen
        // Datei Struktur:
        // UniqueID,Id,StateVarID,BrightVarId,SatVarID,HueVarID,XVarID,YVarID
       
        $string_data = file_get_contents("tradfri.db");     //Lädt Datei in String
        $lights = unserialize($string_data);                //String in Array zurückwandeln
        $key = array_search($varid, $lights);               // Sucht die Statusvariablen ID und ermittelt den KEY dazu
        $key = $key -2;                                     // Die gesuchte ID ist zwei Stelle Links von der Brightevar
        $id = $lights[$key];                                // die ID aus dem Array lesen

        $data='{"bri": '.$currentstate.'}';
        //echo "BRI: ".$data."
";
		$curl = curl_init();

		curl_setopt_array($curl, array(
		  	CURLOPT_URL => "http://192.168.1.49/api/$apikey/lights/$id/state",
		  	CURLOPT_RETURNTRANSFER => true,
  			CURLOPT_ENCODING => "",
  			CURLOPT_MAXREDIRS => 10,
			CURLOPT_TIMEOUT => 30,
  			CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  			CURLOPT_CUSTOMREQUEST => "PUT",
  			CURLOPT_POSTFIELDS => $data,
  			CURLOPT_HTTPHEADER => array(
    			"cache-control: no-cache",
    			"content-type: application/json",
    			"x-api-key: $apikey"
  			),
		));
		

		$response = curl_exec($curl);
		$err = curl_error($curl);

		curl_close($curl);

		if ($err) {
  			echo "cURL Error #:" . $err;
		} else {
  			//echo $response;
		}

?>

So hier noch ein paar Screenshots…

Tip: Nutzer von Rpi oder andere Geräten mit SD Karten als Speichermedium; sollten auf eine andere Lösung als der tradfri.db setzen.
IPS bietet genügend Alternativen wie Dummy-Instanzen und der Vergabe von Idents zu allen Objekten um die Ziel-Variablen dynamisch im Script zu ermitteln.
Michael
PS: RegVar_SetBuffer und GetBuffer haben im ersten Script so keine Funktion.

Danke für den Hinweis, sind Reste aus nem Script das ich abgekupfert hab. Ich habe eigentlich gar keine Ahnung von dem was ich hier tu aber dafür funktioniert es ganz gut :wink:

Btw… hast du mal ein Beispiel wie das ohne diese Datei gehen würde?

Unterhalb vom AusleseScript nur die $data->uniqueid zu id Zuordnung als z.b. serialized Array oder json in einer String-Variable speichern.
Und diese dann in allen anderen Scripte zur Zuordnung der id nutzen.
Dabei gleich pro id eine Dummy-Instanz erzeugen und mit IPS_SetIdent die ID setzen. Dort drunter werden dann die Variablen erzeugt und auch mit Idents erstellt wie z.b. state.

Das RegisterVariable Script holt dann erst mit IPS_GetObjectByIdent die Dummy-Instanz anhand der id im JSON und dann genauso auch die Variable unterhalb der Dummy-Instanz.
Michael

Cool, muss ich mal testen. Danke!!

Habe mich nun doch einmal intensiv mit der Erstellung eines Moduls dazu beschäftigt und bin auch schon relativ weit.

Ich hänge im Moment nur an einem Problem und finde keine Lösung.

Im Konfigurationsmodus zeige ich die bestehenden und die neuen Instanzen (falls neue Geräte da sind) an. Hier kann der User dann über markieren mit einer Checxkbox die Instanz anlegen bzw. löschen oder deaktivieren.

Ich möchte nun beim Klick auf einen Eintrag in dieser Liste erweiterte Informationen zu diesem Gerät anzeigen oder zumindest irgendeine Reaktion erzeugen (ohne die Liste zu verlassen bzw. einen Button zu drücken).

Nur, wie bekomme ich IPS dazu auf diesen Klick zu reagieren ? Oder geht das im Moment in dieser Version 5.x gar nicht ?
Probiert habe ich bereits alles mögliche, sowohl in der „alten“ Konsole als auch in der WebKonsole.

Dazu nutzt Du einen Configurator, hier hast Du die Möglichkeit auch Listen zu verschachteln, d.h. Du kanst unterhalb von einem Eintrag mit aufklicken weitere Information zu dem Eintrag anzeigen lassen. Die Instanzen werden dann aus dem Configurator erstellt.

Klasse - ich habe auch angefangen, bin aber noch ganz ganz am Anfang - wenn Du schon so weit bist, dann lege ich das erst einmal wieder auf Eis.

Ich unterstütze Dich gerne beim testen, wenn Du magst…

Viele Grüße
Dominic

Danke, aber den Konfigurator habe ich ja benutzt. Er zeigt mir auch eine Liste aller Devices an. Ich möchte aber auf einen Eintrag in der Liste klicken und dann soll ein weiteres Fenster aufgehen, dass Detailinformationen zeigt. Ich habe jetzt schon mit zig-Kombinationen im form.json ausprobiert, schaffe es aber nicht ein valides json hinzubekommen. Entweder es gibt nachher einen Fehler in IPS oder es passiert gar nichts…
Ich habe jetzt einen Checkbutton in jeder Listzeile, Löschbutton etc. , das geht alles, nur auf die Zeile klicken und es passiert etwas(popup Fenster o.ä.), funktioniert nicht. Ich nehme an dafür gibt es (noch) keinen Event?