Closed brenard closed 5 months ago
Awesome. Afterwards I put a large part of the type GET APIs but I was well aware that some require params that I did not pass
Afterwards I slipped this into the Home Assistant addon but it is mainly used to have a test set for the aiosysbus API.
if behind you have the possibility to post a diagnostic file. I can to code a whole section of tests in aiosysbus.
We could thus code aiosysbus asynchronously. this will be more efficient by using the Epenet's PR. I never merged because I no longer have livebox and there are a lot of people who use the addon. I never took the risk.
Je viens voir que tu étais Francais. Donc si tu es chaud pour tester aiosysbus en mode asynchrone. Je suis preneur.
Awesome. Afterwards I put a large part of the type GET APIs but I was well aware that some require params that I did not pass
Afterwards I slipped this into the Home Assistant addon but it is mainly used to have a test set for the aiosysbus API.
Effectivement, c'est un peu trop verbeux et détaillé actuellement au vu des fonctionnalités aujourd'hui proposées par l'intégration. À mon sens, tout ce qui est dans api_raw
pourrait en réalité est supprimé, car ce qui est dans les données du coordinator (data
) est déjà très complet. On pourrait cependant y conserver les méthodes utilisées (indirectement) par le coordinator pour mettre à jour ses données, histoire d'avoir quand même les données brutes à ce niveau.
if behind you have the possibility to post a diagnostic file. I can to code a whole section of tests in aiosysbus.
J'ai pris le temps de regarder ce qu'il y avait dans le fichier et j'ai fait en sorte de passer le api_raw
dans async_redact_data
et j'ai ajouté la réécriture du mot de passe Wifi récupéré en clair par la méthode api.connection.get_lan_MIBS
. Même comme ça, ça reste un peu intrusif, donc je préférais ne pas te le partager publiquement. En outre, pas de souci pour te l'envoyer directement. Je ne trouve pas ton mail dans ton profil github, mais le mien y est : peux-tu m'envoyer un mail que je te renvoie le fichier en retour ?
We could thus code aiosysbus asynchronously. this will be more efficient by using the Epenet's PR. I never merged because I no longer have livebox and there are a lot of people who use the addon. I never took the risk.
Pas de souci. Si j'ai bien compris, ton idée est à terme d'écrire un jeu de tests unitaires. Si tel est le cas, j'imagine que tu chercheras à mocker l'API de la livebox et dans ce cas, si tu utilises et publie les données que je te fournis, merci de prendre le temps de les offusquer en détails, je pense notamment à tout ce qui est adresses IP (notamment v6, par définition routées depuis le net, mais v4 idéalement aussi), adresses MAC, nom de périphériques, ... N'hésite pas à me partager ton code avant publication si c'est plus simple pour toi, je m'occuperai de l'offuscation.
Awesome. Afterwards I put a large part of the type GET APIs but I was well aware that some require params that I did not pass Afterwards I slipped this into the Home Assistant addon but it is mainly used to have a test set for the aiosysbus API.
Effectivement, c'est un peu trop verbeux et détaillé actuellement au vu des fonctionnalités aujourd'hui proposées par l'intégration. À mon sens, tout ce qui est dans
api_raw
pourrait en réalité est supprimé, car ce qui est dans les données du coordinator (data
) est déjà très complet. On pourrait cependant y conserver les méthodes utilisées (indirectement) par le coordinator pour mettre à jour ses données, histoire d'avoir quand même les données brutes à ce niveau.if behind you have the possibility to post a diagnostic file. I can to code a whole section of tests in aiosysbus.
J'ai pris le temps de regarder ce qu'il y avait dans le fichier et j'ai fait en sorte de passer le
api_raw
dansasync_redact_data
et j'ai ajouté la réécriture du mot de passe Wifi récupéré en clair par la méthodeapi.connection.get_lan_MIBS
. Même comme ça, ça reste un peu intrusif, donc je préférais ne pas te le partager publiquement. En outre, pas de souci pour te l'envoyer directement. Je ne trouve pas ton mail dans ton profil github, mais le mien y est : peux-tu m'envoyer un mail que je te renvoie le fichier en retour ?We could thus code aiosysbus asynchronously. this will be more efficient by using the Epenet's PR. I never merged because I no longer have livebox and there are a lot of people who use the addon. I never took the risk.
Pas de souci. Si j'ai bien compris, ton idée est à terme d'écrire un jeu de tests unitaires. Si tel est le cas, j'imagine que tu chercheras à mocker l'API de la livebox et dans ce cas, si tu utilises et publie les données que je te fournis, merci de prendre le temps de les offusquer en détails, je pense notamment à tout ce qui est adresses IP (notamment v6, par définition routées depuis le net, mais v4 idéalement aussi), adresses MAC, nom de périphériques, ... N'hésite pas à me partager ton code avant publication si c'est plus simple pour toi, je m'occuperai de l'offuscation.
C'est exactement ça , je mock l'api aiosysbus à partir de tes données. Bien sur on offusque tout le fichie des données sensibles.
Du coup, je te propose qu'on bascule nos échanges sur le repo aiosysbus. https://github.com/cyr-ius/aiosysbus/issues/39
De là , je fais une nouvelle branche que j'appel asyncio , je prépare l'api en mode asynchrone et un fichier example complet.
Ensuite , il te suffirait de lancer un python3.11 dans un venv , de faire un pip -r requirements.txt et de jouer le fichier example.py Si il ne plante pas. On est bon , on a une API opérationnelle. On pourrait ainsi l'utiliser dans l'addon Livebox de Home Assistant
@brenard , je viens de publier la version 2.0.0-beta en se basant sur la refonte du module aiosysbus que vous avez fait avec @epenet Si tu souhaites tester cette version. Y a plus qu à activer le mode Beta de HACS Comme d' hab , n ayant pas de continue livebox , j ai pas pu mocker les appels . J ai bouchonné quuelques appels. Mais un tour complet de test est nécessaire
J ai garder le vieux fichier de diagnostic.py. Et si le retour est positif, je verrais à faire une seconde refonte par une class Entity qui chapotte les class des sensors car on a pas mal de répétitions de code sur les init
Voir la issue #93 pour tracer les feedbacks
Désolé, j'étais sur d'autres devs en ce moment, je viens seulement de tester (cf. #93). À ce sujet, je viens de voir que le diag était HS en version 2.0.7 :
2024-01-20 13:49:49.189 ERROR (MainThread) [aiohttp.server] Error handling request
Traceback (most recent call last):
File "/usr/local/lib/python3.11/site-packages/aiohttp/web_protocol.py", line 452, in _handle_request
resp = await request_handler(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aiohttp/web_app.py", line 543, in _handle
resp = await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aiohttp/web_middlewares.py", line 114, in impl
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/security_filter.py", line 85, in security_filter_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/forwarded.py", line 100, in forwarded_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/request_context.py", line 28, in request_context_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/ban.py", line 80, in ban_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/auth.py", line 233, in auth_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/headers.py", line 31, in headers_middleware
response = await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/view.py", line 149, in handle
result = await handler(request, **request.match_info)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/diagnostics/__init__.py", line 249, in get
data = await info.config_entry_diagnostics(hass, config_entry)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/livebox/diagnostics.py", line 104, in async_get_config_entry_diagnostics
coordinator.api.system.async_get_remoteaccess,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'System' object has no attribute 'async_get_remoteaccess
Je regarde ça plus tard.
async_get_remoteaccess n'existe pas dans aiosysbus. On a du se rater quand on a testé. J'ai commenté l'appel :async_get_remoteaccess
async_get_remoteaccess n'existe pas dans aiosysbus. On a du se rater quand on a testé. J'ai commenté l'appel :async_get_remoteaccess
Pour moi, c'est async_get_remoteauth qui a pris sa place et qui appel une méthode côté Livebox qui n'existe pas (Remoteauth.get vs RemoteAccess.get). De mon côté, j'ai fais des tests en renomant tout remoteauth en remoteaccess (comme avant) et les méthodes fonctionnent correctement. C'est également ce que je retrouve dans la doc de l'api dans le projet LiveboxMonitor.
async_get_remoteaccess n'existe pas dans aiosysbus. On a du se rater quand on a testé. J'ai commenté l'appel :async_get_remoteaccess
Pour moi, c'est async_get_remoteauth qui a pris sa place et qui appel une méthode côté Livebox qui n'existe pas (Remoteauth.get vs RemoteAccess.get). De mon côté, j'ai fais des tests en renomant tout remoteauth en remoteaccess (comme avant) et les méthodes fonctionnent correctement. C'est également ce que je retrouve dans la doc de l'api dans le projet LiveboxMonitor.
J'ai oublié de te faire une PR à ce sujet tout à l'heure, mais je tâcherai de te faire ça demain.
I see you publish this new feature and I tested it on my dev environment. Their was some mistakes about the name of API methods which I first corrected (
api.ddns.*
vsapi.dyndns.*
,api.profile.*
vsapi.profiles.*
, ...), but their was also errors about async methods not await (andapi_raw
was empty), so I reworked on the method to buildapi_raw
.After, I was able to download a diagnostics JSON file, but it's taken around 30 seconds to build it and its size was approximately 50MB. I noticed that it was mostly due to 3 called methods, so I commented them. Now, the file is generated in 4 seconds and its size is approximately 1.3MB.
Furthermore, many methods always failed, so I firstly put the produced exception in the diagnostics file and I commented them (with exception). I think we could at least remove some of them that required arguments.
Please let me know what you think.