Intégration api télévision dans Gladys


#1

Bonjour,

Actuellement chez moi j’ai trois télé, une tv pilotable via le module LG, et deux télé pilotable via le module HDMICEC, je me suis demandé si le module HDMICEC qui relie une TV a un rpi ne pouvait être pas adapté en module distant.

Suite à une conversation avec @MathieuA et @piznel, nous nous sommes dit qu’avant d’attaquer ce type de chantier, il serait plus intéréssant de ce lancer sur l’implémentation d’une api télévision (comme celle de la music) dans gladys.

Aujourd’hui nous avons fait pas mal d’avancé sur le sujet et avons créé une box avec le talent de @piznel :

Une fois l’api en place dans gladys, il suffirait juste de “brancher” les différents module lié à une tv a cette api pour interagir facilement.

Actuellement, nous controllons les différents bouton de la box à savoir :

  • Changement d’état de la tv (on/off)
  • Changement de son de la tv (volume down, mute, unmute, volume up)
  • Changement de channel de la tv (program +, program -, digit 0 à 9)
  • Récupération des sources de la TV
  • Bouton haut, bas, gauche, droite, ok et menu
  • Bouton lié au media (rewind, play, pause, stop, forward, rec)

Si vous avez le moindre avis concernant ce sujet n’hésité pas à nous le partager :stuck_out_tongue:


Problème avec le module HDMICEC
Catégories de deviceType: J'ai besoin de vous!
[Module] Télévision connectée LG WebOs3
DeviceType de type "push button"?
#2

Très bonne idée.

J’allais commencé un module Philips mais je penses attendre l’api du coup.

Ça donne quoi la box sur mobile ?


#3

Ça donne ça, @VonOx, sur IPhone 7 Plus :


#4

Jolie !

Manque juste un bouton retour et y’a tout ce qu’il faut


#5

Exact :slight_smile: !
@spenceur va se faire un plaisir de le rajouter dans le back, et je rajouterai un p’tit bouton en bas à droite du joystick (désolé pour les gauchers sur smartphone …)


#6

Très très très, mais alors très bonne idée.
Le must serait que cette box soit compatible avec le module freebox.
Cette API serait donc une interface graphique…
Je ne sais pas si ce serait possible.
Les phrases associées aux actions seront disponibles ?


#7

@VonOx, voici la version avec le boutons le bouton retour sur IPhone 7+ :


#8

En fait le postulat est plutôt à l’inverse je crois :thinking:

Je dirais que le but c’est d’unifier le traitement côté Gladys. Il faudrait donc rendre le module freebox compatible avec l’API :wink:

Perso, j’adore ce concept de service !
Dans cette direction, l’idée d’un autre membre du forum (mais dont j’ai oublié le nom :confused: ) me semblait super intéressante aussi. Créer des interfaces ou qqchose de comparable. En gros, on pourrait donner des compétences à nos devices :
isSwitch, isDimmable, hasChannels, hasSound, hasColor …
En passant par du typage ou de la composition peut-être ?
Ca permettrait de standardiser les devices, deviceTypes ainsi que la gestion de leurs states.
Et les API, services, ou IHM comme ce que vous faites, auraient un comportement générique associé avec ces compétences.
Ca rendrait sûrement le core de Gladys plus complexe, tout du moins plus fourni (je n’ai pas la moindre idée de l’impact sur le brain par ex…) mais je pense que ça simplifierait/homogénéiserait aussi l’ensemble.
En tout cas, cette gestion de la TV est vraiment prometteuse! :+1:


#9

Effectivement, j’y est pensé après avoir publié… Puis quand j’ai voulu éditer mon post, j ai vu que tu était entrain de répondre :laughing:
J avais trifouillé un peu le code du module freebox pour ajouter les fonctions non dispo sur le module d origine (ça me fait penser que la PR n est pas encore publiée par l auteur du module, j ai pas eu de news)
J’ai hâte de voir comment tout ça est géré pour essayer d adapter. (C est comme ça que j’apprends)


#10

@C3DR1K, tu as toutes les fonctions qui seront gérés par l’API dans le screenshot plus haut. Si tu penses qu’ils en manquent, dit le nous :slight_smile:


#11

Hello!

Merci d’avoir posté sur le sujet, et beau boulot :raised_hands:

Tu pourrais me détailler l’API que vous avez prévu d’implémenter ? Je parle en terme de nommage, je sais pas si vous avez déjà commencé cette partie.

Pour ce genre de fonctionnalité il va falloir ilmplémenter tout une API native abstraite de la même manière que cela a été fait pour la musique dans Gladys.

Je parle de quelque chose comme ça:

gladys.tv.turnOn()
gladys.tv.turnOff()
gladys.tv.setVolume()

?

J’ai mis “tv” mais bon on pourrait mettre “media” ou je ne sais pas, il faut clairement que ça reste générique, car ce genre d’interface peut servir à bien plus que de la TV, ça peut être de la vidéo sur chromecast, de la lecture VLC, etc… :slight_smile:


