Aller au contenu
Ofwood

Interfacer La Livebox D'orange Avec La Hc2

Recommended Posts

Bonjour

 

Pour mon premier tuto, je vous propose un Module Virtuel pour interfacer la Livebox d'Orange et je vais vous détailler la mise en Å“uvre de l'intégration avec la HC2.
Le module rassemble les informations importantes sur l'état des interfaces, le débit, les statistiques et les différents compteurs d'erreurs. Il permet aussi d'exécuter des commandes simples comme l'activation du Wifi ou le redémarrage de la Livebox.
 
gallery_2306_192_5544.png
 
gallery_2306_192_12243.png
 
 
Prérequis
  1. Une Livebox 2 (Sagem) DSL note: pas pu tester la fibre. J'aimerais bien mais dans moin coin c'est pas avant 2022  ;)  ).
  2. Une HC2 (code lua testé avec v3.600 et v4.031)
 
Installation
  • Télécharger et ajouter le VD (lien en bas de post)
  • Sur la page de configuration du module, saisir l'adresse ip et le port (80) de la Livebox
  • Ensuite, il faut paramtètrer le VD, editez le code en debut de page (pour chaque bouttons):
    -- Nom d'utilisateur et mot de passe de la livebox
    local USER ="admin"
    local PASSWORD = "admin"
    
  • Le VD retourne trois états possibles: Inconnu, OK et Not OK. Editez les variables pour adapter l'ID des icones:
    -- ID des icônes
    icon_ok = 1004
    icon_nok = 1005
    icon_unknown = 1006
    
  • Par défault, l'execution du module toutes les 5 minutes est confié à  la mainloop du VD qui simule un appui sur le bouton Rafraichir. Simple, mais pour plus de fléxibilité et surtout de plus stabilté je recommande d'utiliser l'excellent GEA avec la ligne ci-dessous (à  adapter). Dans ce cas, noubliez pas de supprimer le code dans le mainloop du VD.
    -- Mise à  jour état connexion Internet
    GEA.add(true , 5*60, "",{{"VirtualDevice", id["VD_LIVEBOX"], "1"},{"VirtualDevice", id["VD_LIVEBOX"], "7"},{"Repeat"}})
    
  • Le VD n'utilise pas de Variable Globale car je n'ai pas de scénario qui necessite un retour sur l'état de la connexion internet mais c'est juste une ligne de code à  ajouter:
    fibaro:setGlobal('test', Livebox.WANStatus.LinkState)
    

 

 

 

Comment ca marche ?

c'est la section pour les geeks. Je partage ici le resultat de mes bidouilles (et saut d'humeur) à  propos de l'API Livebox

 

Fonctionnement de l'API Orange/Sagem:

En regardant d'un peu plus près les paquets échangés dans une session d'admin avec la livebox on peut voir des réponses de POST en json . à‡a commence plutôt pas mal, la livebox a donc une API !  

Comme souvent avec Orange, ça commence bien, c'est après que les choses se gâtent !  :rolleyes:

Impossible de mettre la main sur une doc publique de l'API. En fouillant un peu sur les forums d'Orange j'ai trouvé quelques pistes mais mes vrais amis ont été Wireshark et les dev tools InternetExplorer ou Chrome (F12) pour comprendre un peu comment l'appli mobile d'Orange (version IOS) utilisait l'API…
 
En inspectant le déroulé d'un login, je manque de m'étrangler en constatant que le nom d'utilisateur et le mot de passe sont balancés en clair; ben voyons les gars faut pas se gêner hein…
la requête login retourne un "ContextID" qui est utilisé comme identifiant pour les appels aux fonctions de l'API (X-Context dans les headers).
Donc au menu nous avons des custom headers et une authentification super basique, fastoche! où est le problème? Bah ça marche pô! - > "permission denied" le voilà  le problème  :angry:
 
Bah surement qu'ils ont été pris de remords chez Orange avec cette authentification de mickey avec password en clair et histoire de faire bonne figure (et pas se faire défoncer tous les mercredi par des pré-ados qui voudraient passer outre le contrôle parental) ils ont semble-t-il cherché à  compliquer un peu les choses… mais en faisant du gros n'importe quoi! Pour aller à  l'enssentiel, en plus d'un ContextID, le Login renvoie une autre clé mais planquée dans un cookie cette fois. La sécurité n'y a pas gagné grand chose mais en revanche c'est une vraie prise de tête à  intégrer sur la hc2. Hmm.. Net.FHttp avec des custom headers et un cookie, ça va pas le faire…
 
Pour contourner le problème et récupérer le cookie, je me suis servi du génialissime ToolKit v1.0.4 de Krikroff. :60:
Une toute petite modif de 4 lignes dans httpClient:request et nous voila prêts à  nous goinfrer de cookies.
 
J'ai modifié (à  l'arrache, sorry Krikroff) la fonction request(...) dans le fichier Toolkit.net.lua (commence ligne 165).
on cherche la chaine "cookie" dans les response headers renvoyés par le serveur et le cas échéant on extrait avec un string.sub() en partant du douzième char. la fonction retourne le cookie en plus des classiques response, status et err.
request = (function(self, method, uri, headers, body)
...
for k, v in pairs(__headers) do
	--Toolkit.Net.__trace("raw #"..k..":"..v)
	if (string.find(string.lower( v or ""), "chunked")) then
	  self.__isChunked = true;
	  Toolkit.Net.__trace("%s.%s::receive > Transfer-Encoding: chunked", 
		Toolkit.Net.__header, Toolkit.Net.__Http.__header, string.len(result));
   
	-- Modification pour récupérer le cookie. Ofwood Janvier 2015	
	elseif (string.find(string.lower( v or ""), "cookie")) then				
	cookie = string.sub(v, 12)
	   Toolkit.Net.__trace("%s.%s::receive > Cookie: %s", 
	Toolkit.Net.__header, Toolkit.Net.__Http.__header, cookie);                
	end
end
...
-- return budy response & cookie
 return response, status, err, cookie;
Voyons maintenant avec un exemple comment tirer profit de cette modification et mangeons des cookies!
 
La fonction login() authentifie l'utilisateur et retourne le contextID (dans la réponse json) et le cookie associé.
function login()
	local httpClient = Toolkit.Net.HttpRequest(ip, port)
	httpClient:setReadTimeout(Livebox.commandTimeOut)
	
	local uri = string.format("/authenticate?username=%s&password=%s", utilisateur, mot_de_passe)	
	local response, status, errorCode, cookie = httpClient:request("POST", uri, 
		{"User-Agent: FibaroHC2/1.0", "Content-Type: application/json"}, "" )
		
	if (errorCode == 0) and tonumber(status) == 200  then
		 local jsonTable = json.decode(response);
		 ContextID = jsonTable.data.contextID;
		return ContextID, cookie
	end
end

l'exemple suivant utilise le contextID et notre cookie pour une requête (l'état de l'interface WAN sur la LiveBox)

function getWANStatus(contextID, cookie)
	local httpClient = Toolkit.Net.HttpRequest(ip, port)
	httpClient:setReadTimeout(Livebox.commandTimeOut)
	
	local uri = "/sysbus/NMC:getWANStatus"  
	local params = [[
		{"parameters":{}} 
	]];

	-- Injection de X-Context et du Cookie dans les headers	
	local response, status, errorCode, cookie = httpClient:request("POST", uri, 
	{"User-Agent: FibaroHC2/1.0",  	
	  "Content-Type: application/json",
	  "X-Context: "..contextID,
	  "Cookie: "..cookie },
	 params);   
	
	if (errorCode == 0) and (status == 200) then
		local jsonTable = json.decode(response)		
		Return jsonTable.result.data
	end
end
 
Voici la liste des fonctions implémentées dans la version 1.0 du module. Il en existe d'autres, je n'ai pas encore tout recensé.

 

Livebox.login()              Authentification session utilisateur
Livebox.logout()             Fermeture session
Livebox.listTrunks()         Information téléphonie IP
Livebox.getIPTVStatus()      Etat IP TV
Livebox.getDSLStats()        Stats DSL (Erreurs)
Livebox.getMIBs()            Information lien dsl
Livebox.getWifiMIBs()        Information Wifi
Livebox.getWANStatus()       Etat de la connexion WAN
Livebox.reboot()             Redémarrage la livebox
Livebox.setwifi(mode)        Active/désactive le Wifi
Livebox.filtreMAC(flag)      Active/Désactive filtrage MAC address
Livebox.getWificomStatus()   Information Wifi public Orange

 

 

Voilà , ça donne l'idée générale et Orange n'ayant pas le monopole sur les APIs bien pourries,  je me suis dit que ça pourrait peut-être en aider d'autres qui se prennent la tête sur des intégrations nécessitant le support des cookies.
 
Enjoy!
merci pour vos retours (et votre indulgence)
 
 
Historique
13/01/2015 - v1.0 : version initiale

Livebox_VD.zip

  • Like 1
  • Upvote 13

Partager ce message


Lien à poster
Partager sur d’autres sites

Je viens de tester ca fonctionne très bien sur un livebox play 

merci 

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est un VD et non un plugin.

Dès que j'ai un peu  de temps je le teste.

Partager ce message


Lien à poster
Partager sur d’autres sites

il doit y avoir un moyen plus académique mais un truc tout simple que j'utilise :

 

- Télécharger les icones (avec le boutton change icon) sur la page de config du VD

- quand tes icones sont visibles dans la liste:

  MS IE: click-droit sur l'icone> Propriété. regarde à  la ligne (URL). tu devrais voir un truc dans le genre: http://192.168.1.21/fibaro/n_vicons/User1011.png

  Google Chrome: click-droit sur l'icone> inspecter element : l'url de l'icon devrait être surlignée. un truc genre: <img class="ChooseIcon" src="/fibaro/n_vicons/User1011.png">

 

  il est facile d'en déduire l'id. Dans mon example il s'agit de l'iD 1011.

Partager ce message


Lien à poster
Partager sur d’autres sites

Quoi tu as utilisé mon framework lua pour le HC2 Whouaaa !

 

Tu dois être bien tordu toi  :lol:

 

Bien joué ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

ça fonctionne. Merci @Ofwood.

Je crains qu'il n'y ai plus beaucoup de Livebox sur ce forum àpart ceux qui n'ont pas le choix :P

Partager ce message


Lien à poster
Partager sur d’autres sites

les livebox c'est comme les Koalas; c'est pas parce qu'il n'en reste plus beaucoup qu'il faut plus s'y intéresser :98:

 

@Krikroff, trop cool ton Toolkit. je ne peux plus m'en passer !

  • Upvote 2

Partager ce message


Lien à poster
Partager sur d’autres sites

Nickel ... adopté.

 

Le seul défaut, c'est que cela embarque le code de Krikroff ... mais bon, on fera avec :)

 

Plus sérieusement, le Wifi On/Off est une chose que je cherchais depuis longtemps alors merci beaucoup.

 

+1

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

 

Savez-vous si cela fonctionne avec une HCL ?

J'ai procédé à  sa mise en place mais tout reste vide.. pas d'IP pas de débit affiché.. nada

 

En vous remerciant

Partager ce message


Lien à poster
Partager sur d’autres sites

désolé Wimpy, ce module virtuel est écrit en lua. HC2 requise

Partager ce message


Lien à poster
Partager sur d’autres sites

On doit pouvoir faire la même chose :) je m'en vais donc chercher comment !!

