Aymkdn / assistant-freebox-cloud

Assistant Freebox in the Cloud
74 stars 14 forks source link

Piste Mini 4k / Pop #117

Closed grillead closed 2 years ago

grillead commented 3 years ago

Bonjour Aymeric, Deja félicitation pour ton super boulot, j ai eu plaisir de l utiliser longement avec mon ex revolution, ayant migrer depuis peu sur le serveur delta + pop je cherche depuis 15j une solution pour le control vocal, je viens de tester une solution a distance via adb, je peut controler la freebox via mon pc (numeros de chaine, volume, et lancement d appli netflix/prime/oqee etc..)

Je ne suis pas sur que tu puisse intégrer ce 2 box android via le cloud avec cette solution mais pence tu qu'il soit possible de le gerer via ton assistant-freebox local ? Liste des commandes adb fonctionnel sur player POP :

input keyevent KEYCODE_CHANNEL_UP input keyevent KEYCODE_CHANNEL_DOWN input keyevent KEYCODE_VOLUME_UP
input keyevent KEYCODE_VOLUME_DOWN input keyevent KEYCODE_VOLUME_MUTE input keyevent KEYCODE_1 > met la chaine 1
input keyevent KEYCODE_1 input keyevent KEYCODE_4 input keyevent KEYCODE_1 > met la chaine 141 (tres utiles pour se débarasser des enfants :) ) monkey -p com.canal.android.canal 1 => lance mycanal => com.canal.android.canal a remplacer par le nom de l appli souhaiter, netflix, oqee, prime....

pour faire l envoie des commandes il faut activé le mode dev sur la box et activé le debug usb ensuite autoriser une premiere fois le pc a envoyé les commande via un " adb connect ip_box " ensuite une fois autoriser : adb connect ip_box adb shell "commande" Tout ca gérable en 1 ligne de commande style : adb connect 192.168.0.1 | adb shell input keyevent KEYCODE_1 input keyevent KEYCODE_4 input keyevent KEYCODE_1 | adb shell exit

Merci d'avance pour ta réponse et encore bravo pour ton boulot.

Aymkdn commented 3 years ago

N'ayant pas de Pop à la maison, ça va être trop difficile de développer une telle chose....

Cependant tu pourrais créer un plugin pour https://aymkdn.github.io/assistant-plugins/ en suivant la template fournie sur https://github.com/Aymkdn/assistant-template

Ensuite il faudrait un compte pro IFTTT pour pouvoir créer plusieurs commandes vocales liées à Pushbullet.

Donc c'est réalisable mais ça va demander énormément de boulot, et étant donné que ce n'est pas faisable depuis le cloud et que je n'ai pas de Pop, faudra que tu regardes ça de ton côté....

Je suis quand même étonné que la Pop ne s'affiche pas nativement dans Google Home puisqu'elle est une Android TV et donc j'imagine que c'est compatible d'une façon ou d'une autre....

grillead commented 3 years ago

Yes je vais jeter un oeil a ton template, la pop est gérer en partie via home grâce a la fonction chromecast(on/off, volume) mais ma fonction préfère de ton plugins et le changement de chaine via son nom. Je vais essayer de regarder ce que je peut adapter, je ne suis pas dev mais tech info, j arrive a comprendre et adapter un peu de code en cherchant un peu et avec l'aide de mon amis google :) (bon en dehors de php, mysql et batch jsuis vierge).

Grande question: comment gère tu la relation nom/num de chaine ?

Aymkdn commented 3 years ago

J'utilise une base de données qui lie les divers noms des chaînes à leur numéro. Ça a été un peu fastidieux à constituer car pour chaque personne la compréhension du nom de la chaîne peut varier (principalement avec Alexa). Si besoin je peux la partager.

J'ai une TV sous Android chez moi. Si j'ai du temps, je regarderai ce qui est possible de faire.

Cela dit les dev de la Freebox Pop ont dit qu'elle sera pilotable à la voix... Mais ils n'ont pas dit quand, ni si c'était avec Google ou Alexa !

grillead commented 3 years ago

Ok c est ce que je pensais tu a dû te taper a creer toute la bdd à la main, je pensais que peut etre via l api freebox y avait moyen de faire une requête avec le nom ou d extraire la liste des chaines.

