Requetes HTTP pour controler Xbmc

Capteurs et actionneurs HTTP

Requetes HTTP pour controler Xbmc

Messagepar olivvvv » 11 Sep 2014 18:23

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é 886 fois
olivvvv
 
Messages : 134
Inscription : 10 Sep 2014

Re: Requetes HTTP pour controler Xbmc

Messagepar technoseb27 » 15 Sep 2014 21:39

Impossible à ouvrir de mon coté
Une box Eedomus, 9 x FGS-221, 6 FGR-221, 1 x FGRM-222, 6 x Prises Neo Coolcam, 4 Détecteurs de mouvements Fibaro et Neo Coolcam, 8 Sondes Banggood, et le reste top secret ;-)
Voici mon blog :
https://domotiquetechnoseb27.com/
technoseb27
 
Messages : 398
Inscription : 01 Sep 2013

Re: Requetes HTTP pour controler Xbmc

Messagepar olivvvv » 15 Sep 2014 22:54

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
olivvvv
 
Messages : 134
Inscription : 10 Sep 2014

Re: Requetes HTTP pour controler Xbmc

Messagepar ASECADOMOTIQUE54 » 25 Sep 2014 18:40

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)
ASECADOMOTIQUE54
 
Messages : 639
Inscription : 14 Déc 2013
Localisation : Nancy

Re: Requetes HTTP pour controler Xbmc

Messagepar olivvvv » 25 Sep 2014 21:23

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
olivvvv
 
Messages : 134
Inscription : 10 Sep 2014

Re: Requetes HTTP pour controler Xbmc

Messagepar influman » 26 Sep 2014 10:29

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.
influman
 
Messages : 2324
Inscription : 30 Oct 2013

Re: Requetes HTTP pour controler Xbmc

Messagepar ASECADOMOTIQUE54 » 27 Sep 2014 10:01

@Olivvv merci! ça fonctionne nikel! :D
@influman merci aussi du partage ;)
ASECADOMOTIQUE54
 
Messages : 639
Inscription : 14 Déc 2013
Localisation : Nancy

Re: Requetes HTTP pour controler Xbmc

Messagepar Willy (eedomus team) » 02 Fév 2015 16:07

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é 32388 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é 32388 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é 32388 fois
Image L'équipe eedomus
http://www.eedomus.com
Willy (eedomus team)
 
Messages : 18
Inscription : 23 Sep 2013

Re: Requetes HTTP pour controler Xbmc

Messagepar Willy (eedomus team) » 02 Fév 2015 16:22

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é 32385 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>";

?>

Image L'équipe eedomus
http://www.eedomus.com
Willy (eedomus team)
 
Messages : 18
Inscription : 23 Sep 2013

Re: Requetes HTTP pour controler Xbmc

Messagepar Willy (eedomus team) » 02 Fév 2015 16:39

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é 32383 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é 32383 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é 32383 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é 32383 fois
Image L'équipe eedomus
http://www.eedomus.com
Willy (eedomus team)
 
Messages : 18
Inscription : 23 Sep 2013

Re: Requetes HTTP pour controler Xbmc

Messagepar Alphonse Magova » 04 Fév 2015 23:23

Merci pour le partage la Team!
EEDOMUS+
Alphonse Magova
 
Messages : 317
Inscription : 13 Déc 2014

Re: Requetes HTTP pour controler Xbmc

Messagepar ASECADOMOTIQUE54 » 14 Fév 2015 13:01

fonctionne trés bien avec kodi
merci la team ;)
ASECADOMOTIQUE54
 
Messages : 639
Inscription : 14 Déc 2013
Localisation : Nancy

Re: Requetes HTTP pour controler Xbmc

Messagepar dasoft13 » 14 Fév 2015 13:22

Merci pour l'explication et comme ca fonctionne avec XBMC, pense tu que cela pourrait fonctionner avec media-center ?
dasoft13
 
Messages : 28
Inscription : 02 Nov 2013

Re: Requetes HTTP pour controler Xbmc

Messagepar galaksy2001 » 28 Oct 2016 16:19

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
galaksy2001
 
Messages : 727
Inscription : 06 Jan 2014

Re: Requetes HTTP pour controler Xbmc

Messagepar Marcus-67 » 28 Oct 2016 17:11

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
Marcus-67
 
Messages : 346
Inscription : 04 Mars 2013
Localisation : Elsass

Re: Requetes HTTP pour controler Xbmc

Messagepar galaksy2001 » 29 Oct 2016 09:59

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
galaksy2001
 
Messages : 727
Inscription : 06 Jan 2014

Re: Requetes HTTP pour controler Xbmc

Messagepar galaksy2001 » 29 Oct 2016 10:06

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 ...
galaksy2001
 
Messages : 727
Inscription : 06 Jan 2014

Re: Requetes HTTP pour controler Xbmc

Messagepar Marcus-67 » 05 Nov 2016 10:05

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.
Marcus-67
 
Messages : 346
Inscription : 04 Mars 2013
Localisation : Elsass

Re: Requetes HTTP pour controler Xbmc

Messagepar galaksy2001 » 05 Nov 2016 18:19

Merci. Je retiens l'idée si jamais je rencontre d'autres soucis ;)
galaksy2001
 
Messages : 727
Inscription : 06 Jan 2014

Re: Requetes HTTP pour controler Xbmc

Messagepar Zenvibz » 12 Déc 2016 20:25

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
Zenvibz
 
Messages : 11
Inscription : 05 Déc 2016

Suivant

Retour vers Requêtes HTTP

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 0 invité(s)