Page 1 sur 3

Idée pour le dev d'un nouveau plugin - Emulateur de ROKU

Publié : 30 déc. 2018, 17:50
par nordix
J'avais posté ce message dans le forum Multimédia avant de m'aperçevoir qu'il existait un forum spécifiquement pour cela. Voici mon message original donc
Je viens proposer à la communauté de dev de Jeedom de plancher sur un un emulateur de Roku comme celui que Home Assistant propose:

https://community.home-assistant.io/t/e ... mony/21491

Cet émulateur étant vu et intégéré par les télécommandes multimédia qui sont capables de commander un Roku via son API en IP, telle que la Harmony HUB ou Premium.

Le gros avantage est que maintenanant avec un tel plugin, la télécommande Harmony devient une vraie télécommande de domotique en même temps, permettant de commander n'importe quel module.
Le plugin agirait dans ce cas comme un proxy entre la télécommande Harmony et les différents modules gérés par Jeedom. On pourrait associer tous les boutons du Roku émulé de la télécommande, vus comme des évnements, avec des commandes ou des scénarios; Bref une super intégration d'une télécommande pour tout faire, lancer un film sur Netflix par exemple et tamiser les lumières par la suite.

La Harmony Hub effectivement intrègre quelques objets domotiques comme la Hue, mais celle se limite à des scénarios HUE seulement et ne propose que 2 boutons pour cela.
Je suis persuadé que les possesseurs de télécommandes Harmony comme moi et ils sont nombreux, seraient fortement interréssés par un tel plugin.
Et pour commencer, une grosse partie du dev est faite pour l'émulateur, puisque celui-ci a été dévelopé sous forme d'API:

https://gitlab.com/mindig.marton/emulated_roku

Bref, ce serait un gros plus pour la plateforme Jeedom et ses multiples capacités d'intégration déjà existantes.

Re: Idée pour le dev d'un nouveau plugin - Emulateur de ROKU

Publié : 30 déc. 2018, 18:48
par nordix
Entre temps, donc entre hier et aujourd'hui, j'ai développé un semblant d'intégration sous forme de script que l'on peut lancer comme un daemon au besoin. Voici les étapes pour cela, en espérant qu'un dev de la communauté s'y interresse et puisse l'intégrer comme plugin.

Voici donc mon Tuto, le tout fonctionne Nickel en passant:

Requis:

- Python 3.5 minimum

Procédure:

0- Créer un objet virtuel via le plugin virtuel avec une seule commande de type Info/Autre. Notez la valeur de l'ID de la commande.
Screenshot 2018-12-30 at 12.05.54.png
Screenshot 2018-12-30 at 12.05.54.png (56.52 Kio) Consulté 4134 fois
1- Installer l'API à la version 0.1.4, les versions ultérieures sont dans un mode que je n'arrive pas à intégrer:
pip3 install 'emulated-roku==0.1.4'

2- Installer les modules requis:
pip3 install urllib.request asyncio

3- Créer ce script (roku.py par exemple) dans un répertoire accessible à l'usager www-data si vous voulez l'executer comme daemon, sinon n'importe quel autre répertoire:

Remplacer les valeurs xx.xx.xx.xx et par l'IP de votre Jeedom, la valeur de aaabbbcccddd par la clé API de votre box et zzzzz avec la valeur de l'ID du virtuel crée au début. Vous pouvez aussi mettre le script en mode débug à la ligne 11 comme ceci: logging.basicConfig(level=logging.DEBUG) le temps de tester.

Code : Tout sélectionner

#!/usr/bin/python3
"""Example script for using the Emulated Roku api."""

if __name__ == "__main__":
    import socket
    import asyncio
    import logging
    import emulated_roku
    import os
    import urllib.request
    
    logging.basicConfig(level=logging.INFO)

    loop = asyncio.get_event_loop()

    servers = []

    DEFAULT_HOST_IP =  "xx.xx.xx.xx"
    DEFAULT_LISTEN_PORTS = "8060"
    JEEDOM_URL = "http://xx.xx.xx.xx/core/api/jeeApi.php?apikey=aaabbbbccccddd&type=virtual&id=zzzzz&value="
    
    DEFAULT_UPNP_BIND_MULTICAST = True

    class SENDRokuCommandHandler(emulated_roku.RokuCommandHandler):
        """Emulated Roku command handler."""
        def send(self, event, usn, message):
            urllib.request.urlopen(JEEDOM_URL + key)

        def on_keydown(self, roku_usn, key):
            urllib.request.urlopen(JEEDOM_URL + key)

        def on_keyup(self, roku_usn, key):
            urllib.request.urlopen(JEEDOM_URL + key)

        def on_keypress(self, roku_usn, key):
            print(roku_usn)
            urllib.request.urlopen(JEEDOM_URL + key)

        def launch(self, roku_usn, app_id):
            urllib.request.urlopen(JEEDOM_URL + app_id)


    @asyncio.coroutine
    def init(loop):
        handler = SENDRokuCommandHandler()
        discovery_endpoint, roku_api_endpoint = emulated_roku.make_roku_api(
            loop=loop,
            handler=handler,
            host_ip=DEFAULT_HOST_IP,
            listen_port=DEFAULT_LISTEN_PORTS,
            advertise_ip=DEFAULT_HOST_IP,
            advertise_port=DEFAULT_LISTEN_PORTS,
            bind_multicast=DEFAULT_UPNP_BIND_MULTICAST) 
            
        discovery_transport, _ = yield from discovery_endpoint
        api_server = yield from roku_api_endpoint

        servers.append(discovery_transport)
        servers.append(api_server)

    loop.run_until_complete(init(loop))

    loop.run_forever()
