Page 4 sur 4

Re: [Plugin Tiers][Sujet Principal] Plugin Tv Phillips

Publié : 22 déc. 2017, 09:46
par Antoinekl1
Bonjour

Merci pour ce plugin, fonctionne parfaitement avec TV Philips 65PUS6121 - 2016

Pour le visuel de la télécommande, dans mon cas N2; l'image ne prend pas toute la vignette et il n'est pas possible de redimensionner la vignette, est-ce normal ?

et c'est vraiment pour chipoter, quand on lance une action sur la télécommande et que la TV est éteinte (prise coupée) ca génère une erreur :
2017-12-22 09:44:23 tvphillips Erreur execution de la commande [Plugin Physique][TVPhilips][CursorUp] : Error on shell exec, return value : 7. Details : Array ( [0] => % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:02 --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:03 --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:04 --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:05 --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:06 --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:07 --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:08 --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:09 --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:10 --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:11 --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:12 --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:13 --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:14 --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:15 --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:16 --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:17 --:--:-- 0curl: (7) Failed to connect to 192.168.1.66 port 1925: No route to host )
il faudrait bloquer les commandes, hormis les ON quand l'IP n'est pas joingnable

Re: [Plugin Tiers][Sujet Principal] Plugin Tv Phillips

Publié : 11 févr. 2018, 01:42
par fulgencio
Bonjour,
L app. ne marche pas avec mon TV reference 55PUS6401/12 est ce normal ?
Merci

Re: [Plugin Tiers][Sujet Principal] Plugin Tv Phillips

Publié : 11 févr. 2018, 12:12
par slobberbone
@fulgencio : ta TV semble être un Anrdoid TV ... un plugin va sortir prochainement ;)

Re: [Plugin Tiers][Sujet Principal] Plugin Tv Phillips

Publié : 12 mars 2018, 19:01
par lucasw59
Bonsoir j'ai acheté la phillips 43PUS6262 qui n'est pas sous android tv, une fois l'adresse IP de la télé rentrée dans le plugin quand je clique sur une commande j'obtiens cette erreur, avez vous une idée ? :?

Re: [Plugin Tiers][Sujet Principal] Plugin Tv Phillips

Publié : 28 juin 2018, 20:16
par matlefoo
bonjour à tous,

J'ai une TV OLED sous android de 2018 et rien ne fonctionne :/ ( modèle : 65oled873/12 )

Re: [Plugin Tiers][Sujet Principal] Plugin Tv Phillips

Publié : 31 juil. 2018, 18:10
par koleos
Bonjour, Rappel, ce plugin n'est pas prévu pour fonctionner pour les tv récentes qui tournent avec Android.

Re: [Plugin Tiers][Sujet Principal] Plugin Tv Phillips

Publié : 30 août 2018, 18:49
par Lecl0ne
Ce plugin n'existe plus je me trompe ?

Re: [Plugin Tiers][Sujet Principal] Plugin Tv Phillips

Publié : 04 janv. 2019, 21:17
par scorpio
Bonjour, tous le monde.
le plugin ne marche pas avec moi.
après avoir marqué IP de la tV et choisi la télécommande le test m'affiche:
Erreur exécution de la commande [tv][television][VolumeDown] : Erreur dans l'exécution du terminal, la valeur retournée est : 7. Détails : Array ( [0] => % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0curl: (7) Failed to connect to 192.168.XXX.XXX port 1925: No route to host )
Ma TV est un 47PFL7108H n'est pas une android et sur le réseau en tapant
j'ai bien le JointSpace.
quelqu'un pourrais me dire d'ou vient le problème?

Merci a vous.

Re: [Plugin Tiers][Sujet Principal] Plugin Tv Phillips

Publié : 11 mars 2019, 14:59
par darkensen
Bonjour, j'ai une télé philips android (55PUS6482) et le plugin ne fonctionne en effet pas.
Cependant, j'ai trouvé ceci qui fonctionne par script python :
https://github.com/eslavnov/pylips
Je suis pas du tout doué en php / java et autre interface pour l'intégrer à Jeedom, je me contente pour l'instant de faire des scripts avec "Scripts"
Mais ce serait intéressant de mutualiser les deux.
Je suis disponible pour mettre la main à la patte si besoin.

Merci :)

Re: [Plugin Tiers][Sujet Principal] Plugin Tv Phillips

