+ Antworten
Seite 10 von 10 ErsteErste ... 8 9 10
Ergebnis 91 bis 95 von 95
  1. #91
    Registriert seit
    Jun 2005
    Beiträge
    3,599

    ;-)
    nee, leider habe ich nichts was ich zeigen könnte. Ich wollte eigentlich nichts mit Ikon machen, aber ich sehe auch keinen anderen Horizont.
    Nur die gängigsten Programme mochte ich in der Webfront haben,
    Gruß Helmut

  2. #92
    Registriert seit
    Jun 2005
    Beiträge
    3,599

    Ich habe jetzt eine Lösung:
    ich habe eine Integervariable erstellt, der ein selbst erstelltes Variablenprofil erstellt, bei jedem Wert den Text des Sendernamens eingeschrieben.
    Der muß aber genau dem Text aus dem Namen, der in "print_r($channels);" auftaucht, entsprechen.

    Der Intergervariablen ein Aktionscript zugewiesen, das ruft ein Script auf, deren Funktion es iM ist das Gerät auf den Sender zu schalten.

    Damit habe ich nun nicht gerade alle fast 1000 Sendernamen erstellt, aber da Integer grösser als die angesprochenen 512 Werte annehmen könnte sollte eine große Senderanzahl möglich sein.

    Bitte entschuldigt mein zusammenkopiertes Script, aber es läuft.
    Aktionscript:
    PHP-Code:
    <?

    SetValue
    ($_IPS['VARIABLE'], $_IPS['VALUE']);

    IPS_RunScript(40575 /*[Fernseher\Kanal Steuern]*/);

    ?>
    LG Script:
    PHP-Code:
    <?
    session_start
    ();
    $tv = new SmartTV('192.168.x.xyz'); // new SmartTV('192.168.2.103', 8080)
    if (!isset($_SESSION['SESSION_ID'])) {

        
    $tv->setPairingKey(xxxxxxx); // 

        
    try {
            
    $_SESSION['SESSION_ID'] = $tv->authenticate();
        } catch (
    Exception $e) {
            die(
    'Authentication failed, I am sorry.');
        }
    } else {
        
    $tv->setSession($_SESSION['SESSION_ID']);
    }
        
    if (isset(
    $_GET['cmd'])) {
        switch(
    $_GET['cmd']) {
            case 
    'screen':
                
    header('Content-Type: image/jpeg');
                exit (
    $tv->queryData(TV_INFO_SCREEN));
                break;
                
            case 
    'changeChannel':
                if (!isset(
    $_GET['value'])) {
                    exit;
                }
                
    $channelName strtolower($_GET['value']);
                foreach (
    $_SESSION['CHANNEL_LIST'] as $channel) {
                    if (
    strtolower($channel['chname']) == $channelName) {
                        
    $tv->processCommand(TV_CMD_CHANGE_CHANNEL$channel);
                        break;
                    }
                }
                break;
                
            case 
    'info':
                
    $currentChannel $tv->queryData(TV_INFO_CURRENT_CHANNEL);
                
    $text 'You\'re watching <b>'.$currentChannel->progName.'</b> on <b>'.$currentChannel->chname.'</b>';
                
                if (!isset(
    $_SESSION['CURRENT_CHANNEL']) || strtolower($currentChannel->chname) != strtolower($_SESSION['CURRENT_CHANNEL'])) {
                    
    $text .= '___---___Change channel: <select id="programList">';
                    if (!isset(
    $_SESSION['CHANNEL_LIST'])) {
                        
    $_SESSION['CHANNEL_LIST'] = array();
                        foreach (
    $tv->queryData(TV_INFO_CHANNEL_LIST) as $channel) {
                            
    $_SESSION['CHANNEL_LIST'][] = (array)$channel;
                        }
                    }
                    foreach (
    $_SESSION['CHANNEL_LIST'] as $channel) {
                        
    $text .= '<option value="'.$channel['chname'].'" '.(strtolower($channel['chname']) == strtolower($currentChannel->chname) ? 'selected' '').'>'.$channel['chname'].'</option>';
                    }
                    
    $text .= '</select>';
                    
    $_SESSION['CURRENT_CHANNEL'] = (string)$currentChannel->chname;
                }
                exit (
    $text);
                break;
                
            case 
    'keyPress':
                if (!isset(
    $_GET['value'])) {
                    exit;
                }
                
    $codes = array(
                    
    'up' => TV_CMD_UP,
                    
    'down' => TV_CMD_DOWN,
                    
    'left' => TV_CMD_LEFT,
                    
    'right' => TV_CMD_RIGHT,
                    
    'enter' => TV_CMD_OK,
                    
    'esc' => TV_CMD_EXIT,
                    
    'backspace' => TV_CMD_BACK,
                    
    'h' => TV_CMD_HOME_MENU
                
    );
                
    $tv->processCommand($codes[$_GET['value']]);
                break;
        }
        exit;
    } else {
        unset (
    $_SESSION['CURRENT_CHANNEL']);
    }






    if (!
    extension_loaded('curl')) {
        die (
    'You have to install/enable curl in order to use this application.');
    }

    /**
     * Some constants
    **/
    define ('TV_CMD_POWER'1);
    define ('TV_CMD_NUMBER_0'2);
    define ('TV_CMD_NUMBER_1'3);
    define ('TV_CMD_NUMBER_2'4);
    define ('TV_CMD_NUMBER_3'5);
    define ('TV_CMD_NUMBER_4'6);
    define ('TV_CMD_NUMBER_5'7);
    define ('TV_CMD_NUMBER_6'8);
    define ('TV_CMD_NUMBER_7'9);
    define ('TV_CMD_NUMBER_8'10);
    define ('TV_CMD_NUMBER_9'11);
    define ('TV_CMD_UP'12);
    define ('TV_CMD_DOWN'13);
    define ('TV_CMD_LEFT'14);
    define ('TV_CMD_RIGHT'15);
    define ('TV_CMD_OK'20);
    define ('TV_CMD_HOME_MENU'21);
    define ('TV_CMD_BACK'23);
    define ('TV_CMD_VOLUME_UP'24);
    define ('TV_CMD_VOLUME_DOWN'25);
    define ('TV_CMD_MUTE_TOGGLE'26);
    define ('TV_CMD_CHANNEL_UP'27);
    define ('TV_CMD_CHANNEL_DOWN'28);
    define ('TV_CMD_BLUE'29);
    define ('TV_CMD_GREEN'30);
    define ('TV_CMD_RED'31);
    define ('TV_CMD_YELLOW'32);
    define ('TV_CMD_PLAY'33);
    define ('TV_CMD_PAUSE'34);
    define ('TV_CMD_STOP'35);
    define ('TV_CMD_FAST_FORWARD'36);
    define ('TV_CMD_REWIND'37);
    define ('TV_CMD_SKIP_FORWARD'38);
    define ('TV_CMD_SKIP_BACKWARD'39);
    define ('TV_CMD_RECORD'40);
    define ('TV_CMD_RECORDING_LIST'41);
    define ('TV_CMD_REPEAT'42);
    define ('TV_CMD_LIVE_TV'43);
    define ('TV_CMD_EPG'44);
    define ('TV_CMD_PROGRAM_INFORMATION'45);
    define ('TV_CMD_ASPECT_RATIO'46);
    define ('TV_CMD_EXTERNAL_INPUT'47);
    define ('TV_CMD_PIP_SECONDARY_VIDEO'48);
    define ('TV_CMD_SHOW_SUBTITLE'49);
    define ('TV_CMD_PROGRAM_LIST'50);
    define ('TV_CMD_TELE_TEXT'51);
    define ('TV_CMD_MARK'52);
    define ('TV_CMD_3D_VIDEO'400);
    define ('TV_CMD_3D_LR'401);
    define ('TV_CMD_DASH'402);
    define ('TV_CMD_PREVIOUS_CHANNEL'403);
    define ('TV_CMD_FAVORITE_CHANNEL'404);
    define ('TV_CMD_QUICK_MENU'405);
    define ('TV_CMD_TEXT_OPTION'406);
    define ('TV_CMD_AUDIO_DESCRIPTION'407);
    define ('TV_CMD_ENERGY_SAVING'409);
    define ('TV_CMD_AV_MODE'410);
    define ('TV_CMD_SIMPLINK'411);
    define ('TV_CMD_EXIT'412);
    define ('TV_CMD_RESERVATION_PROGRAM_LIST'413);
    define ('TV_CMD_PIP_CHANNEL_UP'414);
    define ('TV_CMD_PIP_CHANNEL_DOWN'415);
    define ('TV_CMD_SWITCH_VIDEO'416);
    define ('TV_CMD_APPS'417);
    define ('TV_CMD_MOUSE_MOVE''HandleTouchMove');
    define ('TV_CMD_MOUSE_CLICK''HandleTouchClick');
    define ('TV_CMD_TOUCH_WHEEL''HandleTouchWheel');
    define ('TV_CMD_CHANGE_CHANNEL''HandleChannelChange');
    define ('TV_CMD_SCROLL_UP''up');
    define ('TV_CMD_SCROLL_DOWN''down');
    define ('TV_INFO_CURRENT_CHANNEL''cur_channel');
    define ('TV_INFO_CHANNEL_LIST''channel_list');
    define ('TV_INFO_CONTEXT_UI''context_ui');
    define ('TV_INFO_VOLUME''volume_info');
    define ('TV_INFO_SCREEN''screen_image');
    define ('TV_INFO_3D''is_3d');
    define ('TV_LAUNCH_APP''AppExecute');




    class 
    SmartTV 
    {
        public function 
    __construct($ipAddress$port 8080) {
            
    $this->connectionDetails = array($ipAddress$port);
        }
        
        public function 
    setPairingKey($pk) {
            
    $this->pairingKey $pk;
        }
        
        public function 
    displayPairingKey() {
            
    $this->sendXMLRequest('/roap/api/auth'self::encodeData(
                array(
    'type' => 'AuthKeyReq'), 'auth'
            
    ));
        }
        
        public function 
    setSession($sess) {
            
    $this->session $sess;
        }
        
        public function 
    authenticate() {
            if (
    $this->pairingKey === null) {
                throw new 
    Exception('No pairing key given.');
            }
            return (
    $this->session $this->sendXMLRequest('/roap/api/auth'self::encodeData(
                array(
                    
    'type' => 'AuthReq',
                    
    'value' => $this->pairingKey
                
    ),
                
    'auth'
            
    ))['session']);
        }

        public function 
    processCommand($commandName$parameters = []) {
            if (
    $this->session === null) {
                throw new 
    Exception('No session id given.');
            }
            if (
    is_numeric($commandName) && count($parameters) < 1) {
                
    $parameters['value'] = $commandName;
                
    $commandName 'HandleKeyInput';
            }
            if (
    is_string($parameters) || is_numeric($parameters)) {
                
    $parameters = array('value' => $parameters);
            } elseif (
    is_object($parameters)) {
                
    $parameters = (array)$parameters;
            }
            
    $parameters['name'] = $commandName;
            return (
    $this->sendXMLRequest('/roap/api/command'
                
    self::encodeData($parameters'command')
            ));
        }
        
        public function 
    queryData($targetId) {
            if (
    $this->session === null) {
                throw new 
    Exception('No session id given.');
            }
            
    $var $this->sendXMLRequest('/roap/api/data?target='.$targetId);
            return isset(
    $var['data']) ? $var['data'] : $var;
        }
        
        private function 
    sendXMLRequest($actionFile$data '') {
            
    curl_setopt(($ch curl_init()), CURLOPT_URL$this->connectionDetails[0] . ':' $this->connectionDetails[1] . $actionFile);
            
    curl_setopt($chCURLOPT_HTTPHEADER, array(
                
    'Content-Type: application/atom+xml',
                
    'Connection: Keep-Alive'
            
    ));
            if (
    strlen($data) > 0) {
                
    curl_setopt($chCURLOPT_POST1);
                
    curl_setopt($chCURLOPT_POSTFIELDS$data);
            }
            
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
            
    $envar   curl_exec($ch);
            
    $execute = (array)@simplexml_load_string($envar);
            if (isset(
    $execute['ROAPError']) && $execute['ROAPError'] != '200') {
                throw new 
    Exception('Error (' $execute['ROAPError'] . '): ' $execute['ROAPErrorDetail']);
            }
            return 
    count($execute) < $envar $execute;
        }
        
        private static function 
    encodeData($data$actionType$xml=null) {
            if (
    $xml == null) {
                
    $xml simplexml_load_string("<!--?xml version=\"1.0\" encoding=\"utf-8\"?--><".$actionType." />");
            }
            foreach(
    $data as $key => $value) {
                if (
    is_array($value))  {
                    
    $node $xml->addChild($key);
                    
    self::encodeData($value$actionType$node);
                } else  {
                    
    $xml->addChild($keyhtmlentities($value));
                }
            }
            return 
    $xml->asXML();
        }
        
        private 
    $connectionDetails;
        private 
    $pairingKey;
        private 
    $session;
    }

    /**
     * Change channel (Channel VIVA)
    **/

    // Get channel list
    $channels $tv->queryData(TV_INFO_CHANNEL_LIST);
    //print_r($channels);
     
    // Channel name
    $channelName strval(GetValueFormatted(50879 /*[Fernseher\Fernsehen]*/));

    //echo strval($channelName);
    // Search for channel $channelName
    foreach ($channels as $channel) {
        if ((
    $channel->chname) == strval($channelName)) {
            
    // Change channel
            //('TV_CMD_POWER', 1);
            //$tv->processCommand(TV_CMD_CHANNEL_UP);    
                
            
    $tv->processCommand(TV_CMD_CHANGE_CHANNEL$channel);
            echo 
    $channel;
            break;
        }
    }
    ?>
    So sieht es dann im Profil und Webfront aus.
    Gruß Helmut
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Profil.jpg 
Hits:	37 
Größe:	93.2 KB 
ID:	50175   Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Webfront.jpg 
Hits:	39 
Größe:	22.3 KB 
ID:	50176  
    Geändert von Helmut (19.08.19 um 07:39 Uhr) Grund: Channelnamen Linksschreibung

  3. #93
    Registriert seit
    Nov 2016
    Ort
    Österreich, OÖ, Schärding
    Beiträge
    466

    Hallo,
    hat jemand eine Idee wie ich Amazone Prime und Netflix in IPS (auf einem LG 2019) einbinden könnte?
    Danke und lg
    KNX: IPS @ Raspberry Pi3 Unlimited
    IPSStudio - Collibrico - Sonos - Alexa - ekey - Synology NAS - Reolink - Vaillant LWP + KWL

  4. #94
    Registriert seit
    Aug 2009
    Ort
    Meißen
    Beiträge
    292

    Standard Maximal 128 Assoziationen !!

    Hallo Helmut,

    das hatte ich schon so ähnlich auf dem Schirm. Ich wollte die Senderliste automatisch in ein Variablenprofil schreiben, was aber daran scheitert das man nur 128 Assoziationen speichern kann!!
    Oder mache ich was falsch?

    Schade, dann muß man die Liste händisch auf die wichtigsten Sender beschränken.

    Gruß Tommy

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

