BLE sensörler: eşleştirip bağlanmak mı, yayınları dinlemek mi? Pi gateway bağlantıları düşüyor
Merhaba,
Bir soğuk hava deposunda 30 adet BLE sıcaklık/nem sensörünü bir Raspberry Pi 4 ile okuyup Hermetry’ye gateway olarak gönderiyorum (v1/gw/telemetry, her sensör bir child). Şu an Python’da bleak ile her sensöre GATT üzerinden bağlanıp karakteristiği okuyorum, sonra bağlantıyı kapatıyorum.
Sorunlar:
- 30 sensörü sırayla dolaşmak 2-3 dakika sürüyor, bazı sensörlere bağlanamıyor (
TimeoutError,org.bluez.Error.Failed: le-connection-abort-by-local). - Aynı anda bağlı kalmaya çalışınca 7-8 bağlantıdan sonra Pi yenilerini kabul etmiyor.
- Sensörlerin pili beklenenden hızlı bitiyor, üretici “sürekli bağlantı pili yer” diyor.
Sensörlerin bir kısmı eşleştirme (pairing) istiyor, bir kısmı istemiyor. Eşleştirmeli ve eşleştirmesiz iletişim arasında ne fark var, hangisini kullanmalıyım?
Pi başına 30 sensör çok mu? Belki iki Pi’ye bölmek gerekir?
Bence sorun sayı değil, bağlanma yöntemi.
Aslan Bey haklı. Evde 40’a yakın BLE sensörü tek Pi ile okuyorum, bağlanmadan.
BLE’de iki ayrı dünya var. Yayın (advertising): sensör kimseye bağlanmadan saniyede bir-iki kez küçük bir paket yayınlıyor, içinde sıcaklık ve nem var. Dinleyen sayısında sınır yok, sensör tarafında en az pil harcayan yol bu. Bağlantı (GATT): Pi sensöre bağlanıp karakteristik okuyor. Bağlantı sayısı adaptöre göre sınırlı (Pi’de pratikte 7-10), her bağlantı iki tarafta da enerji harcıyor. Eşleştirme (pairing/bonding) bağlantının üstüne şifreleme ekliyor; ayar yazmak veya şifreli veri okumak için gerekiyor, sadece ölçüm okumak için gerekmiyor.
Bu tip sensörlerin çoğu ölçümü yayın paketinde de veriyor (bazıları özel firmware ile). bleak’te pasif tarama ile dinle:
from bleak import BleakScanner
son = {}
def cb(dev, adv):
if dev.address in SENSORLER:
t, h = coz(adv.service_data) # sensöre göre çözümleme
son[SENSORLER[dev.address]] = {"values": {"sicaklik": t, "nem": h}}
scanner = BleakScanner(detection_callback=cb)
Dakikada bir son sözlüğünü tek mesajla gönder: v1/gw/telemetry içinde her child adının altında bir kayıt. 30 sensör tek mesaj, kota açısından da iyi.
Dezavantaj: yayın şifresiz, yakındaki herkes okuyabilir ve taklit edebilir. Bazı firmware’ler şifreli yayın destekliyor (bindkey ile), ilaç gibi bir yer ise ona bakın.
İlaç tarafından bakınca o son paragraf önemli: şifresiz yayında veri bütünlüğünü denetçiye açıklamak zor, biz şifreli yayına geçtik.
Pasif taramaya geçtim, 30 sensörün hepsi 10 saniye içinde görünüyor, hiç bağlantı hatası yok. Dakikada bir tek gw mesajı gidiyor. Sensörlerden 12’si şifreli yayını destekliyor, onlara bindkey tanımladık, kalanları değiştirme listesine koyduk.
Bizde de aynı sensörlerden var, hasta odalarında. Bu konuyu ekiple paylaşıyorum.
- You must be logged in to reply to this topic.
Join the conversation
Sign in to ask and answer, like helpful posts and mark the reply that solved your problem. Every contribution earns points and levels.