Publié : 21 mai 2019, 19:41
par Alomamabobo
Merci pour le lien Darkensen :)
Je vais tester sur 55pus6703 (OS Saphi, requêtes JSON retournent "forbidden")
Bonne soirée :)

Re: [Plugin Tiers][Sujet Principal] Plugin Tv Phillips

Publié : 12 sept. 2019, 00:35
par sbr
Modif du message initial, avec fichiers impactés en rouge ci-dessous suite à un échange avec sebthenul ;-)

J'ai une tv philips sous android, et j'ai mis à jour le plugin afin de pouvoir réaliser l'apairage.

1) Sur la page de l'équipement, on clique sur le bouton récupérer la clé et la clé est récupérée depuis la tv

tvphillips2.png
tvphillips2.png (313.27 Kio) Consulté 3108 fois


3) La tv affiche le code pin

tvphillips-3.png
tvphillips-3.png (983.76 Kio) Consulté 3108 fois

4) On ajoute le pin sur la page de l'équipement et sauvegarder

tvphillips-4.png
tvphillips-4.png (303.87 Kio) Consulté 3101 fois

Ci-dessous mes modifs de code pour rendre disponible cette fonctionnalité, j'espère que l'auteur du plugin pourra les intégrer

desktop/js/tvphillips.js

Code : Tout sélectionner

/* Ligne 660 : Debut Ajout sbr */

function getKey( ) {

  $('.eqLogicAttr[data-l1key=configuration][data-l2key=user]').val(Date.now()); 
    
  $.ajax({
        url: "plugins/tvphillips/core/ajax/tvphillips.php",
        dataType: 'json',
    	type: 'post',
    	data: { 
          "action" : "pair",
          "ip" : $('.eqLogicAttr[data-l1key=configuration][data-l2key=IPaddress]').val(),
          "user" : $('.eqLogicAttr[data-l1key=configuration][data-l2key=user]').val() 
        },
    	complete : function(resultat){ 
          
           	console.log("*** COMPLETE ***");
            
          	console.log(resultat);
          
            var data = JSON.parse(resultat.responseText);        
          
            var obj = JSON.parse(data.result);  
          
            console.log(obj);
          
          	if( obj.error_id == "SUCCESS" ) {
              
            	$('.eqLogicAttr[data-l1key=configuration][data-l2key=auth_key]').val( obj.auth_key );
                $('.eqLogicAttr[data-l1key=configuration][data-l2key=timestamp]').val( obj.timestamp );
                $('.eqLogicAttr[data-l1key=configuration][data-l2key=timeout]').val( obj.timeout );
              
			} 
          
        }		
  });

}

function getToken( ) {

  $.ajax({
        url: "plugins/tvphillips/core/ajax/tvphillips.php",
        dataType: 'json',
    	type: 'post',
    	data: { 
            "action" : "grant",
            "ip" : $('.eqLogicAttr[data-l1key=configuration][data-l2key=IPaddress]').val(),
            "pin" : $('.eqLogicAttr[data-l1key=configuration][data-l2key=pin]').val(), 
            "timestamp" : $('.eqLogicAttr[data-l1key=configuration][data-l2key=timestamp]').val(),
            "user" : $('.eqLogicAttr[data-l1key=configuration][data-l2key=user]').val(),
            "auth_key" : $('.eqLogicAttr[data-l1key=configuration][data-l2key=auth_key]').val()
        },
    	complete : function(resultat){ 
          
           	console.log("*** COMPLETE ***");
            
          	console.log(resultat);
          
          	var data = JSON.parse(resultat.responseText);        
          
            var obj = JSON.parse(data.result);  
          
            console.log(obj);
          
          	if( obj.error_id == "SUCCESS" ) {
              
            	$('.eqLogicAttr[data-l1key=configuration][data-l2key=auth_key]').val( obj.auth_key );
                $('.eqLogicAttr[data-l1key=configuration][data-l2key=timestamp]').val( obj.timestamp );
                $('.eqLogicAttr[data-l1key=configuration][data-l2key=timeout]').val( obj.timeout );
              
			} 
          
        }		
  });

}

/* Ligne 739 : Fin Ajout sbr */
desktop/js/tvphillips.php

Code : Tout sélectionner

<!-- Ligne 127: Debut Ajout sbr -->
<div class="form-group" style="display: none">
    <label class="col-sm-2 control-label">{{Utilisateur}}</label>
    <div class="col-sm-3">
<input class="eqLogicAttr form-control" data-l1key='configuration' data-l2key='user' />
    </div>
