[PLEX] faire parler plex et la eedomus

Discussion et échanges de scripts pour la box eedomus

[PLEX] faire parler plex et la eedomus

Messagepar killpilot » 10 Août 2017 22:31

Bonjour à tous,

je me lance donc pour ceux que ca intéresserait dans un petit tuto sur comment lancer des actions sur la eedomus en fonction des actions effectués sur votre plex.

alors je ne fais pas de pub, je partage simplement avec qui voudra bien, ce que j'ai fait n'est surement pas parfait mais si certain d'entre vous veulent apporter la pierre à l'edifice ca sera avec grand plaisir.

alors pour ce faire il faut / j'ai eu besoin de :
- une eedomus
- un pc ou serveur
- un chromecast
- que le pc / serveur qui fasse tourner plexpy soit dans le même réseau que l'eedomus

le pc ou serveur dans mon cas fait tourner
- plex media server (serveur officiel plex)
- plexpy, un module non officiel qui permet justement d'intercepter les actions de plex et de lancer des scripts custom, j'ai décidé de les faire en python puisque python était nécéssaire pour installer plexpy autant ne pas multiplier les trucs et utiliser ce qui est déjà la.
- python 2.7 d'installé.
- pip d'installer pour python il faut installer le module requests
referer vous à l apage suivante :
https://stackoverflow.com/questions/4750806/how-do-i-install-pip-on-windows
pour installer pip il faut faire dans un CMD un :
pip install requests


coté eedomus j'ai utilisé :
- scène qui contient les différents action

je ne detaillerai pas l'installation de plex, ni de plexpy, tout est déjà expliqué en long large et en travers.

je vais donc
I) décrire la creation de la scéne dans l'eedomus et sa configuration
II) décrire la configuration de ceci dans plexpy
III) Expliqué le script pour si vous souhaitez le modifier

le script que je vous livre ici est fonctionnel, mais c'est une ebauche, il faut encore faire plein de chose.

Code : Tout sélectionner
## script       plex_eedomus.py               ##
## Import des librairi ##

import sys
import requests

## import des Arguments ##
CLIENT_IP = sys.argv[1] # adresse IP du client
CLIENT_TYPE = sys.argv[2] # type de client
CLIENT_PLATFORM = sys.argv[3] # plateforme de lecture du client
CLIENT_ACTION = sys.argv[4] # Action declencheur, Play, Pause, Stop, Resume

## Configuration des variables ##
EEDOMUS_IP = '192.168.1.XX'   #mettez l'adresse IP local de votre eedomus
EEDOMUS_API_USER = 'XXXXXXX'   # mettez ici le user API de votre eedomus
EEDOMUS_API_PASSWORD = 'yyyyyyyyyyyyyyyy'   # mettez ici le password API de votre eedomus
EEDOMUS_PLEX_SCENE_ID = 'XXXXXX'  # mettez ici le code API de l'actionneur
EEDOMUS_LIGHT_SALON_ID = 'XXXXXX'  # mettez ici le code API de votre lumiere de salon
EEDOMUS_LIGHT_HOME_CINEMA_ID = 'XXXXXX' # mettez ici le code API de votre lumiere de home cinema
EEDOMUS_BRIGHTNESS_SALON_ID = 'XXXXXX' # mettez ici le code API de votre capteur de luminosite du salon afin de gere la la gestion des lumieres ou non.
CHROMECAST_SALON_IP = '192.168.1.XX' # mettez ici l'adresse de ip de bvotre chromecast de salon pour faire des filtrages
CHROMECAST_HOME_CINEMA_IP = '192.168.1.XX' # mettez ici l'adresse de ip de bvotre chromecast de home cinema pour faire des filtrages



##pour la partie home cinema
if CLIENT_IP == CHROMECAST_HOME_CINEMA_IP and CLIENT_PLATFORM == "Chromecast" :

   ## action en fonction du declencheur
   if CLIENT_ACTION == 'Play' :
      #on lance la scene HC_Play du periph PlexPy Scene
      #appel de l'url pour l'api local eedomus
      Value_plex_action = "HC_Play"
   elif CLIENT_ACTION == 'Pause' :
      #on lance la scene HC_pause du periph PlexPy Scene
      Value_plex_action = "HC_Pause"
   elif CLIENT_ACTION == 'Resume' :
      #on lance la scene HC_resume du periph PlexPy Scene
      Value_plex_action = "HC_Resume"
   elif CLIENT_ACTION == 'Stop' :
      #on lance la scene HC_stop du periph PlexPy Scene
      Value_plex_action = "HC_Stop"
   EEDOMUS_URL = 'http://' + EEDOMUS_IP + '/api/set?action=periph.value&periph_id=' + EEDOMUS_PLEX_SCENE_ID + '&value=' + Value_plex_action + '&api_user=' + EEDOMUS_API_USER + '&api_secret=' + EEDOMUS_API_PASSWORD
   print (EEDOMUS_URL)
   requests.get(EEDOMUS_URL).json()

## pour la partie salon
elif CLIENT_IP == CHROMECAST_SALON_IP and CLIENT_PLATFORM == "Chromecast" :
   ## action en fonction du declencheur
   if CLIENT_ACTION == 'Play' :
      #on lance la scene HC_Play du periph PlexPy Scene
      #appel de l'url pour l'api local eedomus
      Value_plex_action = "Salon_Play"
   elif CLIENT_ACTION == 'Pause' :
      #on lance la scene HC_pause du periph PlexPy Scene
      Value_plex_action = "Salon_Pause"
   elif CLIENT_ACTION == 'Resume' :
      #on lance la scene HC_resume du periph PlexPy Scene
      Value_plex_action = "Salon_Resume"
   elif CLIENT_ACTION == 'Stop' :
      #on lance la scene HC_stop du periph PlexPy Scene
      Value_plex_action = "Salon_Stop"
   EEDOMUS_URL = 'http://' + EEDOMUS_IP + '/api/set?action=periph.value&periph_id=' + EEDOMUS_PLEX_SCENE_ID + '&value=' + Value_plex_action + '&api_user=' + EEDOMUS_API_USER + '&api_secret=' + EEDOMUS_API_PASSWORD
   print (EEDOMUS_URL)
   requests.get(EEDOMUS_URL).json()



