Freebox Server (Ultra V9/ Pop V8/ Delta V7 / Revolution V6 / Mini 4K)

  • État En cours de résolution
  • Pourcentage achevé
    0%
  • Type Autre
  • Catégorie Freebox OS → API
  • Assignée à
    rfliedel
  • Système d'exploitation Freebox Server V7 (Delta)
  • Sévérité Basse
  • Priorité Très Basse
  • Basée sur la version 4.1.5
  • Due pour la version Non décidée
  • Échéance Non décidée
  • Votes 4
  • Privée

FS#29900 - Utilisation des api

Bonjour,

j’explore actuellement l’utilisation des api freebox, je constate que la doc n’est pas à jours, il y est fait mention de la v5 des api, quand je fait une requete mDNS je constate que les api sont en fait en V7.

Il est fait mention de websocket dans cette doc, il n’est pas fait mention de l’url pour les utiliser, et de fait j’ai essayer tout ce qu’il me passait par la tête et rien n’a fonctionner.

Ma demande consiste donc a avoir la doc à jour, et dans l’intervalle je ne serais pas contre un p’tit exemple d’utilisation des websockets ou au moins l’url du endpoint.

Actuellement le SDK n'est pas à jour...

Il faudrait aussi faire une mise à jour de :
- https://dev.freebox.fr/sdk/
- https://dev.freebox.fr/sdk/os/

nbanba a commenté le 03.05.2022 16:36

Bonjour

Avez vous trouvé ?

Cordialement
nbanba

nbanba a commenté le 06.05.2022 21:23

Bonjour

Les websocket ont étés documentés dans l API à partir de la version 8.2

Des exemples supplémentaires dans la doc seraient bienvenus

Avec la doc (je ne suis pas développeur), j ai réussi a faire un script en bash qui utilise les API pour faire les actions suivantes sur les VM:
- shutdown (acpi)
- stop (force)
- start
- restart
- liste / status des VM
- lance la console (avec les websocket api)

Donc si vous cherchez toujours à utiliser les websocket, je peux vous passer et vous expliquer le script. C est très basique mais ca m a permis de comprendre comment ça fonctionne sur la Freebox delta.

Cordialement
nbanba

Starli0n a commenté le 21.09.2022 00:08

Bonjour,

Je serai intéressé par votre script pour une connexion en websocket @nbanba.

Pouvez-vous me partager le code ?

Cordialement

nbanba a commenté le 21.09.2022 09:36

Bonjour

@Starli0n : vous trouverez le code ici :
https://github.com/nbanb https://github.com/nbanb

Les projets les plus intéressants sont :

la librairy : fbx-delta-nba_bash_api.sh
le programme de contrôle des VM : fbxvm-ctrl

