Forum eedomus
http://forum.eedomus.fr/

Requetes HTTP pour controler Xbmc
http://forum.eedomus.fr/viewtopic.php?f=15&t=1978
Page 1 sur 2  Suivant »
Auteur:  olivvvv [ 11 Sep 2014 18:23 ]
Sujet du message:  Requetes HTTP pour controler Xbmc

Bonjour à tous,

Tout nouveau sur le forum, je viens d'acheter une Box ce début de semaine !

Ce serai bien pour ceux que cela intérresse de poster leurs idées, les requêtes qui fonctionnent pour Xbmc.

Pour ma part je souhaite partager ce que j'ai trouvé récemment car j'ai mis du temps à comprendre le pilotage d'Xbmc en http.

Tout d'abord le lien officiel de l'API d'xbmc :
http://wiki.xbmc.org/index.php?title=JSON-RPC_API/v6

Dans mon premier cas, je souhaitai pouvoir charger une playlist avec eedomus sur xbmc et lancer cette playlist à l'aide d'un tag RFID.

Vous savez quoi, ca marche ! :shock:

Voici la syntaxe pour démarrer donc une playlist depuis eedomus vers xbmc :

[url]http://xbmc:xbmc@192.168.0.17:8080/jsonrpc?request={%22jsonrpc%22:%20%222.0%22,%20%22method%22:%20%22Player.Open%22,%20%22params%22:%20{%20%22item%22:%20{%20%22file%22:%20%22special://profile/playlists/music/_Ambient/Nova%20Tunes.xsp%22%20}%20},%20%22id%22:%201}[/url]


En gras, compte et mote de passe de l'accès à xbmc par le web, le port configuré dans xbmc pour l'écoute, le chemin et le nom de votre playliste.

Voila maintenant ce qu'il se passe chez moi.
mes enfants n'ont plus qu'à mettre le tag RFID correspondant au genre qu'ils souhaitent charger sur le mirror et la playliste démarre !

Fun ?!
A bientôt pour d'autres liens, astuces.
Olivier

Pièces jointes:
Charger playlist.zip
(262 octet(s)) Téléchargé 885 fois
Auteur:  technoseb27 [ 15 Sep 2014 21:39 ]
Sujet du message:  Re: Requetes HTTP pour controler Xbmc

Impossible à ouvrir de mon coté
Auteur:  olivvvv [ 15 Sep 2014 22:54 ]
Sujet du message:  Re: Requetes HTTP pour controler Xbmc

Impossible à ouvrir quoi ? la playlist ?
Si oui, es tu sur de où se trouvent tes playlists ?

As tu paramétrer xbmc afin d'accepter le contrôle à distance ?
Que est le lien que tu as paramétré ?

Je peux t'aider, dis moi
Auteur:  ASECADOMOTIQUE54 [ 25 Sep 2014 18:40 ]
Sujet du message:  Re: Requetes HTTP pour controler Xbmc

bonjour Olivvvv,
bienvenue sur le forum et merci pour ce premier partage, voici encore une fonction très intéressante ;)
Comme technoseb27 je n'arrive pas a deziper le fichier Charger playlist.zip (fichier corrompu)
Auteur:  olivvvv [ 25 Sep 2014 21:23 ]
Sujet du message:  Re: Requetes HTTP pour controler Xbmc

Mille excuses, j'avais oublié de mentionner une chose.
Ce n'est pas un fichier zip, renommez le en .txt ....
En fait le forum n'autorise pas les fichiers en .txt d'ou l'astuce.

Voici également d'autres commandes dans le fichier.

Pièces jointes:
Commandes Xbmc.zip
(996 octet(s)) Téléchargé 967 fois
Auteur:  influman [ 26 Sep 2014 10:29 ]
Sujet du message:  Re: Requetes HTTP pour controler Xbmc

perso, j'utilise l'envoi de notification à l'écran :

http://xbmc:xbmc@192.168.0.XX:8080/jsonrpc?request={%22jsonrpc%22:%222.0%22,%22method%22:%22GUI.ShowNotification%22,%22params%22:{%22title%22:%22Message%20Eedomus%22,%22message%22:%22Ouverture%20Portail%22,%22displaytime%22:6000},%22id%22:1}

Il y a un paramètre "image" aussi, mais pas utilisé sur la skin Bello apparemment.
Auteur:  ASECADOMOTIQUE54 [ 27 Sep 2014 10:01 ]
Sujet du message:  Re: Requetes HTTP pour controler Xbmc

