Pi'mizde Python ile son değerler uç noktasına yapılan çağrı iki dakika takılıyor
Yapay zekâ tarafından English dilinden çevrildi ·
Otelimde bir lobi ekranı çalıştırıyorum; mutfak buzdolabı sıcaklıklarını gösteren bir Pi 4. Bir Python betiği, API anahtarıyla (Read only preset, yani salt okunur ön ayar) Hermetry’den son değerleri her 5 dakikada bir istiyor:
GET /tenant/<tenantId>/api/telemetry/latest?kind=iot_device&entityId=<deviceId>&keys=temperature
Authorization: Bearer sk_live_...
Çağrıların çoğu yaklaşık 2 dakika sürüyor, bazıları zaman aşımına uğruyor, ardından bazen biri anında yanıt veriyor. Aynı Wi-Fi’deki dizüstü bilgisayarımdan ise her zaman anında. Pi’de karşılaştırmak için curl denedim:
curl -4 ... -> 0.3 s
curl -6 ... -> hangs, then "Failed to connect"
ISP’miz geçen ay router değiştirdikten sonra IPv6 veriyor. IPv6 konusunda pek bilgim yok; Pi’ye sadece eski yöntemi kullandırabilir miyim?
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?
Yapay zekâ tarafından English dilinden çevrildi ·
Belki de API anahtarının IP izin listesi (allowlist) bazen erişimini engelliyordur?
Could it be the API key’s IP allowlist blocking you sometimes?
Yapay zekâ tarafından English dilinden çevrildi ·
Bu, sizi hemen bir 401 veya 403 hatasına götürür, takılmaya değil. En kolayı, sysctl ile Pi üzerinde IPv6’yı kapatmaktır.
That would give you a 401 or 403 straight away, not a hang. Easiest is to turn IPv6 off on the Pi with sysctl.
Yapay zekâ tarafından English dilinden çevrildi ·
ISP IPv6’yı açtıktan sonra şubelerimizden birinde tam olarak bunu yaşadık. Pi bir IPv6 adresi alıyor, önce onu deniyor, rota bozuk olduğu için IPv4’e geçmeden önce zaman aşımını bekliyor. Curl testiniz bunu gösteriyor.IPv6’yı her şey için kapatmak istemedim, bu yüzden Pi’ye IPv4’ü tercih etmesini söyledim. /etc/gai.conf dosyasındaki şu satırın yorumunu kaldırın:
precedence ::ffff:0:0/96 100
Yeni işlemler için yeniden başlatmaya gerek yok, sadece betiğinizi yeniden çalıştırın. Yalnızca betik için istiyorsanız, requests’i içe aktarmadan önce Python’da zorlayabilirsiniz:
import socket
import urllib3.util.connection as conn
conn.allowed_gai_family = lambda: socket.AF_INET
Owen’ın fikri de ileride iyi bir fikir olmaya devam ediyor. Çalınan bir anahtarın başka yerlerde işe yaramaması için otelin genel IPv4 adresini anahtarın IP izin listesine ekleyin.
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.
Yapay zekâ tarafından English dilinden çevrildi ·
gai.conf satırı işe yaradı, artık her çağrı bir saniyenin altında tamamlanıyor. Dediğiniz gibi genel IPv4 adresimizi de anahtarın izin listesine ekledim. Teşekkürler 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!
- Bu konuyu yanıtlamak için giriş yapmış olmalısınız.
Sohbete katılın
Soru sormak ve yanıtlamak, yararlı gönderileri beğenmek ve sorununuzu çözen yanıtı işaretlemek için oturum açın. Her katkı puan ve seviye kazandırır.

