Integración de FreePlayer

Controlar el reproductor de la Freebox a través de Gladys.
Opciones de reproducción, pausa, avance rápido y retroceso… y, por supuesto, suspensión y activación.
¿Y por qué no recuperar una guía de programación que permita hacer clic en ella para sintonizar el canal correspondiente?

hola @b3n.0
hablas de la freebox revolución (controlable con la aplicación freebox, por ejemplo, porque el sistema operativo es de free) o de la freebox pop (con Android TV)?
Estoy con una pop y hasta ahora no he encontrado nada para controlarla de otra manera que no sea con su mando a distancia por bluetooth :confused:

Hola @mutmut,

No, me refiero al freeplayer, la segunda caja y, que yo sepa, independientemente de la versión, estos reproductores comparten la misma API…

también hablaba del reproductor y puedo decirte que son bastante diferentes, por desgracia (el sistema operativo de Free frente a Android TV), porque pasé de la Revolución a la Pop y perdí el acceso a los comandos desde aplicaciones de terceros.

¡Ah, sí… la famosa freetelec! La usé durante mucho tiempo, cerraron la posibilidad de aplicaciones de terceros para todas las freebox (tuve una revolución durante mucho tiempo y ahora la devialet) se pasa por la aplicación oficial que tiene un control remoto…

Pero si no me equivoco, solo era el envío de comandos vía http sin respuesta.
Se parece a esto: http://hd1.freebox.fr/pub/remote_control?..

Al buscar, he reunido esto, pero sin saber cómo usarlo:

{
« notes »: « Hoja de trucos para Freebox Player a través de FreeboxOS (endpoints JSON). Reemplaza MAFREEBOX por la IP/hostname local (ej: mafreebox.freebox.fr) y {id_player} por el id devuelto por /api/vX/player. Las versiones de API (vX / v6 / vN) pueden variar según la box/firmware. »,
« auth »: {
« overview »: « Flujo de autenticación FreeboxOS: registrar app → autorizar (el usuario confirma en el panel) → GET /api/vX/login para obtener el desafío → POST /api/vX/login/session con hmac(challenge, app_token) → usar session_token en el encabezado X-Fbx-App-Auth para llamadas posteriores. »,
« endpoints »: [
{
« description »: « Obtener versión de API / descubrimiento »,
« method »: « GET »,
« url »: « https://MAFREEBOX/api_version »,
« headers »: {},
« example_response »: {
« success »: true,
« result »: {
« api_version »: « v8 »,
« device_type »: « Freebox Server »
}
}
},
{
« description »: « Solicitar autorización (registrar app) → devuelve track_id y estado pendiente »,
« method »: « POST »,
« url »: « https://MAFREEBOX/api/vX/login/authorize/ »,
« headers »: {
« Content-Type »: « application/json »
},
« body_example »: {
« app_id »: « com.example.myapp »,
« app_name »: « My App »,
« app_version »: « 0.1 »,
« device_name »: « RaspberryPi »
},
« notes »: « El usuario debe validar la solicitud en el panel frontal de Freebox para recibir un app_token. »
},
{
« description »: « Obtener desafío (necesario para calcular la contraseña de sesión) »,
« method »: « GET »,
« url »: « https://MAFREEBOX/api/vX/login/ »,
« headers »: {},
« example_response »: {
« success »: true,
« result »: {
« logged_in »: false,
« challenge »: « RANDOM_CHALLENGE_STRING »
}
}
},
{
« description »: « Abrir sesión: POST password = hmac_sha1(app_token, challenge) »,
« method »: « POST »,
« url »: « https://MAFREEBOX/api/vX/login/session/ »,
« headers »: {
« Content-Type »: « application/json »
},
« body_example »: {
« app_id »: « com.example.myapp »,
« app_version »: « 0.1 »,
« password »: « HMAC_SHA1(app_token, challenge) »
},
« example_response »: {
« success »: true,
« result »: {
« session_token »: « SESSION_TOKEN_STRING »,
« rights »: [« settings »,« player »,« explorer »]
}
},
« note »: « Usa el session_token devuelto como encabezado X-Fbx-App-Auth para llamadas autenticadas. »
}
],
« auth_header »: {
« name »: « X-Fbx-App-Auth »,
« value »: « SESSION_TOKEN_STRING »,
« usage »: « Incluye este encabezado en todas las solicitudes HTTP autenticadas posteriores (y en el handshake de WebSocket). »
}
},
« discovery »: {
« list_players »: {
« method »: « GET »,
« url »: « https://MAFREEBOX/api/vX/player »,
« headers »: { « X-Fbx-App-Auth »: « SESSION_TOKEN » },
« example_response »: {
« success »: true,
« result »: [
{
« id »: 2,
« uid »: « player-XXXX »,
« model »: « Freebox Player Pop »,
« mac »: « AA:BB:CC:DD:EE:FF »,
« api_available »: true,
« api_version »: « v6 »,
« reachable »: true
}
]
},
« note »: « Usa los campos id y api_version para construir endpoints específicos del reproductor. »
}
},
« player_endpoints »: {
« base_pattern »: « /api/vX/player/{id_player}/api/{api_version}/ »,
« endpoints »: [
{
« name »: « Obtener estado del reproductor »,
« method »: « GET »,
« url »: « https://MAFREEBOX/api/vX/player/{id_player}/api/{api_version}/status »,
« headers »: { « X-Fbx-App-Auth »: « SESSION_TOKEN » },
« example_response_success »: {
« success »: true,
« result »: {
« power »: « on »,
« current_app »: « tv »,
« volume »: { « mute »: false, « level »: 61 },
« current_media »: { « type »: « tv », « channel »: 2, « title »: « France 2 » }
}
},
« notes »: [
« Puede devolver información limitada o error si el modelo/firmware del reproductor no soporta la API de estado (común en algunos reproductores AndroidTV). »,
« Si obtienes invalid_api_version o campos faltantes, es probable que el modelo no exponga ese endpoint de manera confiable. »
],
« sources »: [« dev.freebox.fr », « informes de la comunidad »]
},
{
« name »: « Establecer volumen / silencio »,
« method »: « PUT »,
« url »: « https://MAFREEBOX/api/vX/player/{id_player}/api/{api_version}/control/volume/ »,
« headers »: { « X-Fbx-App-Auth »: « SESSION_TOKEN », « Content-Type »: « application/json » },
« body_examples »: [
{ « volume »: 61 },
{ « mute »: true },
{ « mute »: false }
],
« example_response_success »: {
« success »: true,
« result »: { « mute »: false, « volume »: 61 }
},
« notes »: [
« Funciona en modelos que exponen el control de volumen a través de la API del reproductor (informado como correcto en algunos modelos Devialet/Delta y algunos modelos más antiguos). »,
« Puede devolver not_implemented / función no disponible en algunos modelos. »
],
« sources »: [« dev.freebox.fr », « informes de errores »]
},
{
« name »: « Control de medios (reproducir / pausar / detener / siguiente / anterior) »,
« method »: « POST »,
« url »: « https://MAFREEBOX/api/vX/player/{id_player}/api/{api_version}/control/mediactrl »,
« headers »: { « X-Fbx-App-Auth »: « SESSION_TOKEN », « Content-Type »: « application/json » },
« body_examples »: [
{ « command »: « play » },
{ « command »: « pause » },
{ « command »: « stop » },
{ « command »: « next » },
{ « command »: « prev » }
],
« example_response_success »: {
« success »: true,
« result »: {}
},
« notes »: [
« Disponible en dispositivos que proporcionan controles de medios a través de la API del reproductor. »,
« Algunos dispositivos pueden devolver not_implemented. »
],
« sources »: [« dev.freebox.fr », « tareas del proyecto »]
},
{
« name »: « Abrir URL / Abrir canal de TV / Lanzar app »,
« method »: « POST »,
« url »: « https://MAFREEBOX/api/vX/player/{id_player}/api/{api_version}/control/open »,
« headers »: { « X-Fbx-App-Auth »: « SESSION_TOKEN », « Content-Type »: « application/json » },
« body_examples »: [
{ « url »: « tv:?channel=2 » },
{ « url »: « app://com.freebox.someapp » },
{ « url »: « http://example.com/somepage » }
],
« example_response_error »: {
« success »: false,
« error_code »: « internal_error »,
« msg »: « Cannot open resource »
},
« notes »: [
« Patrón común para cambiar de canal: POST { "url": "tv:?channel=2" }. »,
« Muchos informes muestran que open puede fallar con errores cannot parse json o internal dependiendo del modelo/firmware — prueba con cuidado. »
],
« sources »: [« dev.freebox.fr bug FS#40136 », « hilos de la comunidad »]
},
{
« name »: « Control remoto / enviar tecla (navegación / OK / Atrás / etc.) »,
« method »: « POST »,
« url »: « https://MAFREEBOX/api/vX/player/{id_player}/api/{api_version}/control/remote »,
« headers »: { « X-Fbx-App-Auth »: « SESSION_TOKEN », « Content-Type »: « application/json » },
« body_examples »: [
{ « key »: « up » },
{ « key »: « down » },
{ « key »: « left » },
{ « key »: « right » },
{ « key »: « ok » },
{ « key »: « back » },
{ « key »: « home » }
],
« example_response_success »: {
« success »: true,
« result »: {}
},
« notes »: [
« El nombre del endpoint puede variar entre firmwares (algunas implementaciones usan input o remote_control). Si POST /remote devuelve 403 o no implementado, prueba el SDK de control remoto UDP/HID en su lugar. »,
« Históricamente hubo una URL http remote_control (depreciada/eliminada). »
],
« sources »: [« ejemplos de la comunidad », « documentación histórica »]
}
]
},
« websocket »: {
« note »: « Puedes abrir un WebSocket a la Freebox y debes pasar el mismo encabezado X-Fbx-App-Auth en el handshake. Es útil suscribirse a eventos de reproductor en lugar de hacer polling. »,
« reference »: « Documentación de WebSocket de FreeboxOS »
},
« compatibility_notes »: {
« summary »: « El comportamiento varía según el modelo del reproductor y el firmware. »,
« details »: [
« Los modelos más antiguos (Révolution, Delta) tienden a exponer más puntos finales de Player de manera fiable. »,
« Los reproductores basados en AndroidTV (Mini 4K, Pop) a menudo tienen un soporte incompleto de la API de Player: el estado puede devolver invalid_api_version o solo información mínima. »,
« Algunos puntos finales devuelven el error {"success":false, "error_code":"not_implemented"} — maneja esto con elegancia en los scripts. »,
« Cuando dudes: descubre /api/vX/player para obtener api_version y prueba los puntos finales dinámicamente. »
],
« sources »: [
« Documentación de SDK / FreeboxOS de dev.freebox.fr »,
« Informes de la comunidad y problemas del rastreador de errores de Freebox »
]
},
« example_curl_calls »: [
{
« desc »: « Listar reproductores »,
« curl »: « curl -sS -H ‹ X-Fbx-App-Auth: SESSION_TOKEN › https://MAFREEBOX/api/vX/player »
},
{
« desc »: « Establecer volumen en 40 »,
« curl »: « curl -sS -X PUT -H ‹ X-Fbx-App-Auth: SESSION_TOKEN › -H ‹ Content-Type: application/json › -d ‹ {"volume":40} › https://MAFREEBOX/api/vX/player/2/api/v6/control/volume/ »
},
{
« desc »: « Abrir canal de TV 2 »,
« curl »: « curl -sS -X POST -H ‹ X-Fbx-App-Auth: SESSION_TOKEN › -H ‹ Content-Type: application/json › -d ‹ {"url":"tv:?channel=2"} › https://MAFREEBOX/api/vX/player/2/api/v6/control/open »
}
],
« final_advice »: « Empieza obteniendo un token de sesión y llamando a GET /api/vX/player para descubrir los reproductores disponibles y la versión de api reportada. Luego prueba los puntos finales de estado, volumen y abrir en este orden. Implementa soluciones alternativas cuando obtengas errores de not_implemented / invalid_api_version. »
}