4- Ajouter un attribut executable via chmod+x roku.py

5- lancer le script et démmarrez ensuite l'application Harmony sur votre Android ou Iphone.

6- Ajoutez un dispositif Multimédia de type Roku modèle Roku 4. L'application devrait le trouver facilement.

7- Créer une activité Harmony avec comme seul dispositif, le Roku précédemment ajouté. Cette étape est optionnelle et n'est nécessaire que si vous avez comme moi une télécommande de type Companion qui ne peut executer que des commandes via une activité.

8 Créer finalement un scénario dans Jeedom de type provoqué avec la commande du virtuel crée au début comme déclencheur et qui execute des commande selon la valeur du bouton pressé sur la Harmony:
Screenshot 2018-12-30 at 12.34.33.png
Screenshot 2018-12-30 at 12.34.33.png (117 Kio) Consulté 4134 fois
Les valeurs possibles recupérées via le virtuel et pouvant êytre utilisées dans le scénario sont (selon la télécommande):

Code : Tout sélectionner

KEY_HOME = 'Home'
    KEY_REV = 'Rev'
    KEY_FWD = 'Fwd'
    KEY_PLAY = 'Play'
    KEY_SELECT = 'Select'
    KEY_LEFT = 'Left'
    KEY_RIGHT = 'Right'
    KEY_DOWN = 'Down'
    KEY_UP = 'Up'
    KEY_BACK = 'Back'
    KEY_INSTANTREPLAY = 'InstantReplay'
    KEY_INFO = 'Info'
    KEY_BACKSPACE = 'Backspace'
    KEY_SEARCH = 'Search'
    KEY_ENTER = 'Enter'
    KEY_FINDREMOTE = 'FindRemote'
    KEY_VOLUMEDOWN = 'VolumeDown'
    KEY_VOLUMEMUTE = 'VolumeMute'
    KEY_VOLUMEUP = 'VolumeUp'
    KEY_POWEROFF = 'PowerOff'
    KEY_CHANNELUP = 'ChannelUp'
    KEY_CHANNELDOWN = 'ChannelDown'
    KEY_INPUTTUNER = 'InputTuner'
    KEY_INPUTHDMI1 = 'InputHDMI1'
    KEY_INPUTHDMI2 = 'InputHDMI2'
    KEY_INPUTHDMI3 = 'InputHDMI3'
    KEY_INPUTHDMI4 = 'InputHDMI4'
    KEY_INPUTAV1 = 'InputAV1'

Certe ce n'est pas très optimal comme intégration et pour cette raison je pense qu'un plugin serait mieux adapté. Par exemple au lieu de passer par un scénario, on pourrait directement via un plugin contenant toutes les commandes possibles, executer des commandes via l'option native dans Jeedom ou déclencher d'autres scénarios.

En attendant, certains je crois trouveront une utilité à cette petite intégration.

Re: Idée pour le dev d'un nouveau plugin - Emulateur de ROKU

Publié : 01 janv. 2019, 21:43
par lunarok
Hello,

J'ai un plugin en beta sur le market a testé.
Les commandes sont mappées comme des infos binaires qui passent à 1 quand activées.
Mais de base, elles permettent de saisir des actions et scénarios en configuration qui sont éxécutés directement.

Re: Idée pour le dev d'un nouveau plugin - Emulateur de ROKU

Publié : 05 janv. 2019, 12:20
par Idaho947
Bonjour Lunarock,

Je souhaiterais testé ton plug-in. J'ai juste du mal a comprendre comment ma télécommande Harmony Elite peut intéragir avec jeedom une fois le module installé ?

Re: Idée pour le dev d'un nouveau plugin - Emulateur de ROKU

Publié : 05 janv. 2019, 13:28
par lunarok
Depuis ton harmony tu dois pouvoir lancer un scan a la recherche d'équipements compatibles. Il va trouver un Roku sur l'iPhone de jeedom

Re: Idée pour le dev d'un nouveau plugin - Emulateur de ROKU

Publié : 05 janv. 2019, 14:24
par Idaho947
Ok je vois de quoi tu parle. je tente ça merci!