Si quelqu'un à  une piste n'hésitez pas :)

 

Merci pour la réponse rapide.

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est top je vais tester dans pas longtemps....

 

Par contre à  votre avis est il possible de faire la meme chose avec le décodeur TV orange?

 

bravo encore

Partager ce message


Lien à poster
Partager sur d’autres sites

Petit retour : dans mon cas, le Wifi OFF/ON ne fonctionne pas ... mais attention, j'ai une Livebox Play ce qui peux complètement changer la donne. Dommage pour moi :(

 

M'en fait rebrancher ma veille Livebox :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Steven,

à‡a ne doit pas être grand-chose, probablement une histoire de paramètres pour la fonction wl0:setWLANConfig qui diffèrent avec la Livebox Play. 
qu'est ce qu'il dit le debug du bouton , tu peux me faire une copie?
Livebox.debug = true

Partager ce message


Lien à poster
Partager sur d’autres sites

@bateaujfp, je ne sais pas trop te répondre car je n'ai pas la TV orange.  Sais tu s'il existe une app web ou mobile pour contrôler le décodeur? si c'est le cas, on pourrait alors tracer les échanges entre l'app et le déco et piger l'API et les commandes. (je peux t'aider pour ça)

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai une livebox v2 et je peux utiliser sans problème le ON/OFF Wifi.

Par contre, pour te faire un petit retour sur l'utilisation, voici les points que j'ai remarqué:

- "Configuration en cours" dépasse de l'interface (ce n'est que du cosmétique :) )

- on ne peut pas utiliser le VD dans les scènes en bloc. Par ex, si on veut désactiver le WIFI, on n'a pas le choix ON/OFF dans la scène en bloc.

- Les noms qui apparaissent dans la scène en bloc c'est ID et non l'étiquette. On se retrouve avec button41 par ex.

 

 

Livebox conf

 

scene livebox

Partager ce message


