Aymkdn / assistant-freebox-cloud

Assistant Freebox in the Cloud

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Détection état de la freebox allumé/éteint

lianee opened this issue · comments

Détection état de la freebox

Bonjour,

Lorsque je lance la commande "Allume la freebox", elle semble faire la même chose que la commande "Eteins la freebox", à savoir appuyer sur la touche marche/arrêt.
En clair, si on lance "Allume..." alors que la freebox est allumée, elle s'éteint... et vice versa.

D'un autre côté, en utilisant l'application freebox officielle sur Android, si je lance le visionnage d'un chaîne, l'appli semble capable de déterminer l'état allumé/éteint de la freebox (voire aussi sa position avant de zapper, mais c'est facilement contournable en revenant à home avant de lancer une suite de commandes).

Serait-il possible que la commande "Allume..." ne fasse rien si la freebox est déjà allumée, même chose pour la commande "Eteins..."?

Avec le cloud, non ce n'est pas (facilement) faisable de déterminer l'état de la Freebox. Cela peut se faire lorsqu'on est connecté au réseau local avec des droits applicatifs sur la Freebox (comme la version non cloud de assistant-freebox), ou si on utilise un système différent pour piloter la Freebox depuis le réseau local (ce que fait l'application Android), mais le système dans le cloud que je propose ne peut pas faire ça.

Je comprends, cependant, l'application officielle freebox permet de le faire "sans être sur le réseau local"...

Je sais qu'il existe un moyen de piloter la Freebox avec un protocole spécial, mais c'est mal documenté et je n'ai jamais réussi à le mettre en place avec mes connaissances actuelles. Aussi, Free peut utiliser leurs propres ressources et fonctions qui ne sont pas forcément accessibles aux autres... Donc si tu es capable de m'expliquer comment ils font, alors je serai heureux de le mettre en place 😊

Moi j'utilise l'API HTTP qui permet de simuler l'appui sur les touches de la télécommande. Rien d'autre de sorcier.

Question pour toi : de quelle application parles tu exactement ? De celle de Free ? Je suis actuellement à l'étranger et je ne vois pas où dans l'application je peux allumer ma Freebox et zapper sur une chaîne à partir de celle-ci ?! Si tu peux me détailler comment tu y accèdes ?

Oui, je me doute que ce n'est pas simple...

L'appli donc je parle est l'appli fournie par Free (donc oui, ils ont accès à toutes les resources):
freebox compagnon
Une fois synchronisée avec la freebox, il suffit d'aller dans la partie Télévision de l'appli, sélectionner une chaîne:
2019-09-09_20-44
Puis il y a une option pour regarder sur la chaine:
2019-09-09_20-45
Notez que dans les screenshots précédents je ne suis pas en wifi

La fonction télécommande de votre solution marche très bien!!!

Je pense juste que ce serait un énorme plus si elle n'éteignait pas la freebox alors qu'elle est déjà allumée (use case: un cron qui allume la télé à heure fixe pour une émission... mais si elle est déjà allumée, malheur)

Je regarderai ça mais je doute de pouvoir faire quoi que ce soit....! Mais on ne sait jamais.

Si tu as un cron, c'est que tu as une machine qui tourne 24 sur 24 ? Donc tu peux sinon essayer https://aymkdn.github.io/assistant-plugins/?plugin=Freebox qui lui va vérifier l'état de la Freebox.

non, j'utilise un service de cron en ligne (cron-job.org) qui marche magnifiquement avec tes commandes, mais il lance les commandes en aveugle, donc pas de possibilité de tester l'état de la box, d'où ma suggestion que les commandes allumer/éteindre soient dépendantes de l'état de la box.

Alors... J'avais jamais testé l'application mobile pour faire ça, et je dois avouer que c'est top :-)

J'ai passé plusieurs heures entre hier et aujourd'hui pour essayer de comprendre comment ils font ça avec leur application... mais je n'ai pas réussi malheureusement. Tout le trafic est crypté et malgré tous mes efforts je n'ai pas pu faire de reverse engineering.

Est-ce lié à https://dev.freebox.fr/sdk/telec.html ? Mais je n'ai pas l'impression car cela implique d'être forcément connecté au réseau local, alors que là les commandes fonctionnent même en 4G. Ils utilisent peut-être un système interne pour ça ?

Suite à un message que j'ai posté sur le tracker de Free, il m'a été répondu :

l'API sera documentée dans la prochaine MAJ du Freebox Server.