#12

Salut tout le monde et merci pour votre intérêt :slight_smile: !

Effectivement, @C3DR1K se serait plutôt à toi de faire évoluer le module en fonction du service ^^.

Concernant les phrases @C3DR1K, il sera en effet possible de piloter l’état de la télé, la chaine voulu via un nouveau parseur, augmenter et baisser le son, muter la télé et controller les média (pause, play, stop, rewind, forward)

Sinon @pierre-gilles, tu trouveras si dessous les details de l’api :

gladys.television.pressKey() //pour l'appuis des boutons left, up, right, down, ok et back
gladys.television.getSources() //Récupération des source de la tv
gladys.television.openSources() //Met à la tv la source choisie
gladys.television.openMenu() //Ouvre le menu de la tv
gladys.television.rec() //bouton d'enregistrement
gladys.television.play() //lance la lecture sur la tv
gladys.television.pause() //Met en pause la lecture sur la tv
gladys.television.rewind() //Rembobine la lecture sur la tv
gladys.television.fastForward() //Avance la lecture sur la tv
gladys.television.switchState() //Alume ou éteind la tv en fonction de son dernier état
gladys.television.getState() //Récupère l'état de la tv (on/off)
gladys.television.programPlus() //chaine + 1
gladys.television.programMinus() //chaine - 1
gladys.television.setChannel() //Met la chaine voulu sur la tv
gladys.television.volumeDown() //augmente le son de la tv
gladys.television.volumeUp() //diminue le son de la tv
gladys.television.setMuted() //Coupe le son ou le remet de la tv
gladys.television.yellowButton() //Command custom sur le bouton jaune
gladys.television.greenButton() //Command custom sur le bouton green
gladys.television.redButton() //Command custom sur le bouton red
gladys.television.blueButton() //Command custom sur le bouton blue

Alors effectivement, j’ai mis television car tout ce qu’on pouvais piloter (plex, freebox, chromecast, vlc, lgwebos, hdmicec etc) passe par la télévision :slight_smile:.

Perso je n’aime pas trop média car il est trop générique (video et musique)

Après si vraiment cela est gênant on peut le modifier :wink: .

Actuellement, je faisais mes tests tout en adaptant le module LGWEBOS.


#13

Pour la petite info comique, on est passé par de très jolie télécommande à cette télécommande tout moche de @piznel

1er essaie de box :

2eme essaie de box :

Dernier essaie de box :
unknown-2

Je me doute que votre choix partait sur la première télécommande mais @piznel nous a pas laissé le choix :confused:


#14

Je vote @piznel :grin:


#15

Pas mal l’API! Effectivement ça reste compréhensible, “television” fait sens, si on trouve pas mieux ça me va :slight_smile:

A l’intérieur ça fonctionne comme le module music l’API ? Tu as un device qui a un type particulier?


#16

alors oui et non,
un module peut installer jusqu’a 4 devicetypes ayant comme catégorie “TV” (catégorie déjà existante):

  • un device avec comme identifier Power
  • un device avec comme identifier Sound
  • un device avec comme identifier Channel
  • un device avec comme identifier Mute

Actuellement lors de mes tests j’ai utilisé le module HDMICEC pour controller ma TV dans ma chambre et le module LGWEBOS dans le salon.

Le module LGWEBOS permet d’avoir tous les devices d’utiliser et le module HDMICEC n’utilise que le device Power (pour l’instant).

Voici ce que je contrôle dans le module LG :

module.exports = {

//Api télévision
volumeUp : require('./volumeUp.js'),

volumeDown : require('./volumeDown.js'),

switchState: require('./switchState'),

pause : require('./mediaControl'),

play : require('./mediaControl'),

stop : require('./mediaControl'),

rewind : require('./mediaControl'),

fastForward : require('./mediaControl'),

setMuted : require('./setMute'),

getSources : require('./getSources'),

openSources : require('./launchApp'),

pressKey : require('./pressKey'),

setChannel : require('./openChannel'),
// fin api television

//commande suplémentaire
getAudioStatus : require('./getAudioStatus'),

launchApp : require('./launchApp'),

getAppStatus : require('./getAppStatus'),

notification : require('./notification'),

getServiceList : require('./getServiceList'),

getSoftwareInformation : require('./getSoftwareInformation'),

};

Avec le module HDMICEC pour l’instant je n’ai que ceci :

module.exports = {

 //Api télévision
 switchState: require('./switchState'),
 // fin api television

};

Lorsque l’utilisateur clique sur une commande non fournit par le module nous avons ce message dans PM2 :

television : Module lgwebos does not have function openMenu


#17

Module prometteur, j’ai hâte de l’avoir pour piloter ma Freebox :wink:


#18

Pourquoi pas “video” pour un poil plus générique ?


#19

@spenceur tu m’as achevé XD


#20

@MathieuA je sais que tu préférais la seconde box :stuck_out_tongue:
@Hamtaro parce que selon moi on peut piloté autre chose que de la video :slight_smile: