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

BLE sensörler: eşleştirip bağlanmak mı, yayınları dinlemek mi? Pi gateway bağlantıları düşüyor

BLE sensörler: eşleştirip bağlanmak mı, yayınları dinlemek mi? Pi gateway bağlantıları düşüyor

Çözüldü 6 6

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?

Kayıtta yoksa olmamıştır.
♥ 2

Pi başına 30 sensör çok mu? Belki iki Pi’ye bölmek gerekir?

Ağ geçidi yine bağlanıyor…
♥ 0

Bence sorun sayı değil, bağlanma yöntemi.

♥ 2

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.

Kabul edilen çözüm♥ 9

İ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.

♥ 0

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.

Kayıtta yoksa olmamıştır.
♥ 1

Bizde de aynı sensörlerden var, hasta odalarında. Bu konuyu ekiple paylaşıyorum.

Modbus sadece register'dır, ta ki olmayana kadar.
♥ 1
7 yazı görüntüleniyor – 1 ile 7 arası (toplam 7)
  • 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ş