Re: Idée pour le dev d'un nouveau plugin - Emulateur de ROKU

Publié : 06 janv. 2019, 11:09
par Idaho947
Ca fonctionne nickel. Par contre pourquoi je ne vois pas les commande Power on, sleep et certaine autre dans mon objet. Car elle n'ont pas de commande API ?

Re: Idée pour le dev d'un nouveau plugin - Emulateur de ROKU

Publié : 06 janv. 2019, 11:44
par lunarok
Oui c'est que c'est pas dans l'API. D'ailleurs ces boutons je les vois pas sur robyte (l'appli télécommande que j'utilise pour tester, la Smart remote ne trouvant rien elle)

Re: Idée pour le dev d'un nouveau plugin - Emulateur de ROKU

Publié : 06 janv. 2019, 12:00
par Idaho947
Ok. en tout cas merci pour le boulot !

Re: Idée pour le dev d'un nouveau plugin - Emulateur de ROKU

Publié : 07 janv. 2019, 13:43
par nordix
@Lunarok, merci pour le taf! Je m'absente 5 jours du topic et une révolution a eu lieu :D

Bref je vais pouvoir tester, peux-tu m'envvoyer un lien pour télécharger ton plugin?

Merci

Re: Idée pour le dev d'un nouveau plugin - Emulateur de ROKU

Publié : 07 janv. 2019, 13:48
par nordix
Pour le commandes disponibles, seules celles supportée par le roku existent sur Harmony. Je ne pense pas exemple que la commande Power ou sleep existe sur Roku par exemple. Ce sont des fonctions qui ne sont pas supportées par le matériel et donc inéxistantes sur Harmony.
Par contre si vous n'avaez pas de Roku physiquement connu du hub, il sera possible de mapper des commandes liées à des applications. Il y a 10 applications virtuelles dans l'API. Bref assez de commandes pour remplir les boutons de la télécommande ou presque.

Re: Idée pour le dev d'un nouveau plugin - Emulateur de ROKU

Publié : 10 janv. 2019, 03:46
par nordix
Voilà c'est testé et ça fonctionne Nickel, les commandes binaires sur les appels sont parfaites pour ce type de besoin,

Merci encore pour le boulot!

Re: Idée pour le dev d'un nouveau plugin - Emulateur de ROKU

Publié : 16 janv. 2019, 22:38
par jackasscouille
salut ton plugin fonctionne t' il sur rpi3 merci?

Re: Idée pour le dev d'un nouveau plugin - Emulateur de ROKU

Publié : 16 janv. 2019, 23:00
par lunarok
Pas de raison qu'il fonctionne moins sur Pi que sur autre chose

Re: Idée pour le dev d'un nouveau plugin - Emulateur de ROKU

Publié : 17 janv. 2019, 20:49
par jeromebri
Bonjour. Je viens de voir que le plugin est dispo sur le market.
Par contre je ne visualise pas du coup à quoi ça sert...
En gros, un Roku c'est comme une box Android, on installé des applis dessus (Netflix, Prime, Plex, YouTube...). Et on l'a branché sur la TV et on regarde.
Là, le plugin sur Jeedom il va servir à quoi ? Il faut un Roku et il va le contrôler ?
Il faut pas de Roku? Dans ce cas là que peut on faire avec le plugin ?
J'ai regardé la documentation, mais ça ne me parle pas...
Merci

Re: Idée pour le dev d'un nouveau plugin - Emulateur de ROKU

Publié : 17 janv. 2019, 22:17
par lunarok
En gros : tu appuies sur lecture et bien tu peux déclencher tout ce que jeedom sait faire

Re: Idée pour le dev d'un nouveau plugin - Emulateur de ROKU

Publié : 18 janv. 2019, 00:08
par jackasscouille
en gros si j'ai tout compris pour controler jeedom avec une harmony elite, il n'y a pas d'autres solutions???

Re: Idée pour le dev d'un nouveau plugin - Emulateur de ROKU

Publié : 18 janv. 2019, 12:20
par Idaho947
Si tu a un périphérique qui transfère les commande infrarouge à jeedom. C'est du enocean.

Re: Idée pour le dev d'un nouveau plugin - Emulateur de ROKU

Publié : 18 janv. 2019, 15:58
par jeromebri
Ok. Donc le plugin permet de contrôler les actions de Jeedom avec une télécommande Harmony et un Hub.
Du coup rien à voir avec les clefs de streaming Roku.
Et si je prends le plugin, suis obligé de faire la dernière mise à jour du plugin Harmony car je ne l'ai pas fait pour éviter les soucis rencontrés dernièrement.
Merci

Re: Idée pour le dev d'un nouveau plugin - Emulateur de ROKU

Publié : 18 janv. 2019, 16:33
par lunarok
Non les deux ne sont pas liés. Pas de dépendances.
Moi je me sers du plugin avec une télécommande Android pour Roku par exemple. J'ai pas de harmony (mais j'y songe)