Name:	WarnungAsso.jpg 
Hits:	30 
Größe:	37.2 KB 
ID:	50180
    Irren ist menschlich. Aber wenn man richtig Mist bauen will, braucht man einen Computer. (Dan Rather, CBS-Fernsehreporter)

  5. #95
    Registriert seit
    Jun 2005
    Beiträge
    3,599

    Naja ok, wenn denn das so ist, und Du mehr als diese Anzahl möchtest, dann ist mein Vorschlag: mach 'ne 2. Integer auf, mit einer 2. Assoziation und ordne die Einträge nach zB. Deutschsprachlich Private oä

    Mit ICON's sieht es zwar optisch schöner aus, aber braucht aber viel Platz.
    Gruß Helmut

Ähnliche Themen

  1. Fensterkontakte abfragen
    Von dharmainitiative im Forum KNX/EIB, LCN
    Antworten: 16
    Letzter Beitrag: 02.02.15, 19:49
  2. Button abfragen
    Von stefanhahnen im Forum Skripte, PHP, SQL
    Antworten: 1
    Letzter Beitrag: 10.02.13, 15:55
  3. Boolwert abfragen
    Von wolfgang im Forum Skripte, PHP, SQL
    Antworten: 3
    Letzter Beitrag: 05.08.12, 16:54
  4. Status abfragen
    Von mäc im Forum HomeMatic
    Antworten: 7
    Letzter Beitrag: 10.08.11, 12:06
  5. Aktienkurse abfragen
    Von Doctor Snuggles im Forum Allgemeine Diskussion
    Antworten: 0
    Letzter Beitrag: 22.02.09, 19:02