Closed matrixbx closed 1 year ago
Bonjour, hélas malgré plusieurs tentatives je n'ai jamais réussi à faire fonctionner cet accès à distance à la Livebox avec ma configuration. Ce qui fait que je ne peux pas tester...
Pour accéder aux icônes le programme reprend l'URL de base de la Livebox, y rajoute le chemin vers les icônes
assets/common/images/app_conf/
puis le nom du fichier correspondant.
Par exemple en accès local standard, l'URL de la première icône dans votre liste est
http://livebox.home/assets/common/images/app_conf/e_liveplug_cpl.png
En accès distant votre URL devient quelque chose comme ceci : https://monIP:monPort/
ou https://monNomDeDomaine.com:monPort/.
Vous pouvez tester avec n'importe quel navigateur si vous pouvez accéder aux icônes. Déjà quelle erreur voyez vous avec :
https://monIP:monPort/assets/common/images/app_conf/e_liveplug_cpl.png
et qu'est ce que cela donne en http ?
http://monIP:monPort/assets/common/images/app_conf/e_liveplug_cpl.png
Re salut, Attention livebox.home ne fonctionne que si on utilise le relais dns de la box ! les icônes sont bien affichées en http://192.168.1.1 ou https://monNomDeDomaine.ddns.net:monPort (sans authentification). Note, il y a un bug sur la lb4 en v4.65, après un reboot, l'admin distante n'est plus fonctionnelle, il faut la déconfigurer/reconfigurer.
Ce que je voulais dire c'est que le programme se contente de "coller" l'URL de la Livebox indiqué dans la configuration avec le chemin de l'icône.
Donc si votre URL en distant est du type
https://monnomdedomaine.ddns.net:monPort/
et que
https://monnomdedomaine.ddns.net:monPort/assets/common/images/app_conf/e_liveplug_cpl.png
fonctionne, alors je n'ai aucune explication sur pourquoi le programme n'y arrive pas car il utilise exactement la même URL...
Ce bout de code désactive aussi la vérif de sécurité due au certificat de la box ? J'ai la même erreur avec une LB5.
Oui tout comme pour vos scripts je n'ai pas trouvé d'autres solutions que désactiver la vérification de ce certificat... Voir la discussion dans ce ticket : https://github.com/p-dor/LiveboxMonitor/issues/29 Si cela provient de cela je n'ai malheureusement pas d'idée mais j'ai quelques doutes quand même... Et cela ne m'étonne pas que cela retourne la même erreur avec une LB5 ou LB6, elles sont très semblables à bien des égards.
Sinon pour aller plus loin pourriez vous afficher les logs que vous voyez quand l'erreur de chargement des icônes apparait ? Mettez le niveau 2 et on devrait en savoir plus sur les erreurs exactes retournées.
Rien d'explicite malheureusement. $ ./LiveboxMonitor.py 2>&1 | grep -v -E "InsecureRequestWarning|warnings.warn("
Cannot request device icon e_liveplug_cpl.png. Cannot request device icon e_camera_ip.png. Cannot request device icon e_ordibureau_Linux.png.
...
En regardant mon code de plus près je pense avoir une piste. Je pensais que j'utilisais la session en cours (via LmSession) pour aller chercher les icônes, mais en fait comme il n'y a pas besoin du tout d'être signé je fais un appel direct. Ce qui explique non seulement le manque de logs (tous les appels à LmSession sont très loggés) mais probablement aussi pourquoi cela ne fonctionne pas car ce ne sont QUE les appels via LmSession qui ont le check de certificat désactivé, pas cet appel direct.
Est-il possible pour vous de lancer le programme via les sources avec Python ? Si je vous passe une nouvelle version du module LmConfig.py vous sera-t'il possible de le tester ?
yep
Ok super, si vous modifiez le la fonction getDeviceIcon() dans le fichier LmConfig.py comme ceci qu'est ce que cela donne ? Si une erreur se produit vous devriez aussi voir plus de détails dans les logs.
### Get a device icon
@staticmethod
def getDeviceIcon(iDevice):
if LmConf.AllDeviceIconsLoaded:
return iDevice['PixMap']
else:
aIconPixMap = iDevice.get('PixMap', None)
if aIconPixMap is None:
aIconPixMap = QtGui.QPixmap()
try:
aIconData = requests.get(LmConf.LiveboxURL + ICON_URL + iDevice['Icon'], verify = LmConf.LiveboxURL.startswith('http://'))
if not aIconPixMap.loadFromData(aIconData.content):
LmTools.Error('Cannot load device icon ' + iDevice['Icon'] + '.')
except BaseException as e:
LmTools.Error('Error: {}. Cannot request device icon ' + iDevice['Icon'] + '.'.format(e))
iDevice['PixMap'] = aIconPixMap
return aIconPixMap
C'est mieux. J'ai bien les icônes dans l'onglet "Appareils", mais si j’essaie d'assigner un type dans 'Infos appareils", ça mouline dans le vide ("chargement des icônes .."), rien dans les logs et je dois tuer l'appli qui fige. Et toujours beaucoup de :
Ok merci. Alors c'est simplement dû au fait que cette requête n'a pas de timeout (erreur classique que j'avais corrigé aussi dans LmSession d'ailleurs), mais il n'est pas normal tout de même qu'aucune réponse ne revienne dans certains cas. En fait ce qui se passe quand vous cliquez sur "Assigner type..." c'est d'abord de provoquer le chargement de toutes les icônes restantes, qui n'ont pas été préalablement chargées via les types dans la liste des appareils. Et cela se fait exactement de la même manière, la méthode getDeviceIcon() est appelé en séquence pour chaque icône via la méthode loadDeviceIcons() juste après.
Si on met un timeout de 5 secondes, ce qui risque de se passer c'est d'avoir des erreurs de timeout mais au moins le programme ne freezera pas. L'effet sera aussi une icône définitivement vide pour le type demandé...
Remplacez juste cette ligne :
aIconData = requests.get(LmConf.LiveboxURL + ICON_URL + iDevice['Icon'], timeout = 5, verify = LmConf.LiveboxURL.startswith('http://'))
Ok, ça a été bien long, mais j'ai bien obtenu une liste d'icônes. Serait-il possible/envisageable de les conserver en cache après les avoir récupérées ? Tant que la version du firmware ne change pas, il me semble inutile de la rafraîchir.
Oui ce serait assez simple en fait. Mais je pense que je vais attendre de traiter cet autre ticket pour faire ça en même temps : https://github.com/p-dor/LiveboxMonitor/issues/26
Sinon je viens de pousser sur le repo le fix discuté ici. Merci pour avoir signalé le problème et aidé à sa résolution.
Version 1.1.1 publiée contenant ce fix.
Hello @matrixbx, le programme supporte maintenant le stockage des icônes dans un cache local, comme indiqué par le ticket https://github.com/p-dor/LiveboxMonitor/issues/26
Salut, sur une LB4.
Cannot request device icon e_liveplug_cpl.png. Cannot request device icon e_camera_ip.png. Cannot request device icon e_ordibureau_Linux.png. Cannot request device icon e_default_device.png. Cannot request device icon e_smart_plug.png. Cannot request device icon e_pointacceswifi.png. ...