Oui j ai vu le post des dev, d ici là on sera passez à la tv holographique vu la quantité de bug de cet box android 😂😂 La révolution et top est stable après 10ans de dev la pop sera enterrée avant...

Aymkdn commented 3 years ago

peut etre via l api freebox y avait moyen de faire une requête avec le nom ou d extraire la liste des chaines.

Oui, c'est ce que j'ai fait pour avoir la base. Mais après Google et Alexa ne reconnaissent pas forcément le nom comme il est écrit ^^

grillead commented 3 years ago

Yop, bon petite avancé rapide,(mais en théorie valide 4k + pop), en gros j ai mis une vm sur le serveur delta en debian avec apache+php+adb , j ai une page php freebox.php avec fonction get , quand j envoie http://ip_de_ma_vm/freebox.php?cmd=141 ca zappe bien sur la chaine 141, il me reste à trouver une solution pour la version nominative des chaines afin de pouvoir interoger la bdd et récuprer le numeros de chaine sous forme de variable type $num 😄

Aymkdn commented 3 years ago

Bien joué 😊

grillead commented 3 years ago

Pour le moment c est pas super user friendly mais ca fonctionne, appriori y aurait un equivalent de adb fait en php, cela pourrait permettre de ce passé d une VM, et d avoir juste besoin d un serveur web ^^ je vais etudier ça car ca pourrait grandement simplifier les choses. D ailleurs a ton niveau comment se passe les requetes de ton appli via google home ? tu passe via de la requete web/html?

Aymkdn commented 3 years ago

Google Home envoie des requêtes vers mon serveur qui contiennent les commandes souhaitées (comme le changement de chaîne, un on/off, etc). Ensuite mon serveur envoie une ou plusieurs requêtes au Player avec les key qui vont bien pour compléter l'action.

L'application du Freestore que j'ai créée permet d'ouvrir un port de l'extérieur vers le player, port uniquement ouvert pour mon serveur. Ainsi mon serveur peut joindre le player.

N'hésite pas à partager tout ce que tu trouves avec moi !

grillead commented 3 years ago

Yes j y compte bien :) oui pour l appli du store j avais vu le principe justement, là moi j ai du le faire manuellement sur ma box j ai ouvert un port dirigé vers ma vm, le reste passe en local, si adb peut tourner via du php la requete pourra etre envoyé direct de l exterieur vers le player en ouvrant un port exterieur defini rediriger vers le port 5555 du player

Aymkdn commented 3 years ago

Je te laisse explorer tout ça. De mon côté, pour le moment, je me consacre à améliorer mon service (avec l'utilisation des API – https://github.com/Aymkdn/assistant-freebox-cloud/issues/70#issuecomment-626207108). Je regarderai comment faire pour une Android TV quand j'aurai plus de temps !

Je te joins 2 tables au format SQL si ça peut te servir – chaines.zip :

seb60500 commented 3 years ago

Bonjour, Ayant depuis peu également la delta avec pop, je vais suivre avec bcp d intérêt cette discution

grillead commented 3 years ago

Merci pour la base sql :) Je vais regarder ça rapidement, pour le moment le changement de chaine fonctionne avec le numéro, le seul souci est le fait de devoir avoir un serveur dédié pour faire tourner le serveur web avec adb, je n’ai pas trouvé d’autre solution à mon niveau avec mes connaissances. Il doit y avoir moyen d’appairer un serveur via la fonction appairage télécommande, des appli existent sur le playstore et permettes de remplacer la télécommande physique, je verrais pour creuser de ce côté-là afin de se passer d adb.

grillead commented 3 years ago

Salut ! Pour info ça avance bien :) J’ai enfin récupérer le contrôle des chaines via leurs noms grand merci pour la base sql, j’ai économisé du temps de saisie que j’ai passé dans la résolution du pb "d’espace" ex : zappe sur la chaine "m6" devenait grâce / à cause de google : zappe sur la chaine "m 6" et ma req sql ne trouvait pas de résultat, idem pour toute les chaines avec des lettres et des chiffres d’ailleurs ... pb résolu en remplacant le ‘space‘ par un ‘%’ et la requete sql
SELECT free FROM chaines WHERE nom = '$nom' par SELECT free FROM chaines WHERE nom LIKE '$nom'

