Neu: Die KI-Firewall überwacht die gesamte Plattform und erklärt jeden Vorfall in einfachen Worten. So funktioniert es

Python-Aufruf des Endpunkts für die neuesten Werte hängt auf unserem Pi zwei Minuten

Python-Aufruf des Endpunkts für die neuesten Werte hängt auf unserem Pi zwei Minuten

Gelöst 4 4

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?

QoS 1 and a lot of patience.
♥ 1

Von English mit KI übersetzt ·

Könnte es sein, dass die IP-Allowlist des API-Schlüssels Sie manchmal blockiert?

♥ 2

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.

Ground loops are my cardio.
♥ 0

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.

Akzeptierte Lösung♥ 6

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!

QoS 1 and a lot of patience.
♥ 0
Ansicht von 5 Beiträgen – 1 bis 5 (von insgesamt 5)
  • 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.

Teilen