</div>
<div class="form-group">                    
    <label class="col-sm-2 control-label">{{Clé}}</label>
    <div class="col-sm-3">
<input class="eqLogicAttr form-control" data-l1key='configuration' data-l2key='auth_key' readonly/>
    </div>
    <div class="col-sm-1">
        <a class="btn btn-danger eqLogicAction" onclick="getKey()"><i class="fa fa-minus-circle"></i> {{Récupérer une clé}}</a>
    </div>
</div>
<div class="form-group" style="display: none">                    
    <label class="col-sm-2 control-label" style="display: none">{{Timestamp}}</label>
    <div class="col-sm-3">
<input class="eqLogicAttr form-control" data-l1key='configuration' data-l2key='timestamp' readonly/>
    </div>
</div>
<div class="form-group" style="display: none">                    
    <label class="col-sm-2 control-label">{{Timeout}}</label>
    <div class="col-sm-3">
<input class="eqLogicAttr form-control" data-l1key='configuration' data-l2key='timeout' readonly/>
    </div>
</div>
<div class="form-group">                    
    <label class="col-sm-2 control-label">{{Pin}}</label>
    <div class="col-sm-3">
<input class="eqLogicAttr form-control" data-l1key='configuration' data-l2key='pin' />
    </div> 
    <div class="col-sm-1">
        <a class="btn btn-danger eqLogicAction" onclick="getToken()"><i class="fa fa-minus-circle"></i> {{Appairer la tv}}</a>
    </div> 
</div>
<!-- Ligne 164 : Fin Ajout sbr -->

[b]core/class/tvphillips.class.php[/b]

[code]
/* Ligne 828 : Debut Ajout sbr */
        
        $user = $eqLogic->getConfiguration('user');
        $auth_key = $eqLogic->getConfiguration('auth_key');
      
        if( $user != "" ) {
          
        $IPaddress = $eqLogic->getConfiguration('IPaddress');
        $key_data  = $this->getConfiguration('key_data');
        $api_type  = $this->getConfiguration('ApiType');

        $request1 = "curl --digest -u".$user.":".$auth_key." -X POST https://";
        $request4 = '"}';
        $request5 = "'";

        switch($api_type) {
        
          case 'key':
            
            $request2 = ":1926/6/input/key -v -k -d '{";
            $request3 = '"key":"';
          
            break;
          
          case 'volume':
            
            if ($_options !== null && $_options !== '') {
              $options = self::cmdToValue($_options);
              if (is_json($_options)) {
                $options = json_decode($_options, true);
              }
            } else {
              $options = null;
            }
            
            if (isset($options['volume'])) {
              $request2 = ":1926/6/audio/volume -d '{";
              $request3 = '"muted": false,"current":"';
              $key_data = $options['volume'];
            }
            
            break;

          case 'sources':
            
            $request2 = ":1926/6/sources/current -d '{";
            $request3 = '"id":"';
            
            break;
            
          default:
          
            break;
        
        }

        $request = $request1.$IPaddress.$request2.$request3.$key_data.$request4.$request5;
        $request_shell = new com_shell($request . ' 2>&1');
        $result = trim($request_shell->exec());

        return $result;
      
        } else {
          
        /* Ligne 892 : Fin Ajout sbr */
et

Code : Tout sélectionner

	/* Ligne 938 : Debut Ajout sbr */
        
	 }
      
	/* Ligne 942 Fin Ajout sbr */
core/ajax/tvphillips.php

Code : Tout sélectionner

<?php

/* This file is part of Jeedom.
 *
 * Jeedom is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Jeedom is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Jeedom. If not, see <http://www.gnu.org/licenses/>.
 */