Il me reste la problématique de pouvoir envoyé la touche FREE afin d'etre sur l écran TV sinon la saisie de chaine ne marche pas. (idem av la telecommande d ailleur si on est sur l acceuil android la saisie de la chaine 6 ne fait rien.) Le système reste un poil contraignant pour le commun des mortels car il faut faire pas mal de manip, meme si je peut partager l image de ma vm il faut soit une delta avec un disque dur , soit un Rpi ou une machine dediée. (comme ton assistant-plugins en somme).

Aymkdn commented 3 years ago

Ah oui, pour les chaînes, je fais un petit traitement pour enlever certains espaces, des mots comme "la chaîne", etc...

grillead commented 3 years ago

Du coup moi j ai feinter, je remplace tout les espaces par un "%" interpreter comme un joker dans la base sql avec le LIKE :) appriori ca marche, j ai pas tester toutes les chaines mais ca devrait le faire

grillead commented 3 years ago

Yop, petit news rapide, mon systeme actuel via adb fonctionne toujours, je viens de tester l appli "free telec" android qui a été mis a jour et fonctionne avec mini4k et pop. L'association se fait directement entre l appli et la tv via un code(via reseau wifi), j ai envoyé un mail au dev histoire de savoir quelle api il utilise car je n ai aucune trace de mon smartphone dans la section telecommande d'android.

Je pence qu il utilise une api fr free sur android(mais non documenté car je n ai rien trouvé sur le web) cela pourrait eventuellement permettre d ajouter la mini4k/pop à ton assistant cloud.

Je te tiens au courant si le dev de l appli me répond 😃 May the force be with you !

Edit 23/10 : Bon bah pour le moment aucune nouvelle du dev, apres recherche appriori il s agit d une api interne android atvremote, fonctionnant sur le port 6466 de la box mais impossible de trouvé une doc dessus, d apres quelques site l api serait reservé et documenté pour les compte "google partner" seulement...

grillead commented 3 years ago

Bonjour, Ayant depuis peu également la delta avec pop, je vais suivre avec bcp d intérêt cette discution

Si tu veux faire le test chez toi,que tu as quelques connaissances en informatique et un disque dur dans la delta : https://github.com/grillead/freeboxandroidhomecontrol

seb60500 commented 3 years ago

Slt Désolé mais je n ai pas encore de disque dur dans la delta et mes connaissances en informatiques sont froment très basiques. J essaierai des que possible, mais avec l'arrivée du bébé j suis un peu occupé

Aymkdn commented 3 years ago

