TP 8 : OpenWrt – L'écosystème IoT et Edge
Module : 2 – Fondamentaux des API REST et de l’embarqué
Durée indicative : 1h30
Prérequis : TP 5 à 7 terminés, un routeur ou VM OpenWrt accessible, pip install requests
Objectifs
- Comprendre le fonctionnement du micro-bus système
ubus. - Interroger et modifier la configuration réseau via JSON-RPC.
- Comparer concrètement JSON-RPC et REST (vu dans les TP précédents).
Contexte
OpenWrt, très utilisé sur les équipements IoT et edge, n’expose pas d’API REST classique : toute l’administration passe par ubus, accessible en JSON-RPC via HTTP (ubus-rpcd/uhttpd).
Étape 1 – Activation de l’accès distant à ubus
Sur OpenWrt, vérifiez que uhttpd et le module ubus JSON-RPC sont actifs (/etc/config/uhttpd), et notez l’URL du point d’entrée (généralement http://<ip>/ubus).
Étape 2 – Authentification
ubus s’authentifie via la session session.login, qui retourne un ubus_rpc_session à réutiliser dans les appels suivants :
import requests
URL = "http://192.168.1.1/ubus"
def call(method, params, session="00000000000000000000000000000000"):
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "call",
"params": [session, *params]
}
resp = requests.post(URL, json=payload, timeout=5)
resp.raise_for_status()
return resp.json()
login = call("call", ["session", "login", {"username": "root", "password": "motdepasse"}])
session_id = login["result"][1]["ubus_rpc_session"]
Le token de session obtenu via
session.login est réutilisé comme premier paramètre de chaque appel call suivant.
Étape 3 – Lecture de l’état des interfaces
status = call("call", ["network.interface", "status", {}], session=session_id)
print(status)Identifiez dans la réponse JSON : adresses IP, état du lien, statistiques de trafic.
Étape 4 – Modification de la configuration réseau
Utilisez le service uci (via ubus) pour modifier une interface, par exemple changer l’adresse IP de l’interface lan :
call("call", ["uci", "set", {
"config": "network",
"section": "lan",
"values": {"ipaddr": "192.168.2.1"}
}], session=session_id)
call("call", ["uci", "commit", {"config": "network"}], session=session_id)Appliquez et vérifiez le changement (ifconfig ou nouvelle requête network.interface.status).
Étape 5 – Comparaison REST vs JSON-RPC
Rédigez une courte synthèse (10 lignes) comparant, à partir de votre expérience des TP 5 à 8 :
- la structure des requêtes (URL + verbe HTTP vs méthode + paramètres),
- la gestion de la session/authentification,
- la lisibilité et la facilité de découverte de l’API (documentation, exploration).
Rendu attendu
- Script(s) Python versionnés.
- Captures des appels
ubus(lecture et modification). - La synthèse comparative REST vs JSON-RPC.
Points de vérification
- La session
ubusest correctement obtenue et réutilisée. - La modification de configuration via
uciest persistée aprèscommit. - La synthèse comparative aborde bien les trois axes demandés.