Modérateurs: Staff Installations, Staff Juridique • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

Tout l'univers de la domotique, du pilotage et des télépcommandes, du multiroom, du stockage et réseau

[PLEX] plex et eedomus avec commande materiel HC

Message » 25 Aoû 2017 14:37

Edit : j'ai repris l'article que j'ai fait sur le forum eedomus,

http://forum.eedomus.com/viewtopic.php? ... 772#p52772

Mais il est a complété, surement bon nombre d'entre vous me poserons des questions que ne me pose pas coté eedomus et je le conçois, je vais donc compléter cet article dans les prochains jours.


Bonjour à tous,

Je me lance donc pour ceux que ça intéresserait dans un petit tuto sur comment lancer des actions sur la eedomus en fonction des actions effectués sur votre plex.
Et également la commande des éléments de votre home cinéma (vidéo projecteur, écran, ampli, lecteur BR, etc.. )

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 certains d'entre vous veulent apporter la pierre à l'édifice ça 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écessaire 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
référer vous à la page 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érentes actions.

Je ne détaillerai 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 création de la scène dans l'eedomus et sa configuration
II) contrôle des appareils HC
III) décrire la configuration de ceci dans plexpy
IV) Expliqué le script pour si vous souhaitez le modifier

Le script que je vous livre ici est fonctionnel, mais c'est une ébauche, 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 Scène, et comme rôle j'ai mis éclairage, mais vous pouvez adapter.
Image

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

Je vous laisse définir les actions à associer pour chacune des actions.
Pour ma part j'effectue des commandes sur mes éclairages en baissant, éteignant ou montant la luminosité.

N’oublier pas de noter l'ID de votre scène pour le contrôle par l'API qui se trouve ici :

Image

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

II) contrôle des appareils HC

Concernant mon matériel j'ai :
- un VP Sony HW45ES
- un écran Lumene showplace 270c avec commande infrarouge et radio (protocole propriétaire sinon c'est pas drôle)
- un ampli Denon 1909
- un lecteur Blu-ray Sony

Pour effectuer la commande j'ai utilisé un réseau wifi, un orvibo (unique infra rouge, mais nous pouvons maintenant utilise le broadlink all in one pro qui fait infrarouge et RF 433), et une télécommande de ce type :
Image

le but est donc de créer des scènes pour automatiser tout ca.

On va voir maintenant la configuration de notre fameuse commande Infra Rouge.
Pour ma part j'utilise un orvibo all in one (pas la version pro, mon module ne fait que de l'infra rouge, pas de RF433, mais depuis peu la team eedomus à intégrer aux périphériques compatibles le orvibo allone pro qui a la même tête, mais fait en plus RF433.

Bref (je pars du principe que votre module est déjà connecté à votre wifi et prêt à faire la configuration) on va donc créer un nouveau périphérique dans l'eedomus, pour ce faire allez dans "configuration" en haut à droite, puis cliquer sur le gros bouton "Ajouter ou supprimer un périphérique", dans l'écran suivant on va sélectionner "Ajouter un autre type de périphérique"

et dans la list sélectionner Orvibo AllOne,
Image

Entrer votre nom de périphérique ici pour moi "Contrôle home cinéma", l'adresse IP de celui-ci sur votre réseau (pour la trouver vous pouvez utiliser l'interface d'administration de votre box ) et son code unique... ça donne a peut près ca :
Image

Le principe de ce périphérique de pouvoir apprendre de vos télécommande les signaux infrarouge émit et pouvoir les reproduire à volonté, j'ai donc créé plusieurs valeur, une par bouton de télécommande, par exemple bouton Monté pour l'écran, bouton descendre, Bouton pour sélectionner la source de l'ampli et donc l'allumer sur la bonne source, le bouton pour allumer le vidéo projecteur (et aussi l'éteindre par deux appuie successif), etc.. etc...
Image

Ici on va donc faire ajouter, on copie l'url (http://localhost/script/?exec=orvibo.php&ORVIBO_IP=[VAR1]&ORVIBO_MAC=[VAR2]&button_id=[RAW_VALUE]&action=send) a chaque nouvelle valeur qu'on va créer et après on va appuyer sur "test" en bas, on effectue la séquence d'apprentissage, et après c'est partie.... On recommence à chaque touche que l'on souhaite enregistrer.

Et deuxième étape, la création des macros...
Image

On va donc créer ici une macro par élément à commander, par exemple si je veux regarder un film sur ma platine, j'ai créé une macro démarrage Blu-ray qui va :
D’abord allumer le vidéo projecteur
Après descendre l'écran pendant que le VP chauffe
qui va allumer l'ampli en sélectionnant la source Blu-ray
et enfin j'allume la platine Blu-ray

Vous voyez qu'on peut aussi déterminer des temps de pause entre chaque action, à vous de voir comment vous voulez séquence votre macro.

Deuxième étape on va créer une scène qui s'appelle "préparation salle home cinéma"
Image

Après on va y associer les actions :
Image
Bon alors l'action Alarme maison général c'est un bug visuel... pour chaque composant correspond une macro spécifique, et j'ai rajouté en plus une macro pour ma caméra de surveillance qui passait du mode nuit à jour à chaque changement de luminosité et qui faisait CLAC CLAC à chaque fois... c'etait chiant du coup j'ai fait une macro avec l'API foscam qui désactiver la LED infrarouge de nuit et la réactive quand je ferme la salle.

Ici on va créer une valeur par mode désiré, il suffit de cliquer sur ajouter en bas, et dans la colonne "actions associées" on va sélectionner la macro associée pour chaque état.

Et enfin on va créer les règles de déclenchements pour lier tout ça à la télécommande
Image

On va donc créer une règle par touche sur la télécommande, une règle ressemblera à ca :
Image
En gros comme critère de déclenchement on aura l'appui d'un bouton de la télécommande du HC, et comme action on déclenche une action qu'on vient de définir juste au-dessus.



Et voilà à ce stade vous avez tout ce dont vous avez besoin pour contrôler votre home cinéma... on gère les appareils, la lumière, on est vraiment pas mal !!!

III) 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 ça, j'ai décidé de faire le script en python, comme il est déjà installé pour plexpy, rien à rajouter.

Pour ma part j'ai donc mis ce script dans ma Dropbox, comme ça quand je travaille dessus de mon mac ça 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 sélectionner Notification agent
Image

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 sélectionner 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 fenêtre suivante apparaitra, choisissez les actions pour lesquels vous souhaitez que vos notifications soient envoyées, 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 catégorie 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 récupérer ce qu'il lui faut pour faire ce qu'il a à faire, vous pouvez bien sur 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 redémarrage, et voilà vous êtes pas mal, cette dernier option permet de rendez la détection des actions presque instantané, alors qu'en temps normal vous êtes obligez d'attendre que l'évènement soit détecté, avec une vérif. toutes les 30-50s ce qui peut vite être long.....

Image

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

IV) le script

