La llamada en Python al endpoint de últimos valores se cuelga dos minutos en nuestra Pi
Traducido del English por IA ·
Tengo una pequeña pantalla en el lobby de nuestro hotel, una Pi 4 que muestra las temperaturas de los refrigeradores de la cocina. Un script de Python pide a Hermetry los últimos valores cada 5 minutos con una clave de API (preset «Read only»):
GET /tenant/<tenantId>/api/telemetry/latest?kind=iot_device&entityId=<deviceId>&keys=temperature
Authorization: Bearer sk_live_...
La mayoría de las llamadas tardan unos 2 minutos, algunas agotan el tiempo y, a veces, una responde al instante. Desde mi portátil en la misma Wi-Fi siempre es instantáneo. Probé curl en la Pi para comparar:
curl -4 ... -> 0.3 s
curl -6 ... -> hangs, then "Failed to connect"
Nuestro proveedor de internet asigna IPv6 desde que cambió el router el mes pasado. No sé mucho de IPv6, ¿puedo simplemente hacer que la Pi use el método antiguo?
I run a little lobby screen at our hotel, a Pi 4 that shows the kitchen fridge temperatures. A Python script asks Hermetry for the latest values every 5 minutes with an API key (Read only preset):
GET /tenant/<tenantId>/api/telemetry/latest?kind=iot_device&entityId=<deviceId>&keys=temperature
Authorization: Bearer sk_live_...
Most calls take about 2 minutes, some time out, then sometimes one is instant. From my laptop on the same Wi-Fi it is always instant. I tried curl on the Pi to compare:
curl -4 ... -> 0.3 s
curl -6 ... -> hangs, then "Failed to connect"
Our ISP hands out IPv6 since a router swap last month. I don’t know much about IPv6, can I just make the Pi use the old way?
Traducido del English por IA ·
¿Podría ser que la lista de IP permitidas de la clave de API te esté bloqueando a veces?
Could it be the API key’s IP allowlist blocking you sometimes?
Traducido del English por IA ·
Eso le daría un 401 o 403 de inmediato, no un bloqueo. Lo más fácil es desactivar IPv6 en la Pi con sysctl.
That would give you a 401 or 403 straight away, not a hang. Easiest is to turn IPv6 off on the Pi with sysctl.
Traducido del English por IA ·
Nos pasó exactamente esto en una de nuestras propiedades después de que el ISP activara IPv6. La Pi obtiene una dirección IPv6, la prueba primero, la ruta está rota y espera al timeout antes de volver a IPv4. Tu prueba con curl lo demuestra.No quería desactivar IPv6 para todo, así que le indiqué a la Pi que prefiera IPv4. Descomenta esta línea en /etc/gai.conf:
precedence ::ffff:0:0/96 100
No hace falta reiniciar para los procesos nuevos, basta con reiniciar tu script. Si solo lo quieres para el script, puedes forzarlo en Python antes de importar requests:
import socket
import urllib3.util.connection as conn
conn.allowed_gai_family = lambda: socket.AF_INET
Y la idea de Owen sigue siendo buena para más adelante. Pon la IPv4 pública del hotel en la lista de IP permitidas de la clave, para que una clave robada no sirva en otro lugar.
Had exactly this at one of our properties after the ISP turned IPv6 on. The Pi gets an IPv6 address, tries it first, the route is broken and it waits for the timeout before falling back to IPv4. Your curl test shows that.
I didn’t want to switch IPv6 off for everything, so I told the Pi to prefer IPv4. Uncomment this line in /etc/gai.conf:
precedence ::ffff:0:0/96 100
No reboot needed for new processes, just restart your script. If you only want it for the script, you can force it in Python before importing requests:
import socket
import urllib3.util.connection as conn
conn.allowed_gai_family = lambda: socket.AF_INET
And Owen’s idea is still a good one for later. Put the hotel’s public IPv4 in the key’s IP allowlist so a stolen key is useless elsewhere.
Traducido del English por IA ·
La línea de gai.conf lo solucionó, ahora cada llamada tarda menos de un segundo. También añadí nuestra IPv4 pública a la lista de permitidos de la clave, como dijiste. ¡Gracias David!
The gai.conf line did it, every call is under a second now. I also added our public IPv4 to the key’s allowlist like you said. Thanks David!
- Debes estar registrado para responder a este debate.
Únete a la conversación
Inicia sesión para preguntar y responder, dar me gusta a las publicaciones útiles y marcar la respuesta que resolvió tu problema. Cada aportación suma puntos y niveles.