try {
    require_once dirname(__FILE__) . '/../../../../core/php/core.inc.php';
    include_file('core', 'authentification', 'php');

    if (!isConnect('admin')) {
        throw new Exception(__('401 - Accès non autorisé', __FILE__));
    }

    if ( init('action') == 'grant' ) {
      
		$input = '{ "auth" : { "auth_AppId" : "1" , "pin" : "' . $_POST['pin'] . '" , "auth_timestamp" : "" , "auth_signature" : "" } , "device" : { "device_name" : "heliotrope", "device_os" : "Android", "app_name" : "ApplicationName", "type" : "native" , "app_id": "app.id" , "id" : "' . $_POST['user'] . '" } }';
  
        $ch = curl_init();
  
      	$ip = init('ip');
      
        curl_setopt($ch, CURLOPT_URL, "https://".$ip.":1926/6/pair/grant");
      	curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
        curl_setopt($ch, CURLOPT_USERPWD, $_POST['user'] . ":" . $_POST['auth_key']);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $input ); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_FAILONERROR, 1);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Accept: application/json' ));
  
  		$output = curl_exec($ch);
  
  		$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  
  		curl_close($ch);
      
  		ajax::success($httpcode);

	} else if ( init('action') == 'pair') {
      
    	$input = '{ "scope" :  [ "read", "write", "control"] , "device" : { "device_name" : "heliotrope", "device_os" : "Android", "app_name" : "ApplicationName", "type" : "native" , "app_id": "app.id" , "id" : "' . $_POST['user'] . '" } }';
  
        $ch = curl_init();

      	$ip = init('ip');
      
        curl_setopt($ch, CURLOPT_URL, "https://".$ip.":1926/6/pair/request");
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $input ); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_FAILONERROR, 1);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Accept: application/json' ));

        $output = curl_exec($ch);

        $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

        curl_close($ch);

        ajax::success($output);
      
    }
    
	throw new Exception(__('Aucune methode correspondante à : ', __FILE__) . init('action'));
  
} catch (Exception $e) {
  
    ajax::error(displayExeption($e), $e->getCode());
  
}
  
?>
A vous de jouer ...

Re: [Plugin Tiers][Sujet Principal] Plugin Tv Phillips

Publié : 23 sept. 2019, 17:29
par sebthenul
Bonjour,

Quand je clique sur "Récupérer une clée" cela ne fonctionne pas.

Je pense qu'il manque le code pour le fichier suivant :

plugins/tvphillips/core/ajax/tvphillips.php

Cordialement,

Re: [Plugin Tiers][Sujet Principal] Plugin Tv Phillips

Publié : 23 sept. 2019, 21:54
par sbr
sebthenul a écrit :
23 sept. 2019, 17:29
Bonjour,

Quand je clique sur "Récupérer une clée" cela ne fonctionne pas.

Je pense qu'il manque le code pour le fichier suivant :

plugins/tvphillips/core/ajax/tvphillips.php

Cordialement,
Oui, effectivement, j'ai modifié mon message ci-dessus, enccore merci ;-)

Re: [Plugin Tiers][Sujet Principal] Plugin Tv Phillips

Publié : 08 nov. 2019, 10:50
par Bello65
@sbr bonjour,

Je regardes ce que tu as ajouté mais j'ai une question.
desktop/js/tvphillips.php : il n'y a pas ce fichier dans js, ne serait ce pas plutôt dans desktop/php/tvphillips.php ?
Dans la même partie :
Tu as oublié de mettre [/code]après le :
<!-- Ligne 164 : Fin Ajout sbr --> ICI

Si je reprends :
sbr a écrit :
12 sept. 2019, 00:35
Ci-dessous mes modifs de code pour rendre disponible cette fonctionnalité, j'espère que l'auteur du plugin pourra les intégrer

desktop/js/tvphillips.js

Code : Tout sélectionner

/* Ligne 660 : Debut Ajout sbr */

function getKey( ) {

  $('.eqLogicAttr[data-l1key=configuration][data-l2key=user]').val(Date.now()); 
    
  $.ajax({
        url: "plugins/tvphillips/core/ajax/tvphillips.php",
        dataType: 'json',
    	type: 'post',
    	data: { 
          "action" : "pair",
          "ip" : $('.eqLogicAttr[data-l1key=configuration][data-l2key=IPaddress]').val(),
          "user" : $('.eqLogicAttr[data-l1key=configuration][data-l2key=user]').val() 
        },
    	complete : function(resultat){ 
          
           	console.log("*** COMPLETE ***");
            
          	console.log(resultat);
          
            var data = JSON.parse(resultat.responseText);        
          
            var obj = JSON.parse(data.result);  
          
            console.log(obj);
          
          	if( obj.error_id == "SUCCESS" ) {
              
            	$('.eqLogicAttr[data-l1key=configuration][data-l2key=auth_key]').val( obj.auth_key );
                $('.eqLogicAttr[data-l1key=configuration][data-l2key=timestamp]').val( obj.timestamp );
                $('.eqLogicAttr[data-l1key=configuration][data-l2key=timeout]').val( obj.timeout );
              
			} 
          
        }		
  });

}

