+ Antworten
Seite 2 von 7 ErsteErste 1 2 3 4 ... LetzteLetzte
Ergebnis 11 bis 20 von 63
  1. #11
    Registriert seit
    Jan 2010
    Ort
    Raum Bonn
    Beiträge
    263

    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
    Ipsymcon Unlimited -> IP Schnittstelle -> KNX BUS
    8 Schalt 8K / 6 Bin-Eingänge 8K / 1 8Fach Rolladenr / 17 Tast 8fach / 6 Tempsens / 1 Helligkeit / Rauchmelder mit KNX / 5 Präsenz / 4 IP Kameras / 1 Nabaztag / 640mA EIB PSU / Wallmount 19" Touch / Freebus User / Homematik / FS20

  2. #12
    Registriert seit
    Jan 2010
    Ort
    Raum Bonn
    Beiträge
    263

    Standard Update

    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


    PHP-Code:
    <?

     
    // 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->== "lights" ) && ( $json->== "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."\n"; }
            //if ( isset($json->state->y)) { echo "FARBE-Y: ".$json->state->y."\n"; }
        
    }








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



    2. 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

    PHP-Code:
    <?



    // 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 . "\n";
        //KEY ist die Laufende ID vom Phoscon Gateway
        


       

        
    switch ($data->uniqueid) {
                case 
    '90:fd:9f:ff:fe:33:54:4c-01':
                    echo 
    $data->name."\n";
                    
    $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."\n";
                    
    $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."\n";
                    
    $statevar 17762;
                    
    $brightvar 53670;
                    
    $satvar 0;
                    
    $huevar 0;
                    
    $xvar 0;
                    
    $yvar 0;
                    break;
                default:
                    echo 
    "Unbekannte Lampe\n";
                    
    $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 "\n";

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


    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)
    PHP-Code:
    <?
            
            
            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

    PHP-Code:
    <?
            
            
            
    //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."\n";
            
    $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..........

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Skripte.png 
Hits:	114 
Größe:	46.6 KB 
ID:	45667Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Instanzen.png 
Hits:	98 
Größe:	90.2 KB 
ID:	45668Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Schaltvariable.png 
Hits:	89 
Größe:	48.8 KB 
ID:	45669Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	DimVariable.png 
Hits:	73 
Größe:	48.5 KB 
ID:	45670
    Geändert von KrasserMann (27.09.18 um 20:59 Uhr)
    Ipsymcon Unlimited -> IP Schnittstelle -> KNX BUS
    8 Schalt 8K / 6 Bin-Eingänge 8K / 1 8Fach Rolladenr / 17 Tast 8fach / 6 Tempsens / 1 Helligkeit / Rauchmelder mit KNX / 5 Präsenz / 4 IP Kameras / 1 Nabaztag / 640mA EIB PSU / Wallmount 19" Touch / Freebus User / Homematik / FS20

  3. #13
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    9,346

    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.
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  4. #14
    Registriert seit
    Jan 2010
    Ort
    Raum Bonn
    Beiträge
    263

    Zitat Zitat von Nall-chan Beitrag anzeigen
    .....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

    Btw... hast du mal ein Beispiel wie das ohne diese Datei gehen würde?
    Geändert von KrasserMann (27.09.18 um 21:17 Uhr)
    Ipsymcon Unlimited -> IP Schnittstelle -> KNX BUS
    8 Schalt 8K / 6 Bin-Eingänge 8K / 1 8Fach Rolladenr / 17 Tast 8fach / 6 Tempsens / 1 Helligkeit / Rauchmelder mit KNX / 5 Präsenz / 4 IP Kameras / 1 Nabaztag / 640mA EIB PSU / Wallmount 19" Touch / Freebus User / Homematik / FS20

  5. #15
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    9,346

    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
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  6. #16
    Registriert seit
    Jan 2010
    Ort
    Raum Bonn
    Beiträge
    263

    Cool, muss ich mal testen. Danke!!
    Ipsymcon Unlimited -> IP Schnittstelle -> KNX BUS
    8 Schalt 8K / 6 Bin-Eingänge 8K / 1 8Fach Rolladenr / 17 Tast 8fach / 6 Tempsens / 1 Helligkeit / Rauchmelder mit KNX / 5 Präsenz / 4 IP Kameras / 1 Nabaztag / 640mA EIB PSU / Wallmount 19" Touch / Freebus User / Homematik / FS20

  7. #17
    Registriert seit
    May 2015
    Beiträge
    34

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

    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.

  8. #18
    Registriert seit
    Oct 2011
    Ort
    Hattersheim (Hessen)
    Beiträge
    6,596

    Zitat Zitat von dgh Beitrag anzeigen
    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).
    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.

  9. #19
    Registriert seit
    Nov 2017
    Ort
    Nähe Lübeck
    Beiträge
    113

    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

  10. #20
    Registriert seit
    May 2015
    Beiträge
    34

    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?

Ähnliche Themen

  1. Trådfri an Hue - Fernbedienung weiter nutzen?
    Von Titus im Forum Schaufenster
    Antworten: 2
    Letzter Beitrag: 07.11.17, 19:39
  2. IKEA Trådfri / Zigbee Lampen
    Von Fonzo im Forum Schaufenster
    Antworten: 0
    Letzter Beitrag: 28.03.17, 08:24
  3. Philips Hue mit RGB Slider ansteuern
    Von axelp im Forum Haustechnik
    Antworten: 5
    Letzter Beitrag: 20.04.13, 21:28
  4. lights & building
    Von UVoigi im Forum Off Topic
    Antworten: 5
    Letzter Beitrag: 28.03.10, 01:25

Stichworte