I) configuration de l'eedomus

pour cela il faut vous rendre dans configuration et faire ajouter un nouveau périphérique :
Image

après vous faite ajouter un autre type de périphérique
Image

et enfin vous choisissez Scéne
Image

comme nom vous pouvez mettre Plex Scene, et comme rôle j'ai mis éclairage, mais vous pouvez adapter.
Image

il faut ensuite créer 4 etats par Zone que vous voulez piloter avec cette scene, pour ma part j'ai deux zones qui correspondent à mes deux chromecast, mon salon et mon home cinema, j'ai donc créé des etats Salon_Play, Salon_Stop, Salon_Resume, Salon_Pause, et pareil pour le home cinema, ca donne ca :
Image
Image

je vous laisse définir les actions à associer pour chacunes des actions.

n'oublier pas de noter l'ID de votre scéne pour le controle par l'API qui se trouve ici :

Image

voila la partie eedomus est prête , y'a plus qu'a voir la partie plexpy

II) configuration de plexpy

une fois votre plexpy installé, il va vous falloir définir un emplacement pour déposer votre/vos scripts en python, ou php ou ce qui est compatible avec plexpy, pour ma part et pour ne pas installer des choses uniquement pour ca, j'ai décidé de faire le script en python, comme il est deja installé pour plexpy, rien à rajouter.

Pour ma part j'ai donc mis ce script dans ma dropbox, comme ca quand je travaille dessus de mon mac ca synchronise directement sur mon pc ou il y a plexpy. il se trouve pour moi donc dans

Code : Tout sélectionner
C:\Users\killpilot\dropbox\plex_python


cliquer maintenant sur setting en haut à droite, et dans le menu selectionner Notification agent
Capture d'écran 2017-08-11 12.47.32.png


repéré la ligne "Script" et cliquer sur la petite roue dentée à droite au bout de la ligne

Image

insérer ici le chemin ou est stocké votre script, rafraichissez la page, et selectionner pour les 4 premières action votre script dans la liste, vous devriez obtenir ceci :
Image

vous pouvez faire "save" en bas de la page.

cliquer maintenant sur la cloche devant "script" la fenetre suivante apparaitra, choisissez les actions pour lesquels vous souhaitez que vos notification soient envoyés, ici Start, Resume, Pause, Stop
Image

vous pouvez faire "close" en bas une fois que c'est coché.

cliquer maintenant sur notification dans le menu de gauche
Image

sélectionner les categorie plex pour lesquels les notifications seront activées, moi j'ai pris film et série
Image

descendez maintenant tout en bas et dérouler la ligne "script"
Image
ajouter les éléments suivants :
Code : Tout sélectionner
{ip_address} {player} {platform} {action}


c'est ce qui va permettre au python de recupérer ce qu'il lui faut pour faire ce qu'il a à faire, vous pouvez biensur en rajouter, mais il faudra ajouter d'autres arguments dans le script. Vous pouvez maintenant cliquer sur "save"

maintenant allez dans activity monitor
Image

et cochez la case devant websocket, faite save en bas,effectuer le redemarrage, et voila vous etes pas mal, cette dernier option permet de rendez la detection des actions presque instantanné, alors qu'en temps normal vous etes obligez d'attendre que l'evenement soit detecté, avec une verif toutes les 30-50s ce qui peut vite etre long.....

Image

nous allons maintenant parler un peu du script histoire que vous comprenniez vite fait ce qu'il faut et que vous puissiez le modifier si besoin.

I) le script

ce script est vraiment sans pretention, il y a surement des maniéres bcp plus de elegante et optimiser de le faire, j'y connais pas grand chose en python, j'ai fait un plus simple.

on recupere les arguments dans l'ordre ou on les a donne au script

Code : Tout sélectionner
CLIENT_IP = sys.argv[1] # adresse IP du client
CLIENT_TYPE = sys.argv[2] # type de client
CLIENT_PLATFORM = sys.argv[3] # plateforme de lecture du client
CLIENT_ACTION = sys.argv[4] # Action declencheur plex, Play, Pause, Stop, Resume, ou autre

ca correspond au fameux
donc on a la partie configuration au debut :
Code : Tout sélectionner
{ip_address} {player} {platform} {action}

si vous voulez rajouter des choses vous pouvez mais pensez a bien modifier les deux partie sinon ca ne marchera pas.

Code : Tout sélectionner
## Configuration des variables ##
EEDOMUS_IP = '192.168.1.XX'   #mettez l'adresse IP local de votre eedomus
EEDOMUS_API_USER = 'XXXXXXXX'   # mettez ici le user API de votre eedomus
EEDOMUS_API_PASSWORD = 'YYYYYYYYYYYYYYYYYY'   # mettez ici le password API de votre eedomus
EEDOMUS_PLEX_SCENE_ID = '123456'  # mettez ici le code API de l'actionneur plex scene
EEDOMUS_LIGHT_SALON_ID = '123456'  # mettez ici le code API de votre lumiere de salon
EEDOMUS_LIGHT_HOME_CINEMA_ID = '123456' # mettez ici le code API de votre lumiere de home cinema
EEDOMUS_BRIGHTNESS_SALON_ID = '123456' # mettez ici le code API de votre capteur de luminosite du salon afin de gere la la gestion des lumieres ou non.
CHROMECAST_SALON_IP = '192.168.1.XX' # mettez ici l'adresse de ip de bvotre chromecast de salon pour faire des filtrages
CHROMECAST_HOME_CINEMA_IP = '192.168.1.YY' # mettez ici l'adresse de ip de bvotre chromecast de home cinema pour faire des filtrages