@Olivvv merci! ça fonctionne nikel! :D
@influman merci aussi du partage ;)
Auteur:  Willy (eedomus team) [ 02 Fév 2015 16:07 ]
Sujet du message:  Re: Requetes HTTP pour controler Xbmc

Bonjour,

Nous allons partager avec vous quelques scripts utilisés à titre personnel par des membres de l'équipe pour contrôler leur XBMC par HTTP. Ces scripts sont donnés à titre informatif. Il n'ont pas été testés sur KODI (successeur de XBMC). Vous êtes libres de partager et modifier les scripts qui seront partagés ici.

Nous allons commencer par allumer et éteindre le médiacenter. Cet actionneur se met à jour selon l'état de votre XBMC et vous permet d'envoyer des ordres pour allumer ou éteindre votre mediacenter.
La fonction d'allumage nécessite que la carte mère de votre mediacenter soit compatible Wake-on-LAN (il sera peut-être nécessaire d'activer cette fonction dans votre bios).

Ici on voit la page principale de la configuration de l'actionneur HTTP. On a rempli les [VAR1], [VAR2] et [VAR3] avec l'adresse IP, le port et utilisateur:pass respectivement. Pour la requête de mise à jour, on utilise la fonction PING de la toolbox eedomus.
XBMC_Allumage.png
Configuration générale de l'actionneur pour allumer / éteindre XBMC
XBMC_Allumage.png (59.84 Kio) Consulté 32377 fois


Ici on voit les deux états créés pour l'actionneur. On utilise le Wake-on-LAN pour l'allumage et une requête de l'API XBMC pour l'extinction:
XBMC_Allumage_Etats.png
Etats de l'actionneur
XBMC_Allumage_Etats.png (41.88 Kio) Consulté 32377 fois


Et voici le détail du champ "Paramètres" pour l'état OFF:
XBMC_Allumage_Eteindre.png
Détail des paramètres de l'état OFF
XBMC_Allumage_Eteindre.png (17.97 Kio) Consulté 32377 fois
Auteur:  Willy (eedomus team) [ 02 Fév 2015 16:22 ]
Sujet du message:  Re: Requetes HTTP pour controler Xbmc

Nous allons maintenant créer un capteur afin connaître la piste qui se joue actuellement sur le mediacenter. Ce capteur est basé sur un polling (requêtes qui partent de la box à intervalles réguliers) donc vous ne serez pas immédiatement averti au changement de piste mais seulement à intervalles de temps régulier.

Voici l'écran de configuration du capteur:
XBMC_Playing.png
XBMC_Playing.png (65.21 Kio) Consulté 32374 fois


Et le script utilisé dans la requête du capteur. Celui-ci devra s'appeler xbmc_playing.php et sera à ajouter dans les scripts de votre box eedomus comme indiqué dans cette page de documentation http://doc.eedomus.com/view/Scripts
Code : Tout sélectionner
<?php

/*
 * Needed arguments:
 * - XBMC ip, port, username:password
 */
$global_xbmc_ip = getArg('xbmc_ip');
$global_xbmc_port = getArg('xbmc_port');
$global_xbmc_userpass = getArg('xbmc_userpass');

/*
 * Function
 * Returns:
 *     The filename
 * Argument:
 *     The file absolute path
 */
function sdk_getFilenameFromPath($path)
{
   $ret = $path;

   /* Linux style path */
   $separatorPosition = strpos($ret, "/");
   while($separatorPosition !== FALSE){
      $ret = substr($ret, $separatorPosition+1);
      $separatorPosition = strpos($ret, "/");
   }

   /* Windows style path */
   $separatorPosition = strpos($ret, "\\");
   while($separatorPosition !== FALSE){
      $ret = substr($ret, $separatorPosition+1);
      $separatorPosition = strpos($ret, "\\");
   }

   return $ret;
}

/*
 * Global variable for what is playing
 * Nothing by default
 */
$playing_now = "--";

/*
 * Preparing XML response
 */
sdk_header('text/xml');
echo "<xbmc><error>";

/*
 * Path to XBMC api
 */
$xbmc_http_path = "http://$global_xbmc_userpass@$global_xbmc_ip:$global_xbmc_port/jsonrpc";

/*
 * Get the active players and current track
 */