@grillead quelques questions pour toi :

  1. Tu peux me dire ce que http://hd1.freebox.fr/pub/channels retourne chez toi ? (ou éventuellement http://hd2.freebox.fr/pub/channels si le premier lien n'aboutit pas)
  2. Si tu te connectes à Freebox OS (http://mafreebox.freebox.fr/) puis ensuite que tu vas sur http://mafreebox.freebox.fr/api/v8/player ça te retourne quoi ?
  3. Tu as "Assistant Cloud" dans le Freestore de ta Delta ? Il se passe quoi quand tu lances l'application ?
  4. Installe l'application "PingTools Network Utilities" sur le Play Store Android puis va dans le menu (en haut à gauche) et va dans "Bonjour Browser" : est-ce que des infos sont retournées depuis ta Freebox Pop ?
  5. Avec "PingTools Network Utilities" si tu vas dans le menu puis que tu choisis "Ports Scanner" puis que tu scannes l'IP de ta Freebox Pop, ça donne quoi ? Tu peux même tenter le "Scan all ports" depuis les trois points en haut à droite puis Réglages
grillead commented 3 years ago

@Aymkdn Yop,

  1. Aucun des 2 liens hdX.freebox.fr ne donne de réponse, le player android ne repond pas sous ce nom, j ai d'ailleurs chercher ce week-end si je trouvais un "nom" universel interne pour le player mais je pence que tout les outils actuels se base sur une requete dns-sd(zeroconf) pour decouvrir le player.

  2. Oui l api free repond sur le liens qui pointe sur le routeur delta : {"uid":"9b4d2ca411ad36b2dbf9ac3ed81fa483","success":false,"msg":"Vous devez vous connecter pour accéder à cette fonction","result":{"password_salt":"MW3dh\/A6HAziWE3z4ZymSceDYoefTpaV","challenge":"aMq6C1CPaE6DlbdbTO+k8Ye3\/Gx4t+ee"},"error_code":"auth_required"}

  3. Concernant la "delta" je n ai pas de store (c est le routeur qui utilise le meme os que le routeur revolution) il est accessible via http://mafreebox.free.fr, si tu parle de la POP, je n ai que le store android.

  4. Je t ai fais la meme choses via nmap depuis le pc : image et concernant le protocol bonjour, voila le resultat de mdns-scan fait depuis ma vm debian 'j ai enlever tout ce qui est autre que google et freebox vu le @$!^$ que j ai à la maison 🤣 :

    
    freebox@home:~$ mdns-scan
    + googlerpc-2._googlerpc._tcp.local
    + Freebox-Player-POP-c04b9a2e2733300338d934ac45eeb07b._googlecast._tcp.local
    + googlerpc-1._googlerpc._tcp.local
    + Google-Home-Mini-6f38375a678c3f9e89aba50a56d08d39._googlecast._tcp.loca
    + Freebox Server._http._tcp.local
    + Freebox Server._smb._tcp.local
    + Repeteur Wifi Freebox._device-info._tcp.local
    + adb-8C97EA164E4A._adb._tcp.local
    + Freebox._androidtvremote._tcp.local
    + Freebox Player POP._device-info._tcp.local
    + Kodi (192.168.0.1)._xbmc-events._udp.local
    + Freebox Player POP._mycanal._tcp.local
    + Freebox Server._https._tcp.local
    + Freebox Server._fbx-api._tcp.local

J'ai trouver ca concernant apriori le protocol atvremote sur android qui remplace l ancien protocol anymote de googletv : https://android.googlesource.com/platform/external/google-tv-pairing-protocol/

Tiens moi au courant si besoin d autres infos 😃 
Aymkdn commented 3 years ago

Pour le numéro 2, étais-tu bien connecté à Freebox OS avant d'ouvrir le lien ? Car apparemment non...

grillead commented 3 years ago

Oupsss 🤣 Voila le résultat apres connexion c est mieux : {"success":true,"result":[{"mac":"8c:97:ea:16:4e:4b","stb_type":"stb_v8","last_time_reachable":1603645645,"api_available":false,"device_name":"Freebox Player POP","device_model":"fbx8am","reachable":true,"lan_gids":["ether-8c:97:ea:16:4e:4b","ether-8c:97:ea:16:4e:4a"]}]} Enfin mieux ou pas vu que l api est a false...

Aymkdn commented 3 years ago

Enfin mieux ou pas vu que l api est a false...

Je m'en doutais mais je voulais confirmation !

Il y a l'application https://play.google.com/store/apps/details?id=com.google.android.tv.remote qui permet de contrôler une box Android TV. Ça marche chez moi. J'imagine que l'association dont tu m'as parlé entre la Pop et FreeTelec est basé sur le même principe...

grillead commented 3 years ago

Exact la fonctionnement et presque identique à la différence dans l appli que tu indique il y a possibilité de connecter la télécommande en BT au lieu du wifi. Il faudrait arriver à avoir la doc de fonctionnement de l api android remote (qui annonce son service en dns-sd sur le port 6466) afin de voir si un fonctionnement web et possible et pouvoir se passez de l option adb (qui fonctionne très bien chez moi d ailleurs hors-mi les blagues de google lors de la retranscription...)

Aymkdn commented 3 years ago

Pour info, pour le moment je réécris la skill Alexa : je me concentre donc sur ça. Une fois que j'aurai terminé, j'aurai du temps pour regarder comment gérer un Android TV / la Pop !

Donc c'est en stand-by pour le moment. Mais c'est bien sur ma liste des choses à regarder :-)

grillead commented 3 years ago

Pas de soucis, je comprend y a pas d urgence de mon coté ca fonctionne avec les commandes ADB, le seul inconveniant c est de mettre en place une VM :) j ai chercher un peu de mon coté mais ca me depasse un peu ce protocol de pairing wifi (surtout que pour le moment la box une fois en veille coupe le wifi donc reveille impossible sans télecommande physique...)