alors ici vous allez mettre vos IP local de eedomus pour les appel api
votre API user/secret our l'authentification sur l'api

l'ID de votre scéne plex créé sur l'eedomus avec les etats
l'id des lampes a controler, moi j'ai deux salles, salon et home cinema, donc j'ai 2 ID, pour l'instant il ne me serve a rien mais je pense les utiliser pour faire des controles avant, genre si c'est deja allumé on fait rien, enfin en gros je pense utiliser leur etat pour faire des conditions d'action.

pareil pour le BRIGHTNESS salon, c'est pour quand vous mettez lecture et qu'il est 15H de l'apres midi ca sert a rien d'allumer la lumiere, on va donc recuperer la valeur de la luminosité et en fonction allumé ou pas.

et enfin les IP de mes deux chromecast, le but est de lancer une action sur le salon quand je lit un film dans le salon, pas quand je suis au bureau le midi, du coup je m'en fou un peu de savoir que mon salon soit allumé. bref l'ip et le type de plateforme me serve a distribuer les actions sur ma scéne plex.

et le reste bah c'est juste des tests pour declencher les bonne action en fonction de.

si vous avez des question je detaillerai biensur, je vais continuer à mettre à jour le script, et je posterai les mises à jours ici, et certain d'entre vous sont interessé je tenterai de repondre à vos questions avec mes maigres connaissance ;)



Changelog :
V0.1 : creation du topic
V0.2 : MAJ du topic avec mise à jours du script, et rajout du pre-requis concernant le module requests
Dernière édition par killpilot le 25 Août 2017 13:38, édité 5 fois.
killpilot
 
Messages : 171
Inscription : 03 Jan 2017

Re: [PLEX] faire parler plex et la eedomus

Messagepar killpilot » 11 Août 2017 12:27

topic mise à jours
killpilot
 
Messages : 171
Inscription : 03 Jan 2017

Re: [PLEX] faire parler plex et la eedomus

Messagepar Alphonse Magova » 13 Août 2017 23:20

Super! 8-)
Merci pour le joli tuto!

Bon il est un peu tard je m'y replongerai à tête plus reposée! :mrgreen:
EEDOMUS+
Alphonse Magova
 
Messages : 317
Inscription : 13 Déc 2014

Re: [PLEX] faire parler plex et la eedomus

Messagepar killpilot » 23 Août 2017 14:28

maj du script, voir change log en bas du post.

je pense rajouter les conditions dans la semaine donc je ferai surement une maj ce week end ;)
killpilot
 
Messages : 171
Inscription : 03 Jan 2017

Re: [PLEX] faire parler plex et la eedomus

Messagepar Qristen » 23 Août 2017 18:17

Hello,

En php compatible eedomus pour l'heberger sur la box se serait au top ça marche bien pour kodi ;)

Sympa comme projet en tout cas ;)
Qristen
 
Messages : 203
Inscription : 17 Fév 2015

Re: [PLEX] faire parler plex et la eedomus

Messagepar killpilot » 24 Août 2017 10:32

Qristen a écrit:Hello,

En php compatible eedomus pour l'heberger sur la box se serait au top ça marche bien pour kodi ;)

Sympa comme projet en tout cas ;)


oui effectivement "MAIS" comme c'est plexpy qui doit exécuter le script.. c'est pas un choix c'est comme ca... il faut installer php sur l'ordi qui a plexpy et on lancera le script genre php.exe Script.php ... donc au final ce script n'est pas hebergeable sur la eedomus... car on ne peux pas lancer du http://....... directement de plexpy.

c'est pour ca que je suis partie sur du python parce que c'est pas bien compliqué et que surtout ça ne fait rien rajouter de plus que ce qui est nécéssaire pour faire marcher plexpy.
killpilot
 
Messages : 171
Inscription : 03 Jan 2017

Re: [PLEX] faire parler plex et la eedomus

Messagepar killpilot » 03 Déc 2017 21:15

Rien à voir avec le sujet mais bon.. Je suis content faut que je partage, j'ai plus qu'à intégrer ce ruban se led dans la programmation de l'éclairage et ça sera nickel.

C'est pas fini j'ai encore la finition à faire mais bon c'est pas mal déjà !! ImageImageImage

Envoyé de mon MI 5s Plus en utilisant Tapatalk
killpilot
 
Messages : 171
Inscription : 03 Jan 2017

Re: [PLEX] faire parler plex et la eedomus

Messagepar stef31 » 04 Déc 2017 06:06

Superbe installation Killpilot.
Merci pour le partage, je suis aussi en plein travaux pour aménager une pièce en Home Cinéma. J'ai commencé cet été et j'en vois pas encore la fin mais je suis assez optimiste sur le résultat. :)
J'utilisais jusqu'ici KODI mais je commence à me demander si PLEX ne serait pas plus adapté à mon installation surtout avec les commandes vocales.
EEDOMUS V2 - RFX avec RTS
En attente de l'EEDOMUS V4
stef31
 
Messages : 2947
Inscription : 20 Août 2013
Localisation : 31

Re: [PLEX] faire parler plex et la eedomus

Messagepar killpilot » 04 Déc 2017 09:22

Bah au mois de juin ça ressemblais encore à ça moi !!! Et je suis toujours dans les travaux aussi, je suis entrain de finir le gros œuvre dans la pièce à côté et je ferai la peinture pour finir, j'ai bon espoir d'avoir fini cette pièce pour fin janvier et le sous sol pour février.

Pour Kodi je n'ai jamais essayer, je suis parti sur Plex à cause de la dispo de client mobile natif toute Plateforme avec fonction hors ligne... En gros Kodi c'est bien pour du local, et plex pour de l'itinairance et local...