function getToken( ) {

  $.ajax({
        url: "plugins/tvphillips/core/ajax/tvphillips.php",
        dataType: 'json',
    	type: 'post',
    	data: { 
            "action" : "grant",
            "ip" : $('.eqLogicAttr[data-l1key=configuration][data-l2key=IPaddress]').val(),
            "pin" : $('.eqLogicAttr[data-l1key=configuration][data-l2key=pin]').val(), 
            "timestamp" : $('.eqLogicAttr[data-l1key=configuration][data-l2key=timestamp]').val(),
            "user" : $('.eqLogicAttr[data-l1key=configuration][data-l2key=user]').val(),
            "auth_key" : $('.eqLogicAttr[data-l1key=configuration][data-l2key=auth_key]').val()
        },
    	complete : function(resultat){ 
          
           	console.log("*** COMPLETE ***");
            
          	console.log(resultat);
          
          	var data = JSON.parse(resultat.responseText);        
          
            var obj = JSON.parse(data.result);  
          
            console.log(obj);
          
          	if( obj.error_id == "SUCCESS" ) {
              
            	$('.eqLogicAttr[data-l1key=configuration][data-l2key=auth_key]').val( obj.auth_key );
                $('.eqLogicAttr[data-l1key=configuration][data-l2key=timestamp]').val( obj.timestamp );
                $('.eqLogicAttr[data-l1key=configuration][data-l2key=timeout]').val( obj.timeout );
              
			} 
          
        }		
  });

}

/* Ligne 739 : Fin Ajout sbr */
desktop/php/tvphillips.php

Code : Tout sélectionner

<!-- Ligne 127: Debut Ajout sbr -->
<div class="form-group" style="display: none">
    <label class="col-sm-2 control-label">{{Utilisateur}}</label>
    <div class="col-sm-3">
<input class="eqLogicAttr form-control" data-l1key='configuration' data-l2key='user' />
    </div>
</div>
<div class="form-group">                    
    <label class="col-sm-2 control-label">{{Clé}}</label>
    <div class="col-sm-3">
<input class="eqLogicAttr form-control" data-l1key='configuration' data-l2key='auth_key' readonly/>
    </div>
    <div class="col-sm-1">
        <a class="btn btn-danger eqLogicAction" onclick="getKey()"><i class="fa fa-minus-circle"></i> {{Récupérer une clé}}</a>
    </div>
</div>
<div class="form-group" style="display: none">                    
    <label class="col-sm-2 control-label" style="display: none">{{Timestamp}}</label>
    <div class="col-sm-3">
<input class="eqLogicAttr form-control" data-l1key='configuration' data-l2key='timestamp' readonly/>
    </div>
</div>
<div class="form-group" style="display: none">                    
    <label class="col-sm-2 control-label">{{Timeout}}</label>
    <div class="col-sm-3">
<input class="eqLogicAttr form-control" data-l1key='configuration' data-l2key='timeout' readonly/>
    </div>
</div>
<div class="form-group">                    
    <label class="col-sm-2 control-label">{{Pin}}</label>
    <div class="col-sm-3">
<input class="eqLogicAttr form-control" data-l1key='configuration' data-l2key='pin' />
    </div> 
    <div class="col-sm-1">
        <a class="btn btn-danger eqLogicAction" onclick="getToken()"><i class="fa fa-minus-circle"></i> {{Appairer la tv}}</a>
    </div> 
</div>
<!-- Ligne 164 : Fin Ajout sbr -->
core/class/tvphillips.class.php

Code : Tout sélectionner

