aioble peripheral may need throttling to avoid random disconnects
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 25/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Stack tecnológico
- python
- Área
- embedded-iot
Línea de trabajo
Revisa la ruta de notificaciones de características de aioble junto con el código conceptual indicado y su comportamiento con un retraso de 50 ms. Confirma cómo las notificaciones sucesivas y rápidas provocan desconexiones del cliente en la configuración indicada de ESP32-C3 y MicroPython. Se considerará terminado cuando se proporcione un enfoque acordado de limitación de frecuencia o advertencia que evite la inestabilidad indicada.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
I am using AIOBLE (latest version as per December 2022) on ESP32-C3 with Micropython 1.19 (LOLIN D32 board).
My app uses 3 BT LE services (peripheral role),:
- a custom service for requests (with 1 write-only and 1notify-only characteristics)
- a battery_service
- a device_information service
I observed frequent client disconnects to client (I tested with another ESP32 and with NRFConnect app on Android).
The problem seems to happen more frequently when many requests were done in a rapid succession. In such conditions, the peripheral stopped responding, and disconnected the clients after a while (10-20s). Once the clients reconnected, everything worked again.
I was able to solve the problem after one week of testing, by imposing a minimum delay between all characteristics notifications (in my case 50 ms) : now I don't have any disconnects and everything is stable.
Concept code:
since_last = time.ticks_ms() - __last_notification_ms
while _MIN_BLUETOOTH_DELAY_MS > since_last > 0 and not force:
await asyncio.sleep_ms(_MIN_BLUETOOTH_DELAY_MS - since_last)
# Need to recheck because another transmission may have happened during await period
since_last = time.ticks_ms() - __last_notification_ms
data = __get_notification_data()
__status_characteristic.write(data, True)
__last_notification_ms = time.ticks_ms()
I guess there is a minimum delay for physical transmission over bluetooth and handling by RTOS and if we push too many notifications in a short period, something goes wrong. I wrote this issue for informing other AIOBLE users and for suggesting defining a rate limit inside the aioble library, or a warning, because this was quite difficult to troubleshoot.
- Lenguaje dominante
- Python
- Estrellas
- 2.9k
- Forks
- 1.1k
- Merge medio
- 7 d 6 h
- PR fusionados (30 d)
- 3
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de micropython/micropython-lib
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
micropython/micropython-lib#1074 ·
-
needs-info
Dificultad 1/5 Menos de una hora Aptitud para principiantes 72/100
micropython/micropython-lib#943 · 1 comentario ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
micropython/micropython-lib#931 · 1 comentario ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 62/100
micropython/micropython-lib#795 · 2 comentarios ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
micropython/micropython-lib#762 ·
Todos los issues de micropython/micropython-lib
Issues similares
-
🐛 Bug 🔔 Pending processing
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
jumpserver/jumpserver#17584 ·
-
link-check link-check:sphinx-theme
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
qgis/QGIS-Documentation#11275 ·
-
bug priority:normal ready-for-dev
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
OpenHands/extensions#626 · 1 comentario ·
-
Change observation tooltip text Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
CSCfi/sd-search-api#39 ·