Pour la commande vocal Kodi s'intégrant mieux à jeedom ça doit être plus facile..

Mais ça commence à arriver chez plex, ils ont intégré la commande vocal par l'assistant Google sur les box Android type nvidia shield. Il existe phlex qui fait ça aussi mais c'est un outils tier, donc on peut espérer que dans peu de temps on pourra le commander avec un Google home.... A suivre.

Courage pour tes travaux je sais ce que c'est !! Mais si tu finis ton home cinéma regarder un film sur un écran de 3m de diagonal tu verras c'est le pied !! Puis avec la gestion des lumières fait au petit oignon par notre chère box eedomus on est bien là !!

Si tu as des question n'hésite pas, ça me fera plaisir de pouvoir aider quelqu'un, parce que jusqu'à maintenant j'ai pas dechainé les foules lol

ImageImage

Envoyé de mon MI 5s Plus en utilisant Tapatalk
killpilot
 
Messages : 171
Inscription : 03 Jan 2017

Re: [PLEX] faire parler plex et la eedomus

Messagepar stef31 » 04 Déc 2017 10:25

Cela me rassure que je ne sois pas le seul à mettre plusieurs mois pour faire une pièce car j'avais l'impression de ne pas avancer. :)

killpilot a écrit:Mais ça commence à arriver chez plex, ils ont intégré la commande vocal par l'assistant Google sur les box Android type nvidia shield. Il existe phlex qui fait ça aussi mais c'est un outils tier, donc on peut espérer que dans peu de temps on pourra le commander avec un Google home.... A suivre.


C'est intéressant ce que tu viens de dire, je vais regarder pour voir si je peux installer Plex sur une box android quelconque. J'avais déjà vu une interaction de Plex avec Alexa et cela m'avait beaucoup plus. J'évite pour le moment de passer par JEEDOM pour mon installation domotique afin de pas avoir trop de systèmes à bidouiller.

killpilot a écrit:Mais si tu finis ton home cinéma regarder un film sur un écran de 3m de diagonal tu verras c'est le pied !! Puis avec la gestion des lumières fait au petit oignon par notre chère box eedomus on est bien là !!


L'écran fait 3m de largeur (Lumene 300c). J'avais déjà un écran de 2.5 m de diagonal dans le salon et j'ai voulu faire un peu plus grand. :)
Je viens de tout changer (écrans, ampli, enceintes et vidéo-projecteur). J'ai terminé les murs (une véritable toile d’araignée derrière les murs), le câblage (je me suis pris la tête pour faire cohabiter le courant fort et le courant faible), la peinture, la tapisserie et il me reste quelques finitions puis le parquet, la porte, le volet électrique, l'éclairage, les meubles et le canapé. Après, je serais peut être trop fatigué pour regarder un film en entier... ;)

Continues, c'est très intéressant à suivre et cela reste de la domotique. Peut être que l'on devrait ouvrir un sujet dans le coin bistrot?
EEDOMUS V2 - RFX avec RTS
En attente de l'EEDOMUS V4
stef31
 
Messages : 2947
Inscription : 20 Août 2013
Localisation : 31

Re: [PLEX] faire parler plex et la eedomus

Messagepar killpilot » 04 Déc 2017 10:28

stef31 a écrit:Cela me rassure que je ne sois pas le seul à mettre plusieurs mois pour faire une pièce car j'avais l'impression de ne pas avancer. :)

killpilot a écrit:Mais ça commence à arriver chez plex, ils ont intégré la commande vocal par l'assistant Google sur les box Android type nvidia shield. Il existe phlex qui fait ça aussi mais c'est un outils tier, donc on peut espérer que dans peu de temps on pourra le commander avec un Google home.... A suivre.


C'est intéressant ce que tu viens de dire, je vais regarder pour voir si je peux installer Plex sur une box android quelconque. J'avais déjà vu une interaction de Plex avec Alexa et cela m'avait beaucoup plus. J'évite pour le moment de passer par JEEDOM pour mon installation domotique afin de pas avoir trop de systèmes à bidouiller.

killpilot a écrit:Mais si tu finis ton home cinéma regarder un film sur un écran de 3m de diagonal tu verras c'est le pied !! Puis avec la gestion des lumières fait au petit oignon par notre chère box eedomus on est bien là !!


L'écran fait 3m de largeur (Lumene 300c). J'avais déjà un écran de 2.5 m de diagonal dans le salon et j'ai voulu faire un peu plus grand. :)
Je viens de tout changer (écrans, ampli, enceintes et vidéo-projecteur). J'ai terminé les murs (une véritable toile d’araignée derrière les murs), le câblage (je me suis pris la tête pour faire cohabiter le courant fort et le courant faible), la peinture, la tapisserie et il me reste quelques finitions puis le parquet, la porte, le volet électrique, l'éclairage, les meubles et le canapé. Après, je serais peut être trop fatigué pour regarder un film en entier... ;)

Continues, c'est très intéressant à suivre et cela reste de la domotique. Peut être que l'on devrait ouvrir un sujet dans le coin bistrot?


allez... un sujet [TRAVAUX] gros oeuvre et integration domotique comme ca on reste large ;) allez je vais l'ouvrir on se retrouve la bas :P ca fait plaisir d'avoir quelqu'un avec qui partager la sastisfaction de gros travaux :D
killpilot
 
Messages : 171
Inscription : 03 Jan 2017

Re: [PLEX] faire parler plex et la eedomus

Messagepar NicoLeOca » 14 Déc 2017 09:35

Salut!
Merci beaucoup je testerai tout ça dès que possible.
J'ai déjà tout le nécessaire d'installé sur mon poste PMS.

