Yeni: Yapay zekâ güvenlik duvarı tüm platformu izliyor ve her olayı sade bir dille açıklıyor. Nasıl çalıştığını görün

Pi'mizde Python ile son değerler uç noktasına yapılan çağrı iki dakika takılıyor

Pi'mizde Python ile son değerler uç noktasına yapılan çağrı iki dakika takılıyor

Çözüldü 4 4

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?

QoS 1 and a lot of patience.
♥ 1

Yapay zekâ tarafından English dilinden çevrildi ·

Belki de API anahtarının IP izin listesi (allowlist) bazen erişimini engelliyordur?

♥ 2

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.

Ground loops are my cardio.
♥ 0

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.

Kabul edilen çözüm♥ 6

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!

QoS 1 and a lot of patience.
♥ 0
5 yazı görüntüleniyor – 1 ile 5 arası (toplam 5)
  • 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.

Paylaş