Ce qui est une excellente nouvelle ! À voir ce que cela va donner donc....

Détection état de la freebox

Bonjour,

Lorsque je lance la commande "Allume la freebox", elle semble faire la même chose que la commande "Eteins la freebox", à savoir appuyer sur la touche marche/arrêt.
En clair, si on lance "Allume..." alors que la freebox est allumée, elle s'éteint... et vice versa.

D'un autre côté, en utilisant l'application freebox officielle sur Android, si je lance le visionnage d'un chaîne, l'appli semble capable de déterminer l'état allumé/éteint de la freebox (voire aussi sa position avant de zapper, mais c'est facilement contournable en revenant à home avant de lancer une suite de commandes).

Serait-il possible que la commande "Allume..." ne fasse rien si la freebox est déjà allumée, même chose pour la commande "Eteins..."?

le seul moyen que j'ai trouver pour le moment c'est de faire un script qui permet de scanner ceci et envoyer la commande vers assistant-freebox-cloud si besoin
inconvenant : nécessite un home server, nas synology, rpi, ...
ce qu'il faut scanner : http://< ip du player >:54243/device.xml
si cela retourne un code 200 : il est allumé sinon il est eteins

@Aymkdn : Apres je ne sais pas si tu peux remonté des info via assistant-freebox en utilisant ceci

Bon à savoir. On peut imaginer ouvrir un deuxième port sur la box qui permettra de vérifier l'état de celle-ci. Je ferai des tests pour voir 👍🏻

Avec Assistant Freebox pour Assistant Plugins (la version à installer chez soi), j'utilise Air Media qui permet de savoir l'état de la Freebox.

Je fais que partager ce que j'utilise dans mes lignes codes

Get player device status
GET /api/v6/player/{id_player}/api/v6/status/
Returns the current state of a player device (Player).

Example request:

GET /api/v6/player/11/api/v6/status/ HTTP/1.1
Host: mafreebox.freebox.fr
Example response:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"success": true,
"result": {
"power_state": "standby"
}
}

Le problème est le même que précédemment... Accéder à cette information reste difficile, et même plus compliquée que la solution du device.xml

Ce qui résoudrait plusieurs problèmes serait que Free communique sur son API https://dev.freebox.fr/bugs/task/28353

Bonne nouvelle : j'ai trouvé l'API utilisée par l'application Android !

Mauvaise nouvelle : ça oblige de générer un token auprès du Freebox Serveur, et également de connaitre le mot de passe de connexion à distance à la Freebox… Il va donc me falloir réfléchir à comment je peux mettre ça en place, avec les différents cas de figure, etc… tout en étant suffisamment simple pour que Monsieur et Madame Michu arrivent à l'installer ! Donc autant dire que cela risque de me prendre encore quelques mois de développement…

Excellente nouvelle en effet...
Pour la connexion, l'appli Android ne demande qu'à appuyer sur le boitier serveur, mais certainement car elle est déjà sur le même réseau... L'appli du freestore ne pourrait-elle pas s'en charger?

Monsieur et Madame Michu

non... ils n'ont pas 2 mains gauche !

en tout cas, en temps que développeur, ton programme s’intègre parfaitement au mien
courage à toi :)

Pour la connexion, l'appli Android ne demande qu'à appuyer sur le boitier serveur, mais certainement car elle est déjà sur le même réseau...

Pour pouvoir changer de chaine, l'appli me demande aussi le mot de passe que j'ai défini pour me connecter depuis l'extérieur (en tout cas c'est ce que j'ai cru comprendre). Mais c'est une option dans les paramètres de la Freebox que j'ai activée, donc c'est là qu'il faut que je teste les différentes configurations possibles et les différentes réactions !

L'appli du freestore ne pourrait-elle pas s'en charger?

Oui, ça serait en effet l'idée. Mais là encore je dois tester pour voir ce qui est possible. Le truc c'est que l'application ne marche pas chez plusieurs personnes, donc faudra que je trouve aussi un moyen pour ceux-là…

Alors… Cela fait plusieurs jours que je travaille là dessus, et je dois dire que ce n'est pas simple…

J'ai trouvé l'API qui est utilisée et qui permet de savoir si la Freebox est allumée et également de directement mettre une chaine. Cependant, il faut :

  1. enregistrer une app "LCD" sur la Freebox et l'autoriser en cliquant sur la flèche droite de son écran LCD,
  2. lui fournir des droits "Player" qui peuvent être donnés soit en fournissant le mot de passe de connexion à l'interface Freebox (utilisé une unique fois pour changer les droits), soit se connecter manuellement à l'interface et donner les droits