Par contre, je rejoins d'autres commentaires.
Ne serait-il pas possible d'utiliser les Plex Webhooks plutot que PlexPy?
https://support.plex.tv/hc/en-us/articl ... 7-Webhooks
à ce moment là, un script php est peut-être possible.

PS: j'adorerais regarder moi même mais je ne sais pas coder.
merci à ceux qui savent de partager leurs devs :)
NicoLeOca
 
Messages : 27
Inscription : 13 Mars 2014

Re: [PLEX] faire parler plex et la eedomus

Messagepar killpilot » 14 Déc 2017 10:38

je vois pas trop de quoi vous parler sur plex webhook ? pouvez vous m'en dire plus, car effectivement y'a peut etre des solutions plus opti...je suis preneur si c'est le cas ;)
killpilot
 
Messages : 171
Inscription : 03 Jan 2017

Re: [PLEX] faire parler plex et la eedomus

Messagepar killpilot » 14 Déc 2017 10:41

haaa ok je viens de voir ca dans compte je connaissais pas... effectivement ca peut etre plus "facile" que le script python... Mais ca n'enlevera pas le fait qu'il faut jouer des actions en fonction du lecteur.. et d'autre condition, et que ca il faudra forcement un script externe.

ceci dit ca peut etre plus reactif effectivement...

je vais regarder ca.
killpilot
 
Messages : 171
Inscription : 03 Jan 2017

Re: [PLEX] faire parler plex et la eedomus

Messagepar killpilot » 11 Jan 2018 15:30

bon je viens de commencer le dev du script php hebergeable directement sur la eedomus qui fonctionne avec les webhook de plex

ca devrai etre beaucoup plus reactif et surtout limité les intermediaire et fonctionner en local sans besoin de produit tier ou d'internet..

je vous tiens au courant
killpilot
 
Messages : 171
Inscription : 03 Jan 2017

Re: [PLEX] faire parler plex et la eedomus

Messagepar killpilot » 11 Jan 2018 16:36

premier element de reponse, en fait on ne peut pas l'heberger sur l'eedomus, non pas pour des probléme technique, mais pour des soucis fonctionnel..

en fait... les fameux webhook sont généré par les serveur plex (public). quand on configure un webhook, l'url qui doit etre mise doit etre publique et doit etre joignable par les serveur plex.

donc si on met le script php sur l'eedomus, ca marchera MAIS il faudra publier le serveur de la eedomus sur internet... ce qui n'est pas du tout terrible....

du coup on est obligé de le mettre sur un autre serveur web qui sera accessible de l'internet et qui parlera donc a l'API eedomus... a voir si ca sera plus reactif que plexpy...
killpilot
 
Messages : 171
Inscription : 03 Jan 2017

Re: [PLEX] faire parler plex et la eedomus

Messagepar killpilot » 12 Jan 2018 15:43

bon alors.... voila ce qu'il en ressort...

un script php que j'ai appelé plex_webhook.php

Code : Tout sélectionner
<?php

$EEDOMUS_API_USER = 'xxxxxxxx';   // mettez ici le user API de votre eedomus
$EEDOMUS_API_PASSWORD = 'xxxxxxxxxxxxx';   // mettez ici le password API de votre eedomus
$EEDOMUS_PLEX_SCENE_ID = 'XXXXXX';  //mettez ici le code API de l actionneur
$EEDOMUS_LIGHT_SALON_ID = 'XXXXXX';  //mettez ici le code API de votre lumiere de salon
$EEDOMUS_LIGHT_HOME_CINEMA_ID = 'XXXXXX'; //mettez ici le code API de votre lumiere de home cinema
$EEDOMUS_BRIGHTNESS_SALON_ID = 'XXXXXX'; //mettez ici le code API de votre capteur de luminosite du salon afin de gere la la gestion des lumieres ou non
$CHROMECAST_SALON_UUID = 'yyyyyyyyyyyyyyyyyyyyyyyy'; //mettez ici le code UUID plex de votre chromecast de salon pour faire des filtrages
$CHROMECAST_HOME_CINEMA_UUID = 'yyyyyyyyyyyyyyyyyyyy'; //mettez ici le code UUID plex de votre chromecast de home cinema pour faire des filtrages
$EEDOMUS_UUID_ID = 'XXXXXX'; //mettez ici l id du periph qui va recupérer l UUID de vos lecteur
$Value_plex_action = 'RAS_default';

// on recupere le JSON posté par plex et on le met dans un tableau associatif PHP
$plex_webhooks_json = json_decode($_POST["payload"],true);

// decommenter la ligne en dessous pour recuperer les UUID de vos lecteur dans un periph viruel
// file_get_contents('https://api.eedomus.com/set?action=periph.value&periph_id=' . $EEDOMUS_UUID_ID . '&value=' . $plex_webhooks_json['Player']['uuid'] . '&api_user=' . $EEDOMUS_API_USER . '&api_secret=' . $EEDOMUS_API_PASSWORD);

