• Forums
  •  » Logiciel
  •  »  tkPyDLB : Détails des infos LiveBox en Python

#1 25-01-2017 01:09:08

JoeKer
MER
Lieu: Dans le désert ...
Date d'inscription: 26-03-2008
Messages: 40232
Site web

tkPyDLB : Détails des infos LiveBox en Python

Bonjour.

Suite à différentes discussions relatives à la récupération de différentes données sur la LiveBox, je me suis attelé à écrire quelque chose de ressemblant à Liveboxinfo de shdf.

Ca commence à prendre forme, j'espère poster le code demain, mais vous trouverez déjà un premier résultat en troisième partie de ce message.

Pour les liens, voir un peu plus bas.

[Edit 23/03/2017]
Au niveau utilisation je n'ai pas donné beaucoup d'informations, car ça me semble assez naturel (mais ce n'est que ma perception smile).
Par contre, si vous devez poster un résultat sur le forum, SVP, utilisez l'onglet 'postage FONO', toutes les données utiles y sont disponibles, et "nettoyées" des informations confidentielles ...
[/Edit 23/03/2017]

Liens vers les binaires (les binaires sont en 32 bits pour que ça fonctionne sur les machines 32 bits et 64 bits) :
Version courante : 0.19
- tkPyDLB pour Windows 
- tkPyDLB pour Linux
Lien vers le fichier source (compatible Python 2.7 et Python 3) :
Version 0.19d.



Historique :

[Edit 27/02/2017]
Première version graphique (tkPyDLB au lieu de PyDLB).
Ajout des liens de téléchargement pour les binaires
[/Edit 27/02/2017]

[Edit 16/03/2017]
Mise à disposition du fichier source, compatible Python 3 et Python 2.7.
Pour compiler (produire le binaire), j'utilise "pyinstaller" avec la syntaxe suivante :
pyinstaller  --clean --windowed --onefile --hidden-import queue --noupx tkPyDLB_v0-14s.py -n tkPyDLB_v0-14
Mais le fichier source peut être utilisé directement avec Python.
[/Edit 16/03/2017]

[Edit 04/04/2017]
Réorganisation du message, information de version plus claire (demande de Markco).
[/Edit du 04/04/2017]

[Edit du 02/05/2017]
Mise à disposition de la version 0.17, voir message de publication
[/Edit du 02/05/2017]

[Edit du 30/07/2017]
Modification du titre ...
Avant : "PyDLB : Détails des infos LiveBox en Python"
Après : "tkPyDLB : Détails des infos LiveBox en Python"
[/Edit du 30/07/2017]

[Edit du 18/03/2017]
Mise à disposition de la version 0.18, correction d'un bug sur le DEBUG (merci Crabman smile)
[/Edit du 18/03/2017]

[Edit du 25/03/2017]
Mise à disposition de la version 0.18d, amélioration du DEBUG (merci Marckco smile)
[/Edit du 25/03/2017]




C:\Python34>python.exe PyDLB.py
Password:
Device Info
    Manufacturer          : Sagemcom
    ManufacturerOUI       : B8266C
    ModelName             : SagemcomFast3965_LB2.8
    ProductClass          : Livebox 3
    SerialNumber          : AN152XXXXXXXXXX
    HardwareVersion       : SG_LB3_1.2.1
    SoftwareVersion       : SG30_sip-fr-5.21.1.1
    HardwareVersion 2     :
    SoftwareVersion 2     : g5-r-sip-fr
    EnabledOptions        :
    SpecVersion           : 1.1
    ProvisioningCode      : AUTH.XXXX.XXXX.PMAP.XXXX.XXXX.VSIP.XXXX.XXXX.WCOM.XXXX.XXXX
    UpTime                : 452381
      Démarrée depuis le  : 19/01/2017 18:55:24
      Démarrée depuis     : 5 j. 5 h. 39 mn. 41 s.
    Country               : fr
    NumberOfReboots       : 1

WAN Status
    LinkType            : ethernet
    LinkState           : up
    MACAddress          : B8:26:XX:XX:XX:XX
    Protocol            : dhcp
    ConnectionState     : Bound
    LastConnectionError : None
    IPAddress           : 86.253.XX.XX
    RemoteGateway       : 86.253.XX.XX
    DNSServers          : 81.253.149.1,80.10.246.130
    IPv6Address         :
    Vlan ID             : 832
    MTU                 : None

Téléphonie IP
  Name                   : SIP-Trunk
    Enable                   : Enabled
    Protocol                 : DHCP
    Encapsulation            :
    InterfaceId              : 832
    Interface                : data
    PhysInterface            : Ethernet
    Etat SIP                 : Up
    Activation SIP           : Enabled
    Numéro d'annuaire SIP    : +33296XXXXXX

  Name                   : H323-Trunk
    Enable                   : Disabled
    Protocol                 : DHCP
    Encapsulation            :
    InterfaceId              : 851
    Interface                : voip
    PhysInterface            : Ethernet
    Etat H323                : Disabled
    Activation H323          : Disabled
    Numéro d'annuaire H323   :

Etat Wi-Fi
  Fréquence        : 2.4GHz
    SupportedBands     : 2.4GHz,5GHz,AUTO
    OperatingStandards : bgn
    Channel            : 1
    SSID               : Livebox-XXXX
    SSID visible       : True
    BSSID              : B8:26:XX:XX:XX:XX
    WEPKey             : XXXXXXXXXXXXXXXXXXXXXXXXXX
    PreSharedKey       :
    KeyPassPhrase      : XXXXXXXXXXXXXXXXXXXXXXXXXX
    ModeEnabled        : WPA-WPA2-Personal
    MACFiltering       : Off
    SelfPIN            : XXXXXXXX

  Fréquence        : 5GHz
    SupportedBands     : 2.4GHz,5GHz,AUTO
    OperatingStandards : an
    Channel            : 100
    SSID               : Livebox-XXXX
    SSID visible       : True
    BSSID              : B8:26:XX:XX:XX:XX
    WEPKey             : XXXXXXXXXXXXXXXXXXXXXXXXXX
    PreSharedKey       :
    KeyPassPhrase      : XXXXXXXXXXXXXXXXXXXXXXXXXX
    ModeEnabled        : WPA-WPA2-Personal
    MACFiltering       : Off
    SelfPIN            : XXXXXXXX

  Wi-Fi partagé
    SSID                : orange
    Status              : Activated
    Enable              : True

Statistiques de la ligne
  /!\ Résultats non significatifs avec un WAN EThernet
     ReceiveBlocks        : 0
     TransmitBlocks       : 0
     CellDelin            : 0
     LinkRetrain          : 0
     InitErrors           : 0
     InitTimeouts         : -1
     LossOfFraming        : 0
     ErroredSecs          : 0
     SeverelyErroredSecs  : 0
     FECErrors            : 0
     ATUCFECErrors        : 0
     HECErrors            : 0
     ATUCHECErrors        : 0
     CRCErrors            : 0
     ATUCCRCErrors        : 0

Etat des services TV
    IPTVStatus          : Available

Tous les "XX" ont été faits manuellement, il me reste à prévoir la copie filtrée avant publication.

Dernière modification par JoeKer (30-07-2017 19:46:31)


On a déjà vu des choses qui ne sont jamais arrivées ...
Suite à un vieux désaccord avec les admins du forum, cette signature indiquera qu'ils n'ont toujours pas remédié à leurs carences.

Hors ligne

 

#2 25-01-2017 12:47:22

shdf
Avant FONO j'avais une vie
Lieu: Maldives
Date d'inscription: 26-03-2012
Messages: 2867
Site web

Re: tkPyDLB : Détails des infos LiveBox en Python

clin_oeil_2up
Bravo !
Hier soir j'ai installé python sur mon PC (win 10) et fait quelques petits exemples en suivant des tutoriaux pour faire des interfaces graphiques, tkinter semble vraiment facile à utiliser, je pense que tu devrais arriver à nous pondre une version graphique portable sur linux/win big_smile


Livebox 4 + Décodeur TV4 - Distance NRA: 301m - VDSL2 90mb/18mb.
Utilitaire info Livebox: Voir mon "Site web" à gauche. Autres outils: Voir la section logiciel.

Hors ligne

 

#3 25-01-2017 13:44:15

Gipeca
"Ex-Modérateur"
Lieu: Dans le désert ...
Date d'inscription: 09-06-2009
Messages: 21359
Site web

Re: tkPyDLB : Détails des infos LiveBox en Python

Bonjour,

Tous mes encouragements à JoeKer

shdf a écrit:

tu devrais arriver à nous pondre une version graphique portable sur linux/win big_smile

et Mac également :
Python est censé fonctionner aussi bien sous Windows que sous Linux ou Mac OS, et on ne devrait avoir à effectuer aucun changement dans le code pour le passer d'un système à l'autre.

Hors ligne

 

#4 25-01-2017 14:43:48

kikito
Membre
Lieu: Auvergne
Date d'inscription: 23-01-2017
Messages: 28

Re: tkPyDLB : Détails des infos LiveBox en Python

clin_oeil_2up
idem, mes encouragements à JoeKer
si besoin d'un testeur et/ou coup de main, suis à la retraite, m'ennuie un peu lol


Livebox 4 Sercomm / NRA M2F63 à 2 kms / VDSL2 (si, si !)
Ubuntu depuis 2007

Hors ligne

 

#5 25-01-2017 22:32:29

shdf
Avant FONO j'avais une vie
Lieu: Maldives
Date d'inscription: 26-03-2012
Messages: 2867
Site web

Re: tkPyDLB : Détails des infos LiveBox en Python

Bonsoir,
Allez Joeker on attend !!! big_smile

Voici ce que je suis arrivé à faire en Python:

http://i.imgur.com/2tQ2Flr.png

@Gipeca, tu peux tester sous Mac ?

Le parser json simplifie la vie, plus besoin de regex !!!

Code:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import json
import requests
import requests.utils
from tkinter import *

# indiquer son mot de passe + IP LiveBox ici
password = 'xxxxxxxxx'
ip = '192.168.1.1'
############################################


auth = '{"service":"sah.Device.Information","method":"createContext","parameters":{"applicationName":"so_sdkut","username":"admin","password":"' + password + '"}}'
sah_headers = {'Content-Type':'application/x-sah-ws-1-call+json', 'Authorization':'X-Sah-Login'}

session = requests.Session()
r = session.post('http://' + ip + '/ws', data=auth, headers=sah_headers)

#Récupération des données de connexion
contextID = r.json()['data']['contextID']
Cookie = str(requests.utils.dict_from_cookiejar(session.cookies))

#Récupération des données WANStatus
params = '{"service":"NMC","method":"getWANStatus","parameters":{}}'
sah_headers = {'X-Context':contextID, 'Content-Type':'application/x-sah-ws-4-call+json', 'cookie':Cookie + '; sah/contextId=' + contextID}
r = session.post('http://' + ip + '/ws', data=params, headers=sah_headers)

LinkType = r.json()['data']['LinkType']
LinkState = r.json()['data']['LinkState']
MACAddress = r.json()['data']['MACAddress']
Protocol = r.json()['data']['Protocol']
ConnectionState = r.json()['data']['ConnectionState']
LastConnectionError = r.json()['data']['LastConnectionError']
IPAddress = r.json()['data']['IPAddress']
RemoteGateway = r.json()['data']['RemoteGateway']
DNSServers = r.json()['data']['DNSServers']
IPv6Address = r.json()['data']['IPv6Address']

################################################
#CREATION DE LA GUI                            #
################################################
# On crée une fenêtre, racine de notre interface
fenetre = Tk()
fenetre.wm_title("LiveBoxInfo PY 0.1")

cadre = Frame(fenetre, width=280, height=20, borderwidth=0)
cadre.pack(fill=BOTH)

#creation des infos
label1 = Label(fenetre, text=("LinkType : " + LinkType))
label2 = Label(fenetre, text=("LinkState : " + LinkState))
label3 = Label(fenetre, text=("MACAddress : " + MACAddress))
label4 = Label(fenetre, text=("Protocol : " + Protocol))
label5 = Label(fenetre, text=("ConnectionState : " + ConnectionState))
label6 = Label(fenetre, text=("LastConnectionError : " + LastConnectionError))
label7 = Label(fenetre, text=("IPAddress : " + IPAddress))
label8 = Label(fenetre, text=("RemoteGateway : " + RemoteGateway))
label9 = Label(fenetre, text=("DNSServers : " + DNSServers))
label10 = Label(fenetre, text=("IPv6Address : " + IPv6Address))

# On affiche les labels dans la fenêtre
label1.pack(side=TOP, anchor=W, fill=Y, expand=YES)
label2.pack(side=TOP, anchor=W, fill=Y, expand=YES)
label3.pack(side=TOP, anchor=W, fill=Y, expand=YES)
label4.pack(side=TOP, anchor=W, fill=Y, expand=YES)
label5.pack(side=TOP, anchor=W, fill=Y, expand=YES)
label6.pack(side=TOP, anchor=W, fill=Y, expand=YES)
label7.pack(side=TOP, anchor=W, fill=Y, expand=YES)
label8.pack(side=TOP, anchor=W, fill=Y, expand=YES)
label9.pack(side=TOP, anchor=W, fill=Y, expand=YES)
label10.pack(side=TOP, anchor=W, fill=Y, expand=YES)

# On démarre la boucle Tkinter qui s'interompt quand on ferme la fenêtre
fenetre.mainloop()

En espérant que ca aide Joeker à faire une GUI. big_smile
Bon je ne pollue pas plus le topic wink

Dernière modification par shdf (25-01-2017 22:42:22)


Livebox 4 + Décodeur TV4 - Distance NRA: 301m - VDSL2 90mb/18mb.
Utilitaire info Livebox: Voir mon "Site web" à gauche. Autres outils: Voir la section logiciel.

Hors ligne

 

#6 25-01-2017 22:56:38

Gipeca
"Ex-Modérateur"
Lieu: Dans le désert ...
Date d'inscription: 09-06-2009
Messages: 21359
Site web

Re: tkPyDLB : Détails des infos LiveBox en Python

Le problème c'est que je suis en LB2 et pas en LB4...
Bien que ne connaissant pas python, je vois que les instructions sont basées sur la nouvelle méthode d'authentification, qui n'est dispo que pour les LB3 et LB4.
Pour tester il faudrait modifier cela.

Comment tester ?
Enregistrer le script dans un fichier texte avec droit d'exécution et avec suffixe .py suffit-il ?
Que doit-il y avoir d'installé sur la machine ?
- python est (en principe) en natif sous OSX, mais est ce la bonne version ?
- tkinter, c'est un module supplémentaire à installer ?

Hors ligne

 

#7 25-01-2017 23:52:59

JoeKer
MER
Lieu: Dans le désert ...
Date d'inscription: 26-03-2008
Messages: 40232
Site web

Re: tkPyDLB : Détails des infos LiveBox en Python

Bonsoir.

Merci de vos soutiens, les amis (amies) !


Dommage que tu aies attendu que je m'y mette pour le faire, shdf smile
Depuis le temps que je t'ai dit de trouver un vrai parser JSON wink

Ce que tu ne dis pas, c'est avec quelle version de Python tu fais tourner ça (à priori, du Python 3 ...).

Tkinter est en principe installé de base avec n'importe quelle version de Python, mais je n'ai pas testé pour le moment ...
J'envisageais plutôt une piste wxWidgets, mais au vu de la simplicité avec Tkinter, ça fait réfléchir ...

[Edit]
J'ai testé ton code, shdf, et c'est édifiant ...
Ca simplifie énormément le boulot "graphique" !
A tel point que je ne serais pas étonné que tu te rabattes sur Python + Tkinter au lieu de AutoIT king

[/Edit]


Voici donc ce que j'ai pu concocter, en mode texte uniquement :

Code:

#!/usr/bin/env python3
# -*- coding: iso8859-9 -*-

# PyDLB.py
# Version 0.5
# Portage par JoeKer pour FONO sur la base de :
# - rene-d/sysbus (https://github.com/rene-d/sysbus)
# - fccagou/pylivebox (https://github.com/fccagou/pylivebox/blob/master/livebox/livebox.py)
# Merci de votre indulgence, je découvre Python ...

import urllib.request, urllib.parse, urllib.error
import json
import requests
import time
import sys
import getpass
import re



VERSION_LIVEBOX = 'lb3'
USER_LIVEBOX = 'admin'
URL_LIVEBOX = 'http://livebox'
password = 'admin'
quote='quote'

class Livebox:

    def __init__(self,url_prefix=URL_LIVEBOX):
        self._url_prefix = url_prefix

    def login(self):
        PASSWORD_LIVEBOX = password
        if PASSWORD_LIVEBOX == 'admin':
            PASSWORD_LIVEBOX=getpass.getpass()
        session = requests.Session()
        
        url_login = "%s/authenticate?username=admin&password=%s" % (self._url_prefix,password)

        values = {'username' : 'admin', 'password' : password }
        if VERSION_LIVEBOX != 'lb3' and VERSION_LIVEBOX != 'lb4':
            # On est probablement sur l'ancienne méthode d'authentification (avant décembre 2016)
            auth = { 'username':USER_LIVEBOX, 'password':PASSWORD_LIVEBOX }
            r = session.post(URL_LIVEBOX + '/authenticate', params=auth)
        else:
            # Cette méthode fonctionne avec les firmwares récents (fin décembre 2016) de la LB3 et de la LB4
            auth = '{"service":"sah.Device.Information","method":"createContext","parameters":{"applicationName":"so_sdkut","username":"%s","password":"%s"}}' % (USER_LIVEBOX, PASSWORD_LIVEBOX)
            sah_headers = { 'Content-Type':'application/x-sah-ws-1-call+json', 'Authorization':'X-Sah-Login' }
            r = session.post(URL_LIVEBOX + '/ws', data=auth, headers=sah_headers)

        if not 'contextID' in r.json()['data']:
            print("auth error", str(r.text))
            exit(1)

        self._lb_id=r.headers['Set-Cookie']
        self._sessid=(r.headers['Set-Cookie'].split('=',1)[1]).rsplit(';',1)[0]

        self._context_id=r.json()['data']['contextID']

    def _sysbus(self,question):
        return self._request("%s/sysbus/%s" % (self._url_prefix,question)
            , '{"parameters":{}}' )


    def _sysbus2(self,question):
        return self._request2("%s/sysbus/%s" % (self._url_prefix,question))

    def _ws(self, params):
        return self._request("%s/ws" % (self._url_prefix)
            , params , 'application/x-sah-ws-4-call+json')

        def _request(self,url, params, content_type='application/json'):
            sah_headers = { 'Content-Type':content_type, 'Cookie': self._lb_id, 'X-Context': self._context_id, 'X-Sah-Request-Type':'idle', 'X-Requested-With': 'XMLHttpRequest' }
            r = requests.post(url, data=params, headers=sah_headers)
            resp = r.json()
            return resp

        def _request2(self,url, content_type='application/json'):
            sah_headers = { 'Content-Type':content_type, 'Cookie': self._lb_id, 'X-Context': self._context_id, 'X-Sah-Request-Type':'idle', 'X-Requested-With': 'XMLHttpRequest' }
            r = requests.get(url, headers=sah_headers)
            resp = r.json()
            return resp

        def logout(self):
            sah_headers = { 'Content-Type':"application/x-www-form-urlencoded", 'Cookie': self._lb_id, 'X-Context': self._context_id, 'X-Sah-Request-Type':'idle', 'X-Requested-With': 'XMLHttpRequest' }
            r = requests.get("%s/logout" % (self._url_prefix), headers=sah_headers)
            return ""
    
    def voip_config(self):
        j = self._ws('{"service":"NMC","method":"getVoIPConfig","parameters":{}}')
        return j['status']

    def list_trunks(self):
        '''Information téléphonie IP'''
        j = self._sysbus('VoiceService/VoiceApplication:listTrunks')
        return j['result']

    def ip_tv_status(self):
        '''Etat IP TV'''
        return self._sysbus('NMC/OrangeTV:getIPTVStatus')

    def device_info(self):
        ''' Infos device '''
        j = self._ws('{"service":"DeviceInfo","method":"get","parameters":{}}')
        return j['status']

    def DSLStats(self):
        '''Information lien dsl'''
        j = self._ws('{"service":"NeMo.Intf.dsl0","method":"getDSLStats","parameters":{}}')
        return j['status']

    def wifi_com_status(self):
        '''Information Wifi public Orange)'''
        return self._sysbus('Wificom/OpenMode:getStatus')

    def wifi_mibs(self):
        '''Information Wifi'''
        j = self._ws('{"service":"NeMo.Intf.lan","method":"getMIBs","parameters":{"mibs":"wlanvap || wlanradio"}}')
        return j['status']

    def wan_status(self):
        '''Etat de la connexion WAN'''
        j = self._ws('{"service":"NMC","method":"getWANStatus","parameters":{}}')
        return j['data']

    def orange_services(self):
        j = self._ws(str('{"service":"OrangeServices","method":"getSubscriptionStatus","parameters":{"refresh":true}}'))
        return j

    def mtu(self):
        j = self._ws('{"service":"NeMo.Intf.data","method":"getFirstParameter","parameters":{"name":"MTU"}}')
        return j['status']

    def vlan_id(self):
        j = self._ws('{"service":"NeMo.Intf.data","method":"getFirstParameter","parameters":{"name":"VLANID"}}')
        return j['status']

    def ws_channel_id(self):
        j = self._ws('{"events":[{"handler":"sah.hgw.models"}]}')
        return j['channelid']

    def ws_get_devices(self, channel_id):
        j = self._ws('{"events":[{"handler":"sah.hgw.models"}],"channelid":%s}' % channel_id)
        return j


if __name__ == '__main__':
    lb = Livebox()
    lb.login()


    # Calculer le temps en secondes depuis EPOCH
    reftime = int(time.mktime(time.localtime()))
    DevInfo = lb.device_info()
    uptime = DevInfo['UpTime']
    starttime= reftime - uptime
    StartTime = time.ctime(starttime)
    Date_Demarrage = time.strftime("%d/%m/%Y %H:%M:%S", time.localtime(starttime))
    jours = str(int(uptime / 86400))
    heures =  str(int(uptime % 86400 / 3600))
    minutes = str(int(uptime % 86400 % 3600 / 60))
    secondes = str(int(uptime % 86400 % 3600 % 60))
    Start = jours + " j. " + heures + " h. " + minutes + " mn. " + secondes + " s." 

    print("[" + quote + "]\n")
    print("\nRésultats extraits le " + time.strftime("%d/%m/%Y à %H:%M:%S", time.localtime()) + "\n\n")
    # # Début de DeviceInfo
    DeviceInfo =  " Device Info" + "\n"
    DeviceInfo += "    Manufacturer          : " + DevInfo['Manufacturer'] + "\n"
    DeviceInfo += "    ManufacturerOUI       : " + DevInfo['ManufacturerOUI'] + "\n"
    DeviceInfo += "    ModelName             : " + DevInfo['ModelName'] + "\n"
    DeviceInfo += "    ProductClass          : " + DevInfo['ProductClass'] + "\n"
    DeviceInfo += "    SerialNumber          : " + re.sub('[0-9]{8}$','XXXXXXXX',DevInfo['SerialNumber'],0,0) + "\n"
    DeviceInfo += "    HardwareVersion       : " + DevInfo['HardwareVersion'] + "\n"
    DeviceInfo += "    SoftwareVersion       : " + DevInfo['SoftwareVersion'] + "\n"
    DeviceInfo += "    HardwareVersion 2     : " + DevInfo['AdditionalHardwareVersion'] + "\n"
    DeviceInfo += "    SoftwareVersion 2     : " + DevInfo['AdditionalSoftwareVersion'] + "\n"
    DeviceInfo += "    EnabledOptions        : " + DevInfo['EnabledOptions'] + "\n"
    DeviceInfo += "    SpecVersion           : " + DevInfo['SpecVersion'] + "\n"
    DeviceInfo += "    ProvisioningCode      : " + re.sub('[0-9]{4}','XXXX',DevInfo['ProvisioningCode'],0,0) + "\n"
    DeviceInfo += "    UpTime                : " + str(DevInfo['UpTime']) + "\n"
    DeviceInfo += "      Démarrée depuis le  : " + Date_Demarrage + "\n"
    DeviceInfo += "      Démarrée depuis     : " + Start + "\n"
    DeviceInfo += "    Country               : " + DevInfo['Country'] + "\n"
    DeviceInfo += "    NumberOfReboots       : " + str(DevInfo['NumberOfReboots']) + "\n"
    print(DeviceInfo)
    # # Fin de DeviceInfo
    
    print("[---]\n")
    # # Début de WanStatus
    mtu = str(lb.mtu())
    vlanid = str(lb.vlan_id())
    wanstatus = lb.wan_status()
    
    # On aura besoin plus loin de tester le type de lien
    LinkType = wanstatus['LinkType']
    
    WanStatus  = " WAN Status" + "\n"
    WanStatus += "    LinkType            : " + wanstatus['LinkType'] + "\n"
    WanStatus += "    LinkState           : " + wanstatus['LinkState'] + "\n"
    WanStatus += "    MACAddress          : " + re.sub('[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}$','XX:XX:XX:XX',wanstatus['MACAddress'],0,0) + "\n"
    WanStatus += "    Protocol            : " + wanstatus['Protocol'] + "\n"
    WanStatus += "    ConnectionState     : " + wanstatus['ConnectionState'] + "\n"
    WanStatus += "    LastConnectionError : " + wanstatus['LastConnectionError'] + "\n"
    WanStatus += "    IPAddress           : " + re.sub('\.[0-9]{1,3}\.[0-9]{1,3}$','.XX.XX',wanstatus['IPAddress'],0,0) + "\n"
    WanStatus += "    RemoteGateway       : " + re.sub('\.[0-9]{1,3}\.[0-9]{1,3}$','.XX.XX',wanstatus['RemoteGateway'],0,0) + "\n"
    WanStatus += "    DNSServers          : " + wanstatus['DNSServers'] + "\n"
    WanStatus += "    IPv6Address         : " + wanstatus['IPv6Address'] + "\n"
    WanStatus += "    Vlan ID             : " + vlanid + "\n"
    WanStatus += "    MTU                 : " + mtu + "\n"
    print(WanStatus)
    # # Fin de WanStatus
    
    # # Début de VoipConfig
    print("[---]\n")
    voip_config = lb.voip_config()
    
    trunks_list = lb.list_trunks()
    trunks_result = trunks_list['status']
    szTrunks = len(trunks_result)
    
    SIP_Trunk = {str(trunks_result[0])}
    VOIPConfig  = " Téléphonie IP" + "\n"
    VOIPConfig += "  Name                   : " + voip_config[0]['Name'] + "\n"
    VOIPConfig += "    Enable                   : " + voip_config[0]['Enable'] + "\n"
    VOIPConfig += "    Protocol                 : " + voip_config[0]['Protocol'] + "\n"
    VOIPConfig += "    Encapsulation            : " + voip_config[0]['Encapsulation'] + "\n"
    VOIPConfig += "    InterfaceId              : " + voip_config[0]['InterfaceId'] + "\n"
    VOIPConfig += "    Interface                : " + voip_config[0]['Interface'] + "\n"
    VOIPConfig += "    PhysInterface            : " + voip_config[0]['PhysInterface'] + "\n"
    VOIPConfig += "    Etat SIP                 : " + str(trunks_result[0]['trunk_lines'][0]['status']) + "\n"
    VOIPConfig += "    Activation SIP           : " + str(trunks_result[0]['trunk_lines'][0]['enable']) + "\n"
    VOIPConfig += "    Numéro d'annuaire SIP    : " + re.sub('[0-9]{8}$','XXXXXXXX',str(trunks_result[0]['trunk_lines'][0]['directoryNumber']),0,0) + "\n"
    if szTrunks > 1:
        H323_trunk = {str(trunks_result[1])}
        VOIPConfig += "\n"
        VOIPConfig += "  Name                   : " + voip_config[1]['Name'] + "\n"
        VOIPConfig += "    Enable                   : " + voip_config[1]['Enable'] + "\n"
        VOIPConfig += "    Protocol                 : " + voip_config[1]['Protocol'] + "\n"
        VOIPConfig += "    Encapsulation            : " + voip_config[1]['Encapsulation'] + "\n"
        VOIPConfig += "    InterfaceId              : " + voip_config[1]['InterfaceId'] + "\n"
        VOIPConfig += "    Interface                : " + voip_config[1]['Interface'] + "\n"
        VOIPConfig += "    PhysInterface            : " + voip_config[1]['PhysInterface'] + "\n"
        VOIPConfig += "    Etat H323                : " + str(trunks_result[1]['trunk_lines'][0]['status']) + "\n"
        VOIPConfig += "    Activation H323          : " + str(trunks_result[1]['trunk_lines'][0]['enable']) + "\n"
        VOIPConfig += "    Numéro d'annuaire H323   : " + re.sub('[0-9]{8}$','XXXXXXXX',str(trunks_result[1]['trunk_lines'][0]['directoryNumber']),0,0) + "\n"
    print(VOIPConfig)
    # # Fin de VoipConfig
    
    # # Début de Wi-Fi
    print("[---]\n")
    WifiData = lb.wifi_mibs()
    szWifData = len(WifiData['wlanradio'])
    WifiConf  = " Etat Wi-Fi" + "\n"
    WifiConf += "  Fréquence        : " + WifiData['wlanradio']['wifi0_ath']['OperatingFrequencyBand'] + "\n"
    WifiConf += "    SupportedBands     : " + WifiData['wlanradio']['wifi0_ath']['SupportedFrequencyBands'] + "\n"
    WifiConf += "    OperatingStandards : " + WifiData['wlanradio']['wifi0_ath']['OperatingStandards'] + "\n"
    WifiConf += "    Channel            : " + str(WifiData['wlanradio']['wifi0_ath']['Channel']) + "\n"
    WifiConf += "    SSID               : " + re.sub('.{4}$','XXXX',str(WifiData['wlanvap']['wl0']['SSID']),0,0) + "\n"
    WifiConf += "    SSID visible       : " + str(WifiData['wlanvap']['wl0']['SSIDAdvertisementEnabled']) + "\n"
    WifiConf += "    BSSID              : " + re.sub('[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}$','XX:XX:XX:XX',WifiData['wlanvap']['wl0']['BSSID'],0,0) + "\n"
    WifiConf += "    WEPKey             : " + re.sub('.','X',WifiData['wlanvap']['wl0']['Security']['WEPKey'],0,0) + "\n"
    WifiConf += "    PreSharedKey       : " + re.sub('.','X',WifiData['wlanvap']['wl0']['Security']['PreSharedKey'],0,0) + "\n"
    WifiConf += "    KeyPassPhrase      : " + re.sub('.','X',WifiData['wlanvap']['wl0']['Security']['KeyPassPhrase'],0,0) + "\n"
    WifiConf += "    ModeEnabled        : " + WifiData['wlanvap']['wl0']['Security']['ModeEnabled'] + "\n"
    WifiConf += "    MACFiltering       : " + WifiData['wlanvap']['wl0']['MACFiltering']['Mode'] + "\n"
    WifiConf += "    SelfPIN            : " + WifiData['wlanvap']['wl0']['WPS']['SelfPIN'] + "\n"
    if szWifData > 1:
        WifiConf += "\n"
        WifiConf += "  Fréquence        : " + WifiData['wlanradio']['wifi1_ath']['OperatingFrequencyBand'] + "\n"
        WifiConf += "    SupportedBands     : " + WifiData['wlanradio']['wifi1_ath']['SupportedFrequencyBands'] + "\n"
        WifiConf += "    OperatingStandards : " + WifiData['wlanradio']['wifi1_ath']['OperatingStandards'] + "\n"
        WifiConf += "    Channel            : " + str(WifiData['wlanradio']['wifi1_ath']['Channel']) + "\n"
        WifiConf += "    SSID               : " + re.sub('.{4}$','XXXX',str(WifiData['wlanvap']['wl1']['SSID']),0,0) + "\n"
        WifiConf += "    SSID visible       : " + str(WifiData['wlanvap']['wl1']['SSIDAdvertisementEnabled']) + "\n"
        WifiConf += "    BSSID              : " + re.sub('[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}$','XX:XX:XX:XX',WifiData['wlanvap']['wl1']['BSSID'],0,0) + "\n"
        WifiConf += "    WEPKey             : " + re.sub('.','X',WifiData['wlanvap']['wl1']['Security']['WEPKey'],0,0) + "\n"
        WifiConf += "    PreSharedKey       : " + re.sub('.','X',WifiData['wlanvap']['wl1']['Security']['PreSharedKey'],0,0) + "\n"
        WifiConf += "    KeyPassPhrase      : " + re.sub('.','X',WifiData['wlanvap']['wl1']['Security']['KeyPassPhrase'],0,0) + "\n"
        WifiConf += "    ModeEnabled        : " + WifiData['wlanvap']['wl1']['Security']['ModeEnabled'] + "\n"
        WifiConf += "    MACFiltering       : " + WifiData['wlanvap']['wl1']['MACFiltering']['Mode'] + "\n"
        WifiConf += "    SelfPIN            : " + WifiData['wlanvap']['wl1']['WPS']['SelfPIN'] + "\n"
    
    print (WifiConf)
    
    WifiCom = lb.wifi_com_status()
    WifiComm  = "  Wi-Fi partagé" + "\n"
    WifiComm += "    SSID                : " + WifiCom['result']['data']['SSID'] + "\n"
    WifiComm += "    Status              : " + WifiCom['result']['data']['Status'] + "\n"
    WifiComm += "    Enable              : " + str(WifiCom['result']['data']['Enable']) + "\n"
    print (WifiComm)
    # # Fin de Wi-Fi
    
    
    
    # # Début de getDSLStats
    print("[---]\n")
    dslstats = lb.DSLStats()
    # initTimeouts = dslstats['InitTimeouts']
    # if initTimeouts == 4294967295:
        # initTimeouts = -1
        
    DSLStats  = " Statistiques de la ligne" + "\n" 
    if LinkType == "ethernet":
        DSLStats += "  /!\ Résultats non significatifs avec un WAN Ethernet" + "\n"
    
    DSLStats += "     ReceiveBlocks        : " + str(dslstats['ReceiveBlocks']) + "\n" 
    DSLStats += "     TransmitBlocks       : " + str(dslstats['TransmitBlocks']) + "\n" 
    DSLStats += "     CellDelin            : " + str(dslstats['CellDelin']) + "\n" 
    DSLStats += "     LinkRetrain          : " + str(dslstats['LinkRetrain']) + "\n" 
    DSLStats += "     InitErrors           : " + str(dslstats['InitErrors']) + "\n" 
    DSLStats += "     InitTimeouts         : " + str((dslstats['InitTimeouts'] ^0x80000000) - 0x80000000) + "\n"  
    DSLStats += "     LossOfFraming        : " + str(dslstats['LossOfFraming']) + "\n" 
    DSLStats += "     ErroredSecs          : " + str(dslstats['ErroredSecs']) + "\n" 
    DSLStats += "     SeverelyErroredSecs  : " + str(dslstats['SeverelyErroredSecs']) + "\n" 
    DSLStats += "     FECErrors            : " + str(dslstats['FECErrors']) + "\n" 
    DSLStats += "     ATUCFECErrors        : " + str(dslstats['ATUCFECErrors']) + "\n" 
    DSLStats += "     HECErrors            : " + str(dslstats['HECErrors']) + "\n" 
    DSLStats += "     ATUCHECErrors        : " + str(dslstats['ATUCHECErrors']) + "\n" 
    DSLStats += "     CRCErrors            : " + str(dslstats['CRCErrors']) + "\n" 
    DSLStats += "     ATUCCRCErrors        : " + str(dslstats['ATUCCRCErrors']) + "\n" 
    print(DSLStats)
    # # Fin de getDSLStats
    
    # # Début de IPTVStatus
    iptvstatus = lb.ip_tv_status()['result']
    IPTV_Status  = " Etat des services TV" + "\n"
    IPTV_Status += "    IPTVStatus          : " + iptvstatus['data']['IPTVStatus'] + "\n"
    print(IPTV_Status)
    # # Fin de IPTVStatus
    print("[/" + quote + "]\n")
    # # Début de OrangeServices
    # Ne fonctionne pas sur LB3 et antérieures en janvier 2017
    # print((lb.orange_services()))
    # # Fin de OrangeServices
    
    # # Début de ConnectedDevices
    # Pas implémenté
    # print((lb.ws_get_devices(lb.ws_channel_id())))
    # # Fin de ConnectedDevices
    
    ## Déconnexion
    print((lb.logout()))

C'est écrit pour Python 3 (3.4 chez moi).
Je l'ai mis au point sous Windows (y'a pas Notepad++ sous Linux neutral), mais avant la mise en forme pour le postage sur forum, ça tournait sous Linux.