$xbmc_active_player = NULL;
$xbmc_get_active = '?request={"jsonrpc":"2.0","method":"Player.GetActivePlayers","id":1}';
$response_string = httpQuery($xbmc_http_path.$xbmc_get_active, 'GET', NULL);
if($response_string != NULL) {

   $response_decoded = sdk_json_decode($response_string);

   if($response_decoded != NULL) {
      
      foreach($response_decoded["result"] as $active) {

         if($active["type"] == "audio") {

            $xbmc_get_audio = '?request={"jsonrpc":"2.0","method":"Player.GetItem","params":{"properties":["title","album","artist","file"],"playerid":'.$active["playerid"].'},"id":"AudioGetItem"}';
            $response_string = httpQuery($xbmc_http_path.$xbmc_get_audio, 'GET', NULL);
            
            if($response_string != NULL) {

               $response_decoded = sdk_json_decode($response_string);

               if($response_decoded != NULL && $response_decoded["result"] != NULL) {

                  $item = $response_decoded["result"]["item"];

                  if($item != NULL) {

                     if($item["artist"] != NULL && $item["artist"][0] != NULL && $item["title"] != NULL){

                        $playing_now = $item["artist"][0]." - ".$item["title"];
                     }
                     else if($item["title"] != NULL){

                        $playing_now = $item["title"];
                     }
                     else if($item["file"] != NULL){

                        $playing_now = sdk_getFilenameFromPath($item["file"]);
                     }
                  }
               }
            }

            break;
         }
         else if ($active["type"] == "video") {

            $xbmc_get_video = '?request={"jsonrpc":"2.0","method":"Player.GetItem","params":{"properties":["title","season","episode","showtitle","file"],"playerid":'.$active["playerid"].'},"id":"VideoGetItem"}';
            $response_string = httpQuery($xbmc_http_path.$xbmc_get_video, 'GET', NULL);

            if($response_string != NULL) {

               $response_decoded = sdk_json_decode($response_string);

               if($response_decoded != NULL && $response_decoded["result"] != NULL) {

                  $item = $response_decoded["result"]["item"];

                  if($item != NULL) {

                     if($item["type"] == "episode"){

                        if($item["showtitle"] != NULL){
                           $playing_now = $item["showtitle"]." S".$item["season"]."E".$item["episode"];
                        }
                        else if($item["title"] != NULL){
                           $playing_now = $item["title"];
                        }
                        else if($item["file"] != NULL){
                           $playing_now = sdk_getFilenameFromPath($item["file"]);
                        }
                     }
                     else{

                        if($item["title"] != NULL){
                           $playing_now = $item["title"];
                        }
                        else if($item["file"] != NULL){
                           $playing_now = sdk_getFilenameFromPath($item["file"]);
                        }
                     }
                  }
               }
            }

            break;
         }
      }
   }
}

/*
 * Finishing XML response
 */
echo "</error><playing>$playing_now</playing></xbmc>";

?>

Auteur:  Willy (eedomus team) [ 02 Fév 2015 16:39 ]
Sujet du message:  Re: Requetes HTTP pour controler Xbmc

Nous pouvons également utiliser les requêtes HTTP pour contrôler le volume. L'actionneur suivant possède aussi une requête de mise à jour afin de récupérer le volume actuel à intervalles de temps régulier.

Voici la page de configuration générale de l'actionneur:
XBMC_Volume.png
XBMC_Volume.png (65.35 Kio) Consulté 32372 fois


Pour la requête de mise à jour on utilise un script qui devra s'appeler xbmc_volume.php et à ajouter dans les scripts de votre box comme indiqué dans cette page de documentation http://doc.eedomus.com/view/Scripts
Code : Tout sélectionner
<?php

/*
 * Needed arguments:
 * - XBMC ip, port, username:password
 */
$global_xbmc_ip = getArg('xbmc_ip');
$global_xbmc_port = getArg('xbmc_port');
$global_xbmc_userpass = getArg('xbmc_userpass');

/*
 * Preparing XML response
 */
sdk_header('text/xml');
echo "<xbmc><error>";

/*
 * Get the current volume on XBMC (step of 5)
 */
$xbmc_http_path = "http://$global_xbmc_userpass@$global_xbmc_ip:$global_xbmc_port/jsonrpc";
$xbmc_get_volume = '?request={"jsonrpc":"2.0","method":"Application.GetProperties","params":{"properties":["volume"]},"id":1}';
$response_string = httpQuery(trim($xbmc_http_path.$xbmc_get_volume), 'GET', NULL);
$volume_xbmc = 0;
if($response_string != NULL) {

   $response_decoded = sdk_json_decode($response_string);

   if($response_decoded != NULL) {

      $volume_xbmc = $response_decoded["result"]["volume"] * 1;
      $volume_modulo_5 = $volume_xbmc % 5;
      switch ($volume_modulo_5) {
          case 1:
         $volume_xbmc -= 1;
         break;
          case 2:
         $volume_xbmc -= 2;
         break;
          case 3:
         $volume_xbmc += 2;
         break;
          case 4:
         $volume_xbmc += 1;
         break;
      }
   }
}

/*
 * Finishing XML response
 */
echo "</error><volume>$volume_xbmc</volume></xbmc>";

?>


On crée ensuite tous les états pour représenter le volume de 0 à 100 avec un pas de 5:
XBMC_Volume_Etats_Masques.png
XBMC_Volume_Etats_Masques.png (86.35 Kio) Consulté 32372 fois


Voici le détail du champ "Paramètres" pour l'état qui correspond à un volume à 20 (remplacer 20 par la valeur voulue pour les autres états:
XBMC_Volume_Requete.png
XBMC_Volume_Requete.png (19.11 Kio) Consulté 32372 fois


Enfin on peut masquer les états qu'on ne va pas souvent utiliser en tant qu'actionneur:
XBMC_Volume_Etats.png
XBMC_Volume_Etats.png (76.87 Kio) Consulté 32372 fois
Auteur:  Alphonse Magova [ 04 Fév 2015 23:23 ]
Sujet du message:  Re: Requetes HTTP pour controler Xbmc

Merci pour le partage la Team!
Auteur:  ASECADOMOTIQUE54 [ 14 Fév 2015 13:01 ]
Sujet du message:  Re: Requetes HTTP pour controler Xbmc

fonctionne trés bien avec kodi
merci la team ;)
Auteur:  dasoft13 [ 14 Fév 2015 13:22 ]
Sujet du message:  Re: Requetes HTTP pour controler Xbmc

Merci pour l'explication et comme ca fonctionne avec XBMC, pense tu que cela pourrait fonctionner avec media-center ?
Auteur:  galaksy2001 [ 28 Oct 2016 16:19 ]
Sujet du message:  Re: Requetes HTTP pour controler Xbmc

Bonjour à toutes et à tous,

Je ne trouve pas la bonne syntaxe pour passer au titre suivant.
La commande suivante me retourne "method not found" :
?request={"jsonrpc":"2.0","id":1,"method":"Player.GoPrevious","params":{"playerid":1}}

Une idée de l'erreur de syntaxe ?
J'en ai essayé plusieurs, consulté la doc... je patine dans la semoule :?

Merci par avance :D
Auteur:  Marcus-67 [ 28 Oct 2016 17:11 ]
Sujet du message:  Re: Requetes HTTP pour controler Xbmc

galaksy2001 a écrit:Je ne trouve pas la bonne syntaxe pour passer au titre suivant


Salut Galaksy2001,
Question, pourquoi passes-tu par des commandes HTTP et non pas par le mode UPnP (Commande : &next) ? Presque toutes les fonctions sont incluses.

Sinon, voici une liste de plusieurs commandes http à tester :
http://kodi.wiki/view/Web_Server_HTTP_API
Auteur:  galaksy2001 [ 29 Oct 2016 09:59 ]
Sujet du message:  Re: Requetes HTTP pour controler Xbmc

Merci Marcus-67 pour la page du wiki que je pensais avoir entièrement consulté. Je suis passé complètement à côté de cette page, j'utilisais l'api json :roll:
Pour répondre à ta question : j'ai viré mon lecteur UPNP car je trouve qu'il manque des fonctions comme le chargement d'une playlist par exemple, en fait il est tout simplement nettement moins complet et personnalisable que ce que peut offrir xbmc.
Bonne journée :D
Auteur:  galaksy2001 [ 29 Oct 2016 10:06 ]
Sujet du message:  Re: Requetes HTTP pour controler Xbmc

En fait cette API n'est plus valable ... retour case départ :mrgreen:

Edit : j'ai enfin trouvé ! Pffffff, j'en ai ch**r car la doc sur l'API json n'est vraiment pas claire :shock:
Pour passer au titre suivant, la commande est :

Code : Tout sélectionner
http://<user>:<password>@<ip_xbmc>:<port>/jsonrpc?request={%22jsonrpc%22:%222.0%22,%22method%22:%22Player.GoTo%22,%22params%22:{%22playerid%22:1,%22to%22:%22next%22},%22id%22:1}


Pour info ...
Auteur:  Marcus-67 [ 05 Nov 2016 10:05 ]
Sujet du message:  Re: Requetes HTTP pour controler Xbmc

galaksy2001 a écrit:En fait cette API n'est plus valable ... retour case départ :mrgreen:
Edit : j'ai enfin trouvé ! Pffffff,
Pour info ...