// on verifie si le lecteur correspond au chromecast salon
if ($plex_webhooks_json['Player']['uuid'] == $CHROMECAST_SALON_UUID) {

   // on recupere la valeur du capteur de luminosite pour traitement
   $BRIGHT_URL= 'http://api.eedomus.com/get?action=periph.caract&periph_id=' . $EEDOMUS_BRIGHTNESS_SALON_ID . '&api_user=' . $EEDOMUS_API_USER . '&api_secret=' . $EEDOMUS_API_PASSWORD;
   $BRIGHTNESS=json_decode(utf8_encode(file_get_contents($BRIGHT_URL)),true);

   // on recupere l etat de la lumiere du salon pour traitement
   $LIGHT_URL= 'http://api.eedomus.com/get?action=periph.caract&periph_id=' . $EEDOMUS_LIGHT_SALON_ID . '&api_user=' . $EEDOMUS_API_USER . '&api_secret=' . $EEDOMUS_API_PASSWORD;
   $LIGHT=json_decode(utf8_encode(file_get_contents($LIGHT_URL)),true);

   // on execute les actions que si la luminosite est superieur a 50 lux et que la lampe du salon est deja allumée
   if ($BRIGHTNESS['body']['last_value'] < 50 AND $LIGHT['body']['last_value'] > 0) {

      if ($plex_webhooks_json['event'] == 'media.play') {
         $Value_plex_action = 'Salon_Play';
      }elseif ($plex_webhooks_json['event'] == 'media.pause') {
         $Value_plex_action = 'Salon_Pause';
      }elseif ($plex_webhooks_json['event'] == 'media.resume') {
         $Value_plex_action = 'Salon_Resume';
      }elseif ($plex_webhooks_json['event'] == 'media.stop') {
         $Value_plex_action = 'Salon_Stop';
      }else {
         $Value_plex_action = 'RAS_salon';
      }
   }
   //on envoi a l api eedomus le declenchement de la scene correspondante
   $EEDOMUS_URL = 'https://api.eedomus.com/set?action=periph.value&periph_id=' . $EEDOMUS_PLEX_SCENE_ID . '&value=' . $Value_plex_action . '&api_user=' . $EEDOMUS_API_USER . '&api_secret=' . $EEDOMUS_API_PASSWORD;
   $is_ok = file_get_contents($EEDOMUS_URL);
}

// on verifie si le lecteur correspond au chromecast Home Cinema
if ($plex_webhooks_json['Player']['uuid'] == $CHROMECAST_HOME_CINEMA_UUID) {
   if ($plex_webhooks_json['event'] == 'media.play') {
      $Value_plex_action = 'HC_Play';
   }elseif ($plex_webhooks_json['event'] == 'media.pause') {
      $Value_plex_action = 'HC_Pause';
   }elseif ($plex_webhooks_json['event'] == 'media.resume'){
      $Value_plex_action = 'HC_Resume';
   }elseif ($plex_webhooks_json['event'] == 'media.stop'){
      $Value_plex_action = 'HC_Stop';
   }else {
      $Value_plex_action = 'RAS_HC';
   }

   //on envoi a l api eedomus le declenchement de la scene correspondante
   $EEDOMUS_URL = 'https://api.eedomus.com/set?action=periph.value&periph_id=' . $EEDOMUS_PLEX_SCENE_ID . '&value=' . $Value_plex_action . '&api_user=' . $EEDOMUS_API_USER . '&api_secret=' . $EEDOMUS_API_PASSWORD;
   $is_ok = file_get_contents($EEDOMUS_URL);

}
?>


coté plex il faut avoir un compte premium car la feature webhook n'est disponible que pour les membre premium.

pour l'activer il faut :

1 - aller compte (petit cercle en haut a droite de votre inteface web avec une lettre dedans)
2 - aller dans webhooks
3 - ajouter l'url de votre script php

une fois fait il faut récupérer UUID des lecteurs pour lequel vous voulez programmer des actions.
pour ce faire il va falloir créér un etat virtuel temporaire de type de donnée TEXT qui va recuperer l'UUID de vos player, perso moi je l'ai recuperer direct en affichant le JSON renvoyé par plex... mais ca demande des bidouile coté LINUX pour ecrire le JSON recu dans un fichier text sur le serveur...

bref decommenter la ligne suivante :

Code : Tout sélectionner
file_get_contents('https://api.eedomus.com/set?action=periph.value&periph_id=' . $EEDOMUS_UUID_ID . '&value=' . $plex_webhooks_json['Player']['uuid'] . '&api_user=' . $EEDOMUS_API_USER . '&api_secret=' . $EEDOMUS_API_PASSWORD);


faite des lecteurs, pause, ce vous voulez sur les différents players dont vous voulez récupérer vos UUID et aller consulter l'historique de votre état virtuel, qui devrai contenir les différents UUID.

ce n'est pas un code clé en main, mais je pense avoir accés expliqué au debut de ce topic, et commenter le code pour que vous puissiez vous en sortir... je suis disponible pour aider si besoin...

pour l'instant ce script est a hebergé publiquement... mais je vais reflechir pour voir si on peut le faire localement... j'ai pour l'instant des latences de 1 à 2s entre l'action et le changement d'etat de mes lumiére.. ca correspond au temps que le script envoi l'api publique eedomus et que celle ci redescende l'info à la box..

voila voila....
killpilot
 
Messages : 171
Inscription : 03 Jan 2017

Re: [PLEX] faire parler plex et la eedomus

Messagepar killpilot » 14 Jan 2018 00:20

voici une nouvelle version prend en charge les dernieres lectures en affichant le titre dans un etat virtuel.

Code : Tout sélectionner
<?php
$EEDOMUS_API_USER = 'xxxxxxxx';   // mettez ici le user API de votre eedomus
$EEDOMUS_API_PASSWORD = 'xxxxxxxxxxxxx';   // mettez ici le password API de votre eedomus
$EEDOMUS_PLEX_SCENE_ID = 'XXXXXX';  //mettez ici le code API de l actionneur
$EEDOMUS_LIGHT_SALON_ID = 'XXXXXX';  //mettez ici le code API de votre lumiere de salon
$EEDOMUS_LIGHT_HOME_CINEMA_ID = 'XXXXXX'; //mettez ici le code API de votre lumiere de home cinema
$EEDOMUS_BRIGHTNESS_SALON_ID = 'XXXXXX'; //mettez ici le code API de votre capteur de luminosite du salon afin de gere la la gestion des lumieres ou non
$CHROMECAST_SALON_UUID = 'yyyyyyyyyyyyyyyyyyyyyyyy'; //mettez ici le code UUID plex de votre chromecast de salon pour faire des filtrages
$CHROMECAST_HOME_CINEMA_UUID = 'yyyyyyyyyyyyyyyyyyyy'; //mettez ici le code UUID plex de votre chromecast de home cinema pour faire des filtrages
$EEDOMUS_UUID_ID = 'XXXXXX'; //mettez ici l id du periph qui va recupérer l UUID de vos lecteur
$LAST_MOVIE_PLAY_HC_ID = 'XXXXXX'; //mettez ici le code API de l etat virtuel recuperant les derniers lectures du home cinema
$LAST_MOVIE_PLAY_SALON_ID = 'XXXXXX'; //mettez ici le code API de l etat virtuel recuperant les derniers lectures du salon
$Value_plex_action = 'RAS_default';