Le programme ne fonctionne pas sans la librairy. Il faut aussi télécharger le binaire (ou build les sources) du client websocat, les instructions sont dans le changelog de la librairy.
Mais si vous voulez, j'ai déjà build 2 versions de websocat (arm64 et amd64) incluant une fonction qui n'est pas dans la main branche du dépot github de websocat et permettant de gérér l'interruption de la session quand le terminal (stty) est en mode "raw" sans utiliser de programmes externes comme "dtach" ou "screen" (Vitaly Shukela le développeur de websocat à release cette fonction pour le use case précis de l'accès à la console des VM Freebox).
Je peux vous fournir les binaires compilés ou le code et la procédure pour build (c'est du RUST)

Il y a d'autres projets dans le dépot GitHub (fbx-reboot, fbxvm-status) mais ils sont beaucoup moins avancés que le programme fbxvm-ctrl.
Je n'ai pas eu trop de temps cet été, mais je maintiendrai ces dépots GitHub tant que j'aurais une Freebox Delta et j'apporterai au fur et à mesure d'autres fonctionnalités

Voici l'help du script fbxvm-ctrl :

fbxvm-ctrl USE FREEBOX REST API TO MANAGE FREEBOX-DELTA VIRTUAL MACHINES

usage: ./fbxvm-ctrl list
usage: ./fbxvm-ctrl listdisk /path/to/freebox_VM/folder
usage: ./fbxvm-ctrl <verb> <object> <param>
usage: ./fbxvm-ctrl vmid <action> <param|mode(optionnal)>

- action = <start|shutdown(acpi)|stop(force)|restart|detail|modify|console>
- param  = <name=|vcpu=|memory=|disk_type=|disk_path=|...>
- mode   = ('console' only & optionnal) = <""|detached|screen>

VERB :   - add        : create virtual machine or create virtual machine disk 
         - del        : delete virtual machine or delete virtual machine disk 
         - resize     : resize virtual machine disk - disk-only 

ACTION : - start     : simply start VM
   	 - shutdown  : (acpi) send an ACPI shutdown command to VM
   	 - stop      : (force) set a PSU restart command to VM = electrical stop
   	 - restart   : simply restart VM 
   	 - detail    : print VM configuration detail (all parameters of Freebox API VM object)
   	 - modify    : modify VM parameter
   	 - console   : connect VM console

OBJECT : - vm        : freebox delta virtual machine 
         - disk      : freebox delta virtual machine disk

PARAM :  - name=                : name of this VM - VM-only (string, max 31 characters) 
         - vcpu=                : number of virtual CPUs to allocate to this VM - VM-only (integer)
  	 - memory=              : memory allocated to this VM in megabytes - VM-only (integer)
	 - disk_type=           : type of disk image, values : qcow2|raw - VM+disk (string)
  	 - disk_path=           : path to the hard disk image of this VM - VM+disk (string)
  	 - disk_size=           : hard disk final size in bytes (integer) - disk-only
  	 - disk_shrink=         : allow or not the disk to be shrink - disk-only (bool) DANGEROUS
  	 - cd_path=             : path to CDROM device ISO image - optional - VM-only (string) 
  	 - os=                  : VM OS: unknown|fedora|debian|ubuntu|freebsd|centos|jeedom|homebridge 
  	 - enable_screen=       : virtual screen using VNC websocket protocol - VM-only (bool) 
  	 - bind_usb_ports=      : syntax : bind_usb_ports='"usb-external-type-c","usb-external-type-a"' 
	 - enable_cloudinit=    : enable or not  passing data through cloudinit - VM-only (bool) 
  	 - cloudinit_hostname=  : when cloudinit is enabled: hostname (string, max 59 characters)
  	 - cloudinit_userdata=  : path to file containing user-data raw yaml (file max 32767 characters)

WARNING : when modifying VM, if you do not explicitly specify on the cmdline 'cloudinit_userdata=$val',
	  previous values for 'cloudinit_userdata' parameter will be reset to null ('') 

MODE ('console' only options) :
 	 - if <mode> is ommited, console is launched directly from terminal (basic mode)	
	 - if <mode> is "detached" console is launched detached from terminal (detached mode)	
	 - if <mode> is "screen" console is launched in a screen (alternative mode)	

---> "detached" and "screen" mode require you install "GNU dtach" or "GNU screen" programm

N'hésitez pas à me solliciter si vous avez besoin d'aide
Cordialement
nbanba

Starli0n a commenté le 27.09.2022 15:21

Thank you @nbanba for your help

I am coding in Python and I trying to initiate a websocket connection to replace an API call.

Concretely, I want to check the lan connections activity on my freebox in websocket instead of api
ie: https://dev.freebox.fr/sdk/os/lan/#lan-browser

but I am not sure it is even possible, even though the documentation implies that it is possible:
https://dev.freebox.fr/sdk/os/# (WebSocket API)

nbanba a commenté le 20.01.2023 07:06

Dear Starli0n

After publishong the new version of the library you can find here:
https://https://github.com/nbanb/fbx-delta-nba_bash_api.sh
I've found someone which did exactly what you need and what you wanted to do, but in BASH and not in python:
(Monitoring webwocket register event on

'{"action": "register", "events": ["lan_host_l3addr_reachable", "lan_host_l3addr_unreachable"]}'

The project is here : https://github.com/Matsuo3rd/freebox-lan-monitor/blob/main/freebox-lan-monitor.sh

It is simple to use the library https://https://github.com/nbanb/fbx-delta-nba_bash_api.sh for all other functions which manage the API login, token, etc… than the noticed project but the monitor function with websocat is the one you search:

monitorLAN() {
	log "LAN devices monitoring registration in progress"
	#TODO: try reconnect:ws://....
	echo '{"action": "register", "events": ["lan_host_l3addr_reachable", "lan_host_l3addr_unreachable"]}' \
		| ${WEBSOCAT} --ping-timeout 120 --ping-interval 60 --text --no-close -H="X-Fbx-App-Auth: ${session_token}" ${FREEBOX_API_WS_BASE_URL}/ws/event \
		| while read notification; do
			#log "${notification}"
			processLANNotification "${notification}"
	done

	warn "LAN devices monitoring stopped. Relaunching."
	while [[ "$(curl -s -o /dev/null -w ''%{http_code}'' --connect-timeout 5 ${FREEBOX_APP_HOSTNAME})" != "200" ]];
	do
			warn "Freebox endpoint could not be reached. Retrying ..."
			sleep 5
	done

	login
	monitorLAN
}

Kind regards
nbanba

Chargement...

Activer les raccourcis clavier

Liste des tâches

Détails de la tâche

Édition de la tâche