Sachant aussi que :

  • Je ne peux pas utiliser l'app du FreeStore pour tout car elle est reconnue comme "app Freestore" est à des pouvoirs limités
  • Je ne peux pas utiliser l'app "LCD" pour tout car je ne peux l'enregistrer que localement (donc il faudrait que je crée une app Android et iOS pour ça) et elle ne peut pas faire des redirections de port
  • Quelque soit le cas, les droits "Player" ne peuvent pas être donnés directement (il faut forcément passer par une connexion à l'interface ou fournir son password)

Donc… Ce que je pense faire :

  1. L'utilisateur va lancer l'app du FreeStore (comme aujourd'hui)
  2. L'app du FreeStore va s'occuper de la redirection de port (comme aujourd'hui)
  3. L'app du FreeStore va demander à l'utilisateur d'autoriser une application via son écran LCD
  4. Sur le site web, il sera proposé en option à l'utilisateur "d'activer des fonctions supplémentaires"
    a. S'il accepte, alors il lui sera demandé de se connecter à l'interface http://mafreebox.freebox.fr (depuis un ordinateur)
    b. D'aller dans la Gestion des Accès puis de donner un accès "Player" à l'app LCD

Au final, je pense qu'il n'y aura qu'une poignée de gens qui vont l'activer.

Pour le moment, je n'ai pas réussi à trouver plus simple comme solution !

Un petit point pour vous tenir informé (si ça vous intéresse ^^) :

  • La v3 du site arrive en début de semaine, avec principalement des nouveautés sur les étapes du guide et sur l'aide (avec par exemple détection des erreurs les plus courantes)
  • Une nouvelle application va être publiée sur le Freestore : le changement le plus notable est que l'appli va demander à l'utilisateur d'autoriser une application sur l'écran LCD du Freebox Serveur

Il s'agit d'une première étape (car pour le moment cette app existe mais n'est jamais utilisée/appelée).
J'ai déjà commencé à travailler sur une v4 qui utilisera cette application et donc la fameuse API Player.

Pour pouvoir utiliser l'application, les gens devront donc activer manuellement les droits "Player" via FreeboxOS : cette fonctionnalité avancée sera disponible en dehors du parcours classique de configuration, qui peut s'avérer déjà un peu trop technique pour le commun des mortels ! Sur le site je poserai (probablement) la question si la personne veut activer des "fonctionnalités avancées".

À noter que lorsqu'une application demande des droits à FreeboxOS, elle obtient un lot de droits par défaut qu'on ne peut pas modifier, dont la lecture des appels et des contacts… J'ai ouvert un ticket sur le tracker de Free à ce sujet et j'ai rajouté une section dans La Politique de Confidentialité… J'espère que les gens ne vont pas trop me casser les bonbons avec ça !

J'ai parlé à un développeur de Free qui m'a indiqué qu'une partie seulement de l'API Player est disponible pour la Freebox Révolution (mettre une chaine/lancer un média, voir le niveau du volume), et que le reste (contrôler un média, changer le volume) n'est disponible que pour la Delta… Pour le moment en tout cas. Peut-être que toute l'API sera un jour dispo pour la Révolution aussi ?! Je testerai à chaque nouveau firmware 🙏

Les avantages de l'activation des "fonctionnalités avancées" seront :

  • possibilité de mettre une chaine même si la TV est éteinte (juste en disant « zappe sur » sans préciser d'allumer la Freebox avant) et où qu'on soit dans l'interface
  • possibilité de lancer une radio sur la Freebox (probablement via une commande vocale du genre « zappe sur la radio NRJ »)… Je n'ai pas testé donc je ne veux pas trop m'avancer là dessus
  • de pouvoir se déplacer un peu mieux dans l'interface du Player
  • Et quand le reste de l'API sera disponible, de mieux gérer le son et mettre sur stop/pause un média

Pas vraiment une grosse révolution, mais bon !

Voilà 👍

J'ai parlé à un développeur de Free qui m'a indiqué qu'une partie seulement de l'API Player est disponible pour la Freebox Révolution

@Aymkdn : je suis en train de regarder l'API player, effectivement j'arrive a avoir le numero de la chaine
par contre je ne vois pas comment faire une relation entre le numero de la chaine et le logo ?
je ne sais pas si tu as eu des info la dessus ?

Pour vous tenir au courant : les "fonctionnalités avancées" arriveront ces prochaines semaines ! Je les ai activées chez moi déjà, conjointement avec l'intégration de la Freebox dans Google Home :) C'est donc encore en phase de tests. Pour le moment je me focalise sur la transition de IFTTT vers Google Home pour tous les utilisateurs, puis je pourrai passer à la phase d'ouverture aux "fonctions avancées" !

Du coup sans abonnement pro ifttt,
pour le moment assistant cloud ne sera plus fonctionnement tant que cette
intégration Google home natif ne sera pas en place ?

Oui. Si tu as utilisé Assistant Cloud dans les 45 derniers jours, alors tu as dû recevoir un email de ma part lundi soir à ce propos.

Google vient juste d'accepter mon service ! Donc de ce point de vue là, je suis rassuré ! J'ai quelques petits réglages à faire encore et à modifier le site pour expliquer aux gens comment migrer vers Google Home, puis ça sera bon. Je fais mon maximum pour tout boucler au plus vite, et j'ai prévu de terminer tout ça courant de la semaine prochaine : un email sera alors envoyé à tout le monde pour vous prévenir.

Je m'en sert tous les jours ! Du coup avec un abonnement iftt pro ça
marchera durant la transition... ( 2€/mois)

La promo était jusqu'au 7 octobre il me semble. Maintenant c'est 10$/mois…

Je t'envoie une bière pour t'encourager ;-)

Bien reçu ! Merci !

et si besoin je suis là pour des bêta test comme toujours.

Ça marche.

Alors, si y'en a qui veulent tester en exclusivité les "fonctionnalités avancées", vous devez :

  1. Avoir Google comme enceinte connectée
  2. Avoir configuré votre Freebox dans votre Google Home – voir l'email que j'ai envoyé y'a 2 semaines
  3. Donner les droits "Player" en suivant ces instructions : https://github.com/Aymkdn/assistant-freebox-cloud/wiki/Donner-les-droits-Player – si vous n'avez pas "Assistant Cloud App (Freebox)" dans vos applications, alors assurez vous de lancer l'application "Assistant Cloud" depuis le Freestore de votre Freebox
  4. Connectez-vous avec votre compte sur https://assistant.kodono.info/freebox/ si ce n'est pas déjà fait
  5. Ouvrez https://assistant-api.kodono.info/fbx/v6/user/check_player_api

Si vous voyez {"success":true} c'est que tout est bon. Si vous voyez une erreur, vous pouvez me la transmettre via le tchat de https://assistant.kodono.info/freebox/ (merci de ne pas le faire ici, ni en répondant à cet email) afin que je vous dise pourquoi – certains critères sont obligatoires.

Pour le moment, cela permet :

  • de savoir l'état allumé ou éteint de la Freebox (par exemple quand vous ouvrez "Freebox" dans votre Google Home),
  • si vous dites « OK Google, allume la Freebox » et qu'elle est déja allumée, alors elle ne va plus s'éteindre (et inversement),
  • de pouvoir lancer une chaine ou Netflix même quand la Freebox est éteinte (« OK Google, mets TF1 sur Freebox » … et pouf la Freebox va s'allumer sur TF1, ou « OK Google, mets Netflix ») et aussi depuis n'importe où dans les menus Freebox,
  • de régler le volume plus justement – par exemple « OK Google, volume à 40% sur Freebox » – à noter cependant que si vous êtes en CEC (avec home cinéma), le réglage du volume sera approximatif – puisqu'actuellement on peut récupérer le volume mais on ne peut pas le définir donc j'utilise des séquences de vol_dec et vol_inc.

C'est encore au stade expérimental (même si je l'utilise depuis plusieurs semaines) et d'autres fonctions verront le jour (comme de pouvoir lancer une radio sur sa Freebox… enfin en théorie ça devrait marcher même si je n'ai pas essayé encore).

N'hésitez pas à me laisser un message dans le tchat du site et je vous répondrai rapidement.

Je viens de mettre en place les fonctionnalités avancées pour tous les utilisateurs de Google : une petite popup apparait en bas de la page https://assistant.kodono.info/freebox/ si vous êtes éligible et vous devez ensuite suivre les instructions.

J'écrirai un email plus tard dans la journée pour prévenir les gens.

Dans une deuxième phase (après avoir réécrit la skill Alexa), je le mettrai dispo pour ceux qui tournent là dessus.

Je ferme donc cette issue :-)