I. Présentation
Nous allons voir comment récupérer dans Jeedom les informations de notre serveur Plex. En l’occurrence ici ce qui nous intéresse (enfin moi surtout 😛 ), c’est de savoir si un film et en lecture ou en pause afin de réduire la luminosité ou l’augmenter automatiquement.
II. Pré-requis
Pour cette méthode il faut quelques pré-requis et dans notre cas débourser de l’argent.
- Dans un premier temps, il nous faut acheter un Plex pass
- Dans un second temps, acheter le plugin Http Remote Event (4€)
Le Plex pass permettra de débloquer une fonctionnalité nécessaire à notre scénario. Personnellement j’ai pris le pass à vie (très vite rentabilisé). Le plugin servira à recevoir les informations transmisse par Plex.
III. Plugin Http Remote Event
Je vous passe l’installation depuis le market, je pense que je l’ai assez montré 😀
Une fois votre plugin installé et activé on peut commencer sa configuration.
Le plugin fourni une url qu’il faudra copier dans Plex.
IV. Plex
Prenons l’url précédente: http:///core/api/jeeApi.php?apikey=XXXXXXXXXXX&type=httpRemoteEvent&eqId=63&payload=<payloadValue>
Il va falloir la transformer très légèrement. J’ai volontairement pas communiquer ma clé api –> remplacé par les XXXX
Il manque une information importante dans l’url, c’est l’adresse de votre Jeedom.
- Avant: http:///core/api/jeeApi.php?apikey=XXXXXXXXXXX&type=httpRemoteEvent&eqId=63&payload=<payloadValue>
- Aprés: http://IP_JEEDOM/core/api/jeeApi.php?apikey=XXXXXXXXXXX&type=httpRemoteEvent&eqId=63&payload=<payloadValue>
Maintenant rendez-vous dans votre compte Plex pour aller chercher le menu Webhook.
V. Scénario
Retour dans Jeedom, où l’on va créer un scénario afin de traiter les informations fournies par Plex au plugin http remote event.
Dans l’onglet Scénario on va ajouter un bloc de type code.
Dans ce bloc code nous allons mettre le code suivant:
Merci à Shyrka973 pour sont post sur le forum
// On récupère le payload
$cmd = cmd::byString("#[Multimédia][PlexRomain][Payload]#");
$postdata = $cmd->execCmd();
// On le décode
$postdata = utf8_encode($postdata);
$scenario->setLog('PostData :'.$postdata);
$results = json_decode($postdata);
// On récupère l'événement déclencheur: media.play, media.pause, media.stop, ...
$event = $results->event;
$scenario->setLog('Event: :'.$event);
$scenario->setData('PlexEvent', $event);
// On récupère le lecteur
$player = $results->Player->uuid;
$scenario->setLog('Player : '.$player);
$scenario->setData('PlexPlayer', $player);
En rouge partie à modifier: correspond à la case éventement dans notre scénario.
Nous nous retrouvons avec deux variables PlexEvent et PlexPlayer
VI. Test
Maintenant vous pouvez lancer un film dans Plex, celui-ci envoi ses informations à Jeedom récupéré par le plugin Http Remote Event et traiter dans notre scénario.
Dans le log, nous retrouvons:
- le PostData qui correpond a ce qu’envoi Plex, il s’agit d’un XML
- La variable Event –> correspondant à la variable PlexEvent
- La variable Player –> correspondant à la variable PlexPlayer
Vous pouvez également retouver les variable dans en cliquant sur Variable en haut du scénario.
Nous pouvons voir que nous avons donc l’état de la vidéo play, stop ou pause et sur quel type de matériel est lancé la vidéo. Ainsi vous pouvez continuer votre scénario pour traiter les variable et faire diminuer la lumière lorsque la vidéo est en lecture uniquement lancé sur le media PC, car si vous lancer une vidéo sur votre téléphone dans le metro, ça ne sert à rien de baisser la luminosité chez vous 😀
Voici un exemple :
Bonjour, que fait de plus votre solution que ce lien : http://bozothegeek.blogspot.com/2017/03/domotique-script-pour-plex.html ?
Bonjour,
la solution que je présente permet d’utiliser une fonction de plex en version premium qui pour moi est du coup plus simple.
Mais il n’existe pas qu’une solution, à vous de voir/tester
Bonjour Snatch, tout d’abord, merci pour ce tuto, il fonctionne très bien. Par contre, j’essai de faire un scripte ou je récupère le titre et le résumé du film dans une variable. En modifiant ton code, cela fonctionne parfaitement, sauf que lorsque je mets l’info de la variable dans un virtuel (info), les caractères accentués ne passent pas correctement. Saurais tu comment faire pour modifier cela. Je pense que cela vient de l’encodage UTF8 du script, mais malheureusement mes compétences s’arrêtent là.
Bonjour,
C’est avec plaisir de partager des solutions.
Je dois avouer que je n’ai pas testé ce cas. Il faudrait que j’essaie.
Bonjour,
Cette solution fonctionne toujours à ce jour.
La seule difficulté rencontrée était liée à l’URL WebHook fournie à PLEX (Premium) qui dans mon cas était de type HTTPS (car ne fonctionne pas du tout en HTTP). Or dans ce cas il faut prendre soin de fournir l’adresse DNS et pas @IP.
Pour ensuite adapter les informations receuillies, il suffit d’aller sur le site Plex pour obtenir le détail des payload fournis.
J’avais tenté avec le plugin PLEX actuel mais pas abouti du tout.
Merci beaucoup.
Effectivement la solution marche toujours, et c’est super réactif.
Je suis assez bluffé.
SI je peux apporter un détail, il ne faut pas oublié le port de connexion.
et ce bout de script qui permet de recuperer l’utilisateur, et les informations du media (artist, album, titre etc …) A rajouter a la fin.
”
// On récupère l’utilisateur
$users = $results->Account->title;
$scenario->setLog(‘Users : ‘.$users);
$scenario->setData(‘PlexUsers’, $users);
// On récupère le titre de media jouer
$title = $results->Metadata->title;
$scenario->setLog(‘Title : ‘.$title);
$scenario->setData(‘PlexTitle’, $title);
// On récupère l’album du media jouer (Seulement pour musique)
$album = $results->Metadata->parentTitle;
$scenario->setLog(‘Album : ‘.$album);
$scenario->setData(‘PlexAlbum’, $album);
// On récupère l’artiste du media jouer (Seulement pour musique)
$artist = $results->Metadata->grandparentTitle;
$scenario->setLog(‘Artist : ‘.$artist);
$scenario->setData(‘PlexArtist’, $artist);
// On récupère le type du media jouer
$type = $results->Metadata->type;
$scenario->setLog(‘Type : ‘.$type);
$scenario->setData(‘PlexType’, $type);
“