// on verifie si le lecteur correspond au chromecast salon
if ($plex_webhooks_json['Player']['uuid'] == $CHROMECAST_SALON_UUID) {

   // on recupere la valeur du capteur de luminosite pour traitement
   $BRIGHT_URL= 'http://api.eedomus.com/get?action=periph.caract&periph_id=' . $EEDOMUS_BRIGHTNESS_SALON_ID . '&api_user=' . $EEDOMUS_API_USER . '&api_secret=' . $EEDOMUS_API_PASSWORD;
   $BRIGHTNESS=json_decode(utf8_encode(file_get_contents($BRIGHT_URL)),true);

   // on recupere l etat de la lumiere du salon pour traitement
   $LIGHT_URL= 'http://api.eedomus.com/get?action=periph.caract&periph_id=' . $EEDOMUS_LIGHT_SALON_ID . '&api_user=' . $EEDOMUS_API_USER . '&api_secret=' . $EEDOMUS_API_PASSWORD;
   $LIGHT=json_decode(utf8_encode(file_get_contents($LIGHT_URL)),true);

   // on execute les actions que si la luminosite est superieur a 50 lux et que la lampe du salon est deja allumée
   if ($BRIGHTNESS['body']['last_value'] < 50 AND $LIGHT['body']['last_value'] > 0) {

      if ($plex_webhooks_json['event'] == 'media.play') {
         $Value_plex_action = 'Salon_Play';
      }elseif ($plex_webhooks_json['event'] == 'media.pause') {
         $Value_plex_action = 'Salon_Pause';
      }elseif ($plex_webhooks_json['event'] == 'media.resume') {
         $Value_plex_action = 'Salon_Resume';
      }elseif ($plex_webhooks_json['event'] == 'media.stop') {
         $Value_plex_action = 'Salon_Stop';
      }else {
         $Value_plex_action = 'RAS_salon';
      }
   }
   //on envoi a l api eedomus le declenchement de la scene correspondante
   $EEDOMUS_URL = 'https://api.eedomus.com/set?action=periph.value&periph_id=' . $EEDOMUS_PLEX_SCENE_ID . '&value=' . $Value_plex_action . '&api_user=' . $EEDOMUS_API_USER . '&api_secret=' . $EEDOMUS_API_PASSWORD;
   $is_ok = file_get_contents($EEDOMUS_URL);

   if ($Value_plex_action == 'Salon_Play') {
      if ($plex_webhooks_json['Metadata']['librarySectionType'] == 'movie') {
         if(isset($plex_webhooks_json['Metadata']['titleSort'])){
             $titre=$plex_webhooks_json['Metadata']['titleSort'];
         }
         else{
             $titre=$plex_webhooks_json['Metadata']['title'];
         }
         $EEDOMUS_URL = 'https://api.eedomus.com/set?action=periph.value&periph_id=' . $LAST_MOVIE_PLAY_SALON_ID . '&value=' . urlencode ($titre) . '&api_user=' . $EEDOMUS_API_USER . '&api_secret=' . $EEDOMUS_API_PASSWORD;
         $is_ok = file_get_contents($EEDOMUS_URL);
      }
      if ($plex_webhooks_json['Metadata']['librarySectionType'] == 'show') {
         if(isset($plex_webhooks_json['Metadata']['titleSort'])){
             $titre=$plex_webhooks_json['Metadata']['titleSort'];
         }
         else{
             $titre=$plex_webhooks_json['Metadata']['title'];
         }
         $EEDOMUS_URL = 'https://api.eedomus.com/set?action=periph.value&periph_id=' . $LAST_MOVIE_PLAY_SALON_ID . '&value=' . urlencode ($plex_webhooks_json['Metadata']['grandparentTitle'].' - '.$titre) . '&api_user=' . $EEDOMUS_API_USER . '&api_secret=' . $EEDOMUS_API_PASSWORD;
         $is_ok = file_get_contents($EEDOMUS_URL);
      }
   }
   if($Value_plex_action == 'Salon_Stop') {
      $EEDOMUS_URL = 'https://api.eedomus.com/set?action=periph.value&periph_id=' . $LAST_MOVIE_PLAY_SALON_ID . '&value=Aucune+lecture+en+cours&api_user=' . $EEDOMUS_API_USER . '&api_secret=' . $EEDOMUS_API_PASSWORD;
      $is_ok = file_get_contents($EEDOMUS_URL);
   }
}