Lien à poster
Partager sur d’autres sites

merci fab971, bien vu  ;). j'avais pas pensé du tout au mode bloc. 

je vais modifier le VD en conséquence

Partager ce message


Lien à poster
Partager sur d’autres sites

Petit retour : dans mon cas, le Wifi OFF/ON ne fonctionne pas ... mais attention, j'ai une Livebox Play ce qui peux complètement changer la donne. Dommage pour moi :(

 

M'en fait rebrancher ma veille Livebox :)

bonjour steven,

 

j'ai une livebox play et aucun problème pour le wifi ON/OFF, le module fonctionne bien chez moi

Partager ce message


Lien à poster
Partager sur d’autres sites
Invité

Merci beaucoup Ofwood, ça marche super sur ma Livebox Play, et le bouton Wifi est d'enfer !

Par contre petite question: j'ai voulu personaliser les icônes, juste pour le fun, et je me retrouve avec plein d'icône dans la liste de ceux disponibles pour ce VD.
Comment fait on pour effacer un de ces icônes ? J'ai bien cliqué sur "enlever le dernier élément", mais rien ne ce passe.

En fait je souhaiterai me débarasser du carré 3D bleu, mais je n'y arrive pas ...

Est-ce un bug, ou est-ce moi ? (je pense plus pour la deuxième option).

Merci d'avance

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour Ofwood

 

Je viens de tester ton sympatique "virtual device", avec ma livebox play connectée sur la fibre.

Résultat, seul l'IP apparait.

Débit up et down rien.

Wifi aucun changement.

Il semble que le jeu d'instruction différe pour la fibre.

Je suis prés à  tester si tu as une nouvelle version compatible.

 

J'ai aussi remarqué une petite étourderie sur "Intérogation Livebox..." au lieu de "Interrogation Livebox..."

 

Merci encore pour ton partage.

Partager ce message


Lien à poster
Partager sur d’autres sites

@MrGoose, je ne crois pas qu'il soit possible d'effacer l'icone d'origine pour les VD (le  carré 3D bleu). 

Le code du VD se charge de  changer la miniature en fonction du retour de l'état Livebox, il faut juste que tu ajustes les variables icon_ok, icon_nok et icon_unknown avec les IDs de tes icones

En revanche, lorsque tu cliques sur un bouton dans un VD,  l'icone carré bleu 3D apparait par défaut. Pour éviter ça, il faut que tu affectes aussi une icone pour chacun des boutons car ce n'est pas géré par le code de mon VD.

Perso j'ai mis la miniature correspondant à  l'état 'unknown' sur tous les boutons, comme ça quand je cliques, la miniature passe en 'grisé' le temps de l'execution de la commande.

Partager ce message


Lien à poster
Partager sur d’autres sites

@cyssou, merci pour ton retour. Tu as raison 'intérogation" ça pique un peu les yeux!  :P


 


au moins ta livebox renvoie une IP publique. C'est déjà  un bon début et ne devrait pas présenter de difficultés pour adapter le VD à  la fibre


Par contre il va falloir creuser un peu pour trouver la fonction ou les paramètres pour taper dans les info MIBs.


n'ayant pas de livebox fibre sous la main (c'est bien dommage) Il va falloir que tu m'aides et que tu me dises ce que tu vois quand tu manages ta livebox au travers de son interface web. On va jouer avec les dev tools de ton navigateur internet.


tu utilises  firefox, internet Explorer, chrome ou safari?


 


en gros il va falloir se connecter à  la livebox, aller dans l’onglet Assistance > Information Systeme et regarder le contenu des échanges pour les tab pages "general" et "dsl" (ou son équivalent avec la fibre). Les dev tools des navigateurs s'activent avec la touche F12


Rechercher dans la liste les appels API et la réponse de la livebox. 


Par exemple, pour les stats de connexion adsl, c'est  l'appel API  /sysbus/NeMo/intf/data:getMIBs. Voici une capture d'écran faite sous Google Chrome:


 


gallery_2306_192_355.png


 


J'aurais besoin du contenu de la page Headers et de la page Response pour adapter le VD. 


merci

Partager ce message


Lien à poster
Partager sur d’autres sites
Invité

@Ofwood : merci pour le retour sur les icones. Donc si je comprend bien pour l'instant, je ne peux pas supprimer tous les icones que j'ai mis en trop. Pas grâve, maintenant que je le sais, je vais me débrouiller avec ça ;-)

Partager ce message


Lien à poster
Partager sur d’autres sites

×