[Edit]
Testé sous Linux Mint avec Python 3.
Il peut y avoir un problème avec les caractères accentués, dans ce cas, à la ligne 2, changer :

# -*- coding: iso8859-9 -*-

par

# -*- coding: utf-8 -*-


[/Edit]

Ca devrait fonctionner avec les LB2, LB3 et LB4, mais je n'ai testé qu'avec ma LB3 en mode fibre ...

Le résultat est préformaté pour poster sur FONO, avec filtrage des infos confidentielles.

@Markco, j'espère que ça ira plus vite que sous Wine wink




Edit 26/01/2017 22:16 : Postage d'une version 0.2
  - Correction du saut de ligne parasite en ligne 340
  - Correction des listes 'à indice' (Wi-Fi, voipConfig) (non vérifiable chez moi en réel, mais marche avec des données "simulées").
Edit 29/01/2017 18:43 : Version 0.3
- #!/usr/bin/env python3 (n'est nécessaire que si on tape "./PyDLB.py" dans la console, mais c'est plus cohérent smile)
- "if szTrunks > 1:" et "if szWifData > 1:" (belle bourde ...)
- Créé une variable "quote" contenant 'quote' (compatibilité FONO)
Edit 31/01/2017 20:05 : Version 0.4
- Correction sur balise ouvrante quote
- Correction sur InitTimeouts pour avoir un entier signé sur 32 bits quel que soit le processeur
Edit 01/02/2017 19:10 : Version 0.5
- Modifications proposées par crabman