seb60500 commented 3 years ago

OK, pas de souci pour moi non plus. De toute façon suis trop occupé avec l arrivée de la petite. À bientot seb 

Aymkdn commented 3 years ago

Pour info, j'ai terminé de m'occuper de la skill Alexa, donc maintenant je vais regarder pour la Pop… Peu de chance d'arriver à quelque chose mais je vais essayer quand même ^^

grillead commented 3 years ago

Hello ! Yes il faudrait voir si tu arrive a avoir une interaction autre que via adb, suite a la dernieres maj Free j ai resolu mon soucis de box injoignable apres la veille (elle coupait le reseau en veille Rrrrr, mais maintenant c est good) du coup la seul contrainte c est d avoir une vm qui tourne sur le player delta (ou au rpi au pire :) ) et d avoir un poil et demi de connaissance en info pour la mise en place. Je compte sur toi et en cas d echec je ferais un tuto plus detaillé pour ceux qui auront besoin.

Aymkdn commented 3 years ago

Pour future référence, il existe 2 plugins Jeedom qui sont basés sur ADB aussi : https://github.com/mika-nt28/Jeedom-AndroidTV et https://github.com/NextDom/plugin-AndroidRemoteControl

Aymkdn commented 3 years ago

D'après https://code.google.com/archive/p/google-tv-chrome-extensions/wikis/PairingSession.wiki les ports de connexion seraient 9551 et 9552 … @grillead ces ports là ne sont pas ouverts sur la Pop ?

J'ai passé 2 semaines à essayer de compiler le vieux code de google-tv-pairing-protocol sans succès, donc maintenant j'essaie de trouver comment le protocole marche (en cherchant sur le Web et aussi en décompilant l'application Android TV Remote).

Prochaine étape : installer un vieux Chrome sur lequel je pourrai tester le plugin de https://code.google.com/archive/p/google-tv-chrome-extensions/ et voir si ça fonctionne… Il utilise des technologies que je maitrise donc ça m'aidera peut-être à arriver à quelque chose.

grillead commented 3 years ago

Je te refais un scan des que possible, mais d apres le nmap que j avais poster il s agissait des ports 6466 et 6467 utilisant d apres leur noms d annonces le protocole atvremote.

L appi Android TV Remote Controle de chez google me permet en effet la gestion de la box sans adb, elle demande juste une procédure de pairing.(validation de code)

grillead commented 3 years ago

@Aymkdn Voila le resultat de mon nmap de la box :

5555/tcp open freeciv 8008/tcp open http 8009/tcp open ajp13 8443/tcp open https-alt 9000/tcp open cslistener 9090/tcp open zeus-admin

en sachant que le 5555 est ouvert car le debug usb et activé (port ADB sur IP). Bonne recherche ;)

Aymkdn commented 3 years ago

@grillead : donc tu avais les port 6466 et 6467 ouverts, mais ils ne le sont plus ?

Aymkdn commented 3 years ago

Bon, c'est bien les ports 6466/6467 qu'il faut utiliser puisque j'en trouve trace dans l'application Android TV Remote Control – le port 6466 étant utilisé pour la découverte : image

Ils sont quand même chiants chez Google à ne pas fournir de documentation :-(

(désolé je poste mes trouvailles au fur et à mesure ici comme ça je peux y revenir plus tard)

grillead commented 3 years ago

Je viens de relancer un scan full tcp et je retrouve mes 6466 et 6467 :D

image

grillead commented 3 years ago

j ai retrouvé un post que j avais mis de coté qui parle de l api (trouver sur stackoverflow) 👍

So, I found the answer what I was looking for. If you are a Google Partner (and only then), and have an account with those privileges, you can simply download the jar file at this location. Documentation can be found there as well and the SDK exists for Android and iOS. Not much information is available how to use it. But by looking over the different classes it can become clear.

Aymkdn commented 3 years ago

Le lien ne mène nulle part...

grillead commented 3 years ago

Le lien ne mène nulle part...

Oui normal il faut un compte google partners : "If you are a Google Partner (and only then), and have an account with those privileges" )

grillead commented 3 years ago

