Freebox-Player über Gladys steuern.
Leseoptionen, Pause, schnelle Vor- und Rückspulung… natürlich auch Standby und Aktivierung.
Und warum nicht Programmübersicht abrufen, die es ermöglicht, darauf zu klicken, um den entsprechenden Kanal einzustellen.
Hallo @b3n.0
redest du von der Freebox Révolution (steuerbar mit der Freebox-App, da das OS von Free ist) oder von der Freebox Pop (unter Android TV)?
Ich habe eine Pop und bisher habe ich nichts gefunden, um sie anders zu steuern als mit ihrer Bluetooth-Fernbedienung ![]()
Hallo @mutmut,
Nein, ich spreche wirklich vom Freeplayer, der zweiten Box und, soweit ich mich nicht irre, unabhängig von der Version, haben diese Player alle dieselbe API gemeinsam…
Ich habe auch über den Player gesprochen und kann dir sagen, dass sie leider sehr unterschiedlich sind (Free-OS vs. Android TV), da ich von der Revolution zur Pop gewechselt bin und den Zugriff auf die Steuerung von Drittanbieter-Apps verloren habe.
Und ja… die berühmte freetelec! Ich habe sie lange genutzt, sie haben die Möglichkeit von Drittanbieter-Apps für alle Freeboxen geschlossen (ich hatte lange eine Revolution und jetzt die Devialet). Man nutzt die offizielle App, die eine Fernbedienung hat…
Aber wenn ich mich nicht irre, war das nur das Senden von Befehlen per HTTP ohne Antwort!
Das sieht so aus: http://hd1.freebox.fr/pub/remote_control?..
Beim Stöbern habe ich das zusammengetragen, aber ohne zu wissen, wie man es nutzt:
{
« notes »: « Cheat-Sheet für Freebox Player über FreeboxOS (Endpunkte JSON). Ersetzen Sie MAFREEBOX durch die lokale IP/Hostname (z. B. mafreebox.freebox.fr) und {id_player} durch die ID, die von /api/vX/player zurückgegeben wird. Die API-Versionen (vX / v6 / vN) können je nach Box/Firmware variieren. »,
« auth »: {
« overview »: « Authentifizierungsablauf FreeboxOS: App registrieren → autorisieren (Benutzer bestätigt auf dem Bedienfeld) → GET /api/vX/login, um challenge zu erhalten → POST /api/vX/login/session mit hmac(challenge, app_token) → session_token im Header X-Fbx-App-Auth für nachfolgende Aufrufe verwenden. »,
« endpoints »: [
{
« description »: « API-Version / Discovery abrufen »,
« method »: « GET »,
« url »: « https://MAFREEBOX/api_version »,
« headers »: {},
« example_response »: {
« success »: true,
« result »: {
« api_version »: « v8 »,
« device_type »: « Freebox Server »
}
}
},
{
« description »: « Autorisierungsanforderung (App registrieren) → gibt track_id und pending-Status zurück »,
« 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 »: « Der Benutzer muss die Anforderung auf dem Freebox-Bedienfeld bestätigen, um ein app_token zu erhalten. »
},
{
« description »: « Challenge abrufen (benötigt, um das Sitzungspasswort zu berechnen) »,
« method »: « GET »,
« url »: « https://MAFREEBOX/api/vX/login/ »,
« headers »: {},
« example_response »: {
« success »: true,
« result »: {
« logged_in »: false,
« challenge »: « RANDOM_CHALLENGE_STRING »
}
}
},
{
« description »: « Sitzung öffnen: 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 »: « Verwenden Sie das zurückgegebene session_token als Header X-Fbx-App-Auth für authentifizierte Aufrufe. »
}
],
« auth_header »: {
« name »: « X-Fbx-App-Auth »,
« value »: « SESSION_TOKEN_STRING »,
« usage »: « Fügen Sie diesen Header allen nachfolgenden authentifizierten HTTP-Anfragen (und im WebSocket-Handshake) bei. »
}
},
« 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 »: « Verwenden Sie die Felder id und api_version, um player-spezifische Endpunkte zu erstellen. »
}
},
« player_endpoints »: {
« base_pattern »: « /api/vX/player/{id_player}/api/{api_version}/ »,
« endpoints »: [
{
« name »: « Player-Status abrufen »,
« 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 »: [
« Kann begrenzte Informationen oder Fehler zurückgeben, wenn das Player-Modell/Firmware die Status-API nicht unterstützt (häufig bei einigen AndroidTV-Playern). »,
« Wenn Sie invalid_api_version oder fehlende Felder erhalten, unterstützt das Modell wahrscheinlich diesen Endpunkt nicht zuverlässig. »
],
« sources »: [« dev.freebox.fr », « community reports »]
},
{
« name »: « Lautstärke / Stummschaltung einstellen »,
« 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 »: [
« Funktioniert auf Modellen, die die Lautstärkensteuerung über die Player-API bereitstellen (berichtet OK bei einigen Devialet/Delta und einigen älteren Modellen). »,
« Kann not_implemented / Funktion nicht verfügbar auf einigen Modellen zurückgeben. »
],
« sources »: [« dev.freebox.fr », « bug reports »]
},
{
« name »: « Mediensteuerung (abspielen / pausieren / stoppen / nächste / vorherige) »,
« 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 »: [
« Verfügbar auf Geräten, die Mediensteuerungen über die Player-API bereitstellen. »,
« Einige Geräte können not_implemented zurückgeben. »
],
« sources »: [« dev.freebox.fr », « project tasks »]
},
{
« name »: « URL öffnen / TV-Kanal öffnen / App starten »,
« 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 »: [
« Häufiges Muster zum Kanalwechsel: POST { "url": "tv:?channel=2" }. »,
« Viele Berichte zeigen, dass open mit cannot parse json oder internal Fehlern je nach Modell/Firmware fehlschlagen kann — testen Sie sorgfältig. »
],
« sources »: [« dev.freebox.fr bug FS#40136 », « community threads »]
},
{
« name »: « Fernbedienung / Taste senden (Navigation / OK / Zurück / 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 »: [
« Der Endpunktname kann sich je nach Firmware unterscheiden (einige Implementierungen verwenden input oder remote_control). Wenn POST /remote 403 oder nicht implementiert zurückgibt, versuchen Sie stattdessen das UDP/HID-Fernbedienungs-SDK. »,
« Historisch gab es eine http remote_control-URL (veraltet/entfernt). »
],
« sources »: [« community examples », « historic docs »]
}
]
},
« websocket »: {
« note »: « Sie können eine WebSocket-Verbindung zur Freebox öffnen und müssen denselben X-Fbx-App-Auth-Header im Handshake übergeben. ». Nützlich, um sich für Spielerereignisse anzumelden, anstatt zu pollen.",
« reference »: « FreeboxOS WebSocket-Dokumentation »
},
« compatibility_notes »: {
« summary »: « Das Verhalten variiert je nach Spielermodell und Firmware. »,
« details »: [
« Ältere Modelle (Révolution, Delta) neigen dazu, zuverlässiger mehr Player-Endpunkte bereitzustellen. »,
« AndroidTV-basierte Player (Mini 4K, Pop) haben oft unvollständige Player-API-Unterstützung: Der Status kann invalid_api_version zurückgeben oder nur minimale Informationen. »,
« Einige Endpunkte geben den Fehler {"success":false, "error_code":"not_implemented"} zurück — behandeln Sie dies in Skripten nachsichtig. »,
« Bei Zweifeln: Entdecken Sie /api/vX/player, um api_version zu erhalten und testen Sie Endpunkte dynamisch. »
],
« sources »: [
« dev.freebox.fr SDK / FreeboxOS-Dokumentation »,
« Freebox-Bugtracker-Issues und Community-Berichte »
]
},
« example_curl_calls »: [
{
« desc »: « Player auflisten »,
« curl »: « curl -sS -H ‹ X-Fbx-App-Auth: SESSION_TOKEN › https://MAFREEBOX/api/vX/player »
},
{
« desc »: « Lautstärke auf 40 setzen »,
« 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 »: « TV-Kanal 2 öffnen »,
« 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 »: « Beginnen Sie mit dem Erhalten eines Sitzungstokens und dem Aufrufen von GET /api/vX/player, um verfügbare Player und die gemeldete api_version zu entdecken. Testen Sie dann die Status-, Lautstärke- und Öffnungs-Endpunkte in dieser Reihenfolge. Implementieren Sie Fallbacks, wenn Sie not_implemented / invalid_api_version-Fehler erhalten. »
}