// on verifie si le lecteur correspond au chromecast Home Cinema
if ($plex_webhooks_json['Player']['uuid'] == $CHROMECAST_HOME_CINEMA_UUID) {
   if ($plex_webhooks_json['event'] == 'media.play') {
      $Value_plex_action = 'HC_Play';
   }elseif ($plex_webhooks_json['event'] == 'media.pause') {
      $Value_plex_action = 'HC_Pause';
   }elseif ($plex_webhooks_json['event'] == 'media.resume'){
      $Value_plex_action = 'HC_Resume';
   }elseif ($plex_webhooks_json['event'] == 'media.stop'){
      $Value_plex_action = 'HC_Stop';
   }else {
      $Value_plex_action = 'RAS_HC';
   }

   //on envoi a l api eedomus le declenchement de la scene correspondante
   $EEDOMUS_URL = 'https://api.eedomus.com/set?action=periph.value&periph_id=' . $EEDOMUS_PLEX_SCENE_ID . '&value=' . $Value_plex_action . '&api_user=' . $EEDOMUS_API_USER . '&api_secret=' . $EEDOMUS_API_PASSWORD;
   $is_ok = file_get_contents($EEDOMUS_URL);

   if ($Value_plex_action == 'HC_Play') {
      if ($plex_webhooks_json['Metadata']['librarySectionType'] == 'movie') {
         if(isset($plex_webhooks_json['Metadata']['titleSort'])){
             $titre=$plex_webhooks_json['Metadata']['titleSort'];
         }
         else{
             $titre=$plex_webhooks_json['Metadata']['title'];
         }
         $EEDOMUS_URL = 'https://api.eedomus.com/set?action=periph.value&periph_id=' . $LAST_MOVIE_PLAY_HC_ID . '&value=' . urlencode ($titre) . '&api_user=' . $EEDOMUS_API_USER . '&api_secret=' . $EEDOMUS_API_PASSWORD;
         $is_ok = file_get_contents($EEDOMUS_URL);
      }
      if ($plex_webhooks_json['Metadata']['librarySectionType'] == 'show') {
         if(isset($plex_webhooks_json['Metadata']['titleSort'])){
             $titre=$plex_webhooks_json['Metadata']['titleSort'];
         }
         else{
             $titre=$plex_webhooks_json['Metadata']['title'];
         }
         $EEDOMUS_URL = 'https://api.eedomus.com/set?action=periph.value&periph_id=' . $LAST_MOVIE_PLAY_HC_ID . '&value=' . urlencode ($plex_webhooks_json['Metadata']['grandparentTitle'].' - '.$titre) . '&api_user=' . $EEDOMUS_API_USER . '&api_secret=' . $EEDOMUS_API_PASSWORD;
         $is_ok = file_get_contents($EEDOMUS_URL);
      }
   }

   if($Value_plex_action == 'HC_Stop') {
      $EEDOMUS_URL = 'https://api.eedomus.com/set?action=periph.value&periph_id=' . $LAST_MOVIE_PLAY_HC_ID . '&value=Aucune+lecture+en+cours&api_user=' . $EEDOMUS_API_USER . '&api_secret=' . $EEDOMUS_API_PASSWORD;
      $is_ok = file_get_contents($EEDOMUS_URL);
   }

}
?>
killpilot
 
Messages : 171
Inscription : 03 Jan 2017

Re: [PLEX] faire parler plex et la eedomus

Messagepar NicoLeOca » 20 Jan 2018 13:57

Salut!
Beau travail!
C'est vraiment dommage que ça ne puisse pas être hébergé sur l'eedomus en effet.
et la configuration reste complexe.
tu as fait le choix d'intégrer des règles dans le script plutot que d'avoir une programmation dans l'eedomus. pourquoi dont?
NicoLeOca
 
Messages : 27
Inscription : 13 Mars 2014

Re: [PLEX] faire parler plex et la eedomus

Messagepar killpilot » 22 Jan 2018 16:38

NicoLeOca a écrit:Salut!
Beau travail!
C'est vraiment dommage que ça ne puisse pas être hébergé sur l'eedomus en effet.
et la configuration reste complexe.
tu as fait le choix d'intégrer des règles dans le script plutot que d'avoir une programmation dans l'eedomus. pourquoi dont?


salut à toi,

bah le soucis de ne pas pouvoir l'héberger sur l'eedomus est que lorsque qu'une personne a plusieurs serveurs plex comme moi, avec un panache de pc perso, de NAS et de serveur dédié hébergés en datacenter, et bien à moins que tout ces serveur puisse avoir accès à la eedomus... c'est pas possible...

en effet chaque serveur qui va effectuer une action enverra le webhook à l'adresse spécifié (si on met la eedomus) pour le/les serveur sur le même réseau que la eedomus ça va marcher... mais pour les autres ça ne marchera pas... à moins de publier le port 80( HTTP) de la eedomus sur internet et franchement je pense que c'est totalement à éviter.

à part ce soucis d'accessibilité tout pourrai fonctionner sur la eedomus et cela nous économiserai d'ailleurs tout le travail qui consiste à fabriquer les URL pour appeler l'API eedomus. après... j'ai peut être pas pensé a une solution qui pourrai nous permettre d'heberger cela sur la eedomus, si vous avez des idées je suis preneur.

concernant les règles faites dans le scripts directement.comment voudrais tu les faire sur l'eedomus ? je ne comprend pas bien... Ta réflexion était plutôt du type, on envoie toutes les infos (IP_Client, titre, etc...) à la eedomus via des états virtuel, et au changement d'état déclencher une règle qui lancerai des actions c'est ça, ne laissant au script php que l'action de récupérer toutes les infos et de les transmettre à la eedomus pour traitement ? ca devrai marcher... MAIS... niveau temps de reaction je ne sais pas si on serai opti, en effet, la le script recoit toutes les infos, les traites rapidement et declenche direct l'action.

si on envoit les infos à la eedomus, exemple ip_client, etc.. il va falloir attendre l'api transmette à la box, que la regle se declenchant au changement d'etat se declenche qu'elle fasse les controles de valeur, etc.. pour au final lancer l'action.. ca rajoute une etape... ca marcherai mais je pense que ca serai moins reactif (sans certitude j'ai pas essayé :P ), mais encore une fois, je suis pas developpeur, et mon algo/methode est peut etre pas le meilleur, je suis ouvert à toute discussion :D
killpilot
 
Messages : 171
Inscription : 03 Jan 2017

Suivant

Retour vers Scripts & Périphériques du store

Qui est en ligne ?

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