@Aymkdn Salut, a tous hasard tu aurais mis a jour ta bdd des chaines ? je cherche avec l api pour les extraire mais je n ai pas le nom des chaines ;-( donc si tu peut m envoyer un export ou me dire comment tu les recup, les parse et les imports dans la bdd je suis preneur ^^

Aymkdn commented 3 years ago

Voilà : chaines.zip (au format CSV)

La première fois je suis allé sur https://alloforfait.fr/tv/free et avec un petit code javascript j'ai généré le nom des chaines et leur numéro. Ensuite j'ai enrichi la base de données au fur et à mesure du temps (en particulier pour les "noms alternatifs" selon comment Google Home / Alexa les reconnaissaient – ça me retourne une erreur si une chaine n'est pas reconnue et de là je peux ensuite l'ajouter manuellement).J'utilise aussi https://www.free.fr/data/pdf/freeboxtv.pdf qui fournit les chaines et leur numéro quand je fais un ajout manuel.

grillead commented 3 years ago

Ah ok merci, je pensais que tu avais reussi a automatisé le truc avec l api freebox, vu que free aime bien changer la numerotation des chaines regulierement... Je vais voir si je peut trouvé une solution.

Aymkdn commented 3 years ago

Je suis les actus d'Univers Freebox qui annonce les changements de numéro de chaînes. Ça n'arrive pas si souvent, en tout cas pas sur les chaînes principales. Aussi, quand les "fonctionnalités avancées" sont activées, ça n'utilise pas le numéro de chaîne mais l'UUID via l'API et qui reste unique pour chaque chaîne, enlevant cette contrainte.

baya44 commented 3 years ago

Il semblerait qu'une app non officielle gère la pop et la mini 4k, peut être que le dev serait cool et t'aiderait dans les recherches https://www.universfreebox.com/article/60770/telecommande-freebox-la-zapette-virtuelle-desormais-compatible-avec-deux-nouvelles-box

Aymkdn commented 3 years ago

Oui j'ai vu ça aussi mais je n'ai pas trouvé l'application en question sur le Play Store... Une idée de laquelle il s'agit ? Ou alors c'est celle que j'ai et qui n'a pas encore été mise à jour ?

Je comptais regarder ça de plus près demain et contacter le développeur en effet.... S'il répond...

baya44 commented 3 years ago

Je dirais que c'est celle ci: A voir si tu as des réponses https://play.google.com/store/apps/details?id=dev.niamor.freeboxremote A voir si c'est pas juste l'app Android qui est encapsulée

Aymkdn commented 3 years ago

Merci baya44 ! L'application n'apparaissait pas dans mon Play Store, mais avec le lien direct j'y ai accès.

Je viens d'envoyer un email au développeur.

Comme je n'ai pas de Pop, je n'ai pas pu tester l'application pour voir comment elle se comporte... Est-ce qu'elle demande un code d'association comme l'application Android TV ? Là je suis au lit mais j'ai lancé l'application en sélectionnant Pop et ça me demande un code en effet.... J'imagine qu'il a détecté mon Android TV.

Wait and see.

Lekkerman0209 commented 3 years ago

🤞 J'ai migré de la Révolution à la Freebox Delta+Pop et le truc qui me manque le plus c'est ta skill Alexa 😢

Aymkdn commented 3 years ago

Pour info, le développeur de l'appli m'a répondu hier : en gros, il a fait du reverse engineering (ce que je suis en train de faire aussi), et comme il a monté sa boite et que ça lui a demandé énormément de temps (et donc de l'argent), il ne souhaite pas partager ses découvertes… Ce que je peux comprendre, même si je ne partage pas cette philosophie. Il m'a dit que je pouvais occasionnellement lui poser des questions si je bloque quelque part.

Donc, je me replongerai dans les codes des applications que j'ai décompilées pour essayer de comprendre comment le schmilblick fonctionne ! Évidemment, quand j'aurai trouvé, je partagerai le tout comme j'ai pu le faire avec l'API Player.

Le bon côté est qu'on voit que ça peut fonctionner ! Reste à voir si je pourrai piloter le système depuis le Cloud. Comme ça passe par deux ports, je dirais qu'à priori oui, mais bon, à confirmer.

Je vous demanderai donc de la patience car ça va sûrement me prendre plusieurs semaines de recherche encore…