Python-Aufruf des Endpunkts für die neuesten Werte hängt auf unserem Pi zwei Minuten
Von English mit KI übersetzt ·
Ich betreibe in unserem Hotel einen kleinen Lobby-Bildschirm, einen Pi 4, der die Temperaturen der Küchenkühlschränke anzeigt. Ein Python-Skript fragt Hermetry alle 5 Minuten mit einem API-Schlüssel (Preset „Read only“) nach den neuesten Werten:
GET /tenant/<tenantId>/api/telemetry/latest?kind=iot_device&entityId=<deviceId>&keys=temperature
Authorization: Bearer sk_live_...
Die meisten Aufrufe dauern etwa 2 Minuten, manche laufen in einen Timeout, und manchmal kommt einer sofort zurück. Von meinem Laptop im selben WLAN ist es immer sofort. Zum Vergleich habe ich curl auf dem Pi ausprobiert:
curl -4 ... -> 0.3 s
curl -6 ... -> hangs, then "Failed to connect"
Unser Internetanbieter vergibt seit einem Routertausch letzten Monat IPv6. Ich kenne mich mit IPv6 nicht gut aus. Kann ich den Pi einfach auf das alte Verfahren umstellen?
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?
Von English mit KI übersetzt ·
Könnte es sein, dass die IP-Allowlist des API-Schlüssels Sie manchmal blockiert?
Could it be the API key’s IP allowlist blocking you sometimes?
Von English mit KI übersetzt ·
Das würde Ihnen sofort einen 401- oder 403-Fehler liefern, nicht ein Hängen. Am einfachsten ist es, IPv6 auf dem Pi mit sysctl abzuschalten.
That would give you a 401 or 403 straight away, not a hang. Easiest is to turn IPv6 off on the Pi with sysctl.
Von English mit KI übersetzt ·
Genau das hatten wir an einem unserer Standorte, nachdem der ISP IPv6 aktiviert hat. Der Pi bekommt eine IPv6-Adresse, versucht sie zuerst, die Route ist kaputt und er wartet bis zum Timeout, bevor er auf IPv4 zurückfällt. Dein curl-Test zeigt das.Ich wollte IPv6 nicht überall deaktivieren, also habe ich dem Pi gesagt, dass er IPv4 bevorzugen soll. Entkommentiere diese Zeile in /etc/gai.conf:
precedence ::ffff:0:0/96 100
Ein Neustart ist für neue Prozesse nicht nötig, starte einfach dein Skript neu. Wenn du es nur für das Skript willst, kannst du es in Python vor dem Import von requests erzwingen:
import socket
import urllib3.util.connection as conn
conn.allowed_gai_family = lambda: socket.AF_INET
Owens Idee ist für später trotzdem gut. Trag die öffentliche IPv4 des Hotels in die IP-Allowlist des Schlüssels ein, damit ein gestohlener Schlüssel anderswo nutzlos ist.
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.
Von English mit KI übersetzt ·
Die Zeile in gai.conf hat das Problem behoben, jeder Aufruf dauert jetzt unter einer Sekunde. Außerdem habe ich unsere öffentliche IPv4-Adresse wie von dir vorgeschlagen zur Allowlist des Schlüssels hinzugefügt. Danke 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!
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.
Mitdiskutieren
Melde dich an, um Fragen zu stellen und zu beantworten, hilfreiche Beiträge mit „Gefällt mir“ zu markieren und die Antwort zu kennzeichnen, die dein Problem gelöst hat. Jeder Beitrag bringt Punkte und Stufen.

