L'histoire
Tout a commencé en août 2014 lorsque Free a mis à jour le firmware de sa Freebox et a supprimé l'API HTTP de télécommande réseau (cette API étant obsolète depuis 2012). Malheureusement, la plupart des télécommandes existantes utilisent l'API HTTP qui a l'avantage d'être beaucoup plus simple à mettre en œuvre.
Je décide à ce moment là d'implémenter le protocole en Python en me basant fortement sur le code source fourni par Free en C. J'y passe une journée, je commence à pouvoir communiquer avec la freebox mais je n'envoie pas encore de données utiles. Finalement je m'arrête là car je pars en vacances, sans internet, ni même ordinateur. Et le jour de mon départ j'apprends que Free a fait marche arrière et a réactivé son ancienne API. Autant dire qu'à mon retour je n'y ai pas retouché…
La semaine dernière je tombe par hasard sur un article de blog d'un type (Frozax) qui a forké mon code sur Github pour lui permettre de contrôler sa Freebox depuis… Minecraft ! Je vous laisse lire l'article ici : http://www.frozax.com/blog/2015/04/commander-sa-freebox-dans-minecraft-inutile-donc-indispensable/ . Alors que je m'étais occupé des couches basses de communication, Frozax a ajouté l'envoie des codes des touches.
J'ai donc décidé de me replonger un peu dans le projet et d'en parler sur LinuxFr au cas où certains voudraient à leur tour s'en servir pour faire un truc cool avec.
remotefreebox : module Python
remotefreebox est un module Python3 qui permet de faire télécommande réseau pour Freebox v6. Par exemple, cela permet de changer de chaîne, de monter le volume ou encore allumer/éteindre la TV.
En pratique, son utilisation est très simple :
from remotefreebox import FreeboxController
fbx = FreeboxController()
fbx.press("Chan+")
Pour l'installer, il suffit de taper :
pip3 install remotefreebox
Le code source est ici : https://github.com/MaximeCheramy/remotefreebox et la liste des commandes disponible se trouve dans ce fichier : https://github.com/MaximeCheramy/remotefreebox/blob/master/remotefreebox/fbx_descriptor.py
C'est fonctionnel mais c'est améliorable. Du coup, n'hésitez pas à forker, la première fois, cela a bien marché :)
remotefreebox-gui : simple télécommande
Cet après-midi, j'ai construit ma propre télécommande en Python + PyQt. La code ne fait que 50 lignes, le gros du travail étant de l'interface fait avec Qt Designer.
Voici à quoi cela ressemble (sans grande originalité) :
Le code se trouve ici : https://github.com/MaximeCheramy/remotefreebox-gui
Cette télécommande est très basique et ne fait pas encore le poids face à greemote par exemple (pas de liste de chaînes ni guide des programmes). Mais s'il y a des gens motivés pour en faire quelque chose de bien, lancez-vous. Je filerai volontiers un petit coup de main.
# Documentation API
Posté par Ryzz . Évalué à 3.
C’est super intéressant ce que tu as fait!
Justement, en parlant de liste des chaînes, apparemment, il y a une API REST, mais elle n’est pas documentée. Est-ce qu’on peut «découvrir» une API REST ?
[^] # Re: Documentation API
Posté par Maxime (site web personnel) . Évalué à 4.
Intéressant mais en regardant la page http://dev.freebox.fr/sdk/os/ je ne vois pas quelle commande envoyer pour récupérer la liste des chaînes. Si quelqu'un peut me montrer une page de doc m'expliquant comment faire, je me lance le week-end prochain.
[^] # Re: Documentation API
Posté par Ryzz . Évalué à 6.
C’est justement ça le truc: il n’y a pas de documentation !
En fouillant bien, on trouve des indices:
http://dev.freebox.fr/bugs/task/15578
http://dev.freebox.fr/bugs/task/14946
Donc pour résumer, tu peux trouver la liste des chaînes avec leurs noms avec la requête:
http://mafreebox.freebox.fr/api/v3/tv/channels
Dans cette liste, tu récupères l’uuid-webtv et avec ça, tu cherches le numéro de la chaîne avec la requête http://mafreebox.freebox.fr/api/v3/tv/bouquets/freeboxtv/channels…
C’est complètement con mais si leur API n’est pas figée, ça peut s’améliorer. Par contre, je n’ai rien trouvé pour récupérer ne serait-ce que le nom du programme en cours. Je ne comprends pas pourquoi l’API de la partie TV n’a pas été développée en premier, il me semble que c’est celle qui a le plus de potentiel pour des contributions extérieurs, mais bon, ils font ce qu’ils veulent…
[^] # Re: Documentation API
Posté par Maxime (site web personnel) . Évalué à 3.
C'est déjà un début… J'arrive effectivement à lister les bouquets et à afficher les chaînes d'un bouquet : https://gist.github.com/MaximeCheramy/55512e937f114b44281f
Je pourrais donc au moins faire une liste des chaînes avec une combo pour choisir le bouquet (mais ce serait bien de pouvoir récupérer le bouquet courant)
[^] # Re: Documentation API
Posté par Maxime (site web personnel) . Évalué à 2.
Et visiblement pour avoir le programme TV, il suffit d'aller sur http://mafreebox.freebox.fr/api/v3/tv/epg/highlights/uuid-webtv-612/1452024000 avec uuid-webtv-612 l'id de la chaîne et 1452024000 la date courante. Rien de bien compliqué donc.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.