Salut Galaxy2001, tu avais encore un autre pirouette possible, certes moins élégante mais qui marche.
Tu crées un actionneur uPnP avec toutes ses commandes qui vont biens. Tu rends invisible ce périphérique uPnP et tu récupères le code API locale de chaque ligne ou commande de ton choix (dans paramètre expert, ligne de commande HTTP).

ex:
http://[IP_LOCALE_BOX]/api/set?api_user=xxxxx&api_secret=xxxxxxxxxxxxxxx&action=periph.value&periph_id=XXXXXX&value=X

Cela te permet de conserver toutes tes commandes HTTP dans un même périphérique en jonglant uniquement sur IP VAR1, VAR2,etc...

Bonne journée,
Marc.
Auteur:  galaksy2001 [ 05 Nov 2016 18:19 ]
Sujet du message:  Re: Requetes HTTP pour controler Xbmc

Merci. Je retiens l'idée si jamais je rencontre d'autres soucis ;)
Auteur:  Zenvibz [ 12 Déc 2016 20:25 ]
Sujet du message:  Re: Requetes HTTP pour controler Xbmc

Bonjour, après de longues recherches et pas mal de tâtonnement, ci dessous quelques commandes JSON afin de contrôler KODI depuis l'Eedomus+.

Il faut que le Service WEB dans KODI soit activé et configuré.

Au niveau de la box, créer un actionneur HTTP.

Renseigner :
VAR1=adresse IP de KODI
VAR2=port d'écoute du serveur web KODI
VAR3=USER_KODI:PSWRD_KODI

Onglet "Valeurs"
Colonne "URL" : http://[VAR3]@[VAR1]:[VAR2]/jsonrpc
Colonne "Type" : GET
Colonne "Paramètres" : renseigner les commandes ci dessous (prendre la ligne qui commence par ?

Les commandes
Play/Pause
?request={"jsonrpc":"2.0","id":1,"method":"Player.PlayPause","params":{"playerid":1}}

Stop
?request={"jsonrpc":"2.0","id":1,"method":"Player.Stop","params":{"playerid":1}}

Suivant
?request={"jsonrpc":"2.0","id":1,"method":"Player.GoTo","params":{"playerid":1,"to":"next"},"id":1}

Précédent
?request={"jsonrpc":"2.0","id":1,"method":"Player.GoTo","params":{"playerid":1,"to":"previous"},"id":1}

Lecture aléatoire ON
?request={"jsonrpc":"2.0","id":1,"method":"Player.SetShuffle","params":{"playerid":1,"shuffle":true},"id":1}

Lecture aléatoire OFF
?request={"jsonrpc":"2.0","id":1,"method":"Player.SetShuffle","params":{"playerid":1,"shuffle":false,"id":1}

Volume +
?request={"jsonrpc":"2.0","id":1,"method":"Application.SetVolume","params":{"volume":"increment"},"id":1}

Volume -
?request={"jsonrpc":"2.0","id":1,"method":"Application.SetVolume","params":{"volume":"decrement"},"id":1}

Lancer la lecture d'une playlist
?request={"jsonrpc":"2.0","id":1,"method":"Player.Open","params":{"item":{"file":"special://profile/playlists/music/NOM_DE_LE_PLAYLIST.m3u"}}}

Lancer la lecture d'une web radio
?request={"jsonrpc":"2.0","id":1,"method":"Player.Open","params":{"item":{"file":"http://ADRESSE_DU_FLUX_DE_LA_WEB_RADIO.m3u"}}}
Exple pour RADIO NOVA
?request={"jsonrpc":"2.0","id":1,"method":"Player.Open","params":{"item":{"file":"http://statslive.infomaniak.ch/playlist/radionova/radionova-high.mp3/playlist.m3u"}}}

Je cherche à faire la même chose si possible mais pour PLEX (commander PLEX depuis l'Eedomus).
Contrairement à KODI, PLEX permet de caster l'audio en multiroom avec des Chromecast Audio.
J'ai consulté les deux poste suivants mais n'ayant pas encore assez d'expérience, je ne sais pas comment intégrer les fichiers et dossiers présents dans le fichier zip. Il n'y a aucun document en php. Il faut peut-être effectuer une "conversion"...
Par ailleurs ces fichiers de 2013 sont-ils toujours à jour ?
Post 1: http://www.touteladomotique.com/forum/v ... 14&t=13630
Post 2 : https://forums.plex.tv/discussion/64071

Pour l'instant, j'ai trouvé ça mais je ne sais pas comment m'en servir :
https://github.com/Arcanemagus/plex-api ... ck-Control

Pièces jointes:
Cmd Kodi.rar
(629 octet(s)) Téléchargé 996 fois
Page 1 sur 2 Le fuseau horaire est UTC+1 heure