Ce script est vraiment sans prétention, il y a surement des manières beaucoup plus élégante et optimiser de le faire, j'y connais pas grand-chose en python, j'ai fait un plus simple.

On récupère les arguments dans l'ordre ou on les a donnés 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

Ça 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 ça 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 votre chromecast de salon pour faire des filtrages
CHROMECAST_HOME_CINEMA_IP = '192.168.1.YY' # mettez ici l'adresse de ip de votre 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 pour l'authentification sur l'api

l'ID de votre scène plex créé sur l'eedomus avec les états
l'id des lampes à contrôler, moi j'ai deux salles, salon et home cinéma, donc j'ai 2 ID, pour l'instant il ne me serve a rien mais je pense les utiliser pour faire des contrôles avant, genre si c'est déjà allumé on fait rien, enfin en gros je pense utiliser leur état 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'après-midi ça sert à rien d'allumer la lumière, on va donc récupérer 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 lis 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 déclencher les bonnes actions en fonction de.

Si vous avez des question je détaillerai bien sûr, je vais continuer à mettre à jour le script, et je posterai les mises à jours ici, et certains d'entre vous sont intéressé je tenterai de répondre à vos questions avec mes maigres connaissance ;)



Changelog :
V0.1 : création du topic
V0.2 : MAJ du topic avec mise à jours du script, et rajout du prérequis concernant le module requests
Dernière édition par killpilot le 28 Aoû 2017 11:42, édité 6 fois.
killpilot
 
Messages: 87
Inscription: 26 Mar 2009 9:28
Localisation: Triel sur Seine (78)

Annonce

Message par Google » 25 Aoû 2017 14:37

Publicite

 
Encart supprimé pour les membres HCFR

Message » 25 Aoû 2017 16:26

[RESERVE]
killpilot
 
Messages: 87
Inscription: 26 Mar 2009 9:28
Localisation: Triel sur Seine (78)

Message » 25 Aoû 2017 16:26

[RESERVE]
killpilot
 
Messages: 87
Inscription: 26 Mar 2009 9:28
Localisation: Triel sur Seine (78)

Message » 28 Aoû 2017 11:19

Maj du topic, si vous avez des questions hésitez pas, c'est surement un peu brouillon, mais comme quand on a l'habitude les choses nous paraisse toujours plus simple, donc si des choses vous paraisse obscur ou selon vous mérite d'être approfondi n'hésitez pas.
killpilot
 
Messages: 87
Inscription: 26 Mar 2009 9:28
Localisation: Triel sur Seine (78)


Retourner vers Intégration, Domotique, Stockage et Réseau