/* Ligne 828 : Debut Ajout sbr */
        
        $user = $eqLogic->getConfiguration('user');
        $auth_key = $eqLogic->getConfiguration('auth_key');
      
        if( $user != "" ) {
          
        $IPaddress = $eqLogic->getConfiguration('IPaddress');
        $key_data  = $this->getConfiguration('key_data');
        $api_type  = $this->getConfiguration('ApiType');

        $request1 = "curl --digest -u".$user.":".$auth_key." -X POST https://";
        $request4 = '"}';
        $request5 = "'";

        switch($api_type) {
        
          case 'key':
            
            $request2 = ":1926/6/input/key -v -k -d '{";
            $request3 = '"key":"';
          
            break;
          
          case 'volume':
            
            if ($_options !== null && $_options !== '') {
              $options = self::cmdToValue($_options);
              if (is_json($_options)) {
                $options = json_decode($_options, true);
              }
            } else {
              $options = null;
            }
            
            if (isset($options['volume'])) {
              $request2 = ":1926/6/audio/volume -d '{";
              $request3 = '"muted": false,"current":"';
              $key_data = $options['volume'];
            }
            
            break;

          case 'sources':
            
            $request2 = ":1926/6/sources/current -d '{";
            $request3 = '"id":"';
            
            break;
            
          default:
          
            break;
        
        }

        $request = $request1.$IPaddress.$request2.$request3.$key_data.$request4.$request5;
        $request_shell = new com_shell($request . ' 2>&1');
        $result = trim($request_shell->exec());

        return $result;
      
        } else {
          
        /* Ligne 892 : Fin Ajout sbr */
et

Code : Tout sélectionner

	/* Ligne 938 : Debut Ajout sbr */
        
	 }
      
	/* Ligne 942 Fin Ajout sbr */
Puis créer un dossier ajax dans core, un fichier txt que l'on nomme tvphillips.php puis y copier ce qui suit :

core/ajax/tvphillips.php

Code : Tout sélectionner

<?php

/* This file is part of Jeedom.
 *
 * Jeedom is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Jeedom is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Jeedom. If not, see <http://www.gnu.org/licenses/>.
 */

try {
    require_once dirname(__FILE__) . '/../../../../core/php/core.inc.php';
    include_file('core', 'authentification', 'php');

    if (!isConnect('admin')) {
        throw new Exception(__('401 - Accès non autorisé', __FILE__));
    }

    if ( init('action') == 'grant' ) {
      
		$input = '{ "auth" : { "auth_AppId" : "1" , "pin" : "' . $_POST['pin'] . '" , "auth_timestamp" : "" , "auth_signature" : "" } , "device" : { "device_name" : "heliotrope", "device_os" : "Android", "app_name" : "ApplicationName", "type" : "native" , "app_id": "app.id" , "id" : "' . $_POST['user'] . '" } }';
  
        $ch = curl_init();
  
      	$ip = init('ip');
      
        curl_setopt($ch, CURLOPT_URL, "https://".$ip.":1926/6/pair/grant");
      	curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
        curl_setopt($ch, CURLOPT_USERPWD, $_POST['user'] . ":" . $_POST['auth_key']);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $input ); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_FAILONERROR, 1);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Accept: application/json' ));
  
  		$output = curl_exec($ch);
  
  		$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  
  		curl_close($ch);
      
  		ajax::success($httpcode);

	} else if ( init('action') == 'pair') {
      
    	$input = '{ "scope" :  [ "read", "write", "control"] , "device" : { "device_name" : "heliotrope", "device_os" : "Android", "app_name" : "ApplicationName", "type" : "native" , "app_id": "app.id" , "id" : "' . $_POST['user'] . '" } }';
  
        $ch = curl_init();

      	$ip = init('ip');
      
        curl_setopt($ch, CURLOPT_URL, "https://".$ip.":1926/6/pair/request");
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $input ); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_FAILONERROR, 1);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Accept: application/json' ));

        $output = curl_exec($ch);

        $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

        curl_close($ch);

        ajax::success($output);
      
    }
    
	throw new Exception(__('Aucune methode correspondante à : ', __FILE__) . init('action'));
  
} catch (Exception $e) {
  
    ajax::error(displayExeption($e), $e->getCode());
  
}
  
?>
Tu pourras me corriger si je me suis planté ?
Merci @sbr

@Koleos Bonjour,
Je me prépares à recevoir mon super cadeau de nöel ;) une Philips OLED :lol:
J'ai donc besoin de ce plugin pour gérer l'extinction (mise en vieille) de mon 'joujou'. Je ne pourrai plus éteindre comme je fais actuellement avec mon ancienne TV via une prise (On/Off) avec Homebridge et Siri. Les OLED doivent être mis en vieille, pas coupé net....Donc ce super plugin va me permettre (j'espère) de mettre en vieille via Siri.... D)
Peux-tu faire les modifs dans ton plugin ? Et si possible le mettre compatible V4 ? 8-)

Je met le sujet sur le Community, vu que celui-ci va passer en lecture seule
Remise à niveau plugin TV Phillips (AndroidTV)

Pour le post plugin, ce sera d'une autre façon sur Community.
Vous pouvez répondre sur Community si vous le souhaitez.
Je vous en remercie tous les deux.