Dernière modification par JoeKer (01-02-2017 19:10:02)


On a déjà vu des choses qui ne sont jamais arrivées ...
Suite à un vieux désaccord avec les admins du forum, cette signature indiquera qu'ils n'ont toujours pas remédié à leurs carences.

Hors ligne

 

#8 26-01-2017 13:19:50

kikito
Membre
Lieu: Auvergne
Date d'inscription: 23-01-2017
Messages: 28

Re: tkPyDLB : Détails des infos LiveBox en Python

Salut.
il y a un saut de ligne en trop ligne 340

Code:

    print("[/quote]
\n")

(y'a pas Notepad++ sous Linux)

ça peut être: https://github.com/notepadqq/notepadqq

et bravo peace


Livebox 4 Sercomm / NRA M2F63 à 2 kms / VDSL2 (si, si !)
Ubuntu depuis 2007

Hors ligne

 

#9 26-01-2017 15:20:09

shdf
Avant FONO j'avais une vie
Lieu: Maldives
Date d'inscription: 26-03-2012
Messages: 2867
Site web

Re: tkPyDLB : Détails des infos LiveBox en Python

Autoit utilise Scite qui est gratuit et qui a une coloration syntaxique pour quasiment tous les langages:
http://www.scintilla.org/SciTEDownload.html
il y a une version pour linux, et pour debian/ubuntu il y a un package dispo : apt-get install scite big_smile

Dernière modification par shdf (26-01-2017 15:21:52)


Livebox 4 + Décodeur TV4 - Distance NRA: 301m - VDSL2 90mb/18mb.
Utilitaire info Livebox: Voir mon "Site web" à gauche. Autres outils: Voir la section logiciel.

Hors ligne

 

#10 26-01-2017 18:06:06

kikito
Membre
Lieu: Auvergne
Date d'inscription: 23-01-2017
Messages: 28

Re: tkPyDLB : Détails des infos LiveBox en Python

@JoeKer

j'ai un blocage à la ligne 238:

Code:

Exception "IndexError"
list index out of range
File: /home/christian/Bureau/lb.py, Line: 238

dans trunks_list et donc dans trunks_result je n'ai qu'une seule instance "0" (pas de "1")  ? ? ?
la LB4 ne gérerait plus le H323 ? ? ?
d'ou plantage larme

edit:
le H323 existe toujours, mais chez moi, je suis en SIP et pas en H323,
donc c'est peut-être normal que le trunks_result[1] n'existe pas ?

Dernière modification par kikito (26-01-2017 18:52:45)


Livebox 4 Sercomm / NRA M2F63 à 2 kms / VDSL2 (si, si !)
Ubuntu depuis 2007

Hors ligne

 

#11 26-01-2017 22:22:53

JoeKer
MER
Lieu: Dans le désert ...
Date d'inscription: 26-03-2008
Messages: 40232
Site web

Re: tkPyDLB : Détails des infos LiveBox en Python

Bonsoir.

@kikito : Désolé pour les erreurs smile
C'est corrigé (enfin, j'espère ...), voir le message qui contient le code.
Le H323 doit être progressivement abandonné. Je ne sais à quel stade ça en est, mais c'est très probablement l'explication.

@shdf : Oui, je connais Scite sous Linux, mais il est loin derrière Notepad++ (même si c'est un très bon éditeur) smile

Faudra que je jette un oeil à notepadqq smile


On a déjà vu des choses qui ne sont jamais arrivées ...
Suite à un vieux désaccord avec les admins du forum, cette signature indiquera qu'ils n'ont toujours pas remédié à leurs carences.

Hors ligne

 

#12 26-01-2017 23:21:13

Gipeca
"Ex-Modérateur"
Lieu: Dans le désert ...
Date d'inscription: 09-06-2009
Messages: 21359
Site web

Re: tkPyDLB : Détails des infos LiveBox en Python

Bonsoir,

Pour ce qui est du Mac, ça ne fonctionne pas...
  --> No module named request

S'il faut importer des modules complémentaires, via des commandes du terminal, je jette l'éponge. Non pas que je ne sache pas faire, mais c'est un problème de concept.

La philosophie qui nous a conduit joseph25b et moi à faire les deux programmes pour Mac, était d'aboutir à des applis utilisables par Mme MICHU. clin_oeil_up

Et la famille MICHU veut juste appuyer sur le bouton, et que ça fonctionne quelque soit sa LB (2, 3 ou 4) ADSL ou VDSL.
C'est ce que font nos programmes Mac, avec ce qui est nativement fourni dans OSX.
Exemple tout bête: pas besoin de rentrer dans le code ou dans un fichier .ini pour saisir l'IP et le mot de passe, c'est pris en compte par une boîte de dialogue de l'appli et le MdP n'est pas stocké, en clair quelque part...

S'il faut tripatouiller, ce n'est pas ce que je recherche comme solution.
A titre personnel, bien sûr que je bidouille sur le Mac, mais pour moi.
Pour réaliser une appli qui est destinée à d'autres utilisateurs, ça ne correspond pas à ma vision des choses: le livrable doit être immédiatement fonctionnel.

C'est sans doute plus facile pour le programmeur d'utiliser le module "request" (et sans doute d'autres, qu'il faut importer) plutôt que "curl" qui est nativement disponible, mais c'est désastreux pour l'utilisateur final puisque le résultat est une appli inutilisable par Mme MICHU qui ne sait pas ce qu'est un module, une bibliothèque, un framework...

Désolé, ce n'est pas ma vision d'une appli destinée à la famille MICHU.


Mais continuez, ça me rappelle mon passé Windowsien, ... que je ne regrette pas.   king

Hors ligne

 

#13 26-01-2017 23:48:12

JoeKer
MER
Lieu: Dans le désert ...
Date d'inscription: 26-03-2008
Messages: 40232
Site web

Re: tkPyDLB : Détails des infos LiveBox en Python

Hélas, oui, il va probablement falloir mettre les mains dans le cambouis, et il se peut que des modules manquent ...

Prérequis : Python 3 (Python 3.4 pour moi, ce qui n'est pas la version la plus récente).
J'ai fait des essais en convertissant avec Python 2.7, et ça a fonctionné, mais pas du premier coup.

--> No module named request

Ce serait plutôt

--> No module named requests

requests" avec un "s" à la fin, sinon, ça craint ...

Essaye avec un "pip install requests", ça devrait être suffisant.

En principe, "pip" est installé avec tous les "Python" ...
Et dans les modules installés, je n'ai eu à installer que "requests".


A terme, je n'abandonne pas l'idée d'avoir un exécutable par OS, mais il y a du chemin à faire !


On a déjà vu des choses qui ne sont jamais arrivées ...
Suite à un vieux désaccord avec les admins du forum, cette signature indiquera qu'ils n'ont toujours pas remédié à leurs carences.

Hors ligne

 

#14 27-01-2017 09:01:24

Gipeca
"Ex-Modérateur"
Lieu: Dans le désert ...
Date d'inscription: 09-06-2009
Messages: 21359
Site web

Re: tkPyDLB : Détails des infos LiveBox en Python

Bonjour,

Non, non, il n'y a pas de "s" dans le message d'erreur.

C'est après cette ligne que ça coince:

Code:

import urllib.request, urllib.parse, urllib.error

Et "request" n'a pas de "s" dans cette ligne de code.

Voici la version de python qui est en standard sur mon Mac OSX 10.11:

Python 2.7.10 (default, Oct 23 2015, 19:19:21)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin

Je ne sais pas comment cela a évolué de OSX 10.6 à MacOS 10.12...


Mettre les mains dans le cambouis, pour le programmeur: oui, bien sûr.
Mais si je dois installer le module manquant, il faudra bien que Mme MICHU ait à utiliser "pip install requests"...
Et ça, ce n'est pas le but. Ce n'est pas comme cela que je conçois la chose finale...

Eternel débat de la portabilié et du langage compilé vs langage interprété...

Hors ligne

 

#15 27-01-2017 10:23:52

kikito
Membre
Lieu: Auvergne
Date d'inscription: 23-01-2017
Messages: 28

Re: tkPyDLB : Détails des infos LiveBox en Python

pour alimenter la conversation big_smile , je me suis amusé à installer http://eric-ide.python-projects.org/
le import urllib.request, urllib.parse, urllib.error passe très bien en utilisant eric, mais bloque en lançant le soft directement ?
faut peut-être chercher par la ?

P.S. pour info, je suis comme toi @JoeKer, je connaissais pas python la semaine dernière . . .

P.S.2 @JoeKer tu as encore oublié le saut de ligne en trop lol

Dernière modification par kikito (27-01-2017 10:34:25)


Livebox 4 Sercomm / NRA M2F63 à 2 kms / VDSL2 (si, si !)
Ubuntu depuis 2007

Hors ligne

 

#16 27-01-2017 12:20:50

shdf
Avant FONO j'avais une vie
Lieu: Maldives
Date d'inscription: 26-03-2012
Messages: 2867
Site web

Re: tkPyDLB : Détails des infos LiveBox en Python

@gipeca
le request/requests je crois que c'est lié a la version de pyton utilisé (2 ou 3), j'ai vu le meme genre de problème avec Tkinter et tkinter (sans majuscule).

J'ai désinstallé python, par rage de ne pas avoir pu compiler un exécutable PC apres plusieurs heures de tentatives.


Livebox 4 + Décodeur TV4 - Distance NRA: 301m - VDSL2 90mb/18mb.
Utilitaire info Livebox: Voir mon "Site web" à gauche. Autres outils: Voir la section logiciel.

Hors ligne

 

#17 27-01-2017 20:19:29

JoeKer
MER
Lieu: Dans le désert ...
Date d'inscription: 26-03-2008
Messages: 40232
Site web

Re: tkPyDLB : Détails des infos LiveBox en Python

Bonsoir.

Oui !
Python 2 : request
Python 3 : requests

J'ai bien précisé qu'il y a des adaptations à faire pour le faire tourner en Python 2, et j'ai fait le choix d'écrire en Python 3 d'une part parce que les morceaux de code dont je me suis inspiré étaient en Python 3, et d'autre part parce que Python 2 n'évolue plus beaucoup (appelé à disparaître) ...
Il existe des outils pour convertir de Python 2 en Python 3 (2to3) et l'inverse (3to2), mais ça implique du debug ...

@kikito : Non, je n'oublie pas le saut de ligne, c'est FONO qui le rajoute quand je poste le code, à cause de '['/quote']' (qui ne devrait pas être interprété puisqu'il est dans une balise "code", mais je n'y peux rien neutral

J'ai modifié dans le code en remplaçant par "print("[/quote" +"]\n")"
Ca fonctionnera, mais c'est pas très propre sad

@Gipeca : Avant de pouvoir livrer un exécutable, il faudra le mettre au point, et pour ça, il vaut mieux travailler avec les sources d'abord.
Sinon, on va se rajouter du travail à faire fonctionner le compilateur neutral


On a déjà vu des choses qui ne sont jamais arrivées ...
Suite à un vieux désaccord avec les admins du forum, cette signature indiquera qu'ils n'ont toujours pas remédié à leurs carences.

Hors ligne

 

#18 28-01-2017 00:23:14

joseph25b
Membre
Date d'inscription: 13-10-2015
Messages: 77

Re: tkPyDLB : Détails des infos LiveBox en Python

Bonsoir aux charmeurs de Python

Gipeca a écrit:

Je ne sais pas comment cela a évolué de OSX 10.6 à MacOS 10.12...

Sur Macos X 10.7.5 cohabitent plusieurs versions de Python dont la dernière est la 2.7.1
Pour 10.6, je je pense que c'est aussi le cas, mais comme Gipeca l'a déjà dit, notre philosophie est de fournir un utilitaire "clé en main" pour l'utilisateur néophyte, ou pas.
Après il est vrai qu'on aimerait avoir sur Mac des possibilités de graphes comme ceux que fait le programme écrit par Flagwatch avec Cacti, mais là encore ce qui nous arrête c'est que ça demande pour l'utilisateur final d'aller faire quelques installations de modules et passer des lignes de commande ésotériques.

Toutefois avec Python 2.7.1 installé d'office avec OS X, il y a peut-être une piste à suivre, si on arrive à interfacer ça de façon transparente pour l'utilisateur final ?


LIVEBOX PLAY SG30_sip-fr-6.23.20.1     ADSL 2+ - Synchro 15 Mb/s Mac OSX 10.11.6

Hors ligne

 

#19 28-01-2017 10:46:54

shdf
Avant FONO j'avais une vie
Lieu: Maldives
Date d'inscription: 26-03-2012
Messages: 2867
Site web

Re: tkPyDLB : Détails des infos LiveBox en Python

il n'y a que le développeur qui a besoin de l'environnement de programmation avec la version de python adéquat, tous les modules nécessaires, etc...il suffit ensuite de compiler le projet en un exécutable. L'utilisateur final n'aura besoin que de l'exécutable et pas besoin d'installer quoi que ce soit d'autre.


Livebox 4 + Décodeur TV4 - Distance NRA: 301m - VDSL2 90mb/18mb.
Utilitaire info Livebox: Voir mon "Site web" à gauche. Autres outils: Voir la section logiciel.

Hors ligne

 

#20 28-01-2017 11:08:58

Gipeca
"Ex-Modérateur"
Lieu: Dans le désert ...
Date d'inscription: 09-06-2009
Messages: 21359
Site web

Re: tkPyDLB : Détails des infos LiveBox en Python

Bonjour,

Si tu le dis...  clin_oeil_up

Mais, pour le moment, je n'ai pas envie (ni le temps) de m'investir dans python.
Je jugerais sur le résultat compilé.
A partir de là, ma position évoluera peut être...

Hors ligne

 

#21 28-01-2017 11:51:55

shdf
Avant FONO j'avais une vie
Lieu: Maldives
Date d'inscription: 26-03-2012
Messages: 2867
Site web

Re: tkPyDLB : Détails des infos LiveBox en Python

Ben c'est surtout pour joeker, s'il arrive a faire un logiciel avec une GUI, et qu'il trouve comment compiler le projet sous win/mac/linux...Bingo.
Moi, j'ai passé 4h avec avec cx_freeze à essayer de compiler le tout petit truc que j'ai fait plus haut,  et le projet compilé me donnait des erreurs de modules qu'il ne trouvait pas, je n'ai pas bien compris le principe et ca m'a saoulé...hmm
Ca marchait en interprété et pas en compilé...


Livebox 4 + Décodeur TV4 - Distance NRA: 301m - VDSL2 90mb/18mb.
Utilitaire info Livebox: Voir mon "Site web" à gauche. Autres outils: Voir la section logiciel.

Hors ligne

 

#22 29-01-2017 09:05:49

Markco
J'y suis, j'y reste !
Lieu: ~ de Dax (40)
Date d'inscription: 25-01-2008
Messages: 668

Re: tkPyDLB : Détails des infos LiveBox en Python

Bon je nage complet dans tout ça, si j'ai bien compris il faut faire un c/c de tout le code dans un fichier texte et le rendre executable et de le lancer avec le terminal, si c'est bien ça et bien ça marche pas chez moi.


Linux Mint : 19.1 - Kernel : 5.0.0-36_64bits /-/ Lb 4 - Fw: 3.63.8 (Sagemcom)

Hors ligne

 

#23 29-01-2017 10:20:43

shdf
Avant FONO j'avais une vie
Lieu: Maldives
Date d'inscription: 26-03-2012
Messages: 2867
Site web

Re: tkPyDLB : Détails des infos LiveBox en Python

tu tapes bien : python3 nom_du_fichier.py


Livebox 4 + Décodeur TV4 - Distance NRA: 301m - VDSL2 90mb/18mb.
Utilitaire info Livebox: Voir mon "Site web" à gauche. Autres outils: Voir la section logiciel.

Hors ligne

 

#24 29-01-2017 11:45:25

kikito
Membre
Lieu: Auvergne
Date d'inscription: 23-01-2017
Messages: 28

Re: tkPyDLB : Détails des infos LiveBox en Python

Bonjour.

@JoeKer

je pense avoir trouvé quelques erreurs: (pas taper, moi débutant big_smile)

lignes 250 le test est faux, il faut remplacer

Code:

    if szTrunks != 0:

par

Code:

    if szTrunks > 1:

idem pour la ligne 284:

Code:

    if szWifData != 0:

par:

Code:

    if szWifData > 1:

enfin, dans la partie Wifi:
  wifi0_ath n'existe pas: ce serait  wifi0_bcm
  wifi1_ath n'existe pas: ce serait  wifi0_quan
  wl1       n'existe pas: ce serait  eth6  (sans garantie ?)
un spécialiste des entrailles de la LB4 pourrait confirmer ?

Dernière modification par kikito (29-01-2017 11:57:42)


Livebox 4 Sercomm / NRA M2F63 à 2 kms / VDSL2 (si, si !)
Ubuntu depuis 2007

Hors ligne

 

#25 29-01-2017 12:00:16

kikito
Membre
Lieu: Auvergne
Date d'inscription: 23-01-2017
Messages: 28

Re: tkPyDLB : Détails des infos LiveBox en Python

@Markco @shdf

je pense que c'est mieux de mettre

Code:

#!/usr/bin/env python3

au lieu de

Code:

#!/usr/bin/env python

au début du code ?


Livebox 4 Sercomm / NRA M2F63 à 2 kms / VDSL2 (si, si !)
Ubuntu depuis 2007

Hors ligne

 
  • Forums
  •  » Logiciel
  •  »  tkPyDLB : Détails des infos LiveBox en Python

Powered by PunBB